passagemath-schemes 10.6.38__cp314-cp314t-macosx_13_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-schemes might be problematic. Click here for more details.
- passagemath_schemes/.dylibs/libflint.21.0.dylib +0 -0
- passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
- passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
- passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
- passagemath_schemes/__init__.py +3 -0
- passagemath_schemes-10.6.38.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.38.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.38.dist-info/RECORD +314 -0
- passagemath_schemes-10.6.38.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.38.dist-info/top_level.txt +3 -0
- sage/all__sagemath_schemes.py +23 -0
- sage/databases/all__sagemath_schemes.py +7 -0
- sage/databases/cremona.py +1723 -0
- sage/dynamics/all__sagemath_schemes.py +2 -0
- sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
- sage/dynamics/arithmetic_dynamics/all.py +14 -0
- sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
- sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
- sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
- sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
- sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
- sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
- sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-314t-darwin.so +0 -0
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
- sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
- sage/lfunctions/all.py +18 -0
- sage/lfunctions/dokchitser.py +745 -0
- sage/lfunctions/pari.py +818 -0
- sage/lfunctions/zero_sums.cpython-314t-darwin.so +0 -0
- sage/lfunctions/zero_sums.pyx +1847 -0
- sage/modular/abvar/abvar.py +5135 -0
- sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
- sage/modular/abvar/abvar_newform.py +244 -0
- sage/modular/abvar/all.py +8 -0
- sage/modular/abvar/constructor.py +186 -0
- sage/modular/abvar/cuspidal_subgroup.py +371 -0
- sage/modular/abvar/finite_subgroup.py +896 -0
- sage/modular/abvar/homology.py +720 -0
- sage/modular/abvar/homspace.py +998 -0
- sage/modular/abvar/lseries.py +415 -0
- sage/modular/abvar/morphism.py +935 -0
- sage/modular/abvar/torsion_point.py +274 -0
- sage/modular/abvar/torsion_subgroup.py +740 -0
- sage/modular/all.py +43 -0
- sage/modular/arithgroup/all.py +20 -0
- sage/modular/arithgroup/arithgroup_element.cpython-314t-darwin.so +0 -0
- sage/modular/arithgroup/arithgroup_element.pyx +474 -0
- sage/modular/arithgroup/arithgroup_generic.py +1402 -0
- sage/modular/arithgroup/arithgroup_perm.py +2692 -0
- sage/modular/arithgroup/congroup.cpython-314t-darwin.so +0 -0
- sage/modular/arithgroup/congroup.pyx +334 -0
- sage/modular/arithgroup/congroup_gamma.py +363 -0
- sage/modular/arithgroup/congroup_gamma0.py +692 -0
- sage/modular/arithgroup/congroup_gamma1.py +653 -0
- sage/modular/arithgroup/congroup_gammaH.py +1469 -0
- sage/modular/arithgroup/congroup_generic.py +628 -0
- sage/modular/arithgroup/congroup_sl2z.py +267 -0
- sage/modular/arithgroup/farey_symbol.cpython-314t-darwin.so +0 -0
- sage/modular/arithgroup/farey_symbol.pyx +1066 -0
- sage/modular/arithgroup/tests.py +418 -0
- sage/modular/btquotients/all.py +4 -0
- sage/modular/btquotients/btquotient.py +3753 -0
- sage/modular/btquotients/pautomorphicform.py +2570 -0
- sage/modular/buzzard.py +100 -0
- sage/modular/congroup.py +29 -0
- sage/modular/congroup_element.py +13 -0
- sage/modular/cusps.py +1109 -0
- sage/modular/cusps_nf.py +1270 -0
- sage/modular/dims.py +569 -0
- sage/modular/dirichlet.py +3310 -0
- sage/modular/drinfeld_modform/all.py +2 -0
- sage/modular/drinfeld_modform/element.py +446 -0
- sage/modular/drinfeld_modform/ring.py +773 -0
- sage/modular/drinfeld_modform/tutorial.py +236 -0
- sage/modular/etaproducts.py +1065 -0
- sage/modular/hecke/algebra.py +746 -0
- sage/modular/hecke/all.py +20 -0
- sage/modular/hecke/ambient_module.py +1019 -0
- sage/modular/hecke/degenmap.py +119 -0
- sage/modular/hecke/element.py +325 -0
- sage/modular/hecke/hecke_operator.py +780 -0
- sage/modular/hecke/homspace.py +206 -0
- sage/modular/hecke/module.py +1767 -0
- sage/modular/hecke/morphism.py +174 -0
- sage/modular/hecke/submodule.py +989 -0
- sage/modular/hypergeometric_misc.cpython-314t-darwin.so +0 -0
- sage/modular/hypergeometric_misc.pxd +4 -0
- sage/modular/hypergeometric_misc.pyx +166 -0
- sage/modular/hypergeometric_motive.py +2017 -0
- sage/modular/local_comp/all.py +2 -0
- sage/modular/local_comp/liftings.py +292 -0
- sage/modular/local_comp/local_comp.py +1071 -0
- sage/modular/local_comp/smoothchar.py +1825 -0
- sage/modular/local_comp/type_space.py +748 -0
- sage/modular/modform/all.py +30 -0
- sage/modular/modform/ambient.py +815 -0
- sage/modular/modform/ambient_R.py +177 -0
- sage/modular/modform/ambient_eps.py +306 -0
- sage/modular/modform/ambient_g0.py +124 -0
- sage/modular/modform/ambient_g1.py +204 -0
- sage/modular/modform/constructor.py +545 -0
- sage/modular/modform/cuspidal_submodule.py +708 -0
- sage/modular/modform/defaults.py +14 -0
- sage/modular/modform/eis_series.py +505 -0
- sage/modular/modform/eisenstein_submodule.py +663 -0
- sage/modular/modform/element.py +4131 -0
- sage/modular/modform/find_generators.py +59 -0
- sage/modular/modform/half_integral.py +154 -0
- sage/modular/modform/hecke_operator_on_qexp.py +247 -0
- sage/modular/modform/j_invariant.py +47 -0
- sage/modular/modform/l_series_gross_zagier.py +133 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314t-darwin.so +0 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
- sage/modular/modform/notes.py +45 -0
- sage/modular/modform/numerical.py +514 -0
- sage/modular/modform/periods.py +14 -0
- sage/modular/modform/ring.py +1257 -0
- sage/modular/modform/space.py +1860 -0
- sage/modular/modform/submodule.py +118 -0
- sage/modular/modform/tests.py +64 -0
- sage/modular/modform/theta.py +110 -0
- sage/modular/modform/vm_basis.py +381 -0
- sage/modular/modform/weight1.py +220 -0
- sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
- sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
- sage/modular/modform_hecketriangle/all.py +30 -0
- sage/modular/modform_hecketriangle/analytic_type.py +590 -0
- sage/modular/modform_hecketriangle/constructor.py +416 -0
- sage/modular/modform_hecketriangle/element.py +351 -0
- sage/modular/modform_hecketriangle/functors.py +752 -0
- sage/modular/modform_hecketriangle/graded_ring.py +541 -0
- sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
- sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
- sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
- sage/modular/modform_hecketriangle/readme.py +1214 -0
- sage/modular/modform_hecketriangle/series_constructor.py +580 -0
- sage/modular/modform_hecketriangle/space.py +1037 -0
- sage/modular/modform_hecketriangle/subspace.py +423 -0
- sage/modular/modsym/all.py +17 -0
- sage/modular/modsym/ambient.py +3846 -0
- sage/modular/modsym/boundary.py +1420 -0
- sage/modular/modsym/element.py +336 -0
- sage/modular/modsym/g1list.py +178 -0
- sage/modular/modsym/ghlist.py +182 -0
- sage/modular/modsym/hecke_operator.py +73 -0
- sage/modular/modsym/manin_symbol.cpython-314t-darwin.so +0 -0
- sage/modular/modsym/manin_symbol.pxd +5 -0
- sage/modular/modsym/manin_symbol.pyx +497 -0
- sage/modular/modsym/manin_symbol_list.py +1295 -0
- sage/modular/modsym/modsym.py +400 -0
- sage/modular/modsym/modular_symbols.py +384 -0
- sage/modular/modsym/p1list.cpython-314t-darwin.so +0 -0
- sage/modular/modsym/p1list.pxd +29 -0
- sage/modular/modsym/p1list.pyx +1372 -0
- sage/modular/modsym/p1list_nf.py +1241 -0
- sage/modular/modsym/relation_matrix.py +591 -0
- sage/modular/modsym/relation_matrix_pyx.cpython-314t-darwin.so +0 -0
- sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
- sage/modular/modsym/space.py +2468 -0
- sage/modular/modsym/subspace.py +455 -0
- sage/modular/modsym/tests.py +375 -0
- sage/modular/multiple_zeta.py +2632 -0
- sage/modular/multiple_zeta_F_algebra.py +786 -0
- sage/modular/overconvergent/all.py +6 -0
- sage/modular/overconvergent/genus0.py +1878 -0
- sage/modular/overconvergent/hecke_series.py +1187 -0
- sage/modular/overconvergent/weightspace.py +778 -0
- sage/modular/pollack_stevens/all.py +4 -0
- sage/modular/pollack_stevens/distributions.py +874 -0
- sage/modular/pollack_stevens/fund_domain.py +1572 -0
- sage/modular/pollack_stevens/manin_map.py +859 -0
- sage/modular/pollack_stevens/modsym.py +1593 -0
- sage/modular/pollack_stevens/padic_lseries.py +417 -0
- sage/modular/pollack_stevens/sigma0.py +534 -0
- sage/modular/pollack_stevens/space.py +1076 -0
- sage/modular/quasimodform/all.py +3 -0
- sage/modular/quasimodform/element.py +845 -0
- sage/modular/quasimodform/ring.py +828 -0
- sage/modular/quatalg/all.py +3 -0
- sage/modular/quatalg/brandt.py +1642 -0
- sage/modular/ssmod/all.py +8 -0
- sage/modular/ssmod/ssmod.py +827 -0
- sage/rings/all__sagemath_schemes.py +1 -0
- sage/rings/polynomial/all__sagemath_schemes.py +1 -0
- sage/rings/polynomial/binary_form_reduce.py +585 -0
- sage/schemes/all.py +41 -0
- sage/schemes/berkovich/all.py +6 -0
- sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
- sage/schemes/berkovich/berkovich_space.py +748 -0
- sage/schemes/curves/affine_curve.py +2928 -0
- sage/schemes/curves/all.py +33 -0
- sage/schemes/curves/closed_point.py +434 -0
- sage/schemes/curves/constructor.py +381 -0
- sage/schemes/curves/curve.py +542 -0
- sage/schemes/curves/plane_curve_arrangement.py +1283 -0
- sage/schemes/curves/point.py +463 -0
- sage/schemes/curves/projective_curve.py +3026 -0
- sage/schemes/curves/zariski_vankampen.py +1932 -0
- sage/schemes/cyclic_covers/all.py +2 -0
- sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
- sage/schemes/cyclic_covers/constructor.py +137 -0
- sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
- sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
- sage/schemes/elliptic_curves/BSD.py +1036 -0
- sage/schemes/elliptic_curves/Qcurves.py +592 -0
- sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
- sage/schemes/elliptic_curves/all.py +49 -0
- sage/schemes/elliptic_curves/cardinality.py +609 -0
- sage/schemes/elliptic_curves/cm.py +1102 -0
- sage/schemes/elliptic_curves/constructor.py +1552 -0
- sage/schemes/elliptic_curves/ec_database.py +175 -0
- sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
- sage/schemes/elliptic_curves/ell_egros.py +459 -0
- sage/schemes/elliptic_curves/ell_field.py +2836 -0
- sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
- sage/schemes/elliptic_curves/ell_generic.py +3760 -0
- sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
- sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
- sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
- sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
- sage/schemes/elliptic_curves/ell_point.py +4787 -0
- sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
- sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
- sage/schemes/elliptic_curves/ell_torsion.py +436 -0
- sage/schemes/elliptic_curves/ell_wp.py +352 -0
- sage/schemes/elliptic_curves/formal_group.py +760 -0
- sage/schemes/elliptic_curves/gal_reps.py +1459 -0
- sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
- sage/schemes/elliptic_curves/gp_simon.py +152 -0
- sage/schemes/elliptic_curves/heegner.py +7335 -0
- sage/schemes/elliptic_curves/height.py +2109 -0
- sage/schemes/elliptic_curves/hom.py +1406 -0
- sage/schemes/elliptic_curves/hom_composite.py +934 -0
- sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
- sage/schemes/elliptic_curves/hom_scalar.py +531 -0
- sage/schemes/elliptic_curves/hom_sum.py +682 -0
- sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
- sage/schemes/elliptic_curves/homset.py +271 -0
- sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
- sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
- sage/schemes/elliptic_curves/jacobian.py +237 -0
- sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
- sage/schemes/elliptic_curves/kraus.py +1014 -0
- sage/schemes/elliptic_curves/lseries_ell.py +943 -0
- sage/schemes/elliptic_curves/mod5family.py +105 -0
- sage/schemes/elliptic_curves/mod_poly.py +197 -0
- sage/schemes/elliptic_curves/mod_sym_num.cpython-314t-darwin.so +0 -0
- sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
- sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
- sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
- sage/schemes/elliptic_curves/padics.py +1816 -0
- sage/schemes/elliptic_curves/period_lattice.py +2234 -0
- sage/schemes/elliptic_curves/period_lattice_region.cpython-314t-darwin.so +0 -0
- sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
- sage/schemes/elliptic_curves/saturation.py +715 -0
- sage/schemes/elliptic_curves/sha_tate.py +1158 -0
- sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
- sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
- sage/schemes/hyperelliptic_curves/all.py +6 -0
- sage/schemes/hyperelliptic_curves/constructor.py +291 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
- sage/schemes/hyperelliptic_curves/invariants.py +410 -0
- sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
- sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
- sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
- sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
- sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
- sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
- sage/schemes/hyperelliptic_curves/mestre.py +302 -0
- sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
- sage/schemes/jacobians/abstract_jacobian.py +277 -0
- sage/schemes/jacobians/all.py +2 -0
- sage/schemes/overview.py +161 -0
- sage/schemes/plane_conics/all.py +22 -0
- sage/schemes/plane_conics/con_field.py +1296 -0
- sage/schemes/plane_conics/con_finite_field.py +158 -0
- sage/schemes/plane_conics/con_number_field.py +456 -0
- sage/schemes/plane_conics/con_rational_field.py +406 -0
- sage/schemes/plane_conics/con_rational_function_field.py +580 -0
- sage/schemes/plane_conics/constructor.py +249 -0
- sage/schemes/plane_quartics/all.py +2 -0
- sage/schemes/plane_quartics/quartic_constructor.py +71 -0
- sage/schemes/plane_quartics/quartic_generic.py +73 -0
- sage/schemes/riemann_surfaces/all.py +1 -0
- sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
- sage_wheels/share/cremona/cremona_mini.db +0 -0
- sage_wheels/share/ellcurves/rank0 +30427 -0
- sage_wheels/share/ellcurves/rank1 +31871 -0
- sage_wheels/share/ellcurves/rank10 +6 -0
- sage_wheels/share/ellcurves/rank11 +6 -0
- sage_wheels/share/ellcurves/rank12 +1 -0
- sage_wheels/share/ellcurves/rank14 +1 -0
- sage_wheels/share/ellcurves/rank15 +1 -0
- sage_wheels/share/ellcurves/rank17 +1 -0
- sage_wheels/share/ellcurves/rank19 +1 -0
- sage_wheels/share/ellcurves/rank2 +2388 -0
- sage_wheels/share/ellcurves/rank20 +1 -0
- sage_wheels/share/ellcurves/rank21 +1 -0
- sage_wheels/share/ellcurves/rank22 +1 -0
- sage_wheels/share/ellcurves/rank23 +1 -0
- sage_wheels/share/ellcurves/rank24 +1 -0
- sage_wheels/share/ellcurves/rank28 +1 -0
- sage_wheels/share/ellcurves/rank3 +836 -0
- sage_wheels/share/ellcurves/rank4 +10 -0
- sage_wheels/share/ellcurves/rank5 +5 -0
- sage_wheels/share/ellcurves/rank6 +5 -0
- sage_wheels/share/ellcurves/rank7 +5 -0
- sage_wheels/share/ellcurves/rank8 +6 -0
- sage_wheels/share/ellcurves/rank9 +7 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.libs.pari
|
|
3
|
+
r"""
|
|
4
|
+
Weight 1 modular forms
|
|
5
|
+
|
|
6
|
+
This module contains routines for computing weight 1 modular forms, using
|
|
7
|
+
George Schaeffer's "Hecke stability" algorithm (detailed in [Sch2015]_). These
|
|
8
|
+
functions are mostly for internal use; a more convenient interface is offered
|
|
9
|
+
by the usual ModularForms and CuspForms constructors.
|
|
10
|
+
|
|
11
|
+
AUTHORS:
|
|
12
|
+
|
|
13
|
+
- David Loeffler (2017-11): first version
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from sage.misc.cachefunc import cached_function
|
|
17
|
+
from sage.rings.integer_ring import ZZ
|
|
18
|
+
from sage.rings.power_series_ring import PowerSeriesRing
|
|
19
|
+
from sage.misc.verbose import verbose
|
|
20
|
+
from sage.structure.sequence import Sequence
|
|
21
|
+
from sage.modular.arithgroup.all import Gamma0, GammaH
|
|
22
|
+
from sage.modular.arithgroup.arithgroup_generic import ArithmeticSubgroup
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@cached_function
|
|
26
|
+
def modular_ratio_space(chi):
|
|
27
|
+
r"""
|
|
28
|
+
Compute the space of 'modular ratios', i.e. meromorphic modular forms f
|
|
29
|
+
level N and character chi such that f * E is a holomorphic cusp form for
|
|
30
|
+
every Eisenstein series E of weight 1 and character 1/chi.
|
|
31
|
+
|
|
32
|
+
Elements are returned as `q`-expansions up to precision R, where R is one
|
|
33
|
+
greater than the weight 3 Sturm bound.
|
|
34
|
+
|
|
35
|
+
EXAMPLES::
|
|
36
|
+
|
|
37
|
+
sage: chi = DirichletGroup(31,QQ).0
|
|
38
|
+
sage: sage.modular.modform.weight1.modular_ratio_space(chi)
|
|
39
|
+
[q - 8/3*q^3 + 13/9*q^4 + 43/27*q^5 - 620/81*q^6 + 1615/243*q^7 + 3481/729*q^8 + O(q^9),
|
|
40
|
+
q^2 - 8/3*q^3 + 13/9*q^4 + 70/27*q^5 - 620/81*q^6 + 1858/243*q^7 + 2752/729*q^8 + O(q^9)]
|
|
41
|
+
"""
|
|
42
|
+
from sage.modular.modform.constructor import EisensteinForms, CuspForms
|
|
43
|
+
|
|
44
|
+
if chi(-1) == 1:
|
|
45
|
+
return []
|
|
46
|
+
N = chi.modulus()
|
|
47
|
+
chi = chi.minimize_base_ring()
|
|
48
|
+
K = chi.base_ring()
|
|
49
|
+
R = Gamma0(N).sturm_bound(3) + 1
|
|
50
|
+
verbose("Working precision is %s" % R, level=1)
|
|
51
|
+
verbose("Coeff field is %s" % K, level=1)
|
|
52
|
+
|
|
53
|
+
V = K**R
|
|
54
|
+
I = V
|
|
55
|
+
d = I.rank()
|
|
56
|
+
|
|
57
|
+
t = verbose("Calculating Eisenstein forms in weight 1...",level=1)
|
|
58
|
+
B0 = EisensteinForms(~chi, 1).q_echelon_basis(prec=R)
|
|
59
|
+
B = [b + B0[0] for b in B0]
|
|
60
|
+
verbose("Done (dimension %s)" % len(B),level=1,t=t)
|
|
61
|
+
|
|
62
|
+
t = verbose("Calculating in weight 2...", level=1)
|
|
63
|
+
C = CuspForms(Gamma0(N), 2).q_echelon_basis(prec=R)
|
|
64
|
+
verbose("Done (dimension %s)" % len(C), t=t, level=1)
|
|
65
|
+
|
|
66
|
+
t = verbose("Computing candidate space", level=1)
|
|
67
|
+
for b in B:
|
|
68
|
+
quots = (c/b for c in C)
|
|
69
|
+
W = V.span(V(x.padded_list(R)) for x in quots)
|
|
70
|
+
I = I.intersection(W)
|
|
71
|
+
if I.rank() < d:
|
|
72
|
+
verbose(" Cut down to dimension %s" % I.rank(), level=1)
|
|
73
|
+
d = I.rank()
|
|
74
|
+
if I.rank() == 0:
|
|
75
|
+
break
|
|
76
|
+
|
|
77
|
+
verbose("Done: intersection is %s-dimensional" % I.dimension(), t=t, level=1)
|
|
78
|
+
|
|
79
|
+
A = PowerSeriesRing(K, 'q')
|
|
80
|
+
return [A(x.list()).add_bigoh(R) for x in I.gens()]
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def modular_ratio_to_prec(chi, qexp, prec):
|
|
84
|
+
r"""
|
|
85
|
+
Given a `q`-expansion of a modular ratio up to sufficient precision to
|
|
86
|
+
determine it uniquely, compute it to greater precision.
|
|
87
|
+
|
|
88
|
+
EXAMPLES::
|
|
89
|
+
|
|
90
|
+
sage: from sage.modular.modform.weight1 import modular_ratio_to_prec
|
|
91
|
+
sage: R.<q> = QQ[[]]
|
|
92
|
+
sage: modular_ratio_to_prec(DirichletGroup(31,QQ).0, q-q^2-q^5-q^7+q^8+O(q^9), 20)
|
|
93
|
+
q - q^2 - q^5 - q^7 + q^8 + q^9 + q^10 + q^14 - q^16 - q^18 - q^19 + O(q^20)
|
|
94
|
+
"""
|
|
95
|
+
if prec <= qexp.prec():
|
|
96
|
+
return qexp.add_bigoh(prec)
|
|
97
|
+
from sage.modular.modform.constructor import EisensteinForms, CuspForms
|
|
98
|
+
C = CuspForms(chi.level(), 2, base_ring=qexp.base_ring())
|
|
99
|
+
B = EisensteinForms(~chi, 1).gen(0).qexp(prec)
|
|
100
|
+
qexp = qexp.add_bigoh(C.sturm_bound())
|
|
101
|
+
fB = qexp * B
|
|
102
|
+
fB_elt = C(fB, check=False)
|
|
103
|
+
return fB_elt.qexp(prec) / B
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@cached_function
|
|
107
|
+
def hecke_stable_subspace(chi, aux_prime=ZZ(2)):
|
|
108
|
+
r"""
|
|
109
|
+
Compute a `q`-expansion basis for `S_1(\chi)`.
|
|
110
|
+
|
|
111
|
+
Results are returned as `q`-expansions to a certain fixed (and fairly high)
|
|
112
|
+
precision. If more precision is required this can be obtained with
|
|
113
|
+
:func:`modular_ratio_to_prec`.
|
|
114
|
+
|
|
115
|
+
EXAMPLES::
|
|
116
|
+
|
|
117
|
+
sage: from sage.modular.modform.weight1 import hecke_stable_subspace
|
|
118
|
+
sage: hecke_stable_subspace(DirichletGroup(59, QQ).0)
|
|
119
|
+
[q - q^3 + q^4 - q^5 - q^7 - q^12 + q^15 + q^16 + 2*q^17 - q^19 - q^20 + q^21 + q^27 - q^28 - q^29 + q^35 + O(q^40)]
|
|
120
|
+
"""
|
|
121
|
+
# Deal quickly with the easy cases.
|
|
122
|
+
if chi(-1) == 1:
|
|
123
|
+
return []
|
|
124
|
+
N = chi.modulus()
|
|
125
|
+
H = chi.kernel()
|
|
126
|
+
G = GammaH(N, H)
|
|
127
|
+
try:
|
|
128
|
+
if ArithmeticSubgroup.dimension_cusp_forms(G, 1) == 0:
|
|
129
|
+
verbose("no wt 1 cusp forms for N=%s, chi=%s by Riemann-Roch" % (N, chi._repr_short_()), level=1)
|
|
130
|
+
return []
|
|
131
|
+
except NotImplementedError:
|
|
132
|
+
pass
|
|
133
|
+
|
|
134
|
+
from sage.modular.modform.constructor import EisensteinForms
|
|
135
|
+
chi = chi.minimize_base_ring()
|
|
136
|
+
K = chi.base_ring()
|
|
137
|
+
|
|
138
|
+
# Auxiliary prime for Hecke stability method
|
|
139
|
+
l = aux_prime
|
|
140
|
+
while l.divides(N):
|
|
141
|
+
l = l.next_prime()
|
|
142
|
+
verbose("Auxiliary prime: %s" % l, level=1)
|
|
143
|
+
|
|
144
|
+
# Compute working precision
|
|
145
|
+
R = l*Gamma0(N).sturm_bound(l + 2)
|
|
146
|
+
|
|
147
|
+
t = verbose("Computing modular ratio space", level=1)
|
|
148
|
+
mrs = modular_ratio_space(chi)
|
|
149
|
+
|
|
150
|
+
t = verbose("Computing modular ratios to precision %s" % R, level=1)
|
|
151
|
+
qexps = [modular_ratio_to_prec(chi, f, R) for f in mrs]
|
|
152
|
+
verbose("Done", t=t, level=1)
|
|
153
|
+
|
|
154
|
+
# We want to compute the largest subspace of I stable under T_l. To do
|
|
155
|
+
# this, we compute I intersect T_l(I) modulo q^(R/l), and take its preimage
|
|
156
|
+
# under T_l, which is then well-defined modulo q^R.
|
|
157
|
+
|
|
158
|
+
from sage.modular.modform.hecke_operator_on_qexp import hecke_operator_on_qexp
|
|
159
|
+
|
|
160
|
+
t = verbose("Computing Hecke-stable subspace", level=1)
|
|
161
|
+
A = PowerSeriesRing(K, 'q')
|
|
162
|
+
r = R // l
|
|
163
|
+
V = K**R
|
|
164
|
+
W = K**r
|
|
165
|
+
Tl_images = [hecke_operator_on_qexp(f, l, 1, chi) for f in qexps]
|
|
166
|
+
qvecs = [V(x.padded_list(R)) for x in qexps]
|
|
167
|
+
qvecs_trunc = [W(x.padded_list(r)) for x in qexps]
|
|
168
|
+
Tvecs = [W(x.padded_list(r)) for x in Tl_images]
|
|
169
|
+
|
|
170
|
+
I = V.submodule(qvecs)
|
|
171
|
+
Iimage = W.span(qvecs_trunc)
|
|
172
|
+
TlI = W.span(Tvecs)
|
|
173
|
+
Jimage = Iimage.intersection(TlI)
|
|
174
|
+
J = I.Hom(W)(Tvecs).inverse_image(Jimage)
|
|
175
|
+
|
|
176
|
+
verbose("Hecke-stable subspace is %s-dimensional" % J.dimension(), t=t, level=1)
|
|
177
|
+
|
|
178
|
+
if J.rank() == 0:
|
|
179
|
+
return []
|
|
180
|
+
|
|
181
|
+
# The theory does not guarantee that J is exactly S_1(chi), just that it is
|
|
182
|
+
# intermediate between S_1(chi) and M_1(chi). In every example I know of,
|
|
183
|
+
# it is equal to S_1(chi), but just for honesty, we check this anyway.
|
|
184
|
+
t = verbose("Checking cuspidality", level=1)
|
|
185
|
+
JEis = V.span(V(x.padded_list(R)) for x in EisensteinForms(chi, 1).q_echelon_basis(prec=R))
|
|
186
|
+
D = JEis.intersection(J)
|
|
187
|
+
if D.dimension() != 0:
|
|
188
|
+
raise ArithmeticError("Got non-cuspidal form!")
|
|
189
|
+
verbose("Done", t=t, level=1)
|
|
190
|
+
return Sequence(A(x.list()).add_bigoh(R) for x in J.gens())
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@cached_function
|
|
194
|
+
def dimension_wt1_cusp_forms(chi):
|
|
195
|
+
r"""
|
|
196
|
+
Return the dimension of the space of cusp forms of weight 1 and character chi.
|
|
197
|
+
|
|
198
|
+
EXAMPLES::
|
|
199
|
+
|
|
200
|
+
sage: chi = DirichletGroup(59, QQ).0
|
|
201
|
+
sage: sage.modular.modform.weight1.dimension_wt1_cusp_forms(chi)
|
|
202
|
+
1
|
|
203
|
+
"""
|
|
204
|
+
return len(hecke_stable_subspace(chi))
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
@cached_function
|
|
208
|
+
def dimension_wt1_cusp_forms_gH(group):
|
|
209
|
+
r"""
|
|
210
|
+
Return the dimension of the space of cusp forms of weight 1 for the given
|
|
211
|
+
group (which should be of GammaH type). Computed by summing over Galois
|
|
212
|
+
orbits of characters modulo H.
|
|
213
|
+
|
|
214
|
+
EXAMPLES::
|
|
215
|
+
|
|
216
|
+
sage: sage.modular.modform.weight1.dimension_wt1_cusp_forms_gH(GammaH(31, [7]))
|
|
217
|
+
1
|
|
218
|
+
"""
|
|
219
|
+
chis = [g.minimize_base_ring() for g in group.characters_mod_H(galois_orbits=True)]
|
|
220
|
+
return sum(dimension_wt1_cusp_forms(chi) * chi.base_ring().degree() for chi in chis)
|