def testMultMatrix(): f1 = MultiPower( np.array([[[5, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, -2, 0], [0, 0, 0], [0, 0, 0]], [[1, 0, 0], [0, 0, 0], [0, 0, 0]]])) f2 = MultiPower( np.array([[[1, 0, 0], [0, 1, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [1, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]])) f3 = MultiPower( np.array([[[0, 0, 0], [0, 0, 0], [3, 0, 0]], [[0, -8, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]])) F = [f1, f2, f3] Gr = Groebner(F) GB = Gr.solve() VB = rf.vectorSpaceBasis(GB) x = MultiPower(np.array([[0], [1]])) y = MultiPower(np.array([[0, 1]])) z = MultiPower(np.array([[[0, 1]]])) mx_RealEig = [eig.real for eig in \ np.linalg.eigvals(rf.multMatrix(x, GB, VB)) if (eig.imag == 0)] my_RealEig = [eig.real for eig in \ np.linalg.eigvals(rf.multMatrix(y, GB, VB)) if (eig.imag==0)] mz_RealEig = [eig.real for eig in \ np.linalg.eigvals(rf.multMatrix(z, GB, VB)) if (eig.imag==0)] assert (len(mx_RealEig) == 2) assert (len(my_RealEig) == 2) assert (len(mz_RealEig) == 2) assert (np.allclose(mx_RealEig, [-1.100987715, .9657124563], atol=1.e-8)) assert (np.allclose(my_RealEig, [-2.878002536, -2.81249605], atol=1.e-8)) assert (np.allclose(mz_RealEig, [3.071618528, -2.821182227], atol=1.e-8))
def test_solve(): #First Test A = MultiPower(np.array([[-10, 0], [0, 1], [1, 0]])) B = MultiPower(np.array([[-26, 0, 0], [0, 0, 1], [0, 0, 0], [1, 0, 0]])) C = MultiPower( np.array([[-70, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 0], [0, 0, 0, 0], [1, 0, 0, 0]])) grob = Groebner([A, B, C]) X = MultiPower(np.array([[-2.], [1.]])) Y = MultiPower(np.array([[-3., 1.]])) x1, y1 = grob.solve() assert (np.any([X == i and Y == j for i, j in permutations((x1, y1), 2)])) #Second Test A = MultiPower( np.array([[[[ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]], [[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]]], [[[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]], [[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]]]])) B = MultiPower( np.array([[[[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]], [[ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]]], [[[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]], [[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]]]])) C = MultiPower( np.array([[[[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]], [[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]]], [[[ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]], [[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]]]])) grob = Groebner([A, B, C]) w1, x1, y1, z1 = grob.solve() W = MultiPower( np.array([[[[0.], [0.]], [[0.], [0.]], [[0.], [0.]], [[1.], [0.]]], [[[0.], [-1.]], [[0.], [0.]], [[0.], [0.]], [[0.], [0.]]]])) X = MultiPower( np.array([[[[0., 0., 0., 0., 0., 1.], [-1., 0., 0., 0., 0., 0.]]]])) Y = MultiPower(np.array([[[[0.], [0.], [1.]], [[-1.], [0.], [0.]]]])) Z = MultiPower( np.array([[[[0.], [0.]], [[0.], [0.]], [[0.], [1.]]], [[[-1.], [0.]], [[0.], [0.]], [[0.], [0.]]]])) assert (np.any([ W == i and X == j and Y == k and Z == l for i, j, k, l in permutations((w1, x1, y1, z1), 4) ])) #Third Test A = MultiPower(np.array([[-1, 0, 1], [0, 0, 0]])) B = MultiPower(np.array([[-1, 0, 0], [0, 1, 0], [1, 0, 0]])) grob = Groebner([A, B]) x1, y1 = grob.solve() assert (np.any([A == i and B == j for i, j in permutations((x1, y1), 2)])) #Fourth Test A = MultiPower(np.array([[-10, 0], [0, 1], [1, 0]])) B = MultiPower(np.array([[-25, 0, 0], [0, 0, 1], [0, 0, 0], [1, 0, 0]])) C = MultiPower( np.array([[-70, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 0], [0, 0, 0, 0], [1, 0, 0, 0]])) grob = Groebner([A, B, C]) X = MultiPower(np.array([[1.]])) x1 = grob.solve() assert (X == x1[0]) #Fifth Test A = MultiPower(np.array([[1, 1], [0, 0]])) B = MultiPower(np.array([[1, 0], [1, 0]])) C = MultiPower(np.array([[1, 0], [1, 0], [0, 1]])) grob = Groebner([A, B, C]) X = MultiPower(np.array([[1.]])) x1 = grob.solve() assert (X == x1[0])