PREREG_modab outcome (server): M1 PASSED - A' ahead of ModAB (authors' package pymodab 1.0.9, same stopping rule, counts equal to the library's own counter). Corpus 4: A' 3656 vs ModAB 5535, per problem 183/23/34 p=7e-26. Paper protocol: APS 2438 vs 2914 (118/11/25), CHA 2005 vs 2436 (32/9/4). Six corpora: 13032 vs 16657, significant on every one. ModAB's own benchmark (Roots.jl f01-f91): all 91 - 1507 vs 1588 (56/13/22 p=1.5e-4); 78 - 1371 vs 1446. ModAB breaks the 2x-bisection bound on 9 problems (1 on corpus 1, 8 on corpus 4), A' on none. ModAB wired outside the published grid (EXTRA_BASELINES), which stays at 264.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
vvs
2026-09-21 21:35:36 +01:00
co-authored by Claude Opus 5
parent bfa23b223d
commit 37c81b027a
5 changed files with 191 additions and 2 deletions
+19
View File
@@ -500,6 +500,25 @@ def chandrupatla_lib(f, a, b, xtol, maxfev):
return 0.5 * (a + b), g.n, False
def modab_lib(f, a, b, xtol, maxfev):
"""ModAB from the AUTHORS' package pymodab (native wrapper of their C code; PREREG_modab
2026-09-21). Same stopping rule as every other method, read in ModAB.c: the bracket
x2 - x1 <= aTol + rTol*|x3| with aTol = xtol and the library Chandrupatla's relative term
8.9e-16, no stopping on |f|. Evaluations counted by the same Counter; an exception
raised in f (the budget included) propagates out of the native call."""
from pymodab import find_root
g = Counter(f, maxfev)
try:
x = find_root(lambda t: g(float(t)), float(a), float(b), float(xtol), 8.9e-16,
int(maxfev))
except _Budget:
return 0.5 * (a + b), g.n, False
except Exception:
return 0.5 * (a + b), g.n, False
x = float(x)
return x, g.n, math.isfinite(x)
# The competitors as benchmarked: the library alone wherever the library ships the
# method. Until 2026-09-21 they were best_of(ours, library) problem by problem, which
# let a tolerance slip in OUR Chandrupatla leak into the reported numbers.