quasiuniformizer works
This commit is contained in:
parent
4a07181dad
commit
3d0e352a37
@ -268,13 +268,39 @@ class as_cover:
|
||||
n = self.height
|
||||
F = self.base_ring
|
||||
list_of_fcts = self.at_most_poles(threshold)
|
||||
list_of_fcts2 = self.z + [self.x, self.y]
|
||||
for f1 in list_of_fcts:
|
||||
for f2 in list_of_fcts:
|
||||
for f2 in list_of_fcts2:
|
||||
d, a, b = xgcd(f1.valuation(place), f2.valuation(place))
|
||||
if d == 1:
|
||||
return f1^a*f2^b
|
||||
raise ValueError("Increase threshold.")
|
||||
|
||||
def quasiuniformizer(self, place = 0, threshold = 10):
|
||||
'''Return an element with valuation coprime to p.'''
|
||||
p = self.characteristic
|
||||
n = self.height
|
||||
F = self.base_ring
|
||||
rr_space = self.at_most_poles(threshold)
|
||||
list_of_fcts = [ff for ff in rr_space if ff.valuation(place)%p != 0]
|
||||
print(len(list_of_fcts))
|
||||
list_of_fcts2 = [len(str(ff)) for ff in list_of_fcts]
|
||||
i_min = list_of_fcts2.index(min(list_of_fcts2))
|
||||
result = list_of_fcts.pop(i_min)
|
||||
print(result)
|
||||
flag = 1
|
||||
while flag == 1:
|
||||
flag = 0
|
||||
for g in self.group.elts:
|
||||
if result.group_action(g) == result and g != self.group.one:
|
||||
flag = 1
|
||||
if flag == 1:
|
||||
list_of_fcts2 = [len(str(ff)) for ff in list_of_fcts]
|
||||
i_min = list_of_fcts2.index(min(list_of_fcts2))
|
||||
result = list_of_fcts.pop(i_min)
|
||||
print(result)
|
||||
return result
|
||||
|
||||
def stabilizer(self, place = 0):
|
||||
result = []
|
||||
for g in self.group.elts:
|
||||
@ -304,44 +330,51 @@ class as_cover:
|
||||
result += [g]
|
||||
return result
|
||||
|
||||
def ith_ramification_gp(self, i, place = 0, uniformizer = 0):
|
||||
def ith_ramification_gp(self, i, place = 0, quasiuniformizer = 0, threshold = 20):
|
||||
'''Find ith ramification group at place at infty of nb place.'''
|
||||
G = self.group.elts
|
||||
if uniformizer == 0:
|
||||
t = self.uniformizer(place)
|
||||
p = self.characteristic
|
||||
Gi = [G[0]]
|
||||
# list_of_fcts = self.z #[self.one/zz for zz in AS.z if zz.valuation(place) < 0]
|
||||
# list_of_fcts += [zz^2 for zz in self.z]
|
||||
if isinstance(quasiuniformizer, int) or isinstance(quasiuniformizer, Integer):
|
||||
t = self.quasiuniformizer(place, threshold=threshold)
|
||||
else:
|
||||
t = quasiuniformizer
|
||||
for g in G:
|
||||
if g != G[0]:
|
||||
tg = t.group_action(g)
|
||||
v = (tg - t).valuation(place)
|
||||
if v >= i+1:
|
||||
if v >= i + t.valuation(place):
|
||||
Gi += [g]
|
||||
return Gi
|
||||
|
||||
def ramification_jumps(self, place = 0, uniformizer = 0):
|
||||
def ramification_jumps(self, place = 0, quasiuniformizer = 0, threshold = 20):
|
||||
'''Return list of lower ramification jumps at at place at infty of nb place.'''
|
||||
G = self.stabilizer(place = place)
|
||||
ramification_jps = []
|
||||
G = self.stabilizer(place=place)
|
||||
p = self.characteristic
|
||||
Gi = [G[0]]
|
||||
# list_of_fcts = self.z #[self.one/zz for zz in AS.z if zz.valuation(place) < 0]
|
||||
# list_of_fcts += [zz^2 for zz in self.z]
|
||||
if isinstance(quasiuniformizer, int) or isinstance(quasiuniformizer, Integer):
|
||||
t = self.quasiuniformizer(place, threshold=threshold)
|
||||
else:
|
||||
t = quasiuniformizer
|
||||
result = []
|
||||
i = 0
|
||||
if uniformizer == 0:
|
||||
t = self.uniformizer(place)
|
||||
while len(G) > 1:
|
||||
print(G, i)
|
||||
Gi = [G[0]]
|
||||
for g in G:
|
||||
print('g', g, type(g))
|
||||
if g != G[0]:
|
||||
tg = t.group_action(g)
|
||||
print('tg')
|
||||
v = (tg - t).valuation(place)
|
||||
print('v')
|
||||
if v >= i+1:
|
||||
if v >= i + t.valuation(place):
|
||||
Gi += [g]
|
||||
if len(Gi) < len(G):
|
||||
ramification_jps += [i-1]
|
||||
result += [i-1]
|
||||
G = Gi
|
||||
i+=1
|
||||
return ramification_jps
|
||||
return result
|
||||
|
||||
def a_number(self):
|
||||
g = self.genus()
|
||||
|
@ -18,7 +18,9 @@ class as_function:
|
||||
aux = aux.numerator()
|
||||
aux = as_function(AS, aux)
|
||||
aux = aux.expansion_at_infty()
|
||||
if aux.valuation() >= 1:
|
||||
F = AS.base_ring
|
||||
Rt.<t> = LaurentSeriesRing(F, default_prec=AS.prec)
|
||||
if Rt(aux).valuation() >= 1:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
@ -88,7 +88,7 @@ def heisenberg(p):
|
||||
name = "Heisenberg group E(" + str(p) + "^3)"
|
||||
short_name = "E(p^3)"
|
||||
elts = [(i, j, k) for i in range(p) for j in range(p) for k in range(p)]
|
||||
one = 0
|
||||
one = elts[0]
|
||||
mult = lambda elt1, elt2 : ((elt1[0] + elt2[0])%p, (elt1[1] + elt2[1])%p, (-elt1[1]*elt2[0] + elt1[2] + elt2[2])%p)
|
||||
inv = lambda elt : (p-elt[0], p-elt[1], (p - elt[2] - (p-elt[0])*(p-elt[1]))%p)
|
||||
gens = [(1, 0, 0), (0, 1, 0), (0, 0, 1)]
|
||||
|
@ -31,10 +31,10 @@ load('auxilliaries/reverse.sage')
|
||||
load('auxilliaries/hensel.sage')
|
||||
load('auxilliaries/linear_combination_polynomials.sage')
|
||||
load('auxilliaries/laurent_analytic_part.sage')
|
||||
load('as_drw/witt_polynomials.sage')
|
||||
load('as_drw/as_witt.sage')
|
||||
load('as_drw/as_witt_form.sage')
|
||||
load('as_drw/as_compability.sage')
|
||||
#load('as_drw/witt_polynomials.sage')
|
||||
#load('as_drw/as_witt.sage')
|
||||
#load('as_drw/as_witt_form.sage')
|
||||
#load('as_drw/as_compability.sage')
|
||||
load('quaternion_covers/quaternion_covers.sage')
|
||||
load('quaternion_covers/quaternion_function_class.sage')
|
||||
load('quaternion_covers/quaternion_form_class.sage')
|
||||
|
Loading…
Reference in New Issue
Block a user