passagemath-schemes 10.6.47__cp312-cp312-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. passagemath_schemes/.dylibs/libflint.22.0.dylib +0 -0
  2. passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
  3. passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
  4. passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
  5. passagemath_schemes/__init__.py +3 -0
  6. passagemath_schemes-10.6.47.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.47.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.47.dist-info/RECORD +311 -0
  9. passagemath_schemes-10.6.47.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.47.dist-info/top_level.txt +3 -0
  11. sage/all__sagemath_schemes.py +23 -0
  12. sage/databases/all__sagemath_schemes.py +7 -0
  13. sage/databases/cremona.py +1723 -0
  14. sage/dynamics/all__sagemath_schemes.py +2 -0
  15. sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
  16. sage/dynamics/arithmetic_dynamics/all.py +14 -0
  17. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
  18. sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
  19. sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
  20. sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
  21. sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
  22. sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
  23. sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-312-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +745 -0
  29. sage/lfunctions/pari.py +818 -0
  30. sage/lfunctions/zero_sums.cpython-312-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5135 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
  34. sage/modular/abvar/abvar_newform.py +244 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +186 -0
  37. sage/modular/abvar/cuspidal_subgroup.py +371 -0
  38. sage/modular/abvar/finite_subgroup.py +896 -0
  39. sage/modular/abvar/homology.py +720 -0
  40. sage/modular/abvar/homspace.py +998 -0
  41. sage/modular/abvar/lseries.py +415 -0
  42. sage/modular/abvar/morphism.py +935 -0
  43. sage/modular/abvar/torsion_point.py +274 -0
  44. sage/modular/abvar/torsion_subgroup.py +740 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-312-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1402 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-312-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +363 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +653 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1469 -0
  57. sage/modular/arithgroup/congroup_generic.py +628 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +267 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-312-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1066 -0
  61. sage/modular/arithgroup/tests.py +418 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3753 -0
  64. sage/modular/btquotients/pautomorphicform.py +2570 -0
  65. sage/modular/buzzard.py +100 -0
  66. sage/modular/congroup.py +29 -0
  67. sage/modular/congroup_element.py +13 -0
  68. sage/modular/cusps.py +1109 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +569 -0
  71. sage/modular/dirichlet.py +3310 -0
  72. sage/modular/drinfeld_modform/all.py +2 -0
  73. sage/modular/drinfeld_modform/element.py +446 -0
  74. sage/modular/drinfeld_modform/ring.py +773 -0
  75. sage/modular/drinfeld_modform/tutorial.py +236 -0
  76. sage/modular/etaproducts.py +1065 -0
  77. sage/modular/hecke/algebra.py +746 -0
  78. sage/modular/hecke/all.py +20 -0
  79. sage/modular/hecke/ambient_module.py +1019 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +325 -0
  82. sage/modular/hecke/hecke_operator.py +780 -0
  83. sage/modular/hecke/homspace.py +206 -0
  84. sage/modular/hecke/module.py +1767 -0
  85. sage/modular/hecke/morphism.py +174 -0
  86. sage/modular/hecke/submodule.py +989 -0
  87. sage/modular/hypergeometric_misc.cpython-312-darwin.so +0 -0
  88. sage/modular/hypergeometric_misc.pxd +4 -0
  89. sage/modular/hypergeometric_misc.pyx +166 -0
  90. sage/modular/hypergeometric_motive.py +2017 -0
  91. sage/modular/local_comp/all.py +2 -0
  92. sage/modular/local_comp/liftings.py +292 -0
  93. sage/modular/local_comp/local_comp.py +1071 -0
  94. sage/modular/local_comp/smoothchar.py +1825 -0
  95. sage/modular/local_comp/type_space.py +748 -0
  96. sage/modular/modform/all.py +30 -0
  97. sage/modular/modform/ambient.py +815 -0
  98. sage/modular/modform/ambient_R.py +177 -0
  99. sage/modular/modform/ambient_eps.py +306 -0
  100. sage/modular/modform/ambient_g0.py +124 -0
  101. sage/modular/modform/ambient_g1.py +204 -0
  102. sage/modular/modform/constructor.py +545 -0
  103. sage/modular/modform/cuspidal_submodule.py +708 -0
  104. sage/modular/modform/defaults.py +14 -0
  105. sage/modular/modform/eis_series.py +505 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4131 -0
  108. sage/modular/modform/find_generators.py +59 -0
  109. sage/modular/modform/half_integral.py +154 -0
  110. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  111. sage/modular/modform/j_invariant.py +47 -0
  112. sage/modular/modform/l_series_gross_zagier.py +133 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-312-darwin.so +0 -0
  114. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  115. sage/modular/modform/notes.py +45 -0
  116. sage/modular/modform/numerical.py +514 -0
  117. sage/modular/modform/periods.py +14 -0
  118. sage/modular/modform/ring.py +1257 -0
  119. sage/modular/modform/space.py +1860 -0
  120. sage/modular/modform/submodule.py +118 -0
  121. sage/modular/modform/tests.py +64 -0
  122. sage/modular/modform/theta.py +110 -0
  123. sage/modular/modform/vm_basis.py +381 -0
  124. sage/modular/modform/weight1.py +220 -0
  125. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  126. sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
  127. sage/modular/modform_hecketriangle/all.py +30 -0
  128. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  129. sage/modular/modform_hecketriangle/constructor.py +416 -0
  130. sage/modular/modform_hecketriangle/element.py +351 -0
  131. sage/modular/modform_hecketriangle/functors.py +752 -0
  132. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  133. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
  135. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
  136. sage/modular/modform_hecketriangle/readme.py +1214 -0
  137. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  138. sage/modular/modform_hecketriangle/space.py +1037 -0
  139. sage/modular/modform_hecketriangle/subspace.py +423 -0
  140. sage/modular/modsym/all.py +17 -0
  141. sage/modular/modsym/ambient.py +3846 -0
  142. sage/modular/modsym/boundary.py +1420 -0
  143. sage/modular/modsym/element.py +336 -0
  144. sage/modular/modsym/g1list.py +178 -0
  145. sage/modular/modsym/ghlist.py +182 -0
  146. sage/modular/modsym/hecke_operator.py +73 -0
  147. sage/modular/modsym/manin_symbol.cpython-312-darwin.so +0 -0
  148. sage/modular/modsym/manin_symbol.pxd +5 -0
  149. sage/modular/modsym/manin_symbol.pyx +497 -0
  150. sage/modular/modsym/manin_symbol_list.py +1295 -0
  151. sage/modular/modsym/modsym.py +400 -0
  152. sage/modular/modsym/modular_symbols.py +384 -0
  153. sage/modular/modsym/p1list_nf.py +1241 -0
  154. sage/modular/modsym/relation_matrix.py +591 -0
  155. sage/modular/modsym/relation_matrix_pyx.cpython-312-darwin.so +0 -0
  156. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  157. sage/modular/modsym/space.py +2468 -0
  158. sage/modular/modsym/subspace.py +455 -0
  159. sage/modular/modsym/tests.py +375 -0
  160. sage/modular/multiple_zeta.py +2632 -0
  161. sage/modular/multiple_zeta_F_algebra.py +786 -0
  162. sage/modular/overconvergent/all.py +6 -0
  163. sage/modular/overconvergent/genus0.py +1878 -0
  164. sage/modular/overconvergent/hecke_series.py +1187 -0
  165. sage/modular/overconvergent/weightspace.py +778 -0
  166. sage/modular/pollack_stevens/all.py +4 -0
  167. sage/modular/pollack_stevens/distributions.py +874 -0
  168. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  169. sage/modular/pollack_stevens/manin_map.py +859 -0
  170. sage/modular/pollack_stevens/modsym.py +1593 -0
  171. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  172. sage/modular/pollack_stevens/sigma0.py +534 -0
  173. sage/modular/pollack_stevens/space.py +1076 -0
  174. sage/modular/quasimodform/all.py +3 -0
  175. sage/modular/quasimodform/element.py +845 -0
  176. sage/modular/quasimodform/ring.py +828 -0
  177. sage/modular/quatalg/all.py +3 -0
  178. sage/modular/quatalg/brandt.py +1642 -0
  179. sage/modular/ssmod/all.py +8 -0
  180. sage/modular/ssmod/ssmod.py +827 -0
  181. sage/rings/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  183. sage/rings/polynomial/binary_form_reduce.py +585 -0
  184. sage/schemes/all.py +41 -0
  185. sage/schemes/berkovich/all.py +6 -0
  186. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  187. sage/schemes/berkovich/berkovich_space.py +748 -0
  188. sage/schemes/curves/affine_curve.py +2928 -0
  189. sage/schemes/curves/all.py +33 -0
  190. sage/schemes/curves/closed_point.py +434 -0
  191. sage/schemes/curves/constructor.py +381 -0
  192. sage/schemes/curves/curve.py +542 -0
  193. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  194. sage/schemes/curves/point.py +463 -0
  195. sage/schemes/curves/projective_curve.py +3026 -0
  196. sage/schemes/curves/zariski_vankampen.py +1932 -0
  197. sage/schemes/cyclic_covers/all.py +2 -0
  198. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  199. sage/schemes/cyclic_covers/constructor.py +137 -0
  200. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  201. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  202. sage/schemes/elliptic_curves/BSD.py +1036 -0
  203. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  204. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  205. sage/schemes/elliptic_curves/all.py +49 -0
  206. sage/schemes/elliptic_curves/cardinality.py +609 -0
  207. sage/schemes/elliptic_curves/cm.py +1102 -0
  208. sage/schemes/elliptic_curves/constructor.py +1552 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  214. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  215. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  216. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  217. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  218. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  219. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  221. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  222. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  223. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  224. sage/schemes/elliptic_curves/formal_group.py +760 -0
  225. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  226. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7335 -0
  229. sage/schemes/elliptic_curves/height.py +2109 -0
  230. sage/schemes/elliptic_curves/hom.py +1406 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  232. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  233. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  234. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  235. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  236. sage/schemes/elliptic_curves/homset.py +271 -0
  237. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  238. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  239. sage/schemes/elliptic_curves/jacobian.py +237 -0
  240. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  241. sage/schemes/elliptic_curves/kraus.py +1014 -0
  242. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  243. sage/schemes/elliptic_curves/mod5family.py +105 -0
  244. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  245. sage/schemes/elliptic_curves/mod_sym_num.cpython-312-darwin.so +0 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  247. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  248. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  249. sage/schemes/elliptic_curves/padics.py +1816 -0
  250. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  251. sage/schemes/elliptic_curves/period_lattice_region.cpython-312-darwin.so +0 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  253. sage/schemes/elliptic_curves/saturation.py +715 -0
  254. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  255. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  256. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  257. sage/schemes/hyperelliptic_curves/all.py +6 -0
  258. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  259. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  264. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  265. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  270. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  271. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  272. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  273. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  274. sage/schemes/jacobians/all.py +2 -0
  275. sage/schemes/overview.py +161 -0
  276. sage/schemes/plane_conics/all.py +22 -0
  277. sage/schemes/plane_conics/con_field.py +1296 -0
  278. sage/schemes/plane_conics/con_finite_field.py +158 -0
  279. sage/schemes/plane_conics/con_number_field.py +456 -0
  280. sage/schemes/plane_conics/con_rational_field.py +406 -0
  281. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  282. sage/schemes/plane_conics/constructor.py +249 -0
  283. sage/schemes/plane_quartics/all.py +2 -0
  284. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  285. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  286. sage/schemes/riemann_surfaces/all.py +1 -0
  287. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  288. sage_wheels/share/cremona/cremona_mini.db +0 -0
  289. sage_wheels/share/ellcurves/rank0 +30427 -0
  290. sage_wheels/share/ellcurves/rank1 +31871 -0
  291. sage_wheels/share/ellcurves/rank10 +6 -0
  292. sage_wheels/share/ellcurves/rank11 +6 -0
  293. sage_wheels/share/ellcurves/rank12 +1 -0
  294. sage_wheels/share/ellcurves/rank14 +1 -0
  295. sage_wheels/share/ellcurves/rank15 +1 -0
  296. sage_wheels/share/ellcurves/rank17 +1 -0
  297. sage_wheels/share/ellcurves/rank19 +1 -0
  298. sage_wheels/share/ellcurves/rank2 +2388 -0
  299. sage_wheels/share/ellcurves/rank20 +1 -0
  300. sage_wheels/share/ellcurves/rank21 +1 -0
  301. sage_wheels/share/ellcurves/rank22 +1 -0
  302. sage_wheels/share/ellcurves/rank23 +1 -0
  303. sage_wheels/share/ellcurves/rank24 +1 -0
  304. sage_wheels/share/ellcurves/rank28 +1 -0
  305. sage_wheels/share/ellcurves/rank3 +836 -0
  306. sage_wheels/share/ellcurves/rank4 +10 -0
  307. sage_wheels/share/ellcurves/rank5 +5 -0
  308. sage_wheels/share/ellcurves/rank6 +5 -0
  309. sage_wheels/share/ellcurves/rank7 +5 -0
  310. sage_wheels/share/ellcurves/rank8 +6 -0
  311. 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
@@ -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)