wai-quantum 0.3.32: union-find decoding in near-linear time #155

Merged
dcharlot merged 2 commits from wai-quantum-uf into main 2026-10-05 10:56:33 -04:00
Owner

Stacked on #151 (0.3.31). Merge that first; this diff then reduces to the one commit.

What

quantum_uf (wai-quantum 0.3.32) is a union-find decoder over the same matching graph that exact matching uses.

  • Growth. Clusters grow from the fired detectors on integer weights. An edge between two growing clusters fills at double speed.
  • Merge and peel. Clusters merge as edges fill and stop when they touch the boundary. Each cluster's spanning tree is then peeled to a correction.
  • Speed. Growth is event-driven: each frontier edge has a fill time, and a merge reschedules only the frontier whose growth changed. Fill times never run backwards, so events sit in a radix heap. The workspace is reused and resets in time proportional to the last shot.
  • CLI. wai-quantum qec --decoder uf|exact. Example: uf_bench.

Checked

  • Single faults. Every single edge of the d = 3 and d = 5 graphs is corrected exactly.
  • Two growth schedules agree. The event-driven schedule matches a round-by-round one (kept in the tests) on 2,000 shots at each of three distances, apart from the order ties resolve in.
  • Accuracy against exact matching, same 20,000 shots. Union-find fails 0.92–1.18× as often as exact matching (d = 3–9, p = 0.003–0.007). At p = 0.007 its failures stop falling with distance, so its threshold sits a little lower.
  • Speed.
    • Union-find is 77× faster than exact matching at d = 11, p = 0.005.
    • Time per shot grows linearly with the number of fired detectors, about 1.1–1.5 µs each from d = 9 to d = 21.
    • Profiling found 45% of the time in a binary heap. Switching to the radix heap halved the time per shot at d = 21.
  • Determinism. The new pin holds natively and under wasm32-wasip2; all 17 pins pass. CLI output is byte-identical between the two.
  • Lint and tests. Clippy is clean on the new code, the prose checks pass, and all 409 library tests pass.

🤖 Generated with Claude Code

Stacked on #151 (0.3.31). Merge that first; this diff then reduces to the one commit. ## What `quantum_uf` (wai-quantum 0.3.32) is a union-find decoder over the same matching graph that exact matching uses. - **Growth.** Clusters grow from the fired detectors on integer weights. An edge between two growing clusters fills at double speed. - **Merge and peel.** Clusters merge as edges fill and stop when they touch the boundary. Each cluster's spanning tree is then peeled to a correction. - **Speed.** Growth is event-driven: each frontier edge has a fill time, and a merge reschedules only the frontier whose growth changed. Fill times never run backwards, so events sit in a radix heap. The workspace is reused and resets in time proportional to the last shot. - **CLI.** `wai-quantum qec --decoder uf|exact`. Example: `uf_bench`. ## Checked - **Single faults.** Every single edge of the d = 3 and d = 5 graphs is corrected exactly. - **Two growth schedules agree.** The event-driven schedule matches a round-by-round one (kept in the tests) on 2,000 shots at each of three distances, apart from the order ties resolve in. - **Accuracy against exact matching, same 20,000 shots.** Union-find fails 0.92–1.18× as often as exact matching (d = 3–9, p = 0.003–0.007). At p = 0.007 its failures stop falling with distance, so its threshold sits a little lower. - **Speed.** - Union-find is 77× faster than exact matching at d = 11, p = 0.005. - Time per shot grows linearly with the number of fired detectors, about 1.1–1.5 µs each from d = 9 to d = 21. - Profiling found 45% of the time in a binary heap. Switching to the radix heap halved the time per shot at d = 21. - **Determinism.** The new pin holds natively and under wasm32-wasip2; all 17 pins pass. CLI output is byte-identical between the two. - **Lint and tests.** Clippy is clean on the new code, the prose checks pass, and all 409 library tests pass. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
wai-quantum 0.3.31: quantum-inspired optimisation, a re-runnable classical baseline
All checks were successful
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 3m38s
standards workspaces build + test / jouleclaw-rs (pull_request) Successful in 8m58s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 4m28s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 12s
standards workspaces build + test / aac-rs (pull_request) Successful in 3m39s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 2m11s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 23s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 42s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 1m14s
standards workspaces build + test / joule-code-rs (pull_request) Successful in 3m26s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 58s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 1m2s
standards workspaces build + test / joulecontract-rs (pull_request) Successful in 1m27s
standards workspaces build + test / map-rs (pull_request) Successful in 1m56s
standards workspaces build + test / mesh-rs (pull_request) Successful in 1m11s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 3m52s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 1m44s
standards workspaces build + test / openpay (pull_request) Successful in 7m55s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 6m50s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 51s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 2m12s
standards workspaces build + test / arl-rs (pull_request) Successful in 18m6s
standards workspaces build + test / joule-ui-rs (pull_request) Successful in 44m33s
standards workspaces build + test / jouledesk-rs (pull_request) Successful in 47m38s
standards workspaces build + test / joulehook-rs (pull_request) Successful in 1h25m12s
standards workspaces build + test / sense-rs (pull_request) Successful in 13m25s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 12m25s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 13m43s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 1m9s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 3m0s
92f9e000cd
Optimisation is the claim made most often for quantum hardware, and each such
claim is a comparison with a classical solver. quantum_qio is that solver,
deterministic and re-checkable:

- Ising problems (sparse symmetric J, fields h) and Max-Cut (J = -w), a G-set
  reader, and the +-1 all-to-all spin glass.
- Simulated bifurcation from its published update rules: symplectic Euler,
  perfectly inelastic walls, ballistic (f = Jx) and discrete (f = J sgn x)
  forces, and both heated (arXiv:2203.08361), with c0 = c1 / (rms(J) sqrt N).
  Fields ride on an extra spin fixed at +1.
- Eight trials advance per pass over the couplings; each trial's arithmetic is
  unchanged, so a batched run leaves the same final positions bit for bit as
  one trial at a time. The test fails on a 1e-15 change to one lane.
- Simulated annealing (single-spin Metropolis, linear beta), single-flip
  descent, an exact Gray-code referee up to 34 spins (threaded), and
  step-to-solution S = N_s ln 0.01 / ln(1 - P).

Checked:
- every variant and annealing reach the exact ground state on 20-spin glasses;
- G-set best-known cuts reached (seed 1): G1 11624 (39% of 2,000-step
  trials), G2 11620, G3 11622, G11 564, G14 3064 (annealing; bifurcation
  stops at 3062), G22 13359, G43 6660; G55 reaches 10292 of 10299;
- the published dense-glass step (1.1) is unstable on sparse Max-Cut graphs:
  the stiffest mode has w^2 = a0(a0 - c0 mu_min) and mu_min = -degree, so G1's
  limit is near 0.88; documented, with the settings that work.

CLI: wai-quantum qio (--gset FILE | --sk N) --method dsb|bsb|hdsb|hbsb|sa|exact
[--descend --target --spins --json]. Example: qio_gset. Pinned bit for bit
natively and under wasm32-wasip2 (16 pins); CLI output byte-identical across
the two, threaded or not, G-set files included.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-quantum 0.3.32: union-find decoding in near-linear time
Some checks failed
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 3m39s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 4m28s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 12s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 2m10s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 26s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 48s
WAI energy receipts / energy receipts · linux (pull_request) Failing after 57s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 1m2s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 1m2s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 3m51s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 1m48s
standards workspaces build + test / aac-rs (pull_request) Has been cancelled
standards workspaces build + test / arl-rs (pull_request) Has been cancelled
standards workspaces build + test / joule-code-rs (pull_request) Has been cancelled
standards workspaces build + test / joule-ui-rs (pull_request) Has been cancelled
standards workspaces build + test / joulecontract-rs (pull_request) Has been cancelled
standards workspaces build + test / jouledesk-rs (pull_request) Has been cancelled
standards workspaces build + test / joulehook-rs (pull_request) Has been cancelled
standards workspaces build + test / map-rs (pull_request) Has been cancelled
standards workspaces build + test / mesh-rs (pull_request) Has been cancelled
standards workspaces build + test / openpay (pull_request) Has been cancelled
standards workspaces build + test / sense-rs (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
standards workspaces build + test / jouleclaw-rs (pull_request) Has been cancelled
e76acbe9e5
A fault-tolerant machine must decode each syndrome round before the next
arrives. Exact matching (quantum_match) is the accuracy reference; quantum_uf
is the fast decoder over the same matching graph:

- Grow: every fired detector starts a cluster; odd clusters (not on the
  boundary) grow all frontier edges at once, on the graph's integer weights,
  an edge between two growing clusters at double speed.
- Merge: a filled edge joins its clusters; a cluster on the boundary stops.
- Peel: each cluster's filled edges as a spanning tree, rooted at the
  boundary when it holds it, peeled leaves-first into a correction.
- Growth is event-driven: each frontier edge carries a fill time, and a merge
  reschedules only the frontier of a side whose growth changed. Fill times
  never run backwards, so events sit in a radix heap at amortised O(1).
  Profiling put 45% of the time in a binary heap before; the radix heap
  halved the time per shot at d = 21. Time now grows linearly with fired
  detectors, about 1.1-1.5 us each from d = 9 to d = 21.
- A reusable workspace resets in time proportional to the last shot.

Checked:
- every single edge of d = 3 and d = 5 graphs is corrected exactly;
- the event-driven schedule agrees with a round-by-round one (kept in the
  tests) on 2,000 shots at each of three distances, up to tie order;
- on the same 20,000 shots, union-find fails 0.92-1.18x as often as exact
  matching (d = 3-9, p = 0.003-0.007), 77x faster at d = 11; its threshold sits
  a little lower (at p = 0.007 its failures stop falling with distance).

CLI: wai-quantum qec --decoder uf|exact. Example: uf_bench. Pinned bit for bit
natively and under wasm32-wasip2 (17 pins); CLI output byte-identical.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-quantum 0.3.32: close the optimisation pin's test function
All checks were successful
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 3m36s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 4m28s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 13s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 2m11s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 23s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 43s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 1m22s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 58s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 1m4s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 3m52s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 1m45s
standards workspaces build + test / jouleclaw-rs (pull_request) Successful in 9m19s
standards workspaces build + test / aac-rs (pull_request) Successful in 4m15s
standards workspaces build + test / joule-code-rs (pull_request) Successful in 3m39s
standards workspaces build + test / joulecontract-rs (pull_request) Successful in 2m6s
standards workspaces build + test / map-rs (pull_request) Successful in 2m37s
standards workspaces build + test / mesh-rs (pull_request) Successful in 1m32s
standards workspaces build + test / openpay (pull_request) Successful in 6m10s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 6m46s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 44s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 2m7s
standards workspaces build + test / arl-rs (pull_request) Successful in 37m41s
standards workspaces build + test / joule-ui-rs (pull_request) Successful in 11m41s
standards workspaces build + test / jouledesk-rs (pull_request) Successful in 9m54s
standards workspaces build + test / joulehook-rs (pull_request) Successful in 13m55s
standards workspaces build + test / sense-rs (pull_request) Successful in 5m58s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 7m6s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 9m40s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 42s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 2m55s
79dd50d20b
The restack onto 0.3.31 left tests/bit_identity.rs with an unclosed function,
so the integration tests did not compile (the linux energy-receipts job). The
fix was staged after the commit by mistake. Also trims the union-find vs exact
matching comparison to 6,000 shots per distance (about 25 s in debug).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transaction-Science/open-standards!155
No description provided.