passagemath-schemes 10.8.1a4__cp314-cp314t-macosx_13_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.8.1a4.dist-info/METADATA +203 -0
- passagemath_schemes-10.8.1a4.dist-info/METADATA.bak +204 -0
- passagemath_schemes-10.8.1a4.dist-info/RECORD +312 -0
- passagemath_schemes-10.8.1a4.dist-info/WHEEL +6 -0
- passagemath_schemes-10.8.1a4.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 +9556 -0
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-314t-darwin.so +0 -0
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
- sage/dynamics/arithmetic_dynamics/wehlerK3.py +2578 -0
- sage/lfunctions/all.py +18 -0
- sage/lfunctions/dokchitser.py +727 -0
- sage/lfunctions/pari.py +971 -0
- sage/lfunctions/zero_sums.cpython-314t-darwin.so +0 -0
- sage/lfunctions/zero_sums.pyx +1847 -0
- sage/modular/abvar/abvar.py +5132 -0
- sage/modular/abvar/abvar_ambient_jacobian.py +414 -0
- sage/modular/abvar/abvar_newform.py +246 -0
- sage/modular/abvar/all.py +8 -0
- sage/modular/abvar/constructor.py +187 -0
- sage/modular/abvar/cuspidal_subgroup.py +371 -0
- sage/modular/abvar/finite_subgroup.py +896 -0
- sage/modular/abvar/homology.py +721 -0
- sage/modular/abvar/homspace.py +989 -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 +741 -0
- sage/modular/all.py +43 -0
- sage/modular/arithgroup/all.py +20 -0
- sage/modular/arithgroup/arithgroup_element.cpython-314t-darwin.so +0 -0
- sage/modular/arithgroup/arithgroup_element.pyx +474 -0
- sage/modular/arithgroup/arithgroup_generic.py +1406 -0
- sage/modular/arithgroup/arithgroup_perm.py +2692 -0
- sage/modular/arithgroup/congroup.cpython-314t-darwin.so +0 -0
- sage/modular/arithgroup/congroup.pyx +334 -0
- sage/modular/arithgroup/congroup_gamma.py +361 -0
- sage/modular/arithgroup/congroup_gamma0.py +692 -0
- sage/modular/arithgroup/congroup_gamma1.py +659 -0
- sage/modular/arithgroup/congroup_gammaH.py +1491 -0
- sage/modular/arithgroup/congroup_generic.py +630 -0
- sage/modular/arithgroup/congroup_sl2z.py +266 -0
- sage/modular/arithgroup/farey_symbol.cpython-314t-darwin.so +0 -0
- sage/modular/arithgroup/farey_symbol.pyx +1067 -0
- sage/modular/arithgroup/tests.py +425 -0
- sage/modular/btquotients/all.py +4 -0
- sage/modular/btquotients/btquotient.py +3736 -0
- sage/modular/btquotients/pautomorphicform.py +2564 -0
- sage/modular/buzzard.py +100 -0
- sage/modular/congroup.py +29 -0
- sage/modular/congroup_element.py +13 -0
- sage/modular/cusps.py +1107 -0
- sage/modular/cusps_nf.py +1270 -0
- sage/modular/dims.py +571 -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 +1076 -0
- sage/modular/hecke/algebra.py +725 -0
- sage/modular/hecke/all.py +19 -0
- sage/modular/hecke/ambient_module.py +994 -0
- sage/modular/hecke/degenmap.py +119 -0
- sage/modular/hecke/element.py +302 -0
- sage/modular/hecke/hecke_operator.py +736 -0
- sage/modular/hecke/homspace.py +185 -0
- sage/modular/hecke/module.py +1744 -0
- sage/modular/hecke/morphism.py +139 -0
- sage/modular/hecke/submodule.py +970 -0
- sage/modular/hypergeometric_misc.cpython-314t-darwin.so +0 -0
- sage/modular/hypergeometric_misc.pxd +4 -0
- sage/modular/hypergeometric_misc.pyx +166 -0
- sage/modular/hypergeometric_motive.py +2020 -0
- sage/modular/local_comp/all.py +2 -0
- sage/modular/local_comp/liftings.py +292 -0
- sage/modular/local_comp/local_comp.py +1070 -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 +817 -0
- sage/modular/modform/ambient_R.py +177 -0
- sage/modular/modform/ambient_eps.py +306 -0
- sage/modular/modform/ambient_g0.py +120 -0
- sage/modular/modform/ambient_g1.py +199 -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 +487 -0
- sage/modular/modform/eisenstein_submodule.py +663 -0
- sage/modular/modform/element.py +4105 -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 +127 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314t-darwin.so +0 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
- sage/modular/modform/notes.py +45 -0
- sage/modular/modform/numerical.py +514 -0
- sage/modular/modform/periods.py +14 -0
- sage/modular/modform/ring.py +1257 -0
- sage/modular/modform/space.py +1859 -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 +380 -0
- sage/modular/modform/weight1.py +221 -0
- sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
- sage/modular/modform_hecketriangle/abstract_space.py +2527 -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 +3349 -0
- sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1426 -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 +3844 -0
- sage/modular/modsym/boundary.py +1420 -0
- sage/modular/modsym/element.py +336 -0
- sage/modular/modsym/g1list.py +178 -0
- sage/modular/modsym/ghlist.py +182 -0
- sage/modular/modsym/hecke_operator.py +73 -0
- sage/modular/modsym/manin_symbol.cpython-314t-darwin.so +0 -0
- sage/modular/modsym/manin_symbol.pxd +5 -0
- sage/modular/modsym/manin_symbol.pyx +497 -0
- sage/modular/modsym/manin_symbol_list.py +1291 -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-314t-darwin.so +0 -0
- sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
- sage/modular/modsym/space.py +2468 -0
- sage/modular/modsym/subspace.py +455 -0
- sage/modular/modsym/tests.py +376 -0
- sage/modular/multiple_zeta.py +2635 -0
- sage/modular/multiple_zeta_F_algebra.py +789 -0
- sage/modular/overconvergent/all.py +6 -0
- sage/modular/overconvergent/genus0.py +1879 -0
- sage/modular/overconvergent/hecke_series.py +1187 -0
- sage/modular/overconvergent/weightspace.py +776 -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 +856 -0
- sage/modular/pollack_stevens/modsym.py +1590 -0
- sage/modular/pollack_stevens/padic_lseries.py +417 -0
- sage/modular/pollack_stevens/sigma0.py +534 -0
- sage/modular/pollack_stevens/space.py +1078 -0
- sage/modular/quasimodform/all.py +3 -0
- sage/modular/quasimodform/element.py +846 -0
- sage/modular/quasimodform/ring.py +826 -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 +700 -0
- sage/schemes/curves/affine_curve.py +2924 -0
- sage/schemes/curves/all.py +33 -0
- sage/schemes/curves/closed_point.py +434 -0
- sage/schemes/curves/constructor.py +397 -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 +3203 -0
- sage/schemes/curves/weighted_projective_curve.py +106 -0
- sage/schemes/curves/zariski_vankampen.py +1931 -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 +991 -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 +1103 -0
- sage/schemes/elliptic_curves/constructor.py +1530 -0
- sage/schemes/elliptic_curves/ec_database.py +175 -0
- sage/schemes/elliptic_curves/ell_curve_isogeny.py +3971 -0
- sage/schemes/elliptic_curves/ell_egros.py +457 -0
- sage/schemes/elliptic_curves/ell_field.py +2837 -0
- sage/schemes/elliptic_curves/ell_finite_field.py +3249 -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 +4944 -0
- sage/schemes/elliptic_curves/ell_rational_field.py +7184 -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 +1663 -0
- sage/schemes/elliptic_curves/gp_simon.py +152 -0
- sage/schemes/elliptic_curves/heegner.py +7328 -0
- sage/schemes/elliptic_curves/height.py +2108 -0
- sage/schemes/elliptic_curves/hom.py +1788 -0
- sage/schemes/elliptic_curves/hom_composite.py +1084 -0
- sage/schemes/elliptic_curves/hom_fractional.py +544 -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 +681 -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 +1523 -0
- sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
- sage/schemes/elliptic_curves/jacobian.py +247 -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 +915 -0
- sage/schemes/elliptic_curves/mod5family.py +105 -0
- sage/schemes/elliptic_curves/mod_poly.py +197 -0
- sage/schemes/elliptic_curves/mod_sym_num.cpython-314t-darwin.so +0 -0
- sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
- sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
- sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
- sage/schemes/elliptic_curves/padics.py +1816 -0
- sage/schemes/elliptic_curves/period_lattice.py +2234 -0
- sage/schemes/elliptic_curves/period_lattice_region.cpython-314t-darwin.so +0 -0
- sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
- sage/schemes/elliptic_curves/saturation.py +716 -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 +369 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1948 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +936 -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 +312 -0
- sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
- sage/schemes/hyperelliptic_curves/jacobian_generic.py +437 -0
- sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
- sage/schemes/hyperelliptic_curves/jacobian_morphism.py +878 -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 +3863 -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 +581 -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 +53 -0
- sage/schemes/riemann_surfaces/all.py +1 -0
- sage/schemes/riemann_surfaces/riemann_surface.py +4177 -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,73 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.libs.flint
|
|
3
|
+
"""
|
|
4
|
+
Sparse action of Hecke operators
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
##########################################################################
|
|
8
|
+
#
|
|
9
|
+
# Copyright (C) 2008 William Stein <wstein@gmail.com>
|
|
10
|
+
#
|
|
11
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
12
|
+
#
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
#
|
|
15
|
+
##########################################################################
|
|
16
|
+
|
|
17
|
+
import sage.modular.hecke.hecke_operator
|
|
18
|
+
from sage.arith.misc import is_prime
|
|
19
|
+
from sage.modular.modsym import heilbronn
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class HeckeOperator(sage.modular.hecke.hecke_operator.HeckeOperator):
|
|
23
|
+
def apply_sparse(self, x):
|
|
24
|
+
"""
|
|
25
|
+
Return the image of ``x`` under ``self``.
|
|
26
|
+
|
|
27
|
+
If ``x`` is not in ``self.domain()``, raise a :exc:`TypeError`.
|
|
28
|
+
|
|
29
|
+
EXAMPLES::
|
|
30
|
+
|
|
31
|
+
sage: M = ModularSymbols(17,4,-1)
|
|
32
|
+
sage: T = M.hecke_operator(4)
|
|
33
|
+
sage: T.apply_sparse(M.0)
|
|
34
|
+
-27*[X^2,(1,7)] - 167/2*[X^2,(1,9)] - 21/2*[X^2,(1,13)] + 53/2*[X^2,(1,15)]
|
|
35
|
+
sage: [T.apply_sparse(x) == T.hecke_module_morphism()(x) for x in M.basis()]
|
|
36
|
+
[True, True, True, True]
|
|
37
|
+
sage: N = ModularSymbols(17,4,1)
|
|
38
|
+
sage: T.apply_sparse(N.0)
|
|
39
|
+
Traceback (most recent call last):
|
|
40
|
+
...
|
|
41
|
+
TypeError: x (=[X^2,(0,1)]) must be in Modular Symbols space
|
|
42
|
+
of dimension 4 for Gamma_0(17) of weight 4 with sign -1
|
|
43
|
+
over Rational Field
|
|
44
|
+
"""
|
|
45
|
+
if x not in self.domain():
|
|
46
|
+
raise TypeError("x (={}) must be in {}".format(x, self.domain()))
|
|
47
|
+
|
|
48
|
+
p = self.index()
|
|
49
|
+
if is_prime(p):
|
|
50
|
+
H = heilbronn.HeilbronnCremona(p)
|
|
51
|
+
else:
|
|
52
|
+
H = heilbronn.HeilbronnMerel(p)
|
|
53
|
+
|
|
54
|
+
M = self.parent().module()
|
|
55
|
+
mod2term = M._mod2term
|
|
56
|
+
syms = M.manin_symbols()
|
|
57
|
+
K = M.base_ring()
|
|
58
|
+
R = M.manin_gens_to_basis()
|
|
59
|
+
|
|
60
|
+
W = R.new_matrix(nrows=1, ncols=R.nrows())
|
|
61
|
+
|
|
62
|
+
B = M.manin_basis()
|
|
63
|
+
|
|
64
|
+
v = x.element()
|
|
65
|
+
for i in v.nonzero_positions():
|
|
66
|
+
for h in H:
|
|
67
|
+
entries = syms.apply(B[i], h)
|
|
68
|
+
for k, w in entries:
|
|
69
|
+
f, s = mod2term[k]
|
|
70
|
+
if s:
|
|
71
|
+
W[0, f] += s * K(w) * v[i]
|
|
72
|
+
|
|
73
|
+
return M(v.parent()((W * R).row(0)))
|
|
Binary file
|
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.libs.flint
|
|
3
|
+
r"""
|
|
4
|
+
Manin symbols
|
|
5
|
+
|
|
6
|
+
This module defines the class ManinSymbol. A Manin symbol of
|
|
7
|
+
weight `k`, level `N` has the form `[P(X,Y),(u:v)]` where
|
|
8
|
+
`P(X,Y)\in\ZZ[X,Y]` is homogeneous of weight `k-2` and
|
|
9
|
+
`(u:v)\in\mathbb{P}^1(\ZZ/N\ZZ).` The ManinSymbol class
|
|
10
|
+
holds a "monomial Manin symbol" of the simpler form
|
|
11
|
+
`[X^iY^{k-2-i},(u:v)]`, which is stored as a triple `(i,u,v)`; the
|
|
12
|
+
weight and level are obtained from the parent structure, which is a
|
|
13
|
+
:class:`sage.modular.modsym.manin_symbol_list.ManinSymbolList`.
|
|
14
|
+
|
|
15
|
+
Integer matrices `[a,b;c,d]` act on Manin symbols on the right,
|
|
16
|
+
sending `[P(X,Y),(u,v)]` to `[P(aX+bY,cX+dY),(u,v)g]`. Diagonal
|
|
17
|
+
matrices (with `b=c=0`, such as `I=[-1,0;0,1]` and `J=[-1,0;0,-1]`)
|
|
18
|
+
and anti-diagonal matrices (with `a=d=0`, such as `S=[0,-1;1,0]`) map
|
|
19
|
+
monomial Manin symbols to monomial Manin symbols, up to a scalar
|
|
20
|
+
factor. For general matrices (such as `T=[0,1,-1,-1]` and
|
|
21
|
+
`T^2=[-1,-1;0,1]`) the image of a monomial Manin symbol is expressed
|
|
22
|
+
as a formal sum of monomial Manin symbols, with integer coefficients.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from sage.misc.persist import register_unpickle_override
|
|
26
|
+
from sage.modular.cusps import Cusp
|
|
27
|
+
from sage.rings.infinity import Infinity
|
|
28
|
+
from sage.rings.integer cimport Integer
|
|
29
|
+
from sage.rings.integer_ring import ZZ
|
|
30
|
+
from sage.structure.element cimport Element
|
|
31
|
+
from sage.structure.richcmp cimport richcmp_not_equal, richcmp
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def is_ManinSymbol(x):
|
|
35
|
+
"""
|
|
36
|
+
Return ``True`` if ``x`` is a :class:`ManinSymbol`.
|
|
37
|
+
|
|
38
|
+
EXAMPLES::
|
|
39
|
+
|
|
40
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol, is_ManinSymbol
|
|
41
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
42
|
+
sage: m = ManinSymbolList_gamma0(6, 4)
|
|
43
|
+
sage: s = ManinSymbol(m, m.symbol_list()[3])
|
|
44
|
+
sage: s
|
|
45
|
+
[Y^2,(1,2)]
|
|
46
|
+
sage: is_ManinSymbol(s)
|
|
47
|
+
doctest:warning...
|
|
48
|
+
DeprecationWarning: The function is_ManinSymbol is deprecated;
|
|
49
|
+
use 'isinstance(..., ManinSymbol)' instead.
|
|
50
|
+
See https://github.com/sagemath/sage/issues/38184 for details.
|
|
51
|
+
True
|
|
52
|
+
sage: is_ManinSymbol(m[3])
|
|
53
|
+
True
|
|
54
|
+
"""
|
|
55
|
+
from sage.misc.superseded import deprecation_cython
|
|
56
|
+
deprecation_cython(38184,
|
|
57
|
+
"The function is_ManinSymbol is deprecated; "
|
|
58
|
+
"use 'isinstance(..., ManinSymbol)' instead.")
|
|
59
|
+
return isinstance(x, ManinSymbol)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
cdef class ManinSymbol(Element):
|
|
63
|
+
r"""
|
|
64
|
+
A Manin symbol `[X^i Y^{k-2-i}, (u, v)]`.
|
|
65
|
+
|
|
66
|
+
INPUT:
|
|
67
|
+
|
|
68
|
+
- ``parent`` -- :class:`~sage.modular.modsym.manin_symbol_list.ManinSymbolList`
|
|
69
|
+
|
|
70
|
+
- ``t`` -- a triple `(i, u, v)` of integers
|
|
71
|
+
|
|
72
|
+
EXAMPLES::
|
|
73
|
+
|
|
74
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
75
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
76
|
+
sage: m = ManinSymbolList_gamma0(5,2)
|
|
77
|
+
sage: s = ManinSymbol(m,(2,2,3)); s
|
|
78
|
+
(2,3)
|
|
79
|
+
sage: s == loads(dumps(s))
|
|
80
|
+
True
|
|
81
|
+
|
|
82
|
+
::
|
|
83
|
+
|
|
84
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
85
|
+
sage: s = ManinSymbol(m,(2,2,3)); s
|
|
86
|
+
[X^2*Y^4,(2,3)]
|
|
87
|
+
|
|
88
|
+
::
|
|
89
|
+
|
|
90
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
91
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
92
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
93
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
94
|
+
sage: s.parent()
|
|
95
|
+
Manin Symbol List of weight 8 for Gamma0(5)
|
|
96
|
+
"""
|
|
97
|
+
def __init__(self, parent, t):
|
|
98
|
+
r"""
|
|
99
|
+
Create a Manin symbol `[X^i Y^{k-2-i}, (u, v)]`, where
|
|
100
|
+
`k` is the weight.
|
|
101
|
+
|
|
102
|
+
INPUT:
|
|
103
|
+
|
|
104
|
+
- ``parent`` -- :class:`~sage.modular.modsym.manin_symbol_list.ManinSymbolList`
|
|
105
|
+
|
|
106
|
+
- ``t`` -- a triple `(i, u, v)` of integers
|
|
107
|
+
|
|
108
|
+
EXAMPLES::
|
|
109
|
+
|
|
110
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
111
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
112
|
+
sage: m = ManinSymbolList_gamma0(5,2)
|
|
113
|
+
sage: s = ManinSymbol(m,(2,2,3)); s
|
|
114
|
+
(2,3)
|
|
115
|
+
|
|
116
|
+
::
|
|
117
|
+
|
|
118
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
119
|
+
sage: s = ManinSymbol(m,(2,2,3)); s
|
|
120
|
+
[X^2*Y^4,(2,3)]
|
|
121
|
+
"""
|
|
122
|
+
Element.__init__(self, parent)
|
|
123
|
+
(i, u, v) = t
|
|
124
|
+
self.i = Integer(i)
|
|
125
|
+
self.u = Integer(u)
|
|
126
|
+
self.v = Integer(v)
|
|
127
|
+
|
|
128
|
+
def __reduce__(self):
|
|
129
|
+
"""
|
|
130
|
+
For pickling.
|
|
131
|
+
|
|
132
|
+
TESTS::
|
|
133
|
+
|
|
134
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
135
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma1
|
|
136
|
+
sage: m = ManinSymbolList_gamma1(3, 2)
|
|
137
|
+
sage: s = ManinSymbol(m, (2, 2, 3))
|
|
138
|
+
sage: loads(dumps(s))
|
|
139
|
+
(2,3)
|
|
140
|
+
"""
|
|
141
|
+
return ManinSymbol, (self.parent(), self.tuple())
|
|
142
|
+
|
|
143
|
+
def __setstate__(self, state):
|
|
144
|
+
"""
|
|
145
|
+
Needed to unpickle old :class:`ManinSymbol` objects.
|
|
146
|
+
|
|
147
|
+
TESTS::
|
|
148
|
+
|
|
149
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
150
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
151
|
+
sage: m = ManinSymbolList_gamma0(5,2)
|
|
152
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
153
|
+
sage: loads(dumps(s))
|
|
154
|
+
(2,3)
|
|
155
|
+
"""
|
|
156
|
+
self._parent = state['_ManinSymbol__parent']
|
|
157
|
+
(self.i, self.u, self.v) = state['_ManinSymbol__t']
|
|
158
|
+
|
|
159
|
+
def tuple(self):
|
|
160
|
+
r"""
|
|
161
|
+
Return the 3-tuple `(i,u,v)` of this Manin symbol.
|
|
162
|
+
|
|
163
|
+
EXAMPLES::
|
|
164
|
+
|
|
165
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
166
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
167
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
168
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
169
|
+
sage: s.tuple()
|
|
170
|
+
(2, 2, 3)
|
|
171
|
+
"""
|
|
172
|
+
return (self.i, self.u, self.v)
|
|
173
|
+
|
|
174
|
+
def _repr_(self):
|
|
175
|
+
"""
|
|
176
|
+
Return a string representation of this Manin symbol.
|
|
177
|
+
|
|
178
|
+
EXAMPLES::
|
|
179
|
+
|
|
180
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
181
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
182
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
183
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
184
|
+
sage: str(s) # indirect doctest
|
|
185
|
+
'[X^2*Y^4,(2,3)]'
|
|
186
|
+
"""
|
|
187
|
+
if self.weight() > 2:
|
|
188
|
+
polypart = _print_polypart(self.i, self.weight()-2-self.i)
|
|
189
|
+
return "[%s,(%s,%s)]" % (polypart, self.u, self.v)
|
|
190
|
+
return "(%s,%s)" % (self.u, self.v)
|
|
191
|
+
|
|
192
|
+
def _latex_(self):
|
|
193
|
+
"""
|
|
194
|
+
Return a LaTeX representation of this Manin symbol.
|
|
195
|
+
|
|
196
|
+
EXAMPLES::
|
|
197
|
+
|
|
198
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
199
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
200
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
201
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
202
|
+
sage: latex(s) # indirect doctest
|
|
203
|
+
[X^2*Y^4,(2,3)]
|
|
204
|
+
"""
|
|
205
|
+
return self._repr_()
|
|
206
|
+
|
|
207
|
+
cpdef _richcmp_(self, right, int op):
|
|
208
|
+
"""
|
|
209
|
+
Comparison function for ManinSymbols.
|
|
210
|
+
|
|
211
|
+
EXAMPLES::
|
|
212
|
+
|
|
213
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
214
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
215
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
216
|
+
sage: slist = m.manin_symbol_list()
|
|
217
|
+
sage: slist[10] <= slist[20]
|
|
218
|
+
True
|
|
219
|
+
sage: slist[20] <= slist[10]
|
|
220
|
+
False
|
|
221
|
+
sage: slist[10] < slist[20]
|
|
222
|
+
True
|
|
223
|
+
sage: slist[20] > slist[10]
|
|
224
|
+
True
|
|
225
|
+
sage: slist[20] != slist[20]
|
|
226
|
+
False
|
|
227
|
+
"""
|
|
228
|
+
cdef ManinSymbol other = <ManinSymbol>right
|
|
229
|
+
# Compare tuples (i,u,v)
|
|
230
|
+
lx = self.i
|
|
231
|
+
rx = other.i
|
|
232
|
+
if lx != rx:
|
|
233
|
+
return richcmp_not_equal(lx, rx, op)
|
|
234
|
+
lx = self.u
|
|
235
|
+
rx = other.u
|
|
236
|
+
if lx != rx:
|
|
237
|
+
return richcmp_not_equal(lx, rx, op)
|
|
238
|
+
return richcmp(self.v, other.v, op)
|
|
239
|
+
|
|
240
|
+
def __hash__(self):
|
|
241
|
+
"""
|
|
242
|
+
EXAMPLES::
|
|
243
|
+
|
|
244
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
245
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
246
|
+
sage: m = ManinSymbolList_gamma0(5,2)
|
|
247
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
248
|
+
sage: hash(s) # random
|
|
249
|
+
7331463901
|
|
250
|
+
"""
|
|
251
|
+
cdef unsigned long h1 = hash(self.i)
|
|
252
|
+
cdef unsigned long h2 = hash(self.u)
|
|
253
|
+
cdef unsigned long h3 = hash(self.v)
|
|
254
|
+
return <Py_hash_t>(h1 + 1247963869*h2 + 1611845387*h3)
|
|
255
|
+
|
|
256
|
+
def __mul__(self, matrix):
|
|
257
|
+
"""
|
|
258
|
+
Return the result of applying a matrix to this Manin symbol.
|
|
259
|
+
|
|
260
|
+
EXAMPLES::
|
|
261
|
+
|
|
262
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
263
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
264
|
+
sage: m = ManinSymbolList_gamma0(5,2)
|
|
265
|
+
sage: s = ManinSymbol(m,(0,2,3))
|
|
266
|
+
sage: s*[1,2,0,1]
|
|
267
|
+
(2,7)
|
|
268
|
+
|
|
269
|
+
::
|
|
270
|
+
|
|
271
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
272
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
273
|
+
sage: s*[1,2,0,1]
|
|
274
|
+
Traceback (most recent call last):
|
|
275
|
+
...
|
|
276
|
+
NotImplementedError: ModSym * Matrix only implemented in weight 2
|
|
277
|
+
"""
|
|
278
|
+
if self.weight() > 2:
|
|
279
|
+
raise NotImplementedError("ModSym * Matrix only implemented "
|
|
280
|
+
"in weight 2")
|
|
281
|
+
from sage.structure.element import Matrix
|
|
282
|
+
if isinstance(matrix, Matrix):
|
|
283
|
+
if (not matrix.nrows() == 2) or (not matrix.ncols() == 2):
|
|
284
|
+
raise ValueError("matrix(=%s) must be 2x2" % matrix)
|
|
285
|
+
matrix = matrix.list()
|
|
286
|
+
return type(self)(self.parent(),
|
|
287
|
+
(self.i,
|
|
288
|
+
matrix[0]*self.u + matrix[2]*self.v,
|
|
289
|
+
matrix[1]*self.u + matrix[3]*self.v))
|
|
290
|
+
|
|
291
|
+
def apply(self, a, b, c, d):
|
|
292
|
+
"""
|
|
293
|
+
Return the image of ``self`` under the matrix `[a,b;c,d]`.
|
|
294
|
+
|
|
295
|
+
Not implemented for raw ManinSymbol objects, only for members
|
|
296
|
+
of ManinSymbolLists.
|
|
297
|
+
|
|
298
|
+
EXAMPLES::
|
|
299
|
+
|
|
300
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
301
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
302
|
+
sage: m = ManinSymbolList_gamma0(5,2)
|
|
303
|
+
sage: m.apply(10,[1,0,0,1]) # not implemented for base class
|
|
304
|
+
"""
|
|
305
|
+
raise NotImplementedError
|
|
306
|
+
|
|
307
|
+
def __copy__(self):
|
|
308
|
+
"""
|
|
309
|
+
Return a copy of this Manin symbol.
|
|
310
|
+
|
|
311
|
+
EXAMPLES::
|
|
312
|
+
|
|
313
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
314
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
315
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
316
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
317
|
+
sage: s2 = copy(s)
|
|
318
|
+
sage: s2
|
|
319
|
+
[X^2*Y^4,(2,3)]
|
|
320
|
+
"""
|
|
321
|
+
return type(self)(self.parent(), (self.i, self.u, self.v))
|
|
322
|
+
|
|
323
|
+
def lift_to_sl2z(self, N=None):
|
|
324
|
+
r"""
|
|
325
|
+
Return a lift of this Manin symbol to `SL_2(\ZZ)`.
|
|
326
|
+
|
|
327
|
+
If this Manin symbol is `(c,d)` and `N` is its level, this
|
|
328
|
+
function returns a list `[a,b, c',d']` that defines a 2x2
|
|
329
|
+
matrix with determinant 1 and integer entries, such that
|
|
330
|
+
`c=c'` (mod `N`) and `d=d'` (mod `N`).
|
|
331
|
+
|
|
332
|
+
EXAMPLES::
|
|
333
|
+
|
|
334
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
335
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
336
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
337
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
338
|
+
sage: s
|
|
339
|
+
[X^2*Y^4,(2,3)]
|
|
340
|
+
sage: s.lift_to_sl2z()
|
|
341
|
+
[1, 1, 2, 3]
|
|
342
|
+
"""
|
|
343
|
+
if N is None:
|
|
344
|
+
N = self.level()
|
|
345
|
+
if N == 1:
|
|
346
|
+
return [ZZ.one(), ZZ.zero(), ZZ.zero(), ZZ.one()]
|
|
347
|
+
c = Integer(self.u)
|
|
348
|
+
d = Integer(self.v)
|
|
349
|
+
|
|
350
|
+
if c == 0:
|
|
351
|
+
if d == 1:
|
|
352
|
+
return [ZZ.one(), ZZ.zero(), ZZ.zero(), ZZ.one()]
|
|
353
|
+
if d == N - 1:
|
|
354
|
+
return [Integer(-1), ZZ.zero(), ZZ.zero(), Integer(-1)]
|
|
355
|
+
c = Integer(N)
|
|
356
|
+
|
|
357
|
+
g, z1, z2 = c.xgcd(d)
|
|
358
|
+
|
|
359
|
+
# We're lucky: z1*c + z2*d = 1.
|
|
360
|
+
if g==1:
|
|
361
|
+
return [z2, -z1, c, d]
|
|
362
|
+
|
|
363
|
+
# Have to try harder.
|
|
364
|
+
m = c
|
|
365
|
+
|
|
366
|
+
# compute prime-to-d part of m.
|
|
367
|
+
while True:
|
|
368
|
+
g = m.gcd(d)
|
|
369
|
+
if g == 1:
|
|
370
|
+
break
|
|
371
|
+
m //= g
|
|
372
|
+
|
|
373
|
+
# compute prime-to-N part of m.
|
|
374
|
+
while True:
|
|
375
|
+
g = m.gcd(N)
|
|
376
|
+
if g == 1:
|
|
377
|
+
break
|
|
378
|
+
m //= g
|
|
379
|
+
d += N*m
|
|
380
|
+
g, z1, z2 = c.xgcd(d)
|
|
381
|
+
assert g==1
|
|
382
|
+
return [z2, -z1, c, d]
|
|
383
|
+
|
|
384
|
+
def endpoints(self, N=None):
|
|
385
|
+
r"""
|
|
386
|
+
Return cusps `alpha`, `beta` such that this Manin symbol, viewed as a
|
|
387
|
+
symbol for level `N`, is `X^i*Y^{k-2-i} \{alpha, beta\}`.
|
|
388
|
+
|
|
389
|
+
EXAMPLES::
|
|
390
|
+
|
|
391
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
392
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
393
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
394
|
+
sage: s = ManinSymbol(m,(2,2,3)); s
|
|
395
|
+
[X^2*Y^4,(2,3)]
|
|
396
|
+
sage: s.endpoints()
|
|
397
|
+
(1/3, 1/2)
|
|
398
|
+
"""
|
|
399
|
+
if N is None:
|
|
400
|
+
N = self.parent().level()
|
|
401
|
+
else:
|
|
402
|
+
N=int(N)
|
|
403
|
+
if N < 1:
|
|
404
|
+
raise ArithmeticError("N must be positive")
|
|
405
|
+
a, b, c, d = self.lift_to_sl2z()
|
|
406
|
+
return Cusp(b, d), Cusp(a, c)
|
|
407
|
+
|
|
408
|
+
def weight(self):
|
|
409
|
+
"""
|
|
410
|
+
Return the weight of this Manin symbol.
|
|
411
|
+
|
|
412
|
+
EXAMPLES::
|
|
413
|
+
|
|
414
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
415
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
416
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
417
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
418
|
+
sage: s.weight()
|
|
419
|
+
8
|
|
420
|
+
"""
|
|
421
|
+
return self.parent().weight()
|
|
422
|
+
|
|
423
|
+
def level(self):
|
|
424
|
+
"""
|
|
425
|
+
Return the level of this Manin symbol.
|
|
426
|
+
|
|
427
|
+
EXAMPLES::
|
|
428
|
+
|
|
429
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
430
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
431
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
432
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
433
|
+
sage: s.level()
|
|
434
|
+
5
|
|
435
|
+
"""
|
|
436
|
+
return self.parent().level()
|
|
437
|
+
|
|
438
|
+
def modular_symbol_rep(self):
|
|
439
|
+
"""
|
|
440
|
+
Return a representation of ``self`` as a formal sum of modular
|
|
441
|
+
symbols.
|
|
442
|
+
|
|
443
|
+
The result is not cached.
|
|
444
|
+
|
|
445
|
+
EXAMPLES::
|
|
446
|
+
|
|
447
|
+
sage: from sage.modular.modsym.manin_symbol import ManinSymbol
|
|
448
|
+
sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
|
|
449
|
+
sage: m = ManinSymbolList_gamma0(5,8)
|
|
450
|
+
sage: s = ManinSymbol(m,(2,2,3))
|
|
451
|
+
sage: s.modular_symbol_rep()
|
|
452
|
+
144*X^6*{1/3, 1/2} - 384*X^5*Y*{1/3, 1/2} + 424*X^4*Y^2*{1/3, 1/2} - 248*X^3*Y^3*{1/3, 1/2} + 81*X^2*Y^4*{1/3, 1/2} - 14*X*Y^5*{1/3, 1/2} + Y^6*{1/3, 1/2}
|
|
453
|
+
"""
|
|
454
|
+
# TODO: It would likely be much better to do this slightly more directly
|
|
455
|
+
from sage.modular.modsym.modular_symbols import ModularSymbol
|
|
456
|
+
x = ModularSymbol(self.parent(), self.i, 0, Infinity)
|
|
457
|
+
return x.apply(self.lift_to_sl2z())
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
def _print_polypart(i, j):
|
|
461
|
+
r"""
|
|
462
|
+
Helper function for printing the polynomial part `X^iY^j` of a ManinSymbol.
|
|
463
|
+
|
|
464
|
+
EXAMPLES::
|
|
465
|
+
|
|
466
|
+
sage: from sage.modular.modsym.manin_symbol import _print_polypart
|
|
467
|
+
sage: _print_polypart(2,3)
|
|
468
|
+
'X^2*Y^3'
|
|
469
|
+
sage: _print_polypart(2,0)
|
|
470
|
+
'X^2'
|
|
471
|
+
sage: _print_polypart(0,1)
|
|
472
|
+
'Y'
|
|
473
|
+
"""
|
|
474
|
+
if i > 1:
|
|
475
|
+
xpart = "X^%s" % i
|
|
476
|
+
elif i == 1:
|
|
477
|
+
xpart = "X"
|
|
478
|
+
else:
|
|
479
|
+
xpart = ""
|
|
480
|
+
if j > 1:
|
|
481
|
+
ypart = "Y^%s" % j
|
|
482
|
+
elif j == 1:
|
|
483
|
+
ypart = "Y"
|
|
484
|
+
else:
|
|
485
|
+
ypart = ""
|
|
486
|
+
if xpart and ypart:
|
|
487
|
+
times = "*"
|
|
488
|
+
else:
|
|
489
|
+
times = ""
|
|
490
|
+
if xpart or ypart:
|
|
491
|
+
return xpart + times + ypart
|
|
492
|
+
else:
|
|
493
|
+
return ""
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
register_unpickle_override('sage.modular.modsym.manin_symbols',
|
|
497
|
+
'ManinSymbol', ManinSymbol)
|