Skip to content

Commit 2bc6388

Browse files
committed
improve code quality
1 parent ae51ea2 commit 2bc6388

File tree

2 files changed

+254
-224
lines changed

2 files changed

+254
-224
lines changed
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
@testitem "ECC 2BGA abelian and non-abelian groups via group presentation" begin
2+
using Nemo: FqFieldElem
3+
using Hecke: group_algebra, GF, abelian_group, gens, quo, one, GroupAlgebra
4+
using QuantumClifford.ECC
5+
using QuantumClifford.ECC: code_k, code_n, two_block_group_algebra_codes
6+
using Oscar: free_group, small_group_identification, describe, order, FPGroupElem, FPGroup, FPGroupElem
7+
8+
function get_code(a_elts::Vector{FPGroupElem}, b_elts::Vector{FPGroupElem}, F2G::GroupAlgebra{FqFieldElem, FPGroup, FPGroupElem})
9+
a = sum(F2G(x) for x in a_elts)
10+
b = sum(F2G(x) for x in b_elts)
11+
c = two_block_group_algebra_codes(a,b)
12+
return c
13+
end
14+
15+
@testset "Reproduce Table 1 Block 1" begin
16+
# [[72, 8, 9]]
17+
l = 36
18+
F = free_group(["r"])
19+
r = gens(F)[1]
20+
G, = quo(F, [r^l])
21+
F2G = group_algebra(GF(2), G)
22+
r = gens(G)[1]
23+
a_elts = [one(G), r^28]
24+
b_elts = [one(G), r, r^18, r^12, r^29, r^14]
25+
c = get_code(a_elts, b_elts, F2G)
26+
@test order(G) == l
27+
@test describe(G) == "C$l"
28+
@test code_n(c) == 72 && code_k(c) == 8
29+
# Oscar.describe(Oscar.small_group(l, 2)) is C₃₆, cross-check it with G
30+
@test small_group_identification(G) == (order(G), 2)
31+
end
32+
33+
@testset "Reproduce Table 1 Block 2" begin
34+
# [[72, 8, 9]]
35+
l = 9
36+
m = 4
37+
F = free_group(["r", "s"])
38+
r, s = gens(F)
39+
G, = quo(F, [s^m, r^l, s^(-1)*r*s*r])
40+
F2G = group_algebra(GF(2), G)
41+
r, s = gens(G)
42+
a_elts = [one(G), r]
43+
b_elts = [one(G), s, r^6, s^3 * r, s * r^7, s^3 * r^5]
44+
c = get_code(a_elts, b_elts, F2G)
45+
@test order(G) == l*m
46+
@test describe(G) == "C$l : C$m"
47+
@test code_n(c) == 72 && code_k(c) == 8
48+
# Oscar.describe(Oscar.small_group(l*m, 1)) is C₉ x C₄, cross-check it with G
49+
@test small_group_identification(G) == (order(G), 1)
50+
51+
# [[80, 8, 10]]
52+
l = 5
53+
m = 8
54+
F = free_group(["r", "s"])
55+
r, s = gens(F)
56+
G, = quo(F, [s^l, r^m, r^(-1)*s*r*s])
57+
F2G = group_algebra(GF(2), G)
58+
r, s = gens(G)
59+
a_elts = [one(G), s*r^4]
60+
b_elts = [one(G), r, r^2, s, s^3 * r, s^2 * r^6]
61+
c = get_code(a_elts, b_elts, F2G)
62+
@test order(G) == l*m
63+
@test describe(G) == "C$l : C$m"
64+
@test code_n(c) == 80 && code_k(c) == 8
65+
# Oscar.describe(Oscar.small_group(l*m, 1)) is C₅ x C₈, cross-check it with G
66+
@test small_group_identification(G) == (order(G), 1)
67+
end
68+
69+
@testset "Reproduce Table 1 Block 3" begin
70+
# [[54, 6, 9]]
71+
l = 27
72+
F = free_group(["r"])
73+
r = gens(F)[1]
74+
G, = quo(F, [r^l])
75+
F2G = group_algebra(GF(2), G)
76+
r = gens(G)[1]
77+
a_elts = [one(G), r, r^3, r^7]
78+
b_elts = [one(G), r, r^12, r^19]
79+
c = get_code(a_elts, b_elts, F2G)
80+
@test order(G) == l
81+
@test describe(G) == "C$l"
82+
@test code_n(c) == 54 && code_k(c) == 6
83+
# Oscar.describe(Oscar.small_group(l, 1)) is C₂₇, cross-check it with G
84+
@test small_group_identification(G) == (order(G), 1)
85+
86+
# [[60, 6, 10]]
87+
l = 30
88+
F = free_group(["r"])
89+
r = gens(F)[1]
90+
G, = quo(F, [r^l])
91+
F2G = group_algebra(GF(2), G)
92+
r = gens(G)[1]
93+
a_elts = [one(G), r^10, r^6, r^13]
94+
b_elts = [one(G), r^25, r^16, r^12]
95+
c = get_code(a_elts, b_elts, F2G)
96+
@test order(G) == l
97+
@test describe(G) == "C$l"
98+
@test code_n(c) == 60 && code_k(c) == 6
99+
# Oscar.describe(Oscar.small_group(l, 4)) is C₃₀, cross-check it with G
100+
@test small_group_identification(G) == (order(G), 4)
101+
102+
# [[70, 8, 10]]
103+
l = 35
104+
F = free_group(["r"])
105+
r = gens(F)[1]
106+
G, = quo(F, [r^l])
107+
F2G = group_algebra(GF(2), G)
108+
r = gens(G)[1]
109+
a_elts = [one(G), r^15, r^16, r^18]
110+
b_elts = [one(G), r, r^24, r^27]
111+
c = get_code(a_elts, b_elts, F2G)
112+
@test order(G) == l
113+
@test describe(G) == "C$l"
114+
@test code_n(c) == 70 && code_k(c) == 8
115+
# Oscar.describe(Oscar.small_group(l, 1)) is C₃₅, cross-check it with G
116+
@test small_group_identification(G) == (order(G), 1)
117+
118+
# [[72, 8, 10]]
119+
l = 36
120+
F = free_group(["r"])
121+
r = gens(F)[1]
122+
G, = quo(F, [r^l])
123+
F2G = group_algebra(GF(2), G)
124+
r = gens(G)[1]
125+
a_elts = [one(G), r^9, r^28, r^31]
126+
b_elts = [one(G), r, r^21, r^34]
127+
c = get_code(a_elts, b_elts, F2G)
128+
@test order(G) == l
129+
@test describe(G) == "C$l"
130+
@test code_n(c) == 72 && code_k(c) == 8
131+
# Oscar.describe(Oscar.small_group(l, 2)) is C₃₆, cross-check it with G
132+
@test small_group_identification(G) == (order(G), 2)
133+
134+
# [[72, 10, 9]]
135+
F = free_group(["r"])
136+
r = gens(F)[1]
137+
G, = quo(F, [r^l])
138+
F2G = group_algebra(GF(2), G)
139+
r = gens(G)[1]
140+
a_elts = [one(G), r^9, r^28, r^13]
141+
b_elts = [one(G), r, r^3, r^22]
142+
c = get_code(a_elts, b_elts, F2G)
143+
@test order(G) == l
144+
@test describe(G) == "C$l"
145+
@test code_n(c) == 72 && code_k(c) == 10
146+
# Oscar.describe(Oscar.small_group(l, 2)) is C₃₆, cross-check it with G
147+
@test small_group_identification(G) == (order(G), 2)
148+
end
149+
150+
@testset "Reproduce Table 1 Block 4" begin
151+
# [[72, 8, 9]]
152+
l = 9
153+
m = 4
154+
F = free_group(["r", "s"])
155+
r, s = gens(F)
156+
G, = quo(F, [s^m, r^l, s^(-1)*r*s*r])
157+
F2G = group_algebra(GF(2), G)
158+
r, s = gens(G)
159+
a_elts = [one(G), s, r, s*r^6]
160+
b_elts = [one(G), s^2*r, s^2*r^6, r^2]
161+
c = get_code(a_elts, b_elts, F2G)
162+
@test order(G) == l*m
163+
@test describe(G) == "C$l : C$m"
164+
@test code_n(c) == 72 && code_k(c) == 8
165+
# Oscar.describe(Oscar.small_group(l*m, 1)) is C₉ x C₄, cross-check it with G
166+
@test small_group_identification(G) == (order(G), 1)
167+
168+
# [[80, 8, 10]]
169+
l = 5
170+
m = 8
171+
F = free_group(["r", "s"])
172+
r, s = gens(F)
173+
G, = quo(F, [s^l, r^m, r^(-1)*s*r*s])
174+
F2G = group_algebra(GF(2), G)
175+
r, s = gens(G)
176+
a_elts = [one(G), r, s, s^3*r^5]
177+
b_elts = [one(G), r^2, s*r^4, s^3*r^2]
178+
c = get_code(a_elts, b_elts, F2G)
179+
@test order(G) == l*m
180+
@test describe(G) == "C$l : C$m"
181+
@test code_n(c) == 80 && code_k(c) == 8
182+
# Oscar.describe(Oscar.small_group(l*m, 1)) is C₅ x C₈, cross-check it with G
183+
@test small_group_identification(G) == (order(G), 1)
184+
185+
# [[96, 8, 12]]
186+
l = 3
187+
m = 16
188+
F = free_group(["r", "s"])
189+
r, s = gens(F)
190+
G, = quo(F, [s^l, r^m, r^(-1)*s*r*s])
191+
F2G = group_algebra(GF(2), G)
192+
r, s = gens(G)
193+
a_elts = [one(G), r, s, r^14]
194+
b_elts = [one(G), r^2, s*r^4, r^11]
195+
c = get_code(a_elts, b_elts, F2G)
196+
@test order(G) == l*m
197+
@test describe(G) == "C$l : C$m"
198+
@test code_n(c) == 96 && code_k(c) == 6
199+
# Oscar.describe(Oscar.small_group(l*m, 1)) is C₃ x C₁₆, cross-check it with G
200+
@test small_group_identification(G) == (order(G), 1)
201+
202+
# [[84, 10, 9]]
203+
l = 7
204+
m = 3
205+
F = free_group(["r", "s"])
206+
r, s = gens(F)
207+
G, = quo(F, [s^m, r^14, r^(-1)*s*r*s])
208+
F2G = group_algebra(GF(2), G)
209+
r, s = gens(G)
210+
a_elts = [one(G), r^7, r^8, s*r^10]
211+
b_elts = [one(G), s, r^5, s^2*r^13]
212+
c = get_code(a_elts, b_elts, F2G)
213+
@test order(G) == 2*l*m
214+
@test describe(G) == "C$l x S$m"
215+
@test code_n(c) == 84 && code_k(c) == 10
216+
# Oscar.describe(Oscar.small_group(2*l*m, 3)) is C₇ x S₃, cross-check it with G
217+
@test small_group_identification(G) == (order(G), 3)
218+
219+
# [[96, 6, 12]]
220+
l = 12
221+
m = 4
222+
F = free_group(["r", "s"])
223+
r, s = gens(F)
224+
G, = quo(F, [s^m, r^l, s^(-1)*r*s*r])
225+
F2G = group_algebra(GF(2), G)
226+
r, s = gens(G)
227+
a_elts = [one(G), s, r^9, s * r]
228+
b_elts = [one(G), s^2 * s^9, r^7, r^2]
229+
c = get_code(a_elts, b_elts, F2G)
230+
@test order(G) == l*m
231+
@test describe(G) == "C$l : C$m"
232+
@test code_n(c) == 96 && code_k(c) == 6
233+
# Oscar.describe(Oscar.small_group(l*m, 13)) is C₁₂ x C₄, cross-check it with G
234+
@test small_group_identification(G) == (order(G), 13)
235+
236+
# [[96, 12, 10]]
237+
l = 2
238+
m = 3
239+
n = 8
240+
F = free_group(["r", "s"])
241+
r, s = gens(F)
242+
G, = quo(F, [s^(l*m), r^n, r^(-1)*s*r*s])
243+
F2G = group_algebra(GF(2), G)
244+
r, s = gens(G)
245+
a_elts = [one(G), r, s^3 * r^2, s^2 * r^3]
246+
b_elts = [one(G), r, s^4 * r^6, s^5 * r^3]
247+
c = get_code(a_elts, b_elts, F2G)
248+
@test order(G) == l*m*n
249+
@test describe(G) == "C$l x (C$m : C$n)"
250+
@test code_n(c) == 96 && code_k(c) == 12
251+
# Oscar.describe(Oscar.small_group(l*m*n, 9)) is C₂ x (C₃ : C₈), cross-check it with G
252+
@test small_group_identification(G) == (order(G), 9)
253+
end
254+
end

0 commit comments

Comments
 (0)