Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagelib
Path: blob/master/sage/coding/sd_codes.py
4034 views
1
r"""
2
Binary self-dual codes
3
4
This module implements functions useful for studying binary
5
self-dual codes.
6
The main function is ``self_dual_codes_binary``,
7
which is a case-by-case list of entries, each represented by a
8
Python dictionary.
9
10
Format of each entry: a Python dictionary with keys "order
11
autgp", "spectrum", "code", "Comment", "Type", where
12
13
- "code" - a sd code C of length n, dim n/2, over GF(2)
14
15
- "order autgp" - order of the permutation automorphism group of C
16
17
- "Type" - the type of C (which can be "I" or "II", in the binary case)
18
19
- "spectrum" - the spectrum [A0,A1,...,An]
20
21
- "Comment" - possibly an empty string.
22
23
Python dictionaries were used since they seemed to be both
24
human-readable and allow others to update the database easiest.
25
26
- The following double for loop can be time-consuming but should
27
be run once in awhile for testing purposes. It should only print
28
True and have no trace-back errors::
29
30
for n in [4,6,8,10,12,14,16,18,20,22]:
31
C = self_dual_codes_binary(n); m = len(C.keys())
32
for i in range(m):
33
C0 = C["%s"%n]["%s"%i]["code"]
34
print n, ' ',i, ' ',C["%s"%n]["%s"%i]["spectrum"] == C0.spectrum()
35
print C0 == C0.dual_code()
36
G = C0.automorphism_group_binary_code()
37
print C["%s"%n]["%s"%i]["order autgp"] == G.order()
38
39
- To check if the "Riemann hypothesis" holds, run the following
40
code::
41
42
R = PolynomialRing(CC,"T")
43
T = R.gen()
44
for n in [4,6,8,10,12,14,16,18,20,22]:
45
C = self_dual_codes_binary(n); m = len(C["%s"%n].keys())
46
for i in range(m):
47
C0 = C["%s"%n]["%s"%i]["code"]
48
if C0.minimum_distance()>2:
49
f = R(C0.sd_zeta_polynomial())
50
print n,i,[z[0].abs() for z in f.roots()]
51
52
53
You should get lists of numbers equal to 0.707106781186548.
54
55
Here's a rather naive construction of self-dual codes in the binary
56
case:
57
58
For even m, let A_m denote the mxm matrix over GF(2) given by adding
59
the all 1's matrix to the identity matrix (in
60
``MatrixSpace(GF(2),m,m)`` of course). If M_1, ..., M_r are square
61
matrices, let `diag(M_1,M_2,...,M_r)` denote the"block diagonal"
62
matrix with the `M_i` 's on the diagonal and 0's elsewhere. Let
63
`C(m_1,...,m_r,s)` denote the linear code with generator matrix
64
having block form `G = (I, A)`, where
65
`A = diag(A_{m_1},A_{m_2},...,A_{m_r},I_s)`, for some
66
(even) `m_i` 's and `s`, where
67
`m_1+m_2+...+m_r+s=n/2`. Note: Such codes
68
`C(m_1,...,m_r,s)` are SD.
69
70
SD codes not of this form will be called (for the purpose of
71
documenting the code below) "exceptional". Except when n is
72
"small", most sd codes are exceptional (based on a counting
73
argument and table 9.1 in the Huffman+Pless [HP], page 347).
74
75
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
76
77
AUTHORS:
78
79
- David Joyner (2007-08-11)
80
81
REFERENCES:
82
83
- [HP] W. C. Huffman, V. Pless, Fundamentals of
84
Error-Correcting Codes, Cambridge Univ. Press, 2003.
85
86
- [P] V. Pless,
87
"A classification of self-orthogonal codes over GF(2)", Discrete
88
Math 3 (1972) 209-246.
89
"""
90
from sage.rings.finite_rings.constructor import FiniteField as GF
91
from sage.matrix.matrix_space import MatrixSpace
92
from linear_code import LinearCode
93
from sage.matrix.constructor import block_diagonal_matrix
94
from sage.rings.integer_ring import ZZ
95
from sage.groups.perm_gps.permgroup import PermutationGroup
96
97
F = GF(2)
98
99
def MS(n):
100
r"""
101
For internal use; returns the floor(n/2) x n matrix space over GF(2).
102
103
EXAMPLES::
104
105
sage: import sage.coding.sd_codes as sd_codes
106
sage: sd_codes.MS(2)
107
Full MatrixSpace of 1 by 2 dense matrices over Finite Field of size 2
108
sage: sd_codes.MS(3)
109
Full MatrixSpace of 1 by 3 dense matrices over Finite Field of size 2
110
sage: sd_codes.MS(8)
111
Full MatrixSpace of 4 by 8 dense matrices over Finite Field of size 2
112
"""
113
n2 = ZZ(n)/2; return MatrixSpace(F, n2, n)
114
115
def matA(n):
116
r"""
117
For internal use; returns a list of square matrices over GF(2) `(a_{ij})`
118
of sizes 0 x 0, 1 x 1, ..., n x n which are of the form
119
`(a_{ij} = 1) + (a_{ij} = \delta_{ij})`.
120
121
EXAMPLES::
122
123
sage: import sage.coding.sd_codes as sd_codes
124
sage: sd_codes.matA(4)
125
[
126
[0 1 1]
127
[0 1] [1 0 1]
128
[], [0], [1 0], [1 1 0]
129
]
130
"""
131
A = []
132
n2 = n.quo_rem(2)[0]
133
for j in range(n2+2):
134
MS0 = MatrixSpace(F, j, j)
135
I = MS0.identity_matrix()
136
O = MS0(j*j*[1])
137
A.append(I+O)
138
return A
139
140
def matId(n):
141
r"""
142
For internal use; returns a list of identity matrices over GF(2)
143
of sizes (floor(n/2)-j) x (floor(n/2)-j) for j = 0 ... (floor(n/2)-1).
144
145
EXAMPLES::
146
147
sage: import sage.coding.sd_codes as sd_codes
148
sage: sd_codes.matId(6)
149
[
150
[1 0 0]
151
[0 1 0] [1 0]
152
[0 0 1], [0 1], [1]
153
]
154
"""
155
Id = []
156
n2 = n.quo_rem(2)[0]
157
for j in range(n2):
158
MSn = MatrixSpace(F, n2-j, n2-j)
159
Id.append(MSn.identity_matrix())
160
return Id
161
162
def MS2(n):
163
r"""
164
For internal use; returns the floor(n/2) x floor(n/2) matrix space over GF(2).
165
166
EXAMPLES::
167
168
sage: import sage.coding.sd_codes as sd_codes
169
sage: sd_codes.MS2(8)
170
Full MatrixSpace of 4 by 4 dense matrices over Finite Field of size 2
171
"""
172
n2 = n.quo_rem(2)[0]
173
return MatrixSpace(F, n2, n2)
174
175
I2 = lambda n: MS2(n).identity_matrix()
176
# non-diagonal constructions
177
MS7 = MatrixSpace(F, 7, 7)
178
And7 = MS7([[1, 1, 1, 0, 0, 1, 1],\
179
[1, 1, 1, 0, 1, 0, 1],\
180
[1, 1, 1, 0, 1, 1, 0],\
181
[0, 0, 0, 0, 1, 1, 1],\
182
[0, 1, 1, 1, 0, 0, 0],\
183
[1, 0, 1, 1, 0, 0, 0],\
184
[1, 1, 0, 1, 0, 0, 0]])
185
MS8 = MatrixSpace(ZZ, 8, 8)
186
H8 = MS8([[1, 1, 1, 1, 1, 1, 1, 1],\
187
[1, -1, 1, -1, 1, -1, 1, -1],\
188
[1, 1, -1, -1, 1, 1, -1, -1],\
189
[1, -1, -1, 1, 1, -1, -1, 1],\
190
[1, 1, 1, 1, -1, -1, -1, -1],\
191
[1, -1, 1, -1, -1, 1, -1, 1],\
192
[1, 1, -1, -1, -1, -1, 1, 1],\
193
[1, -1, -1, 1, -1, 1, 1, -1]]) # used Guava's Hadamard matrices database
194
195
# Remark: The above matrix constructions aid in computing some "small" self-dual codes.
196
197
############## main functions ##############
198
199
def self_dual_codes_binary(n):
200
r"""
201
Returns the dictionary of inequivalent sd codes of length n.
202
203
For n=4 even, returns the sd codes of a given length, up to (perm)
204
equivalence, the (perm) aut gp, and the type.
205
206
The number of inequiv "diagonal" sd binary codes in the database of
207
length n is ("diagonal" is defined by the conjecture above) is the
208
same as the restricted partition number of n, where only integers
209
from the set 1,4,6,8,... are allowed. This is the coefficient of
210
`x^n` in the series expansion
211
`(1-x)^{-1}\prod_{2^\infty (1-x^{2j})^{-1}}`. Typing the
212
command f = (1-x)(-1)\*prod([(1-x(2\*j))(-1) for j in range(2,18)])
213
into Sage, we obtain for the coeffs of `x^4`,
214
`x^6`, ... [1, 1, 2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 15, 15,
215
22, 22, 30, 30, 42, 42, 56, 56, 77, 77, 101, 101, 135, 135, 176,
216
176, 231] These numbers grow too slowly to account for all the sd
217
codes (see Huffman+Pless' Table 9.1, referenced above). In fact, in
218
Table 9.10 of [HP], the number B_n of inequivalent sd binary codes
219
of length n is given::
220
221
n 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
222
B_n 1 1 1 2 2 3 4 7 9 16 25 55 103 261 731
223
224
According to http://oeis.org/classic/A003179,
225
the next 2 entries are: 3295, 24147.
226
227
EXAMPLES::
228
229
sage: C = self_dual_codes_binary(10)
230
sage: C["10"]["0"]["code"] == C["10"]["0"]["code"].dual_code()
231
True
232
sage: C["10"]["1"]["code"] == C["10"]["1"]["code"].dual_code()
233
True
234
sage: len(C["10"].keys()) # number of inequiv sd codes of length 10
235
2
236
sage: C = self_dual_codes_binary(12)
237
sage: C["12"]["0"]["code"] == C["12"]["0"]["code"].dual_code()
238
True
239
sage: C["12"]["1"]["code"] == C["12"]["1"]["code"].dual_code()
240
True
241
sage: C["12"]["2"]["code"] == C["12"]["2"]["code"].dual_code()
242
True
243
"""
244
sd_codes = {}
245
246
if n == 4:
247
# this code is Type I
248
# [4,0]:
249
genmat = I2(n).augment(I2(n))
250
# G = PermutationGroup([ "(2,4)", "(1,2)(3,4)" ])
251
spectrum = [1, 0, 2, 0, 1]
252
sd_codes_4_0 = {"order autgp":8,"code":LinearCode(genmat),"spectrum":spectrum,\
253
"Type":"I","Comment":"Unique."}
254
sd_codes["4"] = {"0":sd_codes_4_0}
255
return sd_codes
256
257
if n == 6:
258
# this is Type I
259
# [6,0]:
260
genmat = I2(n).augment(I2(n))
261
# G = PermutationGroup( ["(3,6)", "(2,3)(5,6)", "(1,2)(4,5)"] )
262
spectrum = [1, 0, 3, 0, 3, 0, 1]
263
sd_codes_6_0 = {"order autgp":48,"code":LinearCode(genmat),"spectrum":spectrum,\
264
"Type":"I","Comment":"Unique"}
265
sd_codes["6"] = {"0":sd_codes_6_0}
266
return sd_codes
267
268
if n == 8:
269
# the first code is Type I, the second is Type II
270
# the second code is equiv to the extended Hamming [8,4,4] code.
271
# [8,0]:
272
genmat = I2(n).augment(I2(n))
273
# G = PermutationGroup( ["(4,8)", "(3,4)(7,8)", "(2,3)(6,7)", "(1,2)(5,6)"] )
274
spectrum = [1, 0, 4, 0, 6, 0, 4, 0, 1]
275
sd_codes_8_0 = {"order autgp":384,"code":LinearCode(genmat),"spectrum":spectrum,\
276
"Type":"I","Comment":"Unique Type I of this length."}
277
# [8,1]:
278
genmat = I2(n).augment(matA(n)[4])
279
# G = PermutationGroup( ["(4,5)(6,7)", "(4,6)(5,7)", "(3,4)(7,8)",\
280
# "(2,3)(6,7)", "(1,2)(5,6)"] )
281
spectrum = [1, 0, 0, 0, 14, 0, 0, 0, 1]
282
sd_codes_8_1 = {"order autgp":1344,"code":LinearCode(genmat),"spectrum":spectrum,\
283
"Type":"II","Comment":"Unique Type II of this length."}
284
sd_codes["8"] = {"0":sd_codes_8_0,"1":sd_codes_8_1}
285
return sd_codes
286
287
if n == 10:
288
# Both of these are Type I; one has a unique lowest weight codeword
289
# [10,0]:
290
genmat = I2(n).augment(I2(n))
291
# G = PermutationGroup( ["(5,10)", "(4,5)(9,10)", "(3,4)(8,9)",\
292
# "(2,3)(7,8)", "(1,2)(6,7)"] )
293
spectrum = [1, 0, 5, 0, 10, 0, 10, 0, 5, 0, 1]
294
sd_codes_10_0 = {"order autgp":3840,"code":LinearCode(genmat),"spectrum":spectrum,\
295
"Type":"I","Comment":"No Type II of this length."}
296
# [10,1]:
297
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matId(n)[4]]))
298
# G = PermutationGroup( ["(5,10)", "(4,6)(7,8)", "(4,7)(6,8)", "(3,4)(8,9)",\
299
# "(2,3)(7,8)", "(1,2)(6,7)"] )
300
spectrum = [1, 0, 1, 0, 14, 0, 14, 0, 1, 0, 1]
301
sd_codes_10_1 = {"order autgp":2688,"code":LinearCode(genmat),"spectrum":spectrum,\
302
"Type":"I","Comment":"Unique lowest weight nonzero codeword."}
303
sd_codes["10"] = {"0":sd_codes_10_0,"1":sd_codes_10_1}
304
return sd_codes
305
306
if n == 12:
307
# all of these are Type I
308
# [12,0]:
309
genmat = I2(n).augment(I2(n))
310
# G = PermutationGroup( ["(6,12)", "(5,6)(11,12)", "(4,5)(10,11)", "(3,4)(9,10)",\
311
# "(2,3)(8,9)", "(1,2)(7,8)"] )
312
spectrum = [1, 0, 6, 0, 15, 0, 20, 0, 15, 0, 6, 0, 1]
313
sd_codes_12_0 = {"order autgp":48080,"code":LinearCode(genmat),"spectrum":spectrum,\
314
"Type":"I","Comment":"No Type II of this length."}
315
# [12,1]:
316
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matId(n)[4]]))
317
# G = PermutationGroup( ["(2,3)(4,7)", "(2,4)(3,7)", "(2,4,9)(3,7,8)", "(2,4,8,10)(3,9)",\
318
# "(1,2,4,7,8,10)(3,9)", "(2,4,8,10)(3,9)(6,12)", "(2,4,8,10)(3,9)(5,6,11,12)"] )
319
spectrum = [1, 0, 2, 0, 15, 0, 28, 0, 15, 0, 2, 0, 1]
320
sd_codes_12_1 = {"order autgp":10752,"code":LinearCode(genmat),"spectrum":spectrum,\
321
"Type":"I","Comment":"Smallest automorphism group of these."}
322
# [12,2]:
323
genmat = I2(n).augment(matA(n)[6])
324
# G = PermutationGroup( ["(5,6)(11,12)", "(5,11)(6,12)", "(4,5)(10,11)", "(3,4)(9,10)",\
325
# "(2,3)(8,9)", "(1,2)(7,8)"] )
326
spectrum = [1, 0, 0, 0, 15, 0, 32, 0, 15, 0, 0, 0, 1]
327
sd_codes_12_2 = {"order autgp":23040,"code":LinearCode(genmat),"spectrum":spectrum,\
328
"Type":"I","Comment":"Largest minimum distance of these."}
329
sd_codes["12"] = {"0":sd_codes_12_0,"1":sd_codes_12_1,"2":sd_codes_12_2}
330
return sd_codes
331
332
if n == 14:
333
# all of these are Type I; one has a unique lowest weight codeword
334
# (there are 4 total inequiv sd codes of n = 14, by Table 9.10 [HP])
335
# [14,0]:
336
genmat = I2(n).augment(I2(n))
337
# G = PermutationGroup( ["(7,14)", "(6,7)(13,14)", "(5,6)(12,13)", "(4,5)(11,12)",\
338
# "(3,4)(10,11)", "(2,3)(9,10)", "(1,2)(8,9)"] )
339
spectrum = [1, 0, 7, 0, 21, 0, 35, 0, 35, 0, 21, 0, 7, 0, 1]
340
sd_codes_14_0 = {"order autgp":645120,"code":LinearCode(genmat),"spectrum":spectrum,\
341
"Type":"I","Comment":"No Type II of this length. Huge aut gp."}
342
# [14,1]:
343
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matId(n)[4]]))
344
# G = PermutationGroup( ["(7,14)", "(6,7)(13,14)", "(5,6)(12,13)", "(4,8)(9,10)",\
345
# "(4,9)(8,10)", "(3,4)(10,11)", "(2,3)(9,10)", "(1,2)(8,9)"] )
346
spectrum = [1, 0, 3, 0, 17, 0, 43, 0, 43, 0, 17, 0, 3, 0, 1]
347
sd_codes_14_1 = {"order autgp":64512,"code":LinearCode(genmat),"spectrum":spectrum,\
348
"Type":"I","Comment":"Automorphism group has order 64512."}
349
# [14,2]:
350
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[6],matId(n)[6]]))
351
# G = PermutationGroup( ["(7,14)", "(5,6)(12,13)", "(5,12)(6,13)", "(4,5)(11,12)",\
352
# "(3,4)(10,11)", "(2,3)(9,10)", "(1,2)(8,9)"] )
353
spectrum = [1, 0, 1, 0, 15, 0, 47, 0, 47, 0, 15, 0, 1, 0, 1]
354
sd_codes_14_2 = {"order autgp":46080,"code":LinearCode(genmat),"spectrum":spectrum,\
355
"Type":"I","Comment":"Unique codeword of weight 2."}
356
# [14,3]:
357
genmat = I2(n).augment(And7)
358
# G = PermutationGroup( ["(7,11)(12,13)", "(7,12)(11,13)", "(6,9)(10,14)",\
359
# "(6,10)(9,14)", "(5,6)(8,9)", "(4,5)(9,10), (2,3)(11,12)", "(2,7)(3,13)",\
360
# "(1,2)(12,13)", "(1,4)(2,5)(3,8)(6,7)(9,13)(10,12)(11,14)"])
361
spectrum = [1, 0, 0, 0, 14, 0, 49, 0, 49, 0, 14, 0, 0, 0, 1]
362
sd_codes_14_3 = {"order autgp":56448,"code":LinearCode(genmat),"spectrum":spectrum,\
363
"Type":"I","Comment":"Largest minimum distance of these."}
364
sd_codes["14"] = {"0":sd_codes_14_0,"1":sd_codes_14_1,"2":sd_codes_14_2,\
365
"3":sd_codes_14_3}
366
return sd_codes
367
368
if n == 16:
369
# 4 of these are Type I, 2 are Type II. The 2 Type II codes
370
# are formally equivalent but with different automorphism groups
371
# [16,0]:
372
genmat = I2(n).augment(I2(n))
373
# G = PermutationGroup( [ "(8,16)", "(7,8)(15,16)", "(6,7)(14,15)", "(5,6)(13,14)",
374
# "(4,5)(12,13)", "(3,4)(11,12)", "(2,3)(10,11)", "(1,2)(9,10)"] )
375
spectrum = [1, 0, 8, 0, 28, 0, 56, 0, 70, 0, 56, 0, 28, 0, 8, 0, 1]
376
sd_codes_16_0 = {"order autgp":10321920,"code":LinearCode(genmat),"spectrum":spectrum,\
377
"Type":"I","Comment":"Huge aut gp."}
378
# [16,1]:
379
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matId(n)[4]]))
380
# G = PermutationGroup( [ "(8,16)", "(7,8)(15,16)", "(6,7)(14,15)", "(5,6)(13,14)",\
381
# "(4,9)(10,11)", "(4,10)(9,11)", "(3,4)(11,12)", "(2,3)(10,11)", "(1,2)(9,10)"] )
382
spectrum = [1, 0, 4, 0, 20, 0, 60, 0, 86, 0, 60, 0, 20, 0, 4, 0, 1]
383
sd_codes_16_1 = {"order autgp":516096,"code":LinearCode(genmat),"spectrum":spectrum,\
384
"Type":"I","Comment":""}
385
# [16,2]:
386
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matA(n)[4]]))
387
# G = PermutationGroup( [ "(8,13)(14,15)", "(8,14)(13,15)", "(7,8)(15,16)", "(6,7)(14,15)",\
388
# "(5,6)(13,14)", "(4,9)(10,11)", "(4,10)(9,11)", "(3,4)(11,12)", "(2,3)(10,11)",\
389
# "(1,2)(9,10)","(1,5)(2,6)(3,7)(4,8)(9,13)(10,14)(11,15)(12,16)"] )
390
spectrum = [1, 0, 0, 0, 28, 0, 0, 0, 198, 0, 0, 0, 28, 0, 0, 0, 1]
391
sd_codes_16_2 = {"order autgp":3612672,"code":LinearCode(genmat),"spectrum":spectrum,\
392
"Type":"II","Comment":"Same spectrum as the other Type II code."}
393
# [16,3]:
394
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[6],matId(n)[6]]))
395
# G = PermutationGroup( [ "(8,16)", "(7,8)(15,16)", "(5,6)(13,14)", "(5,13)(6,14)",\
396
# "(4,5)(12,13)", "(3,4)(11,12)", "(2,3)(10,11)", "(1,2)(9,10)"] )
397
spectrum = [1, 0, 2, 0, 16, 0, 62, 0, 94, 0, 62, 0, 16, 0, 2, 0, 1]
398
sd_codes_16_3 = {"order autgp":184320,"code":LinearCode(genmat),"spectrum":spectrum,\
399
"Type":"I","Comment":""}
400
# [16,4]:
401
genmat = I2(n).augment(matA(n)[8])
402
# an equivalent form: See also [20,8] using A[10]
403
# [(1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1),
404
# (0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1),
405
# (0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0),
406
# (0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0),
407
# (0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0),
408
# (0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0),
409
# (0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0),
410
# (0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1)]
411
# G = PermutationGroup( [ "(7,8)(15,16)", "(7,15)(8,16)", "(6,7)(14,15)",\
412
# "(5,6)(13,14)","(4,5)(12,13)","(3,4)(11,12)", "(2,3)(10,11)", "(1,2)(9,10)"] )
413
spectrum = [1, 0, 0, 0, 28, 0, 0, 0, 198, 0, 0, 0, 28, 0, 0, 0, 1]
414
sd_codes_16_4 = {"order autgp":5160960,"code":LinearCode(genmat),"spectrum":spectrum,\
415
"Type":"II","Comment":"Same spectrum as the other Type II code. Large aut gp."}
416
# [16,5]:
417
genmat = I2(n).augment(block_diagonal_matrix([And7,matId(n)[7]]))
418
# G = PermutationGroup( [ "(8,16)", "(7,12)(13,14)", "(7,13)(12,14)",\
419
# "(6,10)(11,15)", "(6,11)(10,15)", "(5,6)(9,10)", "(4,5)(10,11)",\
420
# "(2,3)(12,13)", "(2,7)(3,14)", "(1,2)(13,14)",\
421
# "(1,4)(2,5)(3,9)(6,7)(10,14)(11,13)(12,15)" ] )
422
spectrum = [1, 0, 1, 0, 14, 0, 63, 0, 98, 0, 63, 0, 14, 0, 1, 0, 1]
423
sd_codes_16_5 = {"order autgp":112896,"code":LinearCode(genmat),"spectrum":spectrum,\
424
"Type":"I","Comment":"'Exceptional' construction."}
425
# [16,6]:
426
J8 = MatrixSpace(ZZ,8,8)(64*[1])
427
genmat = I2(n).augment(I2(n)+MS2(n)((H8+J8)/2))
428
# G = PermutationGroup( [ "(7,9)(10,16)", "(7,10)(9,16)", "(6,7)(10,11)",\
429
# "(4,6)(11,13)", "(3,5)(12,14)", "(3,12)(5,14)", "(2,3)(14,15)",\
430
# "(1,2)(8,15)", "(1,4)(2,6)(3,7)(5,16)(8,13)(9,12)(10,14)(11,15)" ] )
431
spectrum = [1, 0, 0, 0, 12, 0, 64, 0, 102, 0, 64, 0, 12, 0, 0, 0, 1]
432
sd_codes_16_6 = {"order autgp":73728,"code":LinearCode(genmat),"spectrum":spectrum,\
433
"Type":"I","Comment":"'Exceptional' construction. Min dist 4."}
434
sd_codes["16"] = {"0":sd_codes_16_0,"1":sd_codes_16_1,"2":sd_codes_16_2,\
435
"3":sd_codes_16_3,"4":sd_codes_16_4,"5":sd_codes_16_5,"6":sd_codes_16_6}
436
return sd_codes
437
438
if n == 18:
439
# all of these are Type I, all are "extensions" of the n=16 codes
440
# [18,3] and [18,4] each has a unique lowest weight codeword. Also, they
441
# are formally equivalent but with different automorphism groups
442
# [18,0]:
443
genmat = I2(n).augment(I2(n))
444
# G = PermutationGroup( [ "(9,18)", "(8,9)(17,18)", "(7,8)(16,17)", "(6,7)(15,16)",\
445
# "(5,6)(14,15)", "(4,5)(13,14)", "(3,4)(12,13)", "(2,3)(11,12)", "(1,2)(10,11)" ] )
446
spectrum = [1, 0, 9, 0, 36, 0, 84, 0, 126, 0, 126, 0, 84, 0, 36, 0, 9, 0, 1]
447
sd_codes_18_0 = {"order autgp":185794560,"code":LinearCode(genmat),"spectrum":spectrum,\
448
"Type":"I","Comment": "Huge aut gp. S_9x(ZZ/2ZZ)^9?"}
449
# [18,1]:
450
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matId(n)[4]]))
451
# G = PermutationGroup( [ "(9,18)", "(8,9)(17,18)", "(7,8)(16,17)", "(6,7)(15,16)",\
452
# "(5,6)(14,15)", "(4,10)(11,12)", "(4,11)(10,12)", "(3,4)(12,13)",\
453
# "(2,3)(11,12)", "(1,2)(10,11)" ] )
454
spectrum = [1, 0, 5, 0, 24, 0, 80, 0, 146, 0, 146, 0, 80, 0, 24, 0, 5, 0, 1]
455
sd_codes_18_1 = {"order autgp":5160960,"code":LinearCode(genmat),"spectrum":spectrum,\
456
"Type":"I","Comment": "Large aut gp."}
457
# [18,2]:
458
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[6],matId(n)[6]]))
459
# G = PermutationGroup( [ "(9,18)", "(8,9)(17,18)", "(7,8)(16,17)", "(5,6)(14,15)",\
460
# "(5,14)(6,15)","(4,5)(13,14)", "(3,4)(12,13)", "(2,3)(11,12)", "(1,2)(10,11)"] )
461
spectrum = [1, 0, 3, 0, 18, 0, 78, 0, 156, 0, 156, 0, 78, 0, 18, 0, 3, 0, 1]
462
sd_codes_18_2 = {"order autgp":1105920,"code":LinearCode(genmat),"spectrum":spectrum,\
463
"Type":"I","Comment": ""}
464
# [18,3]:
465
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matA(n)[4],matId(n)[8]]))
466
# G = PermutationGroup( [ "(9,18)", "(8,14)(15,16)", "(8,15)(14,16)", "(7,8)(16,17)",\
467
# "(6,7)(15,16)","(5,6)(14,15)", "(4,10)(11,12)", "(4,11)(10,12)",\
468
# "(3,4)(12,13)", "(2,3)(11,12)","(1,2)(10,11)",\
469
# "(1,5)(2,6)(3,7)(4,8)(10,14)(11,15)(12,16)(13,17)" ] )
470
spectrum = [1, 0, 1, 0, 28, 0, 28, 0, 198, 0, 198, 0, 28, 0, 28, 0, 1, 0, 1]
471
sd_codes_18_3 = {"order autgp":7225344,"code":LinearCode(genmat),"spectrum":spectrum,\
472
"Type":"I","Comment": "Large aut gp. Unique codeword of smallest non-zero wt.\
473
Same spectrum as '[18,4]' sd code."}
474
# [18,4]:
475
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[8],matId(n)[8]]))
476
# G = PermutationGroup( [ "(9,18)", "(7,8)(16,17)", "(7,16)(8,17)", "(6,7)(15,16)", \
477
# "(5,6)(14,15)", "(4,5)(13,14)", "(3,4)(12,13)", "(2,3)(11,12)", "(1,2)(10,11)" ] )
478
spectrum = [1, 0, 1, 0, 28, 0, 28, 0, 198, 0, 198, 0, 28, 0, 28, 0, 1, 0, 1]
479
sd_codes_18_4 = {"order autgp":10321920,"code":LinearCode(genmat),"spectrum":spectrum,\
480
"Type":"I","Comment": "Huge aut gp. Unique codeword of smallest non-zero wt.\
481
Same spectrum as '[18,3]' sd code."}
482
# [18,5]:
483
C = self_dual_codes_binary(n-2)["%s"%(n-2)]["5"]["code"]
484
A0 = C.redundancy_matrix()
485
genmat = I2(n).augment(block_diagonal_matrix([A0,matId(n)[8]]))
486
# G = PermutationGroup( [ "(5,10)(6,11)", "(5,11)(6,10)", "(5,11,12)(6,7,10)",\
487
# "(5,11,10,7,12,6,13)", "(2,15)(3,16)(5,11,10,7,12,6,13)",\
488
# "(2,16)(3,15)(5,11,10,7,12,6,13)", "(2,16,14)(3,15,4)(5,11,10,7,12,6,13)",\
489
# "(1,2,16,15,4,3,14)(5,11,10,7,12,6,13)", "(1,5,14,6,16,11,15,7,3,10,4,12,2,13)",\
490
# "(2,16,14)(3,15,4)(5,11,10,7,12,6,13)(9,18)",\
491
# "(2,16,14)(3,15,4)(5,11,10,7,12,6,13)(8,9,17,18)" ] )
492
spectrum = [1, 0, 2, 0, 15, 0, 77, 0, 161, 0, 161, 0, 77, 0, 15, 0, 2, 0, 1]
493
sd_codes_18_5 = {"order autgp":451584,"code":LinearCode(genmat),"spectrum":spectrum,\
494
"Type":"I","Comment": "'Exceptional' construction."}
495
# [18,6]:
496
C = self_dual_codes_binary(n-2)["%s"%(n-2)]["6"]["code"]
497
A0 = C.redundancy_matrix()
498
genmat = I2(n).augment(block_diagonal_matrix([A0,matId(n)[8]]))
499
G = PermutationGroup( [ "(9,18)", "(7,10)(11,17)", "(7,11)(10,17)", "(6,7)(11,12)",\
500
"(4,6)(12,14)", "(3,5)(13,15)", "(3,13)(5,15)", "(2,3)(15,16)", "(1,2)(8,16)",\
501
"(1,4)(2,6)(3,7)(5,17)(8,14)(10,13)(11,15)(12,16)" ] )
502
spectrum = [1, 0, 1, 0, 12, 0, 76, 0, 166, 0, 166, 0, 76, 0, 12, 0, 1, 0, 1]
503
sd_codes_18_6 = {"order autgp":147456,"code":LinearCode(genmat),"spectrum":spectrum,\
504
"Type":"I","Comment": "'Exceptional'. Unique codeword of smallest non-zero wt."}
505
# [18,7] (equiv to H18 in [P])
506
genmat = MS(n)([[1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0],\
507
[0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1],\
508
[0,0,1,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1],\
509
[0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1],\
510
[0,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,1,0],\
511
[0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,1,0],\
512
[0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,0],\
513
[0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1],\
514
[0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1]])
515
# G = PermutationGroup( [ "(9,10)(16,18)", "(9,16)(10,18)", "(8,9)(14,16)",\
516
# "(7,11)(12,17)", "(7,12)(11,17)", "(5,6)(11,12)", "(5,7)(6,17)",\
517
# "(4,13)(5,8)(6,14)(7,9)(10,12)(11,18)(16,17)", "(3,4)(13,15)",\
518
# "(1,2)(5,8)(6,14)(7,9)(10,12)(11,18)(16,17)", "(1,3)(2,15)",\
519
# "(1,5)(2,6)(3,7)(4,11)(10,18)(12,13)(15,17)" ] )
520
spectrum = [1, 0, 0, 0, 9, 0, 75, 0, 171, 0, 171, 0, 75, 0, 9, 0, 0, 0, 1]
521
sd_codes_18_7 = {"order autgp":82944,"code":LinearCode(genmat),"spectrum":spectrum,\
522
"Type":"I","Comment": "'Exceptional' construction. Min dist 4."}
523
# [18, 8] (equiv to I18 in [P])
524
I18 = MS(n)([[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\
525
[0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],\
526
[0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0],\
527
[0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],\
528
[1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0],\
529
[0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0],\
530
[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0],\
531
[0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1],\
532
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]])
533
genmat = MS(n)([[1,0,0,0,0,0,0,0,0, 1, 1, 1, 1, 1, 0, 0, 0, 0],\
534
[0,1,0,0,0,0,0,0,0, 1, 0, 1, 1, 1, 0, 1, 1, 1],\
535
[0,0,1,0,0,0,0,0,0, 0, 1, 1, 0, 0, 0, 1, 1, 1],\
536
[0,0,0,1,0,0,0,0,0, 0, 1, 0, 0, 1, 0, 1, 1, 1],\
537
[0,0,0,0,1,0,0,0,0, 0, 1, 0, 1, 0, 0, 1, 1, 1],\
538
[0,0,0,0,0,1,0,0,0, 1, 1, 0, 0, 0, 0, 1, 1, 1],\
539
[0,0,0,0,0,0,1,0,0, 0, 0, 0, 0, 0, 1, 0, 1, 1],\
540
[0,0,0,0,0,0,0,1,0, 0, 0, 0, 0, 0, 1, 1, 0, 1],\
541
[0,0,0,0,0,0,0,0,1, 0, 0, 0, 0, 0, 1, 1, 1, 0]])
542
G = PermutationGroup( [ "(9,15)(16,17)", "(9,16)(15,17)", "(8,9)(17,18)",\
543
"(7,8)(16,17)", "(5,6)(10,13)", "(5,10)(6,13)", "(4,5)(13,14)",\
544
"(3,4)(12,14)", "(1,2)(6,10)", "(1,3)(2,12)" ] )
545
spectrum = [1, 0, 0, 0, 17, 0, 51, 0, 187, 0, 187, 0, 51, 0, 17, 0, 0, 0, 1]
546
sd_codes_18_8 = {"order autgp":322560,"code":LinearCode(genmat),"spectrum":spectrum,\
547
"Type":"I","Comment": "'Exceptional' construction. Min dist 4."}
548
sd_codes["18"] = {"0":sd_codes_18_0,"1":sd_codes_18_1,"2":sd_codes_18_2,\
549
"3":sd_codes_18_3,"4":sd_codes_18_4,"5":sd_codes_18_5,\
550
"6":sd_codes_18_6,"7":sd_codes_18_7,"8":sd_codes_18_8}
551
return sd_codes
552
553
554
if n == 20:
555
# all of these of these are Type I; 2 of these codes
556
# are formally equivalent but with different automorphism groups;
557
# one of these has a unique codeword of lowest weight
558
A10 = MatrixSpace(F,10,10)([[1, 1, 1, 1, 1, 1, 1, 1, 1, 0],\
559
[1, 1, 1, 0, 1, 0, 1, 0, 1, 1],\
560
[1, 0, 0, 1, 0, 1, 0, 1, 0, 1],\
561
[0, 0, 0, 1, 1, 1, 0, 1, 0, 1],\
562
[0, 0, 1, 1, 0, 1, 0, 1, 0, 1],\
563
[0, 0, 0, 1, 0, 1, 1, 1, 0, 1],\
564
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],\
565
[0, 0, 0, 1, 0, 0, 0, 0, 1, 1],\
566
[0, 0, 0, 0, 0, 1, 0, 0, 1, 1],\
567
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1]])
568
# [20,0]:
569
genmat = I2(n).augment(I2(n))
570
# G = PermutationGroup( ["(10,20)", "(9,10)(19,20)", "(8,9)(18,19)", "(7,8)(17,18)", "(6,7)(16,17)",\
571
# "(5,6)(15,16)", "(4,5)(14,15)", "(3,4)(13,14)", "(2,3)(12,13)", "(1,2)(11,12)"] )
572
spectrum = [1, 0, 10, 0, 45, 0, 120, 0, 210, 0, 252, 0, 210, 0, 120, 0, 45, 0, 10, 0, 1]
573
sd_codes_20_0 = {"order autgp":3715891200,"code":LinearCode(genmat),"spectrum":spectrum,\
574
"Type":"I","Comment": "Huge aut gp"}
575
# [20,1]:
576
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matId(n)[4]]))
577
# G = PermutationGroup( [ "(10,20)", "(9,10)(19,20)", "(8,9)(18,19)", "(7,8)(17,18)", "(6,7)(16,17)",\
578
# "(5,6)(15,16)", "(4,11)(12,13)", "(4,12)(11,13)", "(3,4)(13,14)",\
579
# "(2,3)(12,13)", "(1,2)(11,12)"] )
580
spectrum = [1, 0, 6, 0, 29, 0, 104, 0, 226, 0, 292, 0, 226, 0, 104, 0, 29, 0, 6, 0, 1]
581
sd_codes_20_1 = {"order autgp":61931520,"code":LinearCode(genmat),"spectrum":spectrum,\
582
"Type":"I","Comment":""}
583
# [20,2]:
584
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[6],matId(n)[6]]))
585
# G = PermutationGroup( [ "(10,20)", "(9,10)(19,20)", "(8,9)(18,19)", "(7,8)(17,18)",\
586
# "(5,6)(15,16)", "(5,15)(6,16)", "(4,5)(14,15)", "(3,4)(13,14)",\
587
# "(2,3)(12,13)", "(1,2)(11,12)"] )
588
spectrum = [1, 0, 4, 0, 21, 0, 96, 0, 234, 0, 312, 0, 234, 0, 96, 0, 21, 0, 4, 0, 1]
589
sd_codes_20_2 = {"order autgp":8847360,"code":LinearCode(genmat),"spectrum":spectrum,\
590
"Type":"I","Comment":""}
591
# [20,3]:
592
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[6],matA(n)[4]]))
593
# G = PermutationGroup( [ "(5,6)(15,16)", "(5,15)(6,16)", "(4,5)(14,15)", "(3,4)(13,14)",\
594
# "(2,3)(12,13)", "(1,2)(11,12)", "(8,17)(9,10)", "(8,10)(9,17)", "(8,10,20)(9,19,17)",\
595
# "(8,19,20,9,17,10,18)", "(7,8,19,20,9,18)(10,17)"] )
596
spectrum =[1, 0, 0, 0, 29, 0, 32, 0, 226, 0, 448, 0, 226, 0, 32, 0, 29, 0, 0, 0, 1]
597
sd_codes_20_3 = {"order autgp":30965760,"code":LinearCode(genmat),"spectrum":spectrum,\
598
"Type":"I","Comment":"Min dist 4."}
599
# [20,4]:
600
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matA(n)[4],matId(n)[8]]))
601
# G = PermutationGroup( [ "(5,15)(6,16)", "(5,16)(6,15)", "(5,16,7)(6,17,15)", "(5,15,8)(6,17,7)",\
602
# "(5,17,18)(6,15,8), (3,14)(4,13)(5,17,18)(6,15,8)", "(3,13)(4,14)(5,17,18)(6,15,8)",\
603
# "(2,3,14)(4,13,11)(5,17,18)(6,15,8)"," (2,3,12)(4,11,14)(5,17,18)(6,15,8)",\
604
# "(1,2,3,11,14,4,12)(5,17,18)(6,15,8)", "(1,5,13,17,14,8,2,7,3,16,12,6,11,18)(4,15)",\
605
# "(2,3,12)(4,11,14)(5,17,18)(6,15,8)(10,20)",\
606
# "(2,3,12)(4,11,14)(5,17,18)(6,15,8)(9,10,19,20)"] )
607
spectrum =[1, 0, 2, 0, 29, 0, 56, 0, 226, 0, 396, 0, 226, 0, 56, 0, 29, 0, 2, 0, 1]
608
sd_codes_20_4 = {"order autgp":28901376,"code":LinearCode(genmat),"spectrum":spectrum,\
609
"Type":"I","Comment":""}
610
# [20,5]:
611
genmat = I2(n).augment(block_diagonal_matrix([And7,matId(n)[7]]))
612
# G = PermutationGroup( [ "(10,20)", "(9,10)(19,20)", "(8,9)(18,19)",\
613
# "(7,11)(12,14)", "(7,12)(11,14)", "(6,7)(12,13)", "(5,6)(11,12)",\
614
# "(4,15)(16,17)", "(4,16)(15,17)", "(2,3)(16,17)", "(2,4)(3,15)",\
615
# "(1,2)(15,16)", "(1,5)(2,6)(3,13)(4,7)(11,16)(12,15)(14,17)" ] ) # order 2709504
616
spectrum = [1, 0, 3, 0, 17, 0, 92, 0, 238, 0, 322, 0, 238, 0, 92, 0, 17, 0, 3, 0, 1]
617
sd_codes_20_5 = {"order autgp":2709504,"code":LinearCode(genmat),"spectrum":spectrum,\
618
"Type":"I","Comment": "'Exceptional' construction."}
619
# [20,6]:
620
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[8],matId(n)[8]]))
621
# G = PermutationGroup( [ "(7,8)(17,18)", "(7,17)(8,18)", "(6,7)(16,17)", "(5,6)(15,16)",\
622
# "(4,5)(14,15)", "(3,4)(13,14)", "(2,3)(12,13)", "(1,2)(11,12)",\
623
# "(10,20)", "(9,10,19,20)"] )
624
spectrum = [1, 0, 2, 0, 29, 0, 56, 0, 226, 0, 396, 0, 226, 0, 56, 0, 29, 0, 2, 0, 1]
625
sd_codes_20_6 = {"order autgp":41287680,"code":LinearCode(genmat),"spectrum":spectrum,\
626
"Type":"I","Comment":""}
627
# [20,7]:
628
A0 = self_dual_codes_binary(n-4)["16"]["6"]["code"].redundancy_matrix()
629
genmat = I2(n).augment(block_diagonal_matrix([A0,matId(n)[8]]))
630
# G = PermutationGroup( [ "(10,20)", "(9,10)(19,20)", "(7,11)(12,18)",\
631
# "(7,12)(11,18)", "(6,7)(12,13)", "(4,6)(13,15)", "(3,5)(14,16)",\
632
# "(3,14)(5,16)", "(2,3)(16,17)", "(1,2)(8,17)",\
633
# "(1,4)(2,6)(3,7)(5,18)(8,15)(11,14)(12,16)(13,17)" ] )
634
spectrum = [1,0,2,0,13,0,88,0,242,0,332,0,242,0,88,0,13,0,2,0,1]
635
sd_codes_20_7 = {"order autgp":589824,"code":LinearCode(genmat),"spectrum":spectrum,\
636
"Type":"I","Comment":"'Exceptional' construction."}
637
# [20,8]: (genmat, J20, and genmat2 are all equiv)
638
genmat = I2(n).augment(matA(n)[10])
639
J20 = MS(n)([[1,1,1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\
640
[0,0,1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\
641
[0,0,0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\
642
[0,0,0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\
643
[0,0,0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\
644
[0,0,0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\
645
[0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0],\
646
[0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],\
647
[0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],\
648
[1,0,1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0]])
649
genmat2 = MS(n)([[1,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],\
650
[0,1,0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1],\
651
[0,0,1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],\
652
[0,0,0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0],\
653
[0,0,0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0],\
654
[0,0,0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0],\
655
[0,0,0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0],\
656
[0,0,0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0],\
657
[0,0,0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0],\
658
[0,0,0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1]])
659
# G = PermutationGroup( [ "(9,10)(19,20)", "(9,19)(10,20)", "(8,9)(18,19)", "(7,8)(17,18)",\
660
# "(6,7)(16,17)", "(5,6)(15,16)", "(4,5)(14,15)", "(3,4)(13,14)",\
661
# "(2,3)(12,13)", "(1,2)(11,12)"] )
662
spectrum =[1, 0, 0, 0, 45, 0, 0, 0, 210, 0, 512, 0, 210, 0, 0, 0, 45, 0, 0, 0, 1]
663
sd_codes_20_8 = {"order autgp":1857945600,"code":LinearCode(genmat),"spectrum":spectrum,\
664
"Type":"I","Comment":"Huge aut gp. Min dist 4."}
665
# [20,9]: (genmat, K20 are equiv)
666
genmat = I2(n).augment(A10)
667
K20 = MS(n)([[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\
668
[0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\
669
[0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],\
670
[0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0],\
671
[0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],\
672
[0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0],\
673
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0],\
674
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],\
675
[1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0],\
676
[0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,0]])
677
#genmat = K20 # not in standard form
678
# G = PermutationGroup( [ "(4,13)(5,15)", "(4,15)(5,13)", "(3,4,13)(5,11,15)",
679
# "(3,4,6,11,15,17)(5,13)", "(3,5,17,4,12)(6,15,7,11,13)",
680
# "(1,2)(3,5,17,4,7,11,13,6,15,12)", "(1,3,5,17,4,12)(2,11,13,6,15,7)",
681
# "(3,5,17,4,12)(6,15,7,11,13)(10,18)(19,20)", "(3,5,17,4,12)(6,15,7,11,13)(10,19)(18,20)",
682
# "(3,5,17,4,12)(6,15,7,11,13)(9,10)(16,18)",
683
# "(3,5,17,4,12)(6,15,7,11,13)(8,9)(14,16)" ] )
684
spectrum = [1, 0, 0, 0, 21, 0, 48, 0, 234, 0, 416, 0, 234, 0, 48, 0, 21, 0, 0, 0, 1]
685
sd_codes_20_9 = {"order autgp":4423680,"code":LinearCode(genmat),"spectrum":spectrum,\
686
"Type":"I","Comment": "Min dist 4."}
687
# [20,10]
688
L20 = MS(n)([[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\
689
[0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\
690
[1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],\
691
[0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0],\
692
[0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0],\
693
[0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0],\
694
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0],\
695
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],\
696
[0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0],\
697
[0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,0]])
698
genmat = L20 # not in standard form
699
# G = PermutationGroup( [ "(17,18)(19,20)", "(17,19)(18,20)", "(15,16)(19,20)",
700
# "(15,17)(16,18)", "(10,11)(12,13)", "(10,12)(11,13)", "(9,10)(13,14)",
701
# "(8,9)(12,13)", "(3,4)(5,6)", "(3,5)(4,6)", "(2,3)(6,7)", "(1,2)(5,6)",
702
# "(1,8)(2,9)(3,10)(4,11)(5,12)(6,13)(7,14)(19,20)" ] ) # order 1354752
703
spectrum = [1, 0, 0, 0, 17, 0, 56, 0, 238, 0, 400, 0, 238, 0, 56, 0, 17, 0, 0, 0, 1]
704
sd_codes_20_10 = {"order autgp":1354752,"code":LinearCode(genmat),"spectrum":spectrum,\
705
"Type":"I","Comment": "Min dist 4."}
706
# [20,11]
707
S20 = MS(n)([[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\
708
[0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\
709
[0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],\
710
[0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],\
711
[0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0],\
712
[0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0],\
713
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],\
714
[1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,1,1,0,0],\
715
[1,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0],\
716
[1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0]] )
717
genmat = S20 # not in standard form
718
# G = PermutationGroup( [ "(17,18)(19,20)", "(17,19)(18,20)", "(13,14)(15,16)",
719
# "(13,15)(14,16)", "(11,12)(15,16)", "(11,13)(12,14)", "(9,10)(15,16)",
720
# "(9,11)(10,12)", "(5,6)(7,8)", "(5,7)(6,8)", "(3,4)(7,8)", "(3,5)(4,6)",
721
# "(1,2)(7,8)", "(1,3)(2,4)", "(1,9)(2,10)(3,11)(4,12)(5,13)(6,14)(7,15)(8,16)" ] )
722
# G.order() = 294912
723
spectrum = [1, 0, 0, 0, 13, 0, 64, 0, 242, 0, 384, 0, 242, 0, 64, 0, 13, 0, 0, 0, 1]
724
sd_codes_20_11 = {"order autgp":294912,"code":LinearCode(genmat),"spectrum":spectrum,\
725
"Type":"I","Comment":"Min dist 4."}
726
# [20,12]
727
R20 = MS(n)([[0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\
728
[0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],\
729
[0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],\
730
[0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0],\
731
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0],\
732
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],\
733
[0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0],\
734
[1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0],\
735
[1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1],\
736
[1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1]])
737
genmat = R20 # not in standard form
738
# G = PermutationGroup( [ "(17,18)(19,20)", "(17,19)(18,20)", "(15,16)(19,20)",
739
# "(15,17)(16,18)", "(11,12)(13,14)", "(11,13)(12,14)", "(9,10)(13,14)",
740
# "(9,11)(10,12)", "(5,6)(7,8)", "(5,7)(6,8)", "(3,4)(7,8)", "(3,5)(4,6)",
741
# "(3,9,15)(4,10,16)(5,11,17)(6,12,18)(7,14,19)(8,13,20)",
742
# "(1,2)(7,8)(9,15)(10,16)(11,17)(12,18)(13,19)(14,20)" ] ) # order 82944
743
spectrum = [1, 0, 0, 0, 9, 0, 72, 0, 246, 0, 368, 0, 246, 0, 72, 0, 9, 0, 0, 0, 1]
744
sd_codes_20_12 = {"order autgp":82944,"code":LinearCode(genmat),"spectrum":spectrum,\
745
"Type":"I","Comment":"Min dist 4."}
746
# [20,13]
747
M20 = MS(n)([[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\
748
[0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],\
749
[0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],\
750
[0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0],\
751
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],\
752
[0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0],\
753
[1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0],\
754
[0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1],\
755
[0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0],\
756
[0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,0]])
757
genmat = M20 # not in standard form
758
# G = PermutationGroup( [ "(17,18)(19,20)", "(17,19)(18,20)", "(13,14)(15,16)",
759
# "(13,15)(14,16)", "(9,10)(11,12)", "(9,11)(10,12)", "(5,6)(7,8)",
760
# "(5,7)(6,8)", "(5,9)(6,11)(7,12)(8,10)(13,17)(14,19)(15,18)(16,20)",
761
# "(5,13)(6,15)(7,14)(8,16)(9,17)(10,20)(11,18)(12,19)",
762
# "(3,4)(6,7)(11,12)(13,17)(14,18)(15,19)(16,20)",
763
# "(2,3)(7,8)(9,13)(10,14)(11,15)(12,16)(19,20)",
764
# "(1,2)(6,7)(11,12)(13,17)(14,18)(15,19)(16,20)",
765
# "(1,5)(2,6)(3,7)(4,8)(9,17)(10,18)(11,19)(12,20)" ] )
766
spectrum = [1, 0, 0, 0, 5, 0, 80, 0, 250, 0, 352, 0, 250, 0, 80, 0, 5, 0, 0, 0, 1]
767
sd_codes_20_13 = {"order autgp":122880,"code":LinearCode(genmat),"spectrum":spectrum,\
768
"Type":"I","Comment": "Min dist 4."}
769
# [20,14]: # aut gp of this computed using a program by Robert Miller
770
A0 = self_dual_codes_binary(n-2)["18"]["8"]["code"].redundancy_matrix()
771
genmat = I2(n).augment(block_diagonal_matrix([A0,matId(n)[9]]))
772
# [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
773
# [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0],
774
# [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0],
775
# [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0],
776
# [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0],
777
# [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0],
778
# [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0],
779
# [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0],
780
# [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0],
781
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]]
782
# G = PermutationGroup( [ "(8,19)(16,17)", "(8,16)(17,19)", "(9,18)(16,17)", "(8,9)(18,19)",
783
# "(7,8)(17,18)", "(4,15)(5,14)", "(4,5)(14,15)", "(4,15)(6,11)", "(5,6)(11,14)",
784
# "(3,13)(4,15)", "(3,15)(4,13)", "(1,2)(4,15)", "(1,4)(2,15)(3,5)(13,14)", "(10,20)" ] )
785
spectrum = [1, 0, 1, 0, 17, 0, 68, 0, 238, 0, 374, 0, 238, 0, 68, 0, 17, 0, 1, 0, 1]
786
sd_codes_20_14 = {"order autgp":645120,"code":LinearCode(genmat),"spectrum":spectrum,\
787
"Type":"I","Comment": "'Exceptional' construction."}
788
# [20,15]:
789
A0 = self_dual_codes_binary(n-2)["18"]["7"]["code"].redundancy_matrix()
790
genmat = I2(n).augment(block_diagonal_matrix([A0,matId(n)[9]]))
791
# [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
792
# [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0],
793
# [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0],
794
# [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0],
795
# [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0],
796
# [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0],
797
# [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0],
798
# [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0],
799
# [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0],
800
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]]
801
# G = PermutationGroup( [ "(10,20)", "(9,11)(17,19)", "(9,17)(11,19)", "(8,9)(15,17)",
802
# "(7,12)(13,18)", "(7,13)(12,18)", "(5,6)(12,13)", "(5,7)(6,18)",
803
# "(4,14)(5,8)(6,15)(7,9)(11,13)(12,19)(17,18)", "(3,4)(14,16)",
804
# "(1,2)(5,8)(6,15)(7,9)(11,13)(12,19)(17,18)", "(1,3)(2,16)",
805
# "(1,5)(2,6)(3,7)(4,12)(11,19)(13,14)(16,18)" ] ) # order 165888
806
spectrum = [1, 0, 1, 0, 9, 0, 84, 0, 246, 0, 342, 0, 246, 0, 84, 0, 9, 0, 1, 0, 1]
807
sd_codes_20_15 = {"order autgp":165888,"code":LinearCode(genmat),"spectrum":spectrum,\
808
"Type":"I","Comment":"'Exceptional' construction. Unique lowest wt codeword."}
809
sd_codes["20"] = {"0":sd_codes_20_0,"1":sd_codes_20_1,"2":sd_codes_20_2,\
810
"3":sd_codes_20_3,"4":sd_codes_20_4,"5":sd_codes_20_5,\
811
"6":sd_codes_20_6,"7":sd_codes_20_7,"8":sd_codes_20_8,\
812
"9":sd_codes_20_9,"10":sd_codes_20_10,"11":sd_codes_20_11,\
813
"12":sd_codes_20_12,"13":sd_codes_20_13,"14":sd_codes_20_14,
814
"15":sd_codes_20_15}
815
return sd_codes
816
817
if n == 22:
818
# all of these of these are Type I; 2 of these codes
819
# are formally equivalent but with different automorphism groups
820
# *** Incomplete *** (7 out of 25)
821
# [22,0]:
822
genmat = I2(n).augment(I2(n))
823
# G = PermutationGroup( [ "(11,22)", "(10,11)(21,22)", "(9,10)(20,21)",\
824
# "(8,9)(19,20)", "(7,8)(18,19)", "(6,7)(17,18)", "(5,6)(16,17)",\
825
# "(4,5)(15,16)", "(3,4)(14,15)", "(2,3)(13,14)", "(1,2)(12,13)" ] ) # S_11x(ZZ/2ZZ)^11??
826
spectrum = [1, 0, 11, 0, 55, 0, 165, 0, 330, 0, 462, 0, 462, 0, 330, 0, 165, 0, 55, 0, 11, 0, 1]
827
sd_codes_22_0 = {"order autgp":81749606400,"code":LinearCode(genmat),"spectrum":spectrum,\
828
"Type":"I","Comment":"Huge aut gp."}
829
# [22,1]:
830
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matId(n)[4]]))
831
# G = PermutationGroup( [ "(11,22)", "(10,11)(21,22)", "(9,10)(20,21)",\
832
# "(8,9)(19,20)", "(7,8)(18,19)", "(6,7)(17,18)", "(5,6)(16,17)",\
833
# "(4,12)(13,14)", "(4,13)(12,14)", "(3,4)(14,15)", "(2,3)(13,14)", "(1,2)(12,13)" ] )
834
spectrum = [1, 0, 7, 0, 35, 0, 133, 0, 330, 0, 518, 0, 518, 0, 330, 0, 133, 0, 35, 0, 7, 0, 1]
835
sd_codes_22_1 = {"order autgp":867041280,"code":LinearCode(genmat),"spectrum":spectrum,\
836
"Type":"I","Comment":""}
837
# [22,2]:
838
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[6],matId(n)[6]]))
839
# G = PermutationGroup( [ "(11,22)", "(10,11)(21,22)", "(9,10)(20,21)",\
840
# "(8,9)(19,20)", "(7,8)(18,19)", "(5,6)(16,17)", "(5,16)(6,17)",\
841
# "(4,5)(15,16)", "(3,4)(14,15)", "(2,3)(13,14)", "(1,2)(12,13)" ] )
842
spectrum = [1, 0, 5, 0, 25, 0, 117, 0, 330, 0, 546, 0, 546, 0, 330, 0, 117, 0, 25, 0, 5, 0, 1]
843
sd_codes_22_2 = {"order autgp":88473600,"code":LinearCode(genmat),"spectrum":spectrum,\
844
"Type":"I","Comment":""}
845
# [22,3]:
846
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[8],matId(n)[8]]))
847
# G = PermutationGroup( [ "(11,22)", "(10,11)(21,22)", "(9,10)(20,21)",\
848
# "(7,8)(18,19)", "(7,18)(8,19)", "(6,7)(17,18)", "(5,6)(16,17)",\
849
# "(4,5)(15,16)", "(3,4)(14,15)", "(2,3)(13,14)", "(1,2)(12,13)" ] )
850
spectrum = [1, 0, 3, 0, 31, 0, 85, 0, 282, 0, 622, 0, 622, 0, 282, 0, 85, 0, 31, 0, 3, 0, 1]
851
sd_codes_22_3 = {"order autgp":247726080,"code":LinearCode(genmat),"spectrum":spectrum,\
852
"Type":"I","Comment":"Same spectrum as the '[20,5]' code."}
853
# [22,4]:
854
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[10],matId(n)[10]]))
855
# G = PermutationGroup( [ "(11,22)", "(9,10)(20,21)", "(9,20)(10,21)",\
856
# "(8,9)(19,20)", "(7,8)(18,19)", "(6,7)(17,18)", "(5,6)(16,17)",\
857
# "(4,5)(15,16)", "(3,4)(14,15)", "(2,3)(13,14)", "(1,2)(12,13)" ] )
858
spectrum = [1, 0, 1, 0, 45, 0, 45, 0, 210, 0, 722, 0, 722, 0, 210, 0, 45, 0, 45, 0, 1, 0, 1]
859
sd_codes_22_4 = {"order autgp":3715891200,"code":LinearCode(genmat),"spectrum":spectrum,\
860
"Type":"I","Comment":"Unique lowest weight codeword."}
861
# [22,5]:
862
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[4],matA(n)[4],matId(n)[8]]))
863
# G = PermutationGroup( [ "(11,22)", "(10,11)(21,22)", "(9,10)(20,21)",\
864
# "(8,16)(17,18)", "(8,17)(16,18)", "(7,8)(18,19)", "(6,7)(17,18)",\
865
# "(5,6)(16,17)", "(4,12)(13,14)", "(4,13)(12,14)", "(3,4)(14,15)",\
866
# "(2,3)(13,14)", "(1,2)(12,13)", "(1,5)(2,6)(3,7)(4,8)(12,16)(13,17)(14,18)(15,19)" ] )
867
spectrum = [1, 0, 3, 0, 31, 0, 85, 0, 282, 0, 622, 0, 622, 0, 282, 0, 85, 0, 31, 0, 3, 0, 1]
868
sd_codes_22_5 = {"order autgp":173408256,"code":LinearCode(genmat),"spectrum":spectrum,\
869
"Type":"I","Comment":"Same spectrum as the '[20,3]' code."}
870
# [22,6]:
871
genmat = I2(n).augment(block_diagonal_matrix([matA(n)[6],matA(n)[4],matId(n)[10]]))
872
# G = PermutationGroup( [ "(11,22)", "(10,18)(19,20)", "(10,19)(18,20)",\
873
# "(9,10)(20,21)", "(8,9)(19,20)", "(7,8)(18,19)", "(5,6)(16,17)",\
874
# "(5,16)(6,17)", "(4,5)(15,16)", "(3,4)(14,15)", "(2,3)(13,14)", "(1,2)(12,13)" ] )
875
spectrum = [1, 0, 1, 0, 29, 0, 61, 0, 258, 0, 674, 0, 674, 0, 258, 0, 61, 0, 29, 0, 1, 0, 1]
876
sd_codes_22_6 = {"order autgp":61931520,"code":LinearCode(genmat),"spectrum":spectrum,\
877
"Type":"I","Comment":"Unique lowest weight codeword."}
878
sd_codes["22"] = {"0":sd_codes_22_0,"1":sd_codes_22_1,"2":sd_codes_22_2,\
879
"3":sd_codes_22_3,"4":sd_codes_22_4,"5":sd_codes_22_5,\
880
"6":sd_codes_22_6}
881
return sd_codes
882
883
884
885
886
887