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
sage/modular/all.py
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
from sage.misc.lazy_import import lazy_import
|
|
3
|
+
|
|
4
|
+
from sage.modular.quatalg.all import *
|
|
5
|
+
|
|
6
|
+
from sage.modular.modsym.all import *
|
|
7
|
+
|
|
8
|
+
from sage.modular.modform.all import *
|
|
9
|
+
|
|
10
|
+
from sage.modular.ssmod.all import *
|
|
11
|
+
|
|
12
|
+
from sage.modular.abvar.all import *
|
|
13
|
+
|
|
14
|
+
from sage.modular.dirichlet import (DirichletGroup,
|
|
15
|
+
kronecker_character, kronecker_character_upside_down,
|
|
16
|
+
trivial_character)
|
|
17
|
+
|
|
18
|
+
from sage.modular.arithgroup.all import (Gamma0, Gamma1, GammaH, Gamma, SL2Z,
|
|
19
|
+
ArithmeticSubgroup_Permutation,
|
|
20
|
+
CongruenceSubgroup, FareySymbol)
|
|
21
|
+
|
|
22
|
+
from sage.modular.cusps import Cusp, Cusps
|
|
23
|
+
|
|
24
|
+
from sage.modular.etaproducts import (EtaGroup, EtaProduct, EtaGroupElement,
|
|
25
|
+
AllCusps, CuspFamily)
|
|
26
|
+
|
|
27
|
+
lazy_import('sage.modular.multiple_zeta', ['Multizeta', 'Multizetas'])
|
|
28
|
+
|
|
29
|
+
from sage.modular.overconvergent.all import *
|
|
30
|
+
|
|
31
|
+
from sage.modular.local_comp.all import *
|
|
32
|
+
|
|
33
|
+
from sage.modular.cusps_nf import NFCusp, NFCusps, Gamma0_NFCusps
|
|
34
|
+
|
|
35
|
+
from sage.modular.btquotients.all import *
|
|
36
|
+
|
|
37
|
+
from sage.modular.pollack_stevens.all import *
|
|
38
|
+
|
|
39
|
+
from sage.modular.quasimodform.all import *
|
|
40
|
+
|
|
41
|
+
from sage.modular.drinfeld_modform.all import *
|
|
42
|
+
|
|
43
|
+
del lazy_import
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# Note: the is_xxx functions are imported to here, but not from here up to sage.modular.all, so
|
|
3
|
+
# they are invisible to the user but easy to import all in one go by other code that needs them.
|
|
4
|
+
|
|
5
|
+
from sage.modular.arithgroup.arithgroup_generic import is_ArithmeticSubgroup, ArithmeticSubgroup
|
|
6
|
+
from sage.modular.arithgroup.congroup_generic import is_CongruenceSubgroup, CongruenceSubgroupBase, CongruenceSubgroup_constructor as CongruenceSubgroup
|
|
7
|
+
from sage.modular.arithgroup.congroup_gammaH import GammaH_constructor as GammaH, is_GammaH, GammaH_class
|
|
8
|
+
from sage.modular.arithgroup.congroup_gamma1 import Gamma1_constructor as Gamma1, is_Gamma1, Gamma1_class
|
|
9
|
+
from sage.modular.arithgroup.congroup_gamma0 import Gamma0_constructor as Gamma0, is_Gamma0, Gamma0_class
|
|
10
|
+
from sage.modular.arithgroup.congroup_gamma import Gamma_constructor as Gamma, is_Gamma, Gamma_class
|
|
11
|
+
from sage.modular.arithgroup.congroup_sl2z import SL2Z, is_SL2Z, SL2Z_class
|
|
12
|
+
|
|
13
|
+
from sage.misc.lazy_import import lazy_import
|
|
14
|
+
lazy_import('sage.modular.arithgroup.arithgroup_perm', 'ArithmeticSubgroup_Permutation')
|
|
15
|
+
|
|
16
|
+
from sage.modular.arithgroup.congroup import (degeneracy_coset_representatives_gamma0,
|
|
17
|
+
degeneracy_coset_representatives_gamma1)
|
|
18
|
+
|
|
19
|
+
from sage.modular.arithgroup.farey_symbol import Farey as FareySymbol
|
|
20
|
+
del lazy_import
|
|
Binary file
|
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
"""
|
|
3
|
+
Elements of arithmetic subgroups
|
|
4
|
+
"""
|
|
5
|
+
# ##############################################################################
|
|
6
|
+
#
|
|
7
|
+
# Copyright (C) 2009, The Sage Group -- https://www.sagemath.org/
|
|
8
|
+
#
|
|
9
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
10
|
+
#
|
|
11
|
+
# The full text of the GPL is available at:
|
|
12
|
+
#
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
#
|
|
15
|
+
# ##############################################################################
|
|
16
|
+
|
|
17
|
+
from sage.structure.element cimport MultiplicativeGroupElement
|
|
18
|
+
from sage.structure.richcmp cimport richcmp
|
|
19
|
+
from sage.rings.integer_ring import ZZ
|
|
20
|
+
|
|
21
|
+
from sage.matrix.matrix_space import MatrixSpace
|
|
22
|
+
from sage.matrix.matrix_dense cimport Matrix_dense
|
|
23
|
+
from sage.matrix.matrix_generic_dense cimport Matrix_generic_dense as MatrixClass
|
|
24
|
+
# FIXME: This was Matrix_integer_dense; changed for modularization to avoid flint dep
|
|
25
|
+
|
|
26
|
+
M2Z = MatrixSpace(ZZ, 2)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
cdef class ArithmeticSubgroupElement(MultiplicativeGroupElement):
|
|
30
|
+
r"""
|
|
31
|
+
An element of the group `\SL_2(\ZZ)`, i.e. a 2x2 integer matrix of
|
|
32
|
+
determinant 1.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
cdef Matrix_dense __x
|
|
36
|
+
|
|
37
|
+
def __init__(self, parent, x, check=True):
|
|
38
|
+
"""
|
|
39
|
+
Create an element of an arithmetic subgroup.
|
|
40
|
+
|
|
41
|
+
INPUT:
|
|
42
|
+
|
|
43
|
+
- ``parent`` -- an arithmetic subgroup
|
|
44
|
+
|
|
45
|
+
- ``x`` -- data defining a 2x2 matrix over ZZ
|
|
46
|
+
which lives in ``parent``
|
|
47
|
+
|
|
48
|
+
- ``check`` -- if ``True``, check that parent is an arithmetic
|
|
49
|
+
subgroup, and that `x` defines a matrix of determinant `1`
|
|
50
|
+
|
|
51
|
+
We tend not to create elements of arithmetic subgroups that are not
|
|
52
|
+
SL2Z, in order to avoid coercion issues (that is, the other arithmetic
|
|
53
|
+
subgroups are "facade parents").
|
|
54
|
+
|
|
55
|
+
EXAMPLES::
|
|
56
|
+
|
|
57
|
+
sage: G = Gamma0(27)
|
|
58
|
+
sage: sage.modular.arithgroup.arithgroup_element.ArithmeticSubgroupElement(G, [4,1,27,7])
|
|
59
|
+
[ 4 1]
|
|
60
|
+
[27 7]
|
|
61
|
+
sage: sage.modular.arithgroup.arithgroup_element.ArithmeticSubgroupElement(Integers(3), [4,1,27,7])
|
|
62
|
+
Traceback (most recent call last):
|
|
63
|
+
...
|
|
64
|
+
TypeError: parent (= Ring of integers modulo 3) must be an arithmetic subgroup
|
|
65
|
+
sage: sage.modular.arithgroup.arithgroup_element.ArithmeticSubgroupElement(G, [2,0,0,2])
|
|
66
|
+
Traceback (most recent call last):
|
|
67
|
+
...
|
|
68
|
+
TypeError: matrix must have determinant 1
|
|
69
|
+
sage: sage.modular.arithgroup.arithgroup_element.ArithmeticSubgroupElement(G, [2,0,0,2], check=False)
|
|
70
|
+
[2 0]
|
|
71
|
+
[0 2]
|
|
72
|
+
sage: x = Gamma0(11)([2,1,11,6])
|
|
73
|
+
sage: TestSuite(x).run()
|
|
74
|
+
|
|
75
|
+
sage: x = Gamma0(5).0
|
|
76
|
+
sage: SL2Z(x)
|
|
77
|
+
[1 1]
|
|
78
|
+
[0 1]
|
|
79
|
+
sage: x in SL2Z
|
|
80
|
+
True
|
|
81
|
+
"""
|
|
82
|
+
if check:
|
|
83
|
+
from .arithgroup_generic import ArithmeticSubgroup
|
|
84
|
+
if not isinstance(parent, ArithmeticSubgroup):
|
|
85
|
+
raise TypeError("parent (= %s) must be an arithmetic subgroup" % parent)
|
|
86
|
+
|
|
87
|
+
x = M2Z(x, copy=True, coerce=True)
|
|
88
|
+
if x.determinant() != 1:
|
|
89
|
+
raise TypeError("matrix must have determinant 1")
|
|
90
|
+
else:
|
|
91
|
+
x = M2Z(x, copy=True, coerce=False)
|
|
92
|
+
# Getting rid of this would result in a small speed gain for
|
|
93
|
+
# arithmetic operations, but it would have the disadvantage of
|
|
94
|
+
# causing strange and opaque errors when inappropriate data types
|
|
95
|
+
# are used with "check=False".
|
|
96
|
+
|
|
97
|
+
x.set_immutable()
|
|
98
|
+
MultiplicativeGroupElement.__init__(self, parent)
|
|
99
|
+
self.__x = x
|
|
100
|
+
|
|
101
|
+
def __setstate__(self, state):
|
|
102
|
+
r"""
|
|
103
|
+
For unpickling objects pickled with the old ArithmeticSubgroupElement class.
|
|
104
|
+
|
|
105
|
+
EXAMPLES::
|
|
106
|
+
|
|
107
|
+
sage: si = unpickle_newobj(sage.modular.arithgroup.arithgroup_element.ArithmeticSubgroupElement, ())
|
|
108
|
+
sage: x = matrix(ZZ,2,[1,1,0,1])
|
|
109
|
+
sage: unpickle_build(si, (Gamma0(13), {'_ArithmeticSubgroupElement__x': x}))
|
|
110
|
+
"""
|
|
111
|
+
from .congroup_sl2z import SL2Z
|
|
112
|
+
_, kwdict = state
|
|
113
|
+
self._parent = SL2Z
|
|
114
|
+
if '_ArithmeticSubgroupElement__x' in kwdict:
|
|
115
|
+
self.__x = M2Z(kwdict['_ArithmeticSubgroupElement__x'])
|
|
116
|
+
elif '_CongruenceSubgroupElement__x' in kwdict:
|
|
117
|
+
self.__x = M2Z(kwdict['_CongruenceSubgroupElement__x'])
|
|
118
|
+
else:
|
|
119
|
+
raise ValueError("Don't know how to unpickle %s" % repr(state))
|
|
120
|
+
|
|
121
|
+
def __iter__(self):
|
|
122
|
+
"""
|
|
123
|
+
EXAMPLES::
|
|
124
|
+
|
|
125
|
+
sage: Gamma0(2).0
|
|
126
|
+
[1 1]
|
|
127
|
+
[0 1]
|
|
128
|
+
sage: list(Gamma0(2).0)
|
|
129
|
+
[1, 1, 0, 1]
|
|
130
|
+
|
|
131
|
+
Warning: this is different from the iteration on the matrix::
|
|
132
|
+
|
|
133
|
+
sage: list(Gamma0(2).0.matrix())
|
|
134
|
+
[(1, 1), (0, 1)]
|
|
135
|
+
"""
|
|
136
|
+
yield self.__x[0, 0]
|
|
137
|
+
yield self.__x[0, 1]
|
|
138
|
+
yield self.__x[1, 0]
|
|
139
|
+
yield self.__x[1, 1]
|
|
140
|
+
|
|
141
|
+
def __repr__(self):
|
|
142
|
+
r"""
|
|
143
|
+
Return the string representation of ``self``.
|
|
144
|
+
|
|
145
|
+
EXAMPLES::
|
|
146
|
+
|
|
147
|
+
sage: Gamma1(5)([6,1,5,1]).__repr__()
|
|
148
|
+
'[6 1]\n[5 1]'
|
|
149
|
+
"""
|
|
150
|
+
return "%s" % self.__x
|
|
151
|
+
|
|
152
|
+
def _latex_(self):
|
|
153
|
+
r"""
|
|
154
|
+
Return latex representation of ``self``.
|
|
155
|
+
|
|
156
|
+
EXAMPLES::
|
|
157
|
+
|
|
158
|
+
sage: Gamma1(5)([6,1,5,1])._latex_()
|
|
159
|
+
'\\left(\\begin{array}{rr}\n6 & 1 \\\\\n5 & 1\n\\end{array}\\right)'
|
|
160
|
+
"""
|
|
161
|
+
return '%s' % self.__x._latex_()
|
|
162
|
+
|
|
163
|
+
cpdef _richcmp_(self, right_r, int op):
|
|
164
|
+
"""
|
|
165
|
+
Compare ``self`` to ``right``, where ``right`` is guaranteed to have
|
|
166
|
+
the same parent as ``self``.
|
|
167
|
+
|
|
168
|
+
EXAMPLES::
|
|
169
|
+
|
|
170
|
+
sage: x = Gamma0(18)([19,1,18,1])
|
|
171
|
+
sage: x == 3
|
|
172
|
+
False
|
|
173
|
+
sage: x == x
|
|
174
|
+
True
|
|
175
|
+
|
|
176
|
+
sage: x = Gamma0(5)([1,1,0,1])
|
|
177
|
+
sage: y = Gamma0(5)([1,4,0,1])
|
|
178
|
+
sage: x == 0
|
|
179
|
+
False
|
|
180
|
+
sage: x == y
|
|
181
|
+
False
|
|
182
|
+
sage: x != y
|
|
183
|
+
True
|
|
184
|
+
|
|
185
|
+
This once caused a segfault (see :issue:`5443`)::
|
|
186
|
+
|
|
187
|
+
sage: r,s,t,u,v = map(SL2Z, [[1, 1, 0, 1], [-1, 0, 0, -1], [1, -1, 0, 1], [1, -1, 2, -1], [-1, 1, -2, 1]])
|
|
188
|
+
sage: v == s*u
|
|
189
|
+
True
|
|
190
|
+
sage: s*u == v
|
|
191
|
+
True
|
|
192
|
+
"""
|
|
193
|
+
cdef ArithmeticSubgroupElement right = <ArithmeticSubgroupElement>right_r
|
|
194
|
+
return richcmp(self.__x, right.__x, op)
|
|
195
|
+
|
|
196
|
+
def __bool__(self):
|
|
197
|
+
r"""
|
|
198
|
+
Return ``True``, since the ``self`` lives in SL(2,\Z), which does not
|
|
199
|
+
contain the zero matrix.
|
|
200
|
+
|
|
201
|
+
EXAMPLES::
|
|
202
|
+
|
|
203
|
+
sage: x = Gamma0(5)([1,1,0,1])
|
|
204
|
+
sage: bool(x)
|
|
205
|
+
True
|
|
206
|
+
"""
|
|
207
|
+
return True
|
|
208
|
+
|
|
209
|
+
cpdef _mul_(self, right):
|
|
210
|
+
"""
|
|
211
|
+
Return ``self * right``.
|
|
212
|
+
|
|
213
|
+
EXAMPLES::
|
|
214
|
+
|
|
215
|
+
sage: x = Gamma0(7)([1,0,7,1]) * Gamma0(7)([3,2,7,5]) ; x # indirect doctest
|
|
216
|
+
[ 3 2]
|
|
217
|
+
[28 19]
|
|
218
|
+
sage: x.parent()
|
|
219
|
+
Modular Group SL(2,Z)
|
|
220
|
+
|
|
221
|
+
We check that :issue:`5048` is fixed::
|
|
222
|
+
|
|
223
|
+
sage: a = Gamma0(10).1 * Gamma0(5).2; a # random
|
|
224
|
+
sage: a.parent()
|
|
225
|
+
Modular Group SL(2,Z)
|
|
226
|
+
"""
|
|
227
|
+
return self.__class__(self.parent(), self.__x * (<ArithmeticSubgroupElement> right).__x, check=False)
|
|
228
|
+
|
|
229
|
+
def __invert__(self):
|
|
230
|
+
"""
|
|
231
|
+
Return the inverse of ``self``.
|
|
232
|
+
|
|
233
|
+
EXAMPLES::
|
|
234
|
+
|
|
235
|
+
sage: Gamma0(11)([1,-1,0,1]).__invert__()
|
|
236
|
+
[1 1]
|
|
237
|
+
[0 1]
|
|
238
|
+
"""
|
|
239
|
+
return self._parent(
|
|
240
|
+
[self.__x.get_unsafe(1, 1), -self.__x.get_unsafe(0, 1),
|
|
241
|
+
-self.__x.get_unsafe(1, 0), self.__x.get_unsafe(0, 0)],
|
|
242
|
+
check=False)
|
|
243
|
+
|
|
244
|
+
def matrix(self):
|
|
245
|
+
"""
|
|
246
|
+
Return the matrix corresponding to ``self``.
|
|
247
|
+
|
|
248
|
+
EXAMPLES::
|
|
249
|
+
|
|
250
|
+
sage: x = Gamma1(3)([4,5,3,4]) ; x
|
|
251
|
+
[4 5]
|
|
252
|
+
[3 4]
|
|
253
|
+
sage: x.matrix()
|
|
254
|
+
[4 5]
|
|
255
|
+
[3 4]
|
|
256
|
+
sage: type(x.matrix())
|
|
257
|
+
<class 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'>
|
|
258
|
+
"""
|
|
259
|
+
return self.__x
|
|
260
|
+
|
|
261
|
+
def determinant(self):
|
|
262
|
+
"""
|
|
263
|
+
Return the determinant of ``self``, which is always 1.
|
|
264
|
+
|
|
265
|
+
EXAMPLES::
|
|
266
|
+
|
|
267
|
+
sage: Gamma0(691)([1,0,691,1]).determinant()
|
|
268
|
+
1
|
|
269
|
+
"""
|
|
270
|
+
return ZZ.one()
|
|
271
|
+
|
|
272
|
+
def det(self):
|
|
273
|
+
"""
|
|
274
|
+
Return the determinant of ``self``, which is always 1.
|
|
275
|
+
|
|
276
|
+
EXAMPLES::
|
|
277
|
+
|
|
278
|
+
sage: Gamma1(11)([12,11,-11,-10]).det()
|
|
279
|
+
1
|
|
280
|
+
"""
|
|
281
|
+
return self.determinant()
|
|
282
|
+
|
|
283
|
+
def a(self):
|
|
284
|
+
"""
|
|
285
|
+
Return the upper left entry of ``self``.
|
|
286
|
+
|
|
287
|
+
EXAMPLES::
|
|
288
|
+
|
|
289
|
+
sage: Gamma0(13)([7,1,13,2]).a()
|
|
290
|
+
7
|
|
291
|
+
"""
|
|
292
|
+
return self.__x.get_unsafe(0, 0)
|
|
293
|
+
|
|
294
|
+
def b(self):
|
|
295
|
+
"""
|
|
296
|
+
Return the upper right entry of ``self``.
|
|
297
|
+
|
|
298
|
+
EXAMPLES::
|
|
299
|
+
|
|
300
|
+
sage: Gamma0(13)([7,1,13,2]).b()
|
|
301
|
+
1
|
|
302
|
+
"""
|
|
303
|
+
return self.__x.get_unsafe(0, 1)
|
|
304
|
+
|
|
305
|
+
def c(self):
|
|
306
|
+
"""
|
|
307
|
+
Return the lower left entry of ``self``.
|
|
308
|
+
|
|
309
|
+
EXAMPLES::
|
|
310
|
+
|
|
311
|
+
sage: Gamma0(13)([7,1,13,2]).c()
|
|
312
|
+
13
|
|
313
|
+
"""
|
|
314
|
+
return self.__x.get_unsafe(1, 0)
|
|
315
|
+
|
|
316
|
+
def d(self):
|
|
317
|
+
"""
|
|
318
|
+
Return the lower right entry of ``self``.
|
|
319
|
+
|
|
320
|
+
EXAMPLES::
|
|
321
|
+
|
|
322
|
+
sage: Gamma0(13)([7,1,13,2]).d()
|
|
323
|
+
2
|
|
324
|
+
"""
|
|
325
|
+
return self.__x.get_unsafe(1, 1)
|
|
326
|
+
|
|
327
|
+
def acton(self, z):
|
|
328
|
+
"""
|
|
329
|
+
Return the result of the action of ``self`` on z as a fractional linear
|
|
330
|
+
transformation.
|
|
331
|
+
|
|
332
|
+
EXAMPLES::
|
|
333
|
+
|
|
334
|
+
sage: G = Gamma0(15)
|
|
335
|
+
sage: g = G([1, 2, 15, 31])
|
|
336
|
+
|
|
337
|
+
An example of g acting on a symbolic variable::
|
|
338
|
+
|
|
339
|
+
sage: z = var('z') # needs sage.symbolic
|
|
340
|
+
sage: g.acton(z) # needs sage.symbolic
|
|
341
|
+
(z + 2)/(15*z + 31)
|
|
342
|
+
|
|
343
|
+
An example involving the Gaussian numbers::
|
|
344
|
+
|
|
345
|
+
sage: # needs sage.rings.number_field
|
|
346
|
+
sage: x = polygen(ZZ, 'x')
|
|
347
|
+
sage: K.<i> = NumberField(x^2 + 1)
|
|
348
|
+
sage: g.acton(i)
|
|
349
|
+
1/1186*i + 77/1186
|
|
350
|
+
|
|
351
|
+
An example with complex numbers::
|
|
352
|
+
|
|
353
|
+
sage: C.<i> = ComplexField()
|
|
354
|
+
sage: g.acton(i)
|
|
355
|
+
0.0649241146711636 + 0.000843170320404721*I
|
|
356
|
+
|
|
357
|
+
An example with the cusp infinity::
|
|
358
|
+
|
|
359
|
+
sage: g.acton(infinity)
|
|
360
|
+
1/15
|
|
361
|
+
|
|
362
|
+
An example which maps a finite cusp to infinity::
|
|
363
|
+
|
|
364
|
+
sage: g.acton(-31/15)
|
|
365
|
+
+Infinity
|
|
366
|
+
|
|
367
|
+
Note that when acting on instances of cusps the return value
|
|
368
|
+
is still a rational number or infinity (Note the presence of
|
|
369
|
+
'+', which does not show up for cusp instances)::
|
|
370
|
+
|
|
371
|
+
sage: g.acton(Cusp(-31/15))
|
|
372
|
+
+Infinity
|
|
373
|
+
|
|
374
|
+
TESTS:
|
|
375
|
+
|
|
376
|
+
We cover the remaining case, i.e., infinity mapped to infinity::
|
|
377
|
+
|
|
378
|
+
sage: G([1, 4, 0, 1]).acton(infinity)
|
|
379
|
+
+Infinity
|
|
380
|
+
"""
|
|
381
|
+
from sage.rings.infinity import InfinityElement, infinity
|
|
382
|
+
if isinstance(z, InfinityElement):
|
|
383
|
+
if self.c() != 0:
|
|
384
|
+
return self.a() / self.c()
|
|
385
|
+
else:
|
|
386
|
+
return infinity
|
|
387
|
+
if hasattr(z, 'denominator') and hasattr(z, 'numerator'):
|
|
388
|
+
p = z.numerator()
|
|
389
|
+
q = z.denominator()
|
|
390
|
+
P = self.a() * p + self.b() * q
|
|
391
|
+
Q = self.c() * p + self.d() * q
|
|
392
|
+
if not Q and P:
|
|
393
|
+
return infinity
|
|
394
|
+
else:
|
|
395
|
+
return P / Q
|
|
396
|
+
return (self.a() * z + self.b()) / (self.c() * z + self.d())
|
|
397
|
+
|
|
398
|
+
def __getitem__(self, q):
|
|
399
|
+
r"""
|
|
400
|
+
Fetch entries by direct indexing.
|
|
401
|
+
|
|
402
|
+
EXAMPLES::
|
|
403
|
+
|
|
404
|
+
sage: SL2Z([3,2,1,1])[0,0]
|
|
405
|
+
3
|
|
406
|
+
"""
|
|
407
|
+
return self.__x[q]
|
|
408
|
+
|
|
409
|
+
def __hash__(self):
|
|
410
|
+
r"""
|
|
411
|
+
Return a hash value.
|
|
412
|
+
|
|
413
|
+
EXAMPLES::
|
|
414
|
+
|
|
415
|
+
sage: hash(SL2Z.0)
|
|
416
|
+
-8192788425652673914 # 64-bit
|
|
417
|
+
-1995808122 # 32-bit
|
|
418
|
+
"""
|
|
419
|
+
return hash(self.__x)
|
|
420
|
+
|
|
421
|
+
def __reduce__(self):
|
|
422
|
+
r"""
|
|
423
|
+
Used for pickling.
|
|
424
|
+
|
|
425
|
+
EXAMPLES::
|
|
426
|
+
|
|
427
|
+
sage: (SL2Z.1).__reduce__()
|
|
428
|
+
(Modular Group SL(2,Z), (
|
|
429
|
+
[1 1]
|
|
430
|
+
[0 1]
|
|
431
|
+
))
|
|
432
|
+
"""
|
|
433
|
+
from .congroup_sl2z import SL2Z
|
|
434
|
+
return SL2Z, (self.__x,)
|
|
435
|
+
|
|
436
|
+
def multiplicative_order(self):
|
|
437
|
+
r"""
|
|
438
|
+
Return the multiplicative order of this element.
|
|
439
|
+
|
|
440
|
+
EXAMPLES::
|
|
441
|
+
|
|
442
|
+
sage: SL2Z.one().multiplicative_order()
|
|
443
|
+
1
|
|
444
|
+
sage: SL2Z([-1,0,0,-1]).multiplicative_order()
|
|
445
|
+
2
|
|
446
|
+
sage: s,t = SL2Z.gens()
|
|
447
|
+
sage: ((t^3*s*t^2) * s * ~(t^3*s*t^2)).multiplicative_order()
|
|
448
|
+
4
|
|
449
|
+
sage: (t^3 * s * t * t^-3).multiplicative_order()
|
|
450
|
+
6
|
|
451
|
+
sage: (t^3 * s * t * s * t^-2).multiplicative_order()
|
|
452
|
+
3
|
|
453
|
+
sage: SL2Z([2,1,1,1]).multiplicative_order()
|
|
454
|
+
+Infinity
|
|
455
|
+
sage: SL2Z([-2,1,1,-1]).multiplicative_order()
|
|
456
|
+
+Infinity
|
|
457
|
+
"""
|
|
458
|
+
m = self.matrix()
|
|
459
|
+
|
|
460
|
+
if m.is_one():
|
|
461
|
+
return ZZ(1)
|
|
462
|
+
elif (-m).is_one():
|
|
463
|
+
return ZZ(2)
|
|
464
|
+
|
|
465
|
+
t = m.trace()
|
|
466
|
+
if t <= -2 or t >= 2:
|
|
467
|
+
from sage.rings.infinity import infinity
|
|
468
|
+
return infinity
|
|
469
|
+
elif t == 0:
|
|
470
|
+
return ZZ(4)
|
|
471
|
+
elif t == 1:
|
|
472
|
+
return ZZ(6)
|
|
473
|
+
elif t == -1:
|
|
474
|
+
return ZZ(3)
|