Skip to content

Commit 2034061

Browse files
committed
add code review suggestions
1 parent 4b36f68 commit 2034061

File tree

6 files changed

+59
-46
lines changed

6 files changed

+59
-46
lines changed

Manifest.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,9 +1027,9 @@ version = "0.12.1+0"
10271027

10281028
[[deps.libsingular_julia_jll]]
10291029
deps = ["Artifacts", "JLLWrappers", "Libdl", "Singular_jll", "libcxxwrap_julia_jll"]
1030-
git-tree-sha1 = "ab24eb5706b1d1a1b5037951a382b0c4fd6edf5b"
1030+
git-tree-sha1 = "436efe88c41337fd128062555fe8f8ea6c0e7309"
10311031
uuid = "ae4fbd8f-ecdb-54f8-bbce-35570499b30e"
1032-
version = "0.45.5+0"
1032+
version = "0.45.6+0"
10331033

10341034
[[deps.lrslib_jll]]
10351035
deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Pkg"]

docs/src/Quantum/product_codes.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
- [Generealized bicycle](https://errorcorrectionzoo.org/c/generalized_bicycle): [pryadko2013quantum](@cite), [Kovalev_2013](@cite), [panteleev2021degenerate](@cite)
77
- Generalized hypergraph product: [panteleev2021degenerate](@cite)
88
- Bias-tailored lifted product: [roffe2023bias](@cite)
9+
- Bivariate bicycle: [wang2024coprime](@cite)
10+
- Coprime bivarate bicycle: [wang2024coprime](@cite)
911

1012

1113
```@autodocs

docs/src/references.bib

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,21 @@ @inproceedings{yao2024belief
183183
year={2024},
184184
organization={IEEE}
185185
}
186+
187+
@article{bravyi2024high,
188+
title={High-threshold and low-overhead fault-tolerant quantum memory},
189+
author={Bravyi, Sergey and Cross, Andrew W and Gambetta, Jay M and Maslov, Dmitri and Rall, Patrick and Yoder, Theodore J},
190+
journal={Nature},
191+
volume={627},
192+
number={8005},
193+
pages={778--782},
194+
year={2024},
195+
publisher={Nature Publishing Group UK London}
196+
}
197+
198+
@article{wang2024coprime,
199+
title={Coprime Bivariate Bicycle Codes and their Properties},
200+
author={Wang, Ming and Mueller, Frank},
201+
journal={arXiv preprint arXiv:2408.10001},
202+
year={2024}
203+
}

src/CodingTheory.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ export HypergraphProductCode, GeneralizedShorCode, BaconCasaccinoConstruction,
378378
GeneralizedHypergraphProductCode, LiftedProductCode, bias_tailored_lifted_product_matrices,
379379
BiasTailoredLiftedProductCode, SPCDFoldProductCode, SingleParityCheckDFoldProductCode,
380380
Quintavalle_basis, asymmetric_product, symmetric_product, random_homological_product_code,
381-
homological_product, , BivariateBicycleCode, CoPrimeBivariateBicycleCode
381+
homological_product, , BivariateBicycleCode, CoprimeBivariateBicycleCode
382382

383383
#############################
384384
# Quantum/simulation.jl

src/Quantum/product_codes.jl

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -956,7 +956,7 @@ Return the coprime bivariate bicycle code defined by the residue ring elements `
956956
# Note
957957
- This is defined in https://arxiv.org/pdf/2408.10001v1.
958958
"""
959-
function CoPrimeBivariateBicycleCode(a::T, b::T, l::Int, m::Int) where T <: Union{MPolyQuoRingElem{FqMPolyRingElem}, MPolyQuoRingElem{fpMPolyRingElem}}
959+
function CoprimeBivariateBicycleCode(a::T, b::T, l::Int, m::Int) where T <: Union{MPolyQuoRingElem{FqMPolyRingElem}, MPolyQuoRingElem{fpMPolyRingElem}}
960960
R = parent(a)
961961
R == parent(b) || throw(DomainError("Polynomials must have the same parent."))
962962
F = base_ring(base_ring(a))
@@ -968,26 +968,18 @@ function CoPrimeBivariateBicycleCode(a::T, b::T, l::Int, m::Int) where T <: Unio
968968
gcd([l, m]) == 1 || throw(DomainError("l and m must be coprime numbers."))
969969
x = matrix(F, [mod1(i + 1, l) == j ? 1 : 0 for i in 1:l, j in 1:l]) identity_matrix(F, m)
970970
y = identity_matrix(F, l) matrix(F, [mod1(i + 1, m) == j ? 1 : 0 for i in 1:m, j in 1:m])
971-
971+
P = x*y
972972
A = zero_matrix(F, l * m, l * m)
973973
for ex in exponents(lift(a))
974-
power, which = findmax(ex)
975-
if which == 1
976-
A += x^power
977-
elseif which == 2
978-
A += y^power
979-
end
974+
power, _ = findmax(ex)
975+
A += P^power
980976
end
981977

982978
B = zero_matrix(F, l * m, l * m)
983979
for ex in exponents(lift(b))
984-
power, which = findmax(ex)
985-
if which == 1
986-
B += x^power
987-
elseif which == 2
988-
B += y^power
989-
end
980+
power, _ = findmax(ex)
981+
B += P^power
990982
end
991983

992984
return CSSCode(hcat(A, B), hcat(transpose(B), transpose(A)))
993-
end
985+
end

test/Quantum/product_codes_test.jl

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -607,60 +607,61 @@
607607
@test dimension(Q) == 12
608608
@test_broken minimum_distance(S) == 8
609609

610-
# co-prime bivariate bicycle codes
610+
# Coprime Bivariate Bicycle codes
611+
# Table 2 of https://arxiv.org/pdf/2408.10001v1
611612
# [[30, 4, 6]]
612-
S, (π) = polynomial_ring(Oscar.Nemo.Native.GF(2), [:π])
613+
S, (P) = polynomial_ring(Oscar.Nemo.Native.GF(2), [:P])
613614
l = 3
614615
m = 5
615-
R, _ = quo(S, ideal(S, [π[1]^(l*m)]))
616-
a = R(1 + π[1] + π[1]^2)
617-
b = R(π[1] + π[1]^3 + π[1]^8)
618-
Q = CoPrimeBivariateBicycleCode(a, b, l, m)
616+
R, _ = quo(S, ideal(S, [P[1]^(l*m)]))
617+
a = R(1 + P[1] + P[1]^2)
618+
b = R(P[1] + P[1]^3 + P[1]^8)
619+
Q = CoprimeBivariateBicycleCode(a, b, l, m)
619620
@test length(Q) == 30
620-
@test_broken dimension(code) == 4
621+
@test dimension(Q) == 4
621622
@test_broken minimum_distance(S) == 6
622-
623+
623624
# [[42, 6, 6]]
624625
l = 3
625626
m = 7
626-
R, _ = quo(S, ideal(S, [π[1]^(l*m)]))
627-
a = R(1 + π[1]^2 + π[1]^3)
628-
b = R(π[1] + π[1]^3 + π[1]^11)
629-
Q = CoPrimeBivariateBicycleCode(a, b, l, m)
627+
R, _ = quo(S, ideal(S, [P[1]^(l*m)]))
628+
a = R(1 + P[1]^2 + P[1]^3)
629+
b = R(P[1] + P[1]^3 + P[1]^11)
630+
Q = CoprimeBivariateBicycleCode(a, b, l, m)
630631
@test length(Q) == 42
631-
@test_broken dimension(Q) == 6
632+
@test dimension(Q) == 6
632633
@test_broken minimum_distance(S) == 6
633634

634635
# [[70, 6, 8]]
635636
l = 5
636637
m = 7
637-
R, _ = quo(S, ideal(S, [π[1]^(l*m)]))
638-
a = R(1 + π[1]^2 + π[1]^5)
639-
b = R(1 + π[1] + π[1]^12)
640-
Q = CoPrimeBivariateBicycleCode(a, b, l, m)
638+
R, _ = quo(S, ideal(S, [P[1]^(l*m)]))
639+
a = R(1 + P[1] + P[1]^5)
640+
b = R(1 + P[1] + P[1]^12)
641+
Q = CoprimeBivariateBicycleCode(a, b, l, m)
641642
@test length(Q) == 70
642-
@test_broken dimension(Q) == 6
643+
@test dimension(Q) == 6
643644
@test_broken minimum_distance(S) == 8
644645

645646
# [[108, 12, 6]]
646647
l = 2
647648
m = 27
648-
R, _ = quo(S, ideal(S, [π[1]^(l*m)]))
649-
a = R(π[1]^2 + π[1]^5 + π[1]^44)
650-
b = R(π[1]^8 + π[1]^14 + π[1]^47)
651-
Q = CoPrimeBivariateBicycleCode(a, b, l, m)
649+
R, _ = quo(S, ideal(S, [P[1]^(l*m)]))
650+
a = R(P[1]^2 + P[1]^5 + P[1]^44)
651+
b = R(P[1]^8 + P[1]^14 + P[1]^47)
652+
Q = CoprimeBivariateBicycleCode(a, b, l, m)
652653
@test length(Q) == 108
653-
@test_broken dimension(Q) == 12
654+
@test dimension(Q) == 12
654655
@test_broken minimum_distance(S) == 6
655656

656657
# [126, 12, 10]]
657658
l = 7
658659
m = 9
659-
R, _ = quo(S, ideal(S, [π[1]^(l*m)]))
660-
a = R(1 + π[1] + π[1]^58)
661-
b = R(π[1]^3 + π[1]^16 + π[1]^44)
662-
Q = CoPrimeBivariateBicycleCode(a, b, l, m)
660+
R, _ = quo(S, ideal(S, [P[1]^(l*m)]))
661+
a = R(1 + P[1] + P[1]^58)
662+
b = R(P[1]^3 + P[1]^16 + P[1]^44)
663+
Q = CoprimeBivariateBicycleCode(a, b, l, m)
663664
@test length(Q) == 126
664-
@test_broken dimension(Q) == 12
665+
@test dimension(Q) == 12
665666
@test_broken dimension(Q) == 10
666667
end

0 commit comments

Comments
 (0)