diff --git a/src/ecc/ECC.jl b/src/ecc/ECC.jl index c3db023fe..27ab91d37 100644 --- a/src/ecc/ECC.jl +++ b/src/ecc/ECC.jl @@ -18,9 +18,8 @@ export parity_checks, parity_checks_x, parity_checks_z, naive_syndrome_circuit, shor_syndrome_circuit, naive_encoding_circuit, RepCode, CSS, - Shor9, Steane7, Cleve8, Perfect5, Bitflip3, - NKD833,NKD16103, - Toric, + Shor9, Steane7, Cleve8, Perfect5, Bitflip3, + Toric, QHamming, evaluate_decoder, CommutationCheckECCSetup, NaiveSyndromeECCSetup, ShorSyndromeECCSetup, TableDecoder, @@ -334,6 +333,5 @@ include("codes/steanecode.jl") include("codes/shorcode.jl") include("codes/clevecode.jl") include("codes/toric.jl") -include("codes/nkd833.jl") -include("codes/nkd16103.jl") -end #module +include("codes/gottesman.jl") +end #module \ No newline at end of file diff --git a/src/ecc/codes/gottesman.jl b/src/ecc/codes/gottesman.jl new file mode 100644 index 000000000..216071ff7 --- /dev/null +++ b/src/ecc/codes/gottesman.jl @@ -0,0 +1,51 @@ +struct QHamming <: AbstractECC + j::Int + function QHamming(j) + if j < 3 + error("j must be greater than or equal to 3 in order to create a valid code of tractable size") + end + new(j) + end +end + +code_n(c::QHamming)= 2^c.j + +function parity_checks(c::QHamming) + a=c.j + rows = a + 2 + cols = 2^a + + Hx = falses(rows,cols) + Hz =falses(rows,cols) + + Hx[1, :] .= true + + Hx[2, :] .= false + + for i in 3:(rows-1) + for a in 1:cols + Hx[i, a] = (a==0) || (a % 2 ==0) + end + end + + for a in 1:cols + Hx[rows, a] = (a % 4 == 1) || (a % 4 == 2) ? 0 : 1 + end + + Hz[1, :] .= false + Hz[2, :] .= true + + for i in 3:rows + period = 2^(rows - i) + for a in 1:cols + Hz[i,a]=div(a-1,period) % 2 == 1 + end + end + extended_Hx = Matrix{Bool}(Hz) + extended_Hz = Matrix{Bool}(Hx) + + num_rows = size(Hx, 1) + + fill_array = fill(UInt8(0), num_rows) + Stabilizer(fill_array, extended_Hz, extended_Hx) +end \ No newline at end of file diff --git a/src/ecc/codes/nkd16103.jl b/src/ecc/codes/nkd16103.jl deleted file mode 100644 index 57d40beb4..000000000 --- a/src/ecc/codes/nkd16103.jl +++ /dev/null @@ -1,8 +0,0 @@ -struct NKD16103 <: AbstractECC end - -parity_checks(c::NKD16103) =S"XXXXXXXXXXXXXXXX - ZZZZZZZZZZZZZZZZ - _X_X_X_XZYZYZYZY - _X_XZYZYX_X_YZYZ - _XZYX_YZ_XZYX_YZ - _YXZ_YXZ_YXZ_YXZ" \ No newline at end of file diff --git a/src/ecc/codes/nkd833.jl b/src/ecc/codes/nkd833.jl deleted file mode 100644 index 5512b4895..000000000 --- a/src/ecc/codes/nkd833.jl +++ /dev/null @@ -1,8 +0,0 @@ -struct NKD833 <: AbstractECC end - -parity_checks(c::NKD833) =S"XXXXXXXX - ZZZZZZZZ - _X_XYZYZ - _XZY_XZY - _YXZXZ_Y" - diff --git a/test/test_ecc.jl b/test/test_ecc.jl index 9b25ad798..d1f4ef408 100644 --- a/test/test_ecc.jl +++ b/test/test_ecc.jl @@ -9,8 +9,7 @@ codes = [ Shor9(), Perfect5(), Cleve8(), - NKD833(), - NKD16103(), + QHamming(3), CSS([0 1 1 0; 1 1 0 0], [1 1 1 1]), ] @@ -78,4 +77,4 @@ end @test isdegenerate(Steane7()) == false @test isdegenerate(Steane7(), 2) == true @test isdegenerate(Bitflip3()) == true -end +end \ No newline at end of file diff --git a/test/test_ecc_decoder_all_setups.jl b/test/test_ecc_decoder_all_setups.jl index a9828ea61..3608bfa98 100644 --- a/test/test_ecc_decoder_all_setups.jl +++ b/test/test_ecc_decoder_all_setups.jl @@ -16,9 +16,7 @@ import PyQDecoders Steane7(), Shor9(), Perfect5(), - NKD833(), - NKD16103(), - Cleve8(), + Cleve8(), ] noise = 0.001 @@ -31,7 +29,7 @@ import PyQDecoders for c in codes for s in setups - e = evaluate_decoder(TableDecoder(c), s, 900000000) + e = evaluate_decoder(TableDecoder(c), s,100000) #@show c #@show s #@show e @@ -58,11 +56,11 @@ end for c in codes for s in setups - e = evaluate_decoder(PyMatchingDecoder(c), s, 10000) + e = evaluate_decoder(PyMatchingDecoder(c), s,100000) #@show c #@show s #@show e - @assert max(e...) < noise/5 + @assert max(e...) < noise/4 end end -end +end \ No newline at end of file diff --git a/test/test_ecc_encoding.jl b/test/test_ecc_encoding.jl index b5f977d6b..ece718dd9 100644 --- a/test/test_ecc_encoding.jl +++ b/test/test_ecc_encoding.jl @@ -14,9 +14,8 @@ using QuantumClifford.ECC :(Steane7()), :(Shor9()), :(Perfect5()), - :(NKD833()), - :(NKD16103()), :(Bitflip3()), + :(QHamming(3)), :(S"Y_"), :(S"Z_"), :(S"X_"), @@ -57,4 +56,4 @@ using QuantumClifford.ECC #println("$codeexpr, $(encodedâ‚™ == algebraicâ‚™)") end -end +end \ No newline at end of file diff --git a/test/test_ecc_syndromes.jl b/test/test_ecc_syndromes.jl index cddd15a15..d164c68d1 100644 --- a/test/test_ecc_syndromes.jl +++ b/test/test_ecc_syndromes.jl @@ -9,9 +9,8 @@ codes = [ Steane7(), Shor9(), Perfect5(), - NKD833(), - NKD16103(), Cleve8(), + QHamming(3), CSS([0 1 1 0; 1 1 0 0], [1 1 1 1]), Toric(3,3), Toric(3,6), @@ -61,4 +60,4 @@ end for c in codes pframe_naive_vs_shor_syndrome(c) end -end +end \ No newline at end of file diff --git a/test/test_throws.jl b/test/test_throws.jl index 724cc7de5..9aa678d58 100644 --- a/test/test_throws.jl +++ b/test/test_throws.jl @@ -64,4 +64,4 @@ for m in [sMX,sMZ,sMY,sMRX,sMRZ,sMRY] @test_throws ArgumentError m(-1) @test_throws ArgumentError m(0,1) @test_throws ArgumentError m(-1,0) -end +end \ No newline at end of file