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)
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")