passagemath-schemes 10.6.40__cp314-cp314-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.22.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.40.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.40.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.40.dist-info/RECORD +314 -0
- passagemath_schemes-10.6.40.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.40.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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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,400 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.libs.flint sage.libs.pari
|
|
3
|
+
r"""
|
|
4
|
+
Creation of modular symbols spaces
|
|
5
|
+
|
|
6
|
+
EXAMPLES: We create a space and output its category.
|
|
7
|
+
|
|
8
|
+
::
|
|
9
|
+
|
|
10
|
+
sage: C = HeckeModules(RationalField()); C
|
|
11
|
+
Category of Hecke modules over Rational Field
|
|
12
|
+
sage: M = ModularSymbols(11)
|
|
13
|
+
sage: M.category()
|
|
14
|
+
Category of Hecke modules over Rational Field
|
|
15
|
+
sage: M in C
|
|
16
|
+
True
|
|
17
|
+
|
|
18
|
+
We create a space compute the charpoly, then compute the same but
|
|
19
|
+
over a bigger field. In each case we also decompose the space using
|
|
20
|
+
`T_2`.
|
|
21
|
+
|
|
22
|
+
::
|
|
23
|
+
|
|
24
|
+
sage: M = ModularSymbols(23,2, base_ring=QQ)
|
|
25
|
+
sage: M.T(2).charpoly('x').factor()
|
|
26
|
+
(x - 3) * (x^2 + x - 1)^2
|
|
27
|
+
sage: M.decomposition(2)
|
|
28
|
+
[Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Rational Field,
|
|
29
|
+
Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Rational Field]
|
|
30
|
+
|
|
31
|
+
::
|
|
32
|
+
|
|
33
|
+
sage: # needs sage.rings.number_field
|
|
34
|
+
sage: M = ModularSymbols(23,2, base_ring=QuadraticField(5, 'sqrt5'))
|
|
35
|
+
sage: M.T(2).charpoly('x').factor()
|
|
36
|
+
(x - 3) * (x - 1/2*sqrt5 + 1/2)^2 * (x + 1/2*sqrt5 + 1/2)^2
|
|
37
|
+
sage: M.decomposition(2)
|
|
38
|
+
[Modular Symbols subspace of dimension 1 of Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Number Field in sqrt5 with defining polynomial x^2 - 5 with sqrt5 = 2.236067977499790?,
|
|
39
|
+
Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Number Field in sqrt5 with defining polynomial x^2 - 5 with sqrt5 = 2.236067977499790?,
|
|
40
|
+
Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 5 for Gamma_0(23) of weight 2 with sign 0 over Number Field in sqrt5 with defining polynomial x^2 - 5 with sqrt5 = 2.236067977499790?]
|
|
41
|
+
|
|
42
|
+
We compute some Hecke operators and do a consistency check::
|
|
43
|
+
|
|
44
|
+
sage: m = ModularSymbols(39, 2)
|
|
45
|
+
sage: t2 = m.T(2); t5 = m.T(5)
|
|
46
|
+
sage: t2*t5 - t5*t2 == 0
|
|
47
|
+
True
|
|
48
|
+
|
|
49
|
+
This tests the bug reported in :issue:`1220`::
|
|
50
|
+
|
|
51
|
+
sage: G = GammaH(36, [13, 19])
|
|
52
|
+
sage: G.modular_symbols()
|
|
53
|
+
Modular Symbols space of dimension 13 for Congruence Subgroup Gamma_H(36)
|
|
54
|
+
with H generated by [13, 19] of weight 2 with sign 0 over Rational Field
|
|
55
|
+
sage: G.modular_symbols().cuspidal_subspace()
|
|
56
|
+
Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 13 for
|
|
57
|
+
Congruence Subgroup Gamma_H(36) with H generated by [13, 19] of weight 2 with sign 0
|
|
58
|
+
over Rational Field
|
|
59
|
+
|
|
60
|
+
This test catches a tricky corner case for spaces with character::
|
|
61
|
+
|
|
62
|
+
sage: ModularSymbols(DirichletGroup(20).1**3, weight=3, sign=1).cuspidal_subspace()
|
|
63
|
+
Modular Symbols subspace of dimension 3 of Modular Symbols space of dimension 6
|
|
64
|
+
and level 20, weight 3, character [1, -zeta4], sign 1,
|
|
65
|
+
over Cyclotomic Field of order 4 and degree 2
|
|
66
|
+
|
|
67
|
+
This tests the bugs reported in :issue:`20932`::
|
|
68
|
+
|
|
69
|
+
sage: chi = kronecker_character(3*34603)
|
|
70
|
+
sage: ModularSymbols(chi, 2, sign=1, base_ring=GF(3)) # not tested # long time (600 seconds)
|
|
71
|
+
Modular Symbols space of dimension 11535 and level 103809, weight 2,
|
|
72
|
+
character [2, 2], sign 1, over Finite Field of size 3
|
|
73
|
+
sage: chi = kronecker_character(3*61379)
|
|
74
|
+
sage: ModularSymbols(chi, 2, sign=1, base_ring=GF(3)) # not tested # long time (1800 seconds)
|
|
75
|
+
Modular Symbols space of dimension 20460 and level 184137, weight 2,
|
|
76
|
+
character [2, 2], sign 1, over Finite Field of size 3
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
# ****************************************************************************
|
|
80
|
+
# Sage: Open Source Mathematical Software
|
|
81
|
+
#
|
|
82
|
+
# Copyright (C) 2005 William Stein <wstein@gmail.com>
|
|
83
|
+
#
|
|
84
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
85
|
+
#
|
|
86
|
+
# This code is distributed in the hope that it will be useful,
|
|
87
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
88
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
89
|
+
# General Public License for more details.
|
|
90
|
+
#
|
|
91
|
+
# The full text of the GPL is available at:
|
|
92
|
+
#
|
|
93
|
+
# https://www.gnu.org/licenses/
|
|
94
|
+
# ****************************************************************************
|
|
95
|
+
|
|
96
|
+
import weakref
|
|
97
|
+
|
|
98
|
+
from sage.categories.commutative_rings import CommutativeRings
|
|
99
|
+
from sage.categories.fields import Fields
|
|
100
|
+
import sage.modular.arithgroup.all as arithgroup
|
|
101
|
+
import sage.modular.dirichlet as dirichlet
|
|
102
|
+
from sage.rings.integer import Integer
|
|
103
|
+
from sage.rings.rational_field import RationalField
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def canonical_parameters(group, weight, sign, base_ring):
|
|
107
|
+
"""
|
|
108
|
+
Return the canonically normalized parameters associated to a choice
|
|
109
|
+
of group, weight, sign, and base_ring. That is, normalize each of
|
|
110
|
+
these to be of the correct type, perform all appropriate type
|
|
111
|
+
checking, etc.
|
|
112
|
+
|
|
113
|
+
EXAMPLES::
|
|
114
|
+
|
|
115
|
+
sage: p1 = sage.modular.modsym.modsym.canonical_parameters(5,int(2),1,QQ) ; p1
|
|
116
|
+
(Congruence Subgroup Gamma0(5), 2, 1, Rational Field)
|
|
117
|
+
sage: p2 = sage.modular.modsym.modsym.canonical_parameters(Gamma0(5),2,1,QQ) ; p2
|
|
118
|
+
(Congruence Subgroup Gamma0(5), 2, 1, Rational Field)
|
|
119
|
+
sage: p1 == p2
|
|
120
|
+
True
|
|
121
|
+
sage: type(p1[1])
|
|
122
|
+
<class 'sage.rings.integer.Integer'>
|
|
123
|
+
"""
|
|
124
|
+
sign = Integer(sign)
|
|
125
|
+
if sign not in [-1, 0, 1]:
|
|
126
|
+
raise ValueError("sign must be -1, 0, or 1")
|
|
127
|
+
|
|
128
|
+
weight = Integer(weight)
|
|
129
|
+
if weight <= 1:
|
|
130
|
+
raise ValueError("the weight must be at least 2")
|
|
131
|
+
|
|
132
|
+
if isinstance(group, (int, Integer)):
|
|
133
|
+
group = arithgroup.Gamma0(group)
|
|
134
|
+
elif isinstance(group, dirichlet.DirichletCharacter):
|
|
135
|
+
if group.is_trivial():
|
|
136
|
+
group = arithgroup.Gamma0(group.modulus())
|
|
137
|
+
else:
|
|
138
|
+
eps = group.minimize_base_ring()
|
|
139
|
+
group = (eps, eps.parent())
|
|
140
|
+
if base_ring is None:
|
|
141
|
+
base_ring = eps.base_ring()
|
|
142
|
+
|
|
143
|
+
if base_ring is None:
|
|
144
|
+
base_ring = RationalField()
|
|
145
|
+
|
|
146
|
+
elif base_ring not in CommutativeRings():
|
|
147
|
+
raise TypeError(f"base_ring (={base_ring}) must be a commutative ring")
|
|
148
|
+
|
|
149
|
+
elif base_ring not in Fields():
|
|
150
|
+
raise TypeError(f"(currently) base_ring (={base_ring}) must be a field")
|
|
151
|
+
|
|
152
|
+
return group, weight, sign, base_ring
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
_cache = {}
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def ModularSymbols_clear_cache():
|
|
159
|
+
"""
|
|
160
|
+
Clear the global cache of modular symbols spaces.
|
|
161
|
+
|
|
162
|
+
EXAMPLES::
|
|
163
|
+
|
|
164
|
+
sage: sage.modular.modsym.modsym.ModularSymbols_clear_cache()
|
|
165
|
+
sage: sorted(sage.modular.modsym.modsym._cache)
|
|
166
|
+
[]
|
|
167
|
+
sage: M = ModularSymbols(6,2)
|
|
168
|
+
sage: sorted(sage.modular.modsym.modsym._cache)
|
|
169
|
+
[(Congruence Subgroup Gamma0(6), 2, 0, Rational Field)]
|
|
170
|
+
sage: sage.modular.modsym.modsym.ModularSymbols_clear_cache()
|
|
171
|
+
sage: sorted(sage.modular.modsym.modsym._cache)
|
|
172
|
+
[]
|
|
173
|
+
|
|
174
|
+
TESTS:
|
|
175
|
+
|
|
176
|
+
Make sure :issue:`10548` is fixed::
|
|
177
|
+
|
|
178
|
+
sage: import gc
|
|
179
|
+
sage: m = ModularSymbols(Gamma1(29))
|
|
180
|
+
sage: m = []
|
|
181
|
+
sage: ModularSymbols_clear_cache()
|
|
182
|
+
sage: gc.collect() # random
|
|
183
|
+
3422
|
|
184
|
+
sage: a = [x for x in gc.get_objects()
|
|
185
|
+
....: if isinstance(x,sage.modular.modsym.ambient.ModularSymbolsAmbient_wtk_g1)]
|
|
186
|
+
sage: a
|
|
187
|
+
[]
|
|
188
|
+
"""
|
|
189
|
+
global _cache
|
|
190
|
+
_cache = {}
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def ModularSymbols(group=1,
|
|
194
|
+
weight=2,
|
|
195
|
+
sign=0,
|
|
196
|
+
base_ring=None,
|
|
197
|
+
use_cache=True,
|
|
198
|
+
custom_init=None):
|
|
199
|
+
r"""
|
|
200
|
+
Create an ambient space of modular symbols.
|
|
201
|
+
|
|
202
|
+
INPUT:
|
|
203
|
+
|
|
204
|
+
- ``group`` -- a congruence subgroup or a Dirichlet character eps
|
|
205
|
+
- ``weight`` -- integer; the weight, which must be >= 2
|
|
206
|
+
- ``sign`` -- integer; the sign of the involution on modular symbols
|
|
207
|
+
induced by complex conjugation. The default is 0, which means
|
|
208
|
+
"no sign", i.e., take the whole space.
|
|
209
|
+
- ``base_ring`` -- the base ring. Defaults to `\QQ` if no character
|
|
210
|
+
is given, or to the minimal extension of `\QQ` containing the
|
|
211
|
+
values of the character.
|
|
212
|
+
- ``custom_init`` -- a function that is called with ``self`` as input
|
|
213
|
+
before any computations are done using self; this could be used
|
|
214
|
+
to set a custom modular symbols presentation. If ``self`` is
|
|
215
|
+
already in the cache and use_cache=True, then this function is
|
|
216
|
+
not called.
|
|
217
|
+
|
|
218
|
+
EXAMPLES: First we create some spaces with trivial character::
|
|
219
|
+
|
|
220
|
+
sage: ModularSymbols(Gamma0(11),2).dimension()
|
|
221
|
+
3
|
|
222
|
+
sage: ModularSymbols(Gamma0(1),12).dimension()
|
|
223
|
+
3
|
|
224
|
+
|
|
225
|
+
If we give an integer N for the congruence subgroup, it defaults to
|
|
226
|
+
`\Gamma_0(N)`::
|
|
227
|
+
|
|
228
|
+
sage: ModularSymbols(1,12,-1).dimension()
|
|
229
|
+
1
|
|
230
|
+
sage: ModularSymbols(11,4, sign=1)
|
|
231
|
+
Modular Symbols space of dimension 4 for Gamma_0(11) of weight 4
|
|
232
|
+
with sign 1 over Rational Field
|
|
233
|
+
|
|
234
|
+
We create some spaces for `\Gamma_1(N)`.
|
|
235
|
+
|
|
236
|
+
::
|
|
237
|
+
|
|
238
|
+
sage: ModularSymbols(Gamma1(13),2)
|
|
239
|
+
Modular Symbols space of dimension 15 for Gamma_1(13) of weight 2
|
|
240
|
+
with sign 0 over Rational Field
|
|
241
|
+
sage: ModularSymbols(Gamma1(13),2, sign=1).dimension()
|
|
242
|
+
13
|
|
243
|
+
sage: ModularSymbols(Gamma1(13),2, sign=-1).dimension()
|
|
244
|
+
2
|
|
245
|
+
sage: [ModularSymbols(Gamma1(7),k).dimension() for k in [2,3,4,5]]
|
|
246
|
+
[5, 8, 12, 16]
|
|
247
|
+
sage: ModularSymbols(Gamma1(5),11).dimension()
|
|
248
|
+
20
|
|
249
|
+
|
|
250
|
+
We create a space for `\Gamma_H(N)`::
|
|
251
|
+
|
|
252
|
+
sage: G = GammaH(15,[4,13])
|
|
253
|
+
sage: M = ModularSymbols(G,2)
|
|
254
|
+
sage: M.decomposition()
|
|
255
|
+
[Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 5 for Congruence Subgroup Gamma_H(15) with H generated by [4, 7] of weight 2 with sign 0 over Rational Field,
|
|
256
|
+
Modular Symbols subspace of dimension 3 of Modular Symbols space of dimension 5 for Congruence Subgroup Gamma_H(15) with H generated by [4, 7] of weight 2 with sign 0 over Rational Field]
|
|
257
|
+
|
|
258
|
+
We create a space with character::
|
|
259
|
+
|
|
260
|
+
sage: e = (DirichletGroup(13).0)^2
|
|
261
|
+
sage: e.order()
|
|
262
|
+
6
|
|
263
|
+
sage: M = ModularSymbols(e, 2); M
|
|
264
|
+
Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta6],
|
|
265
|
+
sign 0, over Cyclotomic Field of order 6 and degree 2
|
|
266
|
+
sage: f = M.T(2).charpoly('x'); f
|
|
267
|
+
x^4 + (-zeta6 - 1)*x^3 - 8*zeta6*x^2 + (10*zeta6 - 5)*x + 21*zeta6 - 21
|
|
268
|
+
sage: f.factor()
|
|
269
|
+
(x - zeta6 - 2) * (x - 2*zeta6 - 1) * (x + zeta6 + 1)^2
|
|
270
|
+
|
|
271
|
+
We create a space with character over a larger base ring than the values of the character::
|
|
272
|
+
|
|
273
|
+
sage: # needs sage.rings.number_field
|
|
274
|
+
sage: ModularSymbols(e, 2, base_ring=CyclotomicField(24))
|
|
275
|
+
Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta24^4],
|
|
276
|
+
sign 0, over Cyclotomic Field of order 24 and degree 8
|
|
277
|
+
|
|
278
|
+
More examples of spaces with character::
|
|
279
|
+
|
|
280
|
+
sage: e = DirichletGroup(5, RationalField()).gen(); e
|
|
281
|
+
Dirichlet character modulo 5 of conductor 5 mapping 2 |--> -1
|
|
282
|
+
|
|
283
|
+
sage: m = ModularSymbols(e, 2); m
|
|
284
|
+
Modular Symbols space of dimension 2 and level 5, weight 2, character [-1],
|
|
285
|
+
sign 0, over Rational Field
|
|
286
|
+
|
|
287
|
+
::
|
|
288
|
+
|
|
289
|
+
sage: m.T(2).charpoly('x')
|
|
290
|
+
x^2 - 1
|
|
291
|
+
sage: m = ModularSymbols(e, 6); m.dimension()
|
|
292
|
+
6
|
|
293
|
+
sage: m.T(2).charpoly('x')
|
|
294
|
+
x^6 - 873*x^4 - 82632*x^2 - 1860496
|
|
295
|
+
|
|
296
|
+
We create a space of modular symbols with nontrivial character in
|
|
297
|
+
characteristic 2.
|
|
298
|
+
|
|
299
|
+
::
|
|
300
|
+
|
|
301
|
+
sage: # needs sage.rings.finite_rings
|
|
302
|
+
sage: G = DirichletGroup(13, GF(4,'a')); G
|
|
303
|
+
Group of Dirichlet characters modulo 13
|
|
304
|
+
with values in Finite Field in a of size 2^2
|
|
305
|
+
sage: e = G.list()[2]; e
|
|
306
|
+
Dirichlet character modulo 13 of conductor 13 mapping 2 |--> a + 1
|
|
307
|
+
sage: M = ModularSymbols(e,4); M
|
|
308
|
+
Modular Symbols space of dimension 8 and level 13, weight 4,
|
|
309
|
+
character [a + 1], sign 0, over Finite Field in a of size 2^2
|
|
310
|
+
sage: M.basis()
|
|
311
|
+
([X*Y,(1,0)], [X*Y,(1,5)], [X*Y,(1,10)], [X*Y,(1,11)],
|
|
312
|
+
[X^2,(0,1)], [X^2,(1,10)], [X^2,(1,11)], [X^2,(1,12)])
|
|
313
|
+
sage: M.T(2).matrix()
|
|
314
|
+
[ 0 0 0 0 0 0 1 1]
|
|
315
|
+
[ 0 0 0 0 0 0 0 0]
|
|
316
|
+
[ 0 0 0 0 0 a + 1 1 a]
|
|
317
|
+
[ 0 0 0 0 0 1 a + 1 a]
|
|
318
|
+
[ 0 0 0 0 a + 1 0 1 1]
|
|
319
|
+
[ 0 0 0 0 0 a 1 a]
|
|
320
|
+
[ 0 0 0 0 0 0 a + 1 a]
|
|
321
|
+
[ 0 0 0 0 0 0 1 0]
|
|
322
|
+
|
|
323
|
+
We illustrate the custom_init function, which can be used to make
|
|
324
|
+
arbitrary changes to the modular symbols object before its
|
|
325
|
+
presentation is computed::
|
|
326
|
+
|
|
327
|
+
sage: ModularSymbols_clear_cache()
|
|
328
|
+
sage: def custom_init(M):
|
|
329
|
+
....: M.customize='hi'
|
|
330
|
+
sage: M = ModularSymbols(1,12, custom_init=custom_init)
|
|
331
|
+
sage: M.customize
|
|
332
|
+
'hi'
|
|
333
|
+
|
|
334
|
+
We illustrate the relation between custom_init and use_cache::
|
|
335
|
+
|
|
336
|
+
sage: def custom_init(M):
|
|
337
|
+
....: M.customize='hi2'
|
|
338
|
+
sage: M = ModularSymbols(1,12, custom_init=custom_init)
|
|
339
|
+
sage: M.customize
|
|
340
|
+
'hi'
|
|
341
|
+
sage: M = ModularSymbols(1,12, custom_init=custom_init, use_cache=False)
|
|
342
|
+
sage: M.customize
|
|
343
|
+
'hi2'
|
|
344
|
+
|
|
345
|
+
TESTS:
|
|
346
|
+
|
|
347
|
+
We test use_cache::
|
|
348
|
+
|
|
349
|
+
sage: ModularSymbols_clear_cache()
|
|
350
|
+
sage: M = ModularSymbols(11,use_cache=False)
|
|
351
|
+
sage: sage.modular.modsym.modsym._cache
|
|
352
|
+
{}
|
|
353
|
+
sage: M = ModularSymbols(11,use_cache=True)
|
|
354
|
+
sage: sage.modular.modsym.modsym._cache
|
|
355
|
+
{(Congruence Subgroup Gamma0(11), 2, 0, Rational Field): <weakref at ...; to '...ModularSymbolsAmbient_wt2_g0_with_category' at ...>}
|
|
356
|
+
sage: M is ModularSymbols(11,use_cache=True)
|
|
357
|
+
True
|
|
358
|
+
sage: M is ModularSymbols(11,use_cache=False)
|
|
359
|
+
False
|
|
360
|
+
"""
|
|
361
|
+
from . import ambient
|
|
362
|
+
key = canonical_parameters(group, weight, sign, base_ring)
|
|
363
|
+
|
|
364
|
+
if use_cache and key in _cache:
|
|
365
|
+
M = _cache[key]()
|
|
366
|
+
if M is not None:
|
|
367
|
+
return M
|
|
368
|
+
|
|
369
|
+
group, weight, sign, base_ring = key
|
|
370
|
+
|
|
371
|
+
M = None
|
|
372
|
+
if isinstance(group, arithgroup.Gamma0_class):
|
|
373
|
+
if weight == 2:
|
|
374
|
+
M = ambient.ModularSymbolsAmbient_wt2_g0(
|
|
375
|
+
group.level(), sign, base_ring, custom_init=custom_init)
|
|
376
|
+
else:
|
|
377
|
+
M = ambient.ModularSymbolsAmbient_wtk_g0(
|
|
378
|
+
group.level(), weight, sign, base_ring, custom_init=custom_init)
|
|
379
|
+
|
|
380
|
+
elif isinstance(group, arithgroup.Gamma1_class):
|
|
381
|
+
|
|
382
|
+
M = ambient.ModularSymbolsAmbient_wtk_g1(group.level(),
|
|
383
|
+
weight, sign, base_ring, custom_init=custom_init)
|
|
384
|
+
|
|
385
|
+
elif isinstance(group, arithgroup.GammaH_class):
|
|
386
|
+
|
|
387
|
+
M = ambient.ModularSymbolsAmbient_wtk_gamma_h(group,
|
|
388
|
+
weight, sign, base_ring, custom_init=custom_init)
|
|
389
|
+
|
|
390
|
+
elif isinstance(group, tuple):
|
|
391
|
+
eps = group[0]
|
|
392
|
+
M = ambient.ModularSymbolsAmbient_wtk_eps(eps,
|
|
393
|
+
weight, sign, base_ring, custom_init=custom_init)
|
|
394
|
+
|
|
395
|
+
if M is None:
|
|
396
|
+
raise NotImplementedError("computation of requested space of modular symbols not defined or implemented")
|
|
397
|
+
|
|
398
|
+
if use_cache:
|
|
399
|
+
_cache[key] = weakref.ref(M)
|
|
400
|
+
return M
|