예제 #1
0
    def test_factor(self):
        for method in ['ts', 'bfa', 'cz']:
            t = Var('t')
            x = Var('x')
            if method != 'cz':
                field = IF(2)[t]

                f = (t + 1) @ field
                self.assertCountEqual([f], field.factor(f, method=method),
                                      "easy test " + method)

                g = (t + 1) @ field
                h = t @ field
                f = (g * h) @ field
                self.assertCountEqual([g, h], field.factor(f, method=method),
                                      "easy test " + method)

                f = (g**2) @ field
                self.assertCountEqual([g, g], field.factor(f, method=method),
                                      "easy test " + method)

            field = IF(5)[t]
            g = (2 * t + 1) @ field
            h = field.divmod(g, 2)[0]
            f = (g**2) @ field
            self.assertCountEqual([h, h, 4], field.factor(f, method=method),
                                  "medium test " + method)

            g = (t**3 + t + 1) @ field
            h = (t + 2) @ field
            f = (g**2 * h**2) @ field
            self.assertCountEqual([g, g, h, h], field.factor(f, method=method),
                                  "medium test " + method)

            if method != 'cz':
                field = IF(2, x**3 + x + 1)[t]
                f1 = (t + 1) @ field
                f2 = (t + x + 1) @ field
                f3 = (t**2 + t * x + x) @ field
                f = (f1**3 * f2**2 * f3) @ field
                self.assertCountEqual([f1, f1, f1, f2, f2, f3],
                                      field.factor(f, method=method),
                                      "hard test " + method)

            field = IF(3, x**2 + 1)[t]
            f1 = (t + 2) @ field
            f2 = (t**2 + t * (x + 1) + 2) @ field
            f = (f1**5 * f2**3) @ field
            self.assertCountEqual([f1, f1, f1, f1, f1, f2, f2, f2],
                                  field.factor(f, method=method),
                                  "hard test " + method)
예제 #2
0
    def test_ed_factor(self):
        t = Var('t')
        x = Var('x')
        field = IF(2)[t]

        self.assertCountEqual([(t + 1) @ field],
                              field.equal_degree_factorization(t + 1, 1),
                              "easy test")

        f = (t**2 + 1) @ field
        self.assertCountEqual([(t + 1) @ field, (t + 1) @ field],
                              field.equal_degree_factorization(f, 1),
                              "easy test")

        g = (t**3 + t + 1) @ field
        h = (t**3 + t**2 + 1) @ field
        f = (g * h) @ field
        self.assertCountEqual([g, h], field.equal_degree_factorization(f, 3),
                              "medium test")

        field = IF(7)[t]
        g = (t**3 + 5 * t + 5) @ field
        h = (t**3 + 4 * t**2 + 3) @ field
        f = (g * h) @ field
        self.assertCountEqual([g, h], field.equal_degree_factorization(f, 3),
                              "medium test")

        field = IF(2, x**3 + x + 1)[t]
        f1 = (t**2 + t + x + 1) @ field
        f2 = (t**2 * x + t * (x + 1) + x) @ field
        f = (f1 * f2) @ field
        self.assertCountEqual([f1, f2], field.equal_degree_factorization(f, 2),
                              "hard test")