"""The exact numbers the new sections of the paper must quote, printed from the sweep files. Nothing here is typed by hand into the paper: verify_article.py re-checks every one of them. python -u numbers_for_article.py """ from __future__ import annotations import json import os FILES = {"published": "sweep_full.json", "slope": "sweep_slope.json", "shape": "sweep_points.json", "dissimilar": "sweep_direction.json", "combo": "sweep_combo.json", "progress": "sweep_gate.json", "logspace": "sweep_log.json"} GUARANTEE = ("credit", "project", "safe") def load(path): if not os.path.exists(path): return None with open(path, encoding="utf8") as fh: return json.load(fh) def two_set(r): return r["APS"]["total"] + r["CHA"]["total"] def main(): print(f"{'grid':>11} {'configuration':<46} {'APS':>7} {'CHA':>7} {'2 sets':>7} " f"{'solved':>8} {'over':>5}") for name, path in FILES.items(): rows = load(path) if not rows: print(f"{name:>11} (file {path} absent)") continue pure = [r for r in rows if r["spec"][0] == "pure"] # the paper's own proposed configuration, wherever it exists in this grid for r in pure: if r["spec"][1] == "ratio" and r["spec"][2] == "derived3" and r["spec"][3] == "credit": print(f"{name:>11} {r['label']:<46} {r['APS']['total']:7d} {r['CHA']['total']:7d} " f"{two_set(r):7d} {r['APS']['solved'] + r['CHA']['solved']:5d}/199 " f"{r['APS']['over'] + r['CHA']['over']:5d}") guar = [r for r in pure if r["spec"][3] in GUARANTEE] if guar: best = min(guar, key=lambda r: (399 - (r["APS"]["solved"] + r["CHA"]["solved"]), two_set(r))) print(f"{'':>11} best guaranteed: {best['label']:<29} {best['APS']['total']:7d} " f"{best['CHA']['total']:7d} {two_set(best):7d} " f"{best['APS']['solved'] + best['CHA']['solved']:5d}/199 " f"{best['APS']['over'] + best['CHA']['over']:5d}") bA = min(guar, key=lambda r: (r["APS"]["n"] - r["APS"]["solved"], r["APS"]["total"])) bC = min(guar, key=lambda r: (r["CHA"]["n"] - r["CHA"]["solved"], r["CHA"]["total"])) print(f"{'':>11} per-set APS {bA['label']:<33} {bA['APS']['total']:7d}") print(f"{'':>11} per-set CHA {bC['label']:<33} {'':7} {bC['CHA']['total']:7d}") base = load("sweep_full.json") if base: print("\nbaselines (from the published sweep):") for nm in ("chandrupatla", "toms748", "brent", "itp", "itp_oracle", "bisection"): cand = [r for r in base if r["spec"][0] == "base" and r["label"] == nm] if cand: r = cand[0] print(f"{'':>11} {nm:<46} {r['APS']['total']:7d} {r['CHA']['total']:7d} " f"{two_set(r):7d} {r['APS']['solved'] + r['CHA']['solved']:5d}/199 " f"{r['APS']['over'] + r['CHA']['over']:5d}") if __name__ == "__main__": main()