From bd1ecfbfae03da2268b97cb440e6b5ca90829f8f Mon Sep 17 00:00:00 2001 From: jgarnek Date: Mon, 10 Jun 2024 19:50:09 +0000 Subject: [PATCH] first version of template works --- as_covers/as_cover_class.sage | 23 +++++++++++++---------- as_covers/group.sage | 15 +++++---------- as_covers/template.sage | 29 +++++++++++++++++++++++++---- init.sage | 2 ++ 4 files changed, 45 insertions(+), 24 deletions(-) diff --git a/as_covers/as_cover_class.sage b/as_covers/as_cover_class.sage index 5cbfb3f..736b10b 100644 --- a/as_covers/as_cover_class.sage +++ b/as_covers/as_cover_class.sage @@ -1,21 +1,18 @@ class as_cover: - def __init__(self, C, list_of_fcts, branch_points = [], prec = 10): + def __init__(self, C, cover_template, list_of_fcts, branch_points = [], prec = 10): self.quotient = C self.functions = list_of_fcts + print('a') self.height = len(list_of_fcts) + print('b') F = C.base_ring self.base_ring = F p = C.characteristic self.characteristic = p self.prec = prec #group acting - n = self.height - from itertools import product - pr = [list(GF(p)) for _ in range(n)] - group = [] - for a in product(*pr): - group += [a] - self.group = group + self.height = cover_template.height + self.group = cover_template.group ######### f = C.polynomial m = C.exponent @@ -25,7 +22,7 @@ class as_cover: self.branch_points = list(range(delta)) + branch_points Rxy. = PolynomialRing(F, 2) Rt. = LaurentSeriesRing(F, default_prec=prec) - + Rzf, zgen, fgen = cover_template.fct_field all_x_series = {} all_y_series = {} all_z_series = {} @@ -40,7 +37,13 @@ class as_cover: n = len(list_of_fcts) list_of_power_series = [g.expansion(pt=pt, prec=prec) for g in list_of_fcts] for j in range(n): - power_series = list_of_power_series[j] + #### + #TUTAJ WSTAWIĆ ZMIANĘ + print(cover_template.fcts[j], {zgen[i] : z_series[i] for i in range(j)} | {zgen[i] : 0 for i in range(j, n)} | {fgen[i] : list_of_power_series[i] for i in range(n)}) + power_series = Rzf(cover_template.fcts[j]).subs({zgen[i] : z_series[i] for i in range(j)} | {zgen[i] : 0 for i in range(j, n)} | {fgen[i] : list_of_power_series[i] for i in range(n)}) + + #### + #power_series = list_of_power_series[j] jump, correction, t_old, z = artin_schreier_transform(power_series, prec = prec) x_series = x_series(t = t_old) y_series = y_series(t = t_old) diff --git a/as_covers/group.sage b/as_covers/group.sage index 6b6f9ff..3b3d0db 100644 --- a/as_covers/group.sage +++ b/as_covers/group.sage @@ -1,5 +1,5 @@ class group: - def __init__(self, name, elts, one, mult, inv, gens, as_gens): + def __init__(self, name, elts, one, mult, inv, gens): self.name = name self.elts = elts self.one = one @@ -7,7 +7,6 @@ class group: self.inv = inv self.order = len(self.elts) self.gens = gens - self.as_gens = as_gens def __repr__(self): return self.name @@ -25,7 +24,6 @@ class group_elt: def __init__(self, as_tuple, group): self.group = group self.as_tuple = as_tuple - self.as_gens = self.group.as_gens(as_tuple) def __repr__(self): return str(self.as_tuple) @@ -62,8 +60,7 @@ def cyclic_gp(p, n): mult = lambda i1, i2: (i1 + i2) % (p ** n) inv = lambda i: (-i) % (p ** n) gens = [1] - as_gens = lambda i : [[0, i]] - gp = group(name, elts, one, mult, inv, gens, as_gens) + gp = group(name, elts, one, mult, inv, gens) return gp def elementary_gp(p, n): @@ -81,8 +78,7 @@ def elementary_gp(p, n): e = n*[0] e[i] = 1 gens += [tuple(e)] - as_gens = lambda i : [[j, i[j]] for j in range(n)] - gp = group(name, elts, one, mult, inv, gens, as_gens) + gp = group(name, elts, one, mult, inv, gens) return gp @@ -91,9 +87,8 @@ def heisenberg(p): name = "Heisenberg group E(" + str(p) + "^3)" elts = [(i, j, k) for i in range(p) for j in range(p) for k in range(p)] one = 0 - mult = lambda elt1, elt2 : ((elt1[0] + elt2[0])%p, (elt1[1] + elt2[1])%p, (-elt1[0]*elt2[1] + 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) gens = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] - as_gens = lambda elt : [[0, elt[0]], [1, elt[1]], [2, elt[2]]] - gp = group(name, elts, one, mult, inv, gens, as_gens) + gp = group(name, elts, one, mult, inv, gens) return gp \ No newline at end of file diff --git a/as_covers/template.sage b/as_covers/template.sage index 2facb38..5bad7b1 100644 --- a/as_covers/template.sage +++ b/as_covers/template.sage @@ -3,7 +3,6 @@ class template: def __init__(self, height, field, group, fcts, gp_action): self.height = height self.group = group - self.fcts = fcts #RHSs of the Artin-Schreier equations self.gp_action = gp_action #action of the generators of the group on z[i]'s self.field = field n = height @@ -14,9 +13,11 @@ class template: variable_names += 'f'+str(i) if i!=n-1: variable_names += ',' - R = PolynomialRing(field, 2*n, variable_names) - z = R.gens()[:n] - f = R.gens()[n:] + Rzf = PolynomialRing(field, 2*n, variable_names) + z = Rzf.gens()[:n] + f = Rzf.gens()[n:] + self.fct_field = Rzf, z, f + self.fcts = [Rzf(ff) for ff in fcts] #RHSs of the Artin-Schreier equations def elementary_template(p, n): group = elementary_gp(p, n) @@ -34,4 +35,24 @@ def elementary_template(p, n): height = n fcts = [f[i] for i in range(n)] gp_action = [[z[j] + (i == j) for j in range(n)] for i in range(n)] + return template(height, field, group, fcts, gp_action) + +def heisenberg_template(p): + group = heisenberg(p) + field = GF(p) + variable_names = '' + n = 3 + for i in range(n): + variable_names += 'z'+str(i)+',' + for i in range(n): + variable_names += 'f'+str(i) + if i!=n-1: + variable_names += ',' + R = PolynomialRing(field, 2*n, variable_names) + z = R.gens()[:n] + f = R.gens()[n:] + height = n + fcts = [f[i] for i in range(n)] + fcts[2] += (z[0] - z[1])*f[1] + gp_action = [[z[0] + 1, z[1], z[2] + z[1]], [z[0] + 1, z[1] + 1, z[2]], [z[0], z[1], z[2] - 1]] return template(height, field, group, fcts, gp_action) \ No newline at end of file diff --git a/init.sage b/init.sage index 73b57d2..d264dd7 100644 --- a/init.sage +++ b/init.sage @@ -3,6 +3,8 @@ load('superelliptic/superelliptic_function_class.sage') load('superelliptic/superelliptic_form_class.sage') load('superelliptic/superelliptic_cech_class.sage') load('superelliptic/frobenius_kernel.sage') +load('as_covers/group.sage') +load('as_covers/template.sage') load('as_covers/as_transform.sage') load('as_covers/holomorphic_combinations.sage') load('as_covers/as_cover_class.sage')