In [1]:
import sys
from importlib import reload
import sympy
from itertools import product
from collections import defaultdict
In [2]:
sys.path.insert(0, '../')
In [3]:
import multivector as mv
import examples as ex
import embedding as emb
t*(x0,x1,x2,y0,y1,y2) = (t^2*x0, t*x1, t*x2, t-2*y0, t^-1*y1, t^-1*y2)
invariants:
x0*y0
x1*y1
x2*y2
x1*y2
x2*y1
x0*y1^2
x0*y1*y2
x0*y2^2
y0*x1^2
y0*x1*x2
y0*x2^2
In [4]:
q = sympy.symbols(tuple('q%d' %x for x in range(5)))
a = sympy.symbols(tuple('a%d' %x for x in range(3)))
b = sympy.symbols(tuple('b%d' %x for x in range(3)))
#z = sympy.symbols('z0 z1')
x = sympy.symbols('x0 x1 x2')
y = sympy.symbols('y0 y1 y2')
stdbrac = mv.Mv(x+y, {(x[0],y[0]):1, (x[1],y[1]):1, (x[2],y[2]):1}).brac
In [65]:
rmap = {
q[0]: x[0]*y[0],
q[1]: x[1]*y[1],
q[2]: x[2]*y[2],
q[3]: x[1]*y[2],
q[4]: x[2]*y[1],
a[0]: x[0]*(y[1]**2),
a[1]: x[0]*(y[1]*y[2]),
a[2]: x[0]*(y[2]**2),
b[0]: y[0]*(x[1]**2),
b[1]: y[0]*(x[1]*x[2]),
b[2]: y[0]*(x[2]**2)
}
embcoords, invariants = list(zip(*rmap.items()))
In [66]:
gbK = sympy.polys.groebner([ai-xi for (ai,xi) in rmap.items()])
K = [g for g in gbK if not (set(g.as_poly().gens) - set(embcoords))]
In [91]:
{k:(Pi1.brac(q[0], k)/k).simplify() for k in K}
Out[91]:
In [95]:
{k:(Pi1.brac((q[1] - q[2])/2, k)/k).simplify() for k in K}
Out[95]:
In [97]:
Km = [
q[1]*q[2] - q[3]*q[4],
-1*a[2]*b[0] + q[0]*q[3]**2,
-1*a[2]*b[1] + q[0]*q[2]*q[3],
-1*a[1]*b[0] + q[0]*q[1]*q[3],
-1*a[2]*b[2] + q[0]*q[2]**2,
-1*a[1]*b[1] + q[0]*q[3]*q[4],
-1*a[0]*b[0] + q[0]*q[1]**2,
-1*a[0]*b[1] + q[0]*q[1]*q[4],
-1*a[1]*b[2] + q[0]*q[2]*q[4],
-1*a[0]*b[2] + q[0]*q[4]**2,
-1*a[1]*q[3] + a[2]*q[1],
-1*a[0]*q[3] + a[1]*q[1],
a[1]*q[2] - a[2]*q[4],
a[0]*q[2] - a[1]*q[4],
b[0]*q[2] - b[1]*q[3],
-b[0]*q[4] + b[1]*q[1],
b[1]*q[2] - b[2]*q[3],
-b[1]*q[4] + b[2]*q[1],
a[1]*b[1]*q[3] - a[2]*b[0]*q[4],
a[0]*b[1]*q[3] - a[1]*b[0]*q[4],
a[1]*b[2]*q[3] - a[2]*b[1]*q[4],
a[0]*b[2]*q[3] - a[1]*b[1]*q[4],
a[0]*a[2] - a[1]**2,
b[0]*b[2] - b[1]**2
]
In [99]:
Kcoords = sympy.symbols(
['C'] +
['MQ%d' %x for x in range(9)] +
['AQ%d' %x for x in range(4)] +
['BQ%d' %x for x in range(4)] +
['MM%d' %x for x in range(4)] +
['AA%d' %x for x in range(1)] +
['BB%d' %x for x in range(1)]
)
In [114]:
KHom = dict(zip(Kcoords, Km))
kerCoords, kerPolys = list(zip(*KHom.items()))
In [ ]:
In [ ]:
In [ ]:
In [8]:
P = {}
for k1, k2 in product(rmap.keys(), rmap.keys()):
if (k2, k1) not in P.keys():
P[(k1, k2)] = stdbrac(rmap[k1],rmap[k2])
In [9]:
lift = emb.lift(rmap, embcoords, x+y)
In [10]:
Pi = mv.Mv(embcoords, P).mapCoeffs(lambda x:lift(x))
In [11]:
Pi.mapCoeffs(lambda x:x.simplify())
Out[11]:
In [12]:
mv.sBr(Pi,Pi).sort().mapCoeffs(lambda x:x.simplify()/2) == 0
Out[12]:
In [107]:
Jac = mv.sBr(Pi,Pi).sort().mapCoeffs(lambda x:x.simplify()/2)
In [ ]:
In [116]:
Jac.mapCoeffs(liftK)
Out[116]:
In [13]:
Pi_degs = Pi.deg()
In [133]:
reload(emb)
liftK = emb.lift(KHom, kerCoords, embcoords)
In [16]:
for c in sorted(embcoords, key=lambda x:str(x)):
print(c,'\t',-1*mv.sBr(Pi, mv.Mv(embcoords, {():c})).sort().mapCoeffs(lambda x:x.simplify()))
In [134]:
for qk in K:
print(qk,'\t',-1*mv.sBr(Pi, mv.Mv(embcoords, {():qk})).sort().mapCoeffs(liftK), end='\n\n')
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]: