Revision 1, step 1: one scoring criterion, the correct order, and the internal inconsistencies.
Point 1. The base step's order is Muller's 1.839, not 2: the derivative of the parabola through
the last three points errs by f'''/6 (x_n - x_{n-1})(x_n - x_{n-2}) = O(e_{n-1} e_{n-2}).
order_high_precision.py (3000 digits, to 1e-2900): 1.840 on cos x - x, e^x - 2, x^3 - x - 2,
sin x - 1/2; 2.000 only on x^2 - 2; two-point 1.618. The double-precision medians (2.000, 1.94)
are removed from the text.
Point 3. Every protocol number is re-scored under the criterion of section 9 - a sign change
within 1e-6 or f(x) == 0. rescore_uniform.py re-runs all 2779 distinct configurations of the 25
protocol sweeps on APS and CHA (the runs did not keep x) -> sweep_uniform.json, same row format;
it reproduces the APS/CHA lines of Table 10 exactly (built-in check). verify_article.py,
audit_similarity_places.py and the gap diagnostics read the re-scored data; the multiplier and
endowment measurements score by the same criterion. Table 7 (two criteria side by side) is gone;
7.3 now explains why the criterion is a sign change. Consequences stated in the text: the base
rule 2634 / 2357 against Chandrupatla 2595 / 1505 (1.5% behind on APS, no longer "level"); A'
2259 / 1074 (12.9% and 28.6% below Chandrupatla); the defect reading 2351 is second to the
shape reading 2337, not the record; the remembered analogy is level with no regime (2633 vs
2634) under this criterion; Table 9a's range is 19% to 425%.
Point 8. report_sweep.head_to_head counts every problem, failures charged (it counted only the
problems both methods solved, which is why Table 8 rows summed to 153 and 40). Family-level
comparisons added (A' vs Chandrupatla 8/1/6 of 15 and 7/0/2 of 9 families, not significant), and
an independence paragraph in section 9.
Point 11. sweep_itp.py: ITP (recommended constants and per-problem oracle) on all six corpora ->
Table 10; behind A' on every corpus, 0 bound violations.
Points 7, 9, 10 and the internals: the 2x bound is ours, not the rivals' promise; the law
predicts the group order only; "outside the proven bracket" explained (narrowest bracket of all
observed signs); 7.4's fun1 paragraph corrected (five costs under safe; the unguarded numbers
belong to fun1.4, fun1.5 and to fun3.1, fun5.1 separately); Table 1's last cell; the corpus-4
composition and odd multiplicities stated, also in the abstract.
build_tex.py: pdflatex output decoded with errors="replace" (a UTF-8 character cut by TeX's log
wrap crashed the build). Table 10 column widths rebalanced.
Checks: verify_article on the server 500 OK / 0 BAD (467 existing with the new values, 33 new);
regression x2 on the server 1232 passed, 0 failed; PDF 28 pages, 0 errors, 0 undefined, 0 overfull.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
"""Revision point 3: verify_article.py reads every row-format protocol sweep through ONE loader,
|
||||
which serves the re-scoring under the single (bracketing) criterion from sweep_uniform.json.
|
||||
Exact anchors, each replaced the stated number of times, or nothing is written.
|
||||
|
||||
python -u apply_verify_uniform.py
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
|
||||
PATH = "verify_article.py"
|
||||
|
||||
src = open(PATH, encoding="utf8").read()
|
||||
|
||||
# 1. every `with open(<x>, encoding="utf8") as fh:\n <ws> name = json.load(fh)` -> name = _load(<x>)
|
||||
pat = re.compile(r'( *)with open\(([^,]+), encoding="utf8"\) as fh:\n +(\w+) = json\.load\(fh\)\n')
|
||||
n_sub = len(pat.findall(src))
|
||||
assert n_sub == 9, n_sub
|
||||
src = pat.sub(lambda m: f"{m.group(1)}{m.group(3)} = _load({m.group(2)})\n", src)
|
||||
|
||||
# 2. the loader itself: row-format protocol sweeps come from the single-criterion re-scoring
|
||||
old_loader = '''def _load(path):
|
||||
with open(path, encoding="utf8") as fh:
|
||||
return json.load(fh)
|
||||
'''
|
||||
new_loader = '''def _load(path):
|
||||
"""A results file. A row-format protocol sweep (a list of labelled cells) is served from
|
||||
sweep_uniform.json, its re-scoring under the paper's single criterion - a sign change
|
||||
within 1e-6 or f(x) == 0 (revision point 3, 2026-09-22); every other file as stored."""
|
||||
from rescore_uniform import load_uniform
|
||||
with open(path, encoding="utf8") as fh:
|
||||
data = json.load(fh)
|
||||
if isinstance(data, list) and data and "spec" in data[0]:
|
||||
return load_uniform(path)
|
||||
return data
|
||||
'''
|
||||
assert src.count(old_loader) == 1
|
||||
src = src.replace(old_loader, new_loader)
|
||||
open(PATH, "w", encoding="utf8").write(src)
|
||||
print(f"replaced {n_sub} direct reads and the loader")
|
||||
Reference in New Issue
Block a user