RERUN_LOG -- OWR-14299292-010 reproducibility package

Re-run made on 2026-10-23 (01:12:41Z to 01:26:16Z, 31 runs, about 14 minutes), when the note was written,
from a fresh copy of this folder (reproducibility/) in a scratch directory (SCRATCH below), one niced process
at a time.  Environment: macOS, Apple silicon; Python 3.13.5 (standard library for check_note.py;
NumPy 2.5.2, SciPy 1.18.1, NetworkX 3.6.1, SymPy 1.14.0 for the other programs).  Each program was run
from its own folder (original/scripts, independent_runs/run_A/programs, independent_runs/run_B/programs).
Its output was compared with the recorded output after removing running times ("equal": the outputs
agree line by line; "subset": the re-run covers a sub-range and each of its lines occurs in the recorded
output).

run                            rc    wall   comparison with the recorded output
check_note                     0     24s    (no recorded output to compare)
    $ python3 -I check_note.py
verify_cert_out                0     2s     equal IDENTICAL
    $ python -I verify_cert.py ../certs/cert_all_n5_11.jsonl ../certs/cert_all_n12_14.jsonl ../certs/cert_all_n15_18.jsonl ../certs/cert_small_n5_23.jsonl
familyB_gadget_table           0     0s     equal IDENTICAL
    $ python -I familyB_table.py
gadgets_out                    0     0s     equal IDENTICAL
    $ python -I gadgets.py
sn_parity_check                0     0s     equal IDENTICAL
    $ python -I sn_parity.py
ncycle_injection_check         0     6s     equal IDENTICAL
    $ python -I ncycle_injection.py
an_brute_check_n4_9            0     8s     equal IDENTICAL
    $ python -I an_brute.py 4 9
an_expansive_n5_20             0     67s    equal IDENTICAL
    $ python -I an_expansive.py 5 20 SCRATCH/supp
check_saved_matchings_n5_20    0     1s     subset IDENTICAL
    $ python -I check_saved_matchings.py 5 20
familyB_out                    0     6s     equal IDENTICAL
    $ python -I familyB.py
ncycle_rule_n5_19              0     0s     subset IDENTICAL
    $ python -I ncycle_rule.py 5 19
ncycle_checks_n7_21            0     12s    subset IDENTICAL
    $ python -I ncycle_checks.py 7 21
nonvanishing_n5_20             0     5s     equal IDENTICAL
    $ python -I nonvanishing.py 5 20
A_perm_checks                  0     167s   equal IDENTICAL
    $ python -I perm_checks.py
A_certs                        0     2s     equal IDENTICAL
    $ python -I my_verify_certs.py ../../../original/certs/cert_all_n5_11.jsonl ../../../original/certs/cert_all_n12_14.jsonl ../../../original/certs/cert_all_n15_18.jsonl ../../../original/certs/cert_small_n5_23.jsonl
A_brute                        0     14s    equal IDENTICAL
    $ python -I brute_an.py SCRATCH/A_brute_n4_9.pkl 4 5 6 7 8 9
A_chartab_5_12                 0     3s     (no recorded output to compare)
    $ python -I chartab_an.py SCRATCH/A_chartab 5 6 7 8 9 10 11 12 --brute SCRATCH/A_brute_n4_9.pkl
A_chartab_13_22                0     109s   equal IDENTICAL
    $ python -I chartab_an.py SCRATCH/A_chartab 13 14 15 16 17 18 19 20 21 22
B_selftest                     0     1s     equal IDENTICAL
    $ python -I vb_selftest.py
B_brute_n5_9                   0     8s     equal IDENTICAL
    $ python -I vb_brute.py 5 9 SCRATCH/B_brute
B_thmA_n4_12                   0     0s     equal DIFFERS
    $ python -I vb_thmA.py 4 12 SCRATCH/B_thmA SCRATCH/B_brute
B_thmA_n13_24                  0     100s   equal DIFFERS
    $ python -I vb_thmA.py 13 24 SCRATCH/B_thmA
B_certgen_n19                  0     35s    subset IDENTICAL
    $ python -I vb_certgen.py 19 SCRATCH/B_cert_n19.jsonl.gz SCRATCH/B_thmA 1
B_certgen_n20                  0     68s    subset IDENTICAL
    $ python -I vb_certgen.py 20 SCRATCH/B_cert_n20.jsonl.gz SCRATCH/B_thmA 1
B_certcheck_notes_certs        0     2s     equal DIFFERS
    $ python -I vb_certcheck.py ../../../original/certs/cert_all_n5_11.jsonl ../../../original/certs/cert_all_n12_14.jsonl ../../../original/certs/cert_all_n15_18.jsonl ../../../original/certs/cert_small_n5_23.jsonl
B_thmB_gadgets                 0     12s    equal IDENTICAL
    $ python -I vb_thmB_gadgets.py ../../../original/recorded_outputs/familyB_gadget_table.txt
B_thmB_exact_n24_31            0     12s    equal DIFFERS
    $ python -I vb_thmB_exact.py 24 31
B_thmC_odd                     0     20s    equal IDENTICAL
    $ python -I vb_thmC.py 5 7 9 11 13 15 17 19 21 23 25 27 29 31
B_lemma71                      0     2s     equal IDENTICAL
    $ python -I vb_lemma71.py
B_nonvanishing                 0     0s     equal IDENTICAL
    $ python -I vb_nonvanishing.py
B_thmA_big_n25                 0     128s   subset DIFFERS
    $ python -I vb_thmA_big.py 25 25 SCRATCH/B_big

Notes
- check_saved_matchings_n5_20, familyB_out and ncycle_rule_n5_19 were run with the environment variable
  SUPPDIR=SCRATCH/supp (the supports written by an_expansive_n5_20); familyB.py check (6) therefore used
  the exact data for 12 <= n <= 20 only.  The certificate generator original/scripts/certify.py was not
  re-run (it is a random search; its output, the certificates, is part of the package and is checked).
- check_note: the recorded output check_note_output.txt was written afterwards by the final version of
  check_note.py, which differs from the re-run version only in printed labels (result numbers of the
  note); TOTAL FAILS: 0 in both.  check_note_certs_extra_n19_24_output.txt is its run with
  --certs-extra on the six certificate files (ii) of verification run B: all 1,653,478 pairs valid.
- The five runs marked DIFFERS agree in every result line; the differences are lines that depend on how
  the recorded runs were split, or on data not regenerated:
  * B_thmA_n4_12: the recorded run had brute-force data for n = 10 as well (vb_brute.py for n = 10,
    108 s, not repeated here), so for n = 10 it prints "brute force agree" where the re-run prints
    "brute force n/a"; all other values agree.
  * B_thmA_n13_24: the recorded output joins three runs (13-20, 21-23, 24) with three header lines
    "S_n tables up to ... built"; the single re-run has one.  All result lines agree.
  * B_certcheck_notes_certs: the 41 lines printed by the program agree; the recorded file has two more
    lines, a timing line and a summary line on cert_small_n5_23 written by a separate short command
    (part [4] of check_note.py checks the same statement).
  * B_thmB_exact_n24_31: the recorded output joins two runs (a second header line "tables up to 28")
    and its per-n "done" times differ; all result lines agree.
  * B_thmA_big_n25: header line "S_n tables up to 25" (recorded: "up to 26", from the run 25-26); the
    result line for n = 25 agrees (perfect matching for all C, max|T(C)| = 121).
- Determinism of the certificate generator (independent_runs/run_B/programs/vb_certgen.py, seed 1):
  the regenerated files for n = 19 and n = 20 have, after decompression, the same SHA-256 as the files
  of verification run B (n = 19: b0f4ab59...ec67, n = 20: 8fc17402...a984; the full list is in
  independent_runs/run_B/CERTIFICATES_n19_24.txt).  The compressed files differ only in the gzip header
  (time stamp).
