Skip to content

Add Stim detector error model export for ECC codes#748

Closed
Oishi1029 wants to merge 2 commits into
QuantumSavory:masterfrom
Oishi1029:export-stim-dem-726
Closed

Add Stim detector error model export for ECC codes#748
Oishi1029 wants to merge 2 commits into
QuantumSavory:masterfrom
Oishi1029:export-stim-dem-726

Conversation

@Oishi1029

Copy link
Copy Markdown

Closes #726.

Adds a code-capacity detector error model builder and a deterministic Stim .dem writer to QuantumClifford.ECC, per the issue's suggested API:

using QuantumClifford.ECC
dem = detector_error_model(Steane7(); px=1e-3, py=0.0, pz=1e-3)
write_detector_error_model("steane7.dem", dem)   # or any IO

What it does

  • detector_error_model(code_or_stabilizer; px, py, pz) builds a small DetectorErrorModel struct: one independent error mechanism per qubit per enabled Pauli fault (error(p) Bernoulli semantics, matching Stim).
  • Detectors: Dᵢ is 1-based row i+1 of parity_checks(code) (QuantumClifford's stabilizer row order, as the issue suggests; documented in the docstrings). A fault flips Dᵢ iff it anticommutes with that row, via comm — so non-CSS codes work by construction.
  • Logical observables: Lⱼ is row j+1 of faults_matrix(code) (L0…L(k−1) logical-X, Lk…L(2k−1) logical-Z); flips are faults_matrix(code) * stab_to_gf2(fault), read off the faults-matrix columns.
  • write_detector_error_model(io_or_path, dem) emits explicit detector D…/logical_observable L… declarations followed by the error(p) D… L… lines. Output is deterministic (fixed iteration order, sorted targets, \n newlines, Julia's platform-stable shortest float printing).
  • Edge cases (documented + tested): identical mechanisms from degenerate codes are kept unmerged (valid per Stim's spec; fusing is the decoder's job); undetectable-but-logical faults emit error(p) L… lines; faults flipping nothing are omitted (zero decoding information; the .dem grammar wants ≥1 target).

Tests

  • Detector targets re-derived from comm against every parity-check row, and logical targets against the literal O * stab_to_gf2(fault), for Steane7, Shor9, Perfect5, Cleve8, Bitflip3, Gottesman(3) (CSS and non-CSS, k=1 and k=3) — the two acceptance criteria in their own words.
  • Exact golden-file comparisons (full .dem text) for Steane7 (the issue's example call) and the non-CSS Perfect5, pinning the deterministic ordering and the documented conventions.
  • Determinism/equality across construction paths, file-vs-IO writing, zero-probability skipping, duplicate-mechanism preservation (Bitflip3), and probability validation.
  • An optional, env-guarded smoke test (QC_TEST_STIM=true + python3 with stim) that parses the exported file with the real Stim parser and checks detector/observable/error counts — off by default so the suite needs no Python, as the issue requests.

Docs: docstrings (autodocs) with a jldoctest, plus an "Exporting a Stim detector error model" section with a Stim-parsing example on the Pauli-frame ECC example page. CHANGELOG entry + dev version bump included.

Out of scope, per the issue: circuit-level extraction, correlated faults, coordinates/repeat blocks, decoders. The emitted dialect is the minimal subset of the .dem grammar, so it round-trips with any conforming DEM importer (e.g. a future #728 import path) — no dependency on one.

Test evidence

Julia 1.12.6, macOS arm64 (M1 Pro):

ECC_TEST=base group: 1551 pass / 0 fail / 1 error — the error is in test/test_cecc.jl
(Hecke group-algebra construction, untouched by this PR) and reproduces identically on
unmodified master in the same environment (1028 pass / 1 error; Hecke v0.39.15 drift).
This PR's tests alone: test/test_ecc_detector_error_model.jl — 523 pass / 0 fail,
including both exact golden-file comparisons and the QC_TEST_STIM=true smoke test:
stim v1.16.0 parses the exported Steane7 file (6 detectors, 2 observables, 14 errors).

Default group: 1,141,960 pass / 9 broken / 0 fail in 14m57s ("tests passed"),
including doctests (the new jldoctest) and Aqua.

Disclosure: I used Claude (Anthropic) to help draft the implementation and tests, which I then reviewed, manually verified, and tested locally. Returning unitaryHACK contributor (harmoniqs/Legato.jl#27, harmoniqs/Piccolo.jl#238). unitaryHACK 2026 submission.

Add to the ECC module a code-capacity detector error model builder
`detector_error_model(code; px, py, pz)` and a deterministic Stim
`.dem` text writer `write_detector_error_model(io_or_path, dem)`,
following the conventions of `parity_checks` (detector row order)
and `faults_matrix` (logical observable row order).

Closes QuantumSavory#726
@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master 1d3be6a... master / 1d3be6a...
circuitsim/compactification/compact 6.89 ± 0.042 ms 6.79 ± 0.025 ms 1.01 ± 0.0073
circuitsim/compactification/no_compact 6.95 ± 0.067 ms 6.86 ± 0.044 ms 1.01 ± 0.012
circuitsim/mctrajectories/q1001_r1 16.5 ± 0.65 ms 16.6 ± 1.1 ms 0.994 ± 0.077
circuitsim/mctrajectories/q101_r1 0.174 ± 0.012 ms 0.178 ± 0.011 ms 0.982 ± 0.091
circuitsim/mctrajectories_sumtype/q1001_r1 15.4 ± 0.83 ms 14.6 ± 1.9 ms 1.05 ± 0.15
circuitsim/mctrajectories_sumtype/q101_r1 0.122 ± 0.003 ms 0.123 ± 0.0033 ms 0.992 ± 0.036
circuitsim/mctrajectories_union/q1001_r1 15.3 ± 0.8 ms 15.4 ± 1.8 ms 0.992 ± 0.13
circuitsim/mctrajectories_union/q101_r1 0.121 ± 0.0038 ms 0.122 ± 0.0038 ms 0.993 ± 0.044
circuitsim/pftrajectories/q1001_r1 0.0849 ± 0.036 ms 0.079 ± 0.036 ms 1.07 ± 0.68
circuitsim/pftrajectories/q1001_r100 0.194 ± 0.012 ms 0.19 ± 0.012 ms 1.02 ± 0.094
circuitsim/pftrajectories/q1001_r10000 1.16 ± 0.012 ms 1.16 ± 0.014 ms 1.01 ± 0.016
circuitsim/pftrajectories/q101_r1 8.65 ± 3.1 μs 8.04 ± 3.1 μs 1.08 ± 0.56
circuitsim/pftrajectories_sumtype/q1001_r1 0.137 ± 0.00067 ms 0.139 ± 0.0011 ms 0.981 ± 0.0094
circuitsim/pftrajectories_sumtype/q1001_r100 0.247 ± 0.0092 ms 0.249 ± 0.0026 ms 0.99 ± 0.038
circuitsim/pftrajectories_sumtype/q1001_r10000 1.21 ± 0.012 ms 1.21 ± 0.014 ms 0.998 ± 0.015
circuitsim/pftrajectories_sumtype/q1001_r10000_fastrow 6.15 ± 0.11 ms 6.15 ± 0.078 ms 1 ± 0.022
circuitsim/pftrajectories_sumtype/q101_r1 13.8 ± 0.061 μs 14 ± 0.091 μs 0.983 ± 0.0077
circuitsim/pftrajectories_union/q1001_r1 24.2 ± 0.079 μs 23 ± 0.08 μs 1.05 ± 0.005
circuitsim/pftrajectories_union/q1001_r100 0.135 ± 0.00042 ms 0.136 ± 0.0006 ms 0.991 ± 0.0054
circuitsim/pftrajectories_union/q1001_r10000 1.09 ± 0.0096 ms 1.09 ± 0.012 ms 0.998 ± 0.014
circuitsim/pftrajectories_union/q101_r1 2.5 ± 0.02 μs 2.38 ± 0.02 μs 1.05 ± 0.012
clifford/dense/cnot250_on_dense500_destab 11.1 ± 0.044 ms 11.1 ± 0.049 ms 1 ± 0.0059
clifford/dense/cnot250_on_dense500_stab 5.61 ± 0.025 ms 5.58 ± 0.022 ms 1.01 ± 0.0059
clifford/dense/cnot250_on_diag500_destab 0.98 ± 0.0037 ms 0.978 ± 0.0062 ms 1 ± 0.0074
clifford/dense/cnot250_on_diag500_stab 0.569 ± 0.011 ms 0.569 ± 0.011 ms 1 ± 0.028
clifford/dense/cnot_on_dense500_destab 0.0452 ± 0.00058 ms 0.0451 ± 0.0007 ms 1 ± 0.02
clifford/dense/cnot_on_dense500_stab 21.1 ± 0.2 μs 22.6 ± 0.23 μs 0.931 ± 0.013
clifford/dense/cnot_on_diag500_destab 26.8 ± 0.59 μs 27.6 ± 0.82 μs 0.973 ± 0.036
clifford/dense/cnot_on_diag500_stab 13.5 ± 0.48 μs 14 ± 0.4 μs 0.961 ± 0.044
clifford/dense/dense500_on_dense500_destab 11.1 ± 0.053 ms 11 ± 0.05 ms 1.01 ± 0.0066
clifford/dense/dense500_on_dense500_stab 5.61 ± 0.03 ms 5.64 ± 0.026 ms 0.993 ± 0.007
clifford/dense/dense500_on_diag500_destab 0.978 ± 0.0087 ms 0.98 ± 0.014 ms 0.999 ± 0.017
clifford/dense/dense500_on_diag500_stab 0.569 ± 0.011 ms 0.569 ± 0.011 ms 1 ± 0.027
clifford/symbolic/cnot250_on_dense500_destab 1.5 ± 0.015 ms 1.51 ± 0.02 ms 0.998 ± 0.016
clifford/symbolic/cnot250_on_dense500_stab 0.753 ± 0.0081 ms 0.761 ± 0.0062 ms 0.99 ± 0.013
clifford/symbolic/cnot250_on_diag500_destab 1.23 ± 0.017 ms 1.23 ± 0.011 ms 0.998 ± 0.016
clifford/symbolic/cnot250_on_diag500_stab 0.622 ± 0.013 ms 0.634 ± 0.01 ms 0.981 ± 0.026
clifford/symbolic/cnot_on_dense500_destab 4.97 ± 0.14 μs 4.93 ± 0.04 μs 1.01 ± 0.029
clifford/symbolic/cnot_on_dense500_stab 2.5 ± 0.031 μs 2.56 ± 0.041 μs 0.98 ± 0.02
clifford/symbolic/cnot_on_diag500_destab 5.02 ± 0.19 μs 4.97 ± 0.12 μs 1.01 ± 0.045
clifford/symbolic/cnot_on_diag500_stab 2.48 ± 0.06 μs 2.53 ± 0.05 μs 0.98 ± 0.031
ecc/evaluate_decoder/shor_bp_comm 2.14 ± 0.07 ms 2.32 ± 0.073 ms 0.921 ± 0.042
ecc/evaluate_decoder/shor_bp_naivesyn 4.77 ± 0.18 ms 5.08 ± 0.16 ms 0.939 ± 0.047
ecc/evaluate_decoder/shor_bp_shorsyn 5.17 ± 0.17 ms 5.44 ± 0.14 ms 0.95 ± 0.04
ecc/evaluate_decoder/shor_pybp_comm 21.6 ± 1.2 ms 21.4 ± 0.98 ms 1.01 ± 0.074
ecc/evaluate_decoder/shor_pybp_naivesyn 0.0433 ± 0.0021 s 0.0427 ± 0.002 s 1.01 ± 0.068
ecc/evaluate_decoder/shor_pybp_shorsyn 0.044 ± 0.0022 s 0.0444 ± 0.0025 s 0.991 ± 0.075
ecc/evaluate_decoder/shor_pybposd_comm 21.7 ± 1 ms 21.5 ± 1.2 ms 1.01 ± 0.073
ecc/evaluate_decoder/shor_pybposd_naivesyn 0.043 ± 0.0024 s 0.0435 ± 0.0023 s 0.989 ± 0.076
ecc/evaluate_decoder/shor_pybposd_shorsyn 0.0436 ± 0.0021 s 0.0443 ± 0.0027 s 0.985 ± 0.077
ecc/evaluate_decoder/shor_table_comm 0.297 ± 0.04 ms 0.294 ± 0.04 ms 1.01 ± 0.19
ecc/evaluate_decoder/shor_table_naivesyn 0.999 ± 0.037 ms 0.971 ± 0.0069 ms 1.03 ± 0.039
ecc/evaluate_decoder/shor_table_shorsyn 1.37 ± 0.031 ms 1.36 ± 0.017 ms 1.01 ± 0.026
ecc/evaluate_decoder/toric8_bp_comm 0.765 ± 0.056 s 0.735 ± 0.069 s 1.04 ± 0.12
ecc/evaluate_decoder/toric8_bp_naivesyn 1.5 ± 0.051 s 1.49 ± 0.048 s 1.01 ± 0.047
ecc/evaluate_decoder/toric8_bp_shorsyn 1.56 ± 0.063 s 1.49 ± 0.062 s 1.04 ± 0.061
ecc/evaluate_decoder/toric8_pybp_comm 0.0651 ± 0.0024 s 0.0644 ± 0.0028 s 1.01 ± 0.057
ecc/evaluate_decoder/toric8_pybp_naivesyn 0.138 ± 0.0059 s 0.135 ± 0.0051 s 1.03 ± 0.059
ecc/evaluate_decoder/toric8_pybp_shorsyn 0.147 ± 0.0084 s 0.142 ± 0.0048 s 1.04 ± 0.069
ecc/evaluate_decoder/toric8_pybposd_comm 0.065 ± 0.0033 s 0.0646 ± 0.0035 s 1.01 ± 0.075
ecc/evaluate_decoder/toric8_pybposd_naivesyn 0.137 ± 0.0035 s 0.135 ± 0.0038 s 1.01 ± 0.039
ecc/evaluate_decoder/toric8_pybposd_shorsyn 0.146 ± 0.005 s 0.141 ± 0.007 s 1.03 ± 0.062
ecc/evaluate_decoder/toric8_pymatch_comm 3.62 ± 0.13 ms 3.51 ± 0.049 ms 1.03 ± 0.039
ecc/evaluate_decoder/toric8_pymatch_naivesyn 14.2 ± 0.41 ms 13.7 ± 0.51 ms 1.04 ± 0.049
ecc/evaluate_decoder/toric8_pymatch_shorsyn 22.8 ± 1.3 ms 22.3 ± 0.99 ms 1.02 ± 0.072
ecc/evaluate_decoder/toric8_table_comm 3.83 ± 0.069 ms 3.77 ± 0.05 ms 1.02 ± 0.023
ecc/evaluate_decoder/toric8_table_naivesyn 13.6 ± 0.14 ms 13.4 ± 0.15 ms 1.02 ± 0.015
ecc/evaluate_decoder/toric8_table_shorsyn 22.2 ± 0.17 ms 21.7 ± 0.17 ms 1.02 ± 0.011
pauli/mul/100 0.04 ± 0 μs 0.04 ± 0 μs 1 ± 0
pauli/mul/1000 0.05 ± 0.01 μs 0.05 ± 0.001 μs 1 ± 0.2
pauli/mul/100000 0.832 ± 0.11 μs 0.821 ± 0.051 μs 1.01 ± 0.15
pauli/mul/20000000 0.211 ± 0.032 ms 0.185 ± 0.018 ms 1.14 ± 0.21
stabilizer/canon/cano500 3.16 ± 0.034 ms 3.12 ± 0.031 ms 1.01 ± 0.015
stabilizer/canon/diag_cano500 0.654 ± 0.012 ms 0.653 ± 0.012 ms 1 ± 0.027
stabilizer/canon/diag_gott500 2.56 ± 0.062 ms 2.53 ± 0.06 ms 1.01 ± 0.034
stabilizer/canon/diag_rref500 0.602 ± 0.013 ms 0.602 ± 0.012 ms 1 ± 0.029
stabilizer/canon/gott500 5.13 ± 0.23 ms 4.99 ± 0.23 ms 1.03 ± 0.066
stabilizer/canon/md_cano500 1.2 ± 0.018 ms 1.21 ± 0.014 ms 0.992 ± 0.018
stabilizer/canon/md_rref500 1.19 ± 0.017 ms 1.18 ± 0.014 ms 1.01 ± 0.019
stabilizer/canon/rref500 3.16 ± 0.046 ms 3.12 ± 0.03 ms 1.01 ± 0.017
stabilizer/project/destabilizer 17.3 ± 1 μs 16.5 ± 0.25 μs 1.05 ± 0.064
stabilizer/project/stabilizer 9.37 ± 0.16 μs 9.14 ± 0.12 μs 1.03 ± 0.022
stabilizer/tensor/diag_pow5_20 2.4 ± 1.2 ms 2.33 ± 0.73 ms 1.03 ± 0.6
stabilizer/tensor/pow5_20 3.36 ± 0.32 μs 2.98 ± 0.31 μs 1.13 ± 0.16
stabilizer/trace/destabilizer 21.9 ± 0.44 μs 21.7 ± 0.53 μs 1.01 ± 0.032
stabilizer/trace/stabilizer 24.5 ± 0.47 μs 24.7 ± 0.52 μs 0.992 ± 0.028
time_to_load 2.13 ± 0.056 s 2.04 ± 0.027 s 1.04 ± 0.031
Memory benchmarks
master 1d3be6a... master / 1d3be6a...
circuitsim/compactification/compact 0 allocs: 0 B 0 allocs: 0 B
circuitsim/compactification/no_compact 6 k allocs: 0.275 MB 6 k allocs: 0.275 MB 1
circuitsim/mctrajectories/q1001_r1 18 k allocs: 0.489 MB 18 k allocs: 0.489 MB 1
circuitsim/mctrajectories/q101_r1 1.82 k allocs: 0.0493 MB 1.82 k allocs: 0.0493 MB 1
circuitsim/mctrajectories_sumtype/q1001_r1 9 allocs: 0.484 kB 9 allocs: 0.484 kB 1
circuitsim/mctrajectories_sumtype/q101_r1 8 allocs: 0.25 kB 8 allocs: 0.25 kB 1
circuitsim/mctrajectories_union/q1001_r1 9 allocs: 0.484 kB 9 allocs: 0.484 kB 1
circuitsim/mctrajectories_union/q101_r1 8 allocs: 0.25 kB 8 allocs: 0.25 kB 1
circuitsim/pftrajectories/q1001_r1 2 k allocs: 0.0916 MB 2 k allocs: 0.0916 MB 1
circuitsim/pftrajectories/q1001_r100 2 k allocs: 0.0916 MB 2 k allocs: 0.0916 MB 1
circuitsim/pftrajectories/q1001_r10000 2 k allocs: 0.0916 MB 2 k allocs: 0.0916 MB 1
circuitsim/pftrajectories/q101_r1 0.201 k allocs: 9.42 kB 0.201 k allocs: 9.42 kB 1
circuitsim/pftrajectories_sumtype/q1001_r1 0 allocs: 0 B 0 allocs: 0 B
circuitsim/pftrajectories_sumtype/q1001_r100 0 allocs: 0 B 0 allocs: 0 B
circuitsim/pftrajectories_sumtype/q1001_r10000 0 allocs: 0 B 0 allocs: 0 B
circuitsim/pftrajectories_sumtype/q1001_r10000_fastrow 0 allocs: 0 B 0 allocs: 0 B
circuitsim/pftrajectories_sumtype/q101_r1 0 allocs: 0 B 0 allocs: 0 B
circuitsim/pftrajectories_union/q1001_r1 2 allocs: 0.0938 kB 2 allocs: 0.0938 kB 1
circuitsim/pftrajectories_union/q1001_r100 2 allocs: 0.0938 kB 2 allocs: 0.0938 kB 1
circuitsim/pftrajectories_union/q1001_r10000 2 allocs: 0.0938 kB 2 allocs: 0.0938 kB 1
circuitsim/pftrajectories_union/q101_r1 2 allocs: 0.0938 kB 2 allocs: 0.0938 kB 1
clifford/dense/cnot250_on_dense500_destab 0 allocs: 0 B 0 allocs: 0 B
clifford/dense/cnot250_on_dense500_stab 0 allocs: 0 B 0 allocs: 0 B
clifford/dense/cnot250_on_diag500_destab 0 allocs: 0 B 0 allocs: 0 B
clifford/dense/cnot250_on_diag500_stab 0 allocs: 0 B 0 allocs: 0 B
clifford/dense/cnot_on_dense500_destab 3 allocs: 0.0938 kB 3 allocs: 0.0938 kB 1
clifford/dense/cnot_on_dense500_stab 3 allocs: 0.0938 kB 3 allocs: 0.0938 kB 1
clifford/dense/cnot_on_diag500_destab 3 allocs: 0.0938 kB 3 allocs: 0.0938 kB 1
clifford/dense/cnot_on_diag500_stab 3 allocs: 0.0938 kB 3 allocs: 0.0938 kB 1
clifford/dense/dense500_on_dense500_destab 0 allocs: 0 B 0 allocs: 0 B
clifford/dense/dense500_on_dense500_stab 0 allocs: 0 B 0 allocs: 0 B
clifford/dense/dense500_on_diag500_destab 0 allocs: 0 B 0 allocs: 0 B
clifford/dense/dense500_on_diag500_stab 0 allocs: 0 B 0 allocs: 0 B
clifford/symbolic/cnot250_on_dense500_destab 0 allocs: 0 B 0 allocs: 0 B
clifford/symbolic/cnot250_on_dense500_stab 0 allocs: 0 B 0 allocs: 0 B
clifford/symbolic/cnot250_on_diag500_destab 0 allocs: 0 B 0 allocs: 0 B
clifford/symbolic/cnot250_on_diag500_stab 0 allocs: 0 B 0 allocs: 0 B
clifford/symbolic/cnot_on_dense500_destab 0 allocs: 0 B 0 allocs: 0 B
clifford/symbolic/cnot_on_dense500_stab 0 allocs: 0 B 0 allocs: 0 B
clifford/symbolic/cnot_on_diag500_destab 0 allocs: 0 B 0 allocs: 0 B
clifford/symbolic/cnot_on_diag500_stab 0 allocs: 0 B 0 allocs: 0 B
ecc/evaluate_decoder/shor_bp_comm 0.0396 M allocs: 1.61 MB 0.0393 M allocs: 1.59 MB 1.01
ecc/evaluate_decoder/shor_bp_naivesyn 0.0749 M allocs: 3.15 MB 0.0748 M allocs: 3.15 MB 1
ecc/evaluate_decoder/shor_bp_shorsyn 0.0755 M allocs: 3.22 MB 0.0751 M allocs: 3.2 MB 1
ecc/evaluate_decoder/shor_pybp_comm 0.0935 M allocs: 3.29 MB 0.0935 M allocs: 3.29 MB 1
ecc/evaluate_decoder/shor_pybp_naivesyn 0.182 M allocs: 6.49 MB 0.182 M allocs: 6.49 MB 1
ecc/evaluate_decoder/shor_pybp_shorsyn 0.182 M allocs: 6.55 MB 0.182 M allocs: 6.55 MB 1
ecc/evaluate_decoder/shor_pybposd_comm 0.0935 M allocs: 3.29 MB 0.0935 M allocs: 3.29 MB 1
ecc/evaluate_decoder/shor_pybposd_naivesyn 0.182 M allocs: 6.49 MB 0.182 M allocs: 6.49 MB 1
ecc/evaluate_decoder/shor_pybposd_shorsyn 0.182 M allocs: 6.55 MB 0.182 M allocs: 6.55 MB 1
ecc/evaluate_decoder/shor_table_comm 3.98 k allocs: 0.17 MB 3.98 k allocs: 0.17 MB 1
ecc/evaluate_decoder/shor_table_naivesyn 2.8 k allocs: 0.185 MB 2.8 k allocs: 0.185 MB 1
ecc/evaluate_decoder/shor_table_shorsyn 3.28 k allocs: 0.247 MB 3.28 k allocs: 0.247 MB 1
ecc/evaluate_decoder/toric8_bp_comm 0.988 M allocs: 0.162 GB 1.01 M allocs: 0.165 GB 0.978
ecc/evaluate_decoder/toric8_bp_naivesyn 2.07 M allocs: 0.338 GB 2.05 M allocs: 0.335 GB 1.01
ecc/evaluate_decoder/toric8_bp_shorsyn 2.1 M allocs: 0.341 GB 2.05 M allocs: 0.334 GB 1.02
ecc/evaluate_decoder/toric8_pybp_comm 0.103 M allocs: 4.18 MB 0.103 M allocs: 4.18 MB 1
ecc/evaluate_decoder/toric8_pybp_naivesyn 0.218 M allocs: 9.04 MB 0.218 M allocs: 9.04 MB 1
ecc/evaluate_decoder/toric8_pybp_shorsyn 0.233 M allocs: 10.7 MB 0.233 M allocs: 10.7 MB 1
ecc/evaluate_decoder/toric8_pybposd_comm 0.103 M allocs: 4.18 MB 0.103 M allocs: 4.18 MB 1
ecc/evaluate_decoder/toric8_pybposd_naivesyn 0.218 M allocs: 9.04 MB 0.218 M allocs: 9.04 MB 1
ecc/evaluate_decoder/toric8_pybposd_shorsyn 0.233 M allocs: 10.7 MB 0.233 M allocs: 10.7 MB 1
ecc/evaluate_decoder/toric8_pymatch_comm 14 k allocs: 1.05 MB 14 k allocs: 1.05 MB 1
ecc/evaluate_decoder/toric8_pymatch_naivesyn 0.0389 M allocs: 2.71 MB 0.0389 M allocs: 2.71 MB 1
ecc/evaluate_decoder/toric8_pymatch_shorsyn 0.054 M allocs: 4.41 MB 0.054 M allocs: 4.41 MB 1
ecc/evaluate_decoder/toric8_table_comm 13.9 k allocs: 0.835 MB 13.9 k allocs: 0.835 MB 1
ecc/evaluate_decoder/toric8_table_naivesyn 0.0388 M allocs: 2.28 MB 0.0388 M allocs: 2.28 MB 1
ecc/evaluate_decoder/toric8_table_shorsyn 0.0538 M allocs: 3.98 MB 0.0538 M allocs: 3.98 MB 1
pauli/mul/100 0 allocs: 0 B 0 allocs: 0 B
pauli/mul/1000 0 allocs: 0 B 0 allocs: 0 B
pauli/mul/100000 0 allocs: 0 B 0 allocs: 0 B
pauli/mul/20000000 0 allocs: 0 B 0 allocs: 0 B
stabilizer/canon/cano500 0 allocs: 0 B 0 allocs: 0 B
stabilizer/canon/diag_cano500 0 allocs: 0 B 0 allocs: 0 B
stabilizer/canon/diag_gott500 14.5 k allocs: 0.853 MB 14.5 k allocs: 0.853 MB 1
stabilizer/canon/diag_rref500 0 allocs: 0 B 0 allocs: 0 B
stabilizer/canon/gott500 14.5 k allocs: 0.854 MB 14.5 k allocs: 0.854 MB 1
stabilizer/canon/md_cano500 0 allocs: 0 B 0 allocs: 0 B
stabilizer/canon/md_rref500 0 allocs: 0 B 0 allocs: 0 B
stabilizer/canon/rref500 0 allocs: 0 B 0 allocs: 0 B
stabilizer/project/destabilizer 5 allocs: 0.281 kB 5 allocs: 0.281 kB 1
stabilizer/project/stabilizer 2 allocs: 0.0781 kB 2 allocs: 0.0781 kB 1
stabilizer/tensor/diag_pow5_20 0.032 k allocs: 24 MB 0.032 k allocs: 24 MB 1
stabilizer/tensor/pow5_20 29 allocs: 5.48 kB 29 allocs: 5.48 kB 1
stabilizer/trace/destabilizer 2 allocs: 0.0781 kB 2 allocs: 0.0781 kB 1
stabilizer/trace/stabilizer 3 allocs: 0.109 kB 3 allocs: 0.109 kB 1
time_to_load 0.149 k allocs: 11.1 kB 0.149 k allocs: 11.1 kB 1

@codecov

codecov Bot commented Jun 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 82.97872% with 8 lines in your changes missing coverage. Please review.
✅ Project coverage is 74.05%. Comparing base (0729e6d) to head (af3672c).

Files with missing lines Patch % Lines
src/ecc/detector_error_model.jl 82.97% 8 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #748      +/-   ##
==========================================
+ Coverage   74.01%   74.05%   +0.04%     
==========================================
  Files         111      112       +1     
  Lines        7778     7825      +47     
==========================================
+ Hits         5757     5795      +38     
- Misses       2021     2030       +9     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@Krastanov

Copy link
Copy Markdown
Member

We do not accept LLM-generated PRs by unknown developers for our bounties.

@Krastanov Krastanov closed this Jun 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Export Stim detector error models from QuantumClifford codes

2 participants