Repository navigation
1.9.0 — beyond Pauli noise
The Python package and the Rust crate both at 1.9.0. API additions only.
Coherent errors at circuit level, at sizes a state vector cannot reach. Stim and every
decoder treat noise as random Pauli errors. Hardware also over-rotates, the same way every
time, and the usual stand-in for that, the Pauli twirl, adds probabilities where the rotations
add amplitudes. This release samples and decodes any circuit with coherent errors on every
gate, at sizes a state vector cannot reach.
Correction (2026-10-09): these notes first said no other tool does this. Tsim (QuEra, arXiv
2604.01059) samples circuits with T gates and rotations at 80+ qubits, at a cost exponential in
the number of non-Clifford gates, so it suits circuits with a few of them. What is new here is
coherent noise on every gate, thousands of small rotations, beyond a state vector.
- Stim-readable rotations. Write
I_ERROR[R_Z(theta=0.01)] 0,II_ERROR[R_ZZ(theta=0.02)] 0 1
orI_ERROR[R_PAULI(theta=…, pauli=XZY)] 0 1 2. Stim reads them as identities. - The coherent sampler (
Circuit.compile_coherent_sampler; RustCircuit::coherent_sampler).
It draws shots of the twirled circuit and gives each a weight, its class's coherent over
twirled probability. Weighted, the shots are the coherent circuit's.- Exact on every branch of 150 random small circuits.
- Within error bars of the state vector's exact answers, where the twirl is 5–10× off.
- What it finds. At circuit level the twirl underestimates the surface code's logical error,
and by more at larger distance. With a Z over-rotation of θ = 0.01 per tick, the coherent rate
is 2.4× the twirl's at d = 3 and 6.8× at d = 9; at d = 5 and θ = 0.02 it is 12×. At code
capacity the twirl is accurate, as Bravyi et al. found. - A state vector (
compile_exact_sampler,exact_distribution; up to 24 qubits). It also
runs T, U3 and amplitude damping. Circuit.twirled(merge=True), the coherence-aware model for a decoder.- Leakage:
I_ERROR[LEAK(p=…)],SEEPandLEAK_TRANSPORT, in a frame sampler with heralds
and in the state vector, which agree.
See the README's "Beyond Pauli noise", site section 16, tutorial 05 and the CHANGELOG.