From 5df074b9cc7702e3737453d2be6f6a47ee868360 Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Fri, 24 Jul 2026 12:50:28 +0200 Subject: [PATCH 1/3] Refactor integral estimation and error handling --- .../AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp b/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp index 8297c1f..ef527fc 100644 --- a/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp +++ b/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp @@ -35,6 +35,9 @@ auto AdaptiveQuadratureBase::adaptQuadrature(const Function& f) -> Long using const_Iterator = typename std::vector::const_iterator; + LongScalar res; + LongScalar estimatedErr; + m_hasConverged = false; if (m_out) { fmt::print(m_out, "#Iteration integral estimated_error relative_tol absolute_tol\n"); } @@ -60,7 +63,7 @@ auto AdaptiveQuadratureBase::adaptQuadrature(const Function& f) -> Long m_intervals[maxErrIdx] = Interval(a, midPoint); std::tie(m_subIntergrals[maxErrIdx], m_subIntergralsErr[maxErrIdx]) = estimateIntegral(f, a, midPoint); // second interval - const auto [res, estimatedErr] = estimateIntegral(f, midPoint, b); + std::tie(res, estimatedErr) = estimateIntegral(f, midPoint, b); m_intervals.emplace_back(std::move(midPoint), b); m_subIntergrals.push_back(res); m_subIntergralsErr.push_back(estimatedErr); @@ -249,9 +252,7 @@ auto AdaptiveQuadratureBase::remapAndIntegrate(const Function& f) -> Lo const LongScalar fx = f(t / (1 - t*t)); const Scalar dxdt = (1 + t*t) / ((1 - t*t)*(1 - t*t)); - return isnan(fx*dxdt) - ? LongScalar{} - : fx*dxdt; + return fx*dxdt; }; return integrate(fref, -1 + eps, 1 - eps); From e4bf178b0510daf329f4242f56cc9eea0978b423 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Jul 2026 11:18:59 +0000 Subject: [PATCH 2/3] Restore isnan guard in remapAndIntegrate to handle NaN/Inf at endpoints --- .../LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp b/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp index ef527fc..6d9d28e 100644 --- a/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp +++ b/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp @@ -252,7 +252,9 @@ auto AdaptiveQuadratureBase::remapAndIntegrate(const Function& f) -> Lo const LongScalar fx = f(t / (1 - t*t)); const Scalar dxdt = (1 + t*t) / ((1 - t*t)*(1 - t*t)); - return fx*dxdt; + return isnan(fx*dxdt) + ? LongScalar{} + : fx*dxdt; }; return integrate(fref, -1 + eps, 1 - eps); From 20bbfdd3cf74b71d532fe6be03e76b1367140300 Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Fri, 24 Jul 2026 13:20:18 +0200 Subject: [PATCH 3/3] Fix integration limits in AdaptiveQuadratureBase_impl.hpp --- .../LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp b/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp index 6d9d28e..6a60cb9 100644 --- a/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp +++ b/include/LNIT/AdaptiveQuadratures/AdaptiveQuadratureBase_impl.hpp @@ -257,7 +257,7 @@ auto AdaptiveQuadratureBase::remapAndIntegrate(const Function& f) -> Lo : fx*dxdt; }; - return integrate(fref, -1 + eps, 1 - eps); + return integrate(fref, -1, 1); } template template