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.

Files changed (314) 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.40.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.40.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.40.dist-info/RECORD +314 -0
  9. passagemath_schemes-10.6.40.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.40.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-314-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-314-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-314-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-314-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-314-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-314-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-314-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-314-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.cpython-314-darwin.so +0 -0
  154. sage/modular/modsym/p1list.pxd +29 -0
  155. sage/modular/modsym/p1list.pyx +1372 -0
  156. sage/modular/modsym/p1list_nf.py +1241 -0
  157. sage/modular/modsym/relation_matrix.py +591 -0
  158. sage/modular/modsym/relation_matrix_pyx.cpython-314-darwin.so +0 -0
  159. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  160. sage/modular/modsym/space.py +2468 -0
  161. sage/modular/modsym/subspace.py +455 -0
  162. sage/modular/modsym/tests.py +375 -0
  163. sage/modular/multiple_zeta.py +2632 -0
  164. sage/modular/multiple_zeta_F_algebra.py +786 -0
  165. sage/modular/overconvergent/all.py +6 -0
  166. sage/modular/overconvergent/genus0.py +1878 -0
  167. sage/modular/overconvergent/hecke_series.py +1187 -0
  168. sage/modular/overconvergent/weightspace.py +778 -0
  169. sage/modular/pollack_stevens/all.py +4 -0
  170. sage/modular/pollack_stevens/distributions.py +874 -0
  171. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  172. sage/modular/pollack_stevens/manin_map.py +859 -0
  173. sage/modular/pollack_stevens/modsym.py +1593 -0
  174. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  175. sage/modular/pollack_stevens/sigma0.py +534 -0
  176. sage/modular/pollack_stevens/space.py +1076 -0
  177. sage/modular/quasimodform/all.py +3 -0
  178. sage/modular/quasimodform/element.py +845 -0
  179. sage/modular/quasimodform/ring.py +828 -0
  180. sage/modular/quatalg/all.py +3 -0
  181. sage/modular/quatalg/brandt.py +1642 -0
  182. sage/modular/ssmod/all.py +8 -0
  183. sage/modular/ssmod/ssmod.py +827 -0
  184. sage/rings/all__sagemath_schemes.py +1 -0
  185. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  186. sage/rings/polynomial/binary_form_reduce.py +585 -0
  187. sage/schemes/all.py +41 -0
  188. sage/schemes/berkovich/all.py +6 -0
  189. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  190. sage/schemes/berkovich/berkovich_space.py +748 -0
  191. sage/schemes/curves/affine_curve.py +2928 -0
  192. sage/schemes/curves/all.py +33 -0
  193. sage/schemes/curves/closed_point.py +434 -0
  194. sage/schemes/curves/constructor.py +381 -0
  195. sage/schemes/curves/curve.py +542 -0
  196. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  197. sage/schemes/curves/point.py +463 -0
  198. sage/schemes/curves/projective_curve.py +3026 -0
  199. sage/schemes/curves/zariski_vankampen.py +1932 -0
  200. sage/schemes/cyclic_covers/all.py +2 -0
  201. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  202. sage/schemes/cyclic_covers/constructor.py +137 -0
  203. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  204. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  205. sage/schemes/elliptic_curves/BSD.py +1036 -0
  206. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  207. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  208. sage/schemes/elliptic_curves/all.py +49 -0
  209. sage/schemes/elliptic_curves/cardinality.py +609 -0
  210. sage/schemes/elliptic_curves/cm.py +1102 -0
  211. sage/schemes/elliptic_curves/constructor.py +1552 -0
  212. sage/schemes/elliptic_curves/ec_database.py +175 -0
  213. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  214. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  215. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  216. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  217. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  218. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  219. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  220. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  221. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  222. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  223. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  224. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  225. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  226. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  227. sage/schemes/elliptic_curves/formal_group.py +760 -0
  228. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  229. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  230. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  231. sage/schemes/elliptic_curves/heegner.py +7335 -0
  232. sage/schemes/elliptic_curves/height.py +2109 -0
  233. sage/schemes/elliptic_curves/hom.py +1406 -0
  234. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  235. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  236. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  237. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  238. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  239. sage/schemes/elliptic_curves/homset.py +271 -0
  240. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  241. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  242. sage/schemes/elliptic_curves/jacobian.py +237 -0
  243. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  244. sage/schemes/elliptic_curves/kraus.py +1014 -0
  245. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  246. sage/schemes/elliptic_curves/mod5family.py +105 -0
  247. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  248. sage/schemes/elliptic_curves/mod_sym_num.cpython-314-darwin.so +0 -0
  249. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  250. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  251. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  252. sage/schemes/elliptic_curves/padics.py +1816 -0
  253. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  254. sage/schemes/elliptic_curves/period_lattice_region.cpython-314-darwin.so +0 -0
  255. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  256. sage/schemes/elliptic_curves/saturation.py +715 -0
  257. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  258. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  259. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  260. sage/schemes/hyperelliptic_curves/all.py +6 -0
  261. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  264. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  265. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  266. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  267. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  270. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  271. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  272. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  273. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  274. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  275. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  276. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  277. sage/schemes/jacobians/all.py +2 -0
  278. sage/schemes/overview.py +161 -0
  279. sage/schemes/plane_conics/all.py +22 -0
  280. sage/schemes/plane_conics/con_field.py +1296 -0
  281. sage/schemes/plane_conics/con_finite_field.py +158 -0
  282. sage/schemes/plane_conics/con_number_field.py +456 -0
  283. sage/schemes/plane_conics/con_rational_field.py +406 -0
  284. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  285. sage/schemes/plane_conics/constructor.py +249 -0
  286. sage/schemes/plane_quartics/all.py +2 -0
  287. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  288. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  289. sage/schemes/riemann_surfaces/all.py +1 -0
  290. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  291. sage_wheels/share/cremona/cremona_mini.db +0 -0
  292. sage_wheels/share/ellcurves/rank0 +30427 -0
  293. sage_wheels/share/ellcurves/rank1 +31871 -0
  294. sage_wheels/share/ellcurves/rank10 +6 -0
  295. sage_wheels/share/ellcurves/rank11 +6 -0
  296. sage_wheels/share/ellcurves/rank12 +1 -0
  297. sage_wheels/share/ellcurves/rank14 +1 -0
  298. sage_wheels/share/ellcurves/rank15 +1 -0
  299. sage_wheels/share/ellcurves/rank17 +1 -0
  300. sage_wheels/share/ellcurves/rank19 +1 -0
  301. sage_wheels/share/ellcurves/rank2 +2388 -0
  302. sage_wheels/share/ellcurves/rank20 +1 -0
  303. sage_wheels/share/ellcurves/rank21 +1 -0
  304. sage_wheels/share/ellcurves/rank22 +1 -0
  305. sage_wheels/share/ellcurves/rank23 +1 -0
  306. sage_wheels/share/ellcurves/rank24 +1 -0
  307. sage_wheels/share/ellcurves/rank28 +1 -0
  308. sage_wheels/share/ellcurves/rank3 +836 -0
  309. sage_wheels/share/ellcurves/rank4 +10 -0
  310. sage_wheels/share/ellcurves/rank5 +5 -0
  311. sage_wheels/share/ellcurves/rank6 +5 -0
  312. sage_wheels/share/ellcurves/rank7 +5 -0
  313. sage_wheels/share/ellcurves/rank8 +6 -0
  314. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,2 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ from sage.modular.local_comp.local_comp import LocalComponent
@@ -0,0 +1,292 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ r"""
3
+ Helper functions for local components
4
+
5
+ This module contains various functions relating to lifting elements of
6
+ `\SL_2(\ZZ / N\ZZ)` to `\SL_2(\ZZ)`, and other related
7
+ problems.
8
+ """
9
+
10
+ from sage.rings.integer_ring import ZZ
11
+ from sage.arith.misc import crt, inverse_mod
12
+ from sage.modular.modsym.p1list import lift_to_sl2z
13
+
14
+
15
+ def lift_to_gamma1(g, m, n):
16
+ r"""
17
+ If ``g = [a,b,c,d]`` is a list of integers defining a `2 \times 2` matrix
18
+ whose determinant is `1 \pmod m`, return a list of integers giving the
19
+ entries of a matrix which is congruent to `g \pmod m` and to
20
+ `\begin{pmatrix} 1 & * \\ 0 & 1 \end{pmatrix} \pmod n`. Here `m` and `n`
21
+ must be coprime.
22
+
23
+ INPUT:
24
+
25
+ - ``g`` -- list of 4 integers defining a `2 \times 2` matrix
26
+
27
+ - `m`, `n` -- coprime positive integers
28
+
29
+ Here `m` and `n` should be coprime positive integers. Either of `m` and `n`
30
+ can be `1`. If `n = 1`, this still makes perfect sense; this is what is
31
+ called by the function :func:`~lift_matrix_to_sl2z`. If `m = 1` this is a
32
+ rather silly question, so we adopt the convention of always returning the
33
+ identity matrix.
34
+
35
+ The result is always a list of Sage integers (unlike ``lift_to_sl2z``,
36
+ which tends to return Python ints).
37
+
38
+ EXAMPLES::
39
+
40
+ sage: from sage.modular.local_comp.liftings import lift_to_gamma1
41
+ sage: A = matrix(ZZ, 2, lift_to_gamma1([10, 11, 3, 11], 19, 5)); A
42
+ [371 68]
43
+ [ 60 11]
44
+ sage: A.det() == 1
45
+ True
46
+ sage: A.change_ring(Zmod(19))
47
+ [10 11]
48
+ [ 3 11]
49
+ sage: A.change_ring(Zmod(5))
50
+ [1 3]
51
+ [0 1]
52
+ sage: m = list(SL2Z.random_element())
53
+ sage: n = lift_to_gamma1(m, 11, 17)
54
+ sage: assert matrix(Zmod(11), 2, n) == matrix(Zmod(11),2,m)
55
+ sage: assert matrix(Zmod(17), 2, [n[0], 0, n[2], n[3]]) == 1
56
+ sage: type(lift_to_gamma1([10,11,3,11],19,5)[0])
57
+ <class 'sage.rings.integer.Integer'>
58
+
59
+ Tests with `m = 1` and with `n = 1`::
60
+
61
+ sage: lift_to_gamma1([1,1,0,1], 5, 1)
62
+ [1, 1, 0, 1]
63
+ sage: lift_to_gamma1([2,3,11,22], 1, 5)
64
+ [1, 0, 0, 1]
65
+ """
66
+ if m == 1:
67
+ return [ZZ.one(), ZZ.zero(), ZZ.zero(), ZZ.one()]
68
+ a, b, c, d = (ZZ(x) for x in g)
69
+ det = (a * d - b * c) % m
70
+ if det != 1:
71
+ raise ValueError("Determinant is {0} mod {1}, should be 1".format(det, m))
72
+ c2 = crt(c, 0, m, n)
73
+ d2 = crt(d, 1, m, n)
74
+ a3,b3,c3,d3 = (ZZ(_) for _ in lift_to_sl2z(c2, d2, m * n))
75
+ r = (a3*b - b3*a) % m
76
+ return [a3 + r * c3, b3 + r * d3, c3, d3]
77
+
78
+
79
+ def lift_matrix_to_sl2z(A, N):
80
+ r"""
81
+ Given a list of length 4 representing a 2x2 matrix over `\ZZ / N\ZZ` with
82
+ determinant 1 (mod `N`), lift it to a 2x2 matrix over `\ZZ` with
83
+ determinant 1.
84
+
85
+ This is a special case of :func:`~lift_to_gamma1`, and is coded as such.
86
+
87
+ INPUT:
88
+
89
+ - ``A`` -- list of 4 integers defining a `2 \times 2` matrix
90
+
91
+ - ``N`` -- positive integer
92
+
93
+ EXAMPLES::
94
+
95
+ sage: from sage.modular.local_comp.liftings import lift_matrix_to_sl2z
96
+ sage: lift_matrix_to_sl2z([10, 11, 3, 11], 19)
97
+ [29, 106, 3, 11]
98
+ sage: type(_[0])
99
+ <class 'sage.rings.integer.Integer'>
100
+ sage: lift_matrix_to_sl2z([2,0,0,1], 5)
101
+ Traceback (most recent call last):
102
+ ...
103
+ ValueError: Determinant is 2 mod 5, should be 1
104
+ """
105
+ return lift_to_gamma1(A, N, 1)
106
+
107
+
108
+ def lift_gen_to_gamma1(m, n):
109
+ r"""
110
+ Return four integers defining a matrix in `\SL_2(\ZZ)` which is
111
+ congruent to `\begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix} \pmod m` and
112
+ lies in the subgroup `\begin{pmatrix} 1 & * \\ 0 & 1 \end{pmatrix} \pmod
113
+ n`.
114
+
115
+ This is a special case of :func:`~lift_to_gamma1`, and is coded as such.
116
+
117
+ INPUT:
118
+
119
+ - `m`, `n` -- coprime positive integers
120
+
121
+ EXAMPLES::
122
+
123
+ sage: from sage.modular.local_comp.liftings import lift_gen_to_gamma1
124
+ sage: A = matrix(ZZ, 2, lift_gen_to_gamma1(9, 8)); A
125
+ [441 62]
126
+ [ 64 9]
127
+ sage: A.change_ring(Zmod(9))
128
+ [0 8]
129
+ [1 0]
130
+ sage: A.change_ring(Zmod(8))
131
+ [1 6]
132
+ [0 1]
133
+ sage: type(lift_gen_to_gamma1(9, 8)[0])
134
+ <class 'sage.rings.integer.Integer'>
135
+ """
136
+ return lift_to_gamma1([0,-1,1,0], m, n)
137
+
138
+
139
+ def lift_uniformiser_odd(p, u, n):
140
+ r"""
141
+ Construct a matrix over `\ZZ` whose determinant is `p`, and which is
142
+ congruent to `\begin{pmatrix} 0 & -1 \\ p & 0 \end{pmatrix} \pmod{p^u}` and
143
+ to `\begin{pmatrix} p & 0 \\ 0 & 1\end{pmatrix} \pmod n`.
144
+
145
+ This is required for the local components machinery in the "ramified" case
146
+ (when the exponent of `p` dividing the level is odd).
147
+
148
+ EXAMPLES::
149
+
150
+ sage: from sage.modular.local_comp.liftings import lift_uniformiser_odd
151
+ sage: lift_uniformiser_odd(3, 2, 11)
152
+ [432, 377, 165, 144]
153
+ sage: type(lift_uniformiser_odd(3, 2, 11)[0])
154
+ <class 'sage.rings.integer.Integer'>
155
+ """
156
+ g = lift_gen_to_gamma1(p**u, n)
157
+ return [p * g[0], g[1], p * g[2], g[3]]
158
+
159
+
160
+ def lift_ramified(g, p, u, n):
161
+ r"""
162
+ Given four integers `a,b,c,d` with `p \mid c` and `ad - bc = 1 \pmod{p^u}`,
163
+ find `a',b',c',d'` congruent to `a,b,c,d \pmod{p^u}`, with `c' = c
164
+ \pmod{p^{u+1}}`, such that `a'd' - b'c'` is exactly 1, and `\begin{pmatrix}
165
+ a & b \\ c & d \end{pmatrix}` is in `\Gamma_1(n)`.
166
+
167
+ Algorithm: Uses :func:`~lift_to_gamma1` to get a lifting modulo `p^u`, and
168
+ then adds an appropriate multiple of the top row to the bottom row in order
169
+ to get the bottom-left entry correct modulo `p^{u+1}`.
170
+
171
+ EXAMPLES::
172
+
173
+ sage: from sage.modular.local_comp.liftings import lift_ramified
174
+ sage: lift_ramified([2,2,3,2], 3, 1, 1)
175
+ [-1, -1, 3, 2]
176
+ sage: lift_ramified([8,2,12,2], 3, 2, 23)
177
+ [323, 110, -133584, -45493]
178
+ sage: type(lift_ramified([8,2,12,2], 3, 2, 23)[0])
179
+ <class 'sage.rings.integer.Integer'>
180
+ """
181
+ a, b, c, d = lift_to_gamma1(g, p**u, n)
182
+ r = crt((c - g[2]) / p**u * inverse_mod(a, p), 0, p, n)
183
+ c = c - p**u * r * a
184
+ d = d - p**u * r * b
185
+ # assert (c - g[2]) % p**(u+1) == 0
186
+ return [a, b, c, d]
187
+
188
+
189
+ def lift_for_SL(A, N=None):
190
+ r"""
191
+ Lift a matrix `A` from `SL_m(\ZZ / N\ZZ)` to `SL_m(\ZZ)`.
192
+
193
+ This follows [Shi1971]_, Lemma 1.38, p. 21.
194
+
195
+ INPUT:
196
+
197
+ - ``A`` -- a square matrix with coefficients in `\ZZ / N\ZZ` (or `\ZZ`)
198
+
199
+ - ``N`` -- the modulus (optional) required only if the matrix ``A``
200
+ has coefficients in `\ZZ`
201
+
202
+ EXAMPLES::
203
+
204
+ sage: from sage.modular.local_comp.liftings import lift_for_SL
205
+ sage: A = matrix(Zmod(11), 4, 4, [6, 0, 0, 9, 1, 6, 9, 4, 4, 4, 8, 0, 4, 0, 0, 8])
206
+ sage: A.det()
207
+ 1
208
+ sage: L = lift_for_SL(A)
209
+ sage: L.det()
210
+ 1
211
+ sage: (L - A) == 0
212
+ True
213
+
214
+ sage: B = matrix(Zmod(19), 4, 4, [1, 6, 10, 4, 4, 14, 15, 4, 13, 0, 1, 15, 15, 15, 17, 10])
215
+ sage: B.det()
216
+ 1
217
+ sage: L = lift_for_SL(B)
218
+ sage: L.det()
219
+ 1
220
+ sage: (L - B) == 0
221
+ True
222
+
223
+ TESTS::
224
+
225
+ sage: lift_for_SL(matrix(3,3,[1,2,0,3,4,0,0,0,1]),3)
226
+ [-2 -1 0]
227
+ [ 0 1 -3]
228
+ [ 3 0 4]
229
+
230
+ sage: A = matrix(Zmod(7), 2, [1,0,0,1])
231
+ sage: L = lift_for_SL(A)
232
+ sage: L.parent()
233
+ Full MatrixSpace of 2 by 2 dense matrices over Integer Ring
234
+
235
+ sage: A = matrix(Zmod(7), 1, [1])
236
+ sage: L = lift_for_SL(A); L
237
+ [1]
238
+
239
+ sage: A = matrix(ZZ, 2, [1,0,0,1])
240
+ sage: lift_for_SL(A)
241
+ Traceback (most recent call last):
242
+ ...
243
+ ValueError: you must choose the modulus
244
+
245
+ sage: for _ in range(100):
246
+ ....: d = randint(0, 10)
247
+ ....: p = choice([2,3,5,7,11])
248
+ ....: M = random_matrix(Zmod(p), d, algorithm='unimodular')
249
+ ....: assert lift_for_SL(M).det() == 1
250
+ """
251
+ from sage.matrix.special import (identity_matrix, diagonal_matrix,
252
+ block_diagonal_matrix)
253
+ from sage.misc.misc_c import prod
254
+
255
+ ring = A.parent().base_ring()
256
+ if N is None:
257
+ if ring is ZZ:
258
+ raise ValueError('you must choose the modulus')
259
+ else:
260
+ N = ring.characteristic()
261
+
262
+ m = A.nrows()
263
+ if m <= 1:
264
+ return identity_matrix(ZZ, m)
265
+
266
+ AZZ = A .change_ring(ZZ)
267
+ D, U, V = AZZ.smith_form()
268
+ diag = diagonal_matrix([-1] + [1] * (m - 1))
269
+ if U.det() == -1:
270
+ U = diag * U
271
+ if V.det() == -1:
272
+ V = V * diag
273
+
274
+ a = [U.row(i) * AZZ * V.column(i) for i in range(m)]
275
+ b = prod(a[1:])
276
+
277
+ Winv = identity_matrix(m)
278
+ Winv[1, 0] = 1 - b
279
+ Winv[0, 1] = -1
280
+ Winv[1, 1] = b
281
+
282
+ Xinv = identity_matrix(m)
283
+ Xinv[0, 1] = a[1]
284
+
285
+ Cp = diagonal_matrix(a[1:])
286
+ Cp[0, 0] *= a[0]
287
+ C = lift_for_SL(Cp, N)
288
+
289
+ Cpp = block_diagonal_matrix(identity_matrix(1), C)
290
+ Cpp[1, 0] = 1 - a[0]
291
+
292
+ return (~U * Winv * Cpp * Xinv * ~V).change_ring(ZZ)