Repository navigation
1.8.0 — more decoders
The Python package and the Rust crate both at 1.8.0, "more decoders": four decoders the field
compares against, each ported from its authors' code and held to it shot for shot
(tools/decoder_check.py, run in CI). API additions only.
Added
- BP+LSD (
BpLsdon a model,BpLsdDecoderon a check matrix withldpc's arguments;
RustBpLsd,BpLsdDecoder,LsdOptions): belief propagation, then localized statistics
decoding (Hillmann et al., 2024), LSD-0, LSD-E and LSD-CS. Corrections equal toldpc
2.4.1's on every shot checked; the only differences possible are whereldpc's own order
is not reproducible (equal keys in a longstd::sort, or several clusters merged at once,
which it orders by hashed pointers), and those shots are reported as ties. Each cluster's
faults iterate inldpc'stsl::robin_setorder, which is reproduced. 0.6 ofldpc's time
on the gross code. - Relay-BP (
RelayBp,RelayBpDecoder; RustRelayBp,RelayBpDecoder,
RelayOptions): min-sum BP with memory, run in legs of disordered memory strengths (Müller
et al., IBM, 2025). Identical to IBM'srelay_bp0.2.2 on every shot (correction,
convergence and iteration count), for explicit strengths and for a seed: its random
strengths come fromrand0.8's generator, reproduced without the dependency. A model's
shot k draws from the seed and k, so results do not depend on the thread count. - Colour-code matching (
ColorMatching; RustColorMatching): Chromobius's Möbius
construction (Gidney and Jones, 2023) on this package's matcher. The Möbius matching weighs
the same as Chromobius 1.1.1's on every shot checked, and predictions differ only between
equally light matchings. 0.74 of Chromobius's time at d = 7. - A search decoder (
SearchDecoder; RustSearchDecoder,SearchOptions,
DetectorOrder): Tesseract's A* for the most likely error (Beni, Higgott and Shutty,
Google, 2025), for any model. The faults it finds are Tesseract's, fault for fault, on the
same platform (its ties are broken as the platform's C++ library breaks them). With no
beam, no queue bound and revisits allowed it is exact. - Colour annotations:
CssCode.memory_circuit(..., annotate_colors=True)(Rust
memory_circuit_with_colors) gives each detector Chromobius's 4th coordinate;
Circuit.generated("color_code:memory_xyz", ..., annotate_colors=True)(Rust
generated_with_colors) flattens Stim's colour code and annotates it as Chromobius's
authors do. - The four in
stabilizer_qec.sinter("bplsd","relay_bp","color_matching",
"search") and instabilizer-qec decode --decoder; fuzzed with Hypothesis and
fingerprinted; benchmarked against their references; tutorial 04 compares every decoder on a
colour code and the gross code.
The Rust crate stabilizer_qec 1.8.0 (tag crate-v1.8.0) has the same additions.