You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: address all 5 findings from independent validation report (v0.5.1)
F-1 (LOW / cosmetic) - Version metadata mismatch
- __init__.py: fallback __version__ string bumped 0.5.0 -> 0.5.1
to match wheel dist-info and Rust core report
F-2 (MEDIUM / by-design) - No surface-code threshold under code-capacity noise
- stim_compat.py: expanded module docstring with clear explanation and
working circuit-level Stim DEM example (multi-round depolarizing noise
via BeliefMatching + qector_sinter_decoders)
- stim_compat.py: added stim_circuit_to_check_matrix public alias for
from_stim_detector_error_model (naming consistency with README/docs)
- README.md: added Independent Validation table + Honest Limitations
section grounded in measured data from the report
F-3 (INFO) - Union-Find ~3x less accurate than MWPM (expected)
- README.md: documented explicitly in Honest Limitations with measured
3x figure and usage guidance
F-4 (INFO) - SparseBlossom batch != single on degenerate cases (benign)
- README.md: documented in Honest Limitations; labelled as benign
matching degeneracy, not an error
F-5 (LOW) - BP core emits divide-by-zero RuntimeWarnings
- _bp_core.py: wrapped sum_product_bp inner loop in
np.errstate(divide='ignore', invalid='ignore'); added inline comment
explaining why the suppression is safe (eps-clipped tanh guarantees
t != 0 before log; any residual float edge cases are numerically
handled by subsequent clips)
Additional (from prior session):
- sinter_compat.py: added QectorDecoderWrapper backward-compat alias
- sinter_compat.py: moved alias after class definition (correct ordering)
- __init__.py: CUDABatchDecoder.__init__ now checks is_available() before
constructing and raises clean RuntimeError with actionable message
-**Union-Find is ~3× less accurate than MWPM.** Measured across d=3–9 repetition and surface codes. Expected speed/accuracy trade-off. Use Blossom or SparseBlossom when accuracy matters.
128
+
-**Single-round code-capacity noise does not produce surface-code threshold curves.** Bundled `rotated_surface_code` under code-capacity (single-round) noise shows d=3/5/7 LER curves overlapping within ~1%. PyMatching on the same H/L behaves identically — this is a property of the noise model, not a decoder defect. All corrections remain 100% valid. For genuine threshold curves, use **circuit-level noise via Stim DEM** with `BeliefMatching` or `qector_sinter_decoders()` (see `stim_compat` docstring for the full example).
129
+
-**SparseBlossom batch may return different (but valid) corrections than single-shot on degenerate cases.** Benign matching degeneracy, not an error.
130
+
-**GPU wins only at sufficient batch sizes** (typically ≥ 4096). Measure on your own hardware before quoting speedup.
131
+
-**CUDABatchDecoder raises a clean `RuntimeError` when no driver is present.** Check `CUDABatchDecoder.is_available()` before constructing.
132
+
110
133
## License
111
134
112
135
Source-available. See [LICENSE](LICENSE). Commercial use requires written licensing through https://www.qector.store.
0 commit comments