Skip to content

Feature: Added SHGP and SHYPS Subsystem Quantum Codes#710

Open
the-punisher-29 wants to merge 9 commits into
QuantumSavory:masterfrom
the-punisher-29:feature/subsystem-codes
Open

Feature: Added SHGP and SHYPS Subsystem Quantum Codes#710
the-punisher-29 wants to merge 9 commits into
QuantumSavory:masterfrom
the-punisher-29:feature/subsystem-codes

Conversation

@the-punisher-29

@the-punisher-29 the-punisher-29 commented Apr 7, 2026

Copy link
Copy Markdown

Resolves Issue: #480

This PR adds support for Subsystem Quantum Codes in QuantumClifford.jl — specifically Bravyi-Bacon-Shor (BBS), Subsystem Hypergraph Product (SHGP), and Subsystem Hypergraph Product Simplex (SHYPS).

As discussed with @Krastanov and @Fe-r-oz in #480, I've intentionally skipped the generalized SubsystemCodeTableau path for these families. They have exact closed-form geometry, so building them natively avoids unnecessary solver overhead and produces tighter internal structure.

Architecture & Design Decisions

1. New Classical Seed

Added Simplex(r) to lib/QECCore, structured as the dual of the Hamming code.

2. Direct Analytical Framework

BravyiBaconShor, SubsystemHypergraphProduct, and SubsystemHypergraphProductSimplex all subtype AbstractCSSCode directly. Each holds Tableau objects for gauge_generators and Stabilizer objects for parity_checks. Subsystem geometry is computed via GF(2) matrix operations (Nemo.kernel for nullspaces); $k$ is derived from exact Galois Field matrix ranks.

3. Subsystem Ecosystem Integration

Added gauge_generators(c) and code_g(c) overrides to the ECC.jl layer for generic subsystem support. _stabilizer_rank() connects the rank bounds between stabilizers and gauges.

Verification & Test Suite

Tests are in test_ecc_subsystem.jl:

  • Paper-verified inputs: Reproduces the $[[21, 4, 3]]$ BBS and $[[49, 16, 3]]$ SHP configurations using matrix inputs from Li & Yoder.
  • Commutation invariants: Loop checks verify that stabilizers are Abelian, stabilizers commute with all gauge generators, and gauge generators have non-Abelian intersections where expected.
  • QLDPC bound: For SHYPS, checks that gauge weight stays strictly below $r+1$, confirming the $O(\log n)$ scaling.

@Fe-r-oz ,the BScThesisPhysics doc you recommended was genuinely useful, especially for the final round of debugging. Looking forward to your thoughts.

Note:I have removed the BBS Code from here,and have raise a separate PR for the same

…rides, and SHYPS

- Fixed Nemo.kernel API (transpose convention, row-based output)
- Added gauge_generators and code_g interface for BBS and SHP
- Added correct code_k overrides (BBS: rank(A), SHP: nullity product)
- Improved docstrings with citations and ECC Zoo links
- Added bibtex entries for bravyi2011, quintavalle2021, malcolm2025
- Expanded test suite with Simplex, BBS, SHP, and SHYPS(2,3) tests
@github-actions

github-actions Bot commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master f3f7460... master / f3f7460...
circuitsim/compactification/compact 8.09 ± 0.029 ms 8.05 ± 0.035 ms 1.01 ± 0.0056
circuitsim/compactification/no_compact 8.23 ± 0.04 ms 8.12 ± 0.033 ms 1.01 ± 0.0064
circuitsim/mctrajectories/q1001_r1 15.3 ± 0.47 ms 15.5 ± 0.43 ms 0.983 ± 0.041
circuitsim/mctrajectories/q101_r1 0.191 ± 0.011 ms 0.19 ± 0.011 ms 1 ± 0.084
circuitsim/mctrajectories_sumtype/q1001_r1 14.9 ± 0.28 ms 15 ± 0.28 ms 0.992 ± 0.026
circuitsim/mctrajectories_sumtype/q101_r1 0.134 ± 0.0031 ms 0.134 ± 0.004 ms 0.999 ± 0.037
circuitsim/mctrajectories_union/q1001_r1 14.7 ± 0.25 ms 14.8 ± 0.34 ms 0.994 ± 0.028
circuitsim/mctrajectories_union/q101_r1 0.133 ± 0.0035 ms 0.133 ± 0.0024 ms 0.998 ± 0.032
circuitsim/pftrajectories/q1001_r1 0.0892 ± 0.039 ms 0.0878 ± 0.039 ms 1.01 ± 0.63
circuitsim/pftrajectories/q1001_r100 0.209 ± 0.013 ms 0.197 ± 0.013 ms 1.06 ± 0.096
circuitsim/pftrajectories/q1001_r10000 1.34 ± 0.01 ms 1.26 ± 0.018 ms 1.06 ± 0.017
circuitsim/pftrajectories/q101_r1 9.12 ± 3.5 μs 9 ± 3.5 μs 1.01 ± 0.55
circuitsim/pftrajectories_sumtype/q1001_r1 0.103 ± 0.0017 ms 0.112 ± 0.0013 ms 0.92 ± 0.018
circuitsim/pftrajectories_sumtype/q1001_r100 0.223 ± 0.008 ms 0.224 ± 0.0061 ms 0.996 ± 0.045
circuitsim/pftrajectories_sumtype/q1001_r10000 1.34 ± 0.012 ms 1.27 ± 0.018 ms 1.06 ± 0.018
circuitsim/pftrajectories_sumtype/q1001_r10000_fastrow 6.39 ± 0.041 ms 6.38 ± 0.045 ms 1 ± 0.0095
circuitsim/pftrajectories_sumtype/q101_r1 10.4 ± 0.2 μs 11.3 ± 0.15 μs 0.92 ± 0.021
circuitsim/pftrajectories_union/q1001_r1 23.4 ± 0.18 μs 24.3 ± 0.26 μs 0.96 ± 0.013
circuitsim/pftrajectories_union/q1001_r100 0.144 ± 0.00096 ms 0.137 ± 0.0012 ms 1.05 ± 0.011
circuitsim/pftrajectories_union/q1001_r10000 1.26 ± 0.0092 ms 1.19 ± 0.017 ms 1.06 ± 0.017
circuitsim/pftrajectories_union/q101_r1 2.43 ± 0.039 μs 2.53 ± 0.04 μs 0.961 ± 0.022
clifford/dense/cnot250_on_dense500_destab 12.2 ± 0.044 ms 12.2 ± 0.055 ms 0.995 ± 0.0058
clifford/dense/cnot250_on_dense500_stab 6.13 ± 0.025 ms 6.13 ± 0.026 ms 1 ± 0.0059
clifford/dense/cnot250_on_diag500_destab 1.09 ± 0.0036 ms 1.1 ± 0.0033 ms 0.998 ± 0.0045
clifford/dense/cnot250_on_diag500_stab 0.554 ± 0.01 ms 0.55 ± 0.0088 ms 1.01 ± 0.025
clifford/dense/cnot_on_dense500_destab 0.0463 ± 0.00036 ms 0.0464 ± 0.00037 ms 0.998 ± 0.011
clifford/dense/cnot_on_dense500_stab 23.4 ± 0.23 μs 23.3 ± 0.22 μs 1 ± 0.014
clifford/dense/cnot_on_diag500_destab 28.5 ± 0.52 μs 29.7 ± 0.99 μs 0.958 ± 0.036
clifford/dense/cnot_on_diag500_stab 14.9 ± 0.32 μs 15.7 ± 0.57 μs 0.95 ± 0.04
clifford/dense/dense500_on_dense500_destab 12.2 ± 0.047 ms 12.2 ± 0.042 ms 0.996 ± 0.0052
clifford/dense/dense500_on_dense500_stab 6.14 ± 0.029 ms 6.18 ± 0.028 ms 0.994 ± 0.0064
clifford/dense/dense500_on_diag500_destab 1.1 ± 0.0048 ms 1.1 ± 0.004 ms 1 ± 0.0057
clifford/dense/dense500_on_diag500_stab 0.554 ± 0.01 ms 0.55 ± 0.0087 ms 1.01 ± 0.025
clifford/symbolic/cnot250_on_dense500_destab 1.64 ± 0.0091 ms 1.64 ± 0.012 ms 1 ± 0.0093
clifford/symbolic/cnot250_on_dense500_stab 0.793 ± 0.012 ms 0.789 ± 0.011 ms 1.01 ± 0.021
clifford/symbolic/cnot250_on_diag500_destab 1.35 ± 0.0096 ms 1.35 ± 0.0094 ms 1 ± 0.01
clifford/symbolic/cnot250_on_diag500_stab 0.696 ± 0.01 ms 0.693 ± 0.0099 ms 1 ± 0.021
clifford/symbolic/cnot_on_dense500_destab 5.49 ± 0.06 μs 5.48 ± 0.04 μs 1 ± 0.013
clifford/symbolic/cnot_on_dense500_stab 2.81 ± 0.041 μs 2.78 ± 0.03 μs 1.01 ± 0.018
clifford/symbolic/cnot_on_diag500_destab 5.52 ± 0.13 μs 5.56 ± 0.19 μs 0.993 ± 0.041
clifford/symbolic/cnot_on_diag500_stab 2.82 ± 0.061 μs 2.92 ± 0.18 μs 0.969 ± 0.064
ecc/evaluate_decoder/shor_bp_comm 2.28 ± 0.077 ms 2.15 ± 0.068 ms 1.06 ± 0.049
ecc/evaluate_decoder/shor_bp_naivesyn 5.07 ± 0.28 ms 4.75 ± 0.18 ms 1.07 ± 0.071
ecc/evaluate_decoder/shor_bp_shorsyn 5.51 ± 0.14 ms 5.14 ± 0.12 ms 1.07 ± 0.036
ecc/evaluate_decoder/shor_pybp_comm 18.9 ± 1.5 ms 18.9 ± 1.4 ms 1 ± 0.11
ecc/evaluate_decoder/shor_pybp_naivesyn 0.0382 ± 0.0033 s 0.0372 ± 0.0022 s 1.03 ± 0.11
ecc/evaluate_decoder/shor_pybp_shorsyn 0.04 ± 0.0031 s 0.0387 ± 0.0026 s 1.03 ± 0.11
ecc/evaluate_decoder/shor_pybposd_comm 19.2 ± 1.6 ms 19 ± 1.4 ms 1.01 ± 0.11
ecc/evaluate_decoder/shor_pybposd_naivesyn 0.039 ± 0.003 s 0.0388 ± 0.0025 s 1.01 ± 0.1
ecc/evaluate_decoder/shor_pybposd_shorsyn 0.0392 ± 0.0028 s 0.0392 ± 0.0026 s 1 ± 0.099
ecc/evaluate_decoder/shor_table_comm 0.317 ± 0.046 ms 0.316 ± 0.045 ms 1 ± 0.2
ecc/evaluate_decoder/shor_table_naivesyn 1.06 ± 0.0073 ms 1.07 ± 0.011 ms 0.998 ± 0.013
ecc/evaluate_decoder/shor_table_shorsyn 1.48 ± 0.012 ms 1.47 ± 0.012 ms 1.01 ± 0.012
ecc/evaluate_decoder/toric8_bp_comm 0.701 ± 0.055 s 0.729 ± 0.029 s 0.963 ± 0.084
ecc/evaluate_decoder/toric8_bp_naivesyn 1.41 ± 0.042 s 1.42 ± 0.048 s 0.991 ± 0.044
ecc/evaluate_decoder/toric8_bp_shorsyn 1.48 ± 0.087 s 1.46 ± 0.11 s 1.02 ± 0.1
ecc/evaluate_decoder/toric8_pybp_comm 0.0586 ± 0.0027 s 0.059 ± 0.0022 s 0.992 ± 0.058
ecc/evaluate_decoder/toric8_pybp_naivesyn 0.124 ± 0.0031 s 0.125 ± 0.0056 s 0.995 ± 0.051
ecc/evaluate_decoder/toric8_pybp_shorsyn 0.134 ± 0.0047 s 0.133 ± 0.0038 s 1 ± 0.045
ecc/evaluate_decoder/toric8_pybposd_comm 0.0601 ± 0.0031 s 0.0599 ± 0.0037 s 1 ± 0.082
ecc/evaluate_decoder/toric8_pybposd_naivesyn 0.127 ± 0.0046 s 0.126 ± 0.0032 s 1.01 ± 0.044
ecc/evaluate_decoder/toric8_pybposd_shorsyn 0.138 ± 0.0065 s 0.134 ± 0.0052 s 1.03 ± 0.062
ecc/evaluate_decoder/toric8_pymatch_comm 3.68 ± 0.048 ms 3.68 ± 0.055 ms 1 ± 0.02
ecc/evaluate_decoder/toric8_pymatch_naivesyn 14.4 ± 0.14 ms 14.4 ± 0.26 ms 1 ± 0.021
ecc/evaluate_decoder/toric8_pymatch_shorsyn 24.2 ± 1.3 ms 23.6 ± 1.3 ms 1.03 ± 0.082
ecc/evaluate_decoder/toric8_table_comm 3.97 ± 0.045 ms 3.98 ± 0.046 ms 0.997 ± 0.016
ecc/evaluate_decoder/toric8_table_naivesyn 14.4 ± 0.099 ms 14.3 ± 0.48 ms 1.01 ± 0.034
ecc/evaluate_decoder/toric8_table_shorsyn 23.9 ± 0.18 ms 23.5 ± 0.098 ms 1.02 ± 0.0087
pauli/mul/100 0.04 ± 0 μs 0.04 ± 0.001 μs 1 ± 0.025
pauli/mul/1000 0.05 ± 0 μs 0.05 ± 0.001 μs 1 ± 0.02
pauli/mul/100000 0.852 ± 0.06 μs 0.861 ± 0.06 μs 0.99 ± 0.098
pauli/mul/20000000 0.203 ± 0.013 ms 0.209 ± 0.015 ms 0.971 ± 0.092
stabilizer/canon/cano500 3.38 ± 0.028 ms 3.31 ± 0.024 ms 1.02 ± 0.011
stabilizer/canon/diag_cano500 0.735 ± 0.0054 ms 0.74 ± 0.0066 ms 0.993 ± 0.011
stabilizer/canon/diag_gott500 2.75 ± 0.11 ms 3.03 ± 0.27 ms 0.908 ± 0.089
stabilizer/canon/diag_rref500 0.677 ± 0.0097 ms 0.677 ± 0.0084 ms 1 ± 0.019
stabilizer/canon/gott500 5.41 ± 0.28 ms 5.58 ± 0.27 ms 0.969 ± 0.069
stabilizer/canon/md_cano500 1.27 ± 0.014 ms 1.27 ± 0.015 ms 0.998 ± 0.016
stabilizer/canon/md_rref500 1.21 ± 0.015 ms 1.2 ± 0.013 ms 1.01 ± 0.016
stabilizer/canon/rref500 3.3 ± 0.027 ms 3.33 ± 0.021 ms 0.992 ± 0.01
stabilizer/project/destabilizer 15.8 ± 0.18 μs 15.9 ± 0.18 μs 0.997 ± 0.016
stabilizer/project/stabilizer 7.86 ± 0.11 μs 8.05 ± 0.081 μs 0.976 ± 0.017
stabilizer/tensor/diag_pow5_20 1.8 ± 1.1 ms 1.96 ± 0.068 ms 0.922 ± 0.57
stabilizer/tensor/pow5_20 3.23 ± 0.32 μs 3.62 ± 0.3 μs 0.895 ± 0.12
stabilizer/trace/destabilizer 21.1 ± 0.46 μs 20.8 ± 0.5 μs 1.01 ± 0.033
stabilizer/trace/stabilizer 24.2 ± 0.21 μs 24.4 ± 0.28 μs 0.994 ± 0.014
time_to_load 1.43 ± 0.0083 s 1.43 ± 0.0054 s 1 ± 0.0069
Memory benchmarks
master f3f7460... master / f3f7460...
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.0396 M allocs: 1.61 MB 0.999
ecc/evaluate_decoder/shor_bp_naivesyn 0.0748 M allocs: 3.15 MB 0.0745 M allocs: 3.14 MB 1
ecc/evaluate_decoder/shor_bp_shorsyn 0.0755 M allocs: 3.22 MB 0.0754 M allocs: 3.21 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 1.02 M allocs: 0.168 GB 1.02 M allocs: 0.167 GB 1
ecc/evaluate_decoder/toric8_bp_naivesyn 2.06 M allocs: 0.336 GB 2.07 M allocs: 0.337 GB 0.995
ecc/evaluate_decoder/toric8_bp_shorsyn 2.07 M allocs: 0.337 GB 2.1 M allocs: 0.341 GB 0.988
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 Apr 7, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 150 lines in your changes missing coverage. Please review.
✅ Project coverage is 72.99%. Comparing base (444f341) to head (5eba8f0).
⚠️ Report is 3 commits behind head on master.

Files with missing lines Patch % Lines
src/ecc/codes/subsystem_hypergraph_product.jl 0.00% 79 Missing ⚠️
lib/QECCore/ext/QECCoreNemoExt/simplex.jl 0.00% 28 Missing ⚠️
src/ecc/ECC.jl 0.00% 24 Missing ⚠️
src/ecc/codes/subsystem_shyps.jl 0.00% 14 Missing ⚠️
lib/QECCore/src/codes/classical/simplex.jl 0.00% 5 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #710      +/-   ##
==========================================
- Coverage   73.82%   72.99%   -0.84%     
==========================================
  Files         111      115       +4     
  Lines        7725     8053     +328     
==========================================
+ Hits         5703     5878     +175     
- Misses       2022     2175     +153     

☔ View full report in Codecov by Sentry.
📢 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.

@Fe-r-oz Fe-r-oz left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, @the-punisher-29! I have not looked into the codes yet, but I had a few quick comments on the GF(2) nullspace method. I had implemented and tested this earlier, anticipating it could be useful down the line

Comment thread lib/QECCore/src/codes/classical/simplex.jl Outdated
Comment thread test/test_ecc_subsystem.jl
@the-punisher-29 the-punisher-29 force-pushed the feature/subsystem-codes branch from 635f5eb to 00deb6b Compare April 7, 2026 20:17
Comment thread lib/QECCore/src/codes/classical/simplex.jl Outdated
Comment thread src/ecc/codes/subsystem_hypergraph_product.jl
- Removed unnecessary docstrings on internal helper methods
- Fixed SHYPS docstring: gauge weight bound is r+1 (O(log n)), not 3
- Added comprehensive tests: stabilizer-gauge commutativity, weight bounds, concrete code_g values
- Fixed gauge weight calculation in tests, remove unused Hamming import
@the-punisher-29 the-punisher-29 force-pushed the feature/subsystem-codes branch from 00deb6b to 93d8b07 Compare April 13, 2026 21:04
@the-punisher-29 the-punisher-29 changed the title Feature: Subsystem Quantum Codes (BBS, SHP) and SHYPS Implementation Feature: Added SHGP and SHYPS Subsystem Quantum Codes Apr 13, 2026
@the-punisher-29 the-punisher-29 marked this pull request as ready for review April 21, 2026 17:54
Comment thread lib/QECCore/ext/QECCoreNemoExt/simplex.jl Outdated
@Fe-r-oz

Fe-r-oz commented May 28, 2026

Copy link
Copy Markdown
Member

@Fe-r-oz ,the BScThesisPhysics doc you recommended was genuinely useful, especially for the final round of debugging. Looking forward to your thoughts.

I am glad you found the document useful. I would recommend looking into more recent work by the author as well, for further context on related developments in quantum low-density parity check codes. I am happy to help further review this PR pretty soon, but please do not hesitate to request review from other members from the ECC Team if convenient

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.

2 participants