diff --git a/results_modab.txt b/results_modab.txt new file mode 100644 index 0000000..4ea17e2 --- /dev/null +++ b/results_modab.txt @@ -0,0 +1,25 @@ +PAPER PROTOCOL (published roots) + APS: A' 2438 ModAB 2914 (solved 153, over 0) Chandrupatla 2787 A' vs ModAB 118/11/25 p=1.2e-15 + CHA: A' 2005 ModAB 2436 (solved 40, over 0) Chandrupatla 2441 A' vs ModAB 32/9/4 p=1.9e-06 + +SIX CORPORA (uniform criterion): A' / ModAB / Chandrupatla totals; ModAB violations; A' vs ModAB + APS 2259 / 2726 / 2595 viol 0 118/10/26 p=3.4e-15 + CHA 1074 / 1681 / 1505 viol 0 34/4/7 p=2.5e-05 + NEW 3290 / 3809 / 3716 viol 1 125/26/55 p=1.9e-07 + RJL 1371 / 1446 / 1566 viol 0 47/11/20 p=0.0013 + APP 1382 / 1460 / 1382 viol 0 76/35/21 p=1.7e-08 + D 3656 / 5535 / 5717 viol 8 183/23/34 p=7.1e-26 + all 13032 / 16657 + +M1 (corpus 4): PASSED - A' 3656 vs ModAB 5535, 183/23/34 p=7.1e-26 + D1: A' 433 ModAB 446 24/5/11 + D2: A' 1163 ModAB 1689 39/0/1 + D3: A' 924 ModAB 1267 34/0/6 + D4: A' 304 ModAB 362 36/3/1 + D5: A' 503 ModAB 1425 26/7/7 + D6: A' 329 ModAB 346 24/8/8 + +MODAB'S OWN BENCHMARK (Roots.jl f01-f91) + all 91: Aprime 1507 modab 1588 chandrupatla 1701 A' vs ModAB 56/13/22 p=0.00015 ModAB viol 0 + 78 out of the development sets: Aprime 1371 modab 1446 chandrupatla 1566 A' vs ModAB 47/11/20 p=0.0013 ModAB viol 0 +modab done diff --git a/simroot/baselines.py b/simroot/baselines.py index cbbabbe..f1d16d4 100644 --- a/simroot/baselines.py +++ b/simroot/baselines.py @@ -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. diff --git a/sweep_full.py b/sweep_full.py index a69c2ee..290fc91 100644 --- a/sweep_full.py +++ b/sweep_full.py @@ -41,7 +41,7 @@ from simroot.baselines import (anderson_bjorck, best_of, bisection, brent, brent_scipy, chandrupatla, chandrupatla_scipy, dekker, illinois, itp, pegasus, regula_falsi, ridders, toms748) -from simroot.baselines import BRENT_BASELINE, CHANDRUPATLA_BASELINE +from simroot.baselines import BRENT_BASELINE, CHANDRUPATLA_BASELINE, modab_lib from simroot.pure import PURE_SIMS, pure_root XTOL = 1e-12 @@ -101,6 +101,11 @@ BASELINES = { } +# Rivals measured OUTSIDE the published grid (which iterates over BASELINES and must stay at +# 264 configurations): ModAB from the authors' package (PREREG_modab 2026-09-21). +EXTRA_BASELINES = {"modab": modab_lib} + + def make_method(spec): """spec is ('base', name) or ('pure', similarity, scale, guard[, space]). @@ -108,7 +113,7 @@ def make_method(spec): amendment 1, 2026-09-20): omitted or "x" reproduces the published grid bit-for-bit, "log" is the logarithmic-march mode.""" if spec[0] == "base": - return BASELINES[spec[1]] + return BASELINES[spec[1]] if spec[1] in BASELINES else EXTRA_BASELINES[spec[1]] sim, scale, guard = spec[1], spec[2], spec[3] space = spec[4] if len(spec) > 4 else "x" prestep = spec[5] if len(spec) > 5 else "none" diff --git a/sweep_modab.json b/sweep_modab.json new file mode 100644 index 0000000..b724b85 --- /dev/null +++ b/sweep_modab.json @@ -0,0 +1 @@ +{"protocol": {"modab": {"label": "modab", "spec": ["base", "modab"], "APS": {"total": 2914, "solved": 153, "n": 154, "over": 0, "per": {"aps.01.00": [10, true], "aps.02.00": [13, true], "aps.02.01": [12, true], "aps.02.02": [12, true], "aps.02.03": [12, true], "aps.02.04": [11, true], "aps.02.05": [11, true], "aps.02.06": [12, true], "aps.02.07": [11, true], "aps.02.08": [11, true], "aps.02.09": [11, true], "aps.03.00": [16, true], "aps.03.01": [16, true], "aps.03.02": [17, true], "aps.04.00": [14, true], "aps.04.01": [14, true], "aps.04.02": [14, true], "aps.04.03": [14, true], "aps.04.04": [16, true], "aps.04.05": [13, true], "aps.04.06": [13, true], "aps.04.07": [13, true], "aps.04.08": [14, true], "aps.04.09": [14, true], "aps.04.10": [14, true], "aps.04.11": [14, true], "aps.04.12": [14, true], "aps.04.13": [14, true], "aps.05.00": [10, true], "aps.06.00": [9, true], "aps.06.01": [10, true], "aps.06.02": [10, true], "aps.06.03": [11, true], "aps.06.04": [10, true], "aps.06.05": [12, true], "aps.06.06": [13, true], "aps.06.07": [15, true], "aps.06.08": [14, true], "aps.06.09": [16, true], "aps.07.00": [10, true], "aps.07.01": [9, true], "aps.07.02": [9, true], "aps.08.00": [3, true], "aps.08.01": [10, true], "aps.08.02": [12, true], "aps.08.03": [12, true], "aps.08.04": [12, true], "aps.09.00": [11, true], "aps.09.01": [12, true], "aps.09.02": [11, true], "aps.09.03": [9, true], "aps.09.04": [8, true], "aps.09.05": [7, true], "aps.09.06": [8, true], "aps.10.00": [9, true], "aps.10.01": [11, true], "aps.10.02": [12, true], "aps.10.03": [13, true], "aps.10.04": [13, true], "aps.11.00": [8, true], "aps.11.01": [10, true], "aps.11.02": [11, true], "aps.11.03": [11, true], "aps.12.00": [11, true], "aps.12.01": [10, true], "aps.12.02": [11, true], "aps.12.03": [11, true], "aps.12.04": [11, true], "aps.12.05": [11, true], "aps.12.06": [11, true], "aps.12.07": [11, true], "aps.12.08": [12, true], "aps.12.09": [11, true], "aps.12.10": [11, true], "aps.12.11": [12, true], "aps.12.12": [11, true], "aps.12.13": [11, true], "aps.12.14": [11, true], "aps.12.15": [10, true], "aps.12.16": [10, true], "aps.12.17": [10, true], "aps.12.18": [10, true], "aps.13.00": [12, false], "aps.14.00": [18, true], "aps.14.01": [18, true], "aps.14.02": [19, true], "aps.14.03": [18, true], "aps.14.04": [18, true], "aps.14.05": [19, true], "aps.14.06": [18, true], "aps.14.07": [18, true], "aps.14.08": [18, true], "aps.14.09": [18, true], "aps.14.10": [18, true], "aps.14.11": [19, true], "aps.14.12": [18, true], "aps.14.13": [18, true], "aps.14.14": [18, true], "aps.14.15": [18, true], "aps.14.16": [18, true], "aps.14.17": [18, true], "aps.14.18": [18, true], "aps.14.19": [18, true], "aps.14.20": [18, true], "aps.14.21": [18, true], "aps.14.22": [18, true], "aps.14.23": [19, true], "aps.14.24": [18, true], "aps.14.25": [18, true], "aps.14.26": [18, true], "aps.14.27": [18, true], "aps.14.28": [18, true], "aps.14.29": [18, true], "aps.14.30": [18, true], "aps.14.31": [18, true], "aps.14.32": [18, true], "aps.14.33": [18, true], "aps.14.34": [18, true], "aps.14.35": [18, true], "aps.14.36": [18, true], "aps.14.37": [18, true], "aps.14.38": [18, true], "aps.14.39": [18, true], "aps.15.00": [32, true], "aps.15.01": [33, true], "aps.15.02": [33, true], "aps.15.03": [32, true], "aps.15.04": [33, true], "aps.15.05": [34, true], "aps.15.06": [33, true], "aps.15.07": [32, true], "aps.15.08": [32, true], "aps.15.09": [32, true], "aps.15.10": [30, true], "aps.15.11": [31, true], "aps.15.12": [31, true], "aps.15.13": [33, true], "aps.15.14": [32, true], "aps.15.15": [32, true], "aps.15.16": [33, true], "aps.15.17": [33, true], "aps.15.18": [33, true], "aps.15.19": [32, true], "aps.15.20": [32, true], "aps.15.21": [32, true], "aps.15.22": [36, true], "aps.15.23": [37, true], "aps.15.24": [37, true], "aps.15.25": [38, true], "aps.15.26": [37, true], "aps.15.27": [37, true], "aps.15.28": [37, true], "aps.15.29": [37, true], "aps.15.30": [37, true]}}, "CHA": {"total": 2436, "solved": 40, "n": 45, "over": 0, "per": {"fun1.1": [10, true], "fun1.2": [12, true], "fun1.3": [16, true], "fun1.4": [27, true], "fun1.5": [43, true], "fun2.1": [10, true], "fun2.2": [23, true], "fun2.3": [29, true], "fun2.4": [44, true], "fun2.5": [49, true], "fun3.1": [45, true], "fun3.2": [47, true], "fun3.3": [57, true], "fun3.4": [63, true], "fun3.5": [77, true], "fun4.1": [45, true], "fun4.2": [47, true], "fun4.3": [57, true], "fun4.4": [63, true], "fun4.5": [77, true], "fun5.1": [45, true], "fun5.2": [45, true], "fun5.3": [46, true], "fun5.4": [48, true], "fun5.5": [49, true], "fun6.1": [45, true], "fun6.2": [45, true], "fun6.3": [46, true], "fun6.4": [48, true], "fun6.5": [49, true], "fun7.1": [12, false], "fun7.2": [9, false], "fun7.3": [200, false], "fun7.4": [11, false], "fun7.5": [13, false], "fun8.1": [10, true], "fun8.2": [12, true], "fun8.3": [13, true], "fun8.4": [14, true], "fun8.5": [17, true], "fun9.1": [9, true], "fun9.2": [11, true], "fun9.3": [13, true], "fun9.4": [14, true], "fun9.5": [16, true]}}}}, "seen": {"modab": {"APS": {"aps.01.00": [10, true, false], "aps.02.00": [13, true, false], "aps.02.01": [12, true, false], "aps.02.02": [12, true, false], "aps.02.03": [12, true, false], "aps.02.04": [11, true, false], "aps.02.05": [11, true, false], "aps.02.06": [12, true, false], "aps.02.07": [11, true, false], "aps.02.08": [11, true, false], "aps.02.09": [11, true, false], "aps.03.00": [16, true, false], "aps.03.01": [16, true, false], "aps.03.02": [17, true, false], "aps.04.00": [14, true, false], "aps.04.01": [14, true, false], "aps.04.02": [14, true, false], "aps.04.03": [14, true, false], "aps.04.04": [16, true, false], "aps.04.05": [13, true, false], "aps.04.06": [13, true, false], "aps.04.07": [13, true, false], "aps.04.08": [14, true, false], "aps.04.09": [14, true, false], "aps.04.10": [14, true, false], "aps.04.11": [14, true, false], "aps.04.12": [14, true, false], "aps.04.13": [14, true, false], "aps.05.00": [10, true, false], "aps.06.00": [9, true, false], "aps.06.01": [10, true, false], "aps.06.02": [10, true, false], "aps.06.03": [11, true, false], "aps.06.04": [10, true, false], "aps.06.05": [12, true, false], "aps.06.06": [13, true, false], "aps.06.07": [15, true, false], "aps.06.08": [14, true, false], "aps.06.09": [16, true, false], "aps.07.00": [10, true, false], "aps.07.01": [9, true, false], "aps.07.02": [9, true, false], "aps.08.00": [3, true, false], "aps.08.01": [10, true, false], "aps.08.02": [12, true, false], "aps.08.03": [12, true, false], "aps.08.04": [12, true, false], "aps.09.00": [11, true, false], "aps.09.01": [12, true, false], "aps.09.02": [11, true, false], "aps.09.03": [9, true, false], "aps.09.04": [8, true, false], "aps.09.05": [7, true, false], "aps.09.06": [8, true, false], "aps.10.00": [9, true, false], "aps.10.01": [11, true, false], "aps.10.02": [12, true, false], "aps.10.03": [13, true, false], "aps.10.04": [13, true, false], "aps.11.00": [8, true, false], "aps.11.01": [10, true, false], "aps.11.02": [11, true, false], "aps.11.03": [11, true, false], "aps.12.00": [11, true, false], "aps.12.01": [10, true, false], "aps.12.02": [11, true, false], "aps.12.03": [11, true, false], "aps.12.04": [11, true, false], "aps.12.05": [11, true, false], "aps.12.06": [11, true, false], "aps.12.07": [11, true, false], "aps.12.08": [12, true, false], "aps.12.09": [11, true, false], "aps.12.10": [11, true, false], "aps.12.11": [12, true, false], "aps.12.12": [11, true, false], "aps.12.13": [11, true, false], "aps.12.14": [11, true, false], "aps.12.15": [10, true, false], "aps.12.16": [10, true, false], "aps.12.17": [10, true, false], "aps.12.18": [10, true, false], "aps.13.00": [12, true, false], "aps.14.00": [18, true, false], "aps.14.01": [18, true, false], "aps.14.02": [19, true, false], "aps.14.03": [18, true, false], "aps.14.04": [18, true, false], "aps.14.05": [19, true, false], "aps.14.06": [18, true, false], "aps.14.07": [18, true, false], "aps.14.08": [18, true, false], "aps.14.09": [18, true, false], "aps.14.10": [18, true, false], "aps.14.11": [19, true, false], "aps.14.12": [18, true, false], "aps.14.13": [18, true, false], "aps.14.14": [18, true, false], "aps.14.15": [18, true, false], "aps.14.16": [18, true, false], "aps.14.17": [18, true, false], "aps.14.18": [18, true, false], "aps.14.19": [18, true, false], "aps.14.20": [18, true, false], "aps.14.21": [18, true, false], "aps.14.22": [18, true, false], "aps.14.23": [19, true, false], "aps.14.24": [18, true, false], "aps.14.25": [18, true, false], "aps.14.26": [18, true, false], "aps.14.27": [18, true, false], "aps.14.28": [18, true, false], "aps.14.29": [18, true, false], "aps.14.30": [18, true, false], "aps.14.31": [18, true, false], "aps.14.32": [18, true, false], "aps.14.33": [18, true, false], "aps.14.34": [18, true, false], "aps.14.35": [18, true, false], "aps.14.36": [18, true, false], "aps.14.37": [18, true, false], "aps.14.38": [18, true, false], "aps.14.39": [18, true, false], "aps.15.00": [32, true, false], "aps.15.01": [33, true, false], "aps.15.02": [33, true, false], "aps.15.03": [32, true, false], "aps.15.04": [33, true, false], "aps.15.05": [34, true, false], "aps.15.06": [33, true, false], "aps.15.07": [32, true, false], "aps.15.08": [32, true, false], "aps.15.09": [32, true, false], "aps.15.10": [30, true, false], "aps.15.11": [31, true, false], "aps.15.12": [31, true, false], "aps.15.13": [33, true, false], "aps.15.14": [32, true, false], "aps.15.15": [32, true, false], "aps.15.16": [33, true, false], "aps.15.17": [33, true, false], "aps.15.18": [33, true, false], "aps.15.19": [32, true, false], "aps.15.20": [32, true, false], "aps.15.21": [32, true, false], "aps.15.22": [36, true, false], "aps.15.23": [37, true, false], "aps.15.24": [37, true, false], "aps.15.25": [38, true, false], "aps.15.26": [37, true, false], "aps.15.27": [37, true, false], "aps.15.28": [37, true, false], "aps.15.29": [37, true, false], "aps.15.30": [37, true, false]}, "CHA": {"fun1.1": [10, true, false], "fun1.2": [12, true, false], "fun1.3": [16, true, false], "fun1.4": [27, true, false], "fun1.5": [43, true, false], "fun2.1": [10, true, false], "fun2.2": [23, true, false], "fun2.3": [29, true, false], "fun2.4": [44, true, false], "fun2.5": [49, true, false], "fun3.1": [45, true, false], "fun3.2": [47, true, false], "fun3.3": [57, true, false], "fun3.4": [63, true, false], "fun3.5": [77, true, false], "fun4.1": [45, true, false], "fun4.2": [47, true, false], "fun4.3": [57, true, false], "fun4.4": [63, true, false], "fun4.5": [77, true, false], "fun5.1": [45, true, false], "fun5.2": [45, true, false], "fun5.3": [46, true, false], "fun5.4": [48, true, false], "fun5.5": [49, true, false], "fun6.1": [45, true, false], "fun6.2": [45, true, false], "fun6.3": [46, true, false], "fun6.4": [48, true, false], "fun6.5": [49, true, false], "fun7.1": [12, true, false], "fun7.2": [9, true, false], "fun7.3": [200, false, false], "fun7.4": [11, true, false], "fun7.5": [13, true, false], "fun8.1": [10, true, false], "fun8.2": [12, true, false], "fun8.3": [13, true, false], "fun8.4": [14, true, false], "fun8.5": [17, true, false], "fun9.1": [9, true, false], "fun9.2": [11, true, false], "fun9.3": [13, true, false], "fun9.4": [14, true, false], "fun9.5": [16, true, false]}, "NEW": {"C0.00": [9, true, false], "C0.01": [9, true, false], "C0.02": [10, true, false], "C0.03": [52, true, false], "C0.04": [43, true, false], "C0.05": [46, true, false], "C1.00": [12, true, false], "C1.01": [10, true, false], "C1.02": [14, true, false], "C1.03": [18, true, false], "C1.04": [11, true, false], "C1.05": [18, true, false], "C1.06": [8, true, false], "C1.07": [13, true, false], "C1.08": [9, true, false], "C1.09": [14, true, false], "C1.10": [10, true, false], "C1.11": [15, true, false], "C1.12": [11, true, false], "C1.13": [7, true, false], "C1.14": [10, true, false], "C1.15": [9, true, false], "C1.16": [18, true, false], "C1.17": [13, true, false], "C1.18": [13, true, false], "C1.19": [14, true, false], "C1.20": [18, true, false], "C1.21": [9, true, false], "C1.22": [12, true, false], "C1.23": [9, true, false], "C1.24": [11, true, false], "C1.25": [9, true, false], "C1.26": [20, true, false], "C1.27": [12, true, false], "C1.28": [13, true, false], "C1.29": [13, true, false], "C1.30": [10, true, false], "C1.31": [8, true, false], "C1.32": [13, true, false], "C1.33": [11, true, false], "C1.34": [11, true, false], "C1.35": [12, true, false], "C1.36": [13, true, false], "C1.37": [7, true, false], "C1.38": [11, true, false], "C1.39": [14, true, false], "C2.00": [12, true, false], "C2.01": [8, true, false], "C2.02": [16, true, false], "C2.03": [8, true, false], "C2.04": [9, true, false], "C2.05": [9, true, false], "C2.06": [6, true, false], "C2.07": [11, true, false], "C2.08": [12, true, false], "C2.09": [9, true, false], "C2.10": [9, true, false], "C2.11": [7, true, false], "C2.12": [16, true, false], "C2.13": [8, true, false], "C2.14": [7, true, false], "C2.15": [8, true, false], "C2.16": [6, true, false], "C2.17": [12, true, false], "C2.18": [10, true, false], "C2.19": [14, true, false], "C2.20": [11, true, false], "C2.21": [13, true, false], "C2.22": [17, true, false], "C2.23": [9, true, false], "C2.24": [9, true, false], "C2.25": [9, true, false], "C2.26": [13, true, false], "C2.27": [17, true, false], "C2.28": [6, true, false], "C2.29": [8, true, false], "C2.30": [7, true, false], "C2.31": [16, true, false], "C2.32": [13, true, false], "C2.33": [16, true, false], "C2.34": [17, true, false], "C2.35": [9, true, false], "C2.36": [7, true, false], "C2.37": [8, true, false], "C2.38": [12, true, false], "C2.39": [20, true, false], "C3.00": [41, true, false], "C3.01": [47, true, false], "C3.02": [40, true, false], "C3.03": [43, true, false], "C3.04": [39, true, false], "C3.05": [43, true, false], "C3.06": [42, true, false], "C3.07": [47, true, false], "C3.08": [44, true, false], "C3.09": [43, true, false], "C3.10": [45, true, false], "C3.11": [45, true, false], "C3.12": [41, true, false], "C3.13": [39, true, false], "C3.14": [41, true, false], "C3.15": [44, true, false], "C3.16": [46, true, false], "C3.17": [41, true, false], "C3.18": [47, true, false], "C3.19": [41, true, false], "C3.20": [41, true, false], "C3.21": [45, true, false], "C3.22": [46, true, false], "C3.23": [39, true, false], "C3.24": [44, true, false], "C3.25": [41, true, false], "C3.26": [43, true, false], "C3.27": [41, true, false], "C3.28": [39, true, false], "C3.29": [40, true, false], "C3.30": [40, true, false], "C3.31": [125, true, true], "C3.32": [44, true, false], "C3.33": [41, true, false], "C3.34": [41, true, false], "C3.35": [46, true, false], "C3.36": [42, true, false], "C3.37": [46, true, false], "C3.38": [46, true, false], "C3.39": [43, true, false], "C4.00": [8, true, false], "C4.01": [12, true, false], "C4.02": [15, true, false], "C4.03": [15, true, false], "C4.04": [15, true, false], "C4.05": [16, true, false], "C4.06": [7, true, false], "C4.07": [11, true, false], "C4.08": [10, true, false], "C4.09": [10, true, false], "C4.10": [16, true, false], "C4.11": [14, true, false], "C4.12": [8, true, false], "C4.13": [8, true, false], "C4.14": [14, true, false], "C4.15": [14, true, false], "C4.16": [11, true, false], "C4.17": [10, true, false], "C4.18": [10, true, false], "C4.19": [11, true, false], "C4.20": [19, true, false], "C4.21": [19, true, false], "C4.22": [18, true, false], "C4.23": [13, true, false], "C4.24": [12, true, false], "C4.25": [10, true, false], "C4.26": [19, true, false], "C4.27": [10, true, false], "C4.28": [11, true, false], "C4.29": [16, true, false], "C4.30": [8, true, false], "C4.31": [15, true, false], "C4.32": [16, true, false], "C4.33": [14, true, false], "C4.34": [10, true, false], "C4.35": [11, true, false], "C4.36": [12, true, false], "C4.37": [11, true, false], "C4.38": [10, true, false], "C4.39": [10, true, false], "C5.00": [10, true, false], "C5.01": [10, true, false], "C5.02": [7, true, false], "C5.03": [9, true, false], "C5.04": [13, true, false], "C5.05": [14, true, false], "C5.06": [7, true, false], "C5.07": [15, true, false], "C5.08": [15, true, false], "C5.09": [10, true, false], "C5.10": [16, true, false], "C5.11": [13, true, false], "C5.12": [9, true, false], "C5.13": [8, true, false], "C5.14": [8, true, false], "C5.15": [13, true, false], "C5.16": [12, true, false], "C5.17": [12, true, false], "C5.18": [14, true, false], "C5.19": [15, true, false], "C5.20": [11, true, false], "C5.21": [9, true, false], "C5.22": [7, true, false], "C5.23": [10, true, false], "C5.24": [12, true, false], "C5.25": [8, true, false], "C5.26": [8, true, false], "C5.27": [11, true, false], "C5.28": [11, true, false], "C5.29": [11, true, false], "C5.30": [10, true, false], "C5.31": [13, true, false], "C5.32": [12, true, false], "C5.33": [9, true, false], "C5.34": [12, true, false], "C5.35": [8, true, false], "C5.36": [10, true, false], "C5.37": [8, true, false], "C5.38": [12, true, false], "C5.39": [10, true, false]}, "RJL": {"f01": [3, true, false], "f02": [12, true, false], "f03": [12, true, false], "f04": [10, true, false], "f07": [11, true, false], "f09": [10, true, false], "f10": [9, true, false], "f11": [9, true, false], "f16": [8, true, false], "f21": [9, true, false], "f22": [9, true, false], "f23": [9, true, false], "f24": [43, true, false], "f25": [43, true, false], "f26": [43, true, false], "f27": [14, true, false], "f28": [42, true, false], "f29": [12, true, false], "f30": [13, true, false], "f31": [12, true, false], "f32": [13, true, false], "f33": [12, true, false], "f34": [12, true, false], "f35": [16, true, false], "f36": [49, true, false], "f37": [16, true, false], "f38": [47, true, false], "f39": [47, true, false], "f40": [47, true, false], "f42": [12, true, false], "f43": [44, true, false], "f44": [44, true, false], "f45": [44, true, false], "f46": [14, true, false], "f47": [16, true, false], "f48": [14, true, false], "f49": [11, true, false], "f50": [11, true, false], "f51": [10, true, false], "f52": [15, true, false], "f53": [13, true, false], "f54": [9, true, false], "f55": [10, true, false], "f56": [11, true, false], "f57": [11, true, false], "f58": [10, true, false], "f59": [12, true, false], "f60": [9, true, false], "f61": [12, true, false], "f63": [11, true, false], "f64": [8, true, false], "f65": [9, true, false], "f66": [13, true, false], "f67": [12, true, false], "f68": [9, true, false], "f69": [10, true, false], "f70": [13, true, false], "f71": [8, true, false], "f72": [43, true, false], "f73": [43, true, false], "f74": [43, true, false], "f75": [27, true, false], "f76": [32, true, false], "f77": [43, true, false], "f78": [9, true, false], "f79": [13, true, false], "f80": [25, true, false], "f81": [13, true, false], "f82": [5, true, false], "f83": [43, true, false], "f84": [8, true, false], "f85": [11, true, false], "f86": [14, true, false], "f87": [8, true, false], "f88": [11, true, false], "f89": [12, true, false], "f90": [13, true, false], "f91": [13, true, false]}, "APP": {"G.sin[3,4]": [8, true, false], "G.sin[-4,-3]": [8, true, false], "G.sin[-1/3,1]": [4, true, false], "G.cos[0,3]": [8, true, false], "G.cos[-3,0]": [8, true, false], "G.x^20-1": [14, true, false], "G.sqrt|x|sgn": [4, true, false], "G.x^2-1e-8": [21, true, false], "G.x*exp(-x)": [11, true, false], "G.(x-1)^7": [32, true, false], "P.kepler.e0.1.M0.001": [7, true, false], "P.kepler.e0.1.M0.01": [7, true, false], "P.kepler.e0.1.M0.1": [8, true, false], "P.kepler.e0.1.M0.5": [9, true, false], "P.kepler.e0.1.M1.0": [9, true, false], "P.kepler.e0.1.M2.0": [8, true, false], "P.kepler.e0.1.M3.0": [8, true, false], "P.kepler.e0.5.M0.001": [8, true, false], "P.kepler.e0.5.M0.01": [9, true, false], "P.kepler.e0.5.M0.1": [10, true, false], "P.kepler.e0.5.M0.5": [9, true, false], "P.kepler.e0.5.M1.0": [9, true, false], "P.kepler.e0.5.M2.0": [9, true, false], "P.kepler.e0.5.M3.0": [8, true, false], "P.kepler.e0.9.M0.001": [12, true, false], "P.kepler.e0.9.M0.01": [11, true, false], "P.kepler.e0.9.M0.1": [12, true, false], "P.kepler.e0.9.M0.5": [11, true, false], "P.kepler.e0.9.M1.0": [10, true, false], "P.kepler.e0.9.M2.0": [9, true, false], "P.kepler.e0.9.M3.0": [8, true, false], "P.kepler.e0.99.M0.001": [13, true, false], "P.kepler.e0.99.M0.01": [12, true, false], "P.kepler.e0.99.M0.1": [12, true, false], "P.kepler.e0.99.M0.5": [10, true, false], "P.kepler.e0.99.M1.0": [10, true, false], "P.kepler.e0.99.M2.0": [10, true, false], "P.kepler.e0.99.M3.0": [8, true, false], "P.kepler.e0.999.M0.001": [18, true, false], "P.kepler.e0.999.M0.01": [14, true, false], "P.kepler.e0.999.M0.1": [12, true, false], "P.kepler.e0.999.M0.5": [10, true, false], "P.kepler.e0.999.M1.0": [10, true, false], "P.kepler.e0.999.M2.0": [10, true, false], "P.kepler.e0.999.M3.0": [9, true, false], "P.colebrook.Re4e+03.e0.0": [11, true, false], "P.colebrook.Re4e+03.e1e-06": [11, true, false], "P.colebrook.Re4e+03.e0.0001": [12, true, false], "P.colebrook.Re4e+03.e0.001": [11, true, false], "P.colebrook.Re4e+03.e0.01": [11, true, false], "P.colebrook.Re4e+03.e0.05": [11, true, false], "P.colebrook.Re1e+04.e0.0": [12, true, false], "P.colebrook.Re1e+04.e1e-06": [11, true, false], "P.colebrook.Re1e+04.e0.0001": [11, true, false], "P.colebrook.Re1e+04.e0.001": [12, true, false], "P.colebrook.Re1e+04.e0.01": [12, true, false], "P.colebrook.Re1e+04.e0.05": [11, true, false], "P.colebrook.Re1e+05.e0.0": [12, true, false], "P.colebrook.Re1e+05.e1e-06": [12, true, false], "P.colebrook.Re1e+05.e0.0001": [13, true, false], "P.colebrook.Re1e+05.e0.001": [12, true, false], "P.colebrook.Re1e+05.e0.01": [12, true, false], "P.colebrook.Re1e+05.e0.05": [11, true, false], "P.colebrook.Re1e+06.e0.0": [14, true, false], "P.colebrook.Re1e+06.e1e-06": [13, true, false], "P.colebrook.Re1e+06.e0.0001": [12, true, false], "P.colebrook.Re1e+06.e0.001": [12, true, false], "P.colebrook.Re1e+06.e0.01": [12, true, false], "P.colebrook.Re1e+06.e0.05": [11, true, false], "P.colebrook.Re1e+07.e0.0": [13, true, false], "P.colebrook.Re1e+07.e1e-06": [13, true, false], "P.colebrook.Re1e+07.e0.0001": [14, true, false], "P.colebrook.Re1e+07.e0.001": [12, true, false], "P.colebrook.Re1e+07.e0.01": [12, true, false], "P.colebrook.Re1e+07.e0.05": [11, true, false], "P.colebrook.Re1e+08.e0.0": [14, true, false], "P.colebrook.Re1e+08.e1e-06": [14, true, false], "P.colebrook.Re1e+08.e0.0001": [13, true, false], "P.colebrook.Re1e+08.e0.001": [12, true, false], "P.colebrook.Re1e+08.e0.01": [13, true, false], "P.colebrook.Re1e+08.e0.05": [11, true, false], "P.lambert.y1e-06": [7, true, false], "P.lambert.y0.001": [8, true, false], "P.lambert.y0.1": [10, true, false], "P.lambert.y1.0": [10, true, false], "P.lambert.y10.0": [12, true, false], "P.lambert.y1000.0": [12, true, false], "P.lambert.y1000000.0": [13, true, false], "P.planck.n2": [10, true, false], "P.planck.n3": [9, true, false], "P.planck.n4": [11, true, false], "P.planck.n5": [9, true, false], "P.planck.n6": [9, true, false], "P.planck.n8": [9, true, false], "P.planck.n10": [8, true, false], "P.vdw.T280.P1": [7, true, false], "P.vdw.T280.P10": [8, true, false], "P.vdw.T280.P40": [11, true, false], "P.vdw.T280.P73": [17, true, false], "P.vdw.T280.P100": [13, true, false], "P.vdw.T304.P1": [7, true, false], "P.vdw.T304.P10": [8, true, false], "P.vdw.T304.P40": [10, true, false], "P.vdw.T304.P73": [16, true, false], "P.vdw.T304.P100": [14, true, false], "P.vdw.T350.P1": [7, true, false], "P.vdw.T350.P10": [9, true, false], "P.vdw.T350.P40": [10, true, false], "P.vdw.T350.P73": [14, true, false], "P.vdw.T350.P100": [12, true, false], "P.vdw.T500.P1": [7, true, false], "P.vdw.T500.P10": [7, true, false], "P.vdw.T500.P40": [9, true, false], "P.vdw.T500.P73": [10, true, false], "P.vdw.T500.P100": [9, true, false], "P.irr.c5.n5": [14, true, false], "P.irr.c5.n10": [16, true, false], "P.irr.c5.n30": [17, true, false], "P.irr.c10.n5": [16, true, false], "P.irr.c10.n10": [14, true, false], "P.irr.c10.n30": [16, true, false], "P.irr.c20.n5": [14, true, false], "P.irr.c20.n10": [15, true, false], "P.irr.c20.n30": [14, true, false], "P.irr.c50.n5": [14, true, false], "P.irr.c50.n10": [14, true, false], "P.irr.c50.n30": [12, true, false], "P.well.z01": [9, true, false], "P.well.z03": [8, true, false], "P.well.z05": [8, true, false], "P.well.z010": [8, true, false], "P.well.z020": [8, true, false]}}}, "fourth": {"modab": {"D": {"D1.00": [15, true, false], "D1.01": [15, true, false], "D1.02": [10, true, false], "D1.03": [17, true, false], "D1.04": [8, true, false], "D1.05": [10, true, false], "D1.06": [10, true, false], "D1.07": [13, true, false], "D1.08": [9, true, false], "D1.09": [11, true, false], "D1.10": [10, true, false], "D1.11": [14, true, false], "D1.12": [14, true, false], "D1.13": [11, true, false], "D1.14": [10, true, false], "D1.15": [9, true, false], "D1.16": [10, true, false], "D1.17": [14, true, false], "D1.18": [15, true, false], "D1.19": [9, true, false], "D1.20": [8, true, false], "D1.21": [8, true, false], "D1.22": [8, true, false], "D1.23": [9, true, false], "D1.24": [10, true, false], "D1.25": [9, true, false], "D1.26": [9, true, false], "D1.27": [13, true, false], "D1.28": [11, true, false], "D1.29": [9, true, false], "D1.30": [8, true, false], "D1.31": [9, true, false], "D1.32": [13, true, false], "D1.33": [12, true, false], "D1.34": [18, true, false], "D1.35": [11, true, false], "D1.36": [12, true, false], "D1.37": [10, true, false], "D1.38": [16, true, false], "D1.39": [9, true, false], "D2.00": [44, true, false], "D2.01": [39, true, false], "D2.02": [42, true, false], "D2.03": [43, true, false], "D2.04": [39, true, false], "D2.05": [45, true, false], "D2.06": [39, true, false], "D2.07": [43, true, false], "D2.08": [41, true, false], "D2.09": [46, true, false], "D2.10": [42, true, false], "D2.11": [41, true, false], "D2.12": [40, true, false], "D2.13": [40, true, false], "D2.14": [43, true, false], "D2.15": [44, true, false], "D2.16": [39, true, false], "D2.17": [45, true, false], "D2.18": [43, true, false], "D2.19": [39, true, false], "D2.20": [42, true, false], "D2.21": [44, true, false], "D2.22": [44, true, false], "D2.23": [45, true, false], "D2.24": [43, true, false], "D2.25": [41, true, false], "D2.26": [41, true, false], "D2.27": [39, true, false], "D2.28": [45, true, false], "D2.29": [42, true, false], "D2.30": [39, true, false], "D2.31": [46, true, false], "D2.32": [43, true, false], "D2.33": [41, true, false], "D2.34": [41, true, false], "D2.35": [44, true, false], "D2.36": [42, true, false], "D2.37": [43, true, false], "D2.38": [44, true, false], "D2.39": [43, true, false], "D3.00": [17, true, false], "D3.01": [27, true, false], "D3.02": [30, true, false], "D3.03": [33, true, false], "D3.04": [24, true, false], "D3.05": [24, true, false], "D3.06": [20, true, false], "D3.07": [28, true, false], "D3.08": [35, true, false], "D3.09": [47, true, false], "D3.10": [22, true, false], "D3.11": [30, true, false], "D3.12": [27, true, false], "D3.13": [33, true, false], "D3.14": [32, true, false], "D3.15": [28, true, false], "D3.16": [25, true, false], "D3.17": [31, true, false], "D3.18": [35, true, false], "D3.19": [26, true, false], "D3.20": [42, true, false], "D3.21": [39, true, false], "D3.22": [24, true, false], "D3.23": [34, true, false], "D3.24": [29, true, false], "D3.25": [28, true, false], "D3.26": [34, true, false], "D3.27": [25, true, false], "D3.28": [47, true, false], "D3.29": [28, true, false], "D3.30": [47, true, false], "D3.31": [42, true, false], "D3.32": [25, true, false], "D3.33": [29, true, false], "D3.34": [33, true, false], "D3.35": [46, true, false], "D3.36": [41, true, false], "D3.37": [31, true, false], "D3.38": [45, true, false], "D3.39": [24, true, false], "D4.00": [12, true, false], "D4.01": [9, true, false], "D4.02": [9, true, false], "D4.03": [8, true, false], "D4.04": [9, true, false], "D4.05": [9, true, false], "D4.06": [11, true, false], "D4.07": [10, true, false], "D4.08": [8, true, false], "D4.09": [12, true, false], "D4.10": [9, true, false], "D4.11": [9, true, false], "D4.12": [9, true, false], "D4.13": [8, true, false], "D4.14": [11, true, false], "D4.15": [9, true, false], "D4.16": [13, true, false], "D4.17": [8, true, false], "D4.18": [8, true, false], "D4.19": [9, true, false], "D4.20": [9, true, false], "D4.21": [7, true, false], "D4.22": [9, true, false], "D4.23": [11, true, false], "D4.24": [10, true, false], "D4.25": [8, true, false], "D4.26": [7, true, false], "D4.27": [8, true, false], "D4.28": [9, true, false], "D4.29": [9, true, false], "D4.30": [8, true, false], "D4.31": [8, true, false], "D4.32": [7, true, false], "D4.33": [11, true, false], "D4.34": [10, true, false], "D4.35": [8, true, false], "D4.36": [9, true, false], "D4.37": [7, true, false], "D4.38": [8, true, false], "D4.39": [9, true, false], "D5.00": [8, true, false], "D5.01": [8, true, false], "D5.02": [118, true, true], "D5.03": [103, true, true], "D5.04": [8, true, false], "D5.05": [42, true, false], "D5.06": [112, true, true], "D5.07": [40, true, false], "D5.08": [12, true, false], "D5.09": [42, true, false], "D5.10": [10, true, false], "D5.11": [41, true, false], "D5.12": [11, true, false], "D5.13": [8, true, false], "D5.14": [9, true, false], "D5.15": [10, true, false], "D5.16": [9, true, false], "D5.17": [9, true, false], "D5.18": [8, true, false], "D5.19": [112, true, true], "D5.20": [7, true, false], "D5.21": [8, true, false], "D5.22": [116, true, true], "D5.23": [10, true, false], "D5.24": [7, true, false], "D5.25": [120, true, true], "D5.26": [9, true, false], "D5.27": [40, true, false], "D5.28": [7, true, false], "D5.29": [11, true, false], "D5.30": [115, true, true], "D5.31": [9, true, false], "D5.32": [8, true, false], "D5.33": [10, true, false], "D5.34": [43, true, false], "D5.35": [11, true, false], "D5.36": [8, true, false], "D5.37": [116, true, true], "D5.38": [40, true, false], "D5.39": [10, true, false], "D6.00": [8, true, false], "D6.01": [7, true, false], "D6.02": [6, true, false], "D6.03": [13, true, false], "D6.04": [7, true, false], "D6.05": [9, true, false], "D6.06": [6, true, false], "D6.07": [7, true, false], "D6.08": [7, true, false], "D6.09": [9, true, false], "D6.10": [7, true, false], "D6.11": [7, true, false], "D6.12": [7, true, false], "D6.13": [6, true, false], "D6.14": [8, true, false], "D6.15": [11, true, false], "D6.16": [7, true, false], "D6.17": [7, true, false], "D6.18": [9, true, false], "D6.19": [10, true, false], "D6.20": [8, true, false], "D6.21": [8, true, false], "D6.22": [13, true, false], "D6.23": [7, true, false], "D6.24": [9, true, false], "D6.25": [7, true, false], "D6.26": [8, true, false], "D6.27": [10, true, false], "D6.28": [7, true, false], "D6.29": [7, true, false], "D6.30": [12, true, false], "D6.31": [10, true, false], "D6.32": [8, true, false], "D6.33": [7, true, false], "D6.34": [15, true, false], "D6.35": [11, true, false], "D6.36": [10, true, false], "D6.37": [9, true, false], "D6.38": [8, true, false], "D6.39": [14, true, false]}}}, "rjl": {"Aprime": {"f01": [8, true, false, false], "f02": [10, true, false, false], "f03": [12, true, false, false], "f04": [9, true, false, false], "f05": [7, true, false, true], "f06": [10, true, false, true], "f07": [10, true, false, false], "f08": [11, true, false, true], "f09": [10, true, false, false], "f10": [10, true, false, false], "f11": [11, true, false, false], "f12": [9, true, false, true], "f13": [11, true, false, true], "f14": [12, true, false, true], "f15": [10, true, false, true], "f16": [14, true, false, false], "f17": [18, true, false, true], "f18": [9, true, false, true], "f19": [10, true, false, true], "f20": [11, true, false, true], "f21": [9, true, false, false], "f22": [8, true, false, false], "f23": [9, true, false, false], "f24": [26, true, false, false], "f25": [27, true, false, false], "f26": [26, true, false, false], "f27": [17, true, false, false], "f28": [21, true, false, false], "f29": [16, true, false, false], "f30": [11, true, false, false], "f31": [5, true, false, false], "f32": [12, true, false, false], "f33": [12, true, false, false], "f34": [9, true, false, false], "f35": [17, true, false, false], "f36": [34, true, false, false], "f37": [19, true, false, false], "f38": [51, true, false, false], "f39": [62, true, false, false], "f40": [51, true, false, false], "f41": [10, true, false, true], "f42": [9, true, false, false], "f43": [25, true, false, false], "f44": [30, true, false, false], "f45": [43, true, false, false], "f46": [14, true, false, false], "f47": [14, true, false, false], "f48": [13, true, false, false], "f49": [9, true, false, false], "f50": [10, true, false, false], "f51": [9, true, false, false], "f52": [13, true, false, false], "f53": [10, true, false, false], "f54": [7, true, false, false], "f55": [8, true, false, false], "f56": [9, true, false, false], "f57": [11, true, false, false], "f58": [8, true, false, false], "f59": [12, true, false, false], "f60": [7, true, false, false], "f61": [10, true, false, false], "f62": [8, true, false, true], "f63": [9, true, false, false], "f64": [8, true, false, false], "f65": [8, true, false, false], "f66": [10, true, false, false], "f67": [11, true, false, false], "f68": [7, true, false, false], "f69": [8, true, false, false], "f70": [10, true, false, false], "f71": [5, true, false, false], "f72": [23, true, false, false], "f73": [26, true, false, false], "f74": [26, true, false, false], "f75": [13, true, false, false], "f76": [44, true, false, false], "f77": [51, true, false, false], "f78": [50, true, false, false], "f79": [47, true, false, false], "f80": [21, true, false, false], "f81": [57, true, false, false], "f82": [4, true, false, false], "f83": [32, true, false, false], "f84": [8, true, false, false], "f85": [14, true, false, false], "f86": [15, true, false, false], "f87": [5, true, false, false], "f88": [14, true, false, false], "f89": [13, true, false, false], "f90": [13, true, false, false], "f91": [12, true, false, false]}, "modab": {"f01": [3, true, false, false], "f02": [12, true, false, false], "f03": [12, true, false, false], "f04": [10, true, false, false], "f05": [10, true, false, true], "f06": [10, true, false, true], "f07": [11, true, false, false], "f08": [12, true, false, true], "f09": [10, true, false, false], "f10": [9, true, false, false], "f11": [9, true, false, false], "f12": [10, true, false, true], "f13": [12, true, false, true], "f14": [12, true, false, true], "f15": [9, true, false, true], "f16": [8, true, false, false], "f17": [8, true, false, true], "f18": [11, true, false, true], "f19": [12, true, false, true], "f20": [13, true, false, true], "f21": [9, true, false, false], "f22": [9, true, false, false], "f23": [9, true, false, false], "f24": [43, true, false, false], "f25": [43, true, false, false], "f26": [43, true, false, false], "f27": [14, true, false, false], "f28": [42, true, false, false], "f29": [12, true, false, false], "f30": [13, true, false, false], "f31": [12, true, false, false], "f32": [13, true, false, false], "f33": [12, true, false, false], "f34": [12, true, false, false], "f35": [16, true, false, false], "f36": [49, true, false, false], "f37": [16, true, false, false], "f38": [47, true, false, false], "f39": [47, true, false, false], "f40": [47, true, false, false], "f41": [13, true, false, true], "f42": [12, true, false, false], "f43": [44, true, false, false], "f44": [44, true, false, false], "f45": [44, true, false, false], "f46": [14, true, false, false], "f47": [16, true, false, false], "f48": [14, true, false, false], "f49": [11, true, false, false], "f50": [11, true, false, false], "f51": [10, true, false, false], "f52": [15, true, false, false], "f53": [13, true, false, false], "f54": [9, true, false, false], "f55": [10, true, false, false], "f56": [11, true, false, false], "f57": [11, true, false, false], "f58": [10, true, false, false], "f59": [12, true, false, false], "f60": [9, true, false, false], "f61": [12, true, false, false], "f62": [10, true, false, true], "f63": [11, true, false, false], "f64": [8, true, false, false], "f65": [9, true, false, false], "f66": [13, true, false, false], "f67": [12, true, false, false], "f68": [9, true, false, false], "f69": [10, true, false, false], "f70": [13, true, false, false], "f71": [8, true, false, false], "f72": [43, true, false, false], "f73": [43, true, false, false], "f74": [43, true, false, false], "f75": [27, true, false, false], "f76": [32, true, false, false], "f77": [43, true, false, false], "f78": [9, true, false, false], "f79": [13, true, false, false], "f80": [25, true, false, false], "f81": [13, true, false, false], "f82": [5, true, false, false], "f83": [43, true, false, false], "f84": [8, true, false, false], "f85": [11, true, false, false], "f86": [14, true, false, false], "f87": [8, true, false, false], "f88": [11, true, false, false], "f89": [12, true, false, false], "f90": [13, true, false, false], "f91": [13, true, false, false]}, "chandrupatla": {"f01": [3, true, false, false], "f02": [10, true, false, false], "f03": [12, true, false, false], "f04": [9, true, false, false], "f05": [8, true, false, true], "f06": [10, true, false, true], "f07": [11, true, false, false], "f08": [12, true, false, true], "f09": [10, true, false, false], "f10": [10, true, false, false], "f11": [10, true, false, false], "f12": [9, true, false, true], "f13": [11, true, false, true], "f14": [12, true, false, true], "f15": [8, true, false, true], "f16": [8, true, false, false], "f17": [7, true, false, true], "f18": [11, true, false, true], "f19": [12, true, false, true], "f20": [13, true, false, true], "f21": [9, true, false, false], "f22": [10, true, false, false], "f23": [10, true, false, false], "f24": [43, true, false, false], "f25": [43, true, false, false], "f26": [41, true, false, false], "f27": [14, true, false, false], "f28": [47, true, false, false], "f29": [12, true, false, false], "f30": [12, true, false, false], "f31": [13, true, false, false], "f32": [12, true, false, false], "f33": [12, true, false, false], "f34": [10, true, false, false], "f35": [16, true, false, false], "f36": [47, true, false, false], "f37": [17, true, false, false], "f38": [47, true, false, false], "f39": [47, true, false, false], "f40": [47, true, false, false], "f41": [13, true, false, true], "f42": [11, true, false, false], "f43": [44, true, false, false], "f44": [44, true, false, false], "f45": [44, true, false, false], "f46": [14, true, false, false], "f47": [15, true, false, false], "f48": [17, true, false, false], "f49": [10, true, false, false], "f50": [10, true, false, false], "f51": [9, true, false, false], "f52": [14, true, false, false], "f53": [12, true, false, false], "f54": [7, true, false, false], "f55": [9, true, false, false], "f56": [9, true, false, false], "f57": [11, true, false, false], "f58": [10, true, false, false], "f59": [9, true, false, false], "f60": [8, true, false, false], "f61": [11, true, false, false], "f62": [9, true, false, true], "f63": [10, true, false, false], "f64": [9, true, false, false], "f65": [9, true, false, false], "f66": [12, true, false, false], "f67": [12, true, false, false], "f68": [9, true, false, false], "f69": [10, true, false, false], "f70": [12, true, false, false], "f71": [11, true, false, false], "f72": [48, true, false, false], "f73": [43, true, false, false], "f74": [43, true, false, false], "f75": [27, true, false, false], "f76": [43, true, false, false], "f77": [43, true, false, false], "f78": [43, true, false, false], "f79": [40, true, false, false], "f80": [29, true, false, false], "f81": [50, true, false, false], "f82": [5, true, false, false], "f83": [48, true, false, false], "f84": [13, true, false, false], "f85": [15, true, false, false], "f86": [13, true, false, false], "f87": [11, true, false, false], "f88": [12, true, false, false], "f89": [14, true, false, false], "f90": [12, true, false, false], "f91": [10, true, false, false]}}} \ No newline at end of file diff --git a/sweep_modab.py b/sweep_modab.py new file mode 100644 index 0000000..cafab9b --- /dev/null +++ b/sweep_modab.py @@ -0,0 +1,139 @@ +"""PREREG_modab_2026-09-21: A' against ModAB (the authors' package pymodab) - on the paper's +protocol (published roots), on the six corpora of section 9 (uniform criterion), and on +ModAB's own benchmark (Roots.jl f01-f91: all 91 and the 78 out of the development sets). +A' and ModAB are frozen; nothing is selected by the result. + + python -u sweep_modab.py run -> sweep_modab.json, then the verdicts + python -u sweep_modab.py --report +""" +from __future__ import annotations + +import json +import math +import sys +from multiprocessing import Pool + +import sweep_fourth +from corpus_roots_jl import build as build_rjl +from corpus_roots_jl import solved +from sweep_full import APRIME, MAXFEV, XTOL +from sweep_full import evaluate as eval_protocol +from sweep_full import make_method +from sweep_oos import sign_p + +sweep_fourth.CONFIGS["modab"] = ("base", "modab") +SETS = ("APS", "CHA", "NEW", "RJL", "APP", "D") +APRIME_SPEC = ("pure", "ratio", "derived3", "project", "x", APRIME, "recent", "distance", + "none", "pattern") + + +def eval_rjl_all(spec): + method = make_method(spec) + out = {} + for pid, f, a, b, ins in build_rjl()[0]: + try: + x, n, conv = method(f, a, b, XTOL, MAXFEV) + x = float(x) + except Exception: + x, n, conv = float("nan"), MAXFEV, False + ok = bool(conv and solved(f, x)) + over = ok and int(n) > 2 * math.ceil(math.log2(abs(b - a) / XTOL)) + 4 + out[pid] = [int(n), ok, bool(over), bool(ins)] + return out + + +def job(j): + kind, name = j + if kind == "protocol": + return kind, name, eval_protocol(("base", "modab")) + if kind in ("seen", "fourth"): + return kind, name, sweep_fourth.evaluate((name, kind))[1] + spec = APRIME_SPEC if name == "Aprime" else ("base", name) + return kind, name, eval_rjl_all(spec) + + +def cost(v): + return v[0] if v[1] else MAXFEV + + +def h2h(a, b, keep=None): + ps = [p for p in a if keep is None or keep(p)] + w = sum(cost(a[p]) < cost(b[p]) for p in ps) + l = sum(cost(a[p]) > cost(b[p]) for p in ps) + return w, len(ps) - w - l, l + + +def report(R): + ap_proto = {r["label"]: r for r in json.load(open("sweep_aprime.json", encoding="utf8"))}[ + f"pure+extP+{APRIME}.ratio.derived3.project"] + full = {r["label"]: r for r in json.load(open("sweep_full.json", encoding="utf8"))} + mp = R["protocol"]["modab"] + print("PAPER PROTOCOL (published roots)") + for s in ("APS", "CHA"): + a = {p: v for p, v in ap_proto[s]["per"].items()} + m = {p: v for p, v in mp[s]["per"].items()} + w, t, l = h2h(a, m) + print(f" {s}: A' {ap_proto[s]['total']} ModAB {mp[s]['total']} (solved {mp[s]['solved']}, " + f"over {mp[s]['over']}) Chandrupatla {full['chandrupatla'][s]['total']} " + f"A' vs ModAB {w}/{t}/{l} p={sign_p(w, l):.2g}") + seen = json.load(open("sweep_fourth_seen.json", encoding="utf8")) + four = json.load(open("sweep_fourth_fourth.json", encoding="utf8")) + for k in seen: + seen[k].update(four[k]) + md = dict(R["seen"]["modab"]) + md.update(R["fourth"]["modab"]) + print("\nSIX CORPORA (uniform criterion): A' / ModAB / Chandrupatla totals; ModAB violations; " + "A' vs ModAB") + tot_a = tot_m = 0 + for s in SETS: + a, m = seen["Aprime"][s], md[s] + ta, tm = sum(cost(v) for v in a.values()), sum(cost(v) for v in m.values()) + tc = sum(cost(v) for v in seen["chandrupatla"][s].values()) + tot_a += ta + tot_m += tm + w, t, l = h2h(a, m) + print(f" {s:<4} {ta:6d} / {tm:6d} / {tc:6d} viol {sum(v[2] for v in m.values()):3d} " + f"{w}/{t}/{l} p={sign_p(w, l):.2g}") + print(f" all {tot_a:6d} / {tot_m:6d}") + a, m = seen["Aprime"]["D"], md["D"] + w, t, l = h2h(a, m) + m1 = (sum(cost(v) for v in a.values()) < sum(cost(v) for v in m.values()) + and w > l and sign_p(w, l) < 0.05) + print(f"\nM1 (corpus 4): {'PASSED' if m1 else 'NOT passed'} - A' " + f"{sum(cost(v) for v in a.values())} vs ModAB {sum(cost(v) for v in m.values())}, " + f"{w}/{t}/{l} p={sign_p(w, l):.2g}") + for cls in ("D1", "D2", "D3", "D4", "D5", "D6"): + k = lambda p, c=cls: p.startswith(c) + w, t, l = h2h(a, m, k) + print(f" {cls}: A' {sum(cost(a[p]) for p in a if k(p))} ModAB " + f"{sum(cost(m[p]) for p in m if k(p))} {w}/{t}/{l}") + rj = R["rjl"] + print("\nMODAB'S OWN BENCHMARK (Roots.jl f01-f91)") + for title, keep in (("all 91", None), ("78 out of the development sets", lambda p: not rj["Aprime"][p][3])): + sel = [p for p in rj["Aprime"] if keep is None or keep(p)] + tots = {k: sum(cost(rj[k][p]) for p in sel) for k in rj} + w, t, l = h2h({p: rj["Aprime"][p] for p in sel}, rj["modab"]) + print(f" {title}: " + " ".join(f"{k} {tots[k]}" for k in ("Aprime", "modab", "chandrupatla")) + + f" A' vs ModAB {w}/{t}/{l} p={sign_p(w, l):.2g} ModAB viol " + f"{sum(rj['modab'][p][2] for p in sel)}") + + +def main(): + if "--report" not in sys.argv: + jobs = [("protocol", "modab"), ("seen", "modab"), ("fourth", "modab"), + ("rjl", "Aprime"), ("rjl", "modab"), ("rjl", "chandrupatla")] + with Pool(len(jobs)) as pool: + out = pool.map(job, jobs) + R = {} + for kind, name, res in out: + R.setdefault(kind, {})[name] = res + with open("sweep_modab.json", "w", encoding="utf8") as fh: + json.dump(R, fh) + with open("sweep_modab.json", encoding="utf8") as fh: + R = json.load(fh) + report(R) + print("modab done") + + +if __name__ == "__main__": + main()