diffn for arbitrary template should work
This commit is contained in:
parent
bd1ecfbfae
commit
9aeee4993d
@ -1,6 +1,7 @@
|
|||||||
class as_cover:
|
class as_cover:
|
||||||
def __init__(self, C, cover_template, list_of_fcts, branch_points = [], prec = 10):
|
def __init__(self, C, cover_template, list_of_fcts, branch_points = [], prec = 10):
|
||||||
self.quotient = C
|
self.quotient = C
|
||||||
|
self.cover_template = cover_template
|
||||||
self.functions = list_of_fcts
|
self.functions = list_of_fcts
|
||||||
print('a')
|
print('a')
|
||||||
self.height = len(list_of_fcts)
|
self.height = len(list_of_fcts)
|
||||||
@ -77,17 +78,38 @@ class as_cover:
|
|||||||
self.z = [as_function(self, z[j]) for j in range(n)]
|
self.z = [as_function(self, z[j]) for j in range(n)]
|
||||||
self.dx = as_form(self, 1)
|
self.dx = as_form(self, 1)
|
||||||
self.one = as_function(self, 1)
|
self.one = as_function(self, 1)
|
||||||
|
Rzf, zgen, fgen = cover_template.fct_field
|
||||||
|
subs_fs = {zgen[i] : z[i]}| {fgen[i] : RxyzQ(list_of_fcts[i].function) for i in range(n)}
|
||||||
|
self.rhs = [RxyzQ(cover_template.fcts[i].subs(subs_fs)) for i in range(n)]
|
||||||
|
#####
|
||||||
|
##### We compute now the differentials dz[i]
|
||||||
|
y_super = superelliptic_function(C, y)
|
||||||
|
dy_super = y_super.diffn().form
|
||||||
|
dz = []
|
||||||
|
for i in range(n):
|
||||||
|
aux_fct = self.rhs[i]
|
||||||
|
result = 0
|
||||||
|
for j in range(i):
|
||||||
|
result += aux_fct.derivative(z[j])*dz[j]
|
||||||
|
result += aux_fct.derivative(x)
|
||||||
|
result += aux_fct.derivative(y)*dy_super
|
||||||
|
dz += [-result]
|
||||||
|
self.dz = dz
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
n = self.height
|
n = self.height
|
||||||
p = self.characteristic
|
p = self.characteristic
|
||||||
if n==1:
|
result = str(self.group)
|
||||||
return "(Z/p)-cover of " + str(self.quotient)+" with the equation:\n z^" + str(p) + " - z = " + str(self.functions[0])
|
result += "-cover of " + str(self.quotient)+" with the equations: \n"
|
||||||
|
|
||||||
result = "(Z/p)^"+str(self.height)+ "-cover of " + str(self.quotient)+" with the equations:\n"
|
|
||||||
for i in range(n):
|
for i in range(n):
|
||||||
result += 'z' + str(i) + "^" + str(p) + " - z" + str(i) + " = " + str(self.functions[i]) + "\n"
|
result += 'z'+str(i)+'^p - z'+str(i) + ' = '
|
||||||
|
aux = str(self.cover_template.fcts[i])
|
||||||
|
for t in range(n):
|
||||||
|
aux = aux.replace("f"+str(t), "(" + str(self.functions[t]) + ")")
|
||||||
|
result += aux + '\n'
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def genus(self):
|
def genus(self):
|
||||||
@ -289,7 +311,7 @@ class as_cover:
|
|||||||
|
|
||||||
def ith_ramification_gp(self, i, place = 0):
|
def ith_ramification_gp(self, i, place = 0):
|
||||||
'''Find ith ramification group at place at infty of nb place.'''
|
'''Find ith ramification group at place at infty of nb place.'''
|
||||||
G = self.group
|
G = self.group.elts
|
||||||
t = self.uniformizer(place)
|
t = self.uniformizer(place)
|
||||||
Gi = [G[0]]
|
Gi = [G[0]]
|
||||||
for g in G:
|
for g in G:
|
||||||
@ -302,7 +324,7 @@ class as_cover:
|
|||||||
|
|
||||||
def ramification_jumps(self, place = 0):
|
def ramification_jumps(self, place = 0):
|
||||||
'''Return list of lower ramification jumps at at place at infty of nb place.'''
|
'''Return list of lower ramification jumps at at place at infty of nb place.'''
|
||||||
G = self.group
|
G = self.group.elts
|
||||||
ramification_jps = []
|
ramification_jps = []
|
||||||
i = 0
|
i = 0
|
||||||
while len(G) > 1:
|
while len(G) > 1:
|
||||||
|
@ -3,13 +3,7 @@ class as_function:
|
|||||||
self.curve = C
|
self.curve = C
|
||||||
F = C.base_ring
|
F = C.base_ring
|
||||||
n = C.height
|
n = C.height
|
||||||
variable_names = 'x, y'
|
RxyzQ, Rxyz, x, y, z = C.fct_field
|
||||||
for i in range(n):
|
|
||||||
variable_names += ', z' + str(i)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
|
||||||
self.function = RxyzQ(g)
|
self.function = RxyzQ(g)
|
||||||
#self.function = as_reduction(AS, RxyzQ(g))
|
#self.function = as_reduction(AS, RxyzQ(g))
|
||||||
|
|
||||||
@ -81,13 +75,7 @@ class as_function:
|
|||||||
y_series = C.y_series[place]
|
y_series = C.y_series[place]
|
||||||
z_series = C.z_series[place]
|
z_series = C.z_series[place]
|
||||||
n = C.height
|
n = C.height
|
||||||
variable_names = 'x, y'
|
RxyzQ, Rxyz, x, y, z = C.fct_field
|
||||||
for j in range(n):
|
|
||||||
variable_names += ', z' + str(j)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
|
||||||
prec = C.prec
|
prec = C.prec
|
||||||
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
||||||
g = self.function
|
g = self.function
|
||||||
@ -103,13 +91,7 @@ class as_function:
|
|||||||
y_series = C.y_series[pt]
|
y_series = C.y_series[pt]
|
||||||
z_series = C.z_series[pt]
|
z_series = C.z_series[pt]
|
||||||
n = C.height
|
n = C.height
|
||||||
variable_names = 'x, y'
|
RxyzQ, Rxyz, x, y, z = C.fct_field
|
||||||
for j in range(n):
|
|
||||||
variable_names += ', z' + str(j)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
|
||||||
prec = C.prec
|
prec = C.prec
|
||||||
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
Rt.<t> = LaurentSeriesRing(F, default_prec=prec)
|
||||||
g = self.function
|
g = self.function
|
||||||
@ -117,37 +99,39 @@ class as_function:
|
|||||||
sub_list = {x : x_series, y : y_series} | {z[j] : z_series[j] for j in range(n)}
|
sub_list = {x : x_series, y : y_series} | {z[j] : z_series[j] for j in range(n)}
|
||||||
return g.substitute(sub_list)
|
return g.substitute(sub_list)
|
||||||
|
|
||||||
def group_action(self, ZN_tuple):
|
def group_action(self, elt):
|
||||||
C = self.curve
|
C = self.curve
|
||||||
n = C.height
|
RxyzQ, Rxyz, x, y, z = C.fct_field
|
||||||
F = C.base_ring
|
Rzf, zgen, fgen = C.cover_template.fct_field
|
||||||
variable_names = 'x, y'
|
if isinstance(elt, group_elt):
|
||||||
for j in range(n):
|
elt = elt.as_tuple
|
||||||
variable_names += ', z' + str(j)
|
AS = self.curve
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
n = AS.height
|
||||||
x, y = Rxyz.gens()[:2]
|
G = AS.group
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
if elt in G.gens:
|
||||||
sub_list = {x : x, y : y} | {z[j] : z[j]+ZN_tuple[j] for j in range(n)}
|
ind = G.gens.index(elt)
|
||||||
|
gp_action_list = C.cover_template.gp_action[ind]
|
||||||
|
sub_list = {x : x, y : y} | {z[j] : Rxyz(gp_action_list[j].subs({zgen[i] : z[i] for i in range(n)})) for j in range(n)}
|
||||||
g = self.function
|
g = self.function
|
||||||
return as_function(C, g.substitute(sub_list))
|
return as_function(C, g.substitute(sub_list))
|
||||||
|
result = self
|
||||||
|
for i in range(n):
|
||||||
|
for j in range(elt[i]):
|
||||||
|
result = result.group_action(G.gens[i])
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def reduce(self):
|
def reduce(self):
|
||||||
aux = as_reduction(self.curve, self.function)
|
aux = as_reduction(self.curve, self.function)
|
||||||
return as_function(self.curve, aux)
|
return as_function(self.curve, aux)
|
||||||
|
|
||||||
def trace(self):
|
def trace(self, super=True):
|
||||||
C = self.curve
|
C = self.curve
|
||||||
C_super = C.quotient
|
C_super = C.quotient
|
||||||
n = C.height
|
n = C.height
|
||||||
F = C.base_ring
|
F = C.base_ring
|
||||||
variable_names = 'x, y'
|
RxyzQ, Rxyz, x, y, z = C.fct_field
|
||||||
for j in range(n):
|
|
||||||
variable_names += ', z' + str(j)
|
|
||||||
Rxyz = PolynomialRing(F, n+2, variable_names)
|
|
||||||
x, y = Rxyz.gens()[:2]
|
|
||||||
z = Rxyz.gens()[2:]
|
|
||||||
RxyzQ = FractionField(Rxyz)
|
|
||||||
result = as_function(C, 0)
|
result = as_function(C, 0)
|
||||||
G = C.group
|
G = C.group
|
||||||
for a in G:
|
for a in G:
|
||||||
@ -156,7 +140,10 @@ class as_function:
|
|||||||
Rxy.<x, y> = PolynomialRing(F, 2)
|
Rxy.<x, y> = PolynomialRing(F, 2)
|
||||||
Qxy = FractionField(Rxy)
|
Qxy = FractionField(Rxy)
|
||||||
result = as_reduction(C, result)
|
result = as_reduction(C, result)
|
||||||
|
if super:
|
||||||
return superelliptic_function(C_super, Qxy(result))
|
return superelliptic_function(C_super, Qxy(result))
|
||||||
|
return as_function(AS, Qxy(result))
|
||||||
|
|
||||||
|
|
||||||
def coordinates(self, prec = 100, basis = 0):
|
def coordinates(self, prec = 100, basis = 0):
|
||||||
"Return coordinates in H^1(X, OX)."
|
"Return coordinates in H^1(X, OX)."
|
||||||
@ -180,14 +167,10 @@ class as_function:
|
|||||||
C_super = C.quotient
|
C_super = C.quotient
|
||||||
n = C.height
|
n = C.height
|
||||||
RxyzQ, Rxyz, x, y, z = C.fct_field
|
RxyzQ, Rxyz, x, y, z = C.fct_field
|
||||||
fcts = C.functions
|
|
||||||
f = self.function
|
f = self.function
|
||||||
y_super = superelliptic_function(C_super, y)
|
y_super = superelliptic_function(C_super, y)
|
||||||
dy_super = y_super.diffn().form
|
dy_super = y_super.diffn().form
|
||||||
dz = []
|
dz = C.dz
|
||||||
for i in range(n):
|
|
||||||
dfct = fcts[i].diffn().form
|
|
||||||
dz += [-dfct]
|
|
||||||
result = f.derivative(x)
|
result = f.derivative(x)
|
||||||
result += f.derivative(y)*dy_super
|
result += f.derivative(y)*dy_super
|
||||||
for i in range(n):
|
for i in range(n):
|
||||||
|
Loading…
Reference in New Issue
Block a user