Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

binary golay code #276

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open

binary golay code #276

wants to merge 9 commits into from

Conversation

Fe-r-oz
Copy link
Contributor

@Fe-r-oz Fe-r-oz commented May 17, 2024

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.

Copy link
Contributor

github-actions bot commented May 17, 2024

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 ❌), while a ratio less
than 1.0 denotes a possible improvement (marked with ✅). 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%) ✅ 1.00 (1%)
["clifford", "dense", "cnot_on_diag500_stab"] 1.05 (5%) ❌ 1.00 (1%)
["clifford", "dense", "dense500_on_diag500_destab"] 1.16 (5%) ❌ 1.00 (1%)
["ecc", "evaluate_decoder", "shor_bp_shorsyn"] 0.95 (5%) ✅ 0.98 (1%) ✅
["ecc", "evaluate_decoder", "toric8_bp_comm"] 1.05 (5%) ❌ 0.99 (1%)
["ecc", "evaluate_decoder", "toric8_bp_naivesyn"] 1.04 (5%) 0.98 (1%) ✅
["ecc", "evaluate_decoder", "toric8_bp_shorsyn"] 1.06 (5%) ❌ 1.00 (1%)
["pauli", "mul", "20000000"] 1.10 (5%) ❌ 1.00 (1%)
["stabilizer", "canon", "diag_rref500"] 1.12 (5%) ❌ 1.00 (1%)
["stabilizer", "tensor", "diag_pow5_20"] 0.92 (5%) ✅ 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 ❌), while a ratio less
than 1.0 denotes a possible improvement (marked with ✅). 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%) ✅ 1.00 (1%)
["circuitsim", "pftrajectories_sumtype", "q101_r1"] 0.91 (5%) ✅ 1.00 (1%)
["clifford", "dense", "cnot250_on_diag500_destab"] 1.15 (5%) ❌ 1.00 (1%)
["clifford", "dense", "dense500_on_diag500_destab"] 0.87 (5%) ✅ 1.00 (1%)
["ecc", "evaluate_decoder", "shor_bp_shorsyn"] 0.95 (5%) ✅ 1.00 (1%)
["stabilizer", "canon", "diag_cano500"] 0.95 (5%) ✅ 1.00 (1%)
["stabilizer", "canon", "diag_rref500"] 0.92 (5%) ✅ 1.00 (1%)
["stabilizer", "tensor", "diag_pow5_20"] 0.89 (5%) ✅ 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

Copy link

codecov bot commented May 17, 2024

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 ⚠️
Additional details and impacted files
@@            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     

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

@Krastanov Krastanov added the ECC Having to do with the ECC submodule label May 19, 2024
@Fe-r-oz
Copy link
Contributor Author

Fe-r-oz commented Jun 20, 2024

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

Copy link
Member

@Krastanov Krastanov left a comment

Choose a reason for hiding this comment

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

Thanks, this is pretty cool!

Here are a couple of minor comments. I have not reviewed the tests in detail yet.

src/ecc/codes/classical/golay.jl Outdated Show resolved Hide resolved
src/ecc/codes/classical/golay.jl Outdated Show resolved Hide resolved

2. Extended Binary `[[24, 12, 8]]` Golay code: Obtained by adding a parity check bit to `[[23, 12, 7]]`. The bordered reverse circulant matrix `(A)` of `[[24, 12, 8]]` Golay code is self-dual, i.e., A₂₄ is same as A₂₄'.

Parity Check Matrix `(H)`: `H` is defined as follows: `H₂₄ = [I₁₂ | A']` where `I₁₂` is the 12 x 12 identity matrix and `A` is a bordered reverse circulant matrix.
Copy link
Member

Choose a reason for hiding this comment

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

On wikipedia they seem to be implying that this is the generator matrix, not the parity check matrix.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

There two notations people use either H= [I | A], G = [A| I], or H= [A | I ], G = [I | A] where I is identity matrix and A is the bordered reverse circulant matrix.

In this paper, H is described as H= [I | A]. This website also describes it as H = [I |A ].

Golay Codes are self-dual (C = C⊥) , H = [A | I ], G = [I | A]. H and G are canonically equivalent as we take their reduced row echelon form.

Wikipedia describes G = [ I| A ], so H = [A| I ]. Wolfram Mathwork follows this notation as well: https://mathworld.wolfram.com/GolayCode.html

Huffman and Pless Book (Section 1.9) formulation of binary Golay Codes is used. I will add generator to make it clear which notation we are following and a test of self-duality.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Huffman and Pless Book (Section 1.9) formulation of binary Golay Codes is used.

In the recent papers about quantum Golay Code [[23, 1, 7]] and classical golay paper, the notation used for H = [A | I ] and G = [I | A]. This is same notation used by Wikipedia for G.

Thus, let's use this notation rather than Huffman and Pless (which is currently used). This make sure the consistency of notation b/w classical and quantum codes.


Construction method for `A` [huffman2010fundamentals](@cite): The columns of `A` are labeled by ∞, 0, 1, 2, ..., 10. The first row contains 0 in column ∞ and 1 elsewhere. To obtain the second row, a 1 is placed in column ∞ and a 1 is placed in columns 0, 1, 3, 4, 5, and 9; these numbers are precisely the squares of the integers modulo 11. That is, 0² = 0, 1² ≡ 10² ≡ 1 (mod 11), 2² ≡ 2² ≡ 4 (mod 11), etc. The third row of `A` is obtained by putting a 1 in column ∞ and then shifting the components in the second row one place to the left and wrapping the entry in column 0 around to column 10. The fourth row is obtained from the third in the same manner, as are the remaining rows.

Punctured Code: All punctured codes are equivalent. Adding an overall parity check to `H₂₃` recovers `H₂₄`.
Copy link
Member

Choose a reason for hiding this comment

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

This probably needs an elaboration. I am not sure what "all punctured codes are equivalent" means.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I took it from this except from Huffman and Pless book:

"It turns out, as we will see later, that all these punctured codes are equivalent. By Exercise 59, adding an overall parity check to one of these punctured codes (in the same position which had been punctured) gives exactly the same G 24 back.

Exercise 59: Prove that if G 24 is punctured in any coordinate and the resulting code is extended in the same position, exactly the same code G 24 is obtained. Hint: See Exercise 27."

In less fancy terms, this paper mentions punturing as deleting one coordinate position from the reverse circulant matrix (deleting one column -- they deleted the last one) to make the [23, 1, 7] Golay code.

Adding a test about would be exciting.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I have added elaboration and a test:

Elaboration:
Puncturing and then extending any column in​ with an overall parity check H₂₃ reconstructs the original parity check matrix H₂₄. Thus, all punctured codes are equivalent.

Test:


"""
Test the equivalence of punctured and extended code by verifying that puncturing the binary parity check matrix H₂₄ in any coordinate and then extending it by
adding an overall parity check in the same position yields the original matrix H₂₄.

Steps:
1. Puncture the Code: Remove the i-th column from H₂₄ to create a punctured matrix H₂₃. Note: H₂₃ = H[:, [1:i-1; i+1:end]]
2. Extend the Code: Add a column in the same position to ensure each row has even parity. Note: H'₂₄ = [H₂₃[:, 1:i-1] c H₂₃[:, i:end]]. Here, c is a column vector added to ensure 
each row in H'₂₄ has even parity.
3. Equivalence Check: Verify that H'₂₄ = H₂₄.
"""
function puncture_code(mat, i)
    return mat[:, [1:i-1; i+1:end]]
end

function extend_code(mat, i)
    k, _ = size(mat)
    extended_mat = hcat(mat[:, 1:i-1], zeros(Bool, k, 1), mat[:, i:end])
    # Calculate the parity for each row
    for row in 1:k
        row_parity = sum(mat[row, :]) % 2 == 1
        extended_mat[row, i] = row_parity
    end
    return extended_mat
end
    for i in 1:24
        punctured_mat = puncture_code(H, i)
        extended_mat = extend_code(punctured_mat, i)
        # Test equivalence
        @test extended_mat == H
    end

src/ecc/codes/classical/golay.jl Outdated Show resolved Hide resolved
@Krastanov Krastanov marked this pull request as draft June 22, 2024 00:57
@Fe-r-oz
Copy link
Contributor Author

Fe-r-oz commented Jun 24, 2024

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
Copy link
Contributor Author

Fe-r-oz commented Jun 26, 2024

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
Copy link
Contributor Author

Fe-r-oz commented Jun 29, 2024

Thanks for helpful comments. Improvements include:

  • test for self-duality of Golay 24, which is a self dual code. (1)
  • test for cross-reference by comparing our construction of A circulant matrix with one given in a paper (Canonically, both should be same") (2)
  • Add a test for puncturing and then extending any column in​ with an overall parity check H₂₃ reconstructs the original parity check matrix H₂₄. Thus, removing ambiguity of the previous statement about "all punctured codes are equivalent." (3)
  • using [n,k, d] notation instead off [[n, k, d]] notation. (4)
  • cross validation test (2)
  • echelon_form from Nemo is used in the tests as well!

@Fe-r-oz Fe-r-oz changed the title Adding classical binary Golay codes to the ECC Module classical binary golay code Jun 29, 2024
@Fe-r-oz Fe-r-oz marked this pull request as ready for review June 29, 2024 01:55
@Fe-r-oz Fe-r-oz requested a review from Krastanov June 29, 2024 01:57
@Fe-r-oz Fe-r-oz changed the title classical binary golay code binary golay code Jul 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ECC Having to do with the ECC submodule
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants