Пример #1
0
    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])
Пример #2
0
    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])
Пример #3
0
    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])
Пример #4
0
    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])
Пример #5
0
	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'
Пример #6
0
 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])
Пример #7
0
 def test_init(self):
     a = Polynomial([1, 1, 2, 0, 1])
     self.assertEqual(a.tolist(), [1, 1, 2, 0, 1])
Пример #8
0
 def test_complement(self):
     a = Polynomial([1, 2, 0])
     c = a.complement()
     self.assertEqual(c.tolist(), [2, 1, 0])
Пример #9
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