Exemple #1
0
 def test6(self):
     """Check square free factorization over F5
     """
     f5 = PrimeField(5)
     p = f5.polynomial(-1, 2, 1, 1)
     sqf, factors = factorize(p).square_free()
     self.assertTrue(sqf == p)
Exemple #2
0
    def testPrimeAndPolynomial(self):
        """Checking correct transtyping int to Polynomial for + and == in F2
        """
        f2 = PrimeField(2)
        p = f2.polynomial(1, 1, 1)
        self.assertTrue(p + 1 == f2.polynomial(0, 1, 1))

        self.assertTrue(p.monic(0) + 1 == 0)
Exemple #3
0
    def test3(self):
        """Check: irreducibility over F3, medium degree (>2)
        """
        f3 = PrimeField(3)
        p = f3.polynomial(-1, -1, -1, 1)
        self.assertIsIrreducible(p)

        p = f3.polynomial(1, 1, 1, 1)
        self.assertIsNotIrreducible(p)
Exemple #4
0
 def test5(self):
     """Check: printable representation over a prime field
     """
     f2 = PrimeField(2)
     p = f2.polynomial(1)
     p += p.monic(3)
     p += p.monic(32)
     self.assertEqual(str(p), '1 + X^3 + X^32')
     self.assertIsNotIrreducible(p)
Exemple #5
0
    def test2(self):
        """Check: irreducibility over F3, low degree (<3)
        """
        f3 = PrimeField(3)
        p = f3.polynomial(-1, 1, 1)
        self.assertIsIrreducible(p)

        p = f3.polynomial(1, 1, 1)
        self.assertIsNotIrreducible(p)
Exemple #6
0
    def test4(self):
        """Parser test for a linear polynomial over the finite field of order 8
        """
        expr = '-(1+w+w^2) + X'
        f2 = PrimeField(2)
        g = f2.polynomial(1, 1, 0, 1)
        f8 = FiniteField(2, 3, g, root_symbol='w')

        p = symbolic_polynomial(expr, f8)
        self.assertTrue(p == f8.polynomial(f8(1, 1, 1), 1))
Exemple #7
0
    def test1(self):
        """Parser test over F4
        """
        f2 = PrimeField(2)
        f4 = FiniteField(2, 2, f2.polynomial(1, 1, 1))

        expr = '+(j+1)X + (1+j)X^2 + (j)'
        p = symbolic_polynomial(expr, f4)

        self.assertTrue(p == f4.polynomial(f4(0, 1), f4(1, 1), f4(1, 1)))
Exemple #8
0
 def test3(self):
     """Check distinct degree factorization of a square free equal degree polynomial over F3
     """
     f3 = PrimeField(3)
     p1 = f3.polynomial(1, 1)
     p2 = f3.polynomial(-1, 1)
     p = p1 * p2  # square free equal degree
     factors = factorize(p).distinct_degree()
     self.assertTrue(len(factors) == 1)
     self.assertTrue(factors[0].value == p)
Exemple #9
0
 def test2(self):
     """Check distinct degree factorization of a non square free polynomial over F2
     """
     f2 = PrimeField(2)
     p = f2.polynomial(1, 0, 1)  # non square free
     factors = factorize(p).distinct_degree()
     self.assertTrue(all([f.is_irreducible for f in factors]))
     self.assertTrue(len(factors) == 2)
     self.assertTrue(p == factors[0].value * factors[1].value)
     self.assertTrue(factors[0].value == factors[1].value)
Exemple #10
0
    def test6(self):
        """Check: irreduciblity over F3, performances for very high degree (>800)
        """
        f3 = PrimeField(3)
        p0 = f3.polynomial(1, 0, 1, 0, 1, 0, 0, 0, 1)
        p1 = f3.polynomial(-1, 0, 0, 0, 1, 0, 0, -1, 1)
        p2 = f3.polynomial(1, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 1)
        p = p0 * p1 * p2

        self.assertIsNotIrreducible(p)
Exemple #11
0
    def testF16gcd(self):
        """Check GCD of polynomials over F16
        """
        f2 = PrimeField(2)
        p = f2.polynomial(1, 1, 0, 0, 1)
        f16 = FiniteField(2, 4, p)

        a = symbolic_polynomial('X^6 + X^3 + 1', f16)
        b = symbolic_polynomial('X^3 + 1', f16)

        self.assertEqual(gcd(a, b), f16.polynomial(1))
Exemple #12
0
    def testF9Product(self):
        """Check product of polynomials over F9
        """
        f3 = PrimeField(3)
        p = f3.polynomial(1, 0, 1)
        f9 = FiniteField(3, 2, p)
        a = symbolic_polynomial('-1 + X - (1+j)X^2', f9)
        b = symbolic_polynomial('1 + X^2 + (j)X', f9)

        self.assertTrue(
            a * b == f9.polynomial(-1, f9(1, -1), 1, f9(-1, -1), f9(-1, -1)))
Exemple #13
0
    def testF25Repr(self):
        """Check equivalence of symbolic representation and printable representation of a polynomial over F25
        """
        f5 = PrimeField(5)
        f25 = FiniteField(5, 2, f5.polynomial(2, 0, 1))

        p = symbolic_polynomial('(1+j)X^2 + (j)X^5 + X + 2X^3 + (2+j)', f25)
        self.assertEqual(
            p,
            eval(repr(f25.polynomial(f25(2, 1), 1, f25(1, 1), 2, 0, f25(0,
                                                                        1)))))
Exemple #14
0
    def test1(self):
        """Check square free factorization of an irreducible polynomial over F2
        """
        f2 = PrimeField(2)
        p1 = f2.polynomial(1, 0, 1, 1)

        sqf, factors = factorize(p1).square_free()

        self.assertTrue(len(factors) == 0)
        self.assertTrue(sqf.is_irreducible)
        self.assertTrue(sqf == p1)
Exemple #15
0
    def test5(self):
        """Check distinct degree factorization of a equal degree polynomial over F5
        """
        f5 = PrimeField(5)
        p1 = f5.polynomial(2, 0, 1)
        p2 = f5.polynomial(1, 1, 1)

        p = p1 * p2
        factors = factorize(p).distinct_degree()
        self.assertTrue(len(factors) == 1)
        self.assertTrue(factors[0].value == p)
Exemple #16
0
    def test1(self):
        """Check distinct degree factorization over F2
        """
        f2 = PrimeField(2)
        p0 = f2.polynomial(1, 1)
        p1 = f2.polynomial(1, 1, 1)
        p = p0 * p1

        factors = factorize(p).distinct_degree()
        self.assertTrue(all([f.is_irreducible for f in factors]))
        self.assertTrue(len(factors) == 2)
        self.assertTrue(p == factors[0].value * factors[1].value)
Exemple #17
0
    def test2(self):
        """Check full factorization over F5
        """
        f5 = PrimeField(5)
        p = f5.polynomial(1, 2, 0, 2, -1, 1)

        try:
            factors, c = factorize(p).cantor_zassenhaus()
            self.assertTrue(c == f5(1))
            self.assertTrue(factorize(p).factors_product(factors) == p)
        except RuntimeError as e:
            self.skipTest(f'Non-deterministic factorization failed: {e}')
Exemple #18
0
    def test8(self):
        """Parser check of internal state automaton
        '(j+)X' is an invalid expression
        """
        expr = '(j+)X'

        f2 = PrimeField(2)
        p = f2.polynomial(1, 1, 1)
        f4 = FiniteField(2, 2, p)

        with self.assertRaises(SyntaxError):
            symbolic_polynomial(expr, f4)
Exemple #19
0
    def test5(self):
        """Check equal degree factorization over F2: parameter mismatch
        """
        f2 = PrimeField(2)
        p = f2.polynomial(1, 1, 1)

        # bad parameters
        with self.assertRaises(RuntimeError) as a_exc:
            _ = factorize(p).equal_degree(2, 1)

        self.assertEqual(str(a_exc.exception),
                         'unable to find 2 degree 1 factors for 1 + X + X^2')
Exemple #20
0
    def test2(self):
        """Check square free factorization over F2
        """
        f2 = PrimeField(2)
        p1 = f2.polynomial(1, 0, 1, 0, 1)

        sqf, factors = factorize(p1).square_free()

        self.assertTrue(sqf.is_unit)
        self.assertTrue(len(factors) == 1)
        self.assertTrue(factors[0].multiplicity == 2)
        self.assertTrue(factors[0].value == f2.polynomial(1, 1, 1))
Exemple #21
0
    def test6(self):
        """Check distinct degree factorization over F5
        """
        f5 = PrimeField(5)
        p1 = f5.polynomial(2, 0, 1)
        p2 = f5.polynomial(1, 1, 0, 1)

        p = p1 * p2
        factors = factorize(p).distinct_degree()
        self.assertTrue(len(factors) == 2)
        self.assertTrue(factors[0].max_degree == factors[0].value.degree)
        self.assertTrue(factors[1].max_degree == factors[1].value.degree)
Exemple #22
0
    def testF4Str(self):
        """Check printable representation of a polynomial over F4
        """
        f2 = PrimeField(2)
        p_gen = f2.polynomial(1, 1, 1)
        f4 = FiniteField(2, 2, p_gen)

        p = f4.polynomial(f4(0, 1), f4(1, 0), f4(1, 1))
        self.assertTrue(str(p) == '(j) + X + (1+j)X^2')

        p *= f4(0, 1)
        self.assertTrue(str(p) == '(1+j) + (j)X + X^2')
Exemple #23
0
    def testPrimeAndFinite(self):
        """Checking correct transtyping int, PFElement to FFElement for + and - in F9
        """
        f3 = PrimeField(3)
        f9 = FiniteField(3, 2, f3.polynomial(-1, 1, 1))

        self.assertTrue(f9(1, 0) + 1 == f3(-1))
        self.assertTrue(1 + f3(1) == f9(-1, 0))
        self.assertTrue(f9(-1, 0) == -1)

        self.assertTrue(3 * f9(-1, 0) == f9(-1, 0) * 3)
        self.assertTrue(f3(1) * f9(1, 1) == f3(1) + f9(0, 1))
Exemple #24
0
    def test1(self):
        """Check return type of power in F4 and F2
        """
        f2 = PrimeField(2)
        f4 = FiniteField(2, 2, f2.polynomial(1, 1, 1))

        b = f4(0, 1)**0
        self.assertIsInstance(b, FFElement)
        self.assertTrue(b == 1)

        b = f2(1)**0
        self.assertIsInstance(b, PFElement)
        self.assertTrue(b == 1)
Exemple #25
0
    def test4(self):
        """Check distinct degree factorization over F3
        """
        f3 = PrimeField(3)
        p1 = f3.polynomial(1, 1)
        p2 = f3.polynomial(-1, 1, 1)

        p = p1 * p2
        factors = factorize(p).distinct_degree()
        self.assertTrue(len(factors) == 2)
        self.assertTrue(all([f.is_irreducible for f in factors]))
        self.assertTrue(factors[0].value * factors[1].value == p)
        self.assertTrue(factors[0].value.degree != factors[1].value.degree)
Exemple #26
0
    def test4(self):
        """Check: irreducibility over F3, high degree (>6)
        """
        f3 = PrimeField(3)
        p1 = f3.polynomial(1, 0, 1)
        p2 = f3.polynomial(-1, 1, 1)
        p3 = f3.polynomial(-1, -1, 1)

        p = p1 * p2 * p3
        self.assertIsNotIrreducible(p)

        p = p**4
        self.assertIsNotIrreducible(p)
Exemple #27
0
    def test3(self):
        """Check square free factorization of a quadratic polynomial over F2
        """
        f2 = PrimeField(2)
        p1 = f2.polynomial(1, 1, 1, 1, 1, 1)

        sqf, factors = factorize(p1).square_free()

        self.assertTrue(sqf == f2.polynomial(1, 1))
        self.assertTrue(len(factors) == 1)
        self.assertTrue(factors[0].value.is_irreducible)
        self.assertTrue(factors[0].multiplicity == 2)
        self.assertTrue(factors[0].value**2 * sqf == p1)
Exemple #28
0
    def test5(self):
        """Check square free factorization over F3
        """
        f3 = PrimeField(3)
        p0 = f3.polynomial(1, -1, 0, 0, -1, 0, 0, 1, 1)
        p1 = f3.polynomial(-1, 1, -1, -1, 1)
        self.assertTrue(p0.is_irreducible and p1.is_irreducible)

        p = p0 * p1

        sqf, factors = factorize(p).square_free()
        self.assertTrue(len(factors) == 0)
        self.assertTrue(sqf == p)
Exemple #29
0
    def testF8Add(self):
        """Check addition of polynomials over F8
        """
        f2 = PrimeField(2)
        p = f2.polynomial(1, 1, 0, 1)
        f8 = FiniteField(2, 3, p, root_symbol='w')

        a = symbolic_polynomial('1 + X + (1+w^2)X^3', f8)
        b = symbolic_polynomial('(1+w)X^2 + X^3', f8)

        self.assertEqual(b.trailing, FFElement(f8, (1, 1, 0)))

        self.assertTrue(a + b == f8.polynomial(1, 1, f8(1, 1, 0), f8(0, 0, 1)))
Exemple #30
0
    def test6(self):
        """Check equal degree factorization over F2: non square free polynomial
        """
        f2 = PrimeField(2)
        p = f2.polynomial(1, 1)
        p **= 3

        # non square-free polynomial
        with self.assertRaises(RuntimeError) as a_exc:
            _ = factorize(p).equal_degree(3, 1)

        self.assertEqual(
            str(a_exc.exception),
            'unable to find 3 degree 1 factors for 1 + X + X^2 + X^3')