def coeff(F):
C=[]
C.append(int(F.coefficient({b:0,c:0,d:0,x:0,y:0,z:0})))
C.append(int(F.coefficient({b:1,c:0,d:0,x:0,y:0,z:0})))
C.append(int(F.coefficient({b:0,c:1,d:0,x:0,y:0,z:0})))
C.append(int(F.coefficient({b:0,c:0,d:1,x:0,y:0,z:0})))
C.append(int(F.coefficient({b:0,c:0,d:0,x:1,y:0,z:0})))
C.append(int(F.coefficient({b:0,c:0,d:0,x:0,y:1,z:0})))
C.append(int(F.coefficient({b:0,c:0,d:0,x:0,y:0,z:1})))
return C
def ExtractIneqs(L):
INEQS=[(g.transpose()*P*g-P).trace() for g in L]
ineqs=[[0,0,0,0,1,0,0],[0,0,0,0,0,1,0],[0,0,0,0,0,0,1]]
for F in INEQS:
ineqs.append(coeff(F))
return ineqs
S.<b,c,d,x,y,z>=ZZ[]
P=matrix([[x,b,c],[b,y,d],[c,d,z]])
BS = []
for bs in GL(3,ZZ).gens():
BS.append(matrix(bs.gap().sage()))
L = []
for ii in range(3):
for jj in range(3):
for kk in range(3):
for ll in range(3):
gi = (BS[1]^ii) * (BS[0]^jj) * (BS[2]^kk) * (BS[3]^ll)
L.append(gi)
L.append(gi^-1)
L.append(gi.transpose())
L.append((gi.transpose())^-1)
poly=Polyhedron(ieqs=ExtractIneqs(L), base_ring=ZZ)
L2 = []
for ii in range(4):
for jj in range(4):
for kk in range(4):
for ll in range(4):
gi = (BS[1]^ii) * (BS[0]^jj) * (BS[3]^kk) * (BS[2]^ll)
L2.append(gi)
L2.append(gi^-1)
L2.append(gi.transpose())
L2.append((gi.transpose())^-1)
poly2=Polyhedron(ieqs=ExtractIneqs(L2), base_ring=ZZ)
print("threebythree:\n")
print("Poly1:")
print(poly)
print("Poly2:")
print(poly2)
print("\nTwo polys are the same?")
print(poly == poly2)
print("\nPoly1:")
for i in poly.Vrepresentation():
print(i)
for i in poly2.Hrepresentation():
print(i)
print("\nPoly2:")
for i in poly2.Vrepresentation():
print(i)
for i in poly2.Hrepresentation():
print(i)