def ExtendedTernaryGolayCode(): """ ExtendedTernaryGolayCode returns a ternary Golay code. This is a self-dual perfect [12,6,6] code. EXAMPLES:: sage: C = codes.ExtendedTernaryGolayCode() sage: C Linear code of length 12, dimension 6 over Finite Field of size 3 sage: C.minimum_distance() 6 sage: C.minimum_distance(algorithm='gap') # long time, check d=6 6 AUTHORS: - David Joyner (11-2005) """ B = [[1, 0, 0, 0, 0, 0, 2, 0, 1, 2, 1, 2],\ [0, 1, 0, 0, 0, 0, 1, 2, 2, 2, 1, 0],\ [0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1],\ [0, 0, 0, 1, 0, 0, 1, 1, 0, 2, 2, 2],\ [0, 0, 0, 0, 1, 0, 2, 1, 2, 2, 0, 1],\ [0, 0, 0, 0, 0, 1, 0, 2, 1, 2, 2, 1]] V = span(B, GF(3)) return LinearCodeFromVectorSpace(V, d=6)
def ExtendedBinaryGolayCode(): """ ExtendedBinaryGolayCode() returns the extended binary Golay code. This is a perfect [24,12,8] code. This code is self-dual. EXAMPLES:: sage: C = codes.ExtendedBinaryGolayCode() sage: C Linear code of length 24, dimension 12 over Finite Field of size 2 sage: C.minimum_distance() 8 sage: C.minimum_distance(algorithm='gap') # long time, check d=8 8 AUTHORS: - David Joyner (2007-05) """ B = [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1],\ [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0],\ [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1],\ [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0],\ [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1],\ [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1],\ [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1],\ [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0],\ [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0],\ [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0],\ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1],\ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1]] V = span(B, GF(2)) return LinearCodeFromVectorSpace(V, d=8)
def TernaryGolayCode(): r""" TernaryGolayCode returns a ternary Golay code. This is a perfect [11,6,5] code. It is also equivalent to a cyclic code, with generator polynomial `g(x)=2+x^2+2x^3+x^4+x^5`. EXAMPLES:: sage: C = codes.TernaryGolayCode() sage: C Linear code of length 11, dimension 6 over Finite Field of size 3 sage: C.minimum_distance() 5 sage: C.minimum_distance(algorithm='gap') # long time, check d=5 5 AUTHORS: - David Joyner (2007-5) """ F = GF(3) B = [[2, 0, 1, 2, 1, 1, 0, 0, 0, 0, 0],\ [0, 2, 0, 1, 2, 1, 1, 0, 0, 0, 0],\ [0, 0, 2, 0, 1, 2, 1, 1, 0, 0, 0],\ [0, 0, 0, 2, 0, 1, 2, 1, 1, 0, 0],\ [0, 0, 0, 0, 2, 0, 1, 2, 1, 1, 0],\ [0, 0, 0, 0, 0, 2, 0, 1, 2, 1, 1]] V = span(B, F) return LinearCodeFromVectorSpace(V, d=5)
def BinaryGolayCode(): r""" BinaryGolayCode() returns a binary Golay code. This is a perfect [23,12,7] code. It is also (equivalent to) a cyclic code, with generator polynomial `g(x)=1+x^2+x^4+x^5+x^6+x^{10}+x^{11}`. Extending it yields the extended Golay code (see ExtendedBinaryGolayCode). EXAMPLE:: sage: C = codes.BinaryGolayCode() sage: C Linear code of length 23, dimension 12 over Finite Field of size 2 sage: C.minimum_distance() 7 sage: C.minimum_distance(algorithm='gap') # long time, check d=7 7 AUTHORS: - David Joyner (2007-05) """ F = GF(2) B = [[1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\ [0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\ [0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],\ [0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\ [0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0],\ [0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\ [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],\ [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0],\ [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0],\ [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0],\ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0],\ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1]] # MS = MatrixSpace(F,12,23) # V = VectorSpace(F,23) V = span(B, F) return LinearCodeFromVectorSpace(V, d=7)
def RandomLinearCode(n,k,F): r""" The method used is to first construct a `k \times n` matrix using Sage's random_element method for the MatrixSpace class. The construction is probabilistic but should only fail extremely rarely. INPUT: Integers n,k, with `n>k`, and a finite field F OUTPUT: Returns a "random" linear code with length n, dimension k over field F. EXAMPLES:: sage: C = codes.RandomLinearCode(30,15,GF(2)) sage: C Linear code of length 30, dimension 15 over Finite Field of size 2 sage: C = codes.RandomLinearCode(10,5,GF(4,'a')) sage: C Linear code of length 10, dimension 5 over Finite Field in a of size 2^2 AUTHORS: - David Joyner (2007-05) """ MS = MatrixSpace(F,k,n) for i in range(50): G = MS.random_element() if G.rank() == k: V = span(G.rows(), F) return LinearCodeFromVectorSpace(V) # may not be in standard form MS1 = MatrixSpace(F,k,k) MS2 = MatrixSpace(F,k,n-k) Ik = MS1.identity_matrix() A = MS2.random_element() G = Ik.augment(A) return LinearCode(G) # in standard form