The .tex is no longer stale: regenerated from the canonical .md by build_tex.py (pandoc 3.1.3 + pdflatex on the server; marked GENERATED, never edited by hand). PDF: 28 pages, 0 errors, 0 undefined references, 0 overfull boxes. For LaTeX the .md got braces on four n_\max subscripts (fix_md_for_latex.py; rendering identical) and Table 10 was split into totals (10) and per-problem counts (10b) so that it fits a page; numbers unchanged. verify_article on the server 467 OK / 0 BAD; regression x2 1226 passed, 0 failed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
vvs
2026-09-21 22:07:48 +01:00
co-authored by Claude Opus 5
parent d2a142c39e
commit 23d0c73231
6 changed files with 2361 additions and 878 deletions
+50
View File
@@ -0,0 +1,50 @@
"""Split Table 10 of article/sim_numerics.md in two - totals (with bound violations) and the
per-problem counts - so that it fits a printed page. The numbers are unchanged.
python -u apply_article_table10_split.py
"""
from __future__ import annotations
PATH = "article/sim_numerics.md"
OLD_START = "**Table 10.** A′ against the library rivals on all six corpora (uniform criterion)."
OLD_END = "| all 855 | **13032** | 16481 | 16657 | 24565 | 23649 | | |"
NEW = """**Table 10.** A′ against the library rivals on all six corpora (uniform criterion): total evaluations; in brackets the runs that break the $2\\times$-bisection bound.
| corpus | A′ | Chandrupatla | ModAB | Brent | TOMS 748 |
|----------------------|------------|--------------|------------|------------|------------|
| APS (154) | **2259** (0) | 2595 (0) | 2726 (0) | 2707 (0) | 2636 (0) |
| Chandrupatla (45) | **1074** (0) | 1505 (0) | 1681 (0) | 3238 (18) | 3088 (15) |
| new corpus 1 (206) | **3290** (0) | 3716 (0) | 3809 (1) | 6395 (38) | 5746 (22) |
| Roots.jl (78) | **1371** (0) | 1566 (0) | 1446 (0) | 2455 (11) | 2339 (9) |
| applied + GSL (132) | 1382 (0) | 1382 (0) | 1460 (0) | 1503 (1) | 1756 (1) |
| **corpus 4 (240), the one test** | **3656** (0) | 5717 (0) | 5535 (8) | 8267 (50) | 8084 (37) |
| all 855 | **13032** | 16481 | 16657 | 24565 | 23649 |
**Table 10b.** The same runs problem by problem: A′'s wins/ties/losses against Chandrupatla and against ModAB (exact two-sided sign test).
| corpus | A′ vs Chandrupatla | A′ vs ModAB |
|----------------------|------------------------------|--------------|
| APS (154) | 103/20/31, $p=3\\cdot10^{-10}$ | 118/10/26 |
| Chandrupatla (45) | 31/4/10, $p=0.001$ | 34/4/7 |
| new corpus 1 (206) | 108/33/65, $p=0.001$ | 125/26/55 |
| Roots.jl (78) | 44/14/20, $p=0.004$ | 47/11/20 |
| applied + GSL (132) | 48/52/32, $p=0.09$ | 76/35/21 |
| **corpus 4 (240), the one test** | **177/35/28, $p=10^{-27}$** | **183/23/34** |"""
def main():
with open(PATH, encoding="utf8") as fh:
text = fh.read()
if text.count(OLD_START) != 1 or text.count(OLD_END) != 1:
raise SystemExit("Table 10 anchors not found exactly once")
i, j = text.index(OLD_START), text.index(OLD_END) + len(OLD_END)
text = text[:i] + NEW + text[j:]
with open(PATH, "w", encoding="utf8") as fh:
fh.write(text)
print("Table 10 split")
if __name__ == "__main__":
main()