diff --git a/results_estimated.txt b/results_estimated.txt new file mode 100644 index 0000000..18aaaee --- /dev/null +++ b/results_estimated.txt @@ -0,0 +1,23 @@ +E1 - corpus 4 (decisive): K3 total vs A' total; A' w/t/l against K3, p + k3_lag: 7526 vs A' 3656 A' 199/24/17 p=1.5e-40 -> stands + k3_analogy: 3806 vs A' 3656 A' 126/38/76 p=0.00053 -> stands + outcome for the claim of 6.6: stands + +E2 - six corpora totals (violations of the 2x bound in brackets) + K3L APS 7215(0) CHA 2188(0) NEW 6618(0) RJL 3167(0) APP 4277(0) D 7526(0) | all 30991 + K3A APS 3453(0) CHA 952(0) NEW 4433(0) RJL 1416(0) APP 1673(0) D 3806(0) | all 15733 + A' APS 2259 CHA 1074 NEW 3290 RJL 1371 APP 1382 D 3656 | all 13032 + Chandrupatla(f) APS 2595 CHA 1505 NEW 3716 RJL 1566 APP 1382 D 5717 | all 16481 + +E3 - multiple/fractional roots (group of Table 11): K3L / K3A / A' / oracle (Chandrupatla on g) + CHA: n=20 k3_lag 1062 (closes -73% of A'->oracle) k3_analogy 322 (closes +59% of A'->oracle) A' 654 oracle 96 + NEW: n=40 k3_lag 1699 (closes -54% of A'->oracle) k3_analogy 721 (closes +58% of A'->oracle) A' 1229 oracle 358 + D: n=88 k3_lag 3280 (closes -89% of A'->oracle) k3_analogy 1766 (closes +31% of A'->oracle) A' 2159 oracle 901 + +E4 - the other problems: K3 against Chandrupatla on f (cost of false readings) + CHA: k3_lag 1126 k3_analogy 630 Chandrupatla(f) 437 A' 420 + NEW: k3_lag 4919 k3_analogy 3712 Chandrupatla(f) 1924 A' 2061 + D: k3_lag 4246 k3_analogy 2040 Chandrupatla(f) 1566 A' 1497 + k3_lag vs Chandrupatla(f), APS: 7215 vs 2595 + k3_analogy vs Chandrupatla(f), APS: 3453 vs 2595 +estimated done diff --git a/simroot/transformed.py b/simroot/transformed.py new file mode 100644 index 0000000..54be67b --- /dev/null +++ b/simroot/transformed.py @@ -0,0 +1,113 @@ +"""PREREG_estimated_transform_2026-09-22 (control K3): Chandrupatla's method on +g = sign(f)|f|^(1/m_hat), with m_hat estimated during the run. + +The solver is simroot.baselines.chandrupatla line for line (it matches scipy's +elementwise.find_root on all 199 problems); it keeps the TRUE values of f at its three points, so +signs, the best point and the stopping rule are those of f, and only the acceptance band's +(xi, phi) and the inverse quadratic interpolation read G(v) = sign(v)|v|^(1/m_hat), recomputed +from the stored f whenever m_hat changes - no extra evaluation. m_hat starts at 1 and is +replaced by an order read from the last three evaluations only when it lies on a branch of +section 6.1 (m >= 2 or 0 < m <= 2/3); there is no reset. With estimator="none" the method is +the original, bit for bit (tested). +""" +from __future__ import annotations + +import math + +from .baselines import Counter, _Budget +from .pure import _analogy_order, _config3, _lagouanelle_raw + +ESTIMATORS = ("none", "lag", "analogy") + + +def _G(v, inv): + if inv == 1.0: + return v + if v == 0.0: + return 0.0 + try: + return math.copysign(abs(v) ** inv, v) + except OverflowError: + # 1/m_hat > 1 on the fractional branch: a huge |f| overflows; the interpolation that + # reads it is then not finite and the step halves, as the method does for any such t + return math.copysign(math.inf, v) + + +def chandrupatla_transformed(f, a, b, xtol, maxfev, estimator="none", stats=None): + if estimator not in ESTIMATORS: + raise ValueError(f"unknown estimator {estimator!r}") + g = Counter(f, maxfev) + x1, x2 = b, a + f1 = f2 = 0.0 + m_hat = 1.0 + hist = [] # evaluations in order: (x, f) + configs = [] # analogy memory (estimator "analogy") + + def observe(x, fx): + nonlocal m_hat + hist.append((x, fx)) + if estimator == "none" or len(hist) < 3: + return + (xp2, fp2), (xp, fp), (xc, fc) = hist[-3], hist[-2], hist[-1] + if estimator == "lag": + m = _lagouanelle_raw(xc, fc, xp, fp, xp2, fp2) + else: + cur = _config3(xc, fc, xp, fp, xp2, fp2) + m = _analogy_order(cur, configs, translation=True) + if cur is not None: + configs.append(cur) + if m is not None and (m >= 2.0 or 0.0 < m <= 2.0 / 3.0): + if stats is not None and m != m_hat: + stats["updates"] = stats.get("updates", 0) + 1 + m_hat = m + if stats is not None: + stats["m_hat"] = m_hat # diagnostic only: the order last held + + try: + f1 = g(x1) + observe(x1, f1) + f2 = g(x2) + observe(x2, f2) + if f1 == 0.0: + return x1, g.n, True + if f2 == 0.0: + return x2, g.n, True + x3, f3 = x2, f2 + t = 0.5 + while True: + x = x1 + t * (x2 - x1) + fx = g(x) + observe(x, fx) + if (fx > 0.0) == (f1 > 0.0): + x3, f3 = x1, f1 + x1, f1 = x, fx + else: + x3, f3 = x2, f2 + x2, f2 = x1, f1 + x1, f1 = x, fx + xm, fm = (x1, f1) if abs(f1) < abs(f2) else (x2, f2) + if fm == 0.0: + return xm, g.n, True + tol = 2.0 * 2.22e-16 * abs(xm) + 0.5 * xtol + span = abs(x2 - x1) + if span == 0.0: + return xm, g.n, True + tl = tol / span + if tl > 0.5: + return xm, g.n, True + inv = 0.0 if math.isinf(m_hat) else 1.0 / m_hat + G1, G2, G3 = _G(f1, inv), _G(f2, inv), _G(f3, inv) + t = 0.5 + if x3 != x2 and G3 != G2: + xi = (x1 - x2) / (x3 - x2) + ph = (G1 - G2) / (G3 - G2) + if 0.0 < xi < 1.0 and 1.0 - math.sqrt(1.0 - xi) < ph < math.sqrt(xi): + d1, d2, d3 = G1 - G2, G1 - G3, G2 - G3 + if d1 != 0.0 and d2 != 0.0 and d3 != 0.0: + t = (G1 / d1) * (G3 / (-d3)) + \ + ((x3 - x1) / (x2 - x1)) * (G1 / d2) * (G2 / d3) + if not math.isfinite(t): + t = 0.5 + t = min(max(t, tl), 1.0 - tl) + except _Budget: + return (x1 if abs(f1) < abs(f2) else x2), g.n, False diff --git a/sweep_estimated.json b/sweep_estimated.json new file mode 100644 index 0000000..7d54a83 --- /dev/null +++ b/sweep_estimated.json @@ -0,0 +1 @@ +{"k3_lag": {"APS": {"aps.01.00": [9, true, false], "aps.02.00": [11, true, false], "aps.02.01": [46, true, false], "aps.02.02": [11, true, false], "aps.02.03": [11, true, false], "aps.02.04": [12, true, false], "aps.02.05": [47, true, false], "aps.02.06": [47, true, false], "aps.02.07": [47, true, false], "aps.02.08": [48, true, false], "aps.02.09": [48, true, false], "aps.03.00": [59, true, false], "aps.03.01": [16, true, false], "aps.03.02": [16, true, false], "aps.04.00": [13, true, false], "aps.04.01": [53, true, false], "aps.04.02": [14, true, false], "aps.04.03": [72, true, false], "aps.04.04": [54, true, false], "aps.04.05": [53, true, false], "aps.04.06": [12, true, false], "aps.04.07": [13, true, false], "aps.04.08": [13, true, false], "aps.04.09": [13, true, false], "aps.04.10": [12, true, false], "aps.04.11": [12, true, false], "aps.04.12": [50, true, false], "aps.04.13": [51, true, false], "aps.05.00": [8, true, false], "aps.06.00": [8, true, false], "aps.06.01": [9, true, false], "aps.06.02": [58, true, false], "aps.06.03": [48, true, false], "aps.06.04": [80, true, false], "aps.06.05": [47, true, false], "aps.06.06": [46, true, false], "aps.06.07": [47, true, false], "aps.06.08": [47, true, false], "aps.06.09": [74, true, false], "aps.07.00": [49, true, false], "aps.07.01": [48, true, false], "aps.07.02": [44, true, false], "aps.08.00": [3, true, false], "aps.08.01": [9, true, false], "aps.08.02": [11, true, false], "aps.08.03": [81, true, false], "aps.08.04": [75, true, false], "aps.09.00": [9, true, false], "aps.09.01": [46, true, false], "aps.09.02": [42, true, false], "aps.09.03": [42, true, false], "aps.09.04": [42, true, false], "aps.09.05": [42, true, false], "aps.09.06": [42, true, false], "aps.10.00": [8, true, false], "aps.10.01": [11, true, false], "aps.10.02": [43, true, false], "aps.10.03": [50, true, false], "aps.10.04": [44, true, false], "aps.11.00": [9, true, false], "aps.11.01": [10, true, false], "aps.11.02": [55, true, false], "aps.11.03": [50, true, false], "aps.12.00": [61, true, false], "aps.12.01": [66, true, false], "aps.12.02": [53, true, false], "aps.12.03": [59, true, false], "aps.12.04": [56, true, false], "aps.12.05": [59, true, false], "aps.12.06": [61, true, false], "aps.12.07": [61, true, false], "aps.12.08": [59, true, false], "aps.12.09": [69, true, false], "aps.12.10": [72, true, false], "aps.12.11": [92, true, false], "aps.12.12": [91, true, false], "aps.12.13": [10, true, false], "aps.12.14": [10, true, false], "aps.12.15": [9, true, false], "aps.12.16": [9, true, false], "aps.12.17": [9, true, false], "aps.12.18": [9, true, false], "aps.13.00": [8, true, false], "aps.14.00": [57, true, false], "aps.14.01": [57, true, false], "aps.14.02": [57, true, false], "aps.14.03": [57, true, false], "aps.14.04": [57, true, false], "aps.14.05": [57, true, false], "aps.14.06": [57, true, false], "aps.14.07": [57, true, false], "aps.14.08": [57, true, false], "aps.14.09": [57, true, false], "aps.14.10": [57, true, false], "aps.14.11": [57, true, false], "aps.14.12": [57, true, false], "aps.14.13": [57, true, false], "aps.14.14": [57, true, false], "aps.14.15": [57, true, false], "aps.14.16": [57, true, false], "aps.14.17": [57, true, false], "aps.14.18": [57, true, false], "aps.14.19": [57, true, false], "aps.14.20": [57, true, false], "aps.14.21": [57, true, false], "aps.14.22": [57, true, false], "aps.14.23": [57, true, false], "aps.14.24": [57, true, false], "aps.14.25": [57, true, false], "aps.14.26": [57, true, false], "aps.14.27": [57, true, false], "aps.14.28": [57, true, false], "aps.14.29": [57, true, false], "aps.14.30": [57, true, false], "aps.14.31": [57, true, false], "aps.14.32": [57, true, false], "aps.14.33": [57, true, false], "aps.14.34": [57, true, false], "aps.14.35": [57, true, false], "aps.14.36": [57, true, false], "aps.14.37": [57, true, false], "aps.14.38": [57, true, false], "aps.14.39": [57, true, false], "aps.15.00": [51, true, false], "aps.15.01": [56, true, false], "aps.15.02": [58, true, false], "aps.15.03": [58, true, false], "aps.15.04": [56, true, false], "aps.15.05": [56, true, false], "aps.15.06": [57, true, false], "aps.15.07": [56, true, false], "aps.15.08": [50, true, false], "aps.15.09": [56, true, false], "aps.15.10": [63, true, false], "aps.15.11": [60, true, false], "aps.15.12": [60, true, false], "aps.15.13": [62, true, false], "aps.15.14": [65, true, false], "aps.15.15": [60, true, false], "aps.15.16": [61, true, false], "aps.15.17": [63, true, false], "aps.15.18": [62, true, false], "aps.15.19": [60, true, false], "aps.15.20": [62, true, false], "aps.15.21": [56, true, false], "aps.15.22": [66, true, false], "aps.15.23": [56, true, false], "aps.15.24": [62, true, false], "aps.15.25": [60, true, false], "aps.15.26": [56, true, false], "aps.15.27": [56, true, false], "aps.15.28": [56, true, false], "aps.15.29": [55, true, false], "aps.15.30": [57, true, false]}, "CHA": {"fun1.1": [8, true, false], "fun1.2": [48, true, false], "fun1.3": [58, true, false], "fun1.4": [59, true, false], "fun1.5": [130, true, false], "fun2.1": [9, true, false], "fun2.2": [64, true, false], "fun2.3": [70, true, false], "fun2.4": [83, true, false], "fun2.5": [93, true, false], "fun3.1": [45, true, false], "fun3.2": [47, true, false], "fun3.3": [58, true, false], "fun3.4": [45, true, false], "fun3.5": [93, true, false], "fun4.1": [45, true, false], "fun4.2": [47, true, false], "fun4.3": [56, true, false], "fun4.4": [65, true, false], "fun4.5": [95, 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": [8, true, false], "fun7.2": [8, true, false], "fun7.3": [11, true, false], "fun7.4": [18, true, false], "fun7.5": [19, true, false], "fun8.1": [83, true, false], "fun8.2": [11, true, false], "fun8.3": [13, true, false], "fun8.4": [84, true, false], "fun8.5": [85, true, false], "fun9.1": [8, true, false], "fun9.2": [9, true, false], "fun9.3": [69, true, false], "fun9.4": [64, true, false], "fun9.5": [14, true, false]}, "NEW": {"C0.00": [54, true, false], "C0.01": [8, true, false], "C0.02": [9, true, false], "C0.03": [43, true, false], "C0.04": [43, true, false], "C0.05": [45, true, false], "C1.00": [47, true, false], "C1.01": [9, true, false], "C1.02": [50, true, false], "C1.03": [55, true, false], "C1.04": [12, true, false], "C1.05": [90, true, false], "C1.06": [8, true, false], "C1.07": [55, true, false], "C1.08": [7, true, false], "C1.09": [53, true, false], "C1.10": [9, true, false], "C1.11": [50, true, false], "C1.12": [49, true, false], "C1.13": [7, true, false], "C1.14": [10, true, false], "C1.15": [9, true, false], "C1.16": [14, true, false], "C1.17": [62, true, false], "C1.18": [15, true, false], "C1.19": [49, true, false], "C1.20": [16, true, false], "C1.21": [7, true, false], "C1.22": [46, true, false], "C1.23": [7, true, false], "C1.24": [10, true, false], "C1.25": [41, true, false], "C1.26": [55, true, false], "C1.27": [85, true, false], "C1.28": [46, true, false], "C1.29": [45, true, false], "C1.30": [10, true, false], "C1.31": [8, true, false], "C1.32": [56, true, false], "C1.33": [45, true, false], "C1.34": [85, true, false], "C1.35": [68, true, false], "C1.36": [50, true, false], "C1.37": [7, true, false], "C1.38": [10, true, false], "C1.39": [49, true, false], "C2.00": [13, true, false], "C2.01": [8, true, false], "C2.02": [50, true, false], "C2.03": [9, true, false], "C2.04": [61, true, false], "C2.05": [7, true, false], "C2.06": [7, true, false], "C2.07": [61, true, false], "C2.08": [64, true, false], "C2.09": [8, true, false], "C2.10": [66, true, false], "C2.11": [8, true, false], "C2.12": [61, true, false], "C2.13": [10, true, false], "C2.14": [8, true, false], "C2.15": [7, true, false], "C2.16": [6, true, false], "C2.17": [11, true, false], "C2.18": [10, true, false], "C2.19": [49, true, false], "C2.20": [68, true, false], "C2.21": [63, true, false], "C2.22": [60, true, false], "C2.23": [41, true, false], "C2.24": [64, true, false], "C2.25": [8, true, false], "C2.26": [62, true, false], "C2.27": [60, true, false], "C2.28": [7, true, false], "C2.29": [9, true, false], "C2.30": [8, true, false], "C2.31": [15, true, false], "C2.32": [57, true, false], "C2.33": [53, true, false], "C2.34": [68, true, false], "C2.35": [9, true, false], "C2.36": [7, true, false], "C2.37": [9, true, false], "C2.38": [10, true, false], "C2.39": [62, true, false], "C3.00": [42, true, false], "C3.01": [48, true, false], "C3.02": [41, true, false], "C3.03": [18, true, false], "C3.04": [40, true, false], "C3.05": [63, true, false], "C3.06": [43, true, false], "C3.07": [48, true, false], "C3.08": [46, true, false], "C3.09": [44, true, false], "C3.10": [46, true, false], "C3.11": [46, true, false], "C3.12": [37, true, false], "C3.13": [40, true, false], "C3.14": [42, true, false], "C3.15": [44, true, false], "C3.16": [48, true, false], "C3.17": [42, true, false], "C3.18": [48, true, false], "C3.19": [44, true, false], "C3.20": [41, true, false], "C3.21": [46, true, false], "C3.22": [50, true, false], "C3.23": [20, true, false], "C3.24": [46, true, false], "C3.25": [42, true, false], "C3.26": [45, true, false], "C3.27": [41, true, false], "C3.28": [41, true, false], "C3.29": [41, true, false], "C3.30": [40, true, false], "C3.31": [22, true, false], "C3.32": [45, true, false], "C3.33": [44, true, false], "C3.34": [43, true, false], "C3.35": [46, true, false], "C3.36": [42, true, false], "C3.37": [47, true, false], "C3.38": [46, true, false], "C3.39": [41, true, false], "C4.00": [8, true, false], "C4.01": [61, true, false], "C4.02": [47, true, false], "C4.03": [48, true, false], "C4.04": [14, true, false], "C4.05": [84, true, false], "C4.06": [7, true, false], "C4.07": [10, true, false], "C4.08": [10, true, false], "C4.09": [10, true, false], "C4.10": [48, true, false], "C4.11": [59, true, false], "C4.12": [7, true, false], "C4.13": [8, true, false], "C4.14": [50, true, false], "C4.15": [54, true, false], "C4.16": [8, true, false], "C4.17": [10, true, false], "C4.18": [8, true, false], "C4.19": [48, true, false], "C4.20": [51, true, false], "C4.21": [55, true, false], "C4.22": [58, true, false], "C4.23": [53, true, false], "C4.24": [11, true, false], "C4.25": [9, true, false], "C4.26": [18, true, false], "C4.27": [9, true, false], "C4.28": [9, true, false], "C4.29": [48, true, false], "C4.30": [8, true, false], "C4.31": [14, true, false], "C4.32": [15, true, false], "C4.33": [41, true, false], "C4.34": [8, true, false], "C4.35": [45, true, false], "C4.36": [54, true, false], "C4.37": [10, true, false], "C4.38": [7, true, false], "C4.39": [9, true, false], "C5.00": [9, true, false], "C5.01": [10, true, false], "C5.02": [7, true, false], "C5.03": [8, true, false], "C5.04": [53, true, false], "C5.05": [47, true, false], "C5.06": [7, true, false], "C5.07": [45, true, false], "C5.08": [46, true, false], "C5.09": [8, true, false], "C5.10": [47, true, false], "C5.11": [45, true, false], "C5.12": [8, true, false], "C5.13": [7, true, false], "C5.14": [7, true, false], "C5.15": [50, true, false], "C5.16": [10, true, false], "C5.17": [45, true, false], "C5.18": [47, true, false], "C5.19": [51, true, false], "C5.20": [44, true, false], "C5.21": [8, true, false], "C5.22": [7, true, false], "C5.23": [10, true, false], "C5.24": [45, true, false], "C5.25": [8, true, false], "C5.26": [7, true, false], "C5.27": [11, true, false], "C5.28": [45, true, false], "C5.29": [9, true, false], "C5.30": [7, true, false], "C5.31": [45, true, false], "C5.32": [52, true, false], "C5.33": [8, true, false], "C5.34": [10, true, false], "C5.35": [7, true, false], "C5.36": [10, true, false], "C5.37": [7, true, false], "C5.38": [10, true, false], "C5.39": [9, true, false]}, "RJL": {"f01": [3, true, false], "f02": [10, true, false], "f03": [12, true, false], "f04": [9, true, false], "f07": [52, true, false], "f09": [47, true, false], "f10": [57, true, false], "f11": [46, true, false], "f16": [42, true, false], "f21": [80, true, false], "f22": [55, true, false], "f23": [49, true, false], "f24": [43, true, false], "f25": [43, true, false], "f26": [43, true, false], "f27": [14, true, false], "f28": [45, true, false], "f29": [12, true, false], "f30": [42, true, false], "f31": [50, true, false], "f32": [55, true, false], "f33": [45, true, false], "f34": [10, true, false], "f35": [53, true, false], "f36": [47, true, false], "f37": [17, true, false], "f38": [47, true, false], "f39": [47, true, false], "f40": [47, true, false], "f42": [55, true, false], "f43": [44, true, false], "f44": [44, true, false], "f45": [44, true, false], "f46": [54, true, false], "f47": [50, true, false], "f48": [50, true, false], "f49": [47, true, false], "f50": [82, true, false], "f51": [53, true, false], "f52": [41, true, false], "f53": [47, true, false], "f54": [7, true, false], "f55": [50, true, false], "f56": [9, true, false], "f57": [55, true, false], "f58": [49, true, false], "f59": [49, true, false], "f60": [8, true, false], "f61": [50, true, false], "f63": [49, true, false], "f64": [9, true, false], "f65": [9, true, false], "f66": [41, true, false], "f67": [49, true, false], "f68": [57, true, false], "f69": [10, true, false], "f70": [76, true, false], "f71": [11, true, false], "f72": [47, true, false], "f73": [39, true, false], "f74": [43, true, false], "f75": [27, true, false], "f76": [43, true, false], "f77": [43, true, false], "f78": [43, true, false], "f79": [40, true, false], "f80": [50, true, false], "f81": [41, true, false], "f82": [5, true, false], "f83": [39, true, false], "f84": [51, true, false], "f85": [51, true, false], "f86": [47, true, false], "f87": [82, true, false], "f88": [49, true, false], "f89": [51, true, false], "f90": [45, true, false], "f91": [10, true, false]}, "APP": {"G.sin[3,4]": [8, true, false], "G.sin[-4,-3]": [8, true, false], "G.sin[-1/3,1]": [9, true, false], "G.cos[0,3]": [9, true, false], "G.cos[-3,0]": [9, true, false], "G.x^20-1": [51, true, false], "G.sqrt|x|sgn": [24, true, false], "G.x^2-1e-8": [46, true, false], "G.x*exp(-x)": [82, true, false], "G.(x-1)^7": [32, true, false], "P.kepler.e0.1.M0.001": [6, true, false], "P.kepler.e0.1.M0.01": [7, true, false], "P.kepler.e0.1.M0.1": [7, true, false], "P.kepler.e0.1.M0.5": [7, true, false], "P.kepler.e0.1.M1.0": [7, true, false], "P.kepler.e0.1.M2.0": [7, true, false], "P.kepler.e0.1.M3.0": [8, true, false], "P.kepler.e0.5.M0.001": [7, true, false], "P.kepler.e0.5.M0.01": [8, true, false], "P.kepler.e0.5.M0.1": [8, true, false], "P.kepler.e0.5.M0.5": [9, true, false], "P.kepler.e0.5.M1.0": [8, true, false], "P.kepler.e0.5.M2.0": [9, true, false], "P.kepler.e0.5.M3.0": [59, true, false], "P.kepler.e0.9.M0.001": [43, true, false], "P.kepler.e0.9.M0.01": [44, true, false], "P.kepler.e0.9.M0.1": [49, true, false], "P.kepler.e0.9.M0.5": [55, true, false], "P.kepler.e0.9.M1.0": [10, true, false], "P.kepler.e0.9.M2.0": [60, true, false], "P.kepler.e0.9.M3.0": [51, true, false], "P.kepler.e0.99.M0.001": [80, true, false], "P.kepler.e0.99.M0.01": [45, true, false], "P.kepler.e0.99.M0.1": [11, true, false], "P.kepler.e0.99.M0.5": [86, true, false], "P.kepler.e0.99.M1.0": [9, true, false], "P.kepler.e0.99.M2.0": [53, true, false], "P.kepler.e0.99.M3.0": [50, true, false], "P.kepler.e0.999.M0.001": [44, true, false], "P.kepler.e0.999.M0.01": [56, true, false], "P.kepler.e0.999.M0.1": [11, true, false], "P.kepler.e0.999.M0.5": [85, true, false], "P.kepler.e0.999.M1.0": [9, true, false], "P.kepler.e0.999.M2.0": [53, true, false], "P.kepler.e0.999.M3.0": [51, true, false], "P.colebrook.Re4e+03.e0.0": [10, true, false], "P.colebrook.Re4e+03.e1e-06": [11, true, false], "P.colebrook.Re4e+03.e0.0001": [10, true, false], "P.colebrook.Re4e+03.e0.001": [10, true, false], "P.colebrook.Re4e+03.e0.01": [10, true, false], "P.colebrook.Re4e+03.e0.05": [10, true, false], "P.colebrook.Re1e+04.e0.0": [11, 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": [11, true, false], "P.colebrook.Re1e+04.e0.01": [11, true, false], "P.colebrook.Re1e+04.e0.05": [10, true, false], "P.colebrook.Re1e+05.e0.0": [71, true, false], "P.colebrook.Re1e+05.e1e-06": [71, true, false], "P.colebrook.Re1e+05.e0.0001": [70, true, false], "P.colebrook.Re1e+05.e0.001": [12, true, false], "P.colebrook.Re1e+05.e0.01": [10, true, false], "P.colebrook.Re1e+05.e0.05": [10, true, false], "P.colebrook.Re1e+06.e0.0": [55, true, false], "P.colebrook.Re1e+06.e1e-06": [57, true, false], "P.colebrook.Re1e+06.e0.0001": [71, true, false], "P.colebrook.Re1e+06.e0.001": [72, true, false], "P.colebrook.Re1e+06.e0.01": [10, true, false], "P.colebrook.Re1e+06.e0.05": [10, true, false], "P.colebrook.Re1e+07.e0.0": [52, true, false], "P.colebrook.Re1e+07.e1e-06": [49, true, false], "P.colebrook.Re1e+07.e0.0001": [71, true, false], "P.colebrook.Re1e+07.e0.001": [72, true, false], "P.colebrook.Re1e+07.e0.01": [10, true, false], "P.colebrook.Re1e+07.e0.05": [10, true, false], "P.colebrook.Re1e+08.e0.0": [48, true, false], "P.colebrook.Re1e+08.e1e-06": [48, true, false], "P.colebrook.Re1e+08.e0.0001": [72, true, false], "P.colebrook.Re1e+08.e0.001": [70, true, false], "P.colebrook.Re1e+08.e0.01": [10, true, false], "P.colebrook.Re1e+08.e0.05": [10, true, false], "P.lambert.y1e-06": [6, true, false], "P.lambert.y0.001": [7, true, false], "P.lambert.y0.1": [9, true, false], "P.lambert.y1.0": [9, true, false], "P.lambert.y10.0": [10, true, false], "P.lambert.y1000.0": [12, true, false], "P.lambert.y1000000.0": [44, true, false], "P.planck.n2": [54, true, false], "P.planck.n3": [48, true, false], "P.planck.n4": [48, true, false], "P.planck.n5": [49, true, false], "P.planck.n6": [49, true, false], "P.planck.n8": [45, true, false], "P.planck.n10": [44, true, false], "P.vdw.T280.P1": [7, true, false], "P.vdw.T280.P10": [8, true, false], "P.vdw.T280.P40": [54, true, false], "P.vdw.T280.P73": [42, true, false], "P.vdw.T280.P100": [41, 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": [13, true, false], "P.vdw.T304.P100": [78, true, false], "P.vdw.T350.P1": [6, true, false], "P.vdw.T350.P10": [8, true, false], "P.vdw.T350.P40": [9, true, false], "P.vdw.T350.P73": [81, true, false], "P.vdw.T350.P100": [11, true, false], "P.vdw.T500.P1": [6, true, false], "P.vdw.T500.P10": [7, true, false], "P.vdw.T500.P40": [8, true, false], "P.vdw.T500.P73": [9, true, false], "P.vdw.T500.P100": [10, true, false], "P.irr.c5.n5": [62, true, false], "P.irr.c5.n10": [54, true, false], "P.irr.c5.n30": [49, true, false], "P.irr.c10.n5": [53, true, false], "P.irr.c10.n10": [46, true, false], "P.irr.c10.n30": [49, true, false], "P.irr.c20.n5": [54, true, false], "P.irr.c20.n10": [46, true, false], "P.irr.c20.n30": [86, true, false], "P.irr.c50.n5": [13, true, false], "P.irr.c50.n10": [47, true, false], "P.irr.c50.n30": [46, true, false], "P.well.z01": [79, true, false], "P.well.z03": [9, true, false], "P.well.z05": [62, true, false], "P.well.z010": [56, true, false], "P.well.z020": [52, true, false]}, "D": {"D1.00": [58, true, false], "D1.01": [63, true, false], "D1.02": [8, true, false], "D1.03": [48, true, false], "D1.04": [7, true, false], "D1.05": [55, true, false], "D1.06": [50, true, false], "D1.07": [12, true, false], "D1.08": [59, true, false], "D1.09": [48, true, false], "D1.10": [10, true, false], "D1.11": [14, true, false], "D1.12": [51, true, false], "D1.13": [64, true, false], "D1.14": [8, true, false], "D1.15": [7, true, false], "D1.16": [50, true, false], "D1.17": [52, true, false], "D1.18": [52, true, false], "D1.19": [56, true, false], "D1.20": [8, true, false], "D1.21": [7, true, false], "D1.22": [7, true, false], "D1.23": [80, true, false], "D1.24": [9, true, false], "D1.25": [9, true, false], "D1.26": [8, true, false], "D1.27": [67, true, false], "D1.28": [10, true, false], "D1.29": [8, true, false], "D1.30": [7, true, false], "D1.31": [86, true, false], "D1.32": [49, true, false], "D1.33": [11, true, false], "D1.34": [85, true, false], "D1.35": [11, true, false], "D1.36": [49, true, false], "D1.37": [49, true, false], "D1.38": [85, true, false], "D1.39": [8, true, false], "D2.00": [45, true, false], "D2.01": [40, true, false], "D2.02": [43, true, false], "D2.03": [44, true, false], "D2.04": [40, true, false], "D2.05": [46, true, false], "D2.06": [41, true, false], "D2.07": [44, true, false], "D2.08": [41, true, false], "D2.09": [48, true, false], "D2.10": [43, true, false], "D2.11": [42, true, false], "D2.12": [41, true, false], "D2.13": [41, true, false], "D2.14": [44, true, false], "D2.15": [45, true, false], "D2.16": [36, true, false], "D2.17": [46, true, false], "D2.18": [44, true, false], "D2.19": [40, true, false], "D2.20": [43, true, false], "D2.21": [45, true, false], "D2.22": [45, true, false], "D2.23": [46, true, false], "D2.24": [44, true, false], "D2.25": [42, true, false], "D2.26": [42, true, false], "D2.27": [41, true, false], "D2.28": [46, true, false], "D2.29": [42, true, false], "D2.30": [40, true, false], "D2.31": [47, true, false], "D2.32": [44, true, false], "D2.33": [43, true, false], "D2.34": [39, true, false], "D2.35": [45, true, false], "D2.36": [44, true, false], "D2.37": [44, true, false], "D2.38": [41, true, false], "D2.39": [44, true, false], "D3.00": [40, true, false], "D3.01": [67, true, false], "D3.02": [33, true, false], "D3.03": [21, true, false], "D3.04": [43, true, false], "D3.05": [38, true, false], "D3.06": [45, true, false], "D3.07": [24, true, false], "D3.08": [37, true, false], "D3.09": [47, true, false], "D3.10": [83, true, false], "D3.11": [36, true, false], "D3.12": [21, true, false], "D3.13": [26, true, false], "D3.14": [29, true, false], "D3.15": [70, true, false], "D3.16": [30, true, false], "D3.17": [26, true, false], "D3.18": [28, true, false], "D3.19": [18, true, false], "D3.20": [35, true, false], "D3.21": [45, true, false], "D3.22": [52, true, false], "D3.23": [39, true, false], "D3.24": [15, true, false], "D3.25": [17, true, false], "D3.26": [36, true, false], "D3.27": [47, true, false], "D3.28": [45, true, false], "D3.29": [64, true, false], "D3.30": [41, true, false], "D3.31": [33, true, false], "D3.32": [64, true, false], "D3.33": [59, true, false], "D3.34": [31, true, false], "D3.35": [43, true, false], "D3.36": [35, true, false], "D3.37": [25, true, false], "D3.38": [42, true, false], "D3.39": [44, true, false], "D4.00": [46, true, false], "D4.01": [7, true, false], "D4.02": [7, true, false], "D4.03": [8, true, false], "D4.04": [8, true, false], "D4.05": [8, true, false], "D4.06": [10, true, false], "D4.07": [7, true, false], "D4.08": [8, true, false], "D4.09": [10, true, false], "D4.10": [9, true, false], "D4.11": [8, true, false], "D4.12": [9, true, false], "D4.13": [7, true, false], "D4.14": [46, true, false], "D4.15": [9, true, false], "D4.16": [59, true, false], "D4.17": [7, true, false], "D4.18": [46, true, false], "D4.19": [8, true, false], "D4.20": [9, true, false], "D4.21": [6, true, false], "D4.22": [86, true, false], "D4.23": [9, true, false], "D4.24": [8, true, false], "D4.25": [7, true, false], "D4.26": [6, true, false], "D4.27": [8, true, false], "D4.28": [8, true, false], "D4.29": [9, true, false], "D4.30": [7, true, false], "D4.31": [7, true, false], "D4.32": [7, true, false], "D4.33": [8, true, false], "D4.34": [10, true, false], "D4.35": [7, true, false], "D4.36": [9, true, false], "D4.37": [6, true, false], "D4.38": [8, true, false], "D4.39": [9, true, false], "D5.00": [8, true, false], "D5.01": [8, true, false], "D5.02": [26, true, false], "D5.03": [20, true, false], "D5.04": [8, true, false], "D5.05": [32, true, false], "D5.06": [23, true, false], "D5.07": [29, true, false], "D5.08": [56, true, false], "D5.09": [17, true, false], "D5.10": [55, true, false], "D5.11": [26, true, false], "D5.12": [63, true, false], "D5.13": [9, true, false], "D5.14": [49, true, false], "D5.15": [53, true, false], "D5.16": [52, true, false], "D5.17": [8, true, false], "D5.18": [7, true, false], "D5.19": [13, true, false], "D5.20": [6, true, false], "D5.21": [7, true, false], "D5.22": [26, true, false], "D5.23": [52, true, false], "D5.24": [7, true, false], "D5.25": [26, true, false], "D5.26": [52, true, false], "D5.27": [15, true, false], "D5.28": [7, true, false], "D5.29": [73, true, false], "D5.30": [25, true, false], "D5.31": [10, true, false], "D5.32": [6, true, false], "D5.33": [51, true, false], "D5.34": [44, true, false], "D5.35": [54, true, false], "D5.36": [7, true, false], "D5.37": [39, true, false], "D5.38": [16, true, false], "D5.39": [49, true, false], "D6.00": [8, true, false], "D6.01": [7, true, false], "D6.02": [7, true, false], "D6.03": [66, true, false], "D6.04": [7, true, false], "D6.05": [9, true, false], "D6.06": [7, true, false], "D6.07": [8, true, false], "D6.08": [7, true, false], "D6.09": [90, true, false], "D6.10": [7, true, false], "D6.11": [7, true, false], "D6.12": [7, true, false], "D6.13": [6, true, false], "D6.14": [9, true, false], "D6.15": [44, true, false], "D6.16": [7, true, false], "D6.17": [7, true, false], "D6.18": [62, true, false], "D6.19": [71, true, false], "D6.20": [64, true, false], "D6.21": [9, true, false], "D6.22": [49, true, false], "D6.23": [7, true, false], "D6.24": [9, true, false], "D6.25": [7, true, false], "D6.26": [7, true, false], "D6.27": [55, true, false], "D6.28": [7, true, false], "D6.29": [83, true, false], "D6.30": [45, true, false], "D6.31": [63, true, false], "D6.32": [8, true, false], "D6.33": [7, true, false], "D6.34": [50, true, false], "D6.35": [62, true, false], "D6.36": [69, true, false], "D6.37": [11, true, false], "D6.38": [7, true, false], "D6.39": [49, true, false]}}, "k3_analogy": {"APS": {"aps.01.00": [9, true, false], "aps.02.00": [11, true, false], "aps.02.01": [12, true, false], "aps.02.02": [46, true, false], "aps.02.03": [46, true, false], "aps.02.04": [12, true, false], "aps.02.05": [12, true, false], "aps.02.06": [12, true, false], "aps.02.07": [12, true, false], "aps.02.08": [12, true, false], "aps.02.09": [12, true, false], "aps.03.00": [48, true, false], "aps.03.01": [49, true, false], "aps.03.02": [46, true, false], "aps.04.00": [13, true, false], "aps.04.01": [42, true, false], "aps.04.02": [44, true, false], "aps.04.03": [45, true, false], "aps.04.04": [45, true, false], "aps.04.05": [12, true, false], "aps.04.06": [45, true, false], "aps.04.07": [45, true, false], "aps.04.08": [45, true, false], "aps.04.09": [45, true, false], "aps.04.10": [39, true, false], "aps.04.11": [43, true, false], "aps.04.12": [44, true, false], "aps.04.13": [44, true, false], "aps.05.00": [8, true, false], "aps.06.00": [8, true, false], "aps.06.01": [9, true, false], "aps.06.02": [9, true, false], "aps.06.03": [10, true, false], "aps.06.04": [10, true, false], "aps.06.05": [12, true, false], "aps.06.06": [13, true, false], "aps.06.07": [14, true, false], "aps.06.08": [14, true, false], "aps.06.09": [14, true, false], "aps.07.00": [10, true, false], "aps.07.01": [10, true, false], "aps.07.02": [10, true, false], "aps.08.00": [3, true, false], "aps.08.01": [9, true, false], "aps.08.02": [11, true, false], "aps.08.03": [11, true, false], "aps.08.04": [12, true, false], "aps.09.00": [9, true, false], "aps.09.01": [10, true, false], "aps.09.02": [9, true, false], "aps.09.03": [8, true, false], "aps.09.04": [8, true, false], "aps.09.05": [7, true, false], "aps.09.06": [7, true, false], "aps.10.00": [8, true, false], "aps.10.01": [11, true, false], "aps.10.02": [12, true, false], "aps.10.03": [13, true, false], "aps.10.04": [40, true, false], "aps.11.00": [9, true, false], "aps.11.01": [10, true, false], "aps.11.02": [13, true, false], "aps.11.03": [13, true, false], "aps.12.00": [5, true, false], "aps.12.01": [11, true, false], "aps.12.02": [59, true, false], "aps.12.03": [52, true, false], "aps.12.04": [54, true, false], "aps.12.05": [51, true, false], "aps.12.06": [47, true, false], "aps.12.07": [53, true, false], "aps.12.08": [56, true, false], "aps.12.09": [10, true, false], "aps.12.10": [10, true, false], "aps.12.11": [10, true, false], "aps.12.12": [10, true, false], "aps.12.13": [10, true, false], "aps.12.14": [10, true, false], "aps.12.15": [9, true, false], "aps.12.16": [9, true, false], "aps.12.17": [9, true, false], "aps.12.18": [9, true, false], "aps.13.00": [8, true, false], "aps.14.00": [17, true, false], "aps.14.01": [17, true, false], "aps.14.02": [17, true, false], "aps.14.03": [17, true, false], "aps.14.04": [17, true, false], "aps.14.05": [17, true, false], "aps.14.06": [17, true, false], "aps.14.07": [17, true, false], "aps.14.08": [17, true, false], "aps.14.09": [17, true, false], "aps.14.10": [17, true, false], "aps.14.11": [17, true, false], "aps.14.12": [17, true, false], "aps.14.13": [17, true, false], "aps.14.14": [17, true, false], "aps.14.15": [17, true, false], "aps.14.16": [17, true, false], "aps.14.17": [17, true, false], "aps.14.18": [17, true, false], "aps.14.19": [17, true, false], "aps.14.20": [17, true, false], "aps.14.21": [17, true, false], "aps.14.22": [17, true, false], "aps.14.23": [17, true, false], "aps.14.24": [17, true, false], "aps.14.25": [17, true, false], "aps.14.26": [17, true, false], "aps.14.27": [17, true, false], "aps.14.28": [17, true, false], "aps.14.29": [17, true, false], "aps.14.30": [17, true, false], "aps.14.31": [17, true, false], "aps.14.32": [17, true, false], "aps.14.33": [17, true, false], "aps.14.34": [17, true, false], "aps.14.35": [17, true, false], "aps.14.36": [17, true, false], "aps.14.37": [17, true, false], "aps.14.38": [17, true, false], "aps.14.39": [17, true, false], "aps.15.00": [31, true, false], "aps.15.01": [31, true, false], "aps.15.02": [31, true, false], "aps.15.03": [31, true, false], "aps.15.04": [31, true, false], "aps.15.05": [31, true, false], "aps.15.06": [31, true, false], "aps.15.07": [31, true, false], "aps.15.08": [31, true, false], "aps.15.09": [31, true, false], "aps.15.10": [30, true, false], "aps.15.11": [31, true, false], "aps.15.12": [31, true, false], "aps.15.13": [31, true, false], "aps.15.14": [32, true, false], "aps.15.15": [32, true, false], "aps.15.16": [32, true, false], "aps.15.17": [32, true, false], "aps.15.18": [32, true, false], "aps.15.19": [32, true, false], "aps.15.20": [32, true, false], "aps.15.21": [33, true, false], "aps.15.22": [34, true, false], "aps.15.23": [35, true, false], "aps.15.24": [33, true, false], "aps.15.25": [36, true, false], "aps.15.26": [36, true, false], "aps.15.27": [36, true, false], "aps.15.28": [36, true, false], "aps.15.29": [36, true, false], "aps.15.30": [35, true, false]}, "CHA": {"fun1.1": [8, true, false], "fun1.2": [44, true, false], "fun1.3": [45, true, false], "fun1.4": [50, true, false], "fun1.5": [52, true, false], "fun2.1": [9, true, false], "fun2.2": [23, true, false], "fun2.3": [29, true, false], "fun2.4": [42, true, false], "fun2.5": [49, true, false], "fun3.1": [6, true, false], "fun3.2": [21, true, false], "fun3.3": [18, true, false], "fun3.4": [21, true, false], "fun3.5": [18, true, false], "fun4.1": [18, true, false], "fun4.2": [6, true, false], "fun4.3": [17, true, false], "fun4.4": [14, true, false], "fun4.5": [18, true, false], "fun5.1": [8, true, false], "fun5.2": [22, true, false], "fun5.3": [17, true, false], "fun5.4": [18, true, false], "fun5.5": [18, true, false], "fun6.1": [8, true, false], "fun6.2": [21, true, false], "fun6.3": [17, true, false], "fun6.4": [18, true, false], "fun6.5": [18, true, false], "fun7.1": [8, true, false], "fun7.2": [8, true, false], "fun7.3": [11, true, false], "fun7.4": [20, true, false], "fun7.5": [21, true, false], "fun8.1": [10, true, false], "fun8.2": [11, true, false], "fun8.3": [13, true, false], "fun8.4": [14, true, false], "fun8.5": [15, true, false], "fun9.1": [8, true, false], "fun9.2": [9, true, false], "fun9.3": [40, true, false], "fun9.4": [47, true, false], "fun9.5": [44, true, false]}, "NEW": {"C0.00": [10, true, false], "C0.01": [8, true, false], "C0.02": [9, true, false], "C0.03": [43, true, false], "C0.04": [43, true, false], "C0.05": [42, true, false], "C1.00": [45, true, false], "C1.01": [9, true, false], "C1.02": [48, true, false], "C1.03": [45, true, false], "C1.04": [43, true, false], "C1.05": [45, true, false], "C1.06": [8, true, false], "C1.07": [47, true, false], "C1.08": [7, true, false], "C1.09": [46, true, false], "C1.10": [9, true, false], "C1.11": [50, true, false], "C1.12": [10, true, false], "C1.13": [7, true, false], "C1.14": [10, true, false], "C1.15": [9, true, false], "C1.16": [14, true, false], "C1.17": [11, true, false], "C1.18": [15, true, false], "C1.19": [44, true, false], "C1.20": [46, true, false], "C1.21": [7, true, false], "C1.22": [12, true, false], "C1.23": [7, true, false], "C1.24": [10, true, false], "C1.25": [9, true, false], "C1.26": [46, true, false], "C1.27": [12, true, false], "C1.28": [48, true, false], "C1.29": [42, true, false], "C1.30": [10, true, false], "C1.31": [8, true, false], "C1.32": [46, true, false], "C1.33": [10, true, false], "C1.34": [59, true, false], "C1.35": [45, true, false], "C1.36": [48, true, false], "C1.37": [7, true, false], "C1.38": [10, true, false], "C1.39": [15, true, false], "C2.00": [48, true, false], "C2.01": [8, true, false], "C2.02": [49, true, false], "C2.03": [9, true, false], "C2.04": [10, true, false], "C2.05": [7, true, false], "C2.06": [7, true, false], "C2.07": [51, true, false], "C2.08": [51, true, false], "C2.09": [8, true, false], "C2.10": [8, true, false], "C2.11": [8, true, false], "C2.12": [47, true, false], "C2.13": [10, true, false], "C2.14": [8, true, false], "C2.15": [7, true, false], "C2.16": [6, true, false], "C2.17": [11, true, false], "C2.18": [42, true, false], "C2.19": [44, true, false], "C2.20": [10, true, false], "C2.21": [41, true, false], "C2.22": [16, true, false], "C2.23": [9, true, false], "C2.24": [10, true, false], "C2.25": [8, true, false], "C2.26": [53, true, false], "C2.27": [18, true, false], "C2.28": [7, true, false], "C2.29": [9, true, false], "C2.30": [8, true, false], "C2.31": [51, true, false], "C2.32": [51, true, false], "C2.33": [50, true, false], "C2.34": [50, true, false], "C2.35": [9, true, false], "C2.36": [7, true, false], "C2.37": [9, true, false], "C2.38": [10, true, false], "C2.39": [50, true, false], "C3.00": [21, true, false], "C3.01": [16, true, false], "C3.02": [20, true, false], "C3.03": [21, true, false], "C3.04": [16, true, false], "C3.05": [18, true, false], "C3.06": [22, true, false], "C3.07": [18, true, false], "C3.08": [17, true, false], "C3.09": [19, true, false], "C3.10": [20, true, false], "C3.11": [21, true, false], "C3.12": [16, true, false], "C3.13": [21, true, false], "C3.14": [18, true, false], "C3.15": [13, true, false], "C3.16": [16, true, false], "C3.17": [14, true, false], "C3.18": [16, true, false], "C3.19": [20, true, false], "C3.20": [20, true, false], "C3.21": [22, true, false], "C3.22": [18, true, false], "C3.23": [15, true, false], "C3.24": [18, true, false], "C3.25": [19, true, false], "C3.26": [15, true, false], "C3.27": [20, true, false], "C3.28": [15, true, false], "C3.29": [16, true, false], "C3.30": [18, true, false], "C3.31": [20, true, false], "C3.32": [21, true, false], "C3.33": [16, true, false], "C3.34": [16, true, false], "C3.35": [16, true, false], "C3.36": [21, true, false], "C3.37": [17, true, false], "C3.38": [19, true, false], "C3.39": [16, true, false], "C4.00": [8, true, false], "C4.01": [12, true, false], "C4.02": [46, true, false], "C4.03": [47, true, false], "C4.04": [48, true, false], "C4.05": [47, true, false], "C4.06": [7, true, false], "C4.07": [10, true, false], "C4.08": [10, true, false], "C4.09": [10, true, false], "C4.10": [47, true, false], "C4.11": [46, true, false], "C4.12": [7, true, false], "C4.13": [8, true, false], "C4.14": [13, true, false], "C4.15": [46, true, false], "C4.16": [8, true, false], "C4.17": [10, true, false], "C4.18": [8, true, false], "C4.19": [11, true, false], "C4.20": [51, true, false], "C4.21": [50, true, false], "C4.22": [51, true, false], "C4.23": [12, true, false], "C4.24": [11, true, false], "C4.25": [9, true, false], "C4.26": [51, true, false], "C4.27": [9, true, false], "C4.28": [9, true, false], "C4.29": [48, true, false], "C4.30": [8, true, false], "C4.31": [44, true, false], "C4.32": [48, true, false], "C4.33": [13, true, false], "C4.34": [8, true, false], "C4.35": [11, true, false], "C4.36": [11, true, false], "C4.37": [10, true, false], "C4.38": [7, true, false], "C4.39": [9, true, false], "C5.00": [9, true, false], "C5.01": [10, true, false], "C5.02": [7, true, false], "C5.03": [8, true, false], "C5.04": [46, true, false], "C5.05": [46, true, false], "C5.06": [7, true, false], "C5.07": [39, true, false], "C5.08": [43, true, false], "C5.09": [8, true, false], "C5.10": [47, true, false], "C5.11": [11, true, false], "C5.12": [8, true, false], "C5.13": [7, true, false], "C5.14": [7, true, false], "C5.15": [44, true, false], "C5.16": [10, true, false], "C5.17": [45, true, false], "C5.18": [45, true, false], "C5.19": [43, true, false], "C5.20": [10, true, false], "C5.21": [8, true, false], "C5.22": [7, true, false], "C5.23": [10, true, false], "C5.24": [12, true, false], "C5.25": [8, true, false], "C5.26": [7, true, false], "C5.27": [11, true, false], "C5.28": [10, true, false], "C5.29": [9, true, false], "C5.30": [7, true, false], "C5.31": [44, true, false], "C5.32": [10, true, false], "C5.33": [8, true, false], "C5.34": [10, true, false], "C5.35": [7, true, false], "C5.36": [10, true, false], "C5.37": [7, true, false], "C5.38": [10, true, false], "C5.39": [9, true, false]}, "RJL": {"f01": [3, true, false], "f02": [10, true, false], "f03": [12, true, false], "f04": [9, true, false], "f07": [11, true, false], "f09": [10, true, false], "f10": [10, true, false], "f11": [10, true, false], "f16": [8, true, false], "f21": [9, true, false], "f22": [10, true, false], "f23": [10, true, false], "f24": [17, true, false], "f25": [15, true, false], "f26": [17, true, false], "f27": [10, true, false], "f28": [17, true, false], "f29": [7, true, false], "f30": [39, true, false], "f31": [13, true, false], "f32": [12, true, false], "f33": [12, true, false], "f34": [10, true, false], "f35": [56, true, false], "f36": [27, true, false], "f37": [40, true, false], "f38": [47, true, false], "f39": [47, true, false], "f40": [47, true, false], "f42": [11, true, false], "f43": [18, true, false], "f44": [18, true, false], "f45": [23, true, false], "f46": [14, true, false], "f47": [15, true, false], "f48": [41, true, false], "f49": [10, true, false], "f50": [10, true, false], "f51": [9, true, false], "f52": [45, true, false], "f53": [12, true, false], "f54": [7, true, false], "f55": [9, true, false], "f56": [9, true, false], "f57": [11, true, false], "f58": [10, true, false], "f59": [9, true, false], "f60": [8, true, false], "f61": [11, true, false], "f63": [10, true, false], "f64": [9, true, false], "f65": [9, true, false], "f66": [12, true, false], "f67": [12, true, false], "f68": [9, true, false], "f69": [10, true, false], "f70": [45, true, false], "f71": [11, true, false], "f72": [16, true, false], "f73": [15, true, false], "f74": [13, true, false], "f75": [8, true, false], "f76": [43, true, false], "f77": [43, true, false], "f78": [43, true, false], "f79": [40, true, false], "f80": [46, true, false], "f81": [45, true, false], "f82": [5, true, false], "f83": [27, true, false], "f84": [13, true, false], "f85": [15, true, false], "f86": [13, true, false], "f87": [11, true, false], "f88": [12, true, false], "f89": [14, true, false], "f90": [12, true, false], "f91": [10, true, false]}, "APP": {"G.sin[3,4]": [8, true, false], "G.sin[-4,-3]": [8, true, false], "G.sin[-1/3,1]": [9, true, false], "G.cos[0,3]": [9, true, false], "G.cos[-3,0]": [9, true, false], "G.x^20-1": [43, true, false], "G.sqrt|x|sgn": [4, true, false], "G.x^2-1e-8": [28, true, false], "G.x*exp(-x)": [10, true, false], "G.(x-1)^7": [7, true, false], "P.kepler.e0.1.M0.001": [6, true, false], "P.kepler.e0.1.M0.01": [7, true, false], "P.kepler.e0.1.M0.1": [7, true, false], "P.kepler.e0.1.M0.5": [7, true, false], "P.kepler.e0.1.M1.0": [7, true, false], "P.kepler.e0.1.M2.0": [7, true, false], "P.kepler.e0.1.M3.0": [8, true, false], "P.kepler.e0.5.M0.001": [7, true, false], "P.kepler.e0.5.M0.01": [8, true, false], "P.kepler.e0.5.M0.1": [8, true, false], "P.kepler.e0.5.M0.5": [9, true, false], "P.kepler.e0.5.M1.0": [8, 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": [10, true, false], "P.kepler.e0.9.M0.01": [11, true, false], "P.kepler.e0.9.M0.1": [11, 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": [9, true, false], "P.kepler.e0.99.M0.001": [45, true, false], "P.kepler.e0.99.M0.01": [39, true, false], "P.kepler.e0.99.M0.1": [11, true, false], "P.kepler.e0.99.M0.5": [11, true, false], "P.kepler.e0.99.M1.0": [9, true, false], "P.kepler.e0.99.M2.0": [9, true, false], "P.kepler.e0.99.M3.0": [9, true, false], "P.kepler.e0.999.M0.001": [43, true, false], "P.kepler.e0.999.M0.01": [42, true, false], "P.kepler.e0.999.M0.1": [11, true, false], "P.kepler.e0.999.M0.5": [10, true, false], "P.kepler.e0.999.M1.0": [9, true, false], "P.kepler.e0.999.M2.0": [9, true, false], "P.kepler.e0.999.M3.0": [9, true, false], "P.colebrook.Re4e+03.e0.0": [10, true, false], "P.colebrook.Re4e+03.e1e-06": [11, true, false], "P.colebrook.Re4e+03.e0.0001": [10, true, false], "P.colebrook.Re4e+03.e0.001": [10, true, false], "P.colebrook.Re4e+03.e0.01": [10, true, false], "P.colebrook.Re4e+03.e0.05": [10, true, false], "P.colebrook.Re1e+04.e0.0": [11, 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": [11, true, false], "P.colebrook.Re1e+04.e0.01": [11, true, false], "P.colebrook.Re1e+04.e0.05": [10, 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": [12, true, false], "P.colebrook.Re1e+05.e0.001": [12, true, false], "P.colebrook.Re1e+05.e0.01": [10, true, false], "P.colebrook.Re1e+05.e0.05": [10, true, false], "P.colebrook.Re1e+06.e0.0": [13, true, false], "P.colebrook.Re1e+06.e1e-06": [13, true, false], "P.colebrook.Re1e+06.e0.0001": [11, true, false], "P.colebrook.Re1e+06.e0.001": [11, true, false], "P.colebrook.Re1e+06.e0.01": [10, true, false], "P.colebrook.Re1e+06.e0.05": [10, 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": [13, true, false], "P.colebrook.Re1e+07.e0.001": [10, true, false], "P.colebrook.Re1e+07.e0.01": [10, true, false], "P.colebrook.Re1e+07.e0.05": [10, true, false], "P.colebrook.Re1e+08.e0.0": [13, true, false], "P.colebrook.Re1e+08.e1e-06": [13, true, false], "P.colebrook.Re1e+08.e0.0001": [12, true, false], "P.colebrook.Re1e+08.e0.001": [11, true, false], "P.colebrook.Re1e+08.e0.01": [10, true, false], "P.colebrook.Re1e+08.e0.05": [10, true, false], "P.lambert.y1e-06": [6, true, false], "P.lambert.y0.001": [7, true, false], "P.lambert.y0.1": [9, true, false], "P.lambert.y1.0": [9, true, false], "P.lambert.y10.0": [10, true, false], "P.lambert.y1000.0": [12, true, false], "P.lambert.y1000000.0": [12, true, false], "P.planck.n2": [10, true, false], "P.planck.n3": [10, true, false], "P.planck.n4": [10, true, false], "P.planck.n5": [10, true, false], "P.planck.n6": [10, true, false], "P.planck.n8": [9, true, false], "P.planck.n10": [9, true, false], "P.vdw.T280.P1": [7, true, false], "P.vdw.T280.P10": [8, true, false], "P.vdw.T280.P40": [12, true, false], "P.vdw.T280.P73": [13, true, false], "P.vdw.T280.P100": [44, 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": [13, true, false], "P.vdw.T304.P100": [13, true, false], "P.vdw.T350.P1": [6, true, false], "P.vdw.T350.P10": [8, true, false], "P.vdw.T350.P40": [9, true, false], "P.vdw.T350.P73": [12, true, false], "P.vdw.T350.P100": [11, true, false], "P.vdw.T500.P1": [6, true, false], "P.vdw.T500.P10": [7, true, false], "P.vdw.T500.P40": [8, true, false], "P.vdw.T500.P73": [9, true, false], "P.vdw.T500.P100": [10, true, false], "P.irr.c5.n5": [14, true, false], "P.irr.c5.n10": [15, true, false], "P.irr.c5.n30": [45, true, false], "P.irr.c10.n5": [14, true, false], "P.irr.c10.n10": [14, true, false], "P.irr.c10.n30": [45, true, false], "P.irr.c20.n5": [12, true, false], "P.irr.c20.n10": [14, true, false], "P.irr.c20.n30": [52, true, false], "P.irr.c50.n5": [13, true, false], "P.irr.c50.n10": [13, true, false], "P.irr.c50.n30": [46, true, false], "P.well.z01": [8, true, false], "P.well.z03": [9, true, false], "P.well.z05": [9, true, false], "P.well.z010": [9, true, false], "P.well.z020": [9, true, false]}, "D": {"D1.00": [46, true, false], "D1.01": [46, true, false], "D1.02": [8, true, false], "D1.03": [44, true, false], "D1.04": [7, true, false], "D1.05": [10, true, false], "D1.06": [10, true, false], "D1.07": [12, true, false], "D1.08": [9, true, false], "D1.09": [10, true, false], "D1.10": [10, true, false], "D1.11": [47, true, false], "D1.12": [15, true, false], "D1.13": [12, true, false], "D1.14": [8, true, false], "D1.15": [7, true, false], "D1.16": [9, true, false], "D1.17": [47, true, false], "D1.18": [15, true, false], "D1.19": [10, true, false], "D1.20": [8, true, false], "D1.21": [7, true, false], "D1.22": [7, true, false], "D1.23": [9, true, false], "D1.24": [9, true, false], "D1.25": [9, true, false], "D1.26": [8, true, false], "D1.27": [12, true, false], "D1.28": [10, true, false], "D1.29": [8, true, false], "D1.30": [7, true, false], "D1.31": [9, true, false], "D1.32": [12, true, false], "D1.33": [11, true, false], "D1.34": [49, true, false], "D1.35": [11, true, false], "D1.36": [10, true, false], "D1.37": [9, true, false], "D1.38": [44, true, false], "D1.39": [8, true, false], "D2.00": [22, true, false], "D2.01": [21, true, false], "D2.02": [20, true, false], "D2.03": [18, true, false], "D2.04": [17, true, false], "D2.05": [19, true, false], "D2.06": [20, true, false], "D2.07": [22, true, false], "D2.08": [19, true, false], "D2.09": [19, true, false], "D2.10": [16, true, false], "D2.11": [18, true, false], "D2.12": [16, true, false], "D2.13": [16, true, false], "D2.14": [18, true, false], "D2.15": [13, true, false], "D2.16": [17, true, false], "D2.17": [20, true, false], "D2.18": [18, true, false], "D2.19": [16, true, false], "D2.20": [16, true, false], "D2.21": [16, true, false], "D2.22": [16, true, false], "D2.23": [21, true, false], "D2.24": [19, true, false], "D2.25": [20, true, false], "D2.26": [21, true, false], "D2.27": [20, true, false], "D2.28": [18, true, false], "D2.29": [17, true, false], "D2.30": [17, true, false], "D2.31": [21, true, false], "D2.32": [17, true, false], "D2.33": [14, true, false], "D2.34": [18, true, false], "D2.35": [21, true, false], "D2.36": [17, true, false], "D2.37": [15, true, false], "D2.38": [19, true, false], "D2.39": [16, true, false], "D3.00": [24, true, false], "D3.01": [16, true, false], "D3.02": [22, true, false], "D3.03": [22, true, false], "D3.04": [16, true, false], "D3.05": [38, true, false], "D3.06": [23, true, false], "D3.07": [15, true, false], "D3.08": [23, true, false], "D3.09": [21, true, false], "D3.10": [27, true, false], "D3.11": [24, true, false], "D3.12": [16, true, false], "D3.13": [35, true, false], "D3.14": [31, true, false], "D3.15": [45, true, false], "D3.16": [21, true, false], "D3.17": [17, true, false], "D3.18": [30, true, false], "D3.19": [19, true, false], "D3.20": [23, true, false], "D3.21": [22, true, false], "D3.22": [34, true, false], "D3.23": [22, true, false], "D3.24": [21, true, false], "D3.25": [20, true, false], "D3.26": [24, true, false], "D3.27": [17, true, false], "D3.28": [26, true, false], "D3.29": [24, true, false], "D3.30": [29, true, false], "D3.31": [30, true, false], "D3.32": [20, true, false], "D3.33": [19, true, false], "D3.34": [19, true, false], "D3.35": [23, true, false], "D3.36": [31, true, false], "D3.37": [17, true, false], "D3.38": [21, true, false], "D3.39": [12, true, false], "D4.00": [10, true, false], "D4.01": [7, true, false], "D4.02": [7, true, false], "D4.03": [8, true, false], "D4.04": [8, true, false], "D4.05": [8, true, false], "D4.06": [10, true, false], "D4.07": [7, true, false], "D4.08": [8, true, false], "D4.09": [10, true, false], "D4.10": [9, true, false], "D4.11": [8, true, false], "D4.12": [9, true, false], "D4.13": [7, true, false], "D4.14": [10, true, false], "D4.15": [9, true, false], "D4.16": [13, true, false], "D4.17": [7, true, false], "D4.18": [8, true, false], "D4.19": [8, true, false], "D4.20": [9, true, false], "D4.21": [6, true, false], "D4.22": [9, true, false], "D4.23": [9, true, false], "D4.24": [8, true, false], "D4.25": [7, true, false], "D4.26": [6, true, false], "D4.27": [8, true, false], "D4.28": [8, true, false], "D4.29": [9, true, false], "D4.30": [7, true, false], "D4.31": [7, true, false], "D4.32": [7, true, false], "D4.33": [8, true, false], "D4.34": [10, true, false], "D4.35": [7, true, false], "D4.36": [9, true, false], "D4.37": [6, true, false], "D4.38": [8, true, false], "D4.39": [9, true, false], "D5.00": [8, true, false], "D5.01": [8, true, false], "D5.02": [21, true, false], "D5.03": [21, true, false], "D5.04": [8, true, false], "D5.05": [20, true, false], "D5.06": [21, true, false], "D5.07": [21, true, false], "D5.08": [12, true, false], "D5.09": [31, true, false], "D5.10": [9, true, false], "D5.11": [15, true, false], "D5.12": [10, true, false], "D5.13": [9, true, false], "D5.14": [9, true, false], "D5.15": [10, true, false], "D5.16": [46, true, false], "D5.17": [8, true, false], "D5.18": [7, true, false], "D5.19": [20, true, false], "D5.20": [6, true, false], "D5.21": [7, true, false], "D5.22": [19, true, false], "D5.23": [11, true, false], "D5.24": [7, true, false], "D5.25": [25, true, false], "D5.26": [9, true, false], "D5.27": [16, true, false], "D5.28": [7, true, false], "D5.29": [11, true, false], "D5.30": [23, true, false], "D5.31": [10, true, false], "D5.32": [6, true, false], "D5.33": [10, true, false], "D5.34": [21, true, false], "D5.35": [47, true, false], "D5.36": [7, true, false], "D5.37": [23, true, false], "D5.38": [21, true, false], "D5.39": [10, true, false], "D6.00": [8, true, false], "D6.01": [7, true, false], "D6.02": [7, true, false], "D6.03": [47, true, false], "D6.04": [7, true, false], "D6.05": [9, true, false], "D6.06": [7, true, false], "D6.07": [8, 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": [9, true, false], "D6.15": [9, true, false], "D6.16": [7, true, false], "D6.17": [7, true, false], "D6.18": [10, true, false], "D6.19": [11, true, false], "D6.20": [9, true, false], "D6.21": [9, true, false], "D6.22": [50, true, false], "D6.23": [7, true, false], "D6.24": [9, true, false], "D6.25": [7, true, false], "D6.26": [7, true, false], "D6.27": [11, true, false], "D6.28": [7, true, false], "D6.29": [8, true, false], "D6.30": [43, true, false], "D6.31": [11, true, false], "D6.32": [8, true, false], "D6.33": [7, true, false], "D6.34": [46, true, false], "D6.35": [12, true, false], "D6.36": [56, true, false], "D6.37": [11, true, false], "D6.38": [7, true, false], "D6.39": [45, true, false]}}} \ No newline at end of file diff --git a/sweep_estimated.py b/sweep_estimated.py new file mode 100644 index 0000000..9463e4e --- /dev/null +++ b/sweep_estimated.py @@ -0,0 +1,114 @@ +"""PREREG_estimated_transform_2026-09-22 (control K3): Chandrupatla on sign(f)|f|^(1/m_hat), m_hat +estimated during the run by Lagouanelle (K3L) or by A's analogy order (K3A), on the six corpora with +the harness of sweep_fourth.py (same problems, seeding, charging, uniform criterion). Report E1-E4. + + python -u sweep_estimated.py run -> sweep_estimated.json, then the report + python -u sweep_estimated.py --report +""" +from __future__ import annotations + +import functools +import json +import sys +from multiprocessing import Pool + +import sweep_fourth +import sweep_full +from simroot.transformed import chandrupatla_transformed +from sweep_controls import nonsimple +from sweep_oos import sign_p + +for _name, _est in (("k3_lag", "lag"), ("k3_analogy", "analogy")): + sweep_full.EXTRA_BASELINES[_name] = functools.partial(chandrupatla_transformed, estimator=_est) + sweep_fourth.CONFIGS[_name] = ("base", _name) +NAMES = ("k3_lag", "k3_analogy") +SETS = ("APS", "CHA", "NEW", "RJL", "APP", "D") + + +def job(j): + name, which = j + return name, sweep_fourth.evaluate((name, which))[1] + + +def cost(v): + return v[0] if v[1] else 200 + + +def tot(r, keep=None): + return sum(cost(v) for p, v in r.items() if keep is None or keep(p)) + + +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): + seen = json.load(open("sweep_fourth_seen.json", encoding="utf8")) + four = json.load(open("sweep_fourth_fourth.json", encoding="utf8")) + ref = {} + for k in ("Aprime", "chandrupatla"): + ref[k] = dict(seen[k]) + ref[k].update(four[k]) + ap, ch = ref["Aprime"], ref["chandrupatla"] + K1 = json.load(open("sweep_controls.json", encoding="utf8"))["K1"] + print("E1 - corpus 4 (decisive): K3 total vs A' total; A' w/t/l against K3, p") + verdict = [] + for k in NAMES: + w, t, l = h2h(ap["D"], R[k]["D"]) + k3_not_worse = tot(R[k]["D"]) <= tot(ap["D"]) + k3_wins = l > w and sign_p(w, l) < 0.05 + a_wins = tot(ap["D"]) < tot(R[k]["D"]) and w > l and sign_p(w, l) < 0.05 + verdict.append("withdraw" if (k3_not_worse or k3_wins) else ("stands" if a_wins else "intermediate")) + print(f" {k}: {tot(R[k]['D'])} vs A' {tot(ap['D'])} A' {w}/{t}/{l} p={sign_p(w, l):.2g} -> {verdict[-1]}") + overall = "withdraw" if "withdraw" in verdict else ("stands" if all(v == "stands" for v in verdict) + else "intermediate") + print(f" outcome for the claim of 6.6: {overall}") + print("\nE2 - six corpora totals (violations of the 2x bound in brackets)") + for k, r in (("K3L", R["k3_lag"]), ("K3A", R["k3_analogy"]), ("A'", ap), ("Chandrupatla(f)", ch)): + cells = " ".join(f"{s} {tot(r[s])}" + (f"({sum(v[2] for v in r[s].values())})" if k.startswith("K3") else "") + for s in SETS) + print(f" {k:<16} {cells} | all {sum(tot(r[s]) for s in SETS)}") + print("\nE3 - multiple/fractional roots (group of Table 11): K3L / K3A / A' / oracle (Chandrupatla on g)") + for s in ("CHA", "NEW", "D"): + m = K1[s]["mstar"] + keep = lambda p, _m=m: nonsimple(_m[p]) # noqa: E731 + orc = tot(K1[s]["chandrupatla_g"], keep) + a_ = tot(ap[s], keep) + row = [] + for k in NAMES: + v = tot(R[k][s], keep) + share = (a_ - v) / (a_ - orc) if a_ != orc else float("nan") + row.append(f"{k} {v} (closes {100 * share:+.0f}% of A'->oracle)") + print(f" {s}: n={sum(1 for p in m if keep(p))} " + " ".join(row) + f" A' {a_} oracle {orc}") + print("\nE4 - the other problems: K3 against Chandrupatla on f (cost of false readings)") + for s in ("CHA", "NEW", "D"): + m = K1[s]["mstar"] + keep = lambda p, _m=m: not nonsimple(_m[p]) # noqa: E731 + print(f" {s}: " + " ".join(f"{k} {tot(R[k][s], keep)}" for k in NAMES) + + f" Chandrupatla(f) {tot(ch[s], keep)} A' {tot(ap[s], keep)}") + for k in NAMES: + keep = lambda p: True # noqa: E731 + print(f" {k} vs Chandrupatla(f), APS: {tot(R[k]['APS'])} vs {tot(ch['APS'])}") + + +def main(): + if "--report" not in sys.argv: + jobs = [(n, w) for n in NAMES for w in ("seen", "fourth")] + with Pool(len(jobs)) as pool: + out = pool.map(job, jobs) + R = {} + for name, res in out: + R.setdefault(name, {}).update(res) + with open("sweep_estimated.json", "w", encoding="utf8") as fh: + json.dump(R, fh) + with open("sweep_estimated.json", encoding="utf8") as fh: + R = json.load(fh) + report(R) + print("estimated done") + + +if __name__ == "__main__": + main() diff --git a/tests/test_transformed.py b/tests/test_transformed.py new file mode 100644 index 0000000..157a3ea --- /dev/null +++ b/tests/test_transformed.py @@ -0,0 +1,60 @@ +"""PREREG_estimated_transform_2026-09-22: the control K3 must be Chandrupatla's method itself when +no order is estimated, and must stay a bracketing method when one is.""" +from __future__ import annotations + +import math + +import pytest + +from simroot.baselines import chandrupatla +from simroot.transformed import chandrupatla_transformed +from sweep_full import load_problems + +PROBS = load_problems() + + +def test_without_an_estimate_it_is_chandrupatla_bit_for_bit(): + bad = [] + for s, pid, f, a, b, _r in PROBS: + r1 = chandrupatla(f, a, b, 1e-12, 200) + r2 = chandrupatla_transformed(f, a, b, 1e-12, 200, estimator="none") + if (float(r1[0]).hex(), r1[1], r1[2]) != (float(r2[0]).hex(), r2[1], r2[2]): + bad.append(pid) + assert not bad, bad[:5] + + +@pytest.mark.parametrize("estimator", ("lag", "analogy")) +def test_with_an_estimate_it_still_brackets(estimator): + for s, pid, f, a, b, _r in PROBS: + x, n, ok = chandrupatla_transformed(f, a, b, 1e-12, 200, estimator=estimator) + assert min(a, b) <= x <= max(a, b), pid + assert n <= 200 + + +def test_the_estimate_is_read_and_used_on_a_pure_power(): + """The analogy estimator must reach m_hat on (t - 1)^9 and pay. Lagouanelle's is NOT asserted: + on Chandrupatla's iterates, which alternate sides of the root, its three-point parabola reads + m ~ 1 at every step - an outcome of the experiment, reported by the run, not a property + to pin here.""" + f = lambda t: (t - 1.0) ** 9 # noqa: E731 + plain = chandrupatla_transformed(f, -2.0, 5.0, 1e-12, 200, estimator="none")[1] + st = {} + x, n, ok = chandrupatla_transformed(f, -2.0, 5.0, 1e-12, 200, estimator="analogy", stats=st) + assert ok and abs(x - 1.0) < 1e-6 + assert st.get("updates", 0) >= 1 + assert n < plain, (n, plain) + x, n, ok = chandrupatla_transformed(f, -2.0, 5.0, 1e-12, 200, estimator="lag") + assert ok and abs(x - 1.0) < 1e-6 + + +def test_an_overflowing_transform_halves_instead_of_raising(): + """Found 2026-09-22: on the fractional branch 1/m_hat > 1 and |f|^(1/m_hat) overflowed with + an OverflowError that escaped the solver. Now it is inf, the interpolation is refused, and + the step halves.""" + from simroot.transformed import _G + assert _G(1e300, 3.0) == math.inf and _G(-1e300, 3.0) == -math.inf + + +def test_unknown_estimator_is_refused(): + with pytest.raises(ValueError): + chandrupatla_transformed(math.sin, 3.0, 4.0, 1e-12, 200, estimator="guess")