fixed issue with de Rham basis and coordinates for more than one place at infty (lift_to_de_rham)

This commit is contained in:
Jędrzej Garnek 2025-01-02 18:29:37 +01:00
parent 3843cfa550
commit dedec88e64

View File

@ -449,7 +449,7 @@ class as_cover:
i += 1
return result_fcts
def lift_to_de_rham(self, fct, threshold = 30):
def lift_to_de_rham(self, fct, basis = 0, threshold = 30):
'''Given function fct, find form eta regular on affine part such that eta - d(fct) is regular in infty. (Works for one place at infty now)'''
from itertools import product
x_series = self.x_series
@ -469,17 +469,27 @@ class as_cover:
#Tworzymy zbiór S form z^i x^j y^k dx/y o waluacji >= waluacja z^(p-1)*dx/y
S = [(fct.diffn(), fct.diffn().expansion_at_infty())]
pr = [list(GF(p)) for _ in range(n)]
holo = self.holomorphic_differentials_basis(threshold = threshold)
if basis == 0:
holo = self.holomorphic_differentials_basis(threshold = threshold)
else:
holo = basis
for i in range(0, threshold*r):
for j in range(0, m):
for k in product(*pr):
eta = as_form(self, x^i*prod(z[i1]^(k[i1]) for i1 in range(n))/y^j)
eta_exp = eta.expansion_at_infty()
S += [(eta, eta_exp)]
forms = holomorphic_combinations(S)
if len(forms) <= self.genus():
S = holomorphic_combinations(S)
########
for i in range(delta):
for g in self.fiber(place = i):
if i!=0 or g != self.group.one:
S = [(omega, omega.group_action(g).expansion_at_infty(place = i)) for omega in S]
S = holomorphic_combinations(S)
######
if len(S) <= self.genus():
raise ValueError("Increase threshold!")
for omega in forms:
for omega in S:
for a in F:
if (a*omega + fct.diffn()).is_regular_on_U0():
return a*omega + fct.diffn()
@ -538,7 +548,7 @@ class as_cover:
for omega in holo_basis:
result += [as_cech(self, omega, as_function(self, 0))]
for f in cohomology_basis:
omega = self.lift_to_de_rham(f, threshold = threshold)
omega = self.lift_to_de_rham(f, basis = holo_basis, threshold = threshold)
result += [as_cech(self, omega, f)]
return result