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
@@ -0,0 +1,73 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint
3
+ """
4
+ Sparse action of Hecke operators
5
+ """
6
+
7
+ ##########################################################################
8
+ #
9
+ # Copyright (C) 2008 William Stein <wstein@gmail.com>
10
+ #
11
+ # Distributed under the terms of the GNU General Public License (GPL)
12
+ #
13
+ # https://www.gnu.org/licenses/
14
+ #
15
+ ##########################################################################
16
+
17
+ import sage.modular.hecke.hecke_operator
18
+ from sage.arith.misc import is_prime
19
+ from . import heilbronn
20
+
21
+
22
+ class HeckeOperator(sage.modular.hecke.hecke_operator.HeckeOperator):
23
+ def apply_sparse(self, x):
24
+ """
25
+ Return the image of ``x`` under ``self``.
26
+
27
+ If ``x`` is not in ``self.domain()``, raise a :exc:`TypeError`.
28
+
29
+ EXAMPLES::
30
+
31
+ sage: M = ModularSymbols(17,4,-1)
32
+ sage: T = M.hecke_operator(4)
33
+ sage: T.apply_sparse(M.0)
34
+ -27*[X^2,(1,7)] - 167/2*[X^2,(1,9)] - 21/2*[X^2,(1,13)] + 53/2*[X^2,(1,15)]
35
+ sage: [T.apply_sparse(x) == T.hecke_module_morphism()(x) for x in M.basis()]
36
+ [True, True, True, True]
37
+ sage: N = ModularSymbols(17,4,1)
38
+ sage: T.apply_sparse(N.0)
39
+ Traceback (most recent call last):
40
+ ...
41
+ TypeError: x (=[X^2,(0,1)]) must be in Modular Symbols space
42
+ of dimension 4 for Gamma_0(17) of weight 4 with sign -1
43
+ over Rational Field
44
+ """
45
+ if x not in self.domain():
46
+ raise TypeError("x (={}) must be in {}".format(x, self.domain()))
47
+
48
+ p = self.index()
49
+ if is_prime(p):
50
+ H = heilbronn.HeilbronnCremona(p)
51
+ else:
52
+ H = heilbronn.HeilbronnMerel(p)
53
+
54
+ M = self.parent().module()
55
+ mod2term = M._mod2term
56
+ syms = M.manin_symbols()
57
+ K = M.base_ring()
58
+ R = M.manin_gens_to_basis()
59
+
60
+ W = R.new_matrix(nrows=1, ncols=R.nrows())
61
+
62
+ B = M.manin_basis()
63
+
64
+ v = x.element()
65
+ for i in v.nonzero_positions():
66
+ for h in H:
67
+ entries = syms.apply(B[i], h)
68
+ for k, w in entries:
69
+ f, s = mod2term[k]
70
+ if s:
71
+ W[0, f] += s * K(w) * v[i]
72
+
73
+ return M(v.parent()((W * R).row(0)))
@@ -0,0 +1,5 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ from sage.structure.element cimport Element
3
+
4
+ cdef class ManinSymbol(Element):
5
+ cdef public i, u, v
@@ -0,0 +1,497 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint
3
+ r"""
4
+ Manin symbols
5
+
6
+ This module defines the class ManinSymbol. A Manin symbol of
7
+ weight `k`, level `N` has the form `[P(X,Y),(u:v)]` where
8
+ `P(X,Y)\in\ZZ[X,Y]` is homogeneous of weight `k-2` and
9
+ `(u:v)\in\mathbb{P}^1(\ZZ/N\ZZ).` The ManinSymbol class
10
+ holds a "monomial Manin symbol" of the simpler form
11
+ `[X^iY^{k-2-i},(u:v)]`, which is stored as a triple `(i,u,v)`; the
12
+ weight and level are obtained from the parent structure, which is a
13
+ :class:`sage.modular.modsym.manin_symbol_list.ManinSymbolList`.
14
+
15
+ Integer matrices `[a,b;c,d]` act on Manin symbols on the right,
16
+ sending `[P(X,Y),(u,v)]` to `[P(aX+bY,cX+dY),(u,v)g]`. Diagonal
17
+ matrices (with `b=c=0`, such as `I=[-1,0;0,1]` and `J=[-1,0;0,-1]`)
18
+ and anti-diagonal matrices (with `a=d=0`, such as `S=[0,-1;1,0]`) map
19
+ monomial Manin symbols to monomial Manin symbols, up to a scalar
20
+ factor. For general matrices (such as `T=[0,1,-1,-1]` and
21
+ `T^2=[-1,-1;0,1]`) the image of a monomial Manin symbol is expressed
22
+ as a formal sum of monomial Manin symbols, with integer coefficients.
23
+ """
24
+
25
+ from sage.misc.persist import register_unpickle_override
26
+ from sage.modular.cusps import Cusp
27
+ from sage.rings.infinity import Infinity
28
+ from sage.rings.integer cimport Integer
29
+ from sage.rings.integer_ring import ZZ
30
+ from sage.structure.element cimport Element
31
+ from sage.structure.richcmp cimport richcmp_not_equal, richcmp
32
+
33
+
34
+ def is_ManinSymbol(x):
35
+ """
36
+ Return ``True`` if ``x`` is a :class:`ManinSymbol`.
37
+
38
+ EXAMPLES::
39
+
40
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol, is_ManinSymbol
41
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
42
+ sage: m = ManinSymbolList_gamma0(6, 4)
43
+ sage: s = ManinSymbol(m, m.symbol_list()[3])
44
+ sage: s
45
+ [Y^2,(1,2)]
46
+ sage: is_ManinSymbol(s)
47
+ doctest:warning...
48
+ DeprecationWarning: The function is_ManinSymbol is deprecated;
49
+ use 'isinstance(..., ManinSymbol)' instead.
50
+ See https://github.com/sagemath/sage/issues/38184 for details.
51
+ True
52
+ sage: is_ManinSymbol(m[3])
53
+ True
54
+ """
55
+ from sage.misc.superseded import deprecation_cython
56
+ deprecation_cython(38184,
57
+ "The function is_ManinSymbol is deprecated; "
58
+ "use 'isinstance(..., ManinSymbol)' instead.")
59
+ return isinstance(x, ManinSymbol)
60
+
61
+
62
+ cdef class ManinSymbol(Element):
63
+ r"""
64
+ A Manin symbol `[X^i Y^{k-2-i}, (u, v)]`.
65
+
66
+ INPUT:
67
+
68
+ - ``parent`` -- :class:`~sage.modular.modsym.manin_symbol_list.ManinSymbolList`
69
+
70
+ - ``t`` -- a triple `(i, u, v)` of integers
71
+
72
+ EXAMPLES::
73
+
74
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
75
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
76
+ sage: m = ManinSymbolList_gamma0(5,2)
77
+ sage: s = ManinSymbol(m,(2,2,3)); s
78
+ (2,3)
79
+ sage: s == loads(dumps(s))
80
+ True
81
+
82
+ ::
83
+
84
+ sage: m = ManinSymbolList_gamma0(5,8)
85
+ sage: s = ManinSymbol(m,(2,2,3)); s
86
+ [X^2*Y^4,(2,3)]
87
+
88
+ ::
89
+
90
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
91
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
92
+ sage: m = ManinSymbolList_gamma0(5,8)
93
+ sage: s = ManinSymbol(m,(2,2,3))
94
+ sage: s.parent()
95
+ Manin Symbol List of weight 8 for Gamma0(5)
96
+ """
97
+ def __init__(self, parent, t):
98
+ r"""
99
+ Create a Manin symbol `[X^i Y^{k-2-i}, (u, v)]`, where
100
+ `k` is the weight.
101
+
102
+ INPUT:
103
+
104
+ - ``parent`` -- :class:`~sage.modular.modsym.manin_symbol_list.ManinSymbolList`
105
+
106
+ - ``t`` -- a triple `(i, u, v)` of integers
107
+
108
+ EXAMPLES::
109
+
110
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
111
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
112
+ sage: m = ManinSymbolList_gamma0(5,2)
113
+ sage: s = ManinSymbol(m,(2,2,3)); s
114
+ (2,3)
115
+
116
+ ::
117
+
118
+ sage: m = ManinSymbolList_gamma0(5,8)
119
+ sage: s = ManinSymbol(m,(2,2,3)); s
120
+ [X^2*Y^4,(2,3)]
121
+ """
122
+ Element.__init__(self, parent)
123
+ (i, u, v) = t
124
+ self.i = Integer(i)
125
+ self.u = Integer(u)
126
+ self.v = Integer(v)
127
+
128
+ def __reduce__(self):
129
+ """
130
+ For pickling.
131
+
132
+ TESTS::
133
+
134
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
135
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma1
136
+ sage: m = ManinSymbolList_gamma1(3, 2)
137
+ sage: s = ManinSymbol(m, (2, 2, 3))
138
+ sage: loads(dumps(s))
139
+ (2,3)
140
+ """
141
+ return ManinSymbol, (self.parent(), self.tuple())
142
+
143
+ def __setstate__(self, state):
144
+ """
145
+ Needed to unpickle old :class:`ManinSymbol` objects.
146
+
147
+ TESTS::
148
+
149
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
150
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
151
+ sage: m = ManinSymbolList_gamma0(5,2)
152
+ sage: s = ManinSymbol(m,(2,2,3))
153
+ sage: loads(dumps(s))
154
+ (2,3)
155
+ """
156
+ self._parent = state['_ManinSymbol__parent']
157
+ (self.i, self.u, self.v) = state['_ManinSymbol__t']
158
+
159
+ def tuple(self):
160
+ r"""
161
+ Return the 3-tuple `(i,u,v)` of this Manin symbol.
162
+
163
+ EXAMPLES::
164
+
165
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
166
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
167
+ sage: m = ManinSymbolList_gamma0(5,8)
168
+ sage: s = ManinSymbol(m,(2,2,3))
169
+ sage: s.tuple()
170
+ (2, 2, 3)
171
+ """
172
+ return (self.i, self.u, self.v)
173
+
174
+ def _repr_(self):
175
+ """
176
+ Return a string representation of this Manin symbol.
177
+
178
+ EXAMPLES::
179
+
180
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
181
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
182
+ sage: m = ManinSymbolList_gamma0(5,8)
183
+ sage: s = ManinSymbol(m,(2,2,3))
184
+ sage: str(s) # indirect doctest
185
+ '[X^2*Y^4,(2,3)]'
186
+ """
187
+ if self.weight() > 2:
188
+ polypart = _print_polypart(self.i, self.weight()-2-self.i)
189
+ return "[%s,(%s,%s)]" % (polypart, self.u, self.v)
190
+ return "(%s,%s)" % (self.u, self.v)
191
+
192
+ def _latex_(self):
193
+ """
194
+ Return a LaTeX representation of this Manin symbol.
195
+
196
+ EXAMPLES::
197
+
198
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
199
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
200
+ sage: m = ManinSymbolList_gamma0(5,8)
201
+ sage: s = ManinSymbol(m,(2,2,3))
202
+ sage: latex(s) # indirect doctest
203
+ [X^2*Y^4,(2,3)]
204
+ """
205
+ return self._repr_()
206
+
207
+ cpdef _richcmp_(self, right, int op):
208
+ """
209
+ Comparison function for ManinSymbols.
210
+
211
+ EXAMPLES::
212
+
213
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
214
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
215
+ sage: m = ManinSymbolList_gamma0(5,8)
216
+ sage: slist = m.manin_symbol_list()
217
+ sage: slist[10] <= slist[20]
218
+ True
219
+ sage: slist[20] <= slist[10]
220
+ False
221
+ sage: slist[10] < slist[20]
222
+ True
223
+ sage: slist[20] > slist[10]
224
+ True
225
+ sage: slist[20] != slist[20]
226
+ False
227
+ """
228
+ cdef ManinSymbol other = <ManinSymbol>right
229
+ # Compare tuples (i,u,v)
230
+ lx = self.i
231
+ rx = other.i
232
+ if lx != rx:
233
+ return richcmp_not_equal(lx, rx, op)
234
+ lx = self.u
235
+ rx = other.u
236
+ if lx != rx:
237
+ return richcmp_not_equal(lx, rx, op)
238
+ return richcmp(self.v, other.v, op)
239
+
240
+ def __hash__(self):
241
+ """
242
+ EXAMPLES::
243
+
244
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
245
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
246
+ sage: m = ManinSymbolList_gamma0(5,2)
247
+ sage: s = ManinSymbol(m,(2,2,3))
248
+ sage: hash(s) # random
249
+ 7331463901
250
+ """
251
+ cdef unsigned long h1 = hash(self.i)
252
+ cdef unsigned long h2 = hash(self.u)
253
+ cdef unsigned long h3 = hash(self.v)
254
+ return <Py_hash_t>(h1 + 1247963869*h2 + 1611845387*h3)
255
+
256
+ def __mul__(self, matrix):
257
+ """
258
+ Return the result of applying a matrix to this Manin symbol.
259
+
260
+ EXAMPLES::
261
+
262
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
263
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
264
+ sage: m = ManinSymbolList_gamma0(5,2)
265
+ sage: s = ManinSymbol(m,(0,2,3))
266
+ sage: s*[1,2,0,1]
267
+ (2,7)
268
+
269
+ ::
270
+
271
+ sage: m = ManinSymbolList_gamma0(5,8)
272
+ sage: s = ManinSymbol(m,(2,2,3))
273
+ sage: s*[1,2,0,1]
274
+ Traceback (most recent call last):
275
+ ...
276
+ NotImplementedError: ModSym * Matrix only implemented in weight 2
277
+ """
278
+ if self.weight() > 2:
279
+ raise NotImplementedError("ModSym * Matrix only implemented "
280
+ "in weight 2")
281
+ from sage.structure.element import Matrix
282
+ if isinstance(matrix, Matrix):
283
+ if (not matrix.nrows() == 2) or (not matrix.ncols() == 2):
284
+ raise ValueError("matrix(=%s) must be 2x2" % matrix)
285
+ matrix = matrix.list()
286
+ return type(self)(self.parent(),
287
+ (self.i,
288
+ matrix[0]*self.u + matrix[2]*self.v,
289
+ matrix[1]*self.u + matrix[3]*self.v))
290
+
291
+ def apply(self, a, b, c, d):
292
+ """
293
+ Return the image of ``self`` under the matrix `[a,b;c,d]`.
294
+
295
+ Not implemented for raw ManinSymbol objects, only for members
296
+ of ManinSymbolLists.
297
+
298
+ EXAMPLES::
299
+
300
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
301
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
302
+ sage: m = ManinSymbolList_gamma0(5,2)
303
+ sage: m.apply(10,[1,0,0,1]) # not implemented for base class
304
+ """
305
+ raise NotImplementedError
306
+
307
+ def __copy__(self):
308
+ """
309
+ Return a copy of this Manin symbol.
310
+
311
+ EXAMPLES::
312
+
313
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
314
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
315
+ sage: m = ManinSymbolList_gamma0(5,8)
316
+ sage: s = ManinSymbol(m,(2,2,3))
317
+ sage: s2 = copy(s)
318
+ sage: s2
319
+ [X^2*Y^4,(2,3)]
320
+ """
321
+ return type(self)(self.parent(), (self.i, self.u, self.v))
322
+
323
+ def lift_to_sl2z(self, N=None):
324
+ r"""
325
+ Return a lift of this Manin symbol to `SL_2(\ZZ)`.
326
+
327
+ If this Manin symbol is `(c,d)` and `N` is its level, this
328
+ function returns a list `[a,b, c',d']` that defines a 2x2
329
+ matrix with determinant 1 and integer entries, such that
330
+ `c=c'` (mod `N`) and `d=d'` (mod `N`).
331
+
332
+ EXAMPLES::
333
+
334
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
335
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
336
+ sage: m = ManinSymbolList_gamma0(5,8)
337
+ sage: s = ManinSymbol(m,(2,2,3))
338
+ sage: s
339
+ [X^2*Y^4,(2,3)]
340
+ sage: s.lift_to_sl2z()
341
+ [1, 1, 2, 3]
342
+ """
343
+ if N is None:
344
+ N = self.level()
345
+ if N == 1:
346
+ return [ZZ.one(), ZZ.zero(), ZZ.zero(), ZZ.one()]
347
+ c = Integer(self.u)
348
+ d = Integer(self.v)
349
+
350
+ if c == 0:
351
+ if d == 1:
352
+ return [ZZ.one(), ZZ.zero(), ZZ.zero(), ZZ.one()]
353
+ if d == N - 1:
354
+ return [Integer(-1), ZZ.zero(), ZZ.zero(), Integer(-1)]
355
+ c = Integer(N)
356
+
357
+ g, z1, z2 = c.xgcd(d)
358
+
359
+ # We're lucky: z1*c + z2*d = 1.
360
+ if g==1:
361
+ return [z2, -z1, c, d]
362
+
363
+ # Have to try harder.
364
+ m = c
365
+
366
+ # compute prime-to-d part of m.
367
+ while True:
368
+ g = m.gcd(d)
369
+ if g == 1:
370
+ break
371
+ m //= g
372
+
373
+ # compute prime-to-N part of m.
374
+ while True:
375
+ g = m.gcd(N)
376
+ if g == 1:
377
+ break
378
+ m //= g
379
+ d += N*m
380
+ g, z1, z2 = c.xgcd(d)
381
+ assert g==1
382
+ return [z2, -z1, c, d]
383
+
384
+ def endpoints(self, N=None):
385
+ r"""
386
+ Return cusps `alpha`, `beta` such that this Manin symbol, viewed as a
387
+ symbol for level `N`, is `X^i*Y^{k-2-i} \{alpha, beta\}`.
388
+
389
+ EXAMPLES::
390
+
391
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
392
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
393
+ sage: m = ManinSymbolList_gamma0(5,8)
394
+ sage: s = ManinSymbol(m,(2,2,3)); s
395
+ [X^2*Y^4,(2,3)]
396
+ sage: s.endpoints()
397
+ (1/3, 1/2)
398
+ """
399
+ if N is None:
400
+ N = self.parent().level()
401
+ else:
402
+ N=int(N)
403
+ if N < 1:
404
+ raise ArithmeticError("N must be positive")
405
+ a, b, c, d = self.lift_to_sl2z()
406
+ return Cusp(b, d), Cusp(a, c)
407
+
408
+ def weight(self):
409
+ """
410
+ Return the weight of this Manin symbol.
411
+
412
+ EXAMPLES::
413
+
414
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
415
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
416
+ sage: m = ManinSymbolList_gamma0(5,8)
417
+ sage: s = ManinSymbol(m,(2,2,3))
418
+ sage: s.weight()
419
+ 8
420
+ """
421
+ return self.parent().weight()
422
+
423
+ def level(self):
424
+ """
425
+ Return the level of this Manin symbol.
426
+
427
+ EXAMPLES::
428
+
429
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
430
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
431
+ sage: m = ManinSymbolList_gamma0(5,8)
432
+ sage: s = ManinSymbol(m,(2,2,3))
433
+ sage: s.level()
434
+ 5
435
+ """
436
+ return self.parent().level()
437
+
438
+ def modular_symbol_rep(self):
439
+ """
440
+ Return a representation of ``self`` as a formal sum of modular
441
+ symbols.
442
+
443
+ The result is not cached.
444
+
445
+ EXAMPLES::
446
+
447
+ sage: from sage.modular.modsym.manin_symbol import ManinSymbol
448
+ sage: from sage.modular.modsym.manin_symbol_list import ManinSymbolList_gamma0
449
+ sage: m = ManinSymbolList_gamma0(5,8)
450
+ sage: s = ManinSymbol(m,(2,2,3))
451
+ sage: s.modular_symbol_rep()
452
+ 144*X^6*{1/3, 1/2} - 384*X^5*Y*{1/3, 1/2} + 424*X^4*Y^2*{1/3, 1/2} - 248*X^3*Y^3*{1/3, 1/2} + 81*X^2*Y^4*{1/3, 1/2} - 14*X*Y^5*{1/3, 1/2} + Y^6*{1/3, 1/2}
453
+ """
454
+ # TODO: It would likely be much better to do this slightly more directly
455
+ from sage.modular.modsym.modular_symbols import ModularSymbol
456
+ x = ModularSymbol(self.parent(), self.i, 0, Infinity)
457
+ return x.apply(self.lift_to_sl2z())
458
+
459
+
460
+ def _print_polypart(i, j):
461
+ r"""
462
+ Helper function for printing the polynomial part `X^iY^j` of a ManinSymbol.
463
+
464
+ EXAMPLES::
465
+
466
+ sage: from sage.modular.modsym.manin_symbol import _print_polypart
467
+ sage: _print_polypart(2,3)
468
+ 'X^2*Y^3'
469
+ sage: _print_polypart(2,0)
470
+ 'X^2'
471
+ sage: _print_polypart(0,1)
472
+ 'Y'
473
+ """
474
+ if i > 1:
475
+ xpart = "X^%s" % i
476
+ elif i == 1:
477
+ xpart = "X"
478
+ else:
479
+ xpart = ""
480
+ if j > 1:
481
+ ypart = "Y^%s" % j
482
+ elif j == 1:
483
+ ypart = "Y"
484
+ else:
485
+ ypart = ""
486
+ if xpart and ypart:
487
+ times = "*"
488
+ else:
489
+ times = ""
490
+ if xpart or ypart:
491
+ return xpart + times + ypart
492
+ else:
493
+ return ""
494
+
495
+
496
+ register_unpickle_override('sage.modular.modsym.manin_symbols',
497
+ 'ManinSymbol', ManinSymbol)