Skip to content

Commit

Permalink
add wonderful codereview suggestion
Browse files Browse the repository at this point in the history
  • Loading branch information
Fe-r-oz committed Nov 5, 2024
1 parent c63864e commit 8b5813f
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 89 deletions.
21 changes: 11 additions & 10 deletions docs/src/references.bib
Original file line number Diff line number Diff line change
Expand Up @@ -513,16 +513,6 @@ @article{anderson2014fault
publisher={APS}
}

@article{bravyi2024high,
title={High-threshold and low-overhead fault-tolerant quantum memory},
author={Bravyi, Sergey and Cross, Andrew W and Gambetta, Jay M and Maslov, Dmitri and Rall, Patrick and Yoder, Theodore J},
journal={Nature},
volume={627},
number={8005},
pages={778--782},
year={2024},
publisher={Nature Publishing Group UK London}

@article{lin2024quantum,
title={Quantum two-block group algebra codes},
author={Lin, Hsiang-Ku and Pryadko, Leonid P},
Expand All @@ -533,3 +523,14 @@ @article{lin2024quantum
year={2024},
publisher={APS}
}

@article{bravyi2024high,
title={High-threshold and low-overhead fault-tolerant quantum memory},
author={Bravyi, Sergey and Cross, Andrew W and Gambetta, Jay M and Maslov, Dmitri and Rall, Patrick and Yoder, Theodore J},
journal={Nature},
volume={627},
number={8005},
pages={778--782},
year={2024},
publisher={Nature Publishing Group UK London}
}
2 changes: 2 additions & 0 deletions docs/src/references.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ For quantum code construction routines:
- [steane1999quantum](@cite)
- [campbell2012magic](@cite)
- [anderson2014fault](@cite)
- [lin2024quantum](@cite)
- [bravyi2024high](@cite)

For classical code construction routines:
- [muller1954application](@cite)
Expand Down
7 changes: 3 additions & 4 deletions ext/QuantumCliffordHeckeExt/QuantumCliffordHeckeExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@ using DocStringExtensions
import QuantumClifford, LinearAlgebra
import Hecke: Group, GroupElem, AdditiveGroup, AdditiveGroupElem,
GroupAlgebra, GroupAlgebraElem, FqFieldElem, representation_matrix, dim, base_ring,
multiplication_table, coefficients, abelian_group, group_algebra, rand,
FinGenAbGroup, FinGenAbGroupElem, one
multiplication_table, coefficients, abelian_group, group_algebra, rand
import Nemo
import Nemo: characteristic, matrix_repr, GF, ZZ, lift

import QuantumClifford.ECC: AbstractECC, CSS, ClassicalCode,
hgp, code_k, code_n, code_s, iscss, parity_checks, parity_checks_x, parity_checks_z, parity_checks_xz,
two_block_group_algebra_codes, generalized_bicycle_codes, bicycle_codes, bivariate_bicycle_codes,
check_repr_commutation_relation
two_block_group_algebra_codes, generalized_bicycle_codes, bicycle_codes, check_repr_commutation_relation,
bivariate_bicycle_codes

include("util.jl")
include("types.jl")
Expand Down
12 changes: 5 additions & 7 deletions ext/QuantumCliffordHeckeExt/lifted_product.jl
Original file line number Diff line number Diff line change
Expand Up @@ -238,19 +238,17 @@ julia> GA = group_algebra(GF(2), abelian_group([l, m]));
julia> x, y = gens(GA);
julia> A = [x^3 , y^10 , y^17];
julia> A = x^3 + y^10 + y^17;
julia> B = [y^5 , x^3 , x^19];
julia> B = y^5 + x^3 + x^19;
julia> c = bivariate_bicycle_codes(A,B,GA);
julia> c = bivariate_bicycle_codes(A,B);
julia> code_n(c), code_k(c)
(756, 16)
```
"""
function bivariate_bicycle_codes(A::VectorGroupAlgebraElem, B::VectorGroupAlgebraElem, GA::FqFieldFinGenAbGroupElemGroupAlgebra)
a = sum(GA(x) for x in A)
b = sum(GA(x) for x in B)
c = two_block_group_algebra_codes(a,b)
function bivariate_bicycle_codes(A::GroupAlgebraElem, B::GroupAlgebraElem)
c = two_block_group_algebra_codes(A,B)
return c
end
4 changes: 0 additions & 4 deletions ext/QuantumCliffordHeckeExt/types.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@ const FqFieldGroupAlgebraElemMatrix = Union{
LinearAlgebra.Adjoint{<:GroupAlgebraElem{FqFieldElem,<:GroupAlgebra},<:Matrix{<:GroupAlgebraElem{FqFieldElem,<:GroupAlgebra}}}
}

const VectorGroupAlgebraElem = Vector{GroupAlgebraElem{FqFieldElem, GroupAlgebra{FqFieldElem, FinGenAbGroup, FinGenAbGroupElem}}}

const FqFieldFinGenAbGroupElemGroupAlgebra = GroupAlgebra{FqFieldElem, FinGenAbGroup, FinGenAbGroupElem}

"""
Compute the conjugate of a group algebra element.
The conjugate is defined by inversing elements in the associated group.
Expand Down
20 changes: 10 additions & 10 deletions test/test_ecc_base.jl
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ using InteractiveUtils

import Nemo: GF
import LinearAlgebra
import Hecke: group_algebra, abelian_group, gens, one
import Hecke: group_algebra, abelian_group, gens

# generate instances of all implemented codes to make sure nothing skips being checked

Expand Down Expand Up @@ -62,25 +62,25 @@ push!(other_lifted_product_codes, LPCode(A, B))
l=6; m=6
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^3, y, y^2]
B = [y^3, x, x^2]
bb1 = bivariate_bicycle_codes(A,B,GA)
A = x^3 + y + y^2
B = y^3 + x + x^2
bb1 = bivariate_bicycle_codes(A,B)

# A [[90, 8, 10]] code from Table 3 of [bravyi2024high](@cite).
l=15; m=3
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^9 , y , y^2]
B = [one(x), x^2 , x^7]
bb2 = bivariate_bicycle_codes(A,B,GA)
A = x^9 + y + y^2
B = 1 + x^2 + x^7
bb2 = bivariate_bicycle_codes(A,B)

# A [[360, 12, ≤ 24]] code from Table 3 of [bravyi2024high](@cite).
l=30; m=6
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^9 , y , y^2]
B = [y^3 , x^25 , x^26]
bb3 = bivariate_bicycle_codes(A,B,GA)
A = x^9 + y + y^2
B = y^3 + x^25 + x^26
bb3 = bivariate_bicycle_codes(A,B)

test_bb_codes = [bb1, bb2, bb3]

Expand Down
108 changes: 54 additions & 54 deletions test/test_ecc_bivaraite_bicycle_as_twobga.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,63 +8,63 @@
l=6; m=6
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^3, y, y^2]
B = [y^3, x, x^2]
c = bivariate_bicycle_codes(A,B,GA)
A = x^3 + y + y^2
B = y^3 + x + x^2
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 72 && code_k(c) == 12

# [[90, 8, 10]]
l=15; m=3
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^9 , y , y^2]
B = [one(x), x^2 , x^7]
c = bivariate_bicycle_codes(A,B,GA)
A = x^9 + y + y^2
B = 1 + x^2 + x^7
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 90 && code_k(c) == 8

# [[108, 8, 10]]
l=9; m=6
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^3 , y , y^2]
B = [y^3 , x , x^2]
c = bivariate_bicycle_codes(A,B,GA)
A = x^3 + y + y^2
B = y^3 + x + x^2
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 108 && code_k(c) == 8

# [[144, 12, 12]]
l=12; m=6
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^3 , y , y^2]
B = [y^3 , x , x^2]
c = bivariate_bicycle_codes(A,B,GA)
A = x^3 + y + y^2
B = y^3 + x + x^2
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 144 && code_k(c) == 12

# [[288, 12, 12]]
l=12; m=12
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^3 , y^2, y^7]
B = [y^3 , x , x^2]
c = bivariate_bicycle_codes(A,B,GA)
A = x^3 + y^2 + y^7
B = y^3 + x + x^2
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 288 && code_k(c) == 12

# [[360, 12, ≤ 24]]
l=30; m=6
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^9 , y , y^2]
B = [y^3 , x^25 , x^26]
c = bivariate_bicycle_codes(A,B,GA)
A = x^9 + y + y^2
B = y^3 + x^25 + x^26
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 360 && code_k(c) == 12

# [[756, 16, ≤ 34]]
l=21; m=18
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^3 , y^10 , y^17]
B = [y^5 , x^3 , x^19]
c = bivariate_bicycle_codes(A,B,GA)
A = x^3 + y^10 + y^17
B = y^5 + x^3 + x^19
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 756 && code_k(c) == 16
end

Expand All @@ -73,45 +73,45 @@
l=12; m=3
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^9 , y , y^2]
B = [one(x), x , x^11]
c = bivariate_bicycle_codes(A,B,GA)
A = x^9 + y + y^2
B = 1 + x + x^11
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 72 && code_k(c) == 8

# [[90, 8, 6]]
l=9; m=5
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^8 , y^4 , y]
B = [y^5 , x^8 , x^7]
c = bivariate_bicycle_codes(A,B,GA)
A = x^8 + y^4 + y
B = y^5 + x^8 + x^7
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 90 && code_k(c) == 8

# [[120, 8, 8]]
l=12; m=5
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^10 , y^4, y]
B = [one(x), x , x^2]
c = bivariate_bicycle_codes(A,B,GA)
A = x^10 + y^4 + y
B = 1 + x + x^2
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 120 && code_k(c) == 8

# [[150, 8, 8]]
l=15; m=5
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^5 , y^2 , y^3]
B = [y^2 , x^7 , x^6]
c = bivariate_bicycle_codes(A,B,GA)
A = x^5 + y^2 + y^3
B = y^2 + x^7 + x^6
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 150 && code_k(c) == 8

# [[196, 12, 8]]
l=14; m=7
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^6 , y^5 , y^6]
B = [one(x), x^4 , x^13]
c = bivariate_bicycle_codes(A,B,GA)
A = x^6 + y^5 + y^6
B = 1 + x^4 + x^13
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 196 && code_k(c) == 12
end

Expand All @@ -120,54 +120,54 @@
l=3; m=9
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [one(x), y^2, y^4]
B = [y^3 , x , x^2]
c = bivariate_bicycle_codes(A,B,GA)
A = 1 + y^2 + y^4
B = y^3 + x + x^2
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 54 && code_k(c) == 8

# [[98, 6, 12]]
l=7; m=7
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^3 , y^5 , y^6]
B = [y^2 , x^3 , x^5]
c = bivariate_bicycle_codes(A,B,GA)
A = x^3 + y^5 + y^6
B = y^2 + x^3 + x^5
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 98 && code_k(c) == 6

# [[126, 8, 10]]
l=3; m=21
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [one(x), y^2, y^10]
B = [y^3 , x , x^2]
c = bivariate_bicycle_codes(A,B,GA)
A = 1 + y^2 + y^10
B = y^3 + x + x^2
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 126 && code_k(c) == 8

# [[150, 16, 8]]
l=5; m=15
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [one(x), y^6, y^8]
B = [y^5 , x , x^4]
c = bivariate_bicycle_codes(A,B,GA)
A = 1 + y^6 + y^8
B = y^5 + x + x^4
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 150 && code_k(c) == 16

# [[162, 8, 14]]
l=3; m=27
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [one(x), y^10, y^14]
B = [y^12 , x , x^2]
c = bivariate_bicycle_codes(A,B,GA)
A = 1 + y^10 + y^14
B = y^12 + x + x^2
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 162 && code_k(c) == 8

# [[180, 8, 16]]
l=6; m=15
GA = group_algebra(GF(2), abelian_group([l, m]))
x, y = gens(GA)
A = [x^3 , y , y^2]
B = [y^6 , x^4 , x^5]
c = bivariate_bicycle_codes(A,B,GA)
A = x^3 + y + y^2
B = y^6 + x^4 + x^5
c = bivariate_bicycle_codes(A,B)
@test code_n(c) == 180 && code_k(c) == 8
end
end

0 comments on commit 8b5813f

Please sign in to comment.