Repository navigation
CC engine: redundant sparse checks (sparse, sparseov, sparsemrv) and XOR unit propagation (GH-181, opt-in; do not merge before PI says merge) - #203
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…by weight Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…thout rows or xorunit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…start-up cost on codes without qualifying pairs) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Tier 0, Tier 1-4 panel, ablation, exploration, sparse+tiebreak panel) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s-checks), full test-cc output Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, sparse+sparsemrv; 8 h each) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
guluchen
pushed a commit
that referenced
this pull request
Oct 30, 2026
…unds PI decision 2026-10-31. Same matrices (git mv of Hx/Hz/Gx/Gz; only the Gx/Gz header comment changes). Upper bounds unchanged. TN_360_4_17to24 -> TN_360_4_23to24 (GH-157) TN_396_4_17to26 -> TN_396_4_23to26 (GH-157) TN_504_2_17to34 -> TN_504_2_24to34 (GH-157) TN_648_10_9to32 -> TN_648_10_22to32 (GH-157) BB_1080_4_30to48 -> BB_1080_4_32to48 (GH-162, reproduced by GH-183) BB_756_16_30to34 -> BB_756_16_32to34 (GH-183) BB_864_4_30to40 -> BB_864_4_32to40 (GH-183) TN_496_2_23to30 -> TN_496_2_27to30 (GH-181) Lower bounds: DistQLDPC's optional CC engine with opt-in rules that are not on main (charge, PR #161; tiebreak with mrv / -cc-roworder=bfs, PRs #180 / #204; sparse,sparseov,sparsemrv, PR #203), each reproduced with a different search order or binary of the same engine (not an independent second method). Updated: data/matrices/README.md (tier5 list, rename history, open items), NOTICE, README naming example, name columns of optimization/baselines/SERVER.md and main_server_reference.json. The upper-bound witnesses for these eight stems are copied under the new stems to optimization/experiments/GH-146/witnesses/renamed-2026-10-31/ (VERIFY.txt: 8/8 VALID). Historical experiment records are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
guluchen
pushed a commit
that referenced
this pull request
Oct 30, 2026
…unds PI decision 2026-10-31. Same matrices (git mv of Hx/Hz/Gx/Gz; only the Gx/Gz header comment changes). Upper bounds unchanged. TN_360_4_17to24 -> TN_360_4_23to24 (GH-157) TN_396_4_17to26 -> TN_396_4_23to26 (GH-157) TN_504_2_17to34 -> TN_504_2_24to34 (GH-157) TN_648_10_9to32 -> TN_648_10_22to32 (GH-157) BB_1080_4_30to48 -> BB_1080_4_32to48 (GH-162, reproduced by GH-183) BB_756_16_30to34 -> BB_756_16_32to34 (GH-183) BB_864_4_30to40 -> BB_864_4_32to40 (GH-183) TN_496_2_23to30 -> TN_496_2_27to30 (GH-181) Lower bounds: DistQLDPC's optional CC engine with rules that were opt-in when the bounds were found (charge, default on main since PR #161; tiebreak with mrv / -cc-roworder=bfs, PRs #180 / #204, and sparse,sparseov,sparsemrv, PR #203, not on main), each reproduced with a different search order or binary of the same engine (not an independent second method). Updated: data/matrices/README.md (tier5 list, rename history, open items), NOTICE, README naming example, name columns of optimization/baselines/SERVER.md and main_server_reference.json. The upper-bound witnesses for these eight stems are copied under the new stems to optimization/experiments/GH-146/witnesses/renamed-2026-10-31/ (VERIFY.txt: 8/8 VALID). Historical experiment records are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…) into GH-181 Conflicts resolved by keeping both sides: - Rules: charge (default on), tiebreak, sparse, sparseov, sparsemrv, xorunit; parser, rules string, error/help text, README, NOTICE, MODIFICATIONS (file table + sections). - cc_half: GH-181's templated node functions (E) kept; the GH-162 tiebreak helpers become templates too and all their forbids go through blk_up/blk_down, so xorunit free counts stay exact; ovtightx is counted on the tiebreak path as well. GH-157 charge evaluation stays in expand<E> (H rows only). Seeds block deduplicated (GH-162 had moved it). - Mutants: GH-181's 19/20/21 clashed with GH-183 (19, 20) and GH-206 (21) and are renumbered 22 (redundant row with a flipped qubit), 23 (xorunit branches on an even unit row), 24 (sparseov pair sums of H). -cc-mutant accepts 0..15, 17..24. - tests/test_cc_engine.cc: GH-181 mask bits move to RM_SP 512, RM_SPOV 1024, RM_XU 2048, RM_SPMRV 4096 (128/256 are charge/tiebreak). Part X moves after Parts T/R (keeps their instance streams), reads NX from argv[7] (argv[3] is Part G), and mixes in charge, tiebreak and the bfs row order; new Part B configs with the default rules + GH-181 tokens (+ tiebreak, + mrv/bfs). - tests/test_cc_flags.sh: section 7j; mutant numbers updated; combinations with charge, tiebreak, bfs and auto; sparsemrv + mrv = mrv. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue: #181. Hub: #15. Base: main
6083e662. Do not merge before the PI says "merge".Summary
New opt-in CC rule tokens in
-cc-rules(all default off; with them off, every-vlog on tier0+1 is byte-identical to main, both engines):sparsesparsemrvsparseadded rows: fewest-candidate branching over the odd rows of H and R. Halves without added rows keep the lowest-index rule.sparseovxorunitRows are added only on TN_200_10_10, TN_250_10_15, TN_496_2_23to30 and the tier-0 codes LP_34_20_2, TN_36_8_3, TN_54_11_4, TN_72_14_4 (
S0/rows_per_code.txt). On every other bundled code no pair sum qualifies, and the search runs the pre-GH-181 instantiation, so node counts are identical to main.Candidate configuration:
-cc-rules=excl,pack,orbf,parity,leaf,overlap,sparse,sparseov,sparsemrv.make test-ccPASS (server,300 200 300). New Part X: 300 halves (263 with sparse rows, 71 with sparseov rows), 576 000 ladders, 0 bad. Mutants 19 / 20 / 21: 35 396 / 268 800, 36 281 / 307 200, 18 764 / 153 600 ladders wrong (all caught).make test-cc-flags426 checks PASS. Identity with the tokens off: tier0+1 x 8 configurations (MaxSAT-no-card/-card-mtowith and without-ub-pre; CC with and without-ub-search,-cc-stats,-cc-aut=off): 120/120 IDENTICAL. Answers: tier0-3 x 9 token variants, 207 runs, all correct. Independent GF(2) witness check: 119 ok, 0 bad.Scientific semantics changed: no (opt-in pruning rules with written soundness proofs; the raised lower bound is reported as PLAUSIBLE and no stem is renamed). PI action required: yes (review; merge and adoption decisions; whether to rename TN_496 given the reproduced lb 27).
1. Soundness (full text: MODIFICATIONS.md, GH-181; code comments:
src/cc/cc_half.h)2. Implementation
All in
src/cc/cc_half.{h,cc}unless noted.pair_sums: counts row overlaps first (no allocation per pair), then takes the symmetric difference for qualifying pairs only.nodd_or the scans of H.xorunitkeeps per-row free counts (updated on every change of the forbidden set) and bitsets of rows with one free qubit and with none.<bool E>. E = false is the old code path, used whenever a half has no added row, no added stabilizer row and noxorunit.cc_driver.cc: the tokens,-vlines, and ac cc-stats: ... gh181 spack sprune snocand ovtightx xuforbid xuforced xudeadline, printed only with the tokens.distqldpc.cc: help text;-cc-mutantnow accepts 19-21. Numbers 15-18 are left to [Mac agent] CC engine: fractional-charge / edge-cover node lower bounds #157 / [Mac agent] CC engine: orbit-compatible even-weight overlap tie-break #162.3. Tier 0
make test-cc(S0/test_cc_default.txt):CC_ENGINE_TESTS PASS. Part A: 115 200 ladders, 0 bad. Part B: 4 000 driver runs, 0 bad, including the new token configurations. All existing mutants are caught.make test-cc-flags: 426 checks PASS (values, rejects,-vlines, mutants 19-21 named, no [Mac agent] CC engine: redundant sparse checks and XOR unit propagation #181 line without the tokens).S0/identity_tier01.txt,S0/answers_results.jsonl,S0/witness_check.txt.4. Tiers 1-4 (5-seed medians; main
6083e66vs candidate; concurrent on pinned cores 6-19)110 runs, science problems: []
Per-level nodes for TN_200 and TN_250:
S1/panel_levels.md.History (for transparency). Two earlier panels (
S1/history/) failed Tier 1 on LP_442, with a ratio of 1.15-1.36:<bool E>templates.waitpidpoll (usleep(10000)insrc/core/distqldpc.cc).pair_sumsallocated once per candidate pair, and that start-up cost pushed some 23 ms runs into the 33 ms slot.The panel above is the third run.
5. Ablation (TN_200, TN_250; 5 seeds;
S1/ablation_table.md,S1/ablation_levels.md)Exploration that chose the design (
pre/, exploration binaries frompre/exploration_knobs.diff):6. Optional: combined with GH-162
tiebreak(PR #180)Built from a scratch merge of the GH-162 code commit
97c86299, not pushed.xorunitandtiebreakcannot be combined there: the tiebreak routines bypass the xorunit counters.Panel main vs
sparse,sparseov,sparsemrv,tiebreak(TB/panel_table.md): Tier 1 / 2 / 3 / 4 = 1.113 / 0.753 / 0.996 / 0.067.pair_sumsfix, and its nodes are identical to main.Combined Part X with tiebreak (
TB/test_combo_partX.txt): 300 halves, 576 000 ladders, 0 bad, and mutants 19-21 still caught. The FAIL(2) in that file is only the existing Part A/B mutant expectations, which a reduced10 5run cannot meet.7. Tier 5 (6 h, default seed; main CC alongside in the same session, cores 20-23)
geomean over codes of the largest level done by both (levels > 1 s): nodes 0.018, time 0.028 (1 codes)
Bound events (lb value@seconds, from 18) where the final value changed:
2 runs, science problems: []
Cross-checks (relabelled seeds, new arm):
Status of the TN_496 bound: PLAUSIBLE.
TN_496_2_23to30; the upper bound 30 is unchanged.-seed=1 -seed=2. The last-seedwins (checked:-vprintscc-seed 2). SeeT5/NOTE.txt.7a. Cross-check of TN_496 lb 27 (8 h each, cores 4-9;
XC27/NOTE.md)The configurations deliberately differ from the run that found lb 27 (
sparse,sparseov,sparsemrv, seeds 0/1/2):sparseonlysparse,sparseov,sparsemrv,tiebreak(scratch merge with GH-16297c86299, different binary)sparse,sparsemrv(no sparseov)Verdict: REPRODUCED. (b) reaches lb 27 with every level EMPTY, in two seeds. (a) and the extra arm stop earlier within 8 h but agree: every level they completed is EMPTY.
Caveat: every run uses DistQLDPC's CC engine, i.e. the same level framework and driver. (b) differs in binary, overlap rule and search order.
The stem is not renamed; the PI decides.
8. Recommendation
sparse,sparseov,sparsemrvas an adoption candidate (PI decision).sparsealone: 0.26x on TN_250);xorunit: reject (at most 11 % fewer nodes, 1.3-1.5x slower).tiebreakworks (TN_250 0.067x, BB_288 0.76x). A real merge needs the tiebreak routines to useblk_up/blk_downifxorunitis kept.Credit
augment_sparse_checks, S. Cercelescu, MIT). Idea only; no code was copied.Credited in NOTICE, MODIFICATIONS.md and code comments.
Files
optimization/experiments/GH-181/:runner/,S0/,S1/,TB/,T5/,pre/.Frozen server binaries in
/home/yfc/mac-agent-20261009/frozen/:server-main-6083e66;server-gh181-9b237b0: tree of9930c679, used for Tiers 0-4;server-gh181-07b5e3d: tree of091c1056, used for Tier 5. Its per-level node lines are identical to 9b237b0 on all 110 panel runs.The commits were rebased only to add trailers; the trees are unchanged.
🤖 Generated with Claude Code