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,423 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs
|
|
3
|
+
r"""
|
|
4
|
+
Subspaces of modular forms for Hecke triangle groups
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Jonas Jermann (2013): initial version
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# ****************************************************************************
|
|
12
|
+
# Copyright (C) 2013-2014 Jonas Jermann <jjermann2@gmail.com>
|
|
13
|
+
#
|
|
14
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
15
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
16
|
+
# the License, or (at your option) any later version.
|
|
17
|
+
# https://www.gnu.org/licenses/
|
|
18
|
+
# ****************************************************************************
|
|
19
|
+
|
|
20
|
+
from sage.modules.module import Module
|
|
21
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
22
|
+
from sage.misc.cachefunc import cached_method
|
|
23
|
+
from sage.matrix.constructor import matrix
|
|
24
|
+
|
|
25
|
+
from .abstract_space import FormsSpace_abstract
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def canonical_parameters(ambient_space, basis, check=True):
|
|
29
|
+
r"""
|
|
30
|
+
Return a canonical version of the parameters.
|
|
31
|
+
In particular the list/tuple ``basis`` is replaced by a
|
|
32
|
+
tuple of linearly independent elements in the ambient space.
|
|
33
|
+
|
|
34
|
+
If ``check=False`` (default: ``True``) then ``basis``
|
|
35
|
+
is assumed to already be a basis.
|
|
36
|
+
|
|
37
|
+
EXAMPLES::
|
|
38
|
+
|
|
39
|
+
sage: from sage.modular.modform_hecketriangle.subspace import canonical_parameters
|
|
40
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
41
|
+
sage: MF = ModularForms(n=6, k=12, ep=1)
|
|
42
|
+
sage: canonical_parameters(MF, [MF.Delta().as_ring_element(), MF.gen(0), 2*MF.gen(0)])
|
|
43
|
+
(ModularForms(n=6, k=12, ep=1) over Integer Ring,
|
|
44
|
+
(q + 30*q^2 + 333*q^3 + 1444*q^4 + O(q^5),
|
|
45
|
+
1 + 26208*q^3 + 530712*q^4 + O(q^5)))
|
|
46
|
+
"""
|
|
47
|
+
if check:
|
|
48
|
+
coord_matrix = matrix([ambient_space(v).ambient_coordinate_vector() for v in basis])
|
|
49
|
+
pivots = coord_matrix.transpose().pivots()
|
|
50
|
+
new_basis = [ambient_space(basis[l]) for l in pivots]
|
|
51
|
+
basis = tuple(new_basis)
|
|
52
|
+
else:
|
|
53
|
+
basis = [ambient_space(v) for v in basis]
|
|
54
|
+
basis = tuple(basis)
|
|
55
|
+
|
|
56
|
+
return (ambient_space, basis)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def ModularFormsSubSpace(*args, **kwargs):
|
|
60
|
+
r"""
|
|
61
|
+
Create a modular forms subspace generated by the supplied arguments if possible.
|
|
62
|
+
Instead of a list of generators also multiple input arguments can be used.
|
|
63
|
+
If ``reduce=True`` then the corresponding ambient space is chosen as small as possible.
|
|
64
|
+
If no subspace is available then the ambient space is returned.
|
|
65
|
+
|
|
66
|
+
EXAMPLES::
|
|
67
|
+
|
|
68
|
+
sage: from sage.modular.modform_hecketriangle.subspace import ModularFormsSubSpace
|
|
69
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
70
|
+
sage: MF = ModularForms()
|
|
71
|
+
sage: subspace = ModularFormsSubSpace(MF.E4()^3, MF.E6()^2+MF.Delta(), MF.Delta())
|
|
72
|
+
sage: subspace
|
|
73
|
+
Subspace of dimension 2 of ModularForms(n=3, k=12, ep=1) over Integer Ring
|
|
74
|
+
sage: subspace.ambient_space()
|
|
75
|
+
ModularForms(n=3, k=12, ep=1) over Integer Ring
|
|
76
|
+
sage: subspace.gens()
|
|
77
|
+
(1 + 720*q + 179280*q^2 + 16954560*q^3 + 396974160*q^4 + O(q^5),
|
|
78
|
+
1 - 1007*q + 220728*q^2 + 16519356*q^3 + 399516304*q^4 + O(q^5))
|
|
79
|
+
sage: ModularFormsSubSpace(MF.E4()^3-MF.E6()^2, reduce=True).ambient_space()
|
|
80
|
+
CuspForms(n=3, k=12, ep=1) over Integer Ring
|
|
81
|
+
sage: ModularFormsSubSpace(MF.E4()^3-MF.E6()^2, MF.J_inv()*MF.E4()^3, reduce=True)
|
|
82
|
+
WeakModularForms(n=3, k=12, ep=1) over Integer Ring
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
generators = []
|
|
86
|
+
for arg in args:
|
|
87
|
+
if isinstance(arg, (list, tuple)):
|
|
88
|
+
generators += arg
|
|
89
|
+
else:
|
|
90
|
+
generators.append(arg)
|
|
91
|
+
if ("reduce" in kwargs) and kwargs["reduce"]:
|
|
92
|
+
generators = [gen.full_reduce() for gen in generators]
|
|
93
|
+
|
|
94
|
+
if len(generators) == 0:
|
|
95
|
+
raise ValueError("No generators specified")
|
|
96
|
+
|
|
97
|
+
el = False
|
|
98
|
+
for gen in generators:
|
|
99
|
+
if el:
|
|
100
|
+
el += gen
|
|
101
|
+
else:
|
|
102
|
+
el = gen
|
|
103
|
+
|
|
104
|
+
ambient_space = el.parent()
|
|
105
|
+
|
|
106
|
+
try:
|
|
107
|
+
# This works if and only if ambient_space supports subspaces
|
|
108
|
+
ambient_space.coordinate_vector(el)
|
|
109
|
+
|
|
110
|
+
generators = [ambient_space(gen) for gen in generators]
|
|
111
|
+
return SubSpaceForms(ambient_space, generators)
|
|
112
|
+
except (NotImplementedError, AttributeError):
|
|
113
|
+
return ambient_space
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class SubSpaceForms(FormsSpace_abstract, Module, UniqueRepresentation):
|
|
117
|
+
r"""
|
|
118
|
+
Submodule of (Hecke) forms in the given ambient space for the given basis.
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
@staticmethod
|
|
122
|
+
def __classcall__(cls, ambient_space, basis=(), check=True):
|
|
123
|
+
r"""
|
|
124
|
+
Return a (cached) instance with canonical parameters.
|
|
125
|
+
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: from sage.modular.modform_hecketriangle.subspace import (canonical_parameters, SubSpaceForms)
|
|
129
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
130
|
+
sage: MF = ModularForms(n=6, k=12, ep=1)
|
|
131
|
+
sage: (ambient_space, basis) = canonical_parameters(MF, [MF.Delta().as_ring_element(), MF.gen(0)])
|
|
132
|
+
sage: SubSpaceForms(MF, [MF.Delta().as_ring_element(), MF.gen(0)]) == SubSpaceForms(ambient_space, basis)
|
|
133
|
+
True
|
|
134
|
+
"""
|
|
135
|
+
(ambient_space, basis) = canonical_parameters(ambient_space, basis, check)
|
|
136
|
+
|
|
137
|
+
# we return check=True to ensure only one cached instance
|
|
138
|
+
return super().__classcall__(cls, ambient_space=ambient_space, basis=basis, check=True)
|
|
139
|
+
|
|
140
|
+
def __init__(self, ambient_space, basis, check):
|
|
141
|
+
r"""
|
|
142
|
+
Return the Submodule of (Hecke) forms in ``ambient_space`` for the
|
|
143
|
+
given ``basis``.
|
|
144
|
+
|
|
145
|
+
INPUT:
|
|
146
|
+
|
|
147
|
+
- ``ambient_space`` -- an ambient forms space
|
|
148
|
+
|
|
149
|
+
- ``basis`` -- a tuple of (not necessarily linearly independent)
|
|
150
|
+
elements of ``ambient_space``
|
|
151
|
+
|
|
152
|
+
- ``check`` -- if ``True`` (default) then a maximal linearly
|
|
153
|
+
independent subset of ``basis`` is chosen. Otherwise it is assumed
|
|
154
|
+
that ``basis`` is linearly independent.
|
|
155
|
+
|
|
156
|
+
OUTPUT: the corresponding submodule
|
|
157
|
+
|
|
158
|
+
EXAMPLES::
|
|
159
|
+
|
|
160
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms, QuasiCuspForms
|
|
161
|
+
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
162
|
+
sage: MF
|
|
163
|
+
ModularForms(n=6, k=20, ep=1) over Integer Ring
|
|
164
|
+
sage: MF.dimension()
|
|
165
|
+
4
|
|
166
|
+
sage: subspace = MF.subspace([MF.Delta()*MF.E4()^2, MF.gen(0), 2*MF.gen(0)])
|
|
167
|
+
sage: subspace
|
|
168
|
+
Subspace of dimension 2 of ModularForms(n=6, k=20, ep=1) over Integer Ring
|
|
169
|
+
sage: subspace.analytic_type()
|
|
170
|
+
modular
|
|
171
|
+
sage: subspace.category()
|
|
172
|
+
Category of modules over Integer Ring
|
|
173
|
+
sage: subspace in subspace.category()
|
|
174
|
+
True
|
|
175
|
+
sage: subspace.module()
|
|
176
|
+
Vector space of degree 4 and dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring
|
|
177
|
+
Basis matrix:
|
|
178
|
+
[ 1 0 0 0]
|
|
179
|
+
[ 0 1 13/(18*d) 103/(432*d^2)]
|
|
180
|
+
sage: subspace.ambient_module()
|
|
181
|
+
Vector space of dimension 4 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring
|
|
182
|
+
sage: subspace.ambient_module() == MF.module()
|
|
183
|
+
True
|
|
184
|
+
sage: subspace.ambient_space() == MF
|
|
185
|
+
True
|
|
186
|
+
sage: subspace.basis()
|
|
187
|
+
[q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5), 1 + 360360*q^4 + O(q^5)]
|
|
188
|
+
sage: subspace.basis()[0].parent() == MF
|
|
189
|
+
True
|
|
190
|
+
sage: subspace.gens()
|
|
191
|
+
(q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5),
|
|
192
|
+
1 + 360360*q^4 + O(q^5))
|
|
193
|
+
sage: subspace.gens()[0].parent() == subspace
|
|
194
|
+
True
|
|
195
|
+
sage: subspace.is_ambient()
|
|
196
|
+
False
|
|
197
|
+
|
|
198
|
+
sage: MF = QuasiCuspForms(n=infinity, k=12, ep=1)
|
|
199
|
+
sage: MF.dimension()
|
|
200
|
+
4
|
|
201
|
+
sage: subspace = MF.subspace([MF.Delta(), MF.E4()*MF.f_inf()*MF.E2()*MF.f_i(), MF.E4()*MF.f_inf()*MF.E2()^2, MF.E4()*MF.f_inf()*(MF.E4()-MF.E2()^2)])
|
|
202
|
+
sage: subspace.default_prec(3)
|
|
203
|
+
sage: subspace
|
|
204
|
+
Subspace of dimension 3 of QuasiCuspForms(n=+Infinity, k=12, ep=1) over Integer Ring
|
|
205
|
+
sage: subspace.gens()
|
|
206
|
+
(q + 24*q^2 + O(q^3), q - 24*q^2 + O(q^3), q - 8*q^2 + O(q^3))
|
|
207
|
+
"""
|
|
208
|
+
FormsSpace_abstract.__init__(self, group=ambient_space.group(), base_ring=ambient_space.base_ring(), k=ambient_space.weight(), ep=ambient_space.ep(), n=ambient_space.hecke_n())
|
|
209
|
+
Module.__init__(self, base=ambient_space.base_ring())
|
|
210
|
+
|
|
211
|
+
self._ambient_space = ambient_space
|
|
212
|
+
self._basis = list(basis)
|
|
213
|
+
# self(v) instead would somehow mess up the coercion model
|
|
214
|
+
self._gens = tuple(self._element_constructor_(v) for v in basis)
|
|
215
|
+
self._module = ambient_space._module.submodule([ambient_space.coordinate_vector(v) for v in basis])
|
|
216
|
+
# TODO: get the analytic type from the basis
|
|
217
|
+
# self._analytic_type=self.AT(["quasi", "mero"])
|
|
218
|
+
self._analytic_type = ambient_space._analytic_type
|
|
219
|
+
|
|
220
|
+
def _repr_(self):
|
|
221
|
+
r"""
|
|
222
|
+
Return the string representation of ``self``.
|
|
223
|
+
|
|
224
|
+
EXAMPLES::
|
|
225
|
+
|
|
226
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
227
|
+
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
228
|
+
sage: subspace = MF.subspace([MF.Delta()*MF.E4()^2, MF.gen(0)])
|
|
229
|
+
sage: subspace
|
|
230
|
+
Subspace of dimension 2 of ModularForms(n=6, k=20, ep=1) over Integer Ring
|
|
231
|
+
"""
|
|
232
|
+
|
|
233
|
+
# If we list the basis the representation usually gets too long...
|
|
234
|
+
# return "Subspace with basis {} of {}".format([v.as_ring_element() for v in self.basis()], self._ambient_space)
|
|
235
|
+
return f"Subspace of dimension {len(self._basis)} of {self._ambient_space}"
|
|
236
|
+
|
|
237
|
+
def change_ring(self, new_base_ring):
|
|
238
|
+
r"""
|
|
239
|
+
Return the same space as ``self`` but over a new base ring ``new_base_ring``.
|
|
240
|
+
|
|
241
|
+
EXAMPLES::
|
|
242
|
+
|
|
243
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
244
|
+
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
245
|
+
sage: subspace = MF.subspace([MF.Delta()*MF.E4()^2, MF.gen(0)])
|
|
246
|
+
sage: subspace.change_ring(QQ)
|
|
247
|
+
Subspace of dimension 2 of ModularForms(n=6, k=20, ep=1) over Rational Field
|
|
248
|
+
sage: subspace.change_ring(CC)
|
|
249
|
+
Traceback (most recent call last):
|
|
250
|
+
...
|
|
251
|
+
NotImplementedError
|
|
252
|
+
"""
|
|
253
|
+
|
|
254
|
+
return self.__class__.__base__(self._ambient_space.change_ring(new_base_ring), self._basis, check=False)
|
|
255
|
+
|
|
256
|
+
def change_ambient_space(self, new_ambient_space):
|
|
257
|
+
r"""
|
|
258
|
+
Return a new subspace with the same basis but inside a different ambient space
|
|
259
|
+
(if possible).
|
|
260
|
+
|
|
261
|
+
EXAMPLES::
|
|
262
|
+
|
|
263
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms, QuasiModularForms
|
|
264
|
+
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
265
|
+
sage: subspace = MF.subspace([MF.Delta()*MF.E4()^2, MF.gen(0)])
|
|
266
|
+
sage: new_ambient_space = QuasiModularForms(n=6, k=20, ep=1)
|
|
267
|
+
sage: subspace.change_ambient_space(new_ambient_space) # long time
|
|
268
|
+
Subspace of dimension 2 of QuasiModularForms(n=6, k=20, ep=1) over Integer Ring
|
|
269
|
+
"""
|
|
270
|
+
return self.__class__.__base__(new_ambient_space, self._basis, check=False)
|
|
271
|
+
|
|
272
|
+
@cached_method
|
|
273
|
+
def contains_coeff_ring(self):
|
|
274
|
+
r"""
|
|
275
|
+
Return whether ``self`` contains its coefficient ring.
|
|
276
|
+
|
|
277
|
+
EXAMPLES::
|
|
278
|
+
|
|
279
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
280
|
+
sage: MF = ModularForms(k=0, ep=1, n=8)
|
|
281
|
+
sage: subspace = MF.subspace([1])
|
|
282
|
+
sage: subspace.contains_coeff_ring()
|
|
283
|
+
True
|
|
284
|
+
sage: subspace = MF.subspace([])
|
|
285
|
+
sage: subspace.contains_coeff_ring()
|
|
286
|
+
False
|
|
287
|
+
sage: MF = ModularForms(k=0, ep=-1, n=8)
|
|
288
|
+
sage: subspace = MF.subspace([])
|
|
289
|
+
sage: subspace.contains_coeff_ring()
|
|
290
|
+
False
|
|
291
|
+
"""
|
|
292
|
+
return (super().contains_coeff_ring() and self.dimension() == 1)
|
|
293
|
+
|
|
294
|
+
@cached_method
|
|
295
|
+
def basis(self):
|
|
296
|
+
r"""
|
|
297
|
+
Return the basis of ``self`` in the ambient space.
|
|
298
|
+
|
|
299
|
+
EXAMPLES::
|
|
300
|
+
|
|
301
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
302
|
+
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
303
|
+
sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
|
|
304
|
+
sage: subspace.basis()
|
|
305
|
+
[q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5), 1 + 360360*q^4 + O(q^5)]
|
|
306
|
+
sage: subspace.basis()[0].parent() == MF
|
|
307
|
+
True
|
|
308
|
+
"""
|
|
309
|
+
return self._basis
|
|
310
|
+
|
|
311
|
+
@cached_method
|
|
312
|
+
def gens(self) -> tuple:
|
|
313
|
+
r"""
|
|
314
|
+
Return the basis of ``self``.
|
|
315
|
+
|
|
316
|
+
EXAMPLES::
|
|
317
|
+
|
|
318
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
319
|
+
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
320
|
+
sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
|
|
321
|
+
sage: subspace.gens()
|
|
322
|
+
(q + 78*q^2 + 2781*q^3 + 59812*q^4 + O(q^5),
|
|
323
|
+
1 + 360360*q^4 + O(q^5))
|
|
324
|
+
sage: subspace.gens()[0].parent() == subspace
|
|
325
|
+
True
|
|
326
|
+
"""
|
|
327
|
+
return self._gens
|
|
328
|
+
|
|
329
|
+
@cached_method
|
|
330
|
+
def dimension(self):
|
|
331
|
+
r"""
|
|
332
|
+
Return the dimension of ``self``.
|
|
333
|
+
|
|
334
|
+
EXAMPLES::
|
|
335
|
+
|
|
336
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
337
|
+
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
338
|
+
sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
|
|
339
|
+
sage: subspace.dimension()
|
|
340
|
+
2
|
|
341
|
+
sage: subspace.dimension() == len(subspace.gens())
|
|
342
|
+
True
|
|
343
|
+
"""
|
|
344
|
+
return len(self.basis())
|
|
345
|
+
|
|
346
|
+
@cached_method
|
|
347
|
+
def degree(self):
|
|
348
|
+
r"""
|
|
349
|
+
Return the degree of ``self``.
|
|
350
|
+
|
|
351
|
+
EXAMPLES::
|
|
352
|
+
|
|
353
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
354
|
+
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
355
|
+
sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
|
|
356
|
+
sage: subspace.degree()
|
|
357
|
+
4
|
|
358
|
+
sage: subspace.degree() == subspace.ambient_space().degree()
|
|
359
|
+
True
|
|
360
|
+
"""
|
|
361
|
+
return self._ambient_space.degree()
|
|
362
|
+
|
|
363
|
+
@cached_method
|
|
364
|
+
def rank(self):
|
|
365
|
+
r"""
|
|
366
|
+
Return the rank of ``self``.
|
|
367
|
+
|
|
368
|
+
EXAMPLES::
|
|
369
|
+
|
|
370
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms
|
|
371
|
+
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
372
|
+
sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
|
|
373
|
+
sage: subspace.rank()
|
|
374
|
+
2
|
|
375
|
+
sage: subspace.rank() == subspace.dimension()
|
|
376
|
+
True
|
|
377
|
+
"""
|
|
378
|
+
return len(self.gens())
|
|
379
|
+
|
|
380
|
+
@cached_method
|
|
381
|
+
def coordinate_vector(self, v):
|
|
382
|
+
r"""
|
|
383
|
+
Return the coordinate vector of ``v`` with respect to
|
|
384
|
+
the basis ``self.gens()``.
|
|
385
|
+
|
|
386
|
+
INPUT:
|
|
387
|
+
|
|
388
|
+
- ``v`` -- an element of ``self``
|
|
389
|
+
|
|
390
|
+
OUTPUT:
|
|
391
|
+
|
|
392
|
+
The coordinate vector of ``v`` with respect
|
|
393
|
+
to the basis ``self.gens()``.
|
|
394
|
+
|
|
395
|
+
Note: The coordinate vector is not an element of ``self.module()``.
|
|
396
|
+
|
|
397
|
+
EXAMPLES::
|
|
398
|
+
|
|
399
|
+
sage: from sage.modular.modform_hecketriangle.space import ModularForms, QuasiCuspForms
|
|
400
|
+
sage: MF = ModularForms(n=6, k=20, ep=1)
|
|
401
|
+
sage: subspace = MF.subspace([(MF.Delta()*MF.E4()^2).as_ring_element(), MF.gen(0)])
|
|
402
|
+
sage: subspace.coordinate_vector(MF.gen(0) + MF.Delta()*MF.E4()^2).parent()
|
|
403
|
+
Vector space of dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring
|
|
404
|
+
sage: subspace.coordinate_vector(MF.gen(0) + MF.Delta()*MF.E4()^2)
|
|
405
|
+
(1, 1)
|
|
406
|
+
|
|
407
|
+
sage: MF = ModularForms(n=4, k=24, ep=-1)
|
|
408
|
+
sage: subspace = MF.subspace([MF.gen(0), MF.gen(2)])
|
|
409
|
+
sage: subspace.coordinate_vector(subspace.gen(0)).parent()
|
|
410
|
+
Vector space of dimension 2 over Fraction Field of Univariate Polynomial Ring in d over Integer Ring
|
|
411
|
+
sage: subspace.coordinate_vector(subspace.gen(0))
|
|
412
|
+
(1, 0)
|
|
413
|
+
|
|
414
|
+
sage: MF = QuasiCuspForms(n=infinity, k=12, ep=1)
|
|
415
|
+
sage: subspace = MF.subspace([MF.Delta(), MF.E4()*MF.f_inf()*MF.E2()*MF.f_i(), MF.E4()*MF.f_inf()*MF.E2()^2, MF.E4()*MF.f_inf()*(MF.E4()-MF.E2()^2)])
|
|
416
|
+
sage: el = MF.E4()*MF.f_inf()*(7*MF.E4() - 3*MF.E2()^2)
|
|
417
|
+
sage: subspace.coordinate_vector(el)
|
|
418
|
+
(7, 0, -3)
|
|
419
|
+
sage: subspace.ambient_coordinate_vector(el)
|
|
420
|
+
(7, 21/(8*d), 0, -3)
|
|
421
|
+
"""
|
|
422
|
+
|
|
423
|
+
return self._module.coordinate_vector(self.ambient_coordinate_vector(v))
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
from sage.misc.lazy_import import lazy_import
|
|
3
|
+
|
|
4
|
+
from sage.modular.modsym.element import set_modsym_print_mode
|
|
5
|
+
|
|
6
|
+
from sage.modular.modsym.modsym import ModularSymbols, ModularSymbols_clear_cache
|
|
7
|
+
|
|
8
|
+
lazy_import('sage.modular.modsym.heilbronn', ['HeilbronnCremona', 'HeilbronnMerel'])
|
|
9
|
+
|
|
10
|
+
from sage.modular.modsym.p1list import P1List, lift_to_sl2z
|
|
11
|
+
|
|
12
|
+
from sage.modular.modsym.p1list_nf import P1NFList, MSymbol
|
|
13
|
+
|
|
14
|
+
from sage.modular.modsym.ghlist import GHlist
|
|
15
|
+
|
|
16
|
+
from sage.modular.modsym.g1list import G1list
|
|
17
|
+
del lazy_import
|