passagemath-schemes 10.6.38__cp314-cp314t-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of passagemath-schemes might be problematic. Click here for more details.

Files changed (314) hide show
  1. passagemath_schemes/.dylibs/libflint.21.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.38.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.38.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.38.dist-info/RECORD +314 -0
  9. passagemath_schemes-10.6.38.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.38.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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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,59 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.combinat sage.libs.flint
3
+ r"""
4
+ This module is now called ``ring.py`` (see :issue:`31559`). Do not import from here as
5
+ it will generate a deprecation warning.
6
+
7
+ TESTS::
8
+
9
+ sage: from sage.modular.modform.ring import find_generators
10
+ sage: find_generators(ModularFormsRing(1))
11
+ doctest:warning
12
+ ...
13
+ DeprecationWarning: find_generators is deprecated. Please use sage.modular.modform.ring.generators instead.
14
+ See https://github.com/sagemath/sage/issues/31559 for details.
15
+ [(4,
16
+ 1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + 30240*q^5 + 60480*q^6 + 82560*q^7 + 140400*q^8 + 181680*q^9 + O(q^10)),
17
+ (6,
18
+ 1 - 504*q - 16632*q^2 - 122976*q^3 - 532728*q^4 - 1575504*q^5 - 4058208*q^6 - 8471232*q^7 - 17047800*q^8 - 29883672*q^9 + O(q^10))]
19
+
20
+ ::
21
+
22
+ sage: from sage.modular.modform.find_generators import find_generators
23
+ sage: find_generators(ModularFormsRing(1))
24
+ doctest:warning
25
+ ...
26
+ DeprecationWarning: Importing find_generators from here is deprecated; please use "from sage.modular.modform.ring import find_generators" instead.
27
+ See https://github.com/sagemath/sage/issues/31559 for details.
28
+ [(4,
29
+ 1 + 240*q + 2160*q^2 + 6720*q^3 + 17520*q^4 + 30240*q^5 + 60480*q^6 + 82560*q^7 + 140400*q^8 + 181680*q^9 + O(q^10)),
30
+ (6,
31
+ 1 - 504*q - 16632*q^2 - 122976*q^3 - 532728*q^4 - 1575504*q^5 - 4058208*q^6 - 8471232*q^7 - 17047800*q^8 - 29883672*q^9 + O(q^10))]
32
+
33
+ ::
34
+
35
+ sage: from sage.modular.modform.ring import basis_for_modform_space
36
+ sage: basis_for_modform_space(ModularFormsRing(1), 4)
37
+ doctest:warning
38
+ ...
39
+ DeprecationWarning: basis_for_modform_space is deprecated. Please use sage.modular.modform.ring.q_expansion_basis instead.
40
+ See https://github.com/sagemath/sage/issues/31559 for details.
41
+ [1 + 240*q + O(q^2)]
42
+
43
+ ::
44
+
45
+ sage: from sage.modular.modform.find_generators import _span_of_forms_in_weight
46
+ sage: forms = [(4, 240*eisenstein_series_qexp(4,5)), (6,504*eisenstein_series_qexp(6,5))]
47
+ sage: _span_of_forms_in_weight(forms, 12, prec=5)
48
+ doctest:warning
49
+ ...
50
+ DeprecationWarning: Importing _span_of_forms_in_weight from here is deprecated; please use "from sage.modular.modform.ring import _span_of_forms_in_weight" instead.
51
+ See https://github.com/sagemath/sage/issues/31559 for details.
52
+ Vector space of degree 5 and dimension 2 over Rational Field
53
+ Basis matrix:
54
+ [ 1 0 196560 16773120 398034000]
55
+ [ 0 1 -24 252 -1472]
56
+ """
57
+
58
+ from sage.misc.lazy_import import lazy_import
59
+ lazy_import('sage.modular.modform.ring', ('_span_of_forms_in_weight', 'find_generators', 'basis_for_modform_space', 'ModularFormsRing'), deprecation=31559)
@@ -0,0 +1,154 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ r"""
3
+ Compute spaces of half-integral weight modular forms
4
+
5
+ Based on an algorithm in Basmaji's thesis.
6
+
7
+ AUTHORS:
8
+
9
+ - William Stein (2007-08)
10
+ """
11
+
12
+ from sage.matrix.matrix_space import MatrixSpace
13
+ from sage.modular.dirichlet import DirichletGroup
14
+
15
+ from . import constructor
16
+
17
+ from .theta import theta2_qexp, theta_qexp
18
+ from copy import copy
19
+
20
+
21
+ def half_integral_weight_modform_basis(chi, k, prec):
22
+ r"""
23
+ A basis for the space of weight `k/2` forms with character
24
+ `\chi`. The modulus of `\chi` must be divisible by
25
+ `16` and `k` must be odd and `>1`.
26
+
27
+ INPUT:
28
+
29
+ - ``chi`` -- a Dirichlet character with modulus divisible by 16
30
+
31
+ - ``k`` -- an odd integer > 1
32
+
33
+ - ``prec`` -- positive integer
34
+
35
+ OUTPUT: list of power series
36
+
37
+ .. warning::
38
+
39
+ 1. This code is very slow because it requests computation of a
40
+ basis of modular forms for integral weight spaces, and that
41
+ computation is still very slow.
42
+
43
+ 2. If you give an input prec that is too small, then the output
44
+ list of power series may be larger than the dimension of the
45
+ space of half-integral forms.
46
+
47
+ EXAMPLES:
48
+
49
+ We compute some half-integral weight forms of level 16\*7
50
+
51
+ ::
52
+
53
+ sage: half_integral_weight_modform_basis(DirichletGroup(16*7).0^2,3,30)
54
+ [q - 2*q^2 - q^9 + 2*q^14 + 6*q^18 - 2*q^21 - 4*q^22 - q^25 + O(q^30),
55
+ q^2 - q^14 - 3*q^18 + 2*q^22 + O(q^30),
56
+ q^4 - q^8 - q^16 + q^28 + O(q^30),
57
+ q^7 - 2*q^15 + O(q^30)]
58
+
59
+ The following illustrates that choosing too low of a precision can
60
+ give an incorrect answer.
61
+
62
+ ::
63
+
64
+ sage: half_integral_weight_modform_basis(DirichletGroup(16*7).0^2,3,20)
65
+ [q - 2*q^2 - q^9 + 2*q^14 + 6*q^18 + O(q^20),
66
+ q^2 - q^14 - 3*q^18 + O(q^20),
67
+ q^4 - 2*q^8 + 2*q^12 - 4*q^16 + O(q^20),
68
+ q^7 - 2*q^8 + 4*q^12 - 2*q^15 - 6*q^16 + O(q^20),
69
+ q^8 - 2*q^12 + 3*q^16 + O(q^20)]
70
+
71
+ We compute some spaces of low level and the first few possible
72
+ weights.
73
+
74
+ ::
75
+
76
+ sage: half_integral_weight_modform_basis(DirichletGroup(16,QQ).1, 3, 10)
77
+ []
78
+ sage: half_integral_weight_modform_basis(DirichletGroup(16,QQ).1, 5, 10)
79
+ [q - 2*q^3 - 2*q^5 + 4*q^7 - q^9 + O(q^10)]
80
+ sage: half_integral_weight_modform_basis(DirichletGroup(16,QQ).1, 7, 10)
81
+ [q - 2*q^2 + 4*q^3 + 4*q^4 - 10*q^5 - 16*q^7 + 19*q^9 + O(q^10),
82
+ q^2 - 2*q^3 - 2*q^4 + 4*q^5 + 4*q^7 - 8*q^9 + O(q^10),
83
+ q^3 - 2*q^5 - 2*q^7 + 4*q^9 + O(q^10)]
84
+ sage: half_integral_weight_modform_basis(DirichletGroup(16,QQ).1, 9, 10)
85
+ [q - 2*q^2 + 4*q^3 - 8*q^4 + 14*q^5 + 16*q^6 - 40*q^7 + 16*q^8 - 57*q^9 + O(q^10),
86
+ q^2 - 2*q^3 + 4*q^4 - 8*q^5 - 8*q^6 + 20*q^7 - 8*q^8 + 32*q^9 + O(q^10),
87
+ q^3 - 2*q^4 + 4*q^5 + 4*q^6 - 10*q^7 - 16*q^9 + O(q^10),
88
+ q^4 - 2*q^5 - 2*q^6 + 4*q^7 + 4*q^9 + O(q^10),
89
+ q^5 - 2*q^7 - 2*q^9 + O(q^10)]
90
+
91
+ This example once raised an error (see :issue:`5792`).
92
+
93
+ ::
94
+
95
+ sage: half_integral_weight_modform_basis(trivial_character(16),9,10)
96
+ [q - 2*q^2 + 4*q^3 - 8*q^4 + 4*q^6 - 16*q^7 + 48*q^8 - 15*q^9 + O(q^10),
97
+ q^2 - 2*q^3 + 4*q^4 - 2*q^6 + 8*q^7 - 24*q^8 + O(q^10),
98
+ q^3 - 2*q^4 - 4*q^7 + 12*q^8 + O(q^10),
99
+ q^4 - 6*q^8 + O(q^10)]
100
+
101
+
102
+ ALGORITHM: Basmaji (page 55 of his Essen thesis, "Ein Algorithmus
103
+ zur Berechnung von Hecke-Operatoren und Anwendungen auf modulare
104
+ Kurven", https://web.archive.org/web/20160905111513/http://wstein.org/scans/papers/basmaji/thesis_of_basmaji.dvi).
105
+
106
+ Let `S = S_{k+1}(\epsilon)` be the space of cusp forms of
107
+ even integer weight `k+1` and character
108
+ `\varepsilon = \chi \psi^{(k+1)/2}`, where `\psi`
109
+ is the nontrivial mod-4 Dirichlet character. Let `U` be the
110
+ subspace of `S \times S` of elements `(a,b)` such
111
+ that `\Theta_2 a = \Theta_3 b`. Then `U` is
112
+ isomorphic to `S_{k/2}(\chi)` via the map
113
+ `(a,b) \mapsto a/\Theta_3`.
114
+ """
115
+ if chi.modulus() % 16:
116
+ raise ValueError("the character must have modulus divisible by 16")
117
+
118
+ if not k % 2:
119
+ raise ValueError("k (=%s) must be odd" % k)
120
+
121
+ if k < 3:
122
+ raise ValueError("k (=%s) must be at least 3" % k)
123
+
124
+ chi = chi.minimize_base_ring()
125
+ psi = chi.parent()(DirichletGroup(4, chi.base_ring()).gen())
126
+ eps = chi*psi**((k+1) // 2)
127
+ eps = eps.minimize_base_ring()
128
+ M = constructor.ModularForms(eps, (k+1)//2)
129
+ C = M.cuspidal_subspace()
130
+ B = C.basis()
131
+
132
+ # This computation of S below -- of course --dominates the whole function.
133
+ S = [f.q_expansion(prec) for f in B]
134
+
135
+ T2 = theta2_qexp(prec)
136
+ T3 = theta_qexp(prec)
137
+ n = len(S)
138
+ MS = MatrixSpace(M.base_ring(), 2*n, prec)
139
+ A = copy(MS.zero_matrix())
140
+
141
+ for i in range(n):
142
+ T2f = T2*S[i]
143
+ T3f = T3*S[i]
144
+ for j in range(prec):
145
+ A[i, j] = T2f[j]
146
+ A[n+i, j] = -T3f[j]
147
+
148
+ B = A.kernel().basis()
149
+ a_vec = [sum([b[i]*S[i] for i in range(n)]) for b in B]
150
+ if len(a_vec) == 0:
151
+ return []
152
+ R = a_vec[0].parent()
153
+ t3 = R(T3)
154
+ return [R(a) / t3 for a in a_vec]
@@ -0,0 +1,247 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint
3
+ """
4
+ Hecke operators on `q`-expansions
5
+ """
6
+ # ****************************************************************************
7
+ # Copyright (C) 2004-2006 William Stein <wstein@gmail.com>
8
+ #
9
+ # This program is free software: you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License as published by
11
+ # the Free Software Foundation, either version 2 of the License, or
12
+ # (at your option) any later version.
13
+ # https://www.gnu.org/licenses/
14
+ # ****************************************************************************
15
+
16
+ from sage.arith.misc import divisors, gcd
17
+ from sage.matrix.constructor import matrix
18
+ from sage.matrix.matrix_space import MatrixSpace
19
+ from sage.misc.lazy_import import lazy_import
20
+ from sage.rings.infinity import Infinity
21
+ from sage.rings.integer import Integer
22
+ from sage.rings.integer_ring import ZZ
23
+ from sage.rings.power_series_ring_element import PowerSeries
24
+
25
+ lazy_import('sage.rings.number_field.number_field', 'CyclotomicField')
26
+
27
+ from sage.modular.dirichlet import DirichletGroup, DirichletCharacter
28
+ from .element import ModularFormElement
29
+
30
+
31
+ def hecke_operator_on_qexp(f, n, k, eps=None,
32
+ prec=None, check=True, _return_list=False):
33
+ r"""
34
+ Given the `q`-expansion `f` of a modular form with character
35
+ `\varepsilon`, this function computes the image of `f` under the
36
+ Hecke operator `T_{n,k}` of weight `k`.
37
+
38
+ EXAMPLES::
39
+
40
+ sage: M = ModularForms(1,12)
41
+ sage: hecke_operator_on_qexp(M.basis()[0], 3, 12)
42
+ 252*q - 6048*q^2 + 63504*q^3 - 370944*q^4 + O(q^5)
43
+ sage: hecke_operator_on_qexp(M.basis()[0], 1, 12, prec=7)
44
+ q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 - 6048*q^6 + O(q^7)
45
+ sage: hecke_operator_on_qexp(M.basis()[0], 1, 12)
46
+ q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 - 6048*q^6 - 16744*q^7 + 84480*q^8
47
+ - 113643*q^9 - 115920*q^10 + 534612*q^11 - 370944*q^12 - 577738*q^13 + O(q^14)
48
+
49
+ sage: M.prec(20)
50
+ 20
51
+ sage: hecke_operator_on_qexp(M.basis()[0], 3, 12)
52
+ 252*q - 6048*q^2 + 63504*q^3 - 370944*q^4 + 1217160*q^5 - 1524096*q^6 + O(q^7)
53
+ sage: hecke_operator_on_qexp(M.basis()[0], 1, 12)
54
+ q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 - 6048*q^6 - 16744*q^7 + 84480*q^8
55
+ - 113643*q^9 - 115920*q^10 + 534612*q^11 - 370944*q^12 - 577738*q^13
56
+ + 401856*q^14 + 1217160*q^15 + 987136*q^16 - 6905934*q^17 + 2727432*q^18
57
+ + 10661420*q^19 - 7109760*q^20 + O(q^21)
58
+
59
+ sage: (hecke_operator_on_qexp(M.basis()[0], 1, 12)*252).add_bigoh(7)
60
+ 252*q - 6048*q^2 + 63504*q^3 - 370944*q^4 + 1217160*q^5 - 1524096*q^6 + O(q^7)
61
+
62
+ sage: hecke_operator_on_qexp(M.basis()[0], 6, 12)
63
+ -6048*q + 145152*q^2 - 1524096*q^3 + O(q^4)
64
+
65
+ An example on a formal power series::
66
+
67
+ sage: R.<q> = QQ[[]]
68
+ sage: f = q + q^2 + q^3 + q^7 + O(q^8)
69
+ sage: hecke_operator_on_qexp(f, 3, 12)
70
+ q + O(q^3)
71
+ sage: hecke_operator_on_qexp(delta_qexp(24), 3, 12).prec()
72
+ 8
73
+ sage: hecke_operator_on_qexp(delta_qexp(25), 3, 12).prec()
74
+ 9
75
+
76
+ An example of computing `T_{p,k}` in characteristic `p`::
77
+
78
+ sage: p = 199
79
+ sage: fp = delta_qexp(prec=p^2+1, K=GF(p))
80
+ sage: tfp = hecke_operator_on_qexp(fp, p, 12)
81
+ sage: tfp == fp[p] * fp
82
+ True
83
+ sage: tf = hecke_operator_on_qexp(delta_qexp(prec=p^2+1), p, 12).change_ring(GF(p))
84
+ sage: tfp == tf
85
+ True
86
+ """
87
+ if eps is None:
88
+ # Need to have base_ring=ZZ to work over finite fields, since
89
+ # ZZ can coerce to GF(p), but QQ can't.
90
+ eps = DirichletGroup(1, base_ring=ZZ)[0]
91
+ if check:
92
+ if not isinstance(f, (PowerSeries, ModularFormElement)):
93
+ raise TypeError("f (=%s) must be a power series or modular form" % f)
94
+ if not isinstance(eps, DirichletCharacter):
95
+ raise TypeError("eps (=%s) must be a Dirichlet character" % eps)
96
+ k = Integer(k)
97
+ n = Integer(n)
98
+ v = []
99
+
100
+ if prec is None:
101
+ if isinstance(f, ModularFormElement):
102
+ # always want at least three coefficients, but not too many, unless
103
+ # requested
104
+ pr = max(f.prec(), f.parent().prec(), (n+1)*3)
105
+ pr = min(pr, 100*(n+1))
106
+ prec = pr // n + 1
107
+ else:
108
+ prec = (f.prec() / ZZ(n)).ceil()
109
+ if prec == Infinity:
110
+ prec = f.parent().default_prec() // n + 1
111
+
112
+ if f.prec() < prec:
113
+ f._compute_q_expansion(prec)
114
+
115
+ p = Integer(f.base_ring().characteristic())
116
+ if k != 1 and p.is_prime() and n.is_power_of(p):
117
+ # if computing T_{p^a} in characteristic p, use the simpler (and faster)
118
+ # formula
119
+ v = [f[m*n] for m in range(prec)]
120
+ else:
121
+ l = k - 1
122
+ for m in range(prec):
123
+ am = sum([eps(d) * d**l * f[m*n//(d*d)]
124
+ for d in divisors(gcd(n, m)) if (m*n) % (d*d) == 0])
125
+ v.append(am)
126
+ if _return_list:
127
+ return v
128
+ if isinstance(f, ModularFormElement):
129
+ R = f.parent()._q_expansion_ring()
130
+ else:
131
+ R = f.parent()
132
+ return R(v, prec)
133
+
134
+
135
+ def _hecke_operator_on_basis(B, V, n, k, eps):
136
+ """
137
+ Do the work for hecke_operator_on_basis once the input
138
+ is normalized.
139
+
140
+ EXAMPLES::
141
+
142
+ sage: hecke_operator_on_basis(ModularForms(1,16).q_expansion_basis(30), 3, 16) # indirect doctest
143
+ [ -3348 0]
144
+ [ 0 14348908]
145
+
146
+ The following used to cause a segfault due to accidentally
147
+ transposed second and third argument (:issue:`2107`)::
148
+
149
+ sage: B = victor_miller_basis(100,30)
150
+ sage: t2 = hecke_operator_on_basis(B, 100, 2)
151
+ Traceback (most recent call last):
152
+ ...
153
+ ValueError: The given basis vectors must be linearly independent.
154
+ """
155
+ prec = V.degree()
156
+ TB = [hecke_operator_on_qexp(f, n, k, eps, prec, check=False, _return_list=True)
157
+ for f in B]
158
+ TB = [V.coordinate_vector(w) for w in TB]
159
+ return matrix(V.base_ring(), len(B), len(B), TB, sparse=False)
160
+
161
+
162
+ def hecke_operator_on_basis(B, n, k, eps=None, already_echelonized=False):
163
+ r"""
164
+ Given a basis `B` of `q`-expansions for a space of modular forms
165
+ with character `\varepsilon` to precision at least `\#B\cdot n+1`,
166
+ this function computes the matrix of `T_n` relative to `B`.
167
+
168
+ .. NOTE::
169
+
170
+ If the elements of B are not known to sufficient precision,
171
+ this function will report that the vectors are linearly
172
+ dependent (since they are to the specified precision).
173
+
174
+ INPUT:
175
+
176
+ - ``B`` -- list of `q`-expansions
177
+
178
+ - ``n`` -- integer >= 1
179
+
180
+ - ``k`` -- integer
181
+
182
+ - ``eps`` -- Dirichlet character
183
+
184
+ - ``already_echelonized`` -- boolean (default: ``False``); if ``True``, use
185
+ that the basis is already in Echelon form, which saves a lot of time
186
+
187
+ EXAMPLES::
188
+
189
+ sage: sage.modular.modform.constructor.ModularForms_clear_cache()
190
+ sage: ModularForms(1,12).q_expansion_basis()
191
+ [q - 24*q^2 + 252*q^3 - 1472*q^4 + 4830*q^5 + O(q^6),
192
+ 1 + 65520/691*q + 134250480/691*q^2 + 11606736960/691*q^3 + 274945048560/691*q^4 + 3199218815520/691*q^5 + O(q^6)]
193
+ sage: hecke_operator_on_basis(ModularForms(1,12).q_expansion_basis(), 3, 12)
194
+ Traceback (most recent call last):
195
+ ...
196
+ ValueError: The given basis vectors must be linearly independent.
197
+
198
+ sage: hecke_operator_on_basis(ModularForms(1,12).q_expansion_basis(30), 3, 12)
199
+ [ 252 0]
200
+ [ 0 177148]
201
+
202
+ TESTS:
203
+
204
+ This shows that the problem with finite fields reported at :issue:`8281` is solved::
205
+
206
+ sage: bas_mod5 = [f.change_ring(GF(5)) for f in victor_miller_basis(12, 20)]
207
+ sage: hecke_operator_on_basis(bas_mod5, 2, 12)
208
+ [4 0]
209
+ [0 1]
210
+
211
+ This shows that empty input is handled sensibly (:issue:`12202`)::
212
+
213
+ sage: # needs sage.rings.number_field
214
+ sage: x = hecke_operator_on_basis([], 3, 12); x
215
+ []
216
+ sage: x.parent()
217
+ Full MatrixSpace of 0 by 0 dense matrices over Cyclotomic Field of order 1 and degree 1
218
+ sage: y = hecke_operator_on_basis([], 3, 12, eps=DirichletGroup(13).0^2); y
219
+ []
220
+ sage: y.parent()
221
+ Full MatrixSpace of 0 by 0 dense matrices over Cyclotomic Field of order 12 and degree 4
222
+ """
223
+ if not isinstance(B, (list, tuple)):
224
+ raise TypeError("B (=%s) must be a list or tuple" % B)
225
+ if len(B) == 0:
226
+ if eps is None:
227
+ R = CyclotomicField(1)
228
+ else:
229
+ R = eps.base_ring()
230
+ return MatrixSpace(R, 0)(0)
231
+ f = B[0]
232
+ R = f.base_ring()
233
+ if eps is None:
234
+ eps = DirichletGroup(1, R)[0]
235
+ all_powerseries = True
236
+ for x in B:
237
+ if not isinstance(x, PowerSeries):
238
+ all_powerseries = False
239
+ if not all_powerseries:
240
+ raise TypeError("each element of B must be a power series")
241
+ n = Integer(n)
242
+ k = Integer(k)
243
+ prec = (f.prec() - 1) // n
244
+ A = R**prec
245
+ V = A.span_of_basis([g.padded_list(prec) for g in B],
246
+ already_echelonized=already_echelonized)
247
+ return _hecke_operator_on_basis(B, V, n, k, eps)
@@ -0,0 +1,47 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.flint
3
+ r"""
4
+ `q`-expansion of `j`-invariant
5
+ """
6
+ from .eis_series import eisenstein_series_qexp
7
+ from .vm_basis import delta_qexp
8
+ from sage.rings.rational_field import QQ
9
+
10
+
11
+ def j_invariant_qexp(prec=10, K=QQ):
12
+ r"""
13
+ Return the `q`-expansion of the `j`-invariant to
14
+ precision ``prec`` in the field `K`.
15
+
16
+ .. SEEALSO::
17
+
18
+ If you want to evaluate (numerically) the `j`-invariant at
19
+ certain points, see the special function :func:`elliptic_j`.
20
+
21
+ .. WARNING::
22
+
23
+ Stupid algorithm -- we divide by Delta, which is slow.
24
+
25
+ EXAMPLES::
26
+
27
+ sage: j_invariant_qexp(4)
28
+ q^-1 + 744 + 196884*q + 21493760*q^2 + 864299970*q^3 + O(q^4)
29
+ sage: j_invariant_qexp(2)
30
+ q^-1 + 744 + 196884*q + O(q^2)
31
+ sage: j_invariant_qexp(100, GF(2))
32
+ q^-1 + q^7 + q^15 + q^31 + q^47 + q^55 + q^71 + q^87 + O(q^100)
33
+ """
34
+ if prec <= -1:
35
+ raise ValueError("the prec must be nonnegative.")
36
+ prec += 2
37
+ g6 = -504*eisenstein_series_qexp(6, prec, K=QQ)
38
+ Delta = delta_qexp(prec).change_ring(QQ)
39
+ j = (g6*g6) * (~Delta) + 1728
40
+ if K != QQ:
41
+ return j.change_ring(K)
42
+ else:
43
+ return j
44
+
45
+
46
+ # NOTE: this needs to be sped up. The pari code src/basemath/trans3.c is
47
+ # faster.
@@ -0,0 +1,133 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs database_cremona_mini_ellcurve
3
+ r"""
4
+ Gross-Zagier L-series
5
+ """
6
+ from sage.rings.integer import Integer
7
+ from sage.structure.sage_object import SageObject
8
+ from sage.lfunctions.dokchitser import Dokchitser
9
+ from .l_series_gross_zagier_coeffs import gross_zagier_L_series
10
+ from sage.modular.dirichlet import kronecker_character
11
+
12
+
13
+ class GrossZagierLseries(SageObject):
14
+
15
+ def __init__(self, E, A, prec=53):
16
+ r"""
17
+ Class for the Gross-Zagier `L`-series.
18
+
19
+ This is attached to a pair `(E,A)` where `E` is an elliptic curve over
20
+ `\QQ` and `A` is an ideal class in an imaginary quadratic number field.
21
+
22
+ For the exact definition, in the more general setting of modular forms
23
+ instead of elliptic curves, see section IV of [GZ1986]_.
24
+
25
+ INPUT:
26
+
27
+ - ``E`` -- an elliptic curve over `\QQ`
28
+
29
+ - ``A`` -- an ideal class in an imaginary quadratic number field
30
+
31
+ - ``prec`` -- integer (default: 53); giving the required precision
32
+
33
+ EXAMPLES::
34
+
35
+ sage: e = EllipticCurve('37a')
36
+ sage: K.<a> = QuadraticField(-40)
37
+ sage: A = K.class_group().gen(0)
38
+ sage: from sage.modular.modform.l_series_gross_zagier import GrossZagierLseries
39
+ sage: G = GrossZagierLseries(e, A)
40
+
41
+ TESTS::
42
+
43
+ sage: K.<b> = QuadraticField(131)
44
+ sage: A = K.class_group().one()
45
+ sage: G = GrossZagierLseries(e, A)
46
+ Traceback (most recent call last):
47
+ ...
48
+ ValueError: A is not an ideal class in an imaginary quadratic field
49
+ """
50
+ self._E = E
51
+ self._N = N = E.conductor()
52
+ self._A = A
53
+ ideal = A.ideal()
54
+ K = A.gens()[0].parent()
55
+ D = K.disc()
56
+ if not (K.degree() == 2 and D < 0):
57
+ raise ValueError("A is not an ideal class in an"
58
+ " imaginary quadratic field")
59
+ Q = ideal.quadratic_form().reduced_form()
60
+ epsilon = - kronecker_character(D)(N)
61
+ self._dokchister = Dokchitser(N ** 2 * D ** 2,
62
+ [0, 0, 1, 1],
63
+ weight=2, eps=epsilon, prec=prec)
64
+ self._nterms = nterms = Integer(self._dokchister.num_coeffs())
65
+ if nterms > 1e6:
66
+ # just takes way to long
67
+ raise ValueError("Too many terms: {}".format(nterms))
68
+ zeta_ord = ideal.number_field().zeta_order()
69
+ an_list = gross_zagier_L_series(E.anlist(nterms + 1), Q, N, zeta_ord)
70
+ self._dokchister.gp().set('a', an_list[1:])
71
+ self._dokchister.init_coeffs('a[k]', 1)
72
+
73
+ def __call__(self, s, der=0):
74
+ r"""
75
+ Return the value at `s`.
76
+
77
+ INPUT:
78
+
79
+ - ``s`` -- complex number
80
+
81
+ - ``der`` -- order of derivative (default: 0)
82
+
83
+ EXAMPLES::
84
+
85
+ sage: e = EllipticCurve('37a')
86
+ sage: K.<a> = QuadraticField(-40)
87
+ sage: A = K.class_group().gen(0)
88
+ sage: from sage.modular.modform.l_series_gross_zagier import GrossZagierLseries
89
+ sage: G = GrossZagierLseries(e, A)
90
+ sage: G(3)
91
+ -0.272946890617590
92
+ sage: G(3, 1)
93
+ 0.212442670030741
94
+ """
95
+ return self._dokchister.derivative(s, der)
96
+
97
+ def taylor_series(self, s=1, series_prec=6, var='z'):
98
+ r"""
99
+ Return the Taylor series at `s`.
100
+
101
+ INPUT:
102
+
103
+ - ``s`` -- complex number (default: 1)
104
+ - ``series_prec`` -- number of terms (default: 6) in the Taylor series
105
+ - ``var`` -- variable (default: ``'z'``)
106
+
107
+ EXAMPLES::
108
+
109
+ sage: e = EllipticCurve('37a')
110
+ sage: K.<a> = QuadraticField(-40)
111
+ sage: A = K.class_group().gen(0)
112
+ sage: from sage.modular.modform.l_series_gross_zagier import GrossZagierLseries
113
+ sage: G = GrossZagierLseries(e, A)
114
+ sage: G.taylor_series(2,3)
115
+ -0.613002046122894 + 0.490374999263514*z - 0.122903033710382*z^2 + O(z^3)
116
+ """
117
+ return self._dokchister.taylor_series(s, series_prec, var)
118
+
119
+ def _repr_(self):
120
+ """
121
+ Return the string representation.
122
+
123
+ EXAMPLES::
124
+
125
+ sage: e = EllipticCurve('37a')
126
+ sage: K.<a> = QuadraticField(-40)
127
+ sage: A = K.class_group().gen(0)
128
+ sage: from sage.modular.modform.l_series_gross_zagier import GrossZagierLseries
129
+ sage: GrossZagierLseries(e, A)
130
+ Gross Zagier L-series attached to Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field with ideal class Fractional ideal class (2, 1/2*a)
131
+ """
132
+ msg = "Gross Zagier L-series attached to {} with ideal class {}"
133
+ return msg.format(self._E, self._A)