AplK/test_primitive.py

75 lines
1.9 KiB
Python

from operator import itemgetter
load('aplK.py')
s3 = SimplicialAlgebraplN(3)
s3.inject_variables()
q = y1*y2*y3
p = q.propagate([0,1,2,3],4)
p = p.reduce()
s4 = SimplicialAlgebraplN(4)
s4.inject_variables()
#p = -t3*y0*y1*y2 + t2*y0*y1*y3 - t1*y0*y2*y3 + t0*y1*y2*y3
#p = p.reduce()
## def _get_primitive_basis(self):
basis = []
for monomial in p.dict().keys():
basis += p._get_primitive_basis_of_a_monomial(monomial)
basis = list(set(basis))
terms = []
apl = p.parent()
for b in basis:
dim = len(b)//2 - 1
terms.append(p._get_term(1, b, apl.gens()))
terms.sort(reverse=False)
with open("output/primitive_basis_without_kernel:terms.txt", 'w') as fp:
print("original polynomial: " + str(p),file=fp)
print(terms,file=fp)
#print("primitive basis without kernel terms")
#print(terms)
kernel_terms = []
kernel_terms += p._add_kernel_terms_to_primitive_basis(basis)
kernel_terms = list(set(kernel_terms))
terms = []
apl = p.parent()
for b in kernel_terms:
dim = len(b)//2 - 1
terms.append(p._get_term(1, b, apl.gens()))
terms.sort(reverse=False)
#print("kernel terms")
#print(terms)
def get_kernel_terms(p, kernel_basis, parent, degree):
kernel_terms = []
for k in kernel_basis:
dim = len(k)//2 - 1
term = p._get_term(1, k, parent.gens())
e = k[5:]
gens_idx = []
for idx,ex in enumerate(e):
if ex:
gens_idx.append(idx)
list_ring_gens = [itemgetter(*gens_idx)(parent.gens())]*degree
sets = list_ring_gens+[[term]]
cp = cartesian_product(sets)
kernel_terms += [prod(e) for e in cp.list()]
return list(set(kernel_terms))
basis = []
for degree in range(5):
basis = get_kernel_terms(p, kernel_terms, s4, degree)
with open("output/kernel_terms_degree_"+str(degree)+".txt", 'w') as fp:
for b in basis:
print(b,file=fp)
#implicit fp.close() here as "with" scope ends.