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