passagemath-schemes 10.6.47__cp312-cp312-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.
- 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.47.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.47.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.47.dist-info/RECORD +311 -0
- passagemath_schemes-10.6.47.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.47.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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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_nf.py +1241 -0
- sage/modular/modsym/relation_matrix.py +591 -0
- sage/modular/modsym/relation_matrix_pyx.cpython-312-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-312-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-312-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,119 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.libs.flint
|
|
3
|
+
"""
|
|
4
|
+
Degeneracy maps
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# ****************************************************************************
|
|
8
|
+
# Sage: Open Source Mathematical Software
|
|
9
|
+
#
|
|
10
|
+
# Copyright (C) 2005 William Stein <wstein@gmail.com>
|
|
11
|
+
#
|
|
12
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
13
|
+
#
|
|
14
|
+
# This code is distributed in the hope that it will be useful,
|
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
17
|
+
# General Public License for more details.
|
|
18
|
+
#
|
|
19
|
+
# The full text of the GPL is available at:
|
|
20
|
+
#
|
|
21
|
+
# https://www.gnu.org/licenses/
|
|
22
|
+
# ****************************************************************************
|
|
23
|
+
from . import morphism
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class DegeneracyMap(morphism.HeckeModuleMorphism_matrix):
|
|
27
|
+
"""
|
|
28
|
+
A degeneracy map between Hecke modules of different levels.
|
|
29
|
+
|
|
30
|
+
EXAMPLES:
|
|
31
|
+
|
|
32
|
+
We construct a number of degeneracy maps::
|
|
33
|
+
|
|
34
|
+
sage: M = ModularSymbols(33)
|
|
35
|
+
sage: d = M.degeneracy_map(11)
|
|
36
|
+
sage: d
|
|
37
|
+
Hecke module morphism degeneracy map corresponding to f(q) |--> f(q)
|
|
38
|
+
defined by the matrix
|
|
39
|
+
[ 1 0 0]
|
|
40
|
+
[ 0 0 1]
|
|
41
|
+
[ 0 0 -1]
|
|
42
|
+
[ 0 1 -1]
|
|
43
|
+
[ 0 0 1]
|
|
44
|
+
[ 0 -1 1]
|
|
45
|
+
[-1 0 0]
|
|
46
|
+
[-1 0 0]
|
|
47
|
+
[-1 0 0]
|
|
48
|
+
Domain: Modular Symbols space of dimension 9 for Gamma_0(33) of weight ...
|
|
49
|
+
Codomain: Modular Symbols space of dimension 3 for Gamma_0(11) of weight ...
|
|
50
|
+
sage: d.t()
|
|
51
|
+
1
|
|
52
|
+
sage: d = M.degeneracy_map(11,3)
|
|
53
|
+
sage: d.t()
|
|
54
|
+
3
|
|
55
|
+
|
|
56
|
+
The parameter d must be a divisor of the quotient of the two levels::
|
|
57
|
+
|
|
58
|
+
sage: d = M.degeneracy_map(11,2)
|
|
59
|
+
Traceback (most recent call last):
|
|
60
|
+
...
|
|
61
|
+
ValueError: the level of self (=33) must be a divisor or multiple
|
|
62
|
+
of level (=11) and t (=2) must be a divisor of the quotient
|
|
63
|
+
|
|
64
|
+
Degeneracy maps can also go from lower level to higher level::
|
|
65
|
+
|
|
66
|
+
sage: M.degeneracy_map(66,2)
|
|
67
|
+
Hecke module morphism degeneracy map corresponding to f(q) |--> f(q^2)
|
|
68
|
+
defined by the matrix
|
|
69
|
+
[ 2 0 0 0 0 0 1 0 0 0 1 -1 0 0 0 -1 1 0 0 0 0 0 0 0 -1]
|
|
70
|
+
[ 0 0 1 -1 0 -1 1 0 -1 2 0 0 0 -1 0 0 -1 1 2 -2 0 0 0 -1 1]
|
|
71
|
+
[ 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 -1 1 0 0 -1 1 0 0 0]
|
|
72
|
+
[ 0 0 0 0 0 0 0 0 0 2 -1 0 0 1 0 0 -1 1 0 0 1 0 -1 -1 1]
|
|
73
|
+
[ 0 -1 0 0 1 0 0 0 0 0 0 1 0 0 1 1 -1 0 0 -1 0 0 0 0 0]
|
|
74
|
+
[ 0 0 0 0 0 0 0 1 -1 0 0 2 -1 0 0 1 0 0 0 -1 0 -1 1 -1 1]
|
|
75
|
+
[ 0 0 0 0 1 -1 0 1 -1 0 0 0 0 0 -1 2 0 0 0 0 1 0 1 0 0]
|
|
76
|
+
[ 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0]
|
|
77
|
+
[ 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 1 1 0 0 0]
|
|
78
|
+
Domain: Modular Symbols space of dimension 9 for Gamma_0(33) of weight ...
|
|
79
|
+
Codomain: Modular Symbols space of dimension 25 for Gamma_0(66) of weight ...
|
|
80
|
+
"""
|
|
81
|
+
def __init__(self, matrix, domain, codomain, t):
|
|
82
|
+
r"""
|
|
83
|
+
Initialise a degeneracy map.
|
|
84
|
+
|
|
85
|
+
EXAMPLES::
|
|
86
|
+
|
|
87
|
+
sage: D = ModularSymbols(Gamma0(100)).degeneracy_map(2,5); D
|
|
88
|
+
Hecke module morphism degeneracy map corresponding to f(q) |--> f(q^5) defined by the matrix
|
|
89
|
+
31 x 1 dense matrix over Rational Field
|
|
90
|
+
Domain: Modular Symbols space of dimension 31 for Gamma_0(100) of weight ...
|
|
91
|
+
Codomain: Modular Symbols space of dimension 1 for Gamma_0(2) of weight ...
|
|
92
|
+
sage: D == loads(dumps(D))
|
|
93
|
+
True
|
|
94
|
+
"""
|
|
95
|
+
self.__t = t
|
|
96
|
+
H = domain.Hom(codomain)
|
|
97
|
+
if t == 1:
|
|
98
|
+
pow = ""
|
|
99
|
+
else:
|
|
100
|
+
pow = "^%s" % t
|
|
101
|
+
name = "degeneracy map corresponding to f(q) |--> f(q%s)" % (pow)
|
|
102
|
+
morphism.HeckeModuleMorphism_matrix.__init__(self, H, matrix, name)
|
|
103
|
+
|
|
104
|
+
def t(self):
|
|
105
|
+
"""
|
|
106
|
+
Return the divisor of the quotient of the two levels
|
|
107
|
+
associated to the degeneracy map.
|
|
108
|
+
|
|
109
|
+
EXAMPLES::
|
|
110
|
+
|
|
111
|
+
sage: M = ModularSymbols(33)
|
|
112
|
+
sage: d = M.degeneracy_map(11,3)
|
|
113
|
+
sage: d.t()
|
|
114
|
+
3
|
|
115
|
+
sage: d = M.degeneracy_map(11,1)
|
|
116
|
+
sage: d.t()
|
|
117
|
+
1
|
|
118
|
+
"""
|
|
119
|
+
return self.__t
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.libs.flint sage.libs.pari
|
|
3
|
+
"""
|
|
4
|
+
Elements of Hecke modules
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- William Stein
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# ****************************************************************************
|
|
12
|
+
# Sage: Open Source Mathematical Software
|
|
13
|
+
#
|
|
14
|
+
# Copyright (C) 2005 William Stein <wstein@gmail.com>
|
|
15
|
+
#
|
|
16
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
17
|
+
#
|
|
18
|
+
# This code is distributed in the hope that it will be useful,
|
|
19
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
# General Public License for more details.
|
|
22
|
+
#
|
|
23
|
+
# The full text of the GPL is available at:
|
|
24
|
+
#
|
|
25
|
+
# https://www.gnu.org/licenses/
|
|
26
|
+
# ****************************************************************************
|
|
27
|
+
|
|
28
|
+
try:
|
|
29
|
+
from typing import Self # type: ignore (Python >= 3.11)
|
|
30
|
+
except ImportError:
|
|
31
|
+
from typing_extensions import Self # type: ignore (Python 3.10)
|
|
32
|
+
|
|
33
|
+
from sage.structure.element import ModuleElement
|
|
34
|
+
from sage.structure.richcmp import op_NE, richcmp
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def is_HeckeModuleElement(x):
|
|
38
|
+
"""
|
|
39
|
+
Return ``True`` if x is a Hecke module element, i.e., of type HeckeModuleElement.
|
|
40
|
+
|
|
41
|
+
EXAMPLES::
|
|
42
|
+
|
|
43
|
+
sage: sage.modular.hecke.all.is_HeckeModuleElement(0)
|
|
44
|
+
doctest:warning...
|
|
45
|
+
DeprecationWarning: the function is_HeckeModuleElement is deprecated;
|
|
46
|
+
use 'isinstance(..., HeckeModuleElement)' instead
|
|
47
|
+
See https://github.com/sagemath/sage/issues/37895 for details.
|
|
48
|
+
False
|
|
49
|
+
sage: sage.modular.hecke.all.is_HeckeModuleElement(BrandtModule(37)([1,2,3]))
|
|
50
|
+
True
|
|
51
|
+
"""
|
|
52
|
+
from sage.misc.superseded import deprecation
|
|
53
|
+
deprecation(37895, "the function is_HeckeModuleElement is deprecated; use 'isinstance(..., HeckeModuleElement)' instead")
|
|
54
|
+
return isinstance(x, HeckeModuleElement)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class HeckeModuleElement(ModuleElement):
|
|
58
|
+
"""
|
|
59
|
+
Element of a Hecke module.
|
|
60
|
+
"""
|
|
61
|
+
def __init__(self, parent, x=None):
|
|
62
|
+
"""
|
|
63
|
+
INPUT:
|
|
64
|
+
|
|
65
|
+
- ``parent`` -- a Hecke module
|
|
66
|
+
|
|
67
|
+
- ``x`` -- element of the free module associated to parent
|
|
68
|
+
|
|
69
|
+
EXAMPLES::
|
|
70
|
+
|
|
71
|
+
sage: v = sage.modular.hecke.all.HeckeModuleElement(BrandtModule(37), vector(QQ,[1,2,3])); v
|
|
72
|
+
(1, 2, 3)
|
|
73
|
+
sage: type(v)
|
|
74
|
+
<class 'sage.modular.hecke.element.HeckeModuleElement'>
|
|
75
|
+
|
|
76
|
+
TESTS::
|
|
77
|
+
|
|
78
|
+
sage: v = ModularSymbols(37).0
|
|
79
|
+
sage: loads(dumps(v))
|
|
80
|
+
(1,0)
|
|
81
|
+
sage: loads(dumps(v)) == v
|
|
82
|
+
True
|
|
83
|
+
"""
|
|
84
|
+
ModuleElement.__init__(self, parent)
|
|
85
|
+
if x is not None:
|
|
86
|
+
self.__element = x
|
|
87
|
+
|
|
88
|
+
def _repr_(self):
|
|
89
|
+
"""
|
|
90
|
+
Return string representation of this Hecke module element.
|
|
91
|
+
The default representation is just the representation of the
|
|
92
|
+
underlying vector.
|
|
93
|
+
|
|
94
|
+
EXAMPLES::
|
|
95
|
+
|
|
96
|
+
sage: BrandtModule(37)([0,1,-1])._repr_()
|
|
97
|
+
'(0, 1, -1)'
|
|
98
|
+
"""
|
|
99
|
+
return self.element()._repr_()
|
|
100
|
+
|
|
101
|
+
def _compute_element(self):
|
|
102
|
+
"""
|
|
103
|
+
Use internally to compute vector underlying this element.
|
|
104
|
+
|
|
105
|
+
EXAMPLES::
|
|
106
|
+
|
|
107
|
+
sage: f = CuspForms(11, 2).gen(0)
|
|
108
|
+
sage: f._compute_element()
|
|
109
|
+
Traceback (most recent call last):
|
|
110
|
+
...
|
|
111
|
+
NotImplementedError: _compute_element *must* be defined...
|
|
112
|
+
"""
|
|
113
|
+
# You have to define this in the derived class if you ever set
|
|
114
|
+
# x=None in __init__ for your element class.
|
|
115
|
+
# The main reason for this is it allows for lazy constructors who
|
|
116
|
+
# compute the representation of an element (e.g., a q-expansion) in
|
|
117
|
+
# terms of the basis only when needed.
|
|
118
|
+
|
|
119
|
+
# Not in use at present.
|
|
120
|
+
raise NotImplementedError("_compute_element *must* be defined in the derived class if element is set to None in constructor")
|
|
121
|
+
|
|
122
|
+
def element(self):
|
|
123
|
+
"""
|
|
124
|
+
Return underlying vector space element that defines this Hecke module element.
|
|
125
|
+
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: z = BrandtModule(37)([0,1,-1]).element(); z
|
|
129
|
+
(0, 1, -1)
|
|
130
|
+
sage: type(z)
|
|
131
|
+
<class 'sage.modules.vector_rational_dense.Vector_rational_dense'>
|
|
132
|
+
"""
|
|
133
|
+
try:
|
|
134
|
+
return self.__element
|
|
135
|
+
except AttributeError:
|
|
136
|
+
self.__element = self._compute_element()
|
|
137
|
+
return self.__element
|
|
138
|
+
|
|
139
|
+
def _vector_(self, R=None):
|
|
140
|
+
"""
|
|
141
|
+
This makes it so vector(self) and vector(self, R) both work.
|
|
142
|
+
|
|
143
|
+
EXAMPLES::
|
|
144
|
+
|
|
145
|
+
sage: v = BrandtModule(37)([0,1,-1]); v
|
|
146
|
+
(0, 1, -1)
|
|
147
|
+
sage: type(v._vector_())
|
|
148
|
+
<class 'sage.modules.vector_rational_dense.Vector_rational_dense'>
|
|
149
|
+
sage: type(vector(v))
|
|
150
|
+
<class 'sage.modules.vector_rational_dense.Vector_rational_dense'>
|
|
151
|
+
sage: type(vector(v, GF(2)))
|
|
152
|
+
<class 'sage.modules.vector_mod2_dense.Vector_mod2_dense'>
|
|
153
|
+
"""
|
|
154
|
+
if R is None:
|
|
155
|
+
return self.__element
|
|
156
|
+
return self.__element.change_ring(R)
|
|
157
|
+
|
|
158
|
+
def _richcmp_(self, other, op):
|
|
159
|
+
"""
|
|
160
|
+
Rich comparison of ``self`` and ``other``.
|
|
161
|
+
|
|
162
|
+
EXAMPLES::
|
|
163
|
+
|
|
164
|
+
sage: M = ModularSymbols(11, 2)
|
|
165
|
+
sage: M.0 == M.1 # indirect doctest
|
|
166
|
+
False
|
|
167
|
+
sage: M.0 == (M.1 + M.0 - M.1)
|
|
168
|
+
True
|
|
169
|
+
sage: M.0 == ModularSymbols(13, 2).0
|
|
170
|
+
False
|
|
171
|
+
|
|
172
|
+
sage: x = BrandtModule(37)([0,1,-1])
|
|
173
|
+
sage: x != x
|
|
174
|
+
False
|
|
175
|
+
"""
|
|
176
|
+
if not isinstance(other, HeckeModuleElement):
|
|
177
|
+
return op == op_NE
|
|
178
|
+
return richcmp(self.element(), other.element(), op)
|
|
179
|
+
|
|
180
|
+
def ambient_module(self):
|
|
181
|
+
"""
|
|
182
|
+
Return the ambient Hecke module that contains this element.
|
|
183
|
+
|
|
184
|
+
EXAMPLES::
|
|
185
|
+
|
|
186
|
+
sage: BrandtModule(37)([0,1,-1]).ambient_module()
|
|
187
|
+
Brandt module of dimension 3 of level 37 of weight 2 over Rational Field
|
|
188
|
+
"""
|
|
189
|
+
return self.parent().ambient_module()
|
|
190
|
+
|
|
191
|
+
def _lmul_(self, x):
|
|
192
|
+
"""
|
|
193
|
+
EXAMPLES::
|
|
194
|
+
|
|
195
|
+
sage: BrandtModule(37)([0,1,-1])._lmul_(3)
|
|
196
|
+
(0, 3, -3)
|
|
197
|
+
"""
|
|
198
|
+
return self.parent()(self.element() * x)
|
|
199
|
+
|
|
200
|
+
def _rmul_(self, x):
|
|
201
|
+
"""
|
|
202
|
+
EXAMPLES::
|
|
203
|
+
|
|
204
|
+
sage: BrandtModule(37)([0,1,-1])._rmul_(3)
|
|
205
|
+
(0, 3, -3)
|
|
206
|
+
"""
|
|
207
|
+
return self.parent()(x * self.element())
|
|
208
|
+
|
|
209
|
+
def _neg_(self):
|
|
210
|
+
"""
|
|
211
|
+
EXAMPLES::
|
|
212
|
+
|
|
213
|
+
sage: BrandtModule(37)([0,1,-1])._neg_()
|
|
214
|
+
(0, -1, 1)
|
|
215
|
+
"""
|
|
216
|
+
return self.parent()(-self.element())
|
|
217
|
+
|
|
218
|
+
def _pos_(self) -> Self:
|
|
219
|
+
"""
|
|
220
|
+
EXAMPLES::
|
|
221
|
+
|
|
222
|
+
sage: BrandtModule(37)([0,1,-1])._pos_()
|
|
223
|
+
(0, 1, -1)
|
|
224
|
+
"""
|
|
225
|
+
return self
|
|
226
|
+
|
|
227
|
+
def _sub_(self, right):
|
|
228
|
+
"""
|
|
229
|
+
EXAMPLES::
|
|
230
|
+
|
|
231
|
+
sage: BrandtModule(37)([0,1,-1])._sub_(BrandtModule(37)([0,1,-5]))
|
|
232
|
+
(0, 0, 4)
|
|
233
|
+
"""
|
|
234
|
+
return self.parent()(self.element() - right.element())
|
|
235
|
+
|
|
236
|
+
def is_cuspidal(self) -> bool:
|
|
237
|
+
r"""
|
|
238
|
+
Return ``True`` if this element is cuspidal.
|
|
239
|
+
|
|
240
|
+
EXAMPLES::
|
|
241
|
+
|
|
242
|
+
sage: M = ModularForms(2, 22); M.0.is_cuspidal()
|
|
243
|
+
True
|
|
244
|
+
sage: (M.0 + M.4).is_cuspidal()
|
|
245
|
+
False
|
|
246
|
+
sage: EllipticCurve('37a1').newform().is_cuspidal() # needs database_cremona_mini_ellcurve
|
|
247
|
+
True
|
|
248
|
+
|
|
249
|
+
It works for modular symbols too::
|
|
250
|
+
|
|
251
|
+
sage: M = ModularSymbols(19,2)
|
|
252
|
+
sage: M.0.is_cuspidal()
|
|
253
|
+
False
|
|
254
|
+
sage: M.1.is_cuspidal()
|
|
255
|
+
True
|
|
256
|
+
|
|
257
|
+
TESTS:
|
|
258
|
+
|
|
259
|
+
Verify that :issue:`21497` is fixed::
|
|
260
|
+
|
|
261
|
+
sage: M = ModularSymbols(Gamma0(3),weight=22,sign=1)
|
|
262
|
+
sage: N = next(S for S in M.decomposition(anemic=False) if S.hecke_matrix(3).trace()==-128844)
|
|
263
|
+
sage: [g.is_cuspidal() for g in N.gens()]
|
|
264
|
+
[True, True]
|
|
265
|
+
"""
|
|
266
|
+
return self in self.parent().ambient().cuspidal_submodule()
|
|
267
|
+
|
|
268
|
+
def is_eisenstein(self) -> bool:
|
|
269
|
+
r"""
|
|
270
|
+
Return ``True`` if this element is Eisenstein.
|
|
271
|
+
|
|
272
|
+
This makes sense for both modular forms and modular symbols.
|
|
273
|
+
|
|
274
|
+
EXAMPLES::
|
|
275
|
+
|
|
276
|
+
sage: CuspForms(2,8).0.is_eisenstein()
|
|
277
|
+
False
|
|
278
|
+
sage: M = ModularForms(2,8);(M.0 + M.1).is_eisenstein()
|
|
279
|
+
False
|
|
280
|
+
sage: M.1.is_eisenstein()
|
|
281
|
+
True
|
|
282
|
+
sage: ModularSymbols(19,4).0.is_eisenstein()
|
|
283
|
+
False
|
|
284
|
+
sage: EllipticCurve('37a1').newform().element().is_eisenstein() # needs database_cremona_mini_ellcurve
|
|
285
|
+
False
|
|
286
|
+
"""
|
|
287
|
+
return self in self.parent().ambient().eisenstein_submodule()
|
|
288
|
+
|
|
289
|
+
def is_new(self, p=None) -> bool:
|
|
290
|
+
r"""
|
|
291
|
+
Return ``True`` if this element is `p`-new.
|
|
292
|
+
|
|
293
|
+
If `p` is ``None``, return ``True`` if the element is new.
|
|
294
|
+
|
|
295
|
+
EXAMPLES::
|
|
296
|
+
|
|
297
|
+
sage: CuspForms(22, 2).0.is_new(2)
|
|
298
|
+
False
|
|
299
|
+
sage: CuspForms(22, 2).0.is_new(11)
|
|
300
|
+
True
|
|
301
|
+
sage: CuspForms(22, 2).0.is_new()
|
|
302
|
+
False
|
|
303
|
+
"""
|
|
304
|
+
return self in self.parent().new_submodule(p)
|
|
305
|
+
|
|
306
|
+
def is_old(self, p=None) -> bool:
|
|
307
|
+
r"""
|
|
308
|
+
Return ``True`` if this element is `p`-old.
|
|
309
|
+
|
|
310
|
+
If `p` is ``None``, return ``True`` if the element is old.
|
|
311
|
+
|
|
312
|
+
EXAMPLES::
|
|
313
|
+
|
|
314
|
+
sage: CuspForms(22, 2).0.is_old(11)
|
|
315
|
+
False
|
|
316
|
+
sage: CuspForms(22, 2).0.is_old(2)
|
|
317
|
+
True
|
|
318
|
+
sage: CuspForms(22, 2).0.is_old()
|
|
319
|
+
True
|
|
320
|
+
sage: EisensteinForms(144, 2).1.is_old() # long time (3s on sage.math, 2011)
|
|
321
|
+
False
|
|
322
|
+
sage: EisensteinForms(144, 2).1.is_old(2) # not implemented
|
|
323
|
+
False
|
|
324
|
+
"""
|
|
325
|
+
return self in self.parent().old_submodule(p)
|