1#!/usr/bin/env python
2
3import polypy
4import polypy_test
5
6import sys
7
8polypy_test.init()
9
10x = polypy.Variable("x");
11y = polypy.Variable("y");
12
13polypy.variable_order.set([y, x])
14
15polypy_test.start("model-based GCD")
16
17# polypy.trace_enable("coefficient::gcd")
18# polypy.trace_enable("polynomial")
19# polypy.trace_enable("coefficient")
20# polypy.trace_enable("coefficient::order")
21# polypy.trace_enable("coefficient::reduce")
22polypy.trace_enable("coefficient::mgcd")
23
24x0 = polypy.Variable("x0");
25x1 = polypy.Variable("x1");
26x2 = polypy.Variable("x2");
27x3 = polypy.Variable("x3");
28x4 = polypy.Variable("x4");
29
30polypy.variable_order.set([x0, x1, x2, x3, x4])
31
32m = polypy.Assignment()
33m.set_value(x0, 2)
34m.set_value(x1, 3)
35m.set_value(x2, 3)
36m.set_value(x3, 9)
37
38
39A = (1*x3)*x4**4 + ((-2*x0)*x3 + (2*x1))*x4**3 + ((1*x0**2)*x3 + (2*x2 + ((-2*x0)*x1 - 40)))*x4**2 + (80*x0)*x4 + (-40*x0**2)
40B = A.derivative()
41
42PSC = A.psc(B)
43print("PSC = {0}".format(PSC))
44MGCD = A.mgcd(B, m)
45print("MGCD = {0}".format(MGCD))
46
47sys.exit()
48
49
50
51m = polypy.Assignment()
52m.set_value(y, -1)
53A = 1*x**11 - 110*x**9 + 7920*x**7 - 332640*x**5 + 6652800*x**3 + (110*y**8 - 7920*y**6 + 332640*y**4 - 6652800*y**2)*x
54B = 72*x**6 - 3024*x**4 + 60480*x**2 + (1*y**8 - 72*y**6 + 3024*y**4 - 60480*y**2)
55print(A.mgcd(B, m))
56
57sys.exit()
58
59m = polypy.Assignment()
60m.set_value(y, -1)
61
62A = 1*x
63B = 72*x**6 - 3024*x**4 + 60480*x**2 + (1*y**8 - 72*y**6 + 3024*y**4 - 60480*y**2)
64C = 1*x**11 - 110*x**9 + 7920*x**7 - 332640*x**5 + 6652800*x**3 + (110*y**8 - 7920*y**6 + 332640*y**4 - 6652800*y**2)*x
65
66m = polypy.Assignment()
67m.set_value(y, 0)
68
69A = 72*x**6 - 3024*x**4 + 60480*x**2 + (y**8 - 72*y**6 + 3024*y**4 - 60480*y**2)
70B = A.derivative()
71
72PSC = A.psc(B)
73MGCD = A.mgcd(B, m)
74
75print("A = {0}".format(A))
76print("B = {0}".format(B))
77print("PSC = {0}".format(PSC))
78print("MGCD = {0}".format(MGCD))
79
80sys.exit(0)
81
82x5 = polypy.Variable("x5")
83x9 = polypy.Variable("x9")
84x10 = polypy.Variable("x10")
85x11 = polypy.Variable("x11")
86x12 = polypy.Variable("x12")
87
88polypy.variable_order.set([x9, x12, x11, x10, x5]);
89
90m = polypy.Assignment()
91m.set_value(x9, 0)
92m.set_value(x12, 0)
93m.set_value(x11, 0)
94m.set_value(x10, 0)
95
96A = (((1*x12**6 + (4*x9)*x12**5 + (10*x9**2)*x12**4 + (14*x9**3)*x12**3 + (13*x9**4)*x12**2 + (6*x9**5)*x12 + (1*x9**6))*x11**2)*x10**2 + (((2*x9**2)*x12**6 + (4*x9**3)*x12**5 + (6*x9**4)*x12**4 + (2*x9**5)*x12**3)*x11)*x10 + ((1*x9**4)*x12**6))*x5**2 + ((((-1*x9)*x12**3 + (-1*x9**2)*x12**2 + (-1*x9**3)*x12)*x11**4)*x10**4 + ((-2*x12**6 + (-9*x9)*x12**5 + (-17*x9**2)*x12**4 + (-21*x9**3)*x12**3 + (-12*x9**4)*x12**2 + (-4*x9**5)*x12)*x11**3)*x10**3 + (((-2*x9**2)*x12**6 + (-6*x9**3 - 2*x9)*x12**5 + (-4*x9**4 - 8*x9**2)*x12**4 + (-3*x9**5 - 16*x9**3)*x12**3 + (-1*x9**6 - 18*x9**4)*x12**2 + (-1*x9**7 - 10*x9**5)*x12 + (-2*x9**6))*x11**2)*x10**2 + (((-1*x9**5 - 2*x9**3)*x12**5 + (-1*x9**6 - 4*x9**4)*x12**4 + (-1*x9**7 - 2*x9**5)*x12**3)*x11)*x10)*x5 + ((((1*x9)*x12**3 + (1*x9**2)*x12**2)*x11**5)*x10**5 + ((1*x12**6 + (5*x9)*x12**5 + (7*x9**2)*x12**4 + (6*x9**3)*x12**3 + (3*x9**4)*x12**2 + (1*x9**3)*x12)*x11**4)*x10**4 + (((2*x9**3 + 2*x9)*x12**5 + (2*x9**4 + 7*x9**2)*x12**4 + (1*x9**5 + 13*x9**3)*x12**3 + (1*x9**6 + 8*x9**4)*x12**2 + (4*x9**5)*x12)*x11**3)*x10**3 + (((-1*x9**2)*x12**6 + (1*x9**5)*x12**5 + (1*x9**6 - 2*x9**4 + 1*x9**2)*x12**4 + (2*x9**5 + 4*x9**3)*x12**3 + (6*x9**4)*x12**2 + (1*x9**7 + 4*x9**5)*x12 + (1*x9**6))*x11**2)*x10**2 + (((-2*x9**4)*x12**6 + (-1*x9**6)*x12**4 + (1*x9**7)*x12**3)*x11)*x10 + ((-1*x9**6)*x12**6))
97B = (((2*x12**6 + (8*x9)*x12**5 + (20*x9**2)*x12**4 + (28*x9**3)*x12**3 + (26*x9**4)*x12**2 + (12*x9**5)*x12 + (2*x9**6))*x11**2)*x10**2 + (((4*x9**2)*x12**6 + (8*x9**3)*x12**5 + (12*x9**4)*x12**4 + (4*x9**5)*x12**3)*x11)*x10 + ((2*x9**4)*x12**6))*x5 + ((((-1*x9)*x12**3 + (-1*x9**2)*x12**2 + (-1*x9**3)*x12)*x11**4)*x10**4 + ((-2*x12**6 + (-9*x9)*x12**5 + (-17*x9**2)*x12**4 + (-21*x9**3)*x12**3 + (-12*x9**4)*x12**2 + (-4*x9**5)*x12)*x11**3)*x10**3 + (((-2*x9**2)*x12**6 + (-6*x9**3 - 2*x9)*x12**5 + (-4*x9**4 - 8*x9**2)*x12**4 + (-3*x9**5 - 16*x9**3)*x12**3 + (-1*x9**6 - 18*x9**4)*x12**2 + (-1*x9**7 - 10*x9**5)*x12 + (-2*x9**6))*x11**2)*x10**2 + (((-1*x9**5 - 2*x9**3)*x12**5 + (-1*x9**6 - 4*x9**4)*x12**4 + (-1*x9**7 - 2*x9**5)*x12**3)*x11)*x10)
98
99print(A.mgcd(B, m))
100
101m = polypy.Assignment()
102m.set_value(y, 0)
103
104polypy.variable_order.set([y, x])
105
106p = (x - y)*(x + y) - 1
107q = x - 1
108
109print(p.gcd(q))
110print(p.mgcd(q, m))
111