QuantumSavory / QuantumClifford.jl

Clifford circuits, graph states, and other quantum Stabilizer formalism tools.
MIT License
103 stars 42 forks source link

classical binary golay code #276

Open Fe-r-oz opened 1 month ago

Fe-r-oz commented 1 month ago

There are two members of classical Golay Binary codes in the literature, namely the [[24, 12, 8]] and [[23, 12, 7]]. The latter can be obtained by puncturing the former. The former is described via Huffman construction method.

github-actions[bot] commented 1 month ago
Benchmark Result # Judge result # Benchmark Report for */home/runner/work/QuantumClifford.jl/QuantumClifford.jl* ## Job Properties * Time of benchmarks: - Target: 17 May 2024 - 13:57 - Baseline: 17 May 2024 - 14:05 * Package commits: - Target: e9813d - Baseline: 44f618 * Julia commits: - Target: 81cb53 - Baseline: 81cb53 * Julia command flags: - Target: None - Baseline: None * Environment variables: - Target: None - Baseline: None ## Results A ratio greater than `1.0` denotes a possible regression (marked with :x:), while a ratio less than `1.0` denotes a possible improvement (marked with :white_check_mark:). Only significant results - results that indicate possible regressions or improvements - are shown below (thus, an empty table means that all benchmark results remained invariant between builds). | ID | time ratio | memory ratio | |--------------------------------------------------------------------|------------------------------|------------------------------| | `["circuitsim", "pftrajectories", "q1001_r100"]` | 0.94 (5%) :white_check_mark: | 1.00 (1%) | | `["clifford", "dense", "cnot_on_diag500_stab"]` | 1.05 (5%) :x: | 1.00 (1%) | | `["clifford", "dense", "dense500_on_diag500_destab"]` | 1.16 (5%) :x: | 1.00 (1%) | | `["ecc", "evaluate_decoder", "shor_bp_shorsyn"]` | 0.95 (5%) :white_check_mark: | 0.98 (1%) :white_check_mark: | | `["ecc", "evaluate_decoder", "toric8_bp_comm"]` | 1.05 (5%) :x: | 0.99 (1%) | | `["ecc", "evaluate_decoder", "toric8_bp_naivesyn"]` | 1.04 (5%) | 0.98 (1%) :white_check_mark: | | `["ecc", "evaluate_decoder", "toric8_bp_shorsyn"]` | 1.06 (5%) :x: | 1.00 (1%) | | `["pauli", "mul", "20000000"]` | 1.10 (5%) :x: | 1.00 (1%) | | `["stabilizer", "canon", "diag_rref500"]` | 1.12 (5%) :x: | 1.00 (1%) | | `["stabilizer", "tensor", "diag_pow5_20"]` | 0.92 (5%) :white_check_mark: | 1.00 (1%) | ## Benchmark Group List Here's a list of all the benchmark groups executed by this job: - `["circuitsim", "compactification"]` - `["circuitsim", "mctrajectories"]` - `["circuitsim", "mctrajectories_sumtype"]` - `["circuitsim", "mctrajectories_union"]` - `["circuitsim", "pftrajectories"]` - `["circuitsim", "pftrajectories_sumtype"]` - `["circuitsim", "pftrajectories_union"]` - `["clifford", "dense"]` - `["clifford", "symbolic"]` - `["ecc", "evaluate_decoder"]` - `["pauli", "mul"]` - `["stabilizer", "canon"]` - `["stabilizer", "project"]` - `["stabilizer", "tensor"]` - `["stabilizer", "trace"]` ## Julia versioninfo ### Target ``` Julia Version 1.12.0-DEV.549 Commit 81cb5371dae (2024-05-17 06:37 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) Ubuntu 22.04.4 LTS uname: Linux 6.5.0-1021-azure #22~22.04.1-Ubuntu SMP Tue Apr 30 16:08:18 UTC 2024 x86_64 x86_64 CPU: AMD EPYC 7763 64-Core Processor: speed user nice sys idle irq #1 0 MHz 2053 s 0 s 142 s 5957 s 0 s #2 0 MHz 2170 s 0 s 184 s 5829 s 0 s #3 0 MHz 2614 s 0 s 180 s 5379 s 0 s #4 0 MHz 2396 s 0 s 172 s 5618 s 0 s Memory: 15.606502532958984 GB (13409.109375 MB free) Uptime: 822.37 sec Load Avg: 1.11 1.07 0.77 WORD_SIZE: 64 LLVM: libLLVM-17.0.6 (ORCJIT, znver3) Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores) ``` ### Baseline ``` Julia Version 1.12.0-DEV.549 Commit 81cb5371dae (2024-05-17 06:37 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) Ubuntu 22.04.4 LTS uname: Linux 6.5.0-1021-azure #22~22.04.1-Ubuntu SMP Tue Apr 30 16:08:18 UTC 2024 x86_64 x86_64 CPU: AMD EPYC 7763 64-Core Processor: speed user nice sys idle irq #1 0 MHz 3308 s 0 s 196 s 9063 s 0 s #2 0 MHz 3540 s 0 s 242 s 8817 s 0 s #3 0 MHz 3433 s 0 s 230 s 8926 s 0 s #4 0 MHz 3392 s 0 s 218 s 8992 s 0 s Memory: 15.606502532958984 GB (13338.62109375 MB free) Uptime: 1264.77 sec Load Avg: 1.01 1.03 0.89 WORD_SIZE: 64 LLVM: libLLVM-17.0.6 (ORCJIT, znver3) Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores) ``` --- # Target result # Benchmark Report for */home/runner/work/QuantumClifford.jl/QuantumClifford.jl* ## Job Properties * Time of benchmark: 17 May 2024 - 13:57 * Package commit: e9813d * Julia commit: 81cb53 * Julia command flags: None * Environment variables: None ## Results Below is a table of this job's results, obtained by running the benchmarks. The values listed in the `ID` column have the structure `[parent_group, child_group, ..., key]`, and can be used to index into the BaseBenchmarks suite to retrieve the corresponding benchmarks. The percentages accompanying time and memory values in the below table are noise tolerances. The "true" time/memory value for a given benchmark is expected to fall within this percentage of the reported value. An empty cell means that the value was zero. | ID | time | GC time | memory | allocations | |--------------------------------------------------------------------|----------------:|----------:|----------------:|------------:| | `["circuitsim", "compactification", "compact"]` | 7.017 ms (5%) | | | | | `["circuitsim", "compactification", "no_compact"]` | 7.191 ms (5%) | | 281.25 KiB (1%) | 6000 | | `["circuitsim", "mctrajectories", "q1001_r1"]` | 15.254 ms (5%) | | 500.77 KiB (1%) | 18019 | | `["circuitsim", "mctrajectories", "q101_r1"]` | 174.776 μs (5%) | | 50.53 KiB (1%) | 1818 | | `["circuitsim", "mctrajectories_sumtype", "q1001_r1"]` | 14.631 ms (5%) | | 496 bytes (1%) | 9 | | `["circuitsim", "mctrajectories_sumtype", "q101_r1"]` | 121.636 μs (5%) | | 256 bytes (1%) | 8 | | `["circuitsim", "mctrajectories_union", "q1001_r1"]` | 13.207 ms (5%) | | 496 bytes (1%) | 9 | | `["circuitsim", "mctrajectories_union", "q101_r1"]` | 119.122 μs (5%) | | 256 bytes (1%) | 8 | | `["circuitsim", "pftrajectories", "q1001_r1"]` | 60.433 μs (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q1001_r100"]` | 178.041 μs (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q1001_r10000"]` | 1.101 ms (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q101_r1"]` | 6.071 μs (5%) | | 9.42 KiB (1%) | 201 | | `["circuitsim", "pftrajectories_sumtype", "q1001_r1"]` | 42.509 μs (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r100"]` | 153.976 μs (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r10000"]` | 1.082 ms (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r10000_fastrow"]` | 5.826 ms (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q101_r1"]` | 4.299 μs (5%) | | | | | `["circuitsim", "pftrajectories_union", "q1001_r1"]` | 22.602 μs (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q1001_r100"]` | 134.069 μs (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q1001_r10000"]` | 1.056 ms (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q101_r1"]` | 2.334 μs (5%) | | 96 bytes (1%) | 2 | | `["clifford", "dense", "cnot250_on_dense500_destab"]` | 11.459 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_dense500_stab"]` | 5.831 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_diag500_destab"]` | 1.118 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_diag500_stab"]` | 560.263 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot_on_dense500_destab"]` | 49.442 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_dense500_stab"]` | 23.754 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_diag500_destab"]` | 25.548 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_diag500_stab"]` | 13.455 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "dense500_on_dense500_destab"]` | 11.459 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_dense500_stab"]` | 5.829 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_diag500_destab"]` | 1.118 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_diag500_stab"]` | 560.273 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "symbolic", "cnot250_on_dense500_destab"]` | 1.474 ms (5%) | | | | | `["clifford", "symbolic", "cnot250_on_dense500_stab"]` | 701.477 μs (5%) | | | | | `["clifford", "symbolic", "cnot250_on_diag500_destab"]` | 1.198 ms (5%) | | | | | `["clifford", "symbolic", "cnot250_on_diag500_stab"]` | 584.328 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_dense500_destab"]` | 4.819 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_dense500_stab"]` | 2.364 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_diag500_destab"]` | 4.789 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_diag500_stab"]` | 2.364 μs (5%) | | | | | `["ecc", "evaluate_decoder", "shor_bp_comm"]` | 1.816 ms (5%) | | 1.76 MiB (1%) | 42359 | | `["ecc", "evaluate_decoder", "shor_bp_naivesyn"]` | 4.290 ms (5%) | | 3.64 MiB (1%) | 82335 | | `["ecc", "evaluate_decoder", "shor_bp_shorsyn"]` | 4.737 ms (5%) | | 3.70 MiB (1%) | 82535 | | `["ecc", "evaluate_decoder", "shor_pybp_comm"]` | 24.943 ms (5%) | | 3.97 MiB (1%) | 116084 | | `["ecc", "evaluate_decoder", "shor_pybp_naivesyn"]` | 50.895 ms (5%) | | 7.99 MiB (1%) | 228133 | | `["ecc", "evaluate_decoder", "shor_pybp_shorsyn"]` | 51.197 ms (5%) | | 8.07 MiB (1%) | 229131 | | `["ecc", "evaluate_decoder", "shor_table_comm"]` | 255.797 μs (5%) | | 241.48 KiB (1%) | 4595 | | `["ecc", "evaluate_decoder", "shor_table_naivesyn"]` | 1.089 ms (5%) | | 350.88 KiB (1%) | 5155 | | `["ecc", "evaluate_decoder", "shor_table_shorsyn"]` | 1.521 ms (5%) | | 440.22 KiB (1%) | 6153 | | `["ecc", "evaluate_decoder", "toric8_bp_comm"]` | 726.128 ms (5%) | 12.664 ms | 173.76 MiB (1%) | 1041696 | | `["ecc", "evaluate_decoder", "toric8_bp_naivesyn"]` | 1.455 s (5%) | 31.008 ms | 346.95 MiB (1%) | 2113090 | | `["ecc", "evaluate_decoder", "toric8_bp_shorsyn"]` | 1.484 s (5%) | 28.145 ms | 352.74 MiB (1%) | 2166508 | | `["ecc", "evaluate_decoder", "toric8_pybp_comm"]` | 389.072 ms (5%) | | 7.31 MiB (1%) | 135575 | | `["ecc", "evaluate_decoder", "toric8_pybp_naivesyn"]` | 803.585 ms (5%) | | 16.90 MiB (1%) | 317606 | | `["ecc", "evaluate_decoder", "toric8_pybp_shorsyn"]` | 815.133 ms (5%) | | 19.38 MiB (1%) | 351522 | | `["ecc", "evaluate_decoder", "toric8_pymatch_comm"]` | 4.180 ms (5%) | | 1.95 MiB (1%) | 23180 | | `["ecc", "evaluate_decoder", "toric8_pymatch_naivesyn"]` | 17.063 ms (5%) | | 6.03 MiB (1%) | 92823 | | `["ecc", "evaluate_decoder", "toric8_pymatch_shorsyn"]` | 26.279 ms (5%) | | 8.50 MiB (1%) | 126739 | | `["ecc", "evaluate_decoder", "toric8_table_comm"]` | 2.698 ms (5%) | | 1.64 MiB (1%) | 23086 | | `["ecc", "evaluate_decoder", "toric8_table_naivesyn"]` | 14.815 ms (5%) | | 5.38 MiB (1%) | 92628 | | `["ecc", "evaluate_decoder", "toric8_table_shorsyn"]` | 23.974 ms (5%) | | 7.86 MiB (1%) | 126544 | | `["pauli", "mul", "100"]` | 14.536 ns (5%) | | | | | `["pauli", "mul", "1000"]` | 18.820 ns (5%) | | | | | `["pauli", "mul", "100000"]` | 730.802 ns (5%) | | | | | `["pauli", "mul", "20000000"]` | 187.308 μs (5%) | | | | | `["stabilizer", "canon", "cano500"]` | 3.097 ms (5%) | | | | | `["stabilizer", "canon", "diag_cano500"]` | 604.396 μs (5%) | | | | | `["stabilizer", "canon", "diag_gott500"]` | 4.015 ms (5%) | | 5.19 MiB (1%) | 34521 | | `["stabilizer", "canon", "diag_rref500"]` | 731.682 μs (5%) | | | | | `["stabilizer", "canon", "gott500"]` | 6.535 ms (5%) | | 5.19 MiB (1%) | 34531 | | `["stabilizer", "canon", "md_cano500"]` | 1.589 ms (5%) | | | | | `["stabilizer", "canon", "md_rref500"]` | 1.624 ms (5%) | | | | | `["stabilizer", "canon", "rref500"]` | 3.186 ms (5%) | | | | | `["stabilizer", "project", "destabilizer"]` | 18.204 μs (5%) | | 288 bytes (1%) | 5 | | `["stabilizer", "project", "stabilizer"]` | 8.917 μs (5%) | | 80 bytes (1%) | 2 | | `["stabilizer", "tensor", "diag_pow5_20"]` | 1.186 ms (5%) | | 23.97 MiB (1%) | 34 | | `["stabilizer", "tensor", "pow5_20"]` | 2.517 μs (5%) | | 6.44 KiB (1%) | 31 | | `["stabilizer", "trace", "destabilizer"]` | 31.569 μs (5%) | | 80 bytes (1%) | 2 | | `["stabilizer", "trace", "stabilizer"]` | 24.636 μs (5%) | | 112 bytes (1%) | 3 | ## Benchmark Group List Here's a list of all the benchmark groups executed by this job: - `["circuitsim", "compactification"]` - `["circuitsim", "mctrajectories"]` - `["circuitsim", "mctrajectories_sumtype"]` - `["circuitsim", "mctrajectories_union"]` - `["circuitsim", "pftrajectories"]` - `["circuitsim", "pftrajectories_sumtype"]` - `["circuitsim", "pftrajectories_union"]` - `["clifford", "dense"]` - `["clifford", "symbolic"]` - `["ecc", "evaluate_decoder"]` - `["pauli", "mul"]` - `["stabilizer", "canon"]` - `["stabilizer", "project"]` - `["stabilizer", "tensor"]` - `["stabilizer", "trace"]` ## Julia versioninfo ``` Julia Version 1.12.0-DEV.549 Commit 81cb5371dae (2024-05-17 06:37 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) Ubuntu 22.04.4 LTS uname: Linux 6.5.0-1021-azure #22~22.04.1-Ubuntu SMP Tue Apr 30 16:08:18 UTC 2024 x86_64 x86_64 CPU: AMD EPYC 7763 64-Core Processor: speed user nice sys idle irq #1 0 MHz 2053 s 0 s 142 s 5957 s 0 s #2 0 MHz 2170 s 0 s 184 s 5829 s 0 s #3 0 MHz 2614 s 0 s 180 s 5379 s 0 s #4 0 MHz 2396 s 0 s 172 s 5618 s 0 s Memory: 15.606502532958984 GB (13409.109375 MB free) Uptime: 822.37 sec Load Avg: 1.11 1.07 0.77 WORD_SIZE: 64 LLVM: libLLVM-17.0.6 (ORCJIT, znver3) Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores) ``` --- # Baseline result # Benchmark Report for */home/runner/work/QuantumClifford.jl/QuantumClifford.jl* ## Job Properties * Time of benchmark: 17 May 2024 - 14:5 * Package commit: 44f618 * Julia commit: 81cb53 * Julia command flags: None * Environment variables: None ## Results Below is a table of this job's results, obtained by running the benchmarks. The values listed in the `ID` column have the structure `[parent_group, child_group, ..., key]`, and can be used to index into the BaseBenchmarks suite to retrieve the corresponding benchmarks. The percentages accompanying time and memory values in the below table are noise tolerances. The "true" time/memory value for a given benchmark is expected to fall within this percentage of the reported value. An empty cell means that the value was zero. | ID | time | GC time | memory | allocations | |--------------------------------------------------------------------|----------------:|----------:|----------------:|------------:| | `["circuitsim", "compactification", "compact"]` | 7.050 ms (5%) | | | | | `["circuitsim", "compactification", "no_compact"]` | 7.220 ms (5%) | | 281.25 KiB (1%) | 6000 | | `["circuitsim", "mctrajectories", "q1001_r1"]` | 15.629 ms (5%) | | 500.77 KiB (1%) | 18019 | | `["circuitsim", "mctrajectories", "q101_r1"]` | 174.475 μs (5%) | | 50.53 KiB (1%) | 1818 | | `["circuitsim", "mctrajectories_sumtype", "q1001_r1"]` | 14.793 ms (5%) | | 496 bytes (1%) | 9 | | `["circuitsim", "mctrajectories_sumtype", "q101_r1"]` | 120.444 μs (5%) | | 256 bytes (1%) | 8 | | `["circuitsim", "mctrajectories_union", "q1001_r1"]` | 13.369 ms (5%) | | 496 bytes (1%) | 9 | | `["circuitsim", "mctrajectories_union", "q101_r1"]` | 119.803 μs (5%) | | 256 bytes (1%) | 8 | | `["circuitsim", "pftrajectories", "q1001_r1"]` | 59.521 μs (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q1001_r100"]` | 188.600 μs (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q1001_r10000"]` | 1.154 ms (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q101_r1"]` | 5.971 μs (5%) | | 9.42 KiB (1%) | 201 | | `["circuitsim", "pftrajectories_sumtype", "q1001_r1"]` | 42.680 μs (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r100"]` | 153.636 μs (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r10000"]` | 1.132 ms (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r10000_fastrow"]` | 5.845 ms (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q101_r1"]` | 4.308 μs (5%) | | | | | `["circuitsim", "pftrajectories_union", "q1001_r1"]` | 22.001 μs (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q1001_r100"]` | 136.083 μs (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q1001_r10000"]` | 1.103 ms (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q101_r1"]` | 2.274 μs (5%) | | 96 bytes (1%) | 2 | | `["clifford", "dense", "cnot250_on_dense500_destab"]` | 11.593 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_dense500_stab"]` | 5.854 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_diag500_destab"]` | 1.120 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_diag500_stab"]` | 559.441 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot_on_dense500_destab"]` | 49.281 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_dense500_stab"]` | 22.652 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_diag500_destab"]` | 25.467 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_diag500_stab"]` | 12.804 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "dense500_on_dense500_destab"]` | 11.602 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_dense500_stab"]` | 5.864 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_diag500_destab"]` | 966.759 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_diag500_stab"]` | 559.412 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "symbolic", "cnot250_on_dense500_destab"]` | 1.487 ms (5%) | | | | | `["clifford", "symbolic", "cnot250_on_dense500_stab"]` | 699.603 μs (5%) | | | | | `["clifford", "symbolic", "cnot250_on_diag500_destab"]` | 1.205 ms (5%) | | | | | `["clifford", "symbolic", "cnot250_on_diag500_stab"]` | 585.079 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_dense500_destab"]` | 4.869 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_dense500_stab"]` | 2.364 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_diag500_destab"]` | 4.788 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_diag500_stab"]` | 2.364 μs (5%) | | | | | `["ecc", "evaluate_decoder", "shor_bp_comm"]` | 1.813 ms (5%) | | 1.77 MiB (1%) | 42625 | | `["ecc", "evaluate_decoder", "shor_bp_naivesyn"]` | 4.252 ms (5%) | | 3.62 MiB (1%) | 81873 | | `["ecc", "evaluate_decoder", "shor_bp_shorsyn"]` | 5.005 ms (5%) | | 3.77 MiB (1%) | 84173 | | `["ecc", "evaluate_decoder", "shor_pybp_comm"]` | 25.351 ms (5%) | | 3.97 MiB (1%) | 116084 | | `["ecc", "evaluate_decoder", "shor_pybp_naivesyn"]` | 50.914 ms (5%) | | 7.99 MiB (1%) | 228133 | | `["ecc", "evaluate_decoder", "shor_pybp_shorsyn"]` | 50.966 ms (5%) | | 8.07 MiB (1%) | 229131 | | `["ecc", "evaluate_decoder", "shor_table_comm"]` | 262.689 μs (5%) | | 241.48 KiB (1%) | 4595 | | `["ecc", "evaluate_decoder", "shor_table_naivesyn"]` | 1.086 ms (5%) | | 350.88 KiB (1%) | 5155 | | `["ecc", "evaluate_decoder", "shor_table_shorsyn"]` | 1.510 ms (5%) | | 440.22 KiB (1%) | 6153 | | `["ecc", "evaluate_decoder", "toric8_bp_comm"]` | 690.095 ms (5%) | 14.254 ms | 175.12 MiB (1%) | 1049669 | | `["ecc", "evaluate_decoder", "toric8_bp_naivesyn"]` | 1.396 s (5%) | 25.361 ms | 354.50 MiB (1%) | 2157512 | | `["ecc", "evaluate_decoder", "toric8_bp_shorsyn"]` | 1.398 s (5%) | 31.949 ms | 352.00 MiB (1%) | 2162140 | | `["ecc", "evaluate_decoder", "toric8_pybp_comm"]` | 391.999 ms (5%) | | 7.31 MiB (1%) | 135575 | | `["ecc", "evaluate_decoder", "toric8_pybp_naivesyn"]` | 818.351 ms (5%) | | 16.90 MiB (1%) | 317606 | | `["ecc", "evaluate_decoder", "toric8_pybp_shorsyn"]` | 834.307 ms (5%) | | 19.38 MiB (1%) | 351522 | | `["ecc", "evaluate_decoder", "toric8_pymatch_comm"]` | 4.158 ms (5%) | | 1.95 MiB (1%) | 23180 | | `["ecc", "evaluate_decoder", "toric8_pymatch_naivesyn"]` | 16.986 ms (5%) | | 6.03 MiB (1%) | 92823 | | `["ecc", "evaluate_decoder", "toric8_pymatch_shorsyn"]` | 26.086 ms (5%) | | 8.50 MiB (1%) | 126739 | | `["ecc", "evaluate_decoder", "toric8_table_comm"]` | 2.659 ms (5%) | | 1.64 MiB (1%) | 23086 | | `["ecc", "evaluate_decoder", "toric8_table_naivesyn"]` | 14.709 ms (5%) | | 5.38 MiB (1%) | 92628 | | `["ecc", "evaluate_decoder", "toric8_table_shorsyn"]` | 23.801 ms (5%) | | 7.86 MiB (1%) | 126544 | | `["pauli", "mul", "100"]` | 14.455 ns (5%) | | | | | `["pauli", "mul", "1000"]` | 18.209 ns (5%) | | | | | `["pauli", "mul", "100000"]` | 728.341 ns (5%) | | | | | `["pauli", "mul", "20000000"]` | 170.687 μs (5%) | | | | | `["stabilizer", "canon", "cano500"]` | 3.076 ms (5%) | | | | | `["stabilizer", "canon", "diag_cano500"]` | 603.243 μs (5%) | | | | | `["stabilizer", "canon", "diag_gott500"]` | 4.120 ms (5%) | | 5.19 MiB (1%) | 34521 | | `["stabilizer", "canon", "diag_rref500"]` | 655.049 μs (5%) | | | | | `["stabilizer", "canon", "gott500"]` | 6.536 ms (5%) | | 5.19 MiB (1%) | 34531 | | `["stabilizer", "canon", "md_cano500"]` | 1.547 ms (5%) | | | | | `["stabilizer", "canon", "md_rref500"]` | 1.581 ms (5%) | | | | | `["stabilizer", "canon", "rref500"]` | 3.131 ms (5%) | | | | | `["stabilizer", "project", "destabilizer"]` | 17.973 μs (5%) | | 288 bytes (1%) | 5 | | `["stabilizer", "project", "stabilizer"]` | 8.646 μs (5%) | | 80 bytes (1%) | 2 | | `["stabilizer", "tensor", "diag_pow5_20"]` | 1.287 ms (5%) | | 23.97 MiB (1%) | 34 | | `["stabilizer", "tensor", "pow5_20"]` | 2.488 μs (5%) | | 6.44 KiB (1%) | 31 | | `["stabilizer", "trace", "destabilizer"]` | 31.569 μs (5%) | | 80 bytes (1%) | 2 | | `["stabilizer", "trace", "stabilizer"]` | 24.285 μs (5%) | | 112 bytes (1%) | 3 | ## Benchmark Group List Here's a list of all the benchmark groups executed by this job: - `["circuitsim", "compactification"]` - `["circuitsim", "mctrajectories"]` - `["circuitsim", "mctrajectories_sumtype"]` - `["circuitsim", "mctrajectories_union"]` - `["circuitsim", "pftrajectories"]` - `["circuitsim", "pftrajectories_sumtype"]` - `["circuitsim", "pftrajectories_union"]` - `["clifford", "dense"]` - `["clifford", "symbolic"]` - `["ecc", "evaluate_decoder"]` - `["pauli", "mul"]` - `["stabilizer", "canon"]` - `["stabilizer", "project"]` - `["stabilizer", "tensor"]` - `["stabilizer", "trace"]` ## Julia versioninfo ``` Julia Version 1.12.0-DEV.549 Commit 81cb5371dae (2024-05-17 06:37 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) Ubuntu 22.04.4 LTS uname: Linux 6.5.0-1021-azure #22~22.04.1-Ubuntu SMP Tue Apr 30 16:08:18 UTC 2024 x86_64 x86_64 CPU: AMD EPYC 7763 64-Core Processor: speed user nice sys idle irq #1 0 MHz 3308 s 0 s 196 s 9063 s 0 s #2 0 MHz 3540 s 0 s 242 s 8817 s 0 s #3 0 MHz 3433 s 0 s 230 s 8926 s 0 s #4 0 MHz 3392 s 0 s 218 s 8992 s 0 s Memory: 15.606502532958984 GB (13338.62109375 MB free) Uptime: 1264.77 sec Load Avg: 1.01 1.03 0.89 WORD_SIZE: 64 LLVM: libLLVM-17.0.6 (ORCJIT, znver3) Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores) ``` --- # Runtime information | Runtime Info | | |:--|:--| | BLAS #threads | 2 | | `BLAS.vendor()` | `lbt` | | `Sys.CPU_THREADS` | 4 | `lscpu` output: Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 48 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Vendor ID: AuthenticAMD Model name: AMD EPYC 7763 64-Core Processor CPU family: 25 Model: 1 Thread(s) per core: 2 Core(s) per socket: 2 Socket(s): 1 Stepping: 1 BogoMIPS: 4890.86 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext invpcid_single vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr rdpru arat npt nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vmload umip vaes vpclmulqdq rdpid fsrm Virtualization: AMD-V Hypervisor vendor: Microsoft Virtualization type: full L1d cache: 64 KiB (2 instances) L1i cache: 64 KiB (2 instances) L2 cache: 1 MiB (2 instances) L3 cache: 32 MiB (1 instance) NUMA node(s): 1 NUMA node0 CPU(s): 0-3 Vulnerability Gather data sampling: Not affected Vulnerability Itlb multihit: Not affected Vulnerability L1tf: Not affected Vulnerability Mds: Not affected Vulnerability Meltdown: Not affected Vulnerability Mmio stale data: Not affected Vulnerability Retbleed: Not affected Vulnerability Spec rstack overflow: Vulnerable: Safe RET, no microcode Vulnerability Spec store bypass: Vulnerable Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Vulnerability Spectre v2: Mitigation; Retpolines; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected Vulnerability Srbds: Not affected Vulnerability Tsx async abort: Not affected | Cpu Property | Value | |:------------------ |:---------------------------------------------------------- | | Brand | AMD EPYC 7763 64-Core Processor | | Vendor | :AMD | | Architecture | :Unknown | | Model | Family: 0xaf, Model: 0x01, Stepping: 0x01, Type: 0x00 | | Cores | 16 physical cores, 16 logical cores (on executing CPU) | | | No Hyperthreading hardware capability detected | | Clock Frequencies | Not supported by CPU | | Data Cache | Level 1:3 : (32, 512, 32768) kbytes | | | 64 byte cache line size | | Address Size | 48 bits virtual, 48 bits physical | | SIMD | 256 bit = 32 byte max. SIMD vector size | | Time Stamp Counter | TSC is accessible via `rdtsc` | | | TSC runs at constant rate (invariant from clock frequency) | | Perf. Monitoring | Performance Monitoring Counters (PMC) are not supported | | Hypervisor | Yes, Microsoft |
Benchmark Result # Judge result # Benchmark Report for */home/runner/work/QuantumClifford.jl/QuantumClifford.jl* ## Job Properties * Time of benchmarks: - Target: 17 May 2024 - 17:08 - Baseline: 17 May 2024 - 17:15 * Package commits: - Target: 8304f4 - Baseline: 44f618 * Julia commits: - Target: 81cb53 - Baseline: 81cb53 * Julia command flags: - Target: None - Baseline: None * Environment variables: - Target: None - Baseline: None ## Results A ratio greater than `1.0` denotes a possible regression (marked with :x:), while a ratio less than `1.0` denotes a possible improvement (marked with :white_check_mark:). Only significant results - results that indicate possible regressions or improvements - are shown below (thus, an empty table means that all benchmark results remained invariant between builds). | ID | time ratio | memory ratio | |--------------------------------------------------------------------|------------------------------|--------------| | `["circuitsim", "pftrajectories_sumtype", "q1001_r1"]` | 0.90 (5%) :white_check_mark: | 1.00 (1%) | | `["circuitsim", "pftrajectories_sumtype", "q101_r1"]` | 0.91 (5%) :white_check_mark: | 1.00 (1%) | | `["clifford", "dense", "cnot250_on_diag500_destab"]` | 1.15 (5%) :x: | 1.00 (1%) | | `["clifford", "dense", "dense500_on_diag500_destab"]` | 0.87 (5%) :white_check_mark: | 1.00 (1%) | | `["ecc", "evaluate_decoder", "shor_bp_shorsyn"]` | 0.95 (5%) :white_check_mark: | 1.00 (1%) | | `["stabilizer", "canon", "diag_cano500"]` | 0.95 (5%) :white_check_mark: | 1.00 (1%) | | `["stabilizer", "canon", "diag_rref500"]` | 0.92 (5%) :white_check_mark: | 1.00 (1%) | | `["stabilizer", "tensor", "diag_pow5_20"]` | 0.89 (5%) :white_check_mark: | 1.00 (1%) | ## Benchmark Group List Here's a list of all the benchmark groups executed by this job: - `["circuitsim", "compactification"]` - `["circuitsim", "mctrajectories"]` - `["circuitsim", "mctrajectories_sumtype"]` - `["circuitsim", "mctrajectories_union"]` - `["circuitsim", "pftrajectories"]` - `["circuitsim", "pftrajectories_sumtype"]` - `["circuitsim", "pftrajectories_union"]` - `["clifford", "dense"]` - `["clifford", "symbolic"]` - `["ecc", "evaluate_decoder"]` - `["pauli", "mul"]` - `["stabilizer", "canon"]` - `["stabilizer", "project"]` - `["stabilizer", "tensor"]` - `["stabilizer", "trace"]` ## Julia versioninfo ### Target ``` Julia Version 1.12.0-DEV.549 Commit 81cb5371dae (2024-05-17 06:37 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) Ubuntu 22.04.4 LTS uname: Linux 6.5.0-1021-azure #22~22.04.1-Ubuntu SMP Tue Apr 30 16:08:18 UTC 2024 x86_64 x86_64 CPU: AMD EPYC 7763 64-Core Processor: speed user nice sys idle irq #1 0 MHz 2562 s 0 s 160 s 6710 s 0 s #2 0 MHz 2185 s 0 s 161 s 7102 s 0 s #3 0 MHz 2676 s 0 s 165 s 6607 s 0 s #4 0 MHz 1880 s 0 s 160 s 7413 s 0 s Memory: 15.606502532958984 GB (13324.83984375 MB free) Uptime: 949.22 sec Load Avg: 1.0 1.0 0.69 WORD_SIZE: 64 LLVM: libLLVM-17.0.6 (ORCJIT, znver3) Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores) ``` ### Baseline ``` Julia Version 1.12.0-DEV.549 Commit 81cb5371dae (2024-05-17 06:37 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) Ubuntu 22.04.4 LTS uname: Linux 6.5.0-1021-azure #22~22.04.1-Ubuntu SMP Tue Apr 30 16:08:18 UTC 2024 x86_64 x86_64 CPU: AMD EPYC 7763 64-Core Processor: speed user nice sys idle irq #1 0 MHz 3455 s 0 s 200 s 10170 s 0 s #2 0 MHz 2975 s 0 s 201 s 10665 s 0 s #3 0 MHz 3899 s 0 s 215 s 9729 s 0 s #4 0 MHz 3397 s 0 s 206 s 10246 s 0 s Memory: 15.606502532958984 GB (13312.57421875 MB free) Uptime: 1389.56 sec Load Avg: 1.02 1.02 0.84 WORD_SIZE: 64 LLVM: libLLVM-17.0.6 (ORCJIT, znver3) Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores) ``` --- # Target result # Benchmark Report for */home/runner/work/QuantumClifford.jl/QuantumClifford.jl* ## Job Properties * Time of benchmark: 17 May 2024 - 17:8 * Package commit: 8304f4 * Julia commit: 81cb53 * Julia command flags: None * Environment variables: None ## Results Below is a table of this job's results, obtained by running the benchmarks. The values listed in the `ID` column have the structure `[parent_group, child_group, ..., key]`, and can be used to index into the BaseBenchmarks suite to retrieve the corresponding benchmarks. The percentages accompanying time and memory values in the below table are noise tolerances. The "true" time/memory value for a given benchmark is expected to fall within this percentage of the reported value. An empty cell means that the value was zero. | ID | time | GC time | memory | allocations | |--------------------------------------------------------------------|----------------:|----------:|----------------:|------------:| | `["circuitsim", "compactification", "compact"]` | 6.934 ms (5%) | | | | | `["circuitsim", "compactification", "no_compact"]` | 7.210 ms (5%) | | 281.25 KiB (1%) | 6000 | | `["circuitsim", "mctrajectories", "q1001_r1"]` | 15.312 ms (5%) | | 500.77 KiB (1%) | 18019 | | `["circuitsim", "mctrajectories", "q101_r1"]` | 174.315 μs (5%) | | 50.53 KiB (1%) | 1818 | | `["circuitsim", "mctrajectories_sumtype", "q1001_r1"]` | 13.377 ms (5%) | | 496 bytes (1%) | 9 | | `["circuitsim", "mctrajectories_sumtype", "q101_r1"]` | 121.466 μs (5%) | | 256 bytes (1%) | 8 | | `["circuitsim", "mctrajectories_union", "q1001_r1"]` | 13.172 ms (5%) | | 496 bytes (1%) | 9 | | `["circuitsim", "mctrajectories_union", "q101_r1"]` | 120.253 μs (5%) | | 256 bytes (1%) | 8 | | `["circuitsim", "pftrajectories", "q1001_r1"]` | 59.841 μs (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q1001_r100"]` | 171.318 μs (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q1001_r10000"]` | 1.099 ms (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q101_r1"]` | 6.001 μs (5%) | | 9.42 KiB (1%) | 201 | | `["circuitsim", "pftrajectories_sumtype", "q1001_r1"]` | 42.569 μs (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r100"]` | 152.132 μs (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r10000"]` | 1.088 ms (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r10000_fastrow"]` | 5.826 ms (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q101_r1"]` | 4.328 μs (5%) | | | | | `["circuitsim", "pftrajectories_union", "q1001_r1"]` | 22.602 μs (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q1001_r100"]` | 133.658 μs (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q1001_r10000"]` | 1.056 ms (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q101_r1"]` | 2.344 μs (5%) | | 96 bytes (1%) | 2 | | `["clifford", "dense", "cnot250_on_dense500_destab"]` | 11.364 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_dense500_stab"]` | 5.806 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_diag500_destab"]` | 1.119 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_diag500_stab"]` | 560.020 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot_on_dense500_destab"]` | 48.941 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_dense500_stab"]` | 22.673 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_diag500_destab"]` | 25.577 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_diag500_stab"]` | 12.794 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "dense500_on_dense500_destab"]` | 11.354 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_dense500_stab"]` | 5.800 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_diag500_destab"]` | 966.756 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_diag500_stab"]` | 559.910 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "symbolic", "cnot250_on_dense500_destab"]` | 1.477 ms (5%) | | | | | `["clifford", "symbolic", "cnot250_on_dense500_stab"]` | 696.946 μs (5%) | | | | | `["clifford", "symbolic", "cnot250_on_diag500_destab"]` | 1.199 ms (5%) | | | | | `["clifford", "symbolic", "cnot250_on_diag500_stab"]` | 579.386 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_dense500_destab"]` | 4.849 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_dense500_stab"]` | 2.364 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_diag500_destab"]` | 4.799 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_diag500_stab"]` | 2.354 μs (5%) | | | | | `["ecc", "evaluate_decoder", "shor_bp_comm"]` | 1.807 ms (5%) | | 1.77 MiB (1%) | 42681 | | `["ecc", "evaluate_decoder", "shor_bp_naivesyn"]` | 4.326 ms (5%) | | 3.64 MiB (1%) | 82279 | | `["ecc", "evaluate_decoder", "shor_bp_shorsyn"]` | 4.753 ms (5%) | | 3.73 MiB (1%) | 83249 | | `["ecc", "evaluate_decoder", "shor_pybp_comm"]` | 24.931 ms (5%) | | 3.97 MiB (1%) | 116084 | | `["ecc", "evaluate_decoder", "shor_pybp_naivesyn"]` | 50.623 ms (5%) | | 7.99 MiB (1%) | 228133 | | `["ecc", "evaluate_decoder", "shor_pybp_shorsyn"]` | 51.126 ms (5%) | | 8.07 MiB (1%) | 229131 | | `["ecc", "evaluate_decoder", "shor_table_comm"]` | 256.717 μs (5%) | | 241.48 KiB (1%) | 4595 | | `["ecc", "evaluate_decoder", "shor_table_naivesyn"]` | 1.104 ms (5%) | | 350.88 KiB (1%) | 5155 | | `["ecc", "evaluate_decoder", "shor_table_shorsyn"]` | 1.529 ms (5%) | | 440.22 KiB (1%) | 6153 | | `["ecc", "evaluate_decoder", "toric8_bp_comm"]` | 674.378 ms (5%) | 12.482 ms | 170.58 MiB (1%) | 1023006 | | `["ecc", "evaluate_decoder", "toric8_bp_naivesyn"]` | 1.414 s (5%) | 31.355 ms | 354.05 MiB (1%) | 2154831 | | `["ecc", "evaluate_decoder", "toric8_bp_shorsyn"]` | 1.402 s (5%) | 32.996 ms | 352.16 MiB (1%) | 2163071 | | `["ecc", "evaluate_decoder", "toric8_pybp_comm"]` | 390.968 ms (5%) | | 7.31 MiB (1%) | 135575 | | `["ecc", "evaluate_decoder", "toric8_pybp_naivesyn"]` | 812.617 ms (5%) | | 16.90 MiB (1%) | 317606 | | `["ecc", "evaluate_decoder", "toric8_pybp_shorsyn"]` | 809.058 ms (5%) | | 19.38 MiB (1%) | 351522 | | `["ecc", "evaluate_decoder", "toric8_pymatch_comm"]` | 4.192 ms (5%) | | 1.95 MiB (1%) | 23180 | | `["ecc", "evaluate_decoder", "toric8_pymatch_naivesyn"]` | 17.131 ms (5%) | | 6.03 MiB (1%) | 92823 | | `["ecc", "evaluate_decoder", "toric8_pymatch_shorsyn"]` | 26.219 ms (5%) | | 8.50 MiB (1%) | 126739 | | `["ecc", "evaluate_decoder", "toric8_table_comm"]` | 2.647 ms (5%) | | 1.64 MiB (1%) | 23086 | | `["ecc", "evaluate_decoder", "toric8_table_naivesyn"]` | 14.957 ms (5%) | | 5.38 MiB (1%) | 92628 | | `["ecc", "evaluate_decoder", "toric8_table_shorsyn"]` | 24.115 ms (5%) | | 7.86 MiB (1%) | 126544 | | `["pauli", "mul", "100"]` | 14.194 ns (5%) | | | | | `["pauli", "mul", "1000"]` | 17.899 ns (5%) | | | | | `["pauli", "mul", "100000"]` | 715.976 ns (5%) | | | | | `["pauli", "mul", "20000000"]` | 177.119 μs (5%) | | | | | `["stabilizer", "canon", "cano500"]` | 3.060 ms (5%) | | | | | `["stabilizer", "canon", "diag_cano500"]` | 604.673 μs (5%) | | | | | `["stabilizer", "canon", "diag_gott500"]` | 4.187 ms (5%) | | 5.19 MiB (1%) | 34521 | | `["stabilizer", "canon", "diag_rref500"]` | 674.333 μs (5%) | | | | | `["stabilizer", "canon", "gott500"]` | 6.611 ms (5%) | | 5.19 MiB (1%) | 34531 | | `["stabilizer", "canon", "md_cano500"]` | 1.539 ms (5%) | | | | | `["stabilizer", "canon", "md_rref500"]` | 1.581 ms (5%) | | | | | `["stabilizer", "canon", "rref500"]` | 3.137 ms (5%) | | | | | `["stabilizer", "project", "destabilizer"]` | 17.532 μs (5%) | | 288 bytes (1%) | 5 | | `["stabilizer", "project", "stabilizer"]` | 8.926 μs (5%) | | 80 bytes (1%) | 2 | | `["stabilizer", "tensor", "diag_pow5_20"]` | 1.214 ms (5%) | | 23.97 MiB (1%) | 34 | | `["stabilizer", "tensor", "pow5_20"]` | 2.451 μs (5%) | | 6.44 KiB (1%) | 31 | | `["stabilizer", "trace", "destabilizer"]` | 31.138 μs (5%) | | 80 bytes (1%) | 2 | | `["stabilizer", "trace", "stabilizer"]` | 24.466 μs (5%) | | 112 bytes (1%) | 3 | ## Benchmark Group List Here's a list of all the benchmark groups executed by this job: - `["circuitsim", "compactification"]` - `["circuitsim", "mctrajectories"]` - `["circuitsim", "mctrajectories_sumtype"]` - `["circuitsim", "mctrajectories_union"]` - `["circuitsim", "pftrajectories"]` - `["circuitsim", "pftrajectories_sumtype"]` - `["circuitsim", "pftrajectories_union"]` - `["clifford", "dense"]` - `["clifford", "symbolic"]` - `["ecc", "evaluate_decoder"]` - `["pauli", "mul"]` - `["stabilizer", "canon"]` - `["stabilizer", "project"]` - `["stabilizer", "tensor"]` - `["stabilizer", "trace"]` ## Julia versioninfo ``` Julia Version 1.12.0-DEV.549 Commit 81cb5371dae (2024-05-17 06:37 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) Ubuntu 22.04.4 LTS uname: Linux 6.5.0-1021-azure #22~22.04.1-Ubuntu SMP Tue Apr 30 16:08:18 UTC 2024 x86_64 x86_64 CPU: AMD EPYC 7763 64-Core Processor: speed user nice sys idle irq #1 0 MHz 2562 s 0 s 160 s 6710 s 0 s #2 0 MHz 2185 s 0 s 161 s 7102 s 0 s #3 0 MHz 2676 s 0 s 165 s 6607 s 0 s #4 0 MHz 1880 s 0 s 160 s 7413 s 0 s Memory: 15.606502532958984 GB (13324.83984375 MB free) Uptime: 949.22 sec Load Avg: 1.0 1.0 0.69 WORD_SIZE: 64 LLVM: libLLVM-17.0.6 (ORCJIT, znver3) Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores) ``` --- # Baseline result # Benchmark Report for */home/runner/work/QuantumClifford.jl/QuantumClifford.jl* ## Job Properties * Time of benchmark: 17 May 2024 - 17:15 * Package commit: 44f618 * Julia commit: 81cb53 * Julia command flags: None * Environment variables: None ## Results Below is a table of this job's results, obtained by running the benchmarks. The values listed in the `ID` column have the structure `[parent_group, child_group, ..., key]`, and can be used to index into the BaseBenchmarks suite to retrieve the corresponding benchmarks. The percentages accompanying time and memory values in the below table are noise tolerances. The "true" time/memory value for a given benchmark is expected to fall within this percentage of the reported value. An empty cell means that the value was zero. | ID | time | GC time | memory | allocations | |--------------------------------------------------------------------|----------------:|----------:|----------------:|------------:| | `["circuitsim", "compactification", "compact"]` | 7.051 ms (5%) | | | | | `["circuitsim", "compactification", "no_compact"]` | 7.167 ms (5%) | | 281.25 KiB (1%) | 6000 | | `["circuitsim", "mctrajectories", "q1001_r1"]` | 15.095 ms (5%) | | 500.77 KiB (1%) | 18019 | | `["circuitsim", "mctrajectories", "q101_r1"]` | 173.372 μs (5%) | | 50.53 KiB (1%) | 1818 | | `["circuitsim", "mctrajectories_sumtype", "q1001_r1"]` | 13.451 ms (5%) | | 496 bytes (1%) | 9 | | `["circuitsim", "mctrajectories_sumtype", "q101_r1"]` | 121.977 μs (5%) | | 256 bytes (1%) | 8 | | `["circuitsim", "mctrajectories_union", "q1001_r1"]` | 13.364 ms (5%) | | 496 bytes (1%) | 9 | | `["circuitsim", "mctrajectories_union", "q101_r1"]` | 120.605 μs (5%) | | 256 bytes (1%) | 8 | | `["circuitsim", "pftrajectories", "q1001_r1"]` | 59.581 μs (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q1001_r100"]` | 175.746 μs (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q1001_r10000"]` | 1.142 ms (5%) | | 93.80 KiB (1%) | 2001 | | `["circuitsim", "pftrajectories", "q101_r1"]` | 5.971 μs (5%) | | 9.42 KiB (1%) | 201 | | `["circuitsim", "pftrajectories_sumtype", "q1001_r1"]` | 47.459 μs (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r100"]` | 156.241 μs (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r10000"]` | 1.130 ms (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q1001_r10000_fastrow"]` | 5.872 ms (5%) | | | | | `["circuitsim", "pftrajectories_sumtype", "q101_r1"]` | 4.768 μs (5%) | | | | | `["circuitsim", "pftrajectories_union", "q1001_r1"]` | 22.602 μs (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q1001_r100"]` | 137.375 μs (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q1001_r10000"]` | 1.101 ms (5%) | | 96 bytes (1%) | 2 | | `["circuitsim", "pftrajectories_union", "q101_r1"]` | 2.344 μs (5%) | | 96 bytes (1%) | 2 | | `["clifford", "dense", "cnot250_on_dense500_destab"]` | 11.534 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_dense500_stab"]` | 5.862 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_diag500_destab"]` | 974.632 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot250_on_diag500_stab"]` | 558.929 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "cnot_on_dense500_destab"]` | 49.392 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_dense500_stab"]` | 22.872 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_diag500_destab"]` | 25.378 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "cnot_on_diag500_stab"]` | 12.974 μs (5%) | | 368 bytes (1%) | 10 | | `["clifford", "dense", "dense500_on_dense500_destab"]` | 11.578 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_dense500_stab"]` | 5.878 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_diag500_destab"]` | 1.118 ms (5%) | | 512 bytes (1%) | 8 | | `["clifford", "dense", "dense500_on_diag500_stab"]` | 558.928 μs (5%) | | 512 bytes (1%) | 8 | | `["clifford", "symbolic", "cnot250_on_dense500_destab"]` | 1.474 ms (5%) | | | | | `["clifford", "symbolic", "cnot250_on_dense500_stab"]` | 700.201 μs (5%) | | | | | `["clifford", "symbolic", "cnot250_on_diag500_destab"]` | 1.197 ms (5%) | | | | | `["clifford", "symbolic", "cnot250_on_diag500_stab"]` | 584.686 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_dense500_destab"]` | 4.849 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_dense500_stab"]` | 2.364 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_diag500_destab"]` | 4.799 μs (5%) | | | | | `["clifford", "symbolic", "cnot_on_diag500_stab"]` | 2.374 μs (5%) | | | | | `["ecc", "evaluate_decoder", "shor_bp_comm"]` | 1.820 ms (5%) | | 1.78 MiB (1%) | 42737 | | `["ecc", "evaluate_decoder", "shor_bp_naivesyn"]` | 4.327 ms (5%) | | 3.61 MiB (1%) | 81635 | | `["ecc", "evaluate_decoder", "shor_bp_shorsyn"]` | 5.021 ms (5%) | | 3.74 MiB (1%) | 83599 | | `["ecc", "evaluate_decoder", "shor_pybp_comm"]` | 24.889 ms (5%) | | 3.97 MiB (1%) | 116084 | | `["ecc", "evaluate_decoder", "shor_pybp_naivesyn"]` | 51.069 ms (5%) | | 7.99 MiB (1%) | 228133 | | `["ecc", "evaluate_decoder", "shor_pybp_shorsyn"]` | 50.988 ms (5%) | | 8.07 MiB (1%) | 229131 | | `["ecc", "evaluate_decoder", "shor_table_comm"]` | 255.876 μs (5%) | | 241.48 KiB (1%) | 4595 | | `["ecc", "evaluate_decoder", "shor_table_naivesyn"]` | 1.092 ms (5%) | | 350.88 KiB (1%) | 5155 | | `["ecc", "evaluate_decoder", "shor_table_shorsyn"]` | 1.514 ms (5%) | | 440.22 KiB (1%) | 6153 | | `["ecc", "evaluate_decoder", "toric8_bp_comm"]` | 690.748 ms (5%) | 10.634 ms | 172.25 MiB (1%) | 1032799 | | `["ecc", "evaluate_decoder", "toric8_bp_naivesyn"]` | 1.382 s (5%) | 30.352 ms | 351.03 MiB (1%) | 2137100 | | `["ecc", "evaluate_decoder", "toric8_bp_shorsyn"]` | 1.389 s (5%) | 29.098 ms | 353.50 MiB (1%) | 2170988 | | `["ecc", "evaluate_decoder", "toric8_pybp_comm"]` | 396.461 ms (5%) | | 7.31 MiB (1%) | 135575 | | `["ecc", "evaluate_decoder", "toric8_pybp_naivesyn"]` | 804.491 ms (5%) | | 16.90 MiB (1%) | 317606 | | `["ecc", "evaluate_decoder", "toric8_pybp_shorsyn"]` | 814.572 ms (5%) | | 19.38 MiB (1%) | 351522 | | `["ecc", "evaluate_decoder", "toric8_pymatch_comm"]` | 4.179 ms (5%) | | 1.95 MiB (1%) | 23180 | | `["ecc", "evaluate_decoder", "toric8_pymatch_naivesyn"]` | 16.901 ms (5%) | | 6.03 MiB (1%) | 92823 | | `["ecc", "evaluate_decoder", "toric8_pymatch_shorsyn"]` | 25.956 ms (5%) | | 8.50 MiB (1%) | 126739 | | `["ecc", "evaluate_decoder", "toric8_table_comm"]` | 2.662 ms (5%) | | 1.64 MiB (1%) | 23086 | | `["ecc", "evaluate_decoder", "toric8_table_naivesyn"]` | 14.704 ms (5%) | | 5.38 MiB (1%) | 92628 | | `["ecc", "evaluate_decoder", "toric8_table_shorsyn"]` | 23.795 ms (5%) | | 7.86 MiB (1%) | 126544 | | `["pauli", "mul", "100"]` | 14.515 ns (5%) | | | | | `["pauli", "mul", "1000"]` | 18.822 ns (5%) | | | | | `["pauli", "mul", "100000"]` | 725.677 ns (5%) | | | | | `["pauli", "mul", "20000000"]` | 181.588 μs (5%) | | | | | `["stabilizer", "canon", "cano500"]` | 3.089 ms (5%) | | | | | `["stabilizer", "canon", "diag_cano500"]` | 637.034 μs (5%) | | | | | `["stabilizer", "canon", "diag_gott500"]` | 4.068 ms (5%) | | 5.19 MiB (1%) | 34521 | | `["stabilizer", "canon", "diag_rref500"]` | 731.460 μs (5%) | | | | | `["stabilizer", "canon", "gott500"]` | 6.480 ms (5%) | | 5.19 MiB (1%) | 34531 | | `["stabilizer", "canon", "md_cano500"]` | 1.617 ms (5%) | | | | | `["stabilizer", "canon", "md_rref500"]` | 1.556 ms (5%) | | | | | `["stabilizer", "canon", "rref500"]` | 3.151 ms (5%) | | | | | `["stabilizer", "project", "destabilizer"]` | 18.274 μs (5%) | | 288 bytes (1%) | 5 | | `["stabilizer", "project", "stabilizer"]` | 8.666 μs (5%) | | 80 bytes (1%) | 2 | | `["stabilizer", "tensor", "diag_pow5_20"]` | 1.367 ms (5%) | | 23.97 MiB (1%) | 34 | | `["stabilizer", "tensor", "pow5_20"]` | 2.534 μs (5%) | | 6.44 KiB (1%) | 31 | | `["stabilizer", "trace", "destabilizer"]` | 32.200 μs (5%) | | 80 bytes (1%) | 2 | | `["stabilizer", "trace", "stabilizer"]` | 24.696 μs (5%) | | 112 bytes (1%) | 3 | ## Benchmark Group List Here's a list of all the benchmark groups executed by this job: - `["circuitsim", "compactification"]` - `["circuitsim", "mctrajectories"]` - `["circuitsim", "mctrajectories_sumtype"]` - `["circuitsim", "mctrajectories_union"]` - `["circuitsim", "pftrajectories"]` - `["circuitsim", "pftrajectories_sumtype"]` - `["circuitsim", "pftrajectories_union"]` - `["clifford", "dense"]` - `["clifford", "symbolic"]` - `["ecc", "evaluate_decoder"]` - `["pauli", "mul"]` - `["stabilizer", "canon"]` - `["stabilizer", "project"]` - `["stabilizer", "tensor"]` - `["stabilizer", "trace"]` ## Julia versioninfo ``` Julia Version 1.12.0-DEV.549 Commit 81cb5371dae (2024-05-17 06:37 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) Ubuntu 22.04.4 LTS uname: Linux 6.5.0-1021-azure #22~22.04.1-Ubuntu SMP Tue Apr 30 16:08:18 UTC 2024 x86_64 x86_64 CPU: AMD EPYC 7763 64-Core Processor: speed user nice sys idle irq #1 0 MHz 3455 s 0 s 200 s 10170 s 0 s #2 0 MHz 2975 s 0 s 201 s 10665 s 0 s #3 0 MHz 3899 s 0 s 215 s 9729 s 0 s #4 0 MHz 3397 s 0 s 206 s 10246 s 0 s Memory: 15.606502532958984 GB (13312.57421875 MB free) Uptime: 1389.56 sec Load Avg: 1.02 1.02 0.84 WORD_SIZE: 64 LLVM: libLLVM-17.0.6 (ORCJIT, znver3) Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores) ``` --- # Runtime information | Runtime Info | | |:--|:--| | BLAS #threads | 2 | | `BLAS.vendor()` | `lbt` | | `Sys.CPU_THREADS` | 4 | `lscpu` output: Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 48 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Vendor ID: AuthenticAMD Model name: AMD EPYC 7763 64-Core Processor CPU family: 25 Model: 1 Thread(s) per core: 2 Core(s) per socket: 2 Socket(s): 1 Stepping: 1 BogoMIPS: 4890.84 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext invpcid_single vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr rdpru arat npt nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vmload umip vaes vpclmulqdq rdpid fsrm Virtualization: AMD-V Hypervisor vendor: Microsoft Virtualization type: full L1d cache: 64 KiB (2 instances) L1i cache: 64 KiB (2 instances) L2 cache: 1 MiB (2 instances) L3 cache: 32 MiB (1 instance) NUMA node(s): 1 NUMA node0 CPU(s): 0-3 Vulnerability Gather data sampling: Not affected Vulnerability Itlb multihit: Not affected Vulnerability L1tf: Not affected Vulnerability Mds: Not affected Vulnerability Meltdown: Not affected Vulnerability Mmio stale data: Not affected Vulnerability Retbleed: Not affected Vulnerability Spec rstack overflow: Vulnerable: Safe RET, no microcode Vulnerability Spec store bypass: Vulnerable Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Vulnerability Spectre v2: Mitigation; Retpolines; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected Vulnerability Srbds: Not affected Vulnerability Tsx async abort: Not affected | Cpu Property | Value | |:------------------ |:---------------------------------------------------------- | | Brand | AMD EPYC 7763 64-Core Processor | | Vendor | :AMD | | Architecture | :Unknown | | Model | Family: 0xaf, Model: 0x01, Stepping: 0x01, Type: 0x00 | | Cores | 16 physical cores, 16 logical cores (on executing CPU) | | | No Hyperthreading hardware capability detected | | Clock Frequencies | Not supported by CPU | | Data Cache | Level 1:3 : (32, 512, 32768) kbytes | | | 64 byte cache line size | | Address Size | 48 bits virtual, 48 bits physical | | SIMD | 256 bit = 32 byte max. SIMD vector size | | Time Stamp Counter | TSC is accessible via `rdtsc` | | | TSC runs at constant rate (invariant from clock frequency) | | Perf. Monitoring | Performance Monitoring Counters (PMC) are not supported | | Hypervisor | Yes, Microsoft |
codecov[bot] commented 1 month ago

Codecov Report

Attention: Patch coverage is 88.09524% with 5 lines in your changes missing coverage. Please review.

Project coverage is 82.95%. Comparing base (dddaedb) to head (5cd26c6).

Files Patch % Lines
src/ecc/codes/classical/golay.jl 88.09% 5 Missing :warning:
Additional details and impacted files ```diff @@ Coverage Diff @@ ## master #276 +/- ## ========================================== + Coverage 82.85% 82.95% +0.10% ========================================== Files 60 61 +1 Lines 3971 4013 +42 ========================================== + Hits 3290 3329 +39 - Misses 681 684 +3 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

Fe-r-oz commented 1 week ago

Kindly please review these short PRs @Krastanov 🙏🏼. The sequence of review of PRs can be 277, 276, 254. Thank you 🙏🏼

Fe-r-oz commented 1 week ago

Should I add [[23, 1, 7]] quantum Golay code here as well? It will take max 20 lines. This code is self-dual, perfect CSS code.

Applications of this code: 1) Magic State Distillation 2) Implement all the Clifford Gates transversally

Except from the paper

""" The paper describes that the code is self-dual, and the X and Z stabilizer generators can both be given by the following eleven 23-character strings:

. 1 . . 1 . . 1 1 1 1 1 . . . . . . . . . . 1
1 . . 1 . . 1 1 1 1 1 . . . . . . . . . . 1 .
. 1 1 . 1 1 1 . . . 1 1 . . . . . . . . 1 . .
1 1 . 1 1 1 . . . 1 1 . . . . . . . . 1 . . .
1 1 1 1 . . . 1 . . 1 1 . . . . . . 1 . . . .
1 . 1 . 1 . 1 1 1 . . 1 . . . . . 1 . . . . .
. . . 1 1 1 1 . 1 1 . 1 . . . . 1 . . . . . .
. . 1 1 1 1 . 1 1 . 1 . . . . 1 . . . . . . .
. 1 1 1 1 . 1 1 . 1 . . . . 1 . . . . . . . .
1 1 1 1 . 1 1 . 1 . . . . 1 . . . . . . . . .
1 . 1 . . 1 . . 1 1 1 1 1 . . . . . . . . . .

Here, the 1s in a row either all indicate Z operators or all indicate X operators, and dots indicate I operators. """

We can go with the first one as it take 65 gates which is least expensive. The paper implements them with 57 CNOTs.

parity_checks(c::QuantumGolay) = S"X_X__X__XXXXX__________
                                   XXXX_XX_X____X_________
                                   _XXXX_XX_X____X________
                                   __XXXX_XX_X____X_______
                                   ___XXXX_XX_X____X______
                                   Z_Z_Z_ZZZ__Z_____Z_____
                                   ZZZZ___Z__ZZ______Z____
                                   ZZ_ZZZ___ZZ________Z___
                                   _ZZ_ZZZ___ZZ________Z__
                                   Z__Z__ZZZZZ__________Z_
                                   _Z__Z__ZZZZZ__________Z"

julia> naive_encoding_circuit(s8)
65-element Vector{QuantumClifford.AbstractOperation}:
 sCNOT(12,6)
 sCNOT(12,7)
 sCNOT(12,11)
 sCNOT(18,6)
 sCNOT(18,8)
 sCNOT(18,11)
 sCNOT(19,8)
 sCNOT(19,9)
 sCNOT(20,6)
 sCNOT(20,8)
 sCNOT(20,9)
 sCNOT(20,10)
 sCNOT(20,11)
 sCNOT(21,8)
 sCNOT(21,9)
 sCNOT(21,10)
 sCNOT(21,11)
 ⋮
 sZCX(3,17)
 sHadamard(4)
 sZCX(4,6)
 sZCX(4,9)
 sZCX(4,12)
 sZCX(4,13)
 sZCX(4,14)
 sZCX(4,15)
 sZCX(4,16)
 sHadamard(5)
 sZCX(5,7)
 sZCX(5,10)
 sZCX(5,13)
 sZCX(5,14)
 sZCX(5,15)
 sZCX(5,16)
 sZCX(5,17)

parity_checks(c::QuantumGolay)  =  S"X_X__X__XXXXX__________
                                   XXXX_XX_X____X_________
                                   _XXXX_XX_X____X________
                                   __XXXX_XX_X____X_______
                                   ___ZZZZ_ZZ_Z____Z______
                                   Z_Z_Z_ZZZ__Z_____Z_____
                                   ZZZZ___Z__ZZ______Z____
                                   ZZ_ZZZ___ZZ________Z___
                                   _ZZ_ZZZ___ZZ________Z__
                                   Z__Z__ZZZZZ__________Z_
                                   _Z__Z__ZZZZZ__________Z"

julia> naive_encoding_circuit(s9)
68-element Vector{QuantumClifford.AbstractOperation}:
 sCNOT(12,5)
 sCNOT(12,6)
 sCNOT(12,10)
 sCNOT(12,11)
 sCNOT(17,5)
 sCNOT(17,7)
 sCNOT(17,10)
 sCNOT(18,5)
 sCNOT(18,6)
 sCNOT(18,7)
 sCNOT(18,8)
 sCNOT(18,10)
 sCNOT(18,11)
 sCNOT(19,5)
 sCNOT(19,7)
 sCNOT(19,8)
 sCNOT(19,9)
 ⋮
 sZCX(2,16)
 sHadamard(3)
 sZCX(3,5)
 sZCX(3,8)
 sZCX(3,11)
 sZCX(3,12)
 sZCX(3,13)
 sZCX(3,14)
 sZCX(3,15)
 sHadamard(4)
 sZCX(4,6)
 sZCX(4,9)
 sZCX(4,12)
 sZCX(4,13)
 sZCX(4,14)
 sZCX(4,15)
 sZCX(4,16)

parity_checks(c::QuantumGolay) = S"Z_Z__Z__ZZZZZ__________
                                   ZZZZ_ZZ_Z____Z_________
                                   _ZZZZ_ZZ_Z____Z________
                                   __ZZZZ_ZZ_Z____Z_______
                                   ___ZZZZ_ZZ_Z____Z______
                                   Z_Z_Z_ZZZ__Z_____Z_____
                                   ZZZZ___Z__ZZ______Z____
                                   ZZ_ZZZ___ZZ________Z___
                                   _ZZ_ZZZ___ZZ________Z__
                                   Z__Z__ZZZZZ__________Z_
                                   _Z__Z__ZZZZZ__________Z"

julia> naive_encoding_circuit(s)
77-element Vector{QuantumClifford.AbstractOperation}:
 sCNOT(12,1)
 sCNOT(12,2)
 sCNOT(12,6)
 sCNOT(12,7)
 sCNOT(12,8)
 sCNOT(12,10)
 sCNOT(13,2)
 sCNOT(13,3)
 sCNOT(13,7)
 sCNOT(13,8)
 sCNOT(13,9)
 sCNOT(13,11)
 sCNOT(14,1)
 sCNOT(14,2)
 sCNOT(14,3)
 sCNOT(14,4)
 sCNOT(14,6)
 ⋮
 sCNOT(21,5)
 sCNOT(21,8)
 sCNOT(21,10)
 sCNOT(21,11)
 sCNOT(22,1)
 sCNOT(22,4)
 sCNOT(22,7)
 sCNOT(22,8)
 sCNOT(22,9)
 sCNOT(22,10)
 sCNOT(22,11)
 sCNOT(23,1)
 sCNOT(23,5)
 sCNOT(23,6)
 sCNOT(23,7)
 sCNOT(23,9)
 sCNOT(23,11)

parity_checks(c::QuantumGolay) = S"X_X__X__XXXXX__________
                                   XXXX_XX_X____X_________
                                   _XXXX_XX_X____X________
                                   __XXXX_XX_X____X_______
                                   ___XXXX_XX_X____X______
                                   X_X_X_XXX__X_____X_____
                                   XXXX___X__XX______X____
                                   XX_XXX___XX________X___
                                   _XX_XXX___XX________X__
                                   X__X__XXXXX__________X
                                   _X__X__XXXXX__________X"

julia> naive_encoding_circuit(s1)
88-element Vector{QuantumClifford.AbstractOperation}:
 sHadamard(1)
 sZCX(1,12)
 sZCX(1,14)
 sZCX(1,17)
 sZCX(1,20)
 sZCX(1,21)
 sZCX(1,22)
 sZCX(1,23)
 sHadamard(2)
 sZCX(2,12)
 sZCX(2,13)
 sZCX(2,14)
 sZCX(2,15)
 sZCX(2,17)
 sZCX(2,18)
 sZCX(2,20)
 sHadamard(3)
 ⋮
 sZCX(9,23)
 sHadamard(10)
 sZCX(10,12)
 sZCX(10,15)
 sZCX(10,18)
 sZCX(10,19)
 sZCX(10,20)
 sZCX(10,21)
 sZCX(10,22)
 sHadamard(11)
 sZCX(11,13)
 sZCX(11,16)
 sZCX(11,19)
 sZCX(11,20)
 sZCX(11,21)
 sZCX(11,22)
 sZCX(11,23)
Fe-r-oz commented 1 week ago

Should I add [[23, 1, 7]] quantum Golay code here as well?

On a second note, I think it's better to have this PR based on classical Golay codes. It's better for organization purpose and easy to track the changes.

Fe-r-oz commented 4 days ago

Thanks for helpful comments. Improvements include: