"""verify_article.py checks the numbers the second revision added: Table 12 and its paragraph (sweep_estimated.json), the exact-zero stops of Table 11 (diag_revision2.point4, fresh), the three unchanged rows of Table 2 (fresh runs on aps.13.00), the two new rows of Table 3, and the fractional readings of Lagouanelle's estimate on the canonical set (fresh). Adds verify_revision2() and its call. python -u apply_verify_revision2.py """ PATH = "verify_article.py" FUNC = ''' def verify_revision2(): """Revision 2 (points 3, 4, 5, 7).""" import math print("\\nRevision 2:") 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 sign_p(w, l): k, n = min(w, l), w + l return min(1.0, 2.0 * sum(math.comb(n, i) for i in range(k + 1)) / 2.0 ** n) sets = ("APS", "CHA", "NEW", "RJL", "APP", "D") K = _load("sweep_estimated.json") seen, four = _load("sweep_fourth_seen.json"), _load("sweep_fourth_fourth.json") ap, ch = dict(seen["Aprime"]), dict(seen["chandrupatla"]) ap.update(four["Aprime"]) ch.update(four["chandrupatla"]) K1 = _load("sweep_controls.json")["K1"] nonsimple = lambda m: m >= 2.0 or m <= 2.0 / 3.0 # noqa: E731 def group(r): return sum(tot(r[s], lambda p, _m=K1[s]["mstar"]: nonsimple(_m[p])) for s in ("CHA", "NEW", "D")) rows = {"A'": ap, "K3A": K["k3_analogy"], "K3L": K["k3_lag"], "Ch(f)": ch} want = {"A'": (3656, 13032, 4042, 2259), "K3A": (3806, 15733, 2809, 3453), "K3L": (7526, 30991, 6041, 7215), "Ch(f)": (5717, 16481, 7011, 2595)} for k, r in rows.items(): check(f"Table 12 {k}", (tot(r["D"]), sum(tot(r[s]) for s in sets), group(r), tot(r["APS"])), want[k]) oracle = sum(tot(K1[s]["chandrupatla_g"], lambda p, _m=K1[s]["mstar"]: nonsimple(_m[p])) for s in ("CHA", "NEW", "D")) check("Table 12 oracle row (Table 11 sum)", oracle, 1355) ps = list(ap["D"]) w = sum(cost(ap["D"][p]) < cost(K["k3_analogy"]["D"][p]) for p in ps) l = sum(cost(ap["D"][p]) > cost(K["k3_analogy"]["D"][p]) for p in ps) check("A' vs Chandrupatla-on-g with the analogy order, corpus 4", (w, len(ps) - w - l, l), (126, 38, 76)) check("its p (1 digit)", f"{sign_p(w, l):.1g}", "0.0005") shares = [] for s in ("CHA", "NEW", "D"): keep = lambda p, _m=K1[s]["mstar"]: nonsimple(_m[p]) # noqa: E731 a_, k_, o_ = tot(ap[s], keep), tot(K["k3_analogy"][s], keep), tot(K1[s]["chandrupatla_g"], keep) shares.append((k_, a_, round(100 * (a_ - k_) / (a_ - o_)))) check("share of the A'-to-oracle gap closed by the analogy order", shares, [(322, 654, 59), (721, 1229, 58), (1766, 2159, 31)]) check("K3 bound violations", sum(v[2] for k in K for s in sets for v in K[k][s].values()), 0) # Lagouanelle's fractional readings on the simple roots of the canonical set (fresh) from simroot.transformed import chandrupatla_transformed from sweep_full import load_problems frac = 0 for s, pid, f, a, b, _r in load_problems(): if s != "APS": continue st = {} chandrupatla_transformed(f, a, b, 1e-12, 200, estimator="lag", stats=st) m = st.get("m_hat", 1.0) frac += (0.0 < m <= 2.0 / 3.0) check("Lagouanelle holds a fractional order on simple APS roots", frac, 115) # point 4: exact-zero stops (fresh) import contextlib import io import diag_revision2 with contextlib.redirect_stdout(io.StringIO()): z = diag_revision2.point4() check("exact-zero stops on CHA: Brent(g), Chandrupatla(g), A'", (z["CHA"]["brent_g"][1], z["CHA"]["chandrupatla_g"][1], z["CHA"]["Aprime"][1]), (15, 4, 2)) check("exact-zero stops of the transformed runs on corpus 1", (z["NEW"]["chandrupatla_g"][1], z["NEW"]["brent_g"][1]), (0, 0)) check("corpus 1: transformation 3.4 times cheaper", round(1229 / 358, 1), 3.4) # point 3: the three unchanged rows of Table 2 (fresh) from corpus_roots_jl import solved from sweep_full import make_method f, a, b = next((f, a, b) for s, pid, f, a, b, _r in load_problems() if pid == "aps.13.00") got = [] for name in ("dekker", "illinois", "regula_falsi"): x, n, conv = make_method(("base", name))(f, a, b, 1e-12, 200) got.append((name, int(n), bool(conv), bool(solved(f, float(x))))) check("aps.13.00: Dekker, Illinois, false position spend the budget unsolved", got, [("dekker", 200, False, False), ("illinois", 200, False, False), ("regula_falsi", 200, False, False)]) small = [abs(float(f(float(make_method(("base", nm))(f, a, b, 1e-12, 200)[0])))) < 1e-62 for nm in ("dekker", "illinois")] check("Dekker and Illinois stall where |f| < 1e-62", small, [True, True]) # point 7: Table 3's two added rows full = {r["label"]: r for r in _load("sweep_full.json")} for lb, want_ in (("pure.exp_abs.bracket.bracket", (1848, 45, 0)), ("pure.exp_abs.bracket.credit", (1952, 45, 0))): c = full[lb]["CHA"] check(f"Table 3 row {lb}", (c["total"], c["solved"], c["over"]), want_) ''' src = open(PATH, encoding="utf8").read() call_old = " verify_controls()\n\n print()" marker = '\n\nif __name__ == "__main__":\n main()\n' assert src.count(call_old) == 1 and src.count(marker) == 1 src = src.replace(call_old, " verify_controls()\n verify_revision2()\n\n print()").replace(marker, FUNC + marker) open(PATH, "w", encoding="utf8").write(src) print("added verify_revision2")