def test_add_elementwise(self): c = Polynomial([0]) a = [Element(0), Element(2), Element(1)] b = [Element(1), Element(2), Element(2)] elements = c._add_elementwise(a, b) self.assertEqual([1, 1, 0], [e.element for e in elements])
def test_pow(self): c = Polynomial([2, 0, 1]) c = pow(c, 0) self.assertEqual(c.tolist(), [1]) c = Polynomial([2, 0, 1]) c = pow(c, 3) self.assertEqual(c.tolist(), [2, 0, 0, 0, 0, 0, 1])
def test_multiply_element_to_polynomial(self): a = Polynomial([0]) e = a._multiply_element_to_polynomial(Polynomial([1, 0, 2]), Element(2)) p = a._elements_to_polynomial(e) self.assertEqual(p.tolist(), [2, 0, 1]) e = a._multiply_element_to_polynomial(Polynomial([2, 2, 2, 1]), Element(2)) p = a._elements_to_polynomial(e) self.assertEqual(p.tolist(), [1, 1, 1, 2])
def test_tomonic(self): a = Polynomial([2, 0, 2, 1]) a = a.tomonic() self.assertEqual(a.tolist(), [1, 0, 1, 2]) a = Polynomial([1, 0, 2, 1]) a.tomonic() self.assertEqual(a.tolist(), [1, 0, 2, 1])
if delta > base**power - 1: print 'Delta must be <=', base**power - 1 sys.exit(1) # Generate $GF(q^n)$ for $q=base $n$=power and find our root of unity GFqn = GFpoly(base, power) alpha = nth_root_of_unity(GFqn, base**power - 1) # Calculate the generator polynomial $G(x) = \prod_{i=1}^{\delta}{(x - \alpha^i)}$ Gpoly = Polynomial((GFqn(1),)) for b in range(1, delta): Gpoly *= Polynomial((-(alpha ** b), GFqn(1))) codeword_len = base**power - 1 message_len = base**power - len(Gpoly) # Compute the codeword corresponding to the message [1, 2, ... message_len] message = Polynomial([GFqn(i + 1) for i in range(message_len)]) codeword = message * Gpoly print 'Alpha =', alpha.tonumber() print 'g(x) =', Gpoly print 'Message', message.asvector(), 'maps to', codeword.asvector() print 'message % g(x) =', message % Gpoly print 'codeword % g(x) =', codeword % Gpoly maxErrors = (codeword_len - message_len) // 2 print 'Can detect', codeword_len - message_len, 'errors' print 'Can correct', maxErrors, 'errors'
def test_remove_trailing_zeros(self): a = Polynomial([0, 0, 2, 1]) self.assertEqual(a.tolist(), [2, 1]) a = Polynomial([0, 0, 0, 0]) self.assertEqual(a.tolist(), [0])
def test_init(self): a = Polynomial([1, 1, 2, 0, 1]) self.assertEqual(a.tolist(), [1, 1, 2, 0, 1])
def test_complement(self): a = Polynomial([1, 2, 0]) c = a.complement() self.assertEqual(c.tolist(), [2, 1, 0])
sys.exit(1) base = int(sys.argv[1]) power = int(sys.argv[2]) delta = int(sys.argv[3]) if delta > base**power - 1: print 'Delta must be <=', base**power - 1 sys.exit(1) # Generate $GF(q^n)$ for $q=base $n$=power and find our root of unity GFqn = GFpoly(base, power) alpha = nth_root_of_unity(GFqn, base**power - 1) # Calculate the generator polynomial $G(x) = \prod_{i=1}^{\delta}{(x - \alpha^i)}$ Gpoly = Polynomial((GFqn(1), )) for b in range(1, delta): Gpoly *= Polynomial((-(alpha**b), GFqn(1))) codeword_len = base**power - 1 message_len = base**power - len(Gpoly) # Compute the codeword corresponding to the message [1, 2, ... message_len] message = Polynomial([GFqn(i + 1) for i in range(message_len)]) codeword = message * Gpoly print 'Alpha =', alpha.tonumber() print 'g(x) =', Gpoly print 'Message', message.asvector(), 'maps to', codeword.asvector() print 'message % g(x) =', message % Gpoly print 'codeword % g(x) =', codeword % Gpoly