QEC Lab
Decoder results grouped by what they actually measured. Two decoders benchmarked at different code distances, round counts, error rates, noise models, or stopping rules are not competitors, so they never appear in the same table here.
To see what a decoder is given to work with, the syndrome explorer applies a Pauli error to a small code and shows the syndrome it produces, what the decoder infers from it, and whether the correction restored the logical state.
Three independent decoders, one hashed sample
Surface code d=3, 3 rounds, p=0.02, 20,000 shots — one shared Stim sample (SHA-256 2bac07a88b02), which every decoder provably consumed. Execution class SIMULATION; produced by ketqat/ketqat-benchmarks@4b77286a.
| Decoder | Rank | Uncond. risk | Wilson 95% | p50 / p99 (µs) | Batch (shots/s) |
|---|---|---|---|---|---|
| tesseract vunknown | 1 | 0.13020 | [0.1256, 0.1349] | 355 / 2458 | 1,562 |
| beliefmatching vunknown | 2 | 0.13465 | [0.1300, 0.1395] | 148 / 743 | 6,134 |
| pymatching-mwpm v2.4.0 | 3 | 0.14185 | [0.1371, 0.1468] | 4 / 7 | 1,389,754 |
| Pair | Risk diff. | Paired 95% CI | b01 / b10 | McNemar p | Significant |
|---|---|---|---|---|---|
| pymatching-mwpm − beliefmatching | +0.00720 | [0.00487, 0.00953] | 355 / 211 | 1.52e-9 | yes(α=0.0167) |
| pymatching-mwpm − tesseract | +0.01165 | [0.00837, 0.01493] | 679 / 446 | 4.62e-12 | yes(α=0.0167) |
| beliefmatching − tesseract | +0.00445 | [0.00186, 0.00704] | 394 / 305 | 8.61e-4 | yes(α=0.0167) |
The finding is a tradeoff, not a winner: the most accurate decoder here has roughly a thousandth of the fastest one’s batch throughput. Marginal intervals overlap for two of the three pairs at this shot count — the paired test on shared shots is what separates all three, which is why both tables are shown.
Decoder comparison
rotated-surface-code · d=3 · p=0.001
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 3.000e-4 | [1.02e-4, 8.82e-4] | 3 / 10000 | 0.52 ms | surface-code-mwpm-baseline-d3-p001 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=3 · p=0.002
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.300e-3 | [7.60e-4, 2.22e-3] | 13 / 10000 | 0.66 ms | surface-code-mwpm-baseline-d3-p002 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=3 · p=0.002
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.020e-3 | [8.89e-4, 1.17e-3] | 204 / 200000 | 11.16 ms | surface-code-mwpm-sweep-d3-p002-s2 |
| pymatching | 1.030e-3 | [8.99e-4, 1.18e-3] | 206 / 200000 | 11.40 ms | surface-code-mwpm-sweep-d3-p002-s1 |
| pymatching | 1.085e-3 | [9.50e-4, 1.24e-3] | 217 / 200000 | 11.65 ms | surface-code-mwpm-sweep-d3-p002-s3 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=3 · p=0.003
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 2.200e-3 | [1.45e-3, 3.33e-3] | 22 / 10000 | 0.85 ms | surface-code-mwpm-baseline-d3-p003 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=3 · p=0.005
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 6.700e-3 | [5.28e-3, 8.50e-3] | 67 / 10000 | 1.29 ms | surface-code-mwpm-baseline-d3-p005 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=3 · p=0.005
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 5.440e-3 | [5.00e-3, 5.92e-3] | 544 / 100000 | 11.91 ms | surface-code-mwpm-sweep-d3-p005-s1 |
| pymatching | 6.120e-3 | [5.66e-3, 6.62e-3] | 612 / 100000 | 12.10 ms | surface-code-mwpm-sweep-d3-p005-s3 |
| pymatching | 6.220e-3 | [5.75e-3, 6.73e-3] | 622 / 100000 | 12.73 ms | surface-code-mwpm-sweep-d3-p005-s2 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=3 · p=0.008
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.670e-2 | [1.44e-2, 1.94e-2] | 167 / 10000 | 2.01 ms | surface-code-mwpm-baseline-d3-p008 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=3 · p=0.008
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.459e-2 | [1.39e-2, 1.54e-2] | 1459 / 100000 | 18.87 ms | surface-code-mwpm-sweep-d3-p008-s1 |
| pymatching | 1.472e-2 | [1.40e-2, 1.55e-2] | 1472 / 100000 | 18.59 ms | surface-code-mwpm-sweep-d3-p008-s2 |
| pymatching | 1.485e-2 | [1.41e-2, 1.56e-2] | 1485 / 100000 | 19.09 ms | surface-code-mwpm-sweep-d3-p008-s3 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=3 · p=0.01
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 2.210e-2 | [1.94e-2, 2.52e-2] | 221 / 10000 | 2.45 ms | surface-code-mwpm-baseline-d3-p01 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=3 · p=0.011
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 2.690e-2 | [2.47e-2, 2.92e-2] | 538 / 20000 | 5.30 ms | surface-code-mwpm-sweep-d3-p011-s1 |
| pymatching | 2.720e-2 | [2.50e-2, 2.95e-2] | 544 / 20000 | 5.20 ms | surface-code-mwpm-sweep-d3-p011-s3 |
| pymatching | 2.740e-2 | [2.52e-2, 2.98e-2] | 548 / 20000 | 5.50 ms | surface-code-mwpm-sweep-d3-p011-s2 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=3 · p=0.015
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 4.480e-2 | [4.09e-2, 4.90e-2] | 448 / 10000 | 3.68 ms | surface-code-mwpm-baseline-d3-p015 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=3 · p=0.015
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 4.560e-2 | [4.28e-2, 4.86e-2] | 912 / 20000 | 7.73 ms | surface-code-mwpm-sweep-d3-p015-s2 |
| pymatching | 4.690e-2 | [4.41e-2, 4.99e-2] | 938 / 20000 | 7.64 ms | surface-code-mwpm-sweep-d3-p015-s1 |
| pymatching | 4.730e-2 | [4.44e-2, 5.03e-2] | 946 / 20000 | 7.56 ms | surface-code-mwpm-sweep-d3-p015-s3 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=3 · p=0.02
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 7.340e-2 | [6.85e-2, 7.87e-2] | 734 / 10000 | 4.99 ms | surface-code-mwpm-baseline-d3-p02 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=3 · p=0.02
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 7.400e-2 | [7.05e-2, 7.77e-2] | 1480 / 20000 | 10.26 ms | surface-code-mwpm-sweep-d3-p02-s3 |
| pymatching | 7.590e-2 | [7.23e-2, 7.97e-2] | 1518 / 20000 | 10.64 ms | surface-code-mwpm-sweep-d3-p02-s2 |
| pymatching | 8.105e-2 | [7.73e-2, 8.49e-2] | 1621 / 20000 | 11.28 ms | surface-code-mwpm-sweep-d3-p02-s1 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=5 · p=0.001
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | < 3.84e-4 (upper bound; no failures in 10,000 shots) | [0.00e+0, 3.84e-4] | 0 / 10000 | 2.25 ms | surface-code-mwpm-baseline-d5-p001 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=5 · p=0.002
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 2.000e-4 | [5.48e-5, 7.29e-4] | 2 / 10000 | 3.98 ms | surface-code-mwpm-baseline-d5-p002 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=5 · p=0.002
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 2.650e-4 | [2.03e-4, 3.47e-4] | 53 / 200000 | 79.45 ms | surface-code-mwpm-sweep-d5-p002-s1 |
| pymatching | 3.250e-4 | [2.55e-4, 4.14e-4] | 65 / 200000 | 92.99 ms | surface-code-mwpm-sweep-d5-p002-s3 |
| pymatching | 3.450e-4 | [2.73e-4, 4.37e-4] | 69 / 200000 | 82.11 ms | surface-code-mwpm-sweep-d5-p002-s2 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=5 · p=0.003
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.000e-3 | [5.43e-4, 1.84e-3] | 10 / 10000 | 5.77 ms | surface-code-mwpm-baseline-d5-p003 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=5 · p=0.005
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 4.400e-3 | [3.28e-3, 5.90e-3] | 44 / 10000 | 9.76 ms | surface-code-mwpm-baseline-d5-p005 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=5 · p=0.005
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 4.610e-3 | [4.21e-3, 5.05e-3] | 461 / 100000 | 99.87 ms | surface-code-mwpm-sweep-d5-p005-s3 |
| pymatching | 4.700e-3 | [4.29e-3, 5.14e-3] | 470 / 100000 | 102.06 ms | surface-code-mwpm-sweep-d5-p005-s1 |
| pymatching | 4.930e-3 | [4.51e-3, 5.38e-3] | 493 / 100000 | 97.63 ms | surface-code-mwpm-sweep-d5-p005-s2 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=5 · p=0.008
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.480e-2 | [1.26e-2, 1.74e-2] | 148 / 10000 | 16.78 ms | surface-code-mwpm-baseline-d5-p008 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=5 · p=0.008
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.731e-2 | [1.65e-2, 1.81e-2] | 1731 / 100000 | 183.56 ms | surface-code-mwpm-sweep-d5-p008-s3 |
| pymatching | 1.777e-2 | [1.70e-2, 1.86e-2] | 1777 / 100000 | 173.75 ms | surface-code-mwpm-sweep-d5-p008-s1 |
| pymatching | 1.822e-2 | [1.74e-2, 1.91e-2] | 1822 / 100000 | 173.56 ms | surface-code-mwpm-sweep-d5-p008-s2 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=5 · p=0.01
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 3.220e-2 | [2.89e-2, 3.58e-2] | 322 / 10000 | 22.50 ms | surface-code-mwpm-baseline-d5-p01 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=5 · p=0.011
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 3.980e-2 | [3.72e-2, 4.26e-2] | 796 / 20000 | 52.22 ms | surface-code-mwpm-sweep-d5-p011-s3 |
| pymatching | 4.125e-2 | [3.86e-2, 4.41e-2] | 825 / 20000 | 54.76 ms | surface-code-mwpm-sweep-d5-p011-s2 |
| pymatching | 4.165e-2 | [3.90e-2, 4.45e-2] | 833 / 20000 | 54.72 ms | surface-code-mwpm-sweep-d5-p011-s1 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=5 · p=0.015
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 8.990e-2 | [8.45e-2, 9.57e-2] | 899 / 10000 | 36.30 ms | surface-code-mwpm-baseline-d5-p015 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=5 · p=0.015
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 8.785e-2 | [8.40e-2, 9.19e-2] | 1757 / 20000 | 77.76 ms | surface-code-mwpm-sweep-d5-p015-s1 |
| pymatching | 8.840e-2 | [8.45e-2, 9.24e-2] | 1768 / 20000 | 75.98 ms | surface-code-mwpm-sweep-d5-p015-s2 |
| pymatching | 9.005e-2 | [8.62e-2, 9.41e-2] | 1801 / 20000 | 76.24 ms | surface-code-mwpm-sweep-d5-p015-s3 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=5 · p=0.02
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.541e-1 | [1.47e-1, 1.61e-1] | 1541 / 10000 | 51.94 ms | surface-code-mwpm-baseline-d5-p02 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=5 · p=0.02
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.580e-1 | [1.53e-1, 1.63e-1] | 3160 / 20000 | 111.05 ms | surface-code-mwpm-sweep-d5-p02-s1 |
| pymatching | 1.606e-1 | [1.56e-1, 1.66e-1] | 3213 / 20000 | 115.11 ms | surface-code-mwpm-sweep-d5-p02-s2 |
| pymatching | 1.610e-1 | [1.56e-1, 1.66e-1] | 3220 / 20000 | 110.31 ms | surface-code-mwpm-sweep-d5-p02-s3 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=7 · p=0.001
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | < 3.84e-4 (upper bound; no failures in 10,000 shots) | [0.00e+0, 3.84e-4] | 0 / 10000 | 6.85 ms | surface-code-mwpm-baseline-d7-p001 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=7 · p=0.002
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | < 3.84e-4 (upper bound; no failures in 10,000 shots) | [0.00e+0, 3.84e-4] | 0 / 10000 | 12.08 ms | surface-code-mwpm-baseline-d7-p002 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=7 · p=0.002
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 9.000e-5 | [5.69e-5, 1.42e-4] | 18 / 200000 | 244.31 ms | surface-code-mwpm-sweep-d7-p002-s3 |
| pymatching | 9.500e-5 | [6.08e-5, 1.48e-4] | 19 / 200000 | 260.41 ms | surface-code-mwpm-sweep-d7-p002-s1 |
| pymatching | 1.050e-4 | [6.87e-5, 1.61e-4] | 21 / 200000 | 256.72 ms | surface-code-mwpm-sweep-d7-p002-s2 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=7 · p=0.003
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 6.000e-4 | [2.75e-4, 1.31e-3] | 6 / 10000 | 19.33 ms | surface-code-mwpm-baseline-d7-p003 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=7 · p=0.005
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 2.600e-3 | [1.77e-3, 3.81e-3] | 26 / 10000 | 32.91 ms | surface-code-mwpm-baseline-d7-p005 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=7 · p=0.005
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 2.740e-3 | [2.43e-3, 3.08e-3] | 274 / 100000 | 379.15 ms | surface-code-mwpm-sweep-d7-p005-s2 |
| pymatching | 2.880e-3 | [2.57e-3, 3.23e-3] | 288 / 100000 | 427.75 ms | surface-code-mwpm-sweep-d7-p005-s1 |
| pymatching | 3.090e-3 | [2.76e-3, 3.45e-3] | 309 / 100000 | 363.36 ms | surface-code-mwpm-sweep-d7-p005-s3 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=7 · p=0.008
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.530e-2 | [1.31e-2, 1.79e-2] | 153 / 10000 | 58.25 ms | surface-code-mwpm-baseline-d7-p008 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=7 · p=0.008
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.680e-2 | [1.60e-2, 1.76e-2] | 1680 / 100000 | 645.32 ms | surface-code-mwpm-sweep-d7-p008-s2 |
| pymatching | 1.695e-2 | [1.62e-2, 1.78e-2] | 1695 / 100000 | 624.57 ms | surface-code-mwpm-sweep-d7-p008-s1 |
| pymatching | 1.723e-2 | [1.64e-2, 1.81e-2] | 1723 / 100000 | 621.51 ms | surface-code-mwpm-sweep-d7-p008-s3 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=7 · p=0.01
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 3.790e-2 | [3.43e-2, 4.18e-2] | 379 / 10000 | 83.64 ms | surface-code-mwpm-baseline-d7-p01 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=7 · p=0.011
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 4.870e-2 | [4.58e-2, 5.18e-2] | 974 / 20000 | 187.86 ms | surface-code-mwpm-sweep-d7-p011-s1 |
| pymatching | 4.980e-2 | [4.69e-2, 5.29e-2] | 996 / 20000 | 197.88 ms | surface-code-mwpm-sweep-d7-p011-s2 |
| pymatching | 5.150e-2 | [4.85e-2, 5.47e-2] | 1030 / 20000 | 200.33 ms | surface-code-mwpm-sweep-d7-p011-s3 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=7 · p=0.015
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.340e-1 | [1.27e-1, 1.41e-1] | 1340 / 10000 | 139.84 ms | surface-code-mwpm-baseline-d7-p015 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=7 · p=0.015
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.310e-1 | [1.26e-1, 1.36e-1] | 2619 / 20000 | 298.35 ms | surface-code-mwpm-sweep-d7-p015-s3 |
| pymatching | 1.315e-1 | [1.27e-1, 1.36e-1] | 2629 / 20000 | 300.15 ms | surface-code-mwpm-sweep-d7-p015-s2 |
| pymatching | 1.317e-1 | [1.27e-1, 1.36e-1] | 2634 / 20000 | 306.06 ms | surface-code-mwpm-sweep-d7-p015-s1 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=7 · p=0.02
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 2.436e-1 | [2.35e-1, 2.52e-1] | 2436 / 10000 | 198.16 ms | surface-code-mwpm-baseline-d7-p02 |
Reading this table: A comparison needs at least two decoders measured under these identical conditions.
rotated-surface-code · d=7 · p=0.02
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 2.478e-1 | [2.42e-1, 2.54e-1] | 4957 / 20000 | 486.46 ms | surface-code-mwpm-sweep-d7-p02-s3 |
| pymatching | 2.482e-1 | [2.42e-1, 2.54e-1] | 4963 / 20000 | 423.92 ms | surface-code-mwpm-sweep-d7-p02-s1 |
| pymatching | 2.604e-1 | [2.54e-1, 2.66e-1] | 5207 / 20000 | 423.10 ms | surface-code-mwpm-sweep-d7-p02-s2 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=9 · p=0.002
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 5.000e-6 | [8.83e-7, 2.83e-5] | 1 / 200000 | 580.85 ms | surface-code-mwpm-sweep-d9-p002-s1 |
| pymatching | 1.000e-5 | [2.74e-6, 3.65e-5] | 2 / 200000 | 579.38 ms | surface-code-mwpm-sweep-d9-p002-s2 |
| pymatching | 1.500e-5 | [5.10e-6, 4.41e-5] | 3 / 200000 | 582.74 ms | surface-code-mwpm-sweep-d9-p002-s3 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=9 · p=0.005
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.310e-3 | [1.10e-3, 1.55e-3] | 131 / 100000 | 778.97 ms | surface-code-mwpm-sweep-d9-p005-s1 |
| pymatching | 1.620e-3 | [1.39e-3, 1.89e-3] | 162 / 100000 | 784.96 ms | surface-code-mwpm-sweep-d9-p005-s3 |
| pymatching | 1.620e-3 | [1.39e-3, 1.89e-3] | 162 / 100000 | 803.00 ms | surface-code-mwpm-sweep-d9-p005-s2 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=9 · p=0.008
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.465e-2 | [1.39e-2, 1.54e-2] | 1465 / 100000 | 1479.53 ms | surface-code-mwpm-sweep-d9-p008-s2 |
| pymatching | 1.499e-2 | [1.43e-2, 1.58e-2] | 1499 / 100000 | 1553.57 ms | surface-code-mwpm-sweep-d9-p008-s1 |
| pymatching | 1.575e-2 | [1.50e-2, 1.65e-2] | 1575 / 100000 | 1542.73 ms | surface-code-mwpm-sweep-d9-p008-s3 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=9 · p=0.011
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 5.705e-2 | [5.39e-2, 6.04e-2] | 1141 / 20000 | 499.34 ms | surface-code-mwpm-sweep-d9-p011-s2 |
| pymatching | 5.810e-2 | [5.49e-2, 6.14e-2] | 1162 / 20000 | 498.21 ms | surface-code-mwpm-sweep-d9-p011-s3 |
| pymatching | 5.890e-2 | [5.57e-2, 6.22e-2] | 1178 / 20000 | 494.82 ms | surface-code-mwpm-sweep-d9-p011-s1 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=9 · p=0.015
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 1.681e-1 | [1.63e-1, 1.73e-1] | 3362 / 20000 | 809.84 ms | surface-code-mwpm-sweep-d9-p015-s2 |
| pymatching | 1.690e-1 | [1.64e-1, 1.74e-1] | 3380 / 20000 | 809.94 ms | surface-code-mwpm-sweep-d9-p015-s3 |
| pymatching | 1.702e-1 | [1.65e-1, 1.75e-1] | 3404 / 20000 | 811.67 ms | surface-code-mwpm-sweep-d9-p015-s1 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
rotated-surface-code · d=9 · p=0.02
Every decoder below was measured under these identical conditions. Runs that differ in any of them appear in their own table, never merged into this one.
| Decoder | Logical error rate | 95% interval | Failures / shots | Decode latency | Run |
|---|---|---|---|---|---|
| pymatching | 3.326e-1 | [3.26e-1, 3.39e-1] | 6651 / 20000 | 1196.07 ms | surface-code-mwpm-sweep-d9-p02-s1 |
| pymatching | 3.332e-1 | [3.27e-1, 3.40e-1] | 6664 / 20000 | 1180.05 ms | surface-code-mwpm-sweep-d9-p02-s3 |
| pymatching | 3.337e-1 | [3.27e-1, 3.40e-1] | 6674 / 20000 | 1175.76 ms | surface-code-mwpm-sweep-d9-p02-s2 |
Reading this table: The confidence intervals for pymatching and pymatching overlap, so this data does not distinguish them. More shots would be needed to separate them.
Unranked measurements
These runs did not record a comparability key, so they are listed rather than ranked. Placing them in a table alongside runs whose conditions are known would imply a comparison that has not been established.
- pymatching surface-code-mwpm-baseline-d7-p02
- pymatching surface-code-mwpm-baseline-d7-p015
- pymatching surface-code-mwpm-baseline-d7-p01
- pymatching surface-code-mwpm-baseline-d7-p008
- pymatching surface-code-mwpm-baseline-d7-p005
- pymatching surface-code-mwpm-baseline-d7-p003
- pymatching surface-code-mwpm-baseline-d7-p002
- pymatching surface-code-mwpm-baseline-d7-p001
- pymatching surface-code-mwpm-baseline-d5-p02
- pymatching surface-code-mwpm-baseline-d5-p015
- pymatching surface-code-mwpm-baseline-d5-p01
- pymatching surface-code-mwpm-baseline-d5-p008
- pymatching surface-code-mwpm-baseline-d5-p005
- pymatching surface-code-mwpm-baseline-d5-p003
- pymatching surface-code-mwpm-baseline-d5-p002
- pymatching surface-code-mwpm-baseline-d5-p001
- pymatching surface-code-mwpm-baseline-d3-p02
- pymatching surface-code-mwpm-baseline-d3-p015
- pymatching surface-code-mwpm-baseline-d3-p01
- pymatching surface-code-mwpm-baseline-d3-p008
- pymatching surface-code-mwpm-baseline-d3-p005
- pymatching surface-code-mwpm-baseline-d3-p003
- pymatching surface-code-mwpm-baseline-d3-p002
- pymatching surface-code-mwpm-baseline-d3-p001
Codes and hardware
QEC codes and hardware
Each cell is derived from the device snapshot’s capability fields, so the claim can be checked against the snapshot it came from. This is a capability match, not a recommendation and not an experimental result: only a recorded run could raise a pairing to simulated or demonstrated, and none of these are backed by a run.
The devices below are synthetic topologies used for exploring routing, not observations of any physical hardware.
| Code | Line, 5 qubits | Grid, 3x3 | All-to-all, 6 qubits | Line, 5 qubits, no feed-forward |
|---|---|---|---|---|
| Rotated surface code (X memory) STABILIZER CSS TOPOLOGICAL | THEORETICALLY_SUITABLECapabilities match | THEORETICALLY_SUITABLECapabilities match | THEORETICALLY_SUITABLECapabilities match | INCOMPATIBLE_UNDER_ASSUMPTIONSMissing a required capability
|
| Rotated surface code (Z memory) STABILIZER CSS TOPOLOGICAL | THEORETICALLY_SUITABLECapabilities match | THEORETICALLY_SUITABLECapabilities match | THEORETICALLY_SUITABLECapabilities match | INCOMPATIBLE_UNDER_ASSUMPTIONSMissing a required capability
|
| Unrotated surface code (X memory) STABILIZER CSS TOPOLOGICAL | THEORETICALLY_SUITABLECapabilities match | THEORETICALLY_SUITABLECapabilities match | THEORETICALLY_SUITABLECapabilities match | INCOMPATIBLE_UNDER_ASSUMPTIONSMissing a required capability
|
| Repetition code (memory) STABILIZER CSS | THEORETICALLY_SUITABLECapabilities match | THEORETICALLY_SUITABLECapabilities match | THEORETICALLY_SUITABLECapabilities match | INCOMPATIBLE_UNDER_ASSUMPTIONSMissing a required capability
|
| Color code (XYZ memory) STABILIZER CSS TOPOLOGICAL | THEORETICALLY_SUITABLECapabilities match | THEORETICALLY_SUITABLECapabilities match | THEORETICALLY_SUITABLECapabilities match | INCOMPATIBLE_UNDER_ASSUMPTIONSMissing a required capability
|
Code catalog
- Rotated surface code (X memory)STABILIZERCSSTOPOLOGICALSURFACE
Planar topological code on a rotated lattice, preserving one logical qubit through repeated rounds of syndrome extraction.
- Nearest-neighbour connectivity on a two-dimensional grid is sufficient.
Runnable distances: 3, 5, 7, 9 · reference
- Rotated surface code (Z memory)STABILIZERCSSTOPOLOGICALSURFACE
Rotated surface code memory experiment in the Z basis.
Runnable distances: 3, 5, 7, 9 · reference
- Unrotated surface code (X memory)STABILIZERCSSTOPOLOGICALSURFACE
Unrotated surface code memory; uses more physical qubits per distance than the rotated layout.
Runnable distances: 3, 5, 7 · reference
- Repetition code (memory)STABILIZERCSS
One-dimensional classical repetition code protecting against a single error type. Useful as a control: it is not a full quantum code.
- Protects against one error type only, so a low logical error rate here is not evidence of quantum error correction.
Runnable distances: 3, 5, 7, 9, 11 · reference
- Color code (XYZ memory)STABILIZERCSSTOPOLOGICALCOLOR
Triangular color code memory, admitting transversal Clifford gates.
- Syndrome extraction uses weight-six stabilizers on a three-colorable lattice.
Runnable distances: 3, 5, 7 · reference