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,1076 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.rings.padics
3
+ r"""
4
+ Pollack-Stevens' modular symbols spaces
5
+
6
+ This module contains a class for spaces of modular symbols that use Glenn
7
+ Stevens' conventions, as explained in [PS2011]_.
8
+
9
+ There are two main differences between the modular symbols in this directory
10
+ and the ones in :mod:`sage.modular.modsym`:
11
+
12
+ - There is a shift in the weight: weight `k=0` here corresponds to weight `k=2`
13
+ there.
14
+
15
+ - There is a duality: these modular symbols are functions from
16
+ `\textrm{Div}^0(P^1(\QQ))` (cohomological objects), the others are formal linear
17
+ combinations of `\textrm{Div}^0(P^1(\QQ))` (homological objects).
18
+
19
+ EXAMPLES:
20
+
21
+ First we create the space of modular symbols of weight 0 (`k=2`) and level 11::
22
+
23
+ sage: M = PollackStevensModularSymbols(Gamma0(11), 0); M
24
+ Space of modular symbols for Congruence Subgroup Gamma0(11) with sign 0 and values in Sym^0 Q^2
25
+
26
+ One can also create a space of overconvergent modular symbols, by specifying a prime and a precision::
27
+
28
+ sage: M = PollackStevensModularSymbols(Gamma0(11), p = 5, prec_cap = 10, weight = 0); M
29
+ Space of overconvergent modular symbols for Congruence Subgroup Gamma0(11) with sign 0 and values in Space of 5-adic distributions with k=0 action and precision cap 10
30
+
31
+ Currently not much functionality is available on the whole space, and these
32
+ spaces are mainly used as parents for the modular symbols. These can be constructed from the corresponding
33
+ classical modular symbols (or even elliptic curves) as follows::
34
+
35
+ sage: A = ModularSymbols(13, sign=1, weight=4).decomposition()[0]
36
+ sage: A.is_cuspidal()
37
+ True
38
+ sage: from sage.modular.pollack_stevens.space import ps_modsym_from_simple_modsym_space
39
+ sage: f = ps_modsym_from_simple_modsym_space(A); f
40
+ Modular symbol of level 13 with values in Sym^2 Q^2
41
+ sage: f.values()
42
+ [(-13, 0, -1),
43
+ (247/2, 13/2, -6),
44
+ (39/2, 117/2, 42),
45
+ (-39/2, 39, 111/2),
46
+ (-247/2, -117, -209/2)]
47
+ sage: f.parent()
48
+ Space of modular symbols for Congruence Subgroup Gamma0(13) with sign 1 and values in Sym^2 Q^2
49
+
50
+ ::
51
+
52
+ sage: # needs eclib
53
+ sage: E = EllipticCurve('37a1')
54
+ sage: phi = E.pollack_stevens_modular_symbol(); phi
55
+ Modular symbol of level 37 with values in Sym^0 Q^2
56
+ sage: phi.values()
57
+ [0, 1, 0, 0, 0, -1, 1, 0, 0]
58
+ sage: phi.parent()
59
+ Space of modular symbols for Congruence Subgroup Gamma0(37) with sign 0 and values in Sym^0 Q^2
60
+ """
61
+ # ****************************************************************************
62
+ # Copyright (C) 2012 Robert Pollack <rpollack@math.bu.edu>
63
+ #
64
+ # Distributed under the terms of the GNU General Public License (GPL)
65
+ # as published by the Free Software Foundation; either version 2 of
66
+ # the License, or (at your option) any later version.
67
+ # https://www.gnu.org/licenses/
68
+ # ****************************************************************************
69
+ from sage.modules.module import Module
70
+ from sage.modular.dirichlet import DirichletCharacter
71
+ from sage.modular.arithgroup.all import Gamma0
72
+ from sage.modular.arithgroup.arithgroup_element import ArithmeticSubgroupElement
73
+ from sage.rings.integer import Integer
74
+ from sage.rings.rational_field import QQ
75
+ from .fund_domain import ManinRelations
76
+ from sage.rings.infinity import infinity as oo
77
+ from sage.structure.factory import UniqueFactory
78
+
79
+ from .distributions import OverconvergentDistributions, Symk
80
+ from .modsym import (PSModularSymbolElement, PSModularSymbolElement_symk,
81
+ PSModularSymbolElement_dist, PSModSymAction)
82
+ from .manin_map import ManinMap
83
+ from .sigma0 import Sigma0, Sigma0Element
84
+
85
+
86
+ class PollackStevensModularSymbols_factory(UniqueFactory):
87
+ r"""
88
+ Create a space of Pollack-Stevens modular symbols.
89
+
90
+ INPUT:
91
+
92
+ - ``group`` -- integer or congruence subgroup
93
+
94
+ - ``weight`` -- integer `\ge 0`, or ``None``
95
+
96
+ - ``sign`` -- integer; -1, 0, 1
97
+
98
+ - ``base_ring`` -- ring or ``None``
99
+
100
+ - ``p`` -- prime or ``None``
101
+
102
+ - ``prec_cap`` -- positive integer or ``None``
103
+
104
+ - ``coefficients`` -- the coefficient module (a special type of module,
105
+ typically distributions), or ``None``
106
+
107
+ If an explicit coefficient module is given, then the arguments ``weight``,
108
+ ``base_ring``, ``prec_cap``, and ``p`` are redundant and must be ``None``.
109
+ They are only relevant if ``coefficients`` is ``None``, in which case the
110
+ coefficient module is inferred from the other data.
111
+
112
+ .. NOTE::
113
+
114
+ We emphasize that in the Pollack-Stevens notation, the
115
+ ``weight`` is the usual weight minus 2, so a classical weight
116
+ 2 modular form corresponds to a modular symbol of "weight 0".
117
+
118
+ EXAMPLES::
119
+
120
+ sage: M = PollackStevensModularSymbols(Gamma0(7), weight=0, prec_cap = None); M
121
+ Space of modular symbols for Congruence Subgroup Gamma0(7) with sign 0 and values in Sym^0 Q^2
122
+
123
+ An example with an explicit coefficient module::
124
+
125
+ sage: D = OverconvergentDistributions(3, 7, prec_cap=10)
126
+ sage: M = PollackStevensModularSymbols(Gamma0(7), coefficients=D); M
127
+ Space of overconvergent modular symbols for Congruence Subgroup Gamma0(7) with sign 0 and values in Space of 7-adic distributions with k=3 action and precision cap 10
128
+
129
+ TESTS::
130
+
131
+ sage: TestSuite(PollackStevensModularSymbols).run()
132
+ """
133
+ def create_key(self, group, weight=None, sign=0, base_ring=None, p=None, prec_cap=None, coefficients=None):
134
+ r"""
135
+ Sanitize input.
136
+
137
+ EXAMPLES::
138
+
139
+ sage: D = OverconvergentDistributions(3, 7, prec_cap=10)
140
+ sage: M = PollackStevensModularSymbols(Gamma0(7), coefficients=D) # indirect doctest
141
+ """
142
+ if sign not in (-1, 0, 1):
143
+ raise ValueError("sign must be -1, 0, 1")
144
+
145
+ if isinstance(group, (int, Integer)):
146
+ group = Gamma0(group)
147
+
148
+ if coefficients is None:
149
+ if isinstance(group, DirichletCharacter):
150
+ character = group.minimize_base_ring()
151
+ group = Gamma0(character.modulus())
152
+ if character.is_trivial():
153
+ character = None
154
+ else:
155
+ character = None
156
+
157
+ if weight is None:
158
+ raise ValueError("you must specify a weight "
159
+ "or coefficient module")
160
+
161
+ if prec_cap is None:
162
+ coefficients = Symk(weight, base_ring, character)
163
+ else:
164
+ coefficients = OverconvergentDistributions(weight, p, prec_cap, base_ring,
165
+ character)
166
+ else:
167
+ if weight is not None or base_ring is not None or p is not None or prec_cap is not None:
168
+ raise ValueError("if coefficients are specified, then weight, "
169
+ "base_ring, p, and prec_cap must take their "
170
+ "default value None")
171
+
172
+ return (group, coefficients, sign)
173
+
174
+ def create_object(self, version, key):
175
+ r"""
176
+ Create a space of modular symbols from ``key``.
177
+
178
+ INPUT:
179
+
180
+ - ``version`` -- the version of the object to create
181
+
182
+ - ``key`` -- tuple of parameters, as created by :meth:`create_key`
183
+
184
+ EXAMPLES::
185
+
186
+ sage: D = OverconvergentDistributions(5, 7, 15)
187
+ sage: M = PollackStevensModularSymbols(Gamma0(7), coefficients=D) # indirect doctest
188
+ sage: M2 = PollackStevensModularSymbols(Gamma0(7), coefficients=D) # indirect doctest
189
+ sage: M is M2
190
+ True
191
+ """
192
+ return PollackStevensModularSymbolspace(*key)
193
+
194
+
195
+ PollackStevensModularSymbols = PollackStevensModularSymbols_factory('PollackStevensModularSymbols')
196
+
197
+
198
+ class PollackStevensModularSymbolspace(Module):
199
+ r"""
200
+ A class for spaces of modular symbols that use Glenn Stevens' conventions.
201
+ This class should not be instantiated directly by the user: this is handled
202
+ by the factory object :class:`PollackStevensModularSymbols_factory`.
203
+
204
+ INPUT:
205
+
206
+ - ``group`` -- congruence subgroup
207
+
208
+ - ``coefficients`` -- a coefficient module
209
+
210
+ - ``sign`` -- (default: 0) 0, -1, or 1
211
+
212
+ EXAMPLES::
213
+
214
+ sage: D = OverconvergentDistributions(2, 11)
215
+ sage: M = PollackStevensModularSymbols(Gamma0(2), coefficients=D); M.sign()
216
+ 0
217
+ sage: M = PollackStevensModularSymbols(Gamma0(2), coefficients=D, sign=-1); M.sign()
218
+ -1
219
+ sage: M = PollackStevensModularSymbols(Gamma0(2), coefficients=D, sign=1); M.sign()
220
+ 1
221
+ """
222
+ def __init__(self, group, coefficients, sign=0):
223
+ r"""
224
+ INPUT:
225
+
226
+ See :class:`PollackStevensModularSymbolspace`
227
+
228
+ EXAMPLES::
229
+
230
+ sage: D = OverconvergentDistributions(2, 11)
231
+ sage: M = PollackStevensModularSymbols(Gamma0(11), coefficients=D)
232
+ sage: type(M)
233
+ <class 'sage.modular.pollack_stevens.space.PollackStevensModularSymbolspace_with_category'>
234
+ sage: TestSuite(M).run()
235
+ """
236
+ Module.__init__(self, coefficients.base_ring())
237
+ if sign not in [0, -1, 1]:
238
+ # sign must be 0, -1 or 1
239
+ raise ValueError("sign must be 0, -1, or 1")
240
+ self._group = group
241
+ self._coefficients = coefficients
242
+ if coefficients.is_symk():
243
+ self.Element = PSModularSymbolElement_symk
244
+ else:
245
+ self.Element = PSModularSymbolElement_dist
246
+ self._sign = sign
247
+ # should distinguish between Gamma0 and Gamma1...
248
+ self._source = ManinRelations(group.level())
249
+
250
+ # Register the action of 2x2 matrices on self.
251
+
252
+ if coefficients.is_symk():
253
+ action = PSModSymAction(Sigma0(1), self)
254
+ else:
255
+ action = PSModSymAction(Sigma0(self.prime()), self)
256
+
257
+ self._populate_coercion_lists_(action_list=[action])
258
+
259
+ def _element_constructor_(self, data):
260
+ r"""
261
+ Construct an element of ``self`` from data.
262
+
263
+ EXAMPLES::
264
+
265
+ sage: D = OverconvergentDistributions(0, 11)
266
+ sage: M = PollackStevensModularSymbols(Gamma0(11), coefficients=D)
267
+ sage: M(1) # indirect doctest
268
+ Modular symbol of level 11 with values in Space of 11-adic distributions with k=0 action and precision cap 20
269
+ """
270
+ if isinstance(data, PSModularSymbolElement):
271
+ data = data._map
272
+ elif isinstance(data, ManinMap):
273
+ pass
274
+ else:
275
+ # a dict, or a single distribution specifying a constant symbol, etc.
276
+ data = ManinMap(self._coefficients, self._source, data)
277
+
278
+ if data._codomain != self._coefficients:
279
+ data = data.extend_codomain(self._coefficients)
280
+
281
+ return self.element_class(data, self, construct=True)
282
+
283
+ def _coerce_map_from_(self, other):
284
+ r"""
285
+ Used for comparison and coercion.
286
+
287
+ EXAMPLES::
288
+
289
+ sage: M1 = PollackStevensModularSymbols(Gamma0(11), coefficients=Symk(3))
290
+ sage: M2 = PollackStevensModularSymbols(Gamma0(11), coefficients=Symk(3,Qp(11)))
291
+ sage: M3 = PollackStevensModularSymbols(Gamma0(11), coefficients=Symk(4))
292
+ sage: M4 = PollackStevensModularSymbols(Gamma0(11), coefficients=OverconvergentDistributions(3, 11, 10))
293
+ sage: M1.has_coerce_map_from(M2)
294
+ False
295
+ sage: M2.has_coerce_map_from(M1)
296
+ True
297
+ sage: M1.has_coerce_map_from(M3)
298
+ False
299
+ sage: M1.has_coerce_map_from(M4)
300
+ False
301
+ sage: M2.has_coerce_map_from(M4)
302
+ True
303
+ """
304
+ if isinstance(other, PollackStevensModularSymbolspace):
305
+ return (other.group() == self.group()
306
+ and self.coefficient_module().has_coerce_map_from(other.coefficient_module()))
307
+
308
+ return False
309
+
310
+ def _repr_(self):
311
+ r"""
312
+ Return string representation.
313
+
314
+ EXAMPLES::
315
+
316
+ sage: D = OverconvergentDistributions(2, 11)
317
+ sage: M = PollackStevensModularSymbols(Gamma0(2), coefficients=D)
318
+ sage: M._repr_()
319
+ 'Space of overconvergent modular symbols for Congruence Subgroup Gamma0(2) with sign 0 and values in Space of 11-adic distributions with k=2 action and precision cap 20'
320
+ """
321
+ if self.coefficient_module().is_symk():
322
+ s = "Space of modular symbols for "
323
+ else:
324
+ s = "Space of overconvergent modular symbols for "
325
+ s += "%s with sign %s and values in %s" % (self.group(), self.sign(),
326
+ self.coefficient_module())
327
+ return s
328
+
329
+ def source(self):
330
+ r"""
331
+ Return the domain of the modular symbols in this space.
332
+
333
+ OUTPUT: a :class:`sage.modular.pollack_stevens.fund_domain.PollackStevensModularDomain`
334
+
335
+ EXAMPLES::
336
+
337
+ sage: D = OverconvergentDistributions(2, 11)
338
+ sage: M = PollackStevensModularSymbols(Gamma0(2), coefficients=D)
339
+ sage: M.source()
340
+ Manin Relations of level 2
341
+ """
342
+ return self._source
343
+
344
+ def coefficient_module(self):
345
+ r"""
346
+ Return the coefficient module of this space.
347
+
348
+ EXAMPLES::
349
+
350
+ sage: D = OverconvergentDistributions(2, 11)
351
+ sage: M = PollackStevensModularSymbols(Gamma0(2), coefficients=D)
352
+ sage: M.coefficient_module()
353
+ Space of 11-adic distributions with k=2 action and precision cap 20
354
+ sage: M.coefficient_module() is D
355
+ True
356
+ """
357
+ return self._coefficients
358
+
359
+ def group(self):
360
+ r"""
361
+ Return the congruence subgroup of this space.
362
+
363
+ EXAMPLES::
364
+
365
+ sage: D = OverconvergentDistributions(2, 5)
366
+ sage: G = Gamma0(23)
367
+ sage: M = PollackStevensModularSymbols(G, coefficients=D)
368
+ sage: M.group()
369
+ Congruence Subgroup Gamma0(23)
370
+ sage: D = Symk(4)
371
+ sage: G = Gamma1(11)
372
+ sage: M = PollackStevensModularSymbols(G, coefficients=D)
373
+ sage: M.group()
374
+ Congruence Subgroup Gamma1(11)
375
+ """
376
+ return self._group
377
+
378
+ def sign(self):
379
+ r"""
380
+ Return the sign of this space.
381
+
382
+ EXAMPLES::
383
+
384
+ sage: D = OverconvergentDistributions(3, 17)
385
+ sage: M = PollackStevensModularSymbols(Gamma(5), coefficients=D)
386
+ sage: M.sign()
387
+ 0
388
+ sage: D = Symk(4)
389
+ sage: M = PollackStevensModularSymbols(Gamma1(8), coefficients=D, sign=-1)
390
+ sage: M.sign()
391
+ -1
392
+ """
393
+ return self._sign
394
+
395
+ def ngens(self):
396
+ r"""
397
+ Return the number of generators defining this space.
398
+
399
+ EXAMPLES::
400
+
401
+ sage: D = OverconvergentDistributions(4, 29)
402
+ sage: M = PollackStevensModularSymbols(Gamma1(12), coefficients=D)
403
+ sage: M.ngens()
404
+ 5
405
+ sage: D = Symk(2)
406
+ sage: M = PollackStevensModularSymbols(Gamma0(2), coefficients=D)
407
+ sage: M.ngens()
408
+ 2
409
+ """
410
+ return len(self._source.indices())
411
+
412
+ def ncoset_reps(self):
413
+ r"""
414
+ Return the number of coset representatives defining the domain of the
415
+ modular symbols in this space.
416
+
417
+ OUTPUT:
418
+
419
+ The number of coset representatives stored in the manin relations.
420
+ (Just the size of `P^1(\ZZ/N\ZZ)`)
421
+
422
+ EXAMPLES::
423
+
424
+ sage: D = Symk(2)
425
+ sage: M = PollackStevensModularSymbols(Gamma0(2), coefficients=D)
426
+ sage: M.ncoset_reps()
427
+ 3
428
+ """
429
+ return len(self._source.reps())
430
+
431
+ def level(self):
432
+ r"""
433
+ Return the level `N`, where this space is of level `\Gamma_0(N)`.
434
+
435
+ EXAMPLES::
436
+
437
+ sage: D = OverconvergentDistributions(7, 11)
438
+ sage: M = PollackStevensModularSymbols(Gamma1(14), coefficients=D)
439
+ sage: M.level()
440
+ 14
441
+ """
442
+ return self._source.level()
443
+
444
+ def _grab_relations(self):
445
+ r"""
446
+ This is used internally as part of a consistency check.
447
+
448
+ EXAMPLES::
449
+
450
+ sage: D = OverconvergentDistributions(4, 3)
451
+ sage: M = PollackStevensModularSymbols(Gamma1(13), coefficients=D)
452
+ sage: M._grab_relations()
453
+ [[(1, [1 0]
454
+ [0 1], 0)], [(-1, [-1 -1]
455
+ [ 0 -1], 0)], [(1, [1 0]
456
+ [0 1], 2)], [(1, [1 0]
457
+ [0 1], 3)], [(1, [1 0]
458
+ [0 1], 4)], [(1, [1 0]
459
+ [0 1], 5)]]
460
+ """
461
+ S0N = Sigma0(self._source._N)
462
+ v = []
463
+ for r in range(len(self._source.gens())):
464
+ for j in range(len(self._source.reps())):
465
+ R = self._source.relations(j)
466
+ if len(R) == 1 and R[0][2] == self._source.indices(r):
467
+ if R[0][0] != -1 or R[0][1] != S0N(1):
468
+ v += [R]
469
+ return v
470
+
471
+ def precision_cap(self):
472
+ r"""
473
+ Return the number of moments of each element of this space.
474
+
475
+ EXAMPLES::
476
+
477
+ sage: D = OverconvergentDistributions(2, 5)
478
+ sage: M = PollackStevensModularSymbols(Gamma1(13), coefficients=D)
479
+ sage: M.precision_cap()
480
+ 20
481
+ sage: D = OverconvergentDistributions(3, 7, prec_cap=10)
482
+ sage: M = PollackStevensModularSymbols(Gamma0(7), coefficients=D)
483
+ sage: M.precision_cap()
484
+ 10
485
+ """
486
+ # WARNING -- IF YOU ARE WORKING IN SYM^K(Q^2) THIS WILL JUST
487
+ # RETURN K-1. NOT GOOD
488
+ return self.coefficient_module()._prec_cap
489
+
490
+ def weight(self):
491
+ r"""
492
+ Return the weight of this space.
493
+
494
+ .. WARNING::
495
+
496
+ We emphasize that in the Pollack-Stevens notation, this is
497
+ the usual weight minus 2, so a classical weight 2 modular
498
+ form corresponds to a modular symbol of "weight 0".
499
+
500
+ EXAMPLES::
501
+
502
+ sage: D = Symk(5)
503
+ sage: M = PollackStevensModularSymbols(Gamma1(7), coefficients=D)
504
+ sage: M.weight()
505
+ 5
506
+ """
507
+ return self.coefficient_module()._k
508
+
509
+ def prime(self):
510
+ r"""
511
+ Return the prime of this space.
512
+
513
+ EXAMPLES::
514
+
515
+ sage: D = OverconvergentDistributions(2, 11)
516
+ sage: M = PollackStevensModularSymbols(Gamma(2), coefficients=D)
517
+ sage: M.prime()
518
+ 11
519
+ """
520
+ return self.coefficient_module()._p
521
+
522
+ def _p_stabilize_parent_space(self, p, new_base_ring):
523
+ r"""
524
+ Return the space of Pollack-Stevens modular symbols of level
525
+ `p N`, with changed base ring. This is used internally when
526
+ constructing the `p`-stabilization of a modular symbol.
527
+
528
+ INPUT:
529
+
530
+ - ``p`` -- prime number
531
+ - ``new_base_ring`` -- the base ring of the result
532
+
533
+ OUTPUT:
534
+
535
+ The space of modular symbols of level `p N`, where `N` is the level
536
+ of this space.
537
+
538
+ EXAMPLES::
539
+
540
+ sage: D = OverconvergentDistributions(2, 7)
541
+ sage: M = PollackStevensModularSymbols(Gamma(13), coefficients=D)
542
+ sage: M._p_stabilize_parent_space(7, M.base_ring())
543
+ Space of overconvergent modular symbols for Congruence Subgroup
544
+ Gamma(91) with sign 0 and values in Space of 7-adic distributions
545
+ with k=2 action and precision cap 20
546
+
547
+ sage: D = OverconvergentDistributions(4, 17)
548
+ sage: M = PollackStevensModularSymbols(Gamma1(3), coefficients=D)
549
+ sage: M._p_stabilize_parent_space(17, Qp(17))
550
+ Space of overconvergent modular symbols for Congruence
551
+ Subgroup Gamma1(51) with sign 0 and values in Space of
552
+ 17-adic distributions with k=4 action and precision cap 20
553
+ """
554
+ N = self.level()
555
+ if N % p == 0:
556
+ raise ValueError("the level is not prime to p")
557
+ from sage.modular.arithgroup.all import (Gamma, Gamma_class, Gamma0,
558
+ Gamma0_class, Gamma1, Gamma1_class)
559
+ G = self.group()
560
+ if isinstance(G, Gamma0_class):
561
+ G = Gamma0(N * p)
562
+ elif isinstance(G, Gamma1_class):
563
+ G = Gamma1(N * p)
564
+ elif isinstance(G, Gamma_class):
565
+ G = Gamma(N * p)
566
+ else:
567
+ raise NotImplementedError
568
+ return PollackStevensModularSymbols(G, coefficients=self.coefficient_module().change_ring(new_base_ring), sign=self.sign())
569
+
570
+ def _specialize_parent_space(self, new_base_ring):
571
+ r"""
572
+ Internal function that is used by the specialize method on
573
+ elements. It returns a space with same parameters as this
574
+ one, but over ``new_base_ring``.
575
+
576
+ INPUT:
577
+
578
+ - ``new_base_ring`` -- a ring
579
+
580
+ OUTPUT: a space of modular symbols to which our space specializes
581
+
582
+ EXAMPLES::
583
+
584
+ sage: D = OverconvergentDistributions(7, 5)
585
+ sage: M = PollackStevensModularSymbols(Gamma0(2), coefficients=D); M
586
+ Space of overconvergent modular symbols for Congruence Subgroup Gamma0(2) with sign 0 and values in Space of 5-adic distributions with k=7 action and precision cap 20
587
+ sage: M._specialize_parent_space(QQ)
588
+ Space of modular symbols for Congruence Subgroup Gamma0(2) with sign 0 and values in Sym^7 Q^2
589
+ sage: M.base_ring()
590
+ 5-adic Ring with capped absolute precision 20
591
+ sage: M._specialize_parent_space(QQ).base_ring()
592
+ Rational Field
593
+ """
594
+ return PollackStevensModularSymbols(self.group(), coefficients=self.coefficient_module().specialize(new_base_ring), sign=self.sign())
595
+
596
+ def _lift_parent_space(self, p, M, new_base_ring):
597
+ r"""
598
+ Used internally to lift a space of modular symbols to space of
599
+ overconvergent modular symbols.
600
+
601
+ INPUT:
602
+
603
+ - ``p`` -- prime
604
+ - ``M`` -- precision cap
605
+ - ``new_base_ring`` -- ring
606
+
607
+ OUTPUT: a space of distribution valued modular symbols
608
+
609
+ EXAMPLES::
610
+
611
+ sage: D = OverconvergentDistributions(4, 17, 2); M = PollackStevensModularSymbols(Gamma1(3), coefficients=D)
612
+ sage: D.is_symk()
613
+ False
614
+ sage: M._lift_parent_space(17, 10, Qp(17))
615
+ Traceback (most recent call last):
616
+ ...
617
+ TypeError: Coefficient module must be a Symk
618
+ sage: PollackStevensModularSymbols(Gamma1(3), weight=1)._lift_parent_space(17,10,Qp(17))
619
+ Space of overconvergent modular symbols for Congruence Subgroup Gamma1(3) with sign 0 and values in Space of 17-adic distributions with k=1 action and precision cap 10
620
+ """
621
+ if self.coefficient_module().is_symk():
622
+ return PollackStevensModularSymbols(self.group(), coefficients=self.coefficient_module().lift(p, M, new_base_ring), sign=self.sign())
623
+ else:
624
+ raise TypeError("Coefficient module must be a Symk")
625
+
626
+ def change_ring(self, new_base_ring):
627
+ r"""
628
+ Change the base ring of this space to ``new_base_ring``.
629
+
630
+ INPUT:
631
+
632
+ - ``new_base_ring`` -- a ring
633
+
634
+ OUTPUT: a space of modular symbols over the specified base
635
+
636
+ EXAMPLES::
637
+
638
+ sage: from sage.modular.pollack_stevens.distributions import Symk
639
+ sage: D = Symk(4)
640
+ sage: M = PollackStevensModularSymbols(Gamma(6), coefficients=D); M
641
+ Space of modular symbols for Congruence Subgroup Gamma(6) with sign 0 and values in Sym^4 Q^2
642
+ sage: M.change_ring(Qp(5,8))
643
+ Space of modular symbols for Congruence Subgroup Gamma(6) with sign 0 and values in Sym^4 Q_5^2
644
+ """
645
+ return PollackStevensModularSymbols(self.group(), coefficients=self.coefficient_module().change_ring(new_base_ring), sign=self.sign())
646
+
647
+ def _an_element_(self):
648
+ r"""
649
+ Return the cusps associated to an element of a congruence subgroup.
650
+
651
+ OUTPUT: an element of the modular symbol space
652
+
653
+ This returns a "typical" element of this space; in this case
654
+ the constant map sending every element to an element of the
655
+ coefficient module.
656
+
657
+ .. WARNING::
658
+
659
+ This is not really an element of the space because it does
660
+ not satisfy the Manin relations.
661
+
662
+ EXAMPLES::
663
+
664
+ sage: D = Symk(4)
665
+ sage: M = PollackStevensModularSymbols(Gamma(6), coefficients=D)
666
+ sage: x = M.an_element(); x # indirect doctest
667
+ Modular symbol of level 6 with values in Sym^4 Q^2
668
+ sage: x.values()
669
+ [(0, 1, 2, 3, 4), (0, 1, 2, 3, 4), (0, 1, 2, 3, 4)]
670
+ sage: D = Symk(2, Qp(11)); M = PollackStevensModularSymbols(Gamma0(2), coefficients=D)
671
+ sage: x = M.an_element(); x.values()
672
+ [(0, 1 + O(11^20), 2 + O(11^20)), (0, 1 + O(11^20), 2 + O(11^20))]
673
+ sage: x in M
674
+ True
675
+ """
676
+ return self(self.coefficient_module().an_element())
677
+
678
+ def random_element(self, M=None):
679
+ r"""
680
+ Return a random overconvergent modular symbol in this space with `M` moments.
681
+
682
+ INPUT:
683
+
684
+ - ``M`` -- positive integer
685
+
686
+ OUTPUT: an element of the modular symbol space with `M` moments
687
+
688
+ Returns a random element in this space by randomly choosing
689
+ values of distributions on all but one divisor, and solves the
690
+ difference equation to determine the value on the last
691
+ divisor. ::
692
+
693
+ sage: D = OverconvergentDistributions(2, 11)
694
+ sage: M = PollackStevensModularSymbols(Gamma0(11), coefficients=D)
695
+ sage: M.random_element(10)
696
+ Traceback (most recent call last):
697
+ ...
698
+ NotImplementedError
699
+ """
700
+ # This function still has bugs and is not used in the rest of
701
+ # the package. It is left to be implemented in the future.
702
+ raise NotImplementedError
703
+
704
+ if M is None and not self.coefficient_module().is_symk():
705
+ M = self.coefficient_module().precision_cap()
706
+
707
+ k = self.coefficient_module()._k
708
+ # p = self.prime()
709
+ manin = self.source()
710
+
711
+ # # There must be a problem here with that +1 -- should be
712
+ # # variable depending on a c of some matrix We'll need to
713
+ # # divide by some power of p and so we add extra accuracy
714
+ # # here.
715
+ # if k != 0:
716
+ # MM = M + valuation(k,p) + 1 + M.exact_log(p)
717
+ # else:
718
+ # MM = M + M.exact_log(p) + 1
719
+
720
+ # this loop runs thru all of the generators (except
721
+ # (0)-(infty)) and randomly chooses a distribution to assign
722
+ # to this generator (in the 2,3-torsion cases care is taken
723
+ # to satisfy the relevant relation)
724
+ D = {}
725
+ for g in manin.gens():
726
+ D[g] = self.coefficient_module().random_element(M)
727
+ if g in manin.reps_with_two_torsion() and g in manin.reps_with_three_torsion():
728
+ raise ValueError("Level 1 not implemented")
729
+ if g in manin.reps_with_two_torsion():
730
+ gamg = manin.two_torsion_matrix(g)
731
+ D[g] = D[g] - D[g] * gamg
732
+ else:
733
+ if g in manin.reps_with_three_torsion():
734
+ gamg = manin.three_torsion_matrix(g)
735
+ D[g] = 2 * D[g] - D[g] * gamg - D[g] * gamg ** 2
736
+ # print("post:",D[g])
737
+
738
+ # now we compute nu_infty of Prop 5.1 of [PS1]
739
+ t = self.coefficient_module().zero()
740
+ for g in manin.gens()[1:]:
741
+ if (g not in manin.reps_with_two_torsion()) and (g not in manin.reps_with_three_torsion()):
742
+ t += D[g] * manin.gammas[g] - D[g]
743
+ else:
744
+ # this was previously MR.reps_with_two_torsion() but there is no variable MR defined...
745
+ if g in manin.reps_with_two_torsion():
746
+ t -= D[g]
747
+ else:
748
+ t -= D[g]
749
+
750
+ # If k = 0, then t has total measure zero. However, this is not true when k != 0
751
+ # (unlike Prop 5.1 of [PS1] this is not a lift of classical symbol).
752
+ # So instead we simply add (const)*mu_1 to some (non-torsion) v[j] to fix this
753
+ # here since (mu_1 |_k ([a,b,c,d]-1))(trivial char) = chi(a) k a^{k-1} c ,
754
+ # we take the constant to be minus the total measure of t divided by (chi(a) k a^{k-1} c)
755
+
756
+ if k != 0:
757
+ j = 1
758
+ g = manin.gens()[j]
759
+ while (g in manin.reps_with_two_torsion()) or (g in manin.reps_with_three_torsion()) and (j < len(manin.gens())):
760
+ j = j + 1
761
+ g = manin.gens()[j]
762
+ if j == len(manin.gens()):
763
+ raise ValueError("everything is 2 or 3 torsion! NOT YET IMPLEMENTED IN THIS CASE")
764
+
765
+ gam = manin.gammas[g]
766
+ a = gam.matrix()[0, 0]
767
+ c = gam.matrix()[1, 0]
768
+
769
+ if self.coefficient_module()._character is not None:
770
+ chara = self.coefficient_module()._character(a)
771
+ else:
772
+ chara = 1
773
+ err = -t.moment(0) / (chara * k * a ** (k - 1) * c)
774
+ v = [0] * M
775
+ v[1] = 1
776
+ mu_1 = self.base_ring()(err) * self.coefficient_module()(v)
777
+ D[g] += mu_1
778
+ t = t + mu_1 * gam - mu_1
779
+
780
+ Id = manin.gens()[0]
781
+ if not self.coefficient_module().is_symk():
782
+ mu = t.solve_difference_equation()
783
+ D[Id] = -mu
784
+ else:
785
+ if self.coefficient_module()._k == 0:
786
+ D[Id] = self.coefficient_module().random_element()
787
+ else:
788
+ raise ValueError("Not implemented for symk with k>0 yet")
789
+
790
+ return self(D)
791
+
792
+
793
+ def cusps_from_mat(g):
794
+ r"""
795
+ Return the cusps associated to an element of a congruence subgroup.
796
+
797
+ INPUT:
798
+
799
+ - ``g`` -- an element of a congruence subgroup or a matrix
800
+
801
+ OUTPUT: a tuple of cusps associated to ``g``
802
+
803
+ EXAMPLES::
804
+
805
+ sage: from sage.modular.pollack_stevens.space import cusps_from_mat
806
+ sage: g = SL2Z.one()
807
+ sage: cusps_from_mat(g)
808
+ (+Infinity, 0)
809
+
810
+ You can also just give the matrix of ``g``::
811
+
812
+ sage: type(g)
813
+ <class 'sage.modular.arithgroup.arithgroup_element.ArithmeticSubgroupElement'>
814
+ sage: cusps_from_mat(g.matrix())
815
+ (+Infinity, 0)
816
+
817
+ Another example::
818
+
819
+ sage: from sage.modular.pollack_stevens.space import cusps_from_mat
820
+ sage: g = GammaH(3, [2]).generators()[1].matrix(); g
821
+ [-1 1]
822
+ [-3 2]
823
+ sage: cusps_from_mat(g)
824
+ (1/3, 1/2)
825
+ """
826
+ if isinstance(g, (ArithmeticSubgroupElement, Sigma0Element)):
827
+ g = g.matrix()
828
+ a, b, c, d = g.list()
829
+ if c:
830
+ ac = a / c
831
+ else:
832
+ ac = oo
833
+ if d:
834
+ bd = b / d
835
+ else:
836
+ bd = oo
837
+ return ac, bd
838
+
839
+
840
+ def ps_modsym_from_elliptic_curve(E, sign=0, implementation='eclib'):
841
+ r"""
842
+ Return the overconvergent modular symbol associated to
843
+ an elliptic curve defined over the rationals.
844
+
845
+ INPUT:
846
+
847
+ - ``E`` -- an elliptic curve defined over the rationals
848
+
849
+ - ``sign`` -- the sign (default: 0). If nonzero, returns either
850
+ the plus (if ``sign`` == 1) or the minus (if ``sign`` == -1) modular
851
+ symbol. The default of 0 returns the sum of the plus and minus symbols.
852
+
853
+ - ``implementation`` -- either ``'eclib'`` (default) or ``'sage'``. This
854
+ determines which implementation of the underlying classical
855
+ modular symbols is used.
856
+
857
+ OUTPUT: the overconvergent modular symbol associated to ``E``
858
+
859
+ EXAMPLES::
860
+
861
+ sage: # needs eclib
862
+ sage: E = EllipticCurve('113a1')
863
+ sage: symb = E.pollack_stevens_modular_symbol() # indirect doctest
864
+ sage: symb
865
+ Modular symbol of level 113 with values in Sym^0 Q^2
866
+ sage: symb.values()
867
+ [-1/2, 1, -1, 0, 0, 1, 1, -1, 0, -1, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, 0]
868
+
869
+ sage: E = EllipticCurve([0,1])
870
+ sage: symb = E.pollack_stevens_modular_symbol()
871
+ sage: symb.values()
872
+ [-1/6, 1/3, 1/2, 1/6, -1/6, 1/3, -1/3, -1/2, -1/6, 1/6, 0, -1/6, -1/6]
873
+ """
874
+ if E.base_ring() is not QQ:
875
+ raise ValueError("The elliptic curve must be defined over the "
876
+ "rationals.")
877
+ sign = Integer(sign)
878
+ if sign not in [0, 1, -1]:
879
+ raise ValueError("The sign must be either 0, 1 or -1")
880
+ N = E.conductor()
881
+ V = PollackStevensModularSymbols(Gamma0(N), 0)
882
+ D = V.coefficient_module()
883
+ manin = V.source()
884
+ # if sage's modular symbols are used we take the
885
+ # normalization given by 'L_ratio' in modular_symbol
886
+ if sign <= 0:
887
+ minus_sym = E.modular_symbol(sign=-1, implementation=implementation)
888
+ if sign >= 0:
889
+ plus_sym = E.modular_symbol(sign=1, implementation=implementation)
890
+ val = {}
891
+ for g in manin.gens():
892
+ ac, bd = cusps_from_mat(g)
893
+ val[g] = D(0)
894
+ if sign >= 0:
895
+ val[g] += D(plus_sym(ac) - plus_sym(bd))
896
+ if sign <= 0:
897
+ val[g] += D(minus_sym(ac) - minus_sym(bd))
898
+ return V(val)
899
+
900
+
901
+ def ps_modsym_from_simple_modsym_space(A, name='alpha'):
902
+ r"""
903
+ Return some choice -- only well defined up a nonzero scalar (!) -- of an
904
+ overconvergent modular symbol that corresponds to ``A``.
905
+
906
+ INPUT:
907
+
908
+ - ``A`` -- nonzero simple Hecke equivariant new space of modular symbols,
909
+ which need not be cuspidal
910
+
911
+ OUTPUT:
912
+
913
+ A choice of corresponding overconvergent modular symbols; when dim(A)>1,
914
+ we make an arbitrary choice of defining polynomial for the codomain field.
915
+
916
+ EXAMPLES:
917
+
918
+ The level 11 example::
919
+
920
+ sage: from sage.modular.pollack_stevens.space import ps_modsym_from_simple_modsym_space
921
+ sage: A = ModularSymbols(11, sign=1, weight=2).decomposition()[0]
922
+ sage: A.is_cuspidal()
923
+ True
924
+ sage: f = ps_modsym_from_simple_modsym_space(A); f
925
+ Modular symbol of level 11 with values in Sym^0 Q^2
926
+ sage: f.values()
927
+ [1, -5/2, -5/2]
928
+ sage: f.weight() # this is A.weight()-2 !!!!!!
929
+ 0
930
+
931
+ And the -1 sign for the level 11 example::
932
+
933
+ sage: A = ModularSymbols(11, sign=-1, weight=2).decomposition()[0]
934
+ sage: f = ps_modsym_from_simple_modsym_space(A); f.values()
935
+ [0, 1, -1]
936
+
937
+ A does not have to be cuspidal; it can be Eisenstein::
938
+
939
+ sage: A = ModularSymbols(11, sign=1, weight=2).decomposition()[1]
940
+ sage: A.is_cuspidal()
941
+ False
942
+ sage: f = ps_modsym_from_simple_modsym_space(A); f
943
+ Modular symbol of level 11 with values in Sym^0 Q^2
944
+ sage: f.values()
945
+ [1, 0, 0]
946
+
947
+ We create the simplest weight 2 example in which ``A`` has dimension
948
+ bigger than 1::
949
+
950
+ sage: A = ModularSymbols(23, sign=1, weight=2).decomposition()[0]
951
+ sage: f = ps_modsym_from_simple_modsym_space(A); f.values()
952
+ [1, 0, 0, 0, 0]
953
+ sage: A = ModularSymbols(23, sign=-1, weight=2).decomposition()[0]
954
+ sage: f = ps_modsym_from_simple_modsym_space(A); f.values()
955
+ [0, 1, -alpha, alpha, -1]
956
+ sage: f.base_ring()
957
+ Number Field in alpha with defining polynomial x^2 + x - 1
958
+
959
+ We create the +1 modular symbol attached to the weight 12 modular form ``Delta``::
960
+
961
+ sage: A = ModularSymbols(1, sign=+1, weight=12).decomposition()[0]
962
+ sage: f = ps_modsym_from_simple_modsym_space(A); f
963
+ Modular symbol of level 1 with values in Sym^10 Q^2
964
+ sage: f.values()
965
+ [(-1620/691, 0, 1, 0, -9/14, 0, 9/14, 0, -1, 0, 1620/691), (1620/691, 1620/691, 929/691, -453/691, -29145/9674, -42965/9674, -2526/691, -453/691, 1620/691, 1620/691, 0), (0, -1620/691, -1620/691, 453/691, 2526/691, 42965/9674, 29145/9674, 453/691, -929/691, -1620/691, -1620/691)]
966
+
967
+ And, the -1 modular symbol attached to ``Delta``::
968
+
969
+ sage: A = ModularSymbols(1, sign=-1, weight=12).decomposition()[0]
970
+ sage: f = ps_modsym_from_simple_modsym_space(A); f
971
+ Modular symbol of level 1 with values in Sym^10 Q^2
972
+ sage: f.values()
973
+ [(0, 1, 0, -25/48, 0, 5/12, 0, -25/48, 0, 1, 0), (0, -1, -2, -119/48, -23/12, -5/24, 23/12, 3, 2, 0, 0), (0, 0, 2, 3, 23/12, -5/24, -23/12, -119/48, -2, -1, 0)]
974
+
975
+ A consistency check with :meth:`sage.modular.pollack_stevens.space.ps_modsym_from_simple_modsym_space`::
976
+
977
+ sage: # needs eclib
978
+ sage: from sage.modular.pollack_stevens.space import ps_modsym_from_simple_modsym_space
979
+ sage: E = EllipticCurve('11a')
980
+ sage: f_E = E.pollack_stevens_modular_symbol(); f_E.values()
981
+ [-1/5, 1, 0]
982
+ sage: A = ModularSymbols(11, sign=1, weight=2).decomposition()[0]
983
+ sage: f_plus = ps_modsym_from_simple_modsym_space(A); f_plus.values()
984
+ [1, -5/2, -5/2]
985
+ sage: A = ModularSymbols(11, sign=-1, weight=2).decomposition()[0]
986
+ sage: f_minus = ps_modsym_from_simple_modsym_space(A); f_minus.values()
987
+ [0, 1, -1]
988
+
989
+ We find that a linear combination of the plus and minus parts equals the
990
+ Pollack-Stevens symbol attached to ``E``. This illustrates how
991
+ ``ps_modsym_from_simple_modsym_space`` is only well-defined up to a nonzero
992
+ scalar::
993
+
994
+ sage: # needs eclib
995
+ sage: (-1/5)*vector(QQ, f_plus.values()) + (1/2)*vector(QQ, f_minus.values())
996
+ (-1/5, 1, 0)
997
+ sage: vector(QQ, f_E.values())
998
+ (-1/5, 1, 0)
999
+
1000
+ The next few examples all illustrate the ways in which exceptions are
1001
+ raised if A does not satisfy various constraints.
1002
+
1003
+ First, ``A`` must be new::
1004
+
1005
+ sage: A = ModularSymbols(33,sign=1).cuspidal_subspace().old_subspace()
1006
+ sage: ps_modsym_from_simple_modsym_space(A)
1007
+ Traceback (most recent call last):
1008
+ ...
1009
+ ValueError: A must be new
1010
+
1011
+ ``A`` must be simple::
1012
+
1013
+ sage: A = ModularSymbols(43,sign=1).cuspidal_subspace()
1014
+ sage: ps_modsym_from_simple_modsym_space(A)
1015
+ Traceback (most recent call last):
1016
+ ...
1017
+ ValueError: A must be simple
1018
+
1019
+ ``A`` must have sign -1 or +1 in order to be simple::
1020
+
1021
+ sage: A = ModularSymbols(11).cuspidal_subspace()
1022
+ sage: ps_modsym_from_simple_modsym_space(A)
1023
+ Traceback (most recent call last):
1024
+ ...
1025
+ ValueError: A must have sign +1 or -1 (otherwise it is not simple)
1026
+
1027
+ The dimension must be positive::
1028
+
1029
+ sage: A = ModularSymbols(10).cuspidal_subspace(); A
1030
+ Modular Symbols subspace of dimension 0 of Modular Symbols space of dimension 3 for Gamma_0(10) of weight 2 with sign 0 over Rational Field
1031
+ sage: ps_modsym_from_simple_modsym_space(A)
1032
+ Traceback (most recent call last):
1033
+ ...
1034
+ ValueError: A must have positive dimension
1035
+
1036
+ We check that forms of nontrivial character are getting handled correctly::
1037
+
1038
+ sage: from sage.modular.pollack_stevens.space import ps_modsym_from_simple_modsym_space
1039
+ sage: f = Newforms(Gamma1(13), names='a')[0]
1040
+ sage: phi = ps_modsym_from_simple_modsym_space(f.modular_symbols(1))
1041
+ sage: phi.hecke(7)
1042
+ Modular symbol of level 13 with values in Sym^0 (Number Field in alpha with defining polynomial x^2 + 3*x + 3)^2 twisted by Dirichlet character modulo 13 of conductor 13 mapping 2 |--> -alpha - 1
1043
+ sage: phi.hecke(7).values()
1044
+ [0, 0, 0, 0, 0]
1045
+ """
1046
+ if A.dimension() == 0:
1047
+ raise ValueError("A must have positive dimension")
1048
+
1049
+ if A.sign() == 0:
1050
+ raise ValueError("A must have sign +1 or -1 (otherwise it is"
1051
+ " not simple)")
1052
+
1053
+ if not A.is_new():
1054
+ raise ValueError("A must be new")
1055
+
1056
+ if not A.is_simple():
1057
+ raise ValueError("A must be simple")
1058
+
1059
+ M = A.ambient_module()
1060
+ w = A.dual_eigenvector(name)
1061
+ K = w.base_ring()
1062
+ chi = A.q_eigenform_character(name)
1063
+ V = PollackStevensModularSymbols(chi, A.weight() - 2, base_ring=K, sign=A.sign())
1064
+ D = V.coefficient_module()
1065
+ # N = V.level()
1066
+ k = V.weight() # = A.weight() - 2
1067
+ manin = V.source()
1068
+ val = {}
1069
+ for g in manin.gens():
1070
+ ac, bd = cusps_from_mat(g)
1071
+ v = []
1072
+ for j in range(k + 1):
1073
+ # TODO: The following might be backward: it should be the coefficient of X^j Y^(k-j)
1074
+ v.append(w.dot_product(M.modular_symbol([j, ac, bd]).element()) * (-1) ** (k - j))
1075
+ val[g] = D(v)
1076
+ return V(val)