holomorphic differentials for non totally ramified covers
This commit is contained in:
parent
91e66e7c7a
commit
b902e3fdca
@ -175,15 +175,18 @@ class as_cover:
|
|||||||
|
|
||||||
forms = holomorphic_combinations(S)
|
forms = holomorphic_combinations(S)
|
||||||
|
|
||||||
for pt in self.branch_points[1:]:
|
for i in range(delta):
|
||||||
forms = [(omega, omega.expansion(pt=pt)) for omega in forms]
|
for g in self.fiber(place = i):
|
||||||
forms = holomorphic_combinations(forms)
|
if i!=0 or g != self.group.one:
|
||||||
|
forms = [(omega, omega.group_action(g).expansion_at_infty(i)) for omega in forms]
|
||||||
|
forms = holomorphic_combinations(forms)
|
||||||
|
|
||||||
if len(forms) < self.genus():
|
if len(forms) < self.genus():
|
||||||
print("I haven't found all forms, only ", len(forms), " of ", self.genus())
|
print("I haven't found all forms, only ", len(forms), " of ", self.genus())
|
||||||
raise ValueError("Increase threshold.")
|
raise ValueError("Increase threshold.")
|
||||||
#return holomorphic_differentials_basis(self, threshold = threshold + 1)
|
#return holomorphic_differentials_basis(self, threshold = threshold + 1)
|
||||||
if len(forms) > self.genus():
|
if len(forms) > self.genus():
|
||||||
|
print(len(forms), forms)
|
||||||
raise ValueError("Increase precision.")
|
raise ValueError("Increase precision.")
|
||||||
return forms
|
return forms
|
||||||
|
|
||||||
@ -545,6 +548,13 @@ class as_cover:
|
|||||||
F = AS.base_ring
|
F = AS.base_ring
|
||||||
return as_group_action_matrices(F, basis, AS.group.gens, basis = basis)
|
return as_group_action_matrices(F, basis, AS.group.gens, basis = basis)
|
||||||
|
|
||||||
|
def group_action_matrices_poly(AS, mult, basis=0, threshold=10):
|
||||||
|
n = AS.height
|
||||||
|
if basis == 0:
|
||||||
|
basis = AS.holo_polydifferentials_basis(mult = mult, threshold=threshold)
|
||||||
|
F = AS.base_ring
|
||||||
|
return as_group_action_matrices(F, basis, AS.group.gens, basis = basis)
|
||||||
|
|
||||||
def group_action_matrices_dR(AS, basis = 0, threshold=8):
|
def group_action_matrices_dR(AS, basis = 0, threshold=8):
|
||||||
n = AS.height
|
n = AS.height
|
||||||
if basis == 0:
|
if basis == 0:
|
||||||
@ -589,11 +599,9 @@ class as_cover:
|
|||||||
S += [(eta, eta_exp)]
|
S += [(eta, eta_exp)]
|
||||||
|
|
||||||
forms = holomorphic_combinations_fcts(S, pole_orders[(0, self.group.one)])
|
forms = holomorphic_combinations_fcts(S, pole_orders[(0, self.group.one)])
|
||||||
print('iteration')
|
|
||||||
for i in range(delta):
|
for i in range(delta):
|
||||||
for g in self.fiber(place = i):
|
for g in self.fiber(place = i):
|
||||||
if i!=0 or g != self.group.one:
|
if i!=0 or g != self.group.one:
|
||||||
print('iteration')
|
|
||||||
forms = [(omega, omega.group_action(g).expansion_at_infty(place = i)) for omega in forms]
|
forms = [(omega, omega.group_action(g).expansion_at_infty(place = i)) for omega in forms]
|
||||||
forms = holomorphic_combinations_fcts(forms, pole_orders[(i, g)])
|
forms = holomorphic_combinations_fcts(forms, pole_orders[(i, g)])
|
||||||
return forms
|
return forms
|
||||||
|
@ -88,10 +88,8 @@ class as_form:
|
|||||||
# We need to have only polynomials to use monomial_coefficients in linear_representation_polynomials,
|
# We need to have only polynomials to use monomial_coefficients in linear_representation_polynomials,
|
||||||
# and sometimes basis elements have denominators. Thus we multiply by them.
|
# and sometimes basis elements have denominators. Thus we multiply by them.
|
||||||
denom = LCM([denominator(omega.form) for omega in basis])
|
denom = LCM([denominator(omega.form) for omega in basis])
|
||||||
print(denom, basis, '\n')
|
|
||||||
basis = [denom*omega for omega in basis]
|
basis = [denom*omega for omega in basis]
|
||||||
self_with_no_denominator = denom*self
|
self_with_no_denominator = denom*self
|
||||||
print(self_with_no_denominator.form, [omega.form for omega in basis])
|
|
||||||
return linear_representation_polynomials(Rxyz(self_with_no_denominator.form), [Rxyz(omega.form) for omega in basis])
|
return linear_representation_polynomials(Rxyz(self_with_no_denominator.form), [Rxyz(omega.form) for omega in basis])
|
||||||
|
|
||||||
def trace(self, super=True):
|
def trace(self, super=True):
|
||||||
|
@ -14,6 +14,11 @@ class as_polyform:
|
|||||||
def expansion_at_infty(self, place):
|
def expansion_at_infty(self, place):
|
||||||
return self.form.expansion_at_infty(place=place)*(self.curve.dx.expansion_at_infty(place=place))^(self.mult)
|
return self.form.expansion_at_infty(place=place)*(self.curve.dx.expansion_at_infty(place=place))^(self.mult)
|
||||||
|
|
||||||
|
def reduce(self):
|
||||||
|
AS = self.curve
|
||||||
|
reduced = self.form.reduce()
|
||||||
|
return as_polyform(reduced, self.mult)
|
||||||
|
|
||||||
def coordinates(self, basis = 0):
|
def coordinates(self, basis = 0):
|
||||||
"""Find coordinates of the given holomorphic form self in terms of the basis forms in a list holo."""
|
"""Find coordinates of the given holomorphic form self in terms of the basis forms in a list holo."""
|
||||||
AS = self.curve
|
AS = self.curve
|
||||||
@ -24,7 +29,8 @@ class as_polyform:
|
|||||||
# and sometimes basis elements have denominators. Thus we multiply by them.
|
# and sometimes basis elements have denominators. Thus we multiply by them.
|
||||||
denom = LCM([denominator(omega.form.function) for omega in basis])
|
denom = LCM([denominator(omega.form.function) for omega in basis])
|
||||||
basis = [denom*omega.form.function for omega in basis]
|
basis = [denom*omega.form.function for omega in basis]
|
||||||
self_with_no_denominator = denom*self.form.function
|
self_reduced = self.reduce()
|
||||||
|
self_with_no_denominator = denom*self_reduced.form.function
|
||||||
return linear_representation_polynomials(Rxyz(self_with_no_denominator), [Rxyz(omega) for omega in basis])
|
return linear_representation_polynomials(Rxyz(self_with_no_denominator), [Rxyz(omega) for omega in basis])
|
||||||
|
|
||||||
def group_action(self, elt):
|
def group_action(self, elt):
|
||||||
@ -69,7 +75,7 @@ def as_canonical_ideal(AS, n, threshold=8):
|
|||||||
g = AS.genus()
|
g = AS.genus()
|
||||||
RxyzQ, Rxyz, x, y, z = AS.fct_field
|
RxyzQ, Rxyz, x, y, z = AS.fct_field
|
||||||
from itertools import product
|
from itertools import product
|
||||||
B1 = as_symmetric_power_basis(AS, n, threshold = 8)
|
B1 = as_symmetric_power_basis(AS, n, threshold = threshold)
|
||||||
B2 = AS.holo_polydifferentials_basis(n, threshold = threshold)
|
B2 = AS.holo_polydifferentials_basis(n, threshold = threshold)
|
||||||
g = AS.genus()
|
g = AS.genus()
|
||||||
r = len(B2)
|
r = len(B2)
|
||||||
|
@ -41,7 +41,6 @@ def holomorphic_combinations_mixed(S):
|
|||||||
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
||||||
RtQ = FractionField(Rt)
|
RtQ = FractionField(Rt)
|
||||||
minimal_valuation = min([g[1].valuation() for g in S])
|
minimal_valuation = min([g[1].valuation() for g in S])
|
||||||
print(minimal_valuation)
|
|
||||||
if minimal_valuation >= 0:
|
if minimal_valuation >= 0:
|
||||||
return [s[0] for s in S]
|
return [s[0] for s in S]
|
||||||
list_of_lists = [] #to będzie lista złożona z list współczynników część nieholomorficznych rozwinięcia form z S
|
list_of_lists = [] #to będzie lista złożona z list współczynników część nieholomorficznych rozwinięcia form z S
|
||||||
|
Loading…
Reference in New Issue
Block a user