Commit e45fa1cc by Peter Bruin

### add and use new optional argument embedding_forms to modular_curve

and modular_curve_jacobian_{medium,large}
parent 9366b4c3
 ... ... @@ -185,7 +185,7 @@ reduced_dual_pair.gp: reduced_pairing.gp intermediate_polynomials_0 intermediate_polynomials_1 intermediate_polynomials_2 \ intermediate_polynomials_3 intermediate_polynomials_4 pairings reduced_pairings values: primes.gp | form.gp values: primes.gp | embedding_forms.gp $(MAKE)$(patsubst %,values_%.gp,$(shell cat$<)) \$(MAKE) primes.gp ... ...
 ... ... @@ -105,16 +105,11 @@ modular_curve_jacobian_count_points(GEN group, unsigned long p, return gerepileupto(av, n); } /* Compute data associated to the modular curve. Modular forms are computed to sufficient precision to determine the spaces of global sections of {\cal L}^max_power. */ GEN modular_curve(GEN group, unsigned long p, unsigned long max_power) { unsigned long degree, dim, genus = modular_group_genus (group), weight, prec, r, i, s0, s1; GEN result, forms, V, M, ind, numzeta; static GEN compute_embedding_forms(GEN group, ulong p, long max_power) { long genus = modular_group_genus(group), degree, dim, weight, prec, r, i; GEN result, forms, V, M; char *cache_file; /* ... ... @@ -171,25 +166,25 @@ modular_curve(GEN group, unsigned long p, unsigned long max_power) { for(i = 1; i <= prec - r; i++) gel(M, i) = vec_ei(prec, r + i); V = intersect(forms, M); V = ZM_to_Flm(lift(V), p); if(lg(V) - 1 != genus + 2) pari_err(e_MISC, "unexpected dimension"); return rowslice(V, r + 1, r + 1 + max_power*(2*genus + 1)); } /* Extract the small subspace we are interested in. */ ind = gel(Flm_indexrank(V, p), 1); if(lg(ind) != lg(V)) pari_err(e_MISC, "dimensions do not agree"); if(ind[1] != r + 1) pari_err(e_MISC, "strange order of vanishing"); err_printf("using pivots %Ps\n", ind); s0 = ind[1]; s1 = s0 + max_power*(2*genus + 1); V = matslice0(V, s0, s1, 1, lg(V) - 1); /* Compute data associated to the modular curve. Modular forms are computed to sufficient precision to determine the spaces of global sections of {\cal L}^max_power. */ GEN modular_curve(GEN group, ulong p, ulong max_power, GEN embedding_forms) { GEN V, numzeta; if (embedding_forms == NULL) embedding_forms = compute_embedding_forms(group, p, max_power); V = ZM_to_Flm(liftint(embedding_forms), p); numzeta = modular_curve_numerator_zeta_function (group, p); return curve_construct (mkvec2(group, stoi(weight)), p, NULL, MULTIPLY_POWER_SERIES, V, max_power, numzeta); return curve_construct(group, p, NULL, MULTIPLY_POWER_SERIES, V, max_power, numzeta); } GEN ... ...
 ... ... @@ -3,6 +3,6 @@ install(modular_curve_numerator_zeta_function, "GL", , "libmodcurve@shrext@"); install(modular_curve_zeta_function, "GL", , "libmodcurve@shrext@"); install(modular_curve_count_points, "GLD1,L,", , "libmodcurve@shrext@"); install(modular_curve_jacobian_count_points, "GLD1,L,", , "libmodcurve@shrext@"); install(modular_curve, "GLD0,L,", , "libmodcurve@shrext@"); install(modular_curve_jacobian_medium, "GL", , "libmodcurve@shrext@"); install(modular_curve_jacobian_large, "GL", , "libmodcurve@shrext@"); install(modular_curve, "GLD0,L,DG", , "libmodcurve@shrext@"); install(modular_curve_jacobian_medium, "GLDG", , "libmodcurve@shrext@"); install(modular_curve_jacobian_large, "GLDG", , "libmodcurve@shrext@");
 ... ... @@ -7,7 +7,7 @@ GEN modular_curve_zeta_function(GEN group, unsigned long p); GEN modular_curve_count_points(GEN group, unsigned long p, unsigned long k); GEN modular_curve_jacobian_count_points(GEN group, unsigned long p, unsigned long k); GEN modular_curve(GEN group, unsigned long p, unsigned long max_power); GEN modular_curve(GEN group, ulong p, ulong max_power, GEN embedding_forms); GEN modular_curve_distinguished_point(GEN X); #endif
 ... ... @@ -15,14 +15,14 @@ GEN modular_curve_jacobian_medium(GEN group, unsigned long p) { return curve_jacobian (modular_curve (group, p, 8), modular_curve_jacobian_medium(GEN group, ulong p, GEN embedding_forms) { return curve_jacobian (modular_curve(group, p, 8, embedding_forms), JACOBIAN_TYPE_MEDIUM); } GEN modular_curve_jacobian_large(GEN group, unsigned long p) { return curve_jacobian (modular_curve (group, p, 9), modular_curve_jacobian_large(GEN group, ulong p, GEN embedding_forms) { return curve_jacobian (modular_curve(group, p, 9, embedding_forms), JACOBIAN_TYPE_LARGE); } ... ...
 #ifndef MODULAR_JACOBIAN #define MODULAR_JACOBIAN GEN modular_curve_jacobian_medium(GEN group, unsigned long p); GEN modular_curve_jacobian_large(GEN group, unsigned long p); GEN modular_curve_jacobian_medium(GEN group, ulong p, GEN embedding_forms); GEN modular_curve_jacobian_large(GEN group, ulong p, GEN embedding_forms); GEN modular_jacobian_normalised_divisor (GEN X, GEN W_D, GEN W_rO); #endif
 ... ... @@ -369,7 +369,7 @@ torsion_subscheme(GEN Gamma, unsigned long l, unsigned long p, /* Compute the Jacobian and its base change to the right field. */ J = modular_curve_jacobian_medium(Gamma, p); J = modular_curve_jacobian_medium(Gamma, p, gp_read_file("embedding_forms.gp")); err_printf("working with curve of genus %li with projective" " embedding of degree %li into P^%li\n", curve_genus(J), curve_degree(J), lg(curve_V(J, 1)) - 2); ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!