From 3d0e352a375d79dc4490a2e5c38e3e869b9f6346 Mon Sep 17 00:00:00 2001 From: jgarnek Date: Wed, 12 Jun 2024 16:13:49 +0000 Subject: [PATCH] quasiuniformizer works --- as_covers/as_cover_class.sage | 67 ++++++++++++++++++++++++-------- as_covers/as_function_class.sage | 4 +- as_covers/group.sage | 2 +- init.sage | 8 ++-- 4 files changed, 58 insertions(+), 23 deletions(-) diff --git a/as_covers/as_cover_class.sage b/as_covers/as_cover_class.sage index 7b3ea4b..3756a51 100644 --- a/as_covers/as_cover_class.sage +++ b/as_covers/as_cover_class.sage @@ -268,12 +268,38 @@ 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 = [] @@ -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() diff --git a/as_covers/as_function_class.sage b/as_covers/as_function_class.sage index 700a0fd..18263cb 100644 --- a/as_covers/as_function_class.sage +++ b/as_covers/as_function_class.sage @@ -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. = LaurentSeriesRing(F, default_prec=AS.prec) + if Rt(aux).valuation() >= 1: return True return False diff --git a/as_covers/group.sage b/as_covers/group.sage index 13f9766..f24f29f 100644 --- a/as_covers/group.sage +++ b/as_covers/group.sage @@ -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)] diff --git a/init.sage b/init.sage index d264dd7..b94d798 100644 --- a/init.sage +++ b/init.sage @@ -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')