75 lines
1.9 KiB
Python
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.
|
|
|
|
|