Skip to content

Fix Brent's parabolic step and evaluate the bounds - #1312

Merged
pkofod merged 3 commits into
masterfrom
pkm/brent-parabolic-bound
Oct 26, 2026
Merged

pkofod merged 3 commits into
masterfrom
pkm/brent-parabolic-bound

Conversation

@pkofod

@pkofod pkofod commented Oct 26, 2026

Copy link
Copy Markdown
Member

Three changes to Brent, one commit each.

  1. The lower bracket test for the parabolic step. The step x + p/q should be accepted only if it lands inside the bracket: p > q*(a - x) and p < q*(b - x), as in Brent's routine and in fmin. The lower test read p < q*(x - a). That rejected valid steps longer than x - a, which then fell back to golden section, and it let steps below a through to the guard that replaces them with a step of x_tol. On exp(0.2x) - 0.2e^0.1 x over [0, 1] the run took 24 evaluations; it now takes 9.
  2. evaluate_bounds = true. On a function that is flat over much of the interval, the first interior point can sit on a plateau above one of the bounds, and the search then shrinks away from the minimum. This evaluates both bounds and starts from the lowest of the three points, as NLSolvers' BrentMin does. All seven examples in Brent still broken for flat functions :( #828 now return the minimum. It costs two evaluations, and Brent(evaluate_bounds = false) keeps Brent's original method. Brent remains a local method: this fixes cases where the first interior point lands on a plateau above a bound. The docstring described Brent's root finder (bisection, secant, inverse quadratic interpolation); it now describes the minimizer and the new keyword.
  3. The direction of the minimum step. A step shorter than x_tol now goes copysign(x_tol, step), as in Brent's routine. step > 0 ? x_tol : -x_tol stepped down for a step of +0.0.

Tests:

  • an evaluation-count test that fails on master (24 > 12);
  • the Brent still broken for flat functions :( #828 cases;
  • the two-evaluation cost of evaluate_bounds;
  • the time-limit test, which now expects 3 evaluations by default and 1 with evaluate_bounds = false.

The full suite passes on Julia 1.13.2.

Closes #828, closes #1036.

🤖 Generated with Claude Code

pkofod and others added 3 commits October 26, 2026 08:47
Brent accepts the parabolic step x + p/q only if it lands inside the
bracket, p > q*(a - x) and p < q*(b - x), as in Brent's routine and its
Fortran translation fmin. The lower test read p < q*(x - a). That
rejected valid steps longer than x - a, which then fell back to golden
section, and it let steps below a through to the guard that replaces
them with a step of x_tol. On exp(0.2x) - 0.2e^0.1 x over [0, 1] the
run took 24 evaluations; it now takes 9.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On a function that is flat over much of the interval, the first interior
point can sit on a plateau above one of the bounds, and Brent then shrinks
the interval away from the minimum: -sign(x) on [-2, 1] returned 1, and
x > 1 ? 2 : x^2 on [-1, 10] returned 2 at x = 3.2 (#828). Evaluate the
objective at both bounds as well and start from the lowest of the three
points, as NLSolvers' BrentMin does. The search only moves to lower
points, so the result is never above either bound. This costs two
evaluations;
Brent(evaluate_bounds = false) keeps Brent's original method.

The docstring described Brent's root finder (bisection, secant, inverse
quadratic interpolation). Describe the minimizer, golden-section search
with parabolic interpolation, and the new keyword.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When the proposed step is shorter than x_tol, Brent steps x_tol in its
direction, copysign(tol, d) in Brent's routine. The code used
step > 0 ? x_tol : -x_tol, which steps down for a step of +0.0 (#1036).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia vlts)

Time benchmarks
master a2e24a7... master / a2e24a7...
multivariate/problems/noisy_quadratic/8/BFGS/BackTracking 17.2 ± 0.44 μs 17.2 ± 0.51 μs 1 ± 0.039
multivariate/problems/noisy_quadratic/8/BFGS/HagerZhang 0.102 ± 0.0021 ms 0.101 ± 0.0025 ms 1.01 ± 0.032
multivariate/problems/noisy_quadratic/8/ConjugateGradient/BackTracking 8.89 ± 0.35 μs 8.92 ± 0.38 μs 0.997 ± 0.058
multivariate/problems/noisy_quadratic/8/ConjugateGradient/HagerZhang 0.0737 ± 0.0019 ms 0.0729 ± 0.0021 ms 1.01 ± 0.039
multivariate/problems/noisy_quadratic/8/LBFGS/BackTracking 17.6 ± 0.52 μs 17.4 ± 0.58 μs 1.01 ± 0.045
multivariate/problems/noisy_quadratic/8/LBFGS/HagerZhang 0.0741 ± 0.0014 ms 0.0743 ± 0.0028 ms 0.997 ± 0.042
multivariate/problems/rosenbrock/100/KrylovTrustRegion 0.162 ± 0.0046 ms 0.162 ± 0.0096 ms 1 ± 0.066
multivariate/problems/rosenbrock/100/Newton 0.815 ± 0.024 ms 0.805 ± 0.028 ms 1.01 ± 0.046
multivariate/problems/rosenbrock/100/NewtonTrustRegion 3.93 ± 0.21 ms 4.01 ± 0.16 ms 0.98 ± 0.066
multivariate/problems/rosenbrock/2/KrylovTrustRegion 14.2 ± 0.54 μs 14.3 ± 0.5 μs 0.995 ± 0.052
multivariate/problems/rosenbrock/2/Newton 19.6 ± 0.54 μs 19.7 ± 0.67 μs 0.994 ± 0.044
multivariate/problems/rosenbrock/2/NewtonTrustRegion 25.9 ± 0.94 μs 25.8 ± 0.86 μs 1 ± 0.05
multivariate/problems/rosenbrock/20/KrylovTrustRegion 0.0357 ± 0.00092 ms 0.0363 ± 0.0013 ms 0.982 ± 0.044
multivariate/problems/rosenbrock/20/Newton 0.0727 ± 0.0014 ms 0.0722 ± 0.0022 ms 1.01 ± 0.036
multivariate/problems/rosenbrock/20/NewtonTrustRegion 0.234 ± 0.0076 ms 0.233 ± 0.0084 ms 1 ± 0.049
multivariate/problems/saddle/100/KrylovTrustRegion 0.0611 ± 0.0017 ms 0.0604 ± 0.0019 ms 1.01 ± 0.042
multivariate/problems/saddle/100/Newton 0.159 ± 0.0038 ms 0.158 ± 0.0052 ms 1.01 ± 0.041
multivariate/problems/saddle/100/NewtonTrustRegion 2.11 ± 0.063 ms 2.1 ± 0.061 ms 1 ± 0.042
multivariate/problems/saddle/2/KrylovTrustRegion 5.76 ± 0.42 μs 5.44 ± 0.42 μs 1.06 ± 0.11
multivariate/problems/saddle/2/Newton 4.34 ± 0.33 μs 4.29 ± 0.3 μs 1.01 ± 0.1
multivariate/problems/saddle/2/NewtonTrustRegion 9.46 ± 0.52 μs 9.36 ± 0.59 μs 1.01 ± 0.085
multivariate/problems/saddle/20/KrylovTrustRegion 12 ± 0.42 μs 11.8 ± 0.47 μs 1.01 ± 0.054
multivariate/problems/saddle/20/Newton 15.6 ± 0.65 μs 15.6 ± 0.71 μs 1 ± 0.062
multivariate/problems/saddle/20/NewtonTrustRegion 0.0862 ± 0.0021 ms 0.0849 ± 0.0026 ms 1.02 ± 0.04
multivariate/solvers/first_order/AdaMax 0.287 ± 0.0074 ms 0.282 ± 0.011 ms 1.02 ± 0.047
multivariate/solvers/first_order/Adam 0.283 ± 0.0084 ms 0.286 ± 0.0061 ms 0.989 ± 0.036
multivariate/solvers/first_order/BFGS 0.0519 ± 0.00099 ms 0.0513 ± 0.0019 ms 1.01 ± 0.042
multivariate/solvers/first_order/ConjugateGradient 0.121 ± 0.0022 ms 0.121 ± 0.0069 ms 0.999 ± 0.06
multivariate/solvers/first_order/GradientDescent 0.431 ± 0.0099 ms 0.423 ± 0.012 ms 1.02 ± 0.038
multivariate/solvers/first_order/LBFGS 0.0606 ± 0.0012 ms 0.0587 ± 0.0013 ms 1.03 ± 0.031
multivariate/solvers/first_order/MomentumGradientDescent 0.817 ± 0.015 ms 0.789 ± 0.019 ms 1.04 ± 0.032
multivariate/solvers/first_order/NGMRES 0.256 ± 0.0076 ms 0.258 ± 0.0088 ms 0.992 ± 0.045
multivariate/solvers/second_order/KrylovTrustRegion 0.254 ± 0.0057 ms 0.251 ± 0.0067 ms 1.01 ± 0.035
multivariate/solvers/second_order/Newton 0.0896 ± 0.0013 ms 0.0876 ± 0.0025 ms 1.02 ± 0.033
multivariate/solvers/second_order/NewtonTrustRegion 0.13 ± 0.0019 ms 0.125 ± 0.0042 ms 1.04 ± 0.038
time_to_load 0.211 ± 0.0035 s 0.227 ± 0.014 s 0.933 ± 0.06
Memory benchmarks
master a2e24a7... master / a2e24a7...
multivariate/problems/noisy_quadratic/8/BFGS/BackTracking 0.337 k allocs: 19 kB 0.337 k allocs: 19 kB 1
multivariate/problems/noisy_quadratic/8/BFGS/HagerZhang 1.38 k allocs: 0.101 MB 1.38 k allocs: 0.101 MB 1
multivariate/problems/noisy_quadratic/8/ConjugateGradient/BackTracking 0.135 k allocs: 8.97 kB 0.135 k allocs: 8.97 kB 1
multivariate/problems/noisy_quadratic/8/ConjugateGradient/HagerZhang 0.959 k allocs: 0.0778 MB 0.959 k allocs: 0.0778 MB 1
multivariate/problems/noisy_quadratic/8/LBFGS/BackTracking 0.343 k allocs: 20 kB 0.343 k allocs: 20 kB 1
multivariate/problems/noisy_quadratic/8/LBFGS/HagerZhang 0.983 k allocs: 0.0753 MB 0.983 k allocs: 0.0753 MB 1
multivariate/problems/rosenbrock/100/KrylovTrustRegion 0.328 k allocs: 0.352 MB 0.328 k allocs: 0.352 MB 1
multivariate/problems/rosenbrock/100/Newton 0.369 k allocs: 0.339 MB 0.369 k allocs: 0.339 MB 1
multivariate/problems/rosenbrock/100/NewtonTrustRegion 0.416 k allocs: 6.43 MB 0.416 k allocs: 6.43 MB 1
multivariate/problems/rosenbrock/2/KrylovTrustRegion 0.332 k allocs: 21.4 kB 0.332 k allocs: 21.4 kB 1
multivariate/problems/rosenbrock/2/Newton 0.365 k allocs: 18.7 kB 0.365 k allocs: 18.7 kB 1
multivariate/problems/rosenbrock/2/NewtonTrustRegion 0.343 k allocs: 0.0348 MB 0.343 k allocs: 0.0348 MB 1
multivariate/problems/rosenbrock/20/KrylovTrustRegion 0.343 k allocs: 0.0618 MB 0.343 k allocs: 0.0618 MB 1
multivariate/problems/rosenbrock/20/Newton 0.365 k allocs: 0.0334 MB 0.365 k allocs: 0.0334 MB 1
multivariate/problems/rosenbrock/20/NewtonTrustRegion 0.33 k allocs: 0.396 MB 0.33 k allocs: 0.396 MB 1
multivariate/problems/saddle/100/KrylovTrustRegion 0.107 k allocs: 0.209 MB 0.107 k allocs: 0.209 MB 1
multivariate/problems/saddle/100/Newton 0.096 k allocs: 0.351 MB 0.096 k allocs: 0.351 MB 1
multivariate/problems/saddle/100/NewtonTrustRegion 0.255 k allocs: 3.51 MB 0.255 k allocs: 3.51 MB 1
multivariate/problems/saddle/2/KrylovTrustRegion 0.114 k allocs: 7.16 kB 0.114 k allocs: 7.16 kB 1
multivariate/problems/saddle/2/Newton 0.088 k allocs: 5.52 kB 0.088 k allocs: 5.52 kB 1
multivariate/problems/saddle/2/NewtonTrustRegion 0.129 k allocs: 13 kB 0.129 k allocs: 13 kB 1
multivariate/problems/saddle/20/KrylovTrustRegion 0.102 k allocs: 22.1 kB 0.102 k allocs: 22.1 kB 1
multivariate/problems/saddle/20/Newton 0.088 k allocs: 20.7 kB 0.088 k allocs: 20.7 kB 1
multivariate/problems/saddle/20/NewtonTrustRegion 0.139 k allocs: 0.155 MB 0.139 k allocs: 0.155 MB 1
multivariate/solvers/first_order/AdaMax 0.341 k allocs: 7.36 kB 0.341 k allocs: 7.36 kB 1
multivariate/solvers/first_order/Adam 0.341 k allocs: 7.36 kB 0.341 k allocs: 7.36 kB 1
multivariate/solvers/first_order/BFGS 0.157 k allocs: 8.67 kB 0.157 k allocs: 8.67 kB 1
multivariate/solvers/first_order/ConjugateGradient 0.37 k allocs: 19.4 kB 0.37 k allocs: 19.4 kB 1
multivariate/solvers/first_order/GradientDescent 1.22 k allocs: 0.065 MB 1.22 k allocs: 0.065 MB 1
multivariate/solvers/first_order/LBFGS 0.22 k allocs: 13.6 kB 0.22 k allocs: 13.6 kB 1
multivariate/solvers/first_order/MomentumGradientDescent 1.62 k allocs: 0.0713 MB 1.62 k allocs: 0.0713 MB 1
multivariate/solvers/first_order/NGMRES 1.68 k allocs: 0.142 MB 1.68 k allocs: 0.142 MB 1
multivariate/solvers/second_order/KrylovTrustRegion 0.229 k allocs: 13.5 kB 0.229 k allocs: 13.5 kB 1
multivariate/solvers/second_order/Newton 0.174 k allocs: 10.3 kB 0.174 k allocs: 10.3 kB 1
multivariate/solvers/second_order/NewtonTrustRegion 0.253 k allocs: 23 kB 0.253 k allocs: 23 kB 1
time_to_load 0.153 k allocs: 14.5 kB 0.153 k allocs: 14.5 kB 1

A plot of the benchmark results has been uploaded as an artifact at .

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master a2e24a7... master / a2e24a7...
multivariate/problems/noisy_quadratic/8/BFGS/BackTracking 28.2 ± 7.5 μs 28.7 ± 7.4 μs 0.981 ± 0.36
multivariate/problems/noisy_quadratic/8/BFGS/HagerZhang 0.0804 ± 0.0014 ms 0.0802 ± 0.0016 ms 1 ± 0.026
multivariate/problems/noisy_quadratic/8/ConjugateGradient/BackTracking 10.7 ± 0.61 μs 10.9 ± 0.61 μs 0.981 ± 0.078
multivariate/problems/noisy_quadratic/8/ConjugateGradient/HagerZhang 0.124 ± 0.0036 ms 0.123 ± 0.0032 ms 1.01 ± 0.039
multivariate/problems/noisy_quadratic/8/LBFGS/BackTracking 15.6 ± 4 μs 16 ± 3.8 μs 0.973 ± 0.34
multivariate/problems/noisy_quadratic/8/LBFGS/HagerZhang 0.145 ± 0.003 ms 0.144 ± 0.0032 ms 1.01 ± 0.03
multivariate/problems/rosenbrock/100/KrylovTrustRegion 0.172 ± 0.0092 ms 0.171 ± 0.0087 ms 1.01 ± 0.074
multivariate/problems/rosenbrock/100/Newton 1.34 ± 0.041 ms 1.28 ± 0.022 ms 1.05 ± 0.037
multivariate/problems/rosenbrock/100/NewtonTrustRegion 6.02 ± 0.76 ms 5.97 ± 0.49 ms 1.01 ± 0.15
multivariate/problems/rosenbrock/2/KrylovTrustRegion 21.7 ± 4.1 μs 21.7 ± 5.2 μs 1 ± 0.3
multivariate/problems/rosenbrock/2/Newton 26.7 ± 5.2 μs 26.8 ± 5.2 μs 0.996 ± 0.27
multivariate/problems/rosenbrock/2/NewtonTrustRegion 0.036 ± 0.0083 ms 0.0356 ± 0.0083 ms 1.01 ± 0.33
multivariate/problems/rosenbrock/20/KrylovTrustRegion 0.0402 ± 0.0018 ms 0.0392 ± 0.002 ms 1.03 ± 0.068
multivariate/problems/rosenbrock/20/Newton 0.075 ± 0.0012 ms 0.0727 ± 0.0011 ms 1.03 ± 0.023
multivariate/problems/rosenbrock/20/NewtonTrustRegion 0.321 ± 0.013 ms 0.32 ± 0.013 ms 1 ± 0.058
multivariate/problems/saddle/100/KrylovTrustRegion 0.0616 ± 0.0025 ms 0.0602 ± 0.0038 ms 1.02 ± 0.076
multivariate/problems/saddle/100/Newton 0.254 ± 0.014 ms 0.244 ± 0.014 ms 1.04 ± 0.082
multivariate/problems/saddle/100/NewtonTrustRegion 3.17 ± 0.077 ms 3.16 ± 0.051 ms 1 ± 0.029
multivariate/problems/saddle/2/KrylovTrustRegion 8.35 ± 0.29 μs 8.53 ± 0.27 μs 0.979 ± 0.046
multivariate/problems/saddle/2/Newton 5.73 ± 0.37 μs 5.79 ± 0.39 μs 0.99 ± 0.093
multivariate/problems/saddle/2/NewtonTrustRegion 12.6 ± 1.1 μs 12.3 ± 1.3 μs 1.02 ± 0.14
multivariate/problems/saddle/20/KrylovTrustRegion 12.9 ± 4.8 μs 12.8 ± 5 μs 1 ± 0.54
multivariate/problems/saddle/20/Newton 16 ± 0.56 μs 15.6 ± 0.55 μs 1.02 ± 0.051
multivariate/problems/saddle/20/NewtonTrustRegion 0.113 ± 0.0027 ms 0.113 ± 0.003 ms 1.01 ± 0.036
multivariate/solvers/first_order/AdaMax 0.638 ± 0.0092 ms 0.639 ± 0.0096 ms 0.998 ± 0.021
multivariate/solvers/first_order/Adam 0.637 ± 0.0093 ms 0.637 ± 0.0095 ms 1 ± 0.021
multivariate/solvers/first_order/BFGS 0.142 ± 0.002 ms 0.14 ± 0.0022 ms 1.01 ± 0.021
multivariate/solvers/first_order/ConjugateGradient 0.234 ± 0.0092 ms 0.231 ± 0.01 ms 1.02 ± 0.06
multivariate/solvers/first_order/GradientDescent 1.04 ± 0.0082 ms 1.03 ± 0.012 ms 1.01 ± 0.014
multivariate/solvers/first_order/LBFGS 0.158 ± 0.0025 ms 0.158 ± 0.0025 ms 1 ± 0.022
multivariate/solvers/first_order/MomentumGradientDescent 2.09 ± 0.018 ms 2.06 ± 0.023 ms 1.01 ± 0.014
multivariate/solvers/first_order/NGMRES 1.06 ± 0.026 ms 1.05 ± 0.016 ms 1.01 ± 0.029
multivariate/solvers/second_order/KrylovTrustRegion 0.344 ± 0.0098 ms 0.348 ± 0.011 ms 0.989 ± 0.042
multivariate/solvers/second_order/Newton 0.234 ± 0.0093 ms 0.23 ± 0.0099 ms 1.01 ± 0.06
multivariate/solvers/second_order/NewtonTrustRegion 0.251 ± 0.01 ms 0.249 ± 0.011 ms 1.01 ± 0.06
time_to_load 0.358 ± 0.003 s 0.36 ± 0.0053 s 0.994 ± 0.017
Memory benchmarks
master a2e24a7... master / a2e24a7...
multivariate/problems/noisy_quadratic/8/BFGS/BackTracking 0.522 k allocs: 22.1 kB 0.522 k allocs: 22.1 kB 1
multivariate/problems/noisy_quadratic/8/BFGS/HagerZhang 1.06 k allocs: 0.0619 MB 1.06 k allocs: 0.0619 MB 1
multivariate/problems/noisy_quadratic/8/ConjugateGradient/BackTracking 0.164 k allocs: 8.08 kB 0.164 k allocs: 8.08 kB 1
multivariate/problems/noisy_quadratic/8/ConjugateGradient/HagerZhang 1.59 k allocs: 0.0832 MB 1.59 k allocs: 0.0832 MB 1
multivariate/problems/noisy_quadratic/8/LBFGS/BackTracking 0.246 k allocs: 12.4 kB 0.246 k allocs: 12.4 kB 1
multivariate/problems/noisy_quadratic/8/LBFGS/HagerZhang 1.93 k allocs: 0.109 MB 1.93 k allocs: 0.109 MB 1
multivariate/problems/rosenbrock/100/KrylovTrustRegion 0.561 k allocs: 0.36 MB 0.561 k allocs: 0.36 MB 1
multivariate/problems/rosenbrock/100/Newton 0.496 k allocs: 0.34 MB 0.496 k allocs: 0.34 MB 1
multivariate/problems/rosenbrock/100/NewtonTrustRegion 0.554 k allocs: 4.65 MB 0.554 k allocs: 4.65 MB 1
multivariate/problems/rosenbrock/2/KrylovTrustRegion 0.574 k allocs: 21.3 kB 0.574 k allocs: 21.3 kB 1
multivariate/problems/rosenbrock/2/Newton 0.492 k allocs: 18.4 kB 0.492 k allocs: 18.4 kB 1
multivariate/problems/rosenbrock/2/NewtonTrustRegion 0.458 k allocs: 0.0326 MB 0.458 k allocs: 0.0326 MB 1
multivariate/problems/rosenbrock/20/KrylovTrustRegion 0.595 k allocs: 0.0616 MB 0.595 k allocs: 0.0616 MB 1
multivariate/problems/rosenbrock/20/Newton 0.496 k allocs: 0.033 MB 0.496 k allocs: 0.033 MB 1
multivariate/problems/rosenbrock/20/NewtonTrustRegion 0.511 k allocs: 0.319 MB 0.511 k allocs: 0.319 MB 1
multivariate/problems/saddle/100/KrylovTrustRegion 0.173 k allocs: 0.211 MB 0.173 k allocs: 0.211 MB 1
multivariate/problems/saddle/100/Newton 0.141 k allocs: 0.352 MB 0.141 k allocs: 0.352 MB 1
multivariate/problems/saddle/100/NewtonTrustRegion 0.338 k allocs: 2.58 MB 0.338 k allocs: 2.58 MB 1
multivariate/problems/saddle/2/KrylovTrustRegion 0.183 k allocs: 7.09 kB 0.183 k allocs: 7.09 kB 1
multivariate/problems/saddle/2/Newton 0.129 k allocs: 5.75 kB 0.129 k allocs: 5.75 kB 1
multivariate/problems/saddle/2/NewtonTrustRegion 0.18 k allocs: 12.3 kB 0.18 k allocs: 12.3 kB 1
multivariate/problems/saddle/20/KrylovTrustRegion 0.17 k allocs: 21.9 kB 0.17 k allocs: 21.9 kB 1
multivariate/problems/saddle/20/Newton 0.133 k allocs: 20.8 kB 0.133 k allocs: 20.8 kB 1
multivariate/problems/saddle/20/NewtonTrustRegion 0.222 k allocs: 0.127 MB 0.222 k allocs: 0.127 MB 1
multivariate/solvers/first_order/AdaMax 0.356 k allocs: 7.27 kB 0.356 k allocs: 7.27 kB 1
multivariate/solvers/first_order/Adam 0.356 k allocs: 7.27 kB 0.356 k allocs: 7.27 kB 1
multivariate/solvers/first_order/BFGS 0.23 k allocs: 8.8 kB 0.23 k allocs: 8.8 kB 1
multivariate/solvers/first_order/ConjugateGradient 0.392 k allocs: 16 kB 0.392 k allocs: 16 kB 1
multivariate/solvers/first_order/GradientDescent 1.52 k allocs: 0.0611 MB 1.52 k allocs: 0.0611 MB 1
multivariate/solvers/first_order/LBFGS 0.319 k allocs: 13.6 kB 0.319 k allocs: 13.6 kB 1
multivariate/solvers/first_order/MomentumGradientDescent 1.91 k allocs: 0.0666 MB 1.91 k allocs: 0.0666 MB 1
multivariate/solvers/first_order/NGMRES 3.14 k allocs: 0.156 MB 3.14 k allocs: 0.156 MB 1
multivariate/solvers/second_order/KrylovTrustRegion 0.284 k allocs: 11.3 kB 0.284 k allocs: 11.3 kB 1
multivariate/solvers/second_order/Newton 0.251 k allocs: 10.2 kB 0.251 k allocs: 10.2 kB 1
multivariate/solvers/second_order/NewtonTrustRegion 0.302 k allocs: 19.1 kB 0.302 k allocs: 19.1 kB 1
time_to_load 0.2 k allocs: 11.7 kB 0.2 k allocs: 11.7 kB 1

A plot of the benchmark results has been uploaded as an artifact at .

@codecov

codecov Bot commented Oct 26, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.88%. Comparing base (f138fe1) to head (a2e24a7).

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1312      +/-   ##
==========================================
+ Coverage   87.86%   87.88%   +0.01%     
==========================================
  Files          52       52              
  Lines        5052     5059       +7     
==========================================
+ Hits         4439     4446       +7     
  Misses        613      613              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@pkofod
pkofod merged commit 73648fb into master Oct 26, 2026
23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Differences in brent implementation of brent.jl and brentmin.jl Brent still broken for flat functions :(

1 participant