quasiuniformizer works
This commit is contained in:
parent
4a07181dad
commit
3d0e352a37
@ -268,12 +268,38 @@ class as_cover:
|
|||||||
n = self.height
|
n = self.height
|
||||||
F = self.base_ring
|
F = self.base_ring
|
||||||
list_of_fcts = self.at_most_poles(threshold)
|
list_of_fcts = self.at_most_poles(threshold)
|
||||||
|
list_of_fcts2 = self.z + [self.x, self.y]
|
||||||
for f1 in list_of_fcts:
|
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))
|
d, a, b = xgcd(f1.valuation(place), f2.valuation(place))
|
||||||
if d == 1:
|
if d == 1:
|
||||||
return f1^a*f2^b
|
return f1^a*f2^b
|
||||||
raise ValueError("Increase threshold.")
|
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):
|
def stabilizer(self, place = 0):
|
||||||
result = []
|
result = []
|
||||||
@ -304,44 +330,51 @@ class as_cover:
|
|||||||
result += [g]
|
result += [g]
|
||||||
return result
|
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.'''
|
'''Find ith ramification group at place at infty of nb place.'''
|
||||||
G = self.group.elts
|
G = self.group.elts
|
||||||
if uniformizer == 0:
|
p = self.characteristic
|
||||||
t = self.uniformizer(place)
|
|
||||||
Gi = [G[0]]
|
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:
|
for g in G:
|
||||||
if g != G[0]:
|
if g != G[0]:
|
||||||
tg = t.group_action(g)
|
tg = t.group_action(g)
|
||||||
v = (tg - t).valuation(place)
|
v = (tg - t).valuation(place)
|
||||||
if v >= i+1:
|
if v >= i + t.valuation(place):
|
||||||
Gi += [g]
|
Gi += [g]
|
||||||
return Gi
|
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.'''
|
'''Return list of lower ramification jumps at at place at infty of nb place.'''
|
||||||
G = self.stabilizer(place = place)
|
G = self.stabilizer(place=place)
|
||||||
ramification_jps = []
|
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
|
i = 0
|
||||||
if uniformizer == 0:
|
|
||||||
t = self.uniformizer(place)
|
|
||||||
while len(G) > 1:
|
while len(G) > 1:
|
||||||
print(G, i)
|
|
||||||
Gi = [G[0]]
|
Gi = [G[0]]
|
||||||
for g in G:
|
for g in G:
|
||||||
print('g', g, type(g))
|
|
||||||
if g != G[0]:
|
if g != G[0]:
|
||||||
tg = t.group_action(g)
|
tg = t.group_action(g)
|
||||||
print('tg')
|
|
||||||
v = (tg - t).valuation(place)
|
v = (tg - t).valuation(place)
|
||||||
print('v')
|
if v >= i + t.valuation(place):
|
||||||
if v >= i+1:
|
|
||||||
Gi += [g]
|
Gi += [g]
|
||||||
if len(Gi) < len(G):
|
if len(Gi) < len(G):
|
||||||
ramification_jps += [i-1]
|
result += [i-1]
|
||||||
G = Gi
|
G = Gi
|
||||||
i+=1
|
i+=1
|
||||||
return ramification_jps
|
return result
|
||||||
|
|
||||||
def a_number(self):
|
def a_number(self):
|
||||||
g = self.genus()
|
g = self.genus()
|
||||||
|
@ -18,7 +18,9 @@ class as_function:
|
|||||||
aux = aux.numerator()
|
aux = aux.numerator()
|
||||||
aux = as_function(AS, aux)
|
aux = as_function(AS, aux)
|
||||||
aux = aux.expansion_at_infty()
|
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 True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ def heisenberg(p):
|
|||||||
name = "Heisenberg group E(" + str(p) + "^3)"
|
name = "Heisenberg group E(" + str(p) + "^3)"
|
||||||
short_name = "E(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)]
|
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)
|
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)
|
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)]
|
gens = [(1, 0, 0), (0, 1, 0), (0, 0, 1)]
|
||||||
|
@ -31,10 +31,10 @@ load('auxilliaries/reverse.sage')
|
|||||||
load('auxilliaries/hensel.sage')
|
load('auxilliaries/hensel.sage')
|
||||||
load('auxilliaries/linear_combination_polynomials.sage')
|
load('auxilliaries/linear_combination_polynomials.sage')
|
||||||
load('auxilliaries/laurent_analytic_part.sage')
|
load('auxilliaries/laurent_analytic_part.sage')
|
||||||
load('as_drw/witt_polynomials.sage')
|
#load('as_drw/witt_polynomials.sage')
|
||||||
load('as_drw/as_witt.sage')
|
#load('as_drw/as_witt.sage')
|
||||||
load('as_drw/as_witt_form.sage')
|
#load('as_drw/as_witt_form.sage')
|
||||||
load('as_drw/as_compability.sage')
|
#load('as_drw/as_compability.sage')
|
||||||
load('quaternion_covers/quaternion_covers.sage')
|
load('quaternion_covers/quaternion_covers.sage')
|
||||||
load('quaternion_covers/quaternion_function_class.sage')
|
load('quaternion_covers/quaternion_function_class.sage')
|
||||||
load('quaternion_covers/quaternion_form_class.sage')
|
load('quaternion_covers/quaternion_form_class.sage')
|
||||||
|
Loading…
Reference in New Issue
Block a user