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

Gottesman's code #240

Merged
merged 127 commits into from
Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
127 commits
Select commit Hold shift + click to select a range
3bf0779
Update references.bib
Fe-r-oz Feb 28, 2024
f207dc1
Update references.md
Fe-r-oz Feb 28, 2024
7070155
Update references.md
Fe-r-oz Feb 28, 2024
df8d6b8
Update decoder_pipeline.jl
Fe-r-oz Feb 28, 2024
296c634
Update decoder_pipeline.jl
Fe-r-oz Feb 28, 2024
4032b7f
Create code833
Fe-r-oz Mar 1, 2024
55a4955
Create code833
Fe-r-oz Mar 1, 2024
5242529
Delete src/ecc/code833
Fe-r-oz Mar 1, 2024
fe4b153
Rename code833 to code833.jl
Fe-r-oz Mar 1, 2024
568f31d
Update code833.jl
Fe-r-oz Mar 1, 2024
b39260e
Create code422.jl
Fe-r-oz Mar 1, 2024
e0f960c
Create QHammingcode.jl
Fe-r-oz Mar 1, 2024
3f8a37e
Create hypergraphproductcode.jl
Fe-r-oz Mar 1, 2024
2f63447
Merge pull request #1 from Fe-r-oz/Fe-r-oz-patch-1
Fe-r-oz Mar 1, 2024
344e13b
Update hypergraphproductcode.jl
Fe-r-oz Mar 1, 2024
b81d4de
Update QHammingcode.jl
Fe-r-oz Mar 1, 2024
5d48c01
Update hypergraphproductcode.jl
Fe-r-oz Mar 1, 2024
3ca1cc2
Delete src/ecc/codes/code833.jl
Fe-r-oz Mar 1, 2024
7d1b34d
Delete src/ecc/codes/code422.jl
Fe-r-oz Mar 1, 2024
7e6c48e
Delete src/ecc/codes/hypergraphproductcode.jl
Fe-r-oz Mar 1, 2024
0f43554
Update references.bib
Fe-r-oz Mar 1, 2024
0597d35
Update references.md
Fe-r-oz Mar 1, 2024
9f86c77
Rename QHammingcode.jl to qhammingcode.jl
Fe-r-oz Mar 1, 2024
5997735
Update decoder_pipeline.jl
Fe-r-oz Mar 1, 2024
748b866
Update ECC.jl
Fe-r-oz Mar 1, 2024
d3f00c3
Update ECC.jl
Fe-r-oz Mar 1, 2024
ce21699
Update qhammingcode.jl
Fe-r-oz Mar 2, 2024
683933d
Update test_ecc_encoding.jl
Fe-r-oz Mar 2, 2024
48e2d09
Update test_ecc_syndromes.jl
Fe-r-oz Mar 2, 2024
3b12a0a
Update test_ecc_decoder_all_setups.jl
Fe-r-oz Mar 2, 2024
3f784ea
Update test_ecc.jl
Fe-r-oz Mar 2, 2024
2f0afcf
Update qhammingcode.jl
Fe-r-oz Mar 2, 2024
ccf4499
Add files via upload
Fe-r-oz Mar 2, 2024
fa2fc87
Create test_qhamming_code.jl
Fe-r-oz Mar 2, 2024
042ef3e
Delete docs/src/notebooks/quantumhammingcode.ipynb
Fe-r-oz Mar 3, 2024
f091649
Update test/test_ecc_decoder_all_setups.jl
Fe-r-oz Mar 3, 2024
8547a2d
Update ECC.jl
Fe-r-oz Mar 3, 2024
912321b
Update test_ecc.jl
Fe-r-oz Mar 3, 2024
1a1eefd
Update test_ecc_syndromes.jl
Fe-r-oz Mar 3, 2024
d5187f0
Update test_ecc_encoding.jl
Fe-r-oz Mar 3, 2024
6449d6b
Update references.md
Fe-r-oz Mar 3, 2024
72f2f16
Update ECC.jl
Fe-r-oz Mar 3, 2024
845b7b1
Update test_qhamming_code.jl
Fe-r-oz Mar 3, 2024
73b4c1d
Update test_throws.jl
Fe-r-oz Mar 3, 2024
a1901f5
Update qhammingcode.jl
Fe-r-oz Mar 3, 2024
c8bc9f4
Update ECC.jl
Fe-r-oz Mar 4, 2024
17c66eb
Update qhammingcode.jl
Fe-r-oz Mar 4, 2024
d1945e6
Update qhammingcode.jl
Fe-r-oz Mar 5, 2024
6035ff9
Update and rename qhammingcode.jl to eightqubit.jl
Fe-r-oz Mar 5, 2024
31e0a0e
Update eightqubit.jl
Fe-r-oz Mar 5, 2024
6f6704f
Update ECC.jl
Fe-r-oz Mar 5, 2024
84dfb02
Update test_ecc.jl
Fe-r-oz Mar 5, 2024
e4d0759
Update test_throws.jl
Fe-r-oz Mar 5, 2024
412d54a
Update test_qhamming_code.jl
Fe-r-oz Mar 5, 2024
33fb94b
Merge branch 'QuantumSavory:master' into master
Fe-r-oz Mar 6, 2024
8eb5bb7
Update test_ecc_encoding.jl
Fe-r-oz Mar 6, 2024
d1bc220
Update test_ecc_syndromes.jl
Fe-r-oz Mar 6, 2024
fd4d073
Update test_ecc_decoder_all_setups.jl
Fe-r-oz Mar 6, 2024
e3a1fcf
Update references.md
Fe-r-oz Mar 6, 2024
9364f6c
Create sixteenqubit.jl
Fe-r-oz Mar 6, 2024
1c740cf
Update ECC.jl
Fe-r-oz Mar 6, 2024
e40f1ab
added better names of eccs in the zoo, removed the test_hamming_code …
Mar 7, 2024
733a7ad
minor modifications
Mar 7, 2024
a6d1d1b
minor modifications
Mar 7, 2024
5a2913f
minor modifications
Mar 7, 2024
62fdcbe
tweaking decoders parameters for pedagogical nkd16103
Mar 7, 2024
b572c8f
minor tweak
Mar 7, 2024
32e8676
Gottesman aka Quantum Hamming Code Implementation
Mar 8, 2024
e7e9b40
Original Paramters
Mar 8, 2024
04c62e8
Update src/ecc/codes/gottesman.jl
Fe-r-oz Mar 9, 2024
4ab69ae
Update src/ecc/ECC.jl
Fe-r-oz Mar 9, 2024
1b602f4
Update src/ecc/codes/gottesman.jl
Fe-r-oz Mar 9, 2024
cc8c6e2
Update src/ecc/codes/gottesman.jl
Fe-r-oz Mar 9, 2024
bdac20b
Update src/ecc/codes/gottesman.jl
Fe-r-oz Mar 9, 2024
39344e0
sompleting suggested changes
Mar 9, 2024
f547dd4
Update test/test_ecc_decoder_all_setups.jl
Fe-r-oz Mar 9, 2024
a907f56
Update test/test_ecc_decoder_all_setups.jl
Fe-r-oz Mar 9, 2024
ba2f3ff
suggested changes
Mar 9, 2024
0828eaf
undoing extra lines
Mar 9, 2024
bd16194
minor modification
Mar 9, 2024
63b1093
suggested changes
Mar 9, 2024
d52a03b
completing suggested changes
Mar 9, 2024
3dbd5a3
completing suggested changes
Mar 9, 2024
66255aa
undoing extra lines in files
Mar 9, 2024
e39fd21
undoing extra lines
Mar 9, 2024
67a979c
suggested changes
Mar 9, 2024
c54744f
undoing extra lines
Mar 9, 2024
38aa86f
minor modification
Mar 11, 2024
e50a44b
implementation of Gottesman aka Quantum Hamming Code
Mar 11, 2024
3eb22e1
minor modification
Mar 11, 2024
5c3864e
minor modification
Mar 11, 2024
a0698b7
Gottesman aka quantum Hamming code implementation
Mar 11, 2024
1a7e926
Adding documentation for Gottesman codes aka quantum Hamming codes
Mar 11, 2024
90e52f0
Minor Modification
Mar 11, 2024
ead9bbe
Using Precise Naming Convention
Mar 13, 2024
42cd5ea
Merge branch 'master' into pr/Fe-r-oz/238
Krastanov Mar 16, 2024
227b9d6
relax testing requirements for decoding Gottesman code
Krastanov Mar 16, 2024
ff88de8
Update test/test_ecc_syndromes.jl
Fe-r-oz Mar 16, 2024
536f55c
Update src/ecc/codes/gottesmancode.jl
Fe-r-oz Mar 16, 2024
c5c7d60
resetting parameters to default
Mar 16, 2024
6527546
"resetting to default parameters"
Mar 16, 2024
9e1cc0f
adding separate Hx and Hz checks in Gottesman
Mar 16, 2024
3e5d4a7
Minor Modifications
Mar 16, 2024
035c006
minor modifications
Mar 16, 2024
ffb91a9
minor modifications
Mar 16, 2024
fd0408c
adding Hx and Hz checks in Gottesman
Mar 16, 2024
1d10548
utilizing stab_to_gf2
Mar 16, 2024
475fc80
Minor Modification
Mar 16, 2024
b3c8725
updating changelog
Mar 16, 2024
43a24fb
resolving changelog conflicts
Mar 16, 2024
c00a0ed
undoing whitespaces
Mar 16, 2024
074683c
removing whitespaces
Mar 16, 2024
f39e8b3
Update test/test_ecc.jl
Fe-r-oz Mar 16, 2024
51fbc02
minor modification
Mar 16, 2024
80189ef
resolving conflicts
Mar 16, 2024
f87161a
Implementation of non-CSS Gottesman codes aka quantum Hamming codes
Mar 16, 2024
f07fd2c
Implementation of non-CSS Gottesman codes aka quantum Hamming codes
Mar 16, 2024
8831a55
undoing whitespaces
Mar 16, 2024
73fc7d2
undoing whitespaces
Mar 16, 2024
a753f32
undoing whitespaces
Mar 16, 2024
e55dc19
minor modification
Mar 16, 2024
31c38fe
updating changelog
Mar 16, 2024
9a48cb2
cleanup
Krastanov Mar 16, 2024
a2af303
cleanup
Krastanov Mar 17, 2024
e1a5a8d
add refereces in markdown docs
Krastanov Mar 17, 2024
b47a852
fix gottesman reference
Krastanov Mar 17, 2024
96df6a8
fix gottesman reference
Krastanov Mar 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@

# News

## v0.8.21 - 2024-03-15
## v0.8.21 - 2024-03-17

- Implemented the Gottesman code family, also known as [[2^j, 2^j - j - 2, 3]] quantum Hamming codes.
- Bump the `PyQDecoders` dependency, switching to `PythonCall` behind the scenes for reliability.
- Bump the `LDPCDecoders` dependency.

Expand Down
131 changes: 84 additions & 47 deletions docs/src/references.bib
Original file line number Diff line number Diff line change
@@ -1,50 +1,3 @@
@article{mackay2004sparse,
title={Sparse-graph codes for quantum error correction},
author={MacKay, David JC and Mitchison, Graeme and McFadden, Paul L},
journal={IEEE Transactions on Information Theory},
volume={50},
number={10},
pages={2315--2330},
year={2004},
publisher={IEEE},
doi={10.1109/TIT.2004.834737}
}

@article{calderbank1998quantum,
title={Quantum error correction via codes over GF (4)},
author={Calderbank, A Robert and Rains, Eric M and Shor, PM and Sloane, Neil JA},
journal={IEEE Transactions on Information Theory},
volume={44},
number={4},
pages={1369--1387},
year={1998},
publisher={IEEE},
doi={10.1109/18.681315}
}

@inproceedings{steane2007tutorial,
title={A tutorial on quantum error correction},
author={Steane, Andrew M},
booktitle={PROCEEDINGS-INTERNATIONAL SCHOOL OF PHYSICS ENRICO FERMI},
volume={162},
pages={1},
year={2007},
organization={IOS Press; Ohmsha; 1999},
doi={10.3254/978-1-61499-018-5-1}
}

@article{wilde2009logical,
title={Logical operators of quantum codes},
author={Wilde, Mark M},
journal={Physical Review A},
volume={79},
number={6},
pages={062322},
year={2009},
publisher={APS},
doi={10.1103/PhysRevA.79.062322}
}

% The basis of the tableaux algorithm

@inproceedings{gottesman1998heisenberg,
Expand Down Expand Up @@ -167,6 +120,18 @@ @article{hein2006entanglement
year={2006}
}

@article{wilde2009logical,
title={Logical operators of quantum codes},
author={Wilde, Mark M},
journal={Physical Review A},
volume={79},
number={6},
pages={062322},
year={2009},
publisher={APS},
doi={10.1103/PhysRevA.79.062322}
}

% Encoding circuits

@article{cleve1997efficient,
Expand Down Expand Up @@ -225,3 +190,75 @@ @article{nahum2017quantum
author = {Nahum, Adam and Ruhman, Jonathan and Vijay, Sagar and Haah, Jeongwan},
year = {2017}
}

% codes

@article{mackay2004sparse,
title={Sparse-graph codes for quantum error correction},
author={MacKay, David JC and Mitchison, Graeme and McFadden, Paul L},
journal={IEEE Transactions on Information Theory},
volume={50},
number={10},
pages={2315--2330},
year={2004},
publisher={IEEE},
doi={10.1109/TIT.2004.834737}
}

@article{calderbank1998quantum,
title={Quantum error correction via codes over GF (4)},
author={Calderbank, A Robert and Rains, Eric M and Shor, PM and Sloane, Neil JA},
journal={IEEE Transactions on Information Theory},
volume={44},
number={4},
pages={1369--1387},
year={1998},
publisher={IEEE},
doi={10.1109/18.681315}
}

@inproceedings{steane2007tutorial,
title={A tutorial on quantum error correction},
author={Steane, Andrew M},
booktitle={PROCEEDINGS-INTERNATIONAL SCHOOL OF PHYSICS ENRICO FERMI},
volume={162},
pages={1},
year={2007},
organization={IOS Press; Ohmsha; 1999},
doi={10.3254/978-1-61499-018-5-1}
}

@article{yu2013all,
author={Yu, Sixia and Bierbrauer, Jürgen and Dong, Ying and Chen, Qing and Oh, C. H.},
journal={IEEE Transactions on Information Theory},
title={All the Stabilizer Codes of Distance 3},
year={2013},
volume={59},
number={8},
pages={5179-5185},
keywords= {Generators;Frequency modulation;Vectors;Educational institutions;Error correction codes;Physics;Indexes;1-error correcting stabilizer codes;optimal codes;quantum error correction;quantum Hamming bound},
doi={10.1109/TIT.2013.2259138}
}

@article{chao2018quantum,
title={Quantum Error Correction with Only Two Extra Qubits.},
author={Rui Chao and Ben W Reichardt},
journal={Physical review letters},
year={2017},
volume={121 5},
pages={
050502
},
url={https://api.semanticscholar.org/CorpusID:206314271}
}

@article{gottesman1996class,
title={Class of quantum error-correcting codes saturating the quantum Hamming bound},
author={Gottesman, Daniel},
journal={Physical Review A},
volume={54},
number={3},
pages={1862},
year={1996},
publisher={APS}
}
7 changes: 7 additions & 0 deletions docs/src/references.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,13 @@ For circuit construction routines (for stabilizer measurements for a given code)
- [grassl2002algorithmic](@cite)
- [grassl2011variations](@cite)

For code construction routines:
- [cleve1997efficient](@cite)
- [gottesman1996class](@cite)
- [gottesman1997stabilizer](@cite)
- [yu2013all](@cite)
- [chao2018quantum](@cite)

# References

```@bibliography
Expand Down
4 changes: 2 additions & 2 deletions src/ecc/ECC.jl
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export parity_checks, parity_checks_x, parity_checks_z,
RepCode,
CSS,
Shor9, Steane7, Cleve8, Perfect5, Bitflip3,
Toric,
Toric, Gottesman,
evaluate_decoder,
CommutationCheckECCSetup, NaiveSyndromeECCSetup, ShorSyndromeECCSetup,
TableDecoder,
Expand Down Expand Up @@ -334,5 +334,5 @@ include("codes/steanecode.jl")
include("codes/shorcode.jl")
include("codes/clevecode.jl")
include("codes/toric.jl")

include("codes/gottesman.jl")
end #module
40 changes: 40 additions & 0 deletions src/ecc/codes/gottesman.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
"""The family of `[[2ʲ, 2ʲ - j - 2, 3]]` Gottesman codes, also known as quantum Hamming codes, as described in [Gottesman's 1997 PhD thesis](@cite gottesman1997stabilizer) and in [gottesman1996class](@cite).

You might be interested in consulting [yu2013all](@cite) and [chao2018quantum](@cite) as well.

The ECC Zoo has an [entry for this family](https://errorcorrectionzoo.org/c/quantum_hamming)
"""
struct Gottesman <: AbstractECC
j::Int
function Gottesman(j)
(j >= 3 && j < 21) || error("In `Gottesman(j)`, `j` must be ≥ 3 in order to obtain a valid code and < 21 to remain tractable")
new(j)
end
end

code_n(c::Gottesman) = 2^c.j

function parity_checks(c::Gottesman)
j = c.j
s = j+2
n = 2^j

H = zero(Stabilizer, s, n)
for i in 1:n
H[1, i] = (true, false)
H[2, i] = (false, true)
end
for i in 0:n-1 # column of H, corresponds to a single qubit error that is detectable)
Xⁱ = i
Zⁱ = i÷2
jeven = j%2 == 0
ieven = i%2 == 0
if (jeven && ieven) || (!jeven && ieven && i < n÷2) || (!jeven && !ieven && i ≥ n÷2)
Zⁱ = ~Zⁱ
end
for b in 0:j-1 # which check to consider (row of H), also which bit to extract
H[s-b,i+1] = isone((Zⁱ>>b)&0x1), isone((Xⁱ>>b)&0x1)
end
end
H
end
1 change: 1 addition & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ end
@doset "ecc_decoder_all_setups"
@doset "ecc_encoding"
@doset "ecc_syndromes"
@doset "ecc_gottesman"
@doset "precompile"
@doset "pauliframe"
@doset "allocations"
Expand Down
2 changes: 2 additions & 0 deletions test/test_ecc.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ codes = [
Shor9(),
Perfect5(),
Cleve8(),
Gottesman(3),
Gottesman(5),
CSS([0 1 1 0; 1 1 0 0], [1 1 1 1]),
]

Expand Down
3 changes: 3 additions & 0 deletions test/test_ecc_decoder_all_setups.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ import LDPCDecoders
Shor9(),
Perfect5(),
Cleve8(),
Gottesman(3),
#Gottesman(4), bad threshold
#Gottesman(5), bad threshold
]

noise = 0.001
Expand Down
2 changes: 2 additions & 0 deletions test/test_ecc_encoding.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ using QuantumClifford.ECC
:(Shor9()),
:(Perfect5()),
:(Bitflip3()),
:(Gottesman(3)),
:(Gottesman(5)),
:(S"Y_"),
:(S"Z_"),
:(S"X_"),
Expand Down
21 changes: 21 additions & 0 deletions test/test_ecc_gottesman.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using Test
using QuantumClifford
using QuantumClifford: mul_left!
using QuantumClifford.ECC
using QuantumClifford.ECC: AbstractECC


@testset "Gottesman codes should correct all single-qubit errors" begin
for j in 3:12
H = parity_checks(Gottesman(j))
syndromes = Set([]) # the set automatically removes repeated entries
for error_type in (single_x, single_y, single_z)
for bit_index in 1:nqubits(H)
syndrome = comm(H, error_type(nqubits(H), bit_index))
@test any(==(0x1), syndrome) # checking the syndrome is not trivially zero
push!(syndromes, syndrome)
end
end
@test length(syndromes) == 3*nqubits(H)
end
end
2 changes: 2 additions & 0 deletions test/test_ecc_syndromes.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ codes = [
Shor9(),
Perfect5(),
Cleve8(),
Gottesman(3),
Gottesman(5),
CSS([0 1 1 0; 1 1 0 0], [1 1 1 1]),
Toric(3,3),
Toric(3,6),
Expand Down
Loading