diff --git a/as_covers/as_cech_class.sage b/as_covers/as_cech_class.sage index f3a99b5..fb636f0 100644 --- a/as_covers/as_cech_class.sage +++ b/as_covers/as_cech_class.sage @@ -52,7 +52,6 @@ class as_cech: def coordinates(self, threshold=10, basis = 0): '''Find coordinates of self in the de Rham cohomology basis. Threshold is an argument passed to AS.de_rham_basis().''' - print(self, 'H1dR(X)', self.omega8.valuation()) AS = self.curve C = AS.quotient m = C.exponent @@ -95,10 +94,8 @@ class as_cech: for a in F: if (self.f.function - a*g.function in Rxyz): self.f.function = self.f.function - a*g.function - print(g, self.omega8.valuation()) return vector(coh_coordinates)+vector(self.coordinates(threshold=threshold, basis = basis)) else: - print('else', self.omega8.valuation()) self.omega0 -= self.f.diffn() return vector(coh_coordinates) + vector(list(self.omega0.coordinates(basis=holo_diffs))+AS.genus()*[0]) diff --git a/as_covers/as_cover_class.sage b/as_covers/as_cover_class.sage index 21c10cf..7b3ea4b 100644 --- a/as_covers/as_cover_class.sage +++ b/as_covers/as_cover_class.sage @@ -90,10 +90,7 @@ class as_cover: result += aux_fct.derivative(y)*dy_super dz += [-result] self.dz = dz - - - - + def __repr__(self): n = self.height p = self.characteristic @@ -265,49 +262,53 @@ class as_cover: return forms - def uniformizer(self, place = 0): + def uniformizer(self, place = 0, threshold = 10): '''Return uniformizer of curve self at place-th place at infinity.''' p = self.characteristic n = self.height F = self.base_ring - RxyzQ, Rxyz, x, y, z = self.fct_field - fx = as_function(self, x) - z = [as_function(self, zi) for zi in z] - # We create a list of functions. We add there all variables... - list_of_fcts = [fx]+z - vfx = fx.valuation(place) - vz = [zi.valuation(place) for zi in z] - - # Then we subtract powers of variables with the same valuation (so that 1/t^(kp) cancels) and add to this list. - for j1 in range(n): - for j2 in range(n): - if j1>j2: - a = gcd(vz[j1] , vz[j2]) - vz1 = vz[j1]/a - vz2 = vz[j2]/a - for b in F: - if (z[j1]^(vz2) - b*z[j2]^(vz1)).valuation(place) > (z[j2]^(vz1)).valuation(place): - list_of_fcts += [z[j1]^(vz2) - b*z[j2]^(vz1)] - for j1 in range(n): - a = gcd(vz[j1], vfx) - vzj = vz[j1] /a - vfx = vfx/a - for b in F: - if (fx^(vzj) - b*z[j1]^(vfx)).valuation(place) > (z[j1]^(vfx)).valuation(place): - list_of_fcts += [fx^(vzj) - b*z[j1]^(vfx)] - #Finally, we check if on the list there are two elements with the same valuation. + list_of_fcts = self.at_most_poles(threshold) for f1 in list_of_fcts: for f2 in list_of_fcts: d, a, b = xgcd(f1.valuation(place), f2.valuation(place)) if d == 1: return f1^a*f2^b - raise ValueError("My method of generating fcts with relatively prime valuation failed.") - + raise ValueError("Increase threshold.") - def ith_ramification_gp(self, i, place = 0): + def stabilizer(self, place = 0): + result = [] + for g in self.group.elts: + flag = 1 + for i in range(self.height): + if self.z[i].valuation(place = place) > 0: + fct = self.z[i] + elif self.z[i].valuation(place = place) < 0: + fct = self.one/self.z[i] + if fct.group_action(g).valuation(place = place) <= 0: + flag = 0 + if flag: + result += [g] + return result + + def fiber(self, place = 0): + 'Gives representatives for the quotient G/G_P for given place. Those are in bijection with the fiber.' + result = [(0, 0, 0)] + p = self.characteristic + H = self.stabilizer(place = place) + for g in self.group.elts: + flag = 1 + for v in result: + if heisenberg_mult(g, heisenberg_inv(v, p), p) in H: + flag = 0 + if flag: + result += [g] + return result + + def ith_ramification_gp(self, i, place = 0, uniformizer = 0): '''Find ith ramification group at place at infty of nb place.''' G = self.group.elts - t = self.uniformizer(place) + if uniformizer == 0: + t = self.uniformizer(place) Gi = [G[0]] for g in G: if g != G[0]: @@ -317,15 +318,27 @@ class as_cover: Gi += [g] return Gi - def ramification_jumps(self, place = 0): + def ramification_jumps(self, place = 0, uniformizer = 0): '''Return list of lower ramification jumps at at place at infty of nb place.''' - G = self.group.elts + G = self.stabilizer(place = place) ramification_jps = [] i = 0 + if uniformizer == 0: + t = self.uniformizer(place) while len(G) > 1: - Gi = self.ith_ramification_gp(i+1, place) + 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: + Gi += [g] if len(Gi) < len(G): - ramification_jps += [i] + ramification_jps += [i-1] G = Gi i+=1 return ramification_jps diff --git a/as_covers/as_form_class.sage b/as_covers/as_form_class.sage index dc21a64..ce6ee7e 100644 --- a/as_covers/as_form_class.sage +++ b/as_covers/as_form_class.sage @@ -80,9 +80,7 @@ class as_form: def coordinates(self, basis = 0): """Find coordinates of the given holomorphic form self in terms of the basis forms in a list holo.""" - print(self, 'H0(OmegaX)', self.valuation()) self = self.reduce() - print(self, self.valuation(), 'after reduce') C = self.curve if basis == 0: basis = C.holomorphic_differentials_basis() diff --git a/as_covers/as_function_class.sage b/as_covers/as_function_class.sage index a414d7f..700a0fd 100644 --- a/as_covers/as_function_class.sage +++ b/as_covers/as_function_class.sage @@ -117,7 +117,7 @@ class as_function: return as_function(C, g.substitute(sub_list)) result = self for i in range(len(G.gens)): - if isinstance(elt, list): #elt can be a tuple... + if isinstance(elt, list) or isinstance(elt, tuple): #elt can be a tuple... range_limit = elt[i] else: # ... or an integer. range_limit = elt diff --git a/as_covers/group_action_matrices.sage b/as_covers/group_action_matrices.sage index 9dd251f..bcc9762 100644 --- a/as_covers/group_action_matrices.sage +++ b/as_covers/group_action_matrices.sage @@ -4,11 +4,7 @@ def as_group_action_matrices(F, space, list_of_group_elements, basis): A = [matrix(F, d, d) for i in range(n)] for i, g in enumerate(list_of_group_elements): for j, omega in enumerate(space): - if isinstance(omega, as_cech): - print('A:', omega.omega8.valuation(), omega) omega1 = omega.group_action(g) - if isinstance(omega, as_cech): - print('B:', omega1.omega8.valuation(), omega1) v1 = omega1.coordinates(basis = basis) A[i][:, j] = vector(v1) return A \ No newline at end of file