Skip to content

1.9.0 — beyond Pauli noise

Choose a tag to compare

@Jaspersands Jaspersands released this 09 Oct 02:41
· 899 commits to master since this release

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
    or I_ERROR[R_PAULI(theta=…, pauli=XZY)] 0 1 2. Stim reads them as identities.
  • The coherent sampler (Circuit.compile_coherent_sampler; Rust Circuit::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=…)], SEEP and LEAK_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.