Enable QEC and FTQC curves
The optional quantum error correction stage maps readout classifier outputs into stim noise models, then estimates logical error rate and wall-clock QEC cycle time. Idle / wait noise scales with readout duration plus a constant post-acquire control overhead. Cycle wall-clock is readout + control + decoder latency.
Install the QEC extra first:
pip install -e ".[qec]"
That extra pulls in Stim and PyMatching. Optional: beliefmatching for the
BB default decoder. Without the extra, enabling qec fails at import time.
YAML configuration
qec:
enabled: true
codes: [surface, color, bb]
experiments: [memory]
decoders:
surface: pymatching
color: sinter_internal
bb: belief_matching
control_overhead_ns: 100.0
tau_idle_ns: 50000.0
include_decode_in_idle: false
ler_duration_curve: true
synthetic_duration_curve: true
curve_shots: 2000
readout_binding:
full_readout_ns: 500
scale_idle_with_duration: true
What each code is
Code |
Circuit |
Default decoder |
|---|---|---|
|
stim |
pymatching |
|
stim |
sinter_internal (pymatching) |
|
bivariate bicycle CSS code-capacity memory (circulant A,B) |
belief_matching |
walking_surface remains an experimental stub (surface + magic noise) and is
not part of the public FTQC story.
Set synthetic_duration_curve when classifiers did not run a duration sweep
and you still want illustrative length-versus-error points. Prefer real sweep
points when they exist.
arcade run path/to/config.yaml
Demo export for the website:
python scripts/export_qec_figures.py --shots 200
Caveats
Demo curves use small shot counts; captions say so.
BB is code-capacity (not a full circuit-level BB schedule).
Idle map
p = 1 - exp(-T/τ)is a coherence-scale model — settau_idle_nsfor your device.