passagemath-schemes 10.6.38__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.
Potentially problematic release.
This version of passagemath-schemes might be problematic. Click here for more details.
- passagemath_schemes/.dylibs/libflint.21.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.38.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.38.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.38.dist-info/RECORD +314 -0
- passagemath_schemes-10.6.38.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.38.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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-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 +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-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 +1295 -0
- sage/modular/modsym/modsym.py +400 -0
- sage/modular/modsym/modular_symbols.py +384 -0
- sage/modular/modsym/p1list.cpython-314t-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-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 +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-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 +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,267 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
r"""
|
|
3
|
+
The modular group `\SL_2(\ZZ)`
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Niles Johnson (2010-08): :issue:`3893`: ``random_element()`` should pass on ``*args`` and ``**kwds``.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
################################################################################
|
|
11
|
+
#
|
|
12
|
+
# Copyright (C) 2009, The Sage Group -- http://www.sagemath.org/
|
|
13
|
+
#
|
|
14
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
15
|
+
#
|
|
16
|
+
# The full text of the GPL is available at:
|
|
17
|
+
#
|
|
18
|
+
# https://www.gnu.org/licenses/
|
|
19
|
+
#
|
|
20
|
+
################################################################################
|
|
21
|
+
|
|
22
|
+
from sage.arith.misc import gcd
|
|
23
|
+
from sage.modular.cusps import Cusp
|
|
24
|
+
from sage.modular.modsym.p1list import lift_to_sl2z
|
|
25
|
+
from sage.rings.integer_ring import ZZ
|
|
26
|
+
|
|
27
|
+
from .congroup_gamma0 import Gamma0_class
|
|
28
|
+
from .arithgroup_element import ArithmeticSubgroupElement
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def is_SL2Z(x):
|
|
32
|
+
r"""
|
|
33
|
+
Return ``True`` if x is the modular group `\SL_2(\ZZ)`.
|
|
34
|
+
|
|
35
|
+
EXAMPLES::
|
|
36
|
+
|
|
37
|
+
sage: from sage.modular.arithgroup.all import is_SL2Z
|
|
38
|
+
sage: is_SL2Z(SL2Z)
|
|
39
|
+
doctest:warning...
|
|
40
|
+
DeprecationWarning: The function is_SL2Z is deprecated; use 'isinstance(..., SL2Z_class)' instead.
|
|
41
|
+
See https://github.com/sagemath/sage/issues/38035 for details.
|
|
42
|
+
True
|
|
43
|
+
sage: is_SL2Z(Gamma0(6))
|
|
44
|
+
False
|
|
45
|
+
"""
|
|
46
|
+
from sage.misc.superseded import deprecation
|
|
47
|
+
deprecation(38035, "The function is_SL2Z is deprecated; use 'isinstance(..., SL2Z_class)' instead.")
|
|
48
|
+
return isinstance(x, SL2Z_class)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class SL2Z_class(Gamma0_class):
|
|
52
|
+
r"""
|
|
53
|
+
The full modular group `\SL_2(\ZZ)`, regarded as a congruence
|
|
54
|
+
subgroup of itself.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
def __init__(self):
|
|
58
|
+
r"""
|
|
59
|
+
The modular group `\SL_2(\Z)`.
|
|
60
|
+
|
|
61
|
+
EXAMPLES::
|
|
62
|
+
|
|
63
|
+
sage: G = SL2Z; G
|
|
64
|
+
Modular Group SL(2,Z)
|
|
65
|
+
sage: G.gens()
|
|
66
|
+
(
|
|
67
|
+
[ 0 -1] [1 1]
|
|
68
|
+
[ 1 0], [0 1]
|
|
69
|
+
)
|
|
70
|
+
sage: G.0
|
|
71
|
+
[ 0 -1]
|
|
72
|
+
[ 1 0]
|
|
73
|
+
sage: G.1
|
|
74
|
+
[1 1]
|
|
75
|
+
[0 1]
|
|
76
|
+
sage: latex(G)
|
|
77
|
+
\mbox{\rm SL}_2(\Bold{Z})
|
|
78
|
+
sage: G([1,-1,0,1])
|
|
79
|
+
[ 1 -1]
|
|
80
|
+
[ 0 1]
|
|
81
|
+
sage: TestSuite(G).run()
|
|
82
|
+
sage: SL2Z.0 * SL2Z.1
|
|
83
|
+
[ 0 -1]
|
|
84
|
+
[ 1 1]
|
|
85
|
+
sage: SL2Z is loads(dumps(SL2Z))
|
|
86
|
+
True
|
|
87
|
+
"""
|
|
88
|
+
Gamma0_class.__init__(self, 1)
|
|
89
|
+
|
|
90
|
+
def __reduce__(self):
|
|
91
|
+
"""
|
|
92
|
+
Used for pickling ``self``.
|
|
93
|
+
|
|
94
|
+
EXAMPLES::
|
|
95
|
+
|
|
96
|
+
sage: SL2Z.__reduce__()
|
|
97
|
+
(<function _SL2Z_ref at ...>, ())
|
|
98
|
+
"""
|
|
99
|
+
return _SL2Z_ref, ()
|
|
100
|
+
|
|
101
|
+
def _element_constructor_(self, x, check=True):
|
|
102
|
+
r"""
|
|
103
|
+
Create an element of ``self`` from x, which must be something that can be
|
|
104
|
+
coerced into a 2x2 integer matrix. If ``check=True`` (the default), check
|
|
105
|
+
that x really has determinant 1.
|
|
106
|
+
|
|
107
|
+
EXAMPLES::
|
|
108
|
+
|
|
109
|
+
sage: SL2Z([1,0,0,1]) # indirect doctest
|
|
110
|
+
[1 0]
|
|
111
|
+
[0 1]
|
|
112
|
+
sage: SL2Z([2, 0, 0, 2], check=False) # don't do this!
|
|
113
|
+
[2 0]
|
|
114
|
+
[0 2]
|
|
115
|
+
sage: SL2Z([1, QQ, False])
|
|
116
|
+
Traceback (most recent call last):
|
|
117
|
+
...
|
|
118
|
+
TypeError: unable to coerce <class 'sage.rings.rational_field.RationalField_with_category'> to an integer
|
|
119
|
+
"""
|
|
120
|
+
return ArithmeticSubgroupElement(self, x, check=check)
|
|
121
|
+
|
|
122
|
+
def _contains_sl2(self, a, b, c, d):
|
|
123
|
+
r"""
|
|
124
|
+
Test whether [a,b,c,d] is an element of self, where a,b,c,d are integers with `ad-bc=1`. In other words, always return True.
|
|
125
|
+
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: [8,7,9,8] in SL2Z # indirect doctest
|
|
129
|
+
True
|
|
130
|
+
"""
|
|
131
|
+
return True
|
|
132
|
+
|
|
133
|
+
def _repr_(self):
|
|
134
|
+
"""
|
|
135
|
+
Return the string representation of ``self``.
|
|
136
|
+
|
|
137
|
+
EXAMPLES::
|
|
138
|
+
|
|
139
|
+
sage: SL2Z._repr_()
|
|
140
|
+
'Modular Group SL(2,Z)'
|
|
141
|
+
"""
|
|
142
|
+
return "Modular Group SL(2,Z)"
|
|
143
|
+
|
|
144
|
+
def _latex_(self) -> str:
|
|
145
|
+
r"""
|
|
146
|
+
Return the \LaTeX representation of ``self``.
|
|
147
|
+
|
|
148
|
+
EXAMPLES::
|
|
149
|
+
|
|
150
|
+
sage: SL2Z._latex_()
|
|
151
|
+
'\\mbox{\\rm SL}_2(\\Bold{Z})'
|
|
152
|
+
sage: latex(SL2Z)
|
|
153
|
+
\mbox{\rm SL}_2(\Bold{Z})
|
|
154
|
+
"""
|
|
155
|
+
return "\\mbox{\\rm SL}_2(%s)" % (ZZ._latex_())
|
|
156
|
+
|
|
157
|
+
def is_subgroup(self, right) -> bool:
|
|
158
|
+
"""
|
|
159
|
+
Return ``True`` if ``self`` is a subgroup of ``right``.
|
|
160
|
+
|
|
161
|
+
EXAMPLES::
|
|
162
|
+
|
|
163
|
+
sage: SL2Z.is_subgroup(SL2Z)
|
|
164
|
+
True
|
|
165
|
+
sage: SL2Z.is_subgroup(Gamma1(1))
|
|
166
|
+
True
|
|
167
|
+
sage: SL2Z.is_subgroup(Gamma0(6))
|
|
168
|
+
False
|
|
169
|
+
"""
|
|
170
|
+
return right.level() == 1
|
|
171
|
+
|
|
172
|
+
def reduce_cusp(self, c):
|
|
173
|
+
r"""
|
|
174
|
+
Return the unique reduced cusp equivalent to c under the
|
|
175
|
+
action of ``self``. Always returns Infinity, since there is only
|
|
176
|
+
one equivalence class of cusps for `SL_2(Z)`.
|
|
177
|
+
|
|
178
|
+
EXAMPLES::
|
|
179
|
+
|
|
180
|
+
sage: SL2Z.reduce_cusp(Cusps(-1/4))
|
|
181
|
+
Infinity
|
|
182
|
+
"""
|
|
183
|
+
return Cusp(1,0)
|
|
184
|
+
|
|
185
|
+
def random_element(self, bound=100, *args, **kwds):
|
|
186
|
+
r"""
|
|
187
|
+
Return a random element of `\SL_2(\ZZ)` with entries whose
|
|
188
|
+
absolute value is strictly less than bound (default: 100).
|
|
189
|
+
Additional arguments and keywords are passed to the random_element
|
|
190
|
+
method of ZZ.
|
|
191
|
+
|
|
192
|
+
(Algorithm: Generate a random pair of integers at most bound. If they
|
|
193
|
+
are not coprime, throw them away and start again. If they are, find an
|
|
194
|
+
element of `\SL_2(\ZZ)` whose bottom row is that, and
|
|
195
|
+
left-multiply it by `\begin{pmatrix} 1 & w \\ 0 & 1\end{pmatrix}` for
|
|
196
|
+
an integer `w` randomly chosen from a small enough range that the
|
|
197
|
+
answer still has entries at most bound.)
|
|
198
|
+
|
|
199
|
+
It is, unfortunately, not true that all elements of SL2Z with entries <
|
|
200
|
+
bound appear with equal probability; those with larger bottom rows are
|
|
201
|
+
favoured, because there are fewer valid possibilities for w.
|
|
202
|
+
|
|
203
|
+
EXAMPLES::
|
|
204
|
+
|
|
205
|
+
sage: s = SL2Z.random_element()
|
|
206
|
+
sage: s.parent() is SL2Z
|
|
207
|
+
True
|
|
208
|
+
sage: all(a in range(-99, 100) for a in list(s))
|
|
209
|
+
True
|
|
210
|
+
sage: S = set()
|
|
211
|
+
sage: while len(S) < 180:
|
|
212
|
+
....: s = SL2Z.random_element(5)
|
|
213
|
+
....: assert all(a in range(-4, 5) for a in list(s))
|
|
214
|
+
....: assert s.parent() is SL2Z
|
|
215
|
+
....: assert s in SL2Z
|
|
216
|
+
....: S.add(s)
|
|
217
|
+
|
|
218
|
+
Passes extra positional or keyword arguments through::
|
|
219
|
+
|
|
220
|
+
sage: SL2Z.random_element(5, distribution='1/n').parent() is SL2Z
|
|
221
|
+
True
|
|
222
|
+
"""
|
|
223
|
+
if bound <= 1:
|
|
224
|
+
raise ValueError("bound must be greater than 1")
|
|
225
|
+
c = ZZ.random_element(1-bound, bound, *args, **kwds)
|
|
226
|
+
d = ZZ.random_element(1-bound, bound, *args, **kwds)
|
|
227
|
+
if gcd(c,d) != 1: # try again
|
|
228
|
+
return self.random_element(bound, *args, **kwds)
|
|
229
|
+
else:
|
|
230
|
+
a,b,c,d = lift_to_sl2z(c,d,0)
|
|
231
|
+
whi = bound
|
|
232
|
+
wlo = bound
|
|
233
|
+
if c > 0:
|
|
234
|
+
whi = min(whi, ((bound - a)/ZZ(c)).ceil())
|
|
235
|
+
wlo = min(wlo, ((bound + a)/ZZ(c)).ceil())
|
|
236
|
+
elif c < 0:
|
|
237
|
+
whi = min(whi, ((bound + a)/ZZ(-c)).ceil())
|
|
238
|
+
wlo = min(wlo, ((bound - a)/ZZ(-c)).ceil())
|
|
239
|
+
|
|
240
|
+
if d > 0:
|
|
241
|
+
whi = min(whi, ((bound - b)/ZZ(d)).ceil())
|
|
242
|
+
wlo = min(wlo, ((bound + b)/ZZ(d)).ceil())
|
|
243
|
+
elif d < 0:
|
|
244
|
+
whi = min(whi, ((bound + b)/ZZ(-d)).ceil())
|
|
245
|
+
wlo = min(wlo, ((bound - b)/ZZ(-d)).ceil())
|
|
246
|
+
|
|
247
|
+
w = ZZ.random_element(1-wlo, whi, *args, **kwds)
|
|
248
|
+
a += c*w
|
|
249
|
+
b += d*w
|
|
250
|
+
return self([a,b,c,d])
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
SL2Z = SL2Z_class()
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def _SL2Z_ref():
|
|
257
|
+
"""
|
|
258
|
+
Return SL2Z. (Used for pickling SL2Z.).
|
|
259
|
+
|
|
260
|
+
EXAMPLES::
|
|
261
|
+
|
|
262
|
+
sage: sage.modular.arithgroup.congroup_sl2z._SL2Z_ref()
|
|
263
|
+
Modular Group SL(2,Z)
|
|
264
|
+
sage: sage.modular.arithgroup.congroup_sl2z._SL2Z_ref() is SL2Z
|
|
265
|
+
True
|
|
266
|
+
"""
|
|
267
|
+
return SL2Z
|
|
Binary file
|