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,305 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ r"""
3
+ Modular parametrization of elliptic curves over `\QQ`
4
+
5
+ By the work of Taylor--Wiles et al. it is known that there
6
+ is a surjective morphism
7
+
8
+ .. MATH::
9
+
10
+ \phi_E: X_0(N) \rightarrow E.
11
+
12
+ from the modular curve `X_0(N)`, where `N` is the conductor of `E`.
13
+ The map sends the cusp `\infty` to the origin of `E`.
14
+
15
+ EXAMPLES::
16
+
17
+ sage: phi = EllipticCurve('11a1').modular_parametrization()
18
+ sage: phi
19
+ Modular parameterization
20
+ from the upper half plane
21
+ to Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20 over Rational Field
22
+ sage: phi(0.5+CDF(I))
23
+ (285684.320516... + 7.0...e-11*I : 1.526964169...e8 + 5.6...e-8*I : 1.00000000000000)
24
+ sage: phi.power_series(prec = 7)
25
+ (q^-2 + 2*q^-1 + 4 + 5*q + 8*q^2 + q^3 + 7*q^4 + O(q^5),
26
+ -q^-3 - 3*q^-2 - 7*q^-1 - 13 - 17*q - 26*q^2 - 19*q^3 + O(q^4))
27
+
28
+ AUTHORS:
29
+
30
+ - Chris Wuthrich (02/10): moved from ell_rational_field.py.
31
+ """
32
+ ######################################################################
33
+ # Copyright (C) 2010 William Stein <wstein@gmail.com>
34
+ #
35
+ # Distributed under the terms of the GNU General Public License (GPL)
36
+ #
37
+ # This code is distributed in the hope that it will be useful,
38
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
39
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
40
+ # General Public License for more details.
41
+ #
42
+ # The full text of the GPL is available at:
43
+ #
44
+ # http://www.gnu.org/licenses/
45
+ ######################################################################
46
+
47
+ from . import heegner
48
+
49
+ from sage.rings.laurent_series_ring import LaurentSeriesRing
50
+ from sage.rings.rational_field import RationalField
51
+ from sage.rings.complex_mpfr import ComplexField
52
+ from sage.rings.rational_field import QQ
53
+
54
+
55
+ class ModularParameterization:
56
+ r"""
57
+ This class represents the modular parametrization of an elliptic curve
58
+
59
+ .. MATH::
60
+
61
+ \phi_E: X_0(N) \rightarrow E.
62
+
63
+ Evaluation is done by passing through the lattice representation of `E`.
64
+
65
+ EXAMPLES::
66
+
67
+ sage: phi = EllipticCurve('11a1').modular_parametrization()
68
+ sage: phi
69
+ Modular parameterization
70
+ from the upper half plane
71
+ to Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20
72
+ over Rational Field
73
+ """
74
+ def __init__(self, E):
75
+ r"""
76
+ EXAMPLES::
77
+
78
+ sage: from sage.schemes.elliptic_curves.ell_rational_field import ModularParameterization
79
+ sage: phi = ModularParameterization(EllipticCurve('389a'))
80
+ sage: phi(CC.0/5)
81
+ (27.1965586309057 : -144.727322178982 : 1.00000000000000)
82
+
83
+ sage: phi == loads(dumps(phi))
84
+ True
85
+ """
86
+ self._E = E
87
+
88
+ def curve(self):
89
+ """
90
+ Return the curve associated to this modular parametrization.
91
+
92
+ EXAMPLES::
93
+
94
+ sage: E = EllipticCurve('15a')
95
+ sage: phi = E.modular_parametrization()
96
+ sage: phi.curve() is E
97
+ True
98
+ """
99
+ return self._E
100
+
101
+ def __repr__(self):
102
+ """
103
+ TESTS::
104
+
105
+ sage: E = EllipticCurve('37a')
106
+ sage: phi = E.modular_parametrization()
107
+ sage: phi
108
+ Modular parameterization from the upper half plane to Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field
109
+ sage: phi.__repr__()
110
+ 'Modular parameterization from the upper half plane to Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field'
111
+ """
112
+ return "Modular parameterization from the upper half plane to %s" % self._E
113
+
114
+ def __eq__(self, other):
115
+ r"""
116
+ Compare two modular parametrizations by simply comparing the elliptic curves.
117
+
118
+ EXAMPLES::
119
+
120
+ sage: E = EllipticCurve('37a1')
121
+ sage: phi = E.modular_parametrization()
122
+ sage: phi == phi
123
+ True
124
+ """
125
+ if not isinstance(other, ModularParameterization):
126
+ return False
127
+
128
+ return self._E == other._E
129
+
130
+ def __ne__(self, other):
131
+ """
132
+ Check whether ``self`` is not equal to ``other``.
133
+
134
+ EXAMPLES::
135
+
136
+ sage: E = EllipticCurve('37a1')
137
+ sage: phi = E.modular_parametrization()
138
+ sage: phi != phi
139
+ False
140
+ """
141
+ return not (self == other)
142
+
143
+ def __call__(self, z, prec=None):
144
+ r"""
145
+ Evaluate ``self`` at a point `z \in X_0(N)` where `z` is given by a
146
+ representative in the upper half plane.
147
+
148
+ All computations are done with ``prec``
149
+ bits of precision. If ``prec`` is not given, use the precision of `z`.
150
+
151
+ EXAMPLES::
152
+
153
+ sage: E = EllipticCurve('37a')
154
+ sage: phi = E.modular_parametrization()
155
+ sage: phi((sqrt(7)*I - 17)/74, 53) # needs sage.symbolic
156
+ (...e-16 - ...e-16*I : ...e-16 + ...e-16*I : 1.00000000000000)
157
+
158
+ Verify that the mapping is invariant under the action of `\Gamma_0(N)`
159
+ on the upper half plane::
160
+
161
+ sage: E = EllipticCurve('11a')
162
+ sage: phi = E.modular_parametrization()
163
+ sage: tau = CC((1+1j)/5)
164
+ sage: phi(tau)
165
+ (-3.92181329652811 - 12.2578555525366*I : 44.9649874434872 + 14.3257120944681*I : 1.00000000000000)
166
+ sage: phi(tau+1)
167
+ (-3.92181329652810 - 12.2578555525366*I : 44.9649874434872 + 14.3257120944681*I : 1.00000000000000)
168
+ sage: phi((6*tau+1) / (11*tau+2))
169
+ (-3.9218132965285... - 12.2578555525369*I : 44.964987443489... + 14.325712094467...*I : 1.00000000000000)
170
+
171
+ We can also apply the modular parametrization to a Heegner point on `X_0(N)`::
172
+
173
+ sage: H = heegner_points(389,-7,5); H
174
+ All Heegner points of conductor 5 on X_0(389) associated to QQ[sqrt(-7)]
175
+ sage: x = H[0]; x
176
+ Heegner point 5/778*sqrt(-7) - 147/778 of discriminant -7 and conductor 5 on X_0(389)
177
+ sage: E = EllipticCurve('389a'); phi = E.modular_parametrization()
178
+ sage: phi(x)
179
+ Heegner point of discriminant -7 and conductor 5 on elliptic curve of conductor 389
180
+ sage: phi(x).quadratic_form()
181
+ 389*x^2 + 147*x*y + 14*y^2
182
+
183
+ ALGORITHM:
184
+
185
+ Integrate the modular form attached to this elliptic curve from
186
+ `z` to `\infty` to get a point on the lattice representation of
187
+ `E`, then use the Weierstrass `\wp` function to map it to the
188
+ curve itself.
189
+ """
190
+ from sage.misc.verbose import verbose
191
+ if isinstance(z, heegner.HeegnerPointOnX0N):
192
+ return z.map_to_curve(self.curve())
193
+ # Map to the CC of CC/PeriodLattice.
194
+ tm = verbose("Evaluating modular parameterization to precision %s bits" % prec)
195
+ w = self.map_to_complex_numbers(z, prec=prec)
196
+ # Map to E via Weierstrass P
197
+ z = self._E.elliptic_exponential(w)
198
+ verbose("Finished evaluating modular parameterization", tm)
199
+ return z
200
+
201
+ def map_to_complex_numbers(self, z, prec=None):
202
+ r"""
203
+ Evaluate ``self`` at a point `z \in X_0(N)` where `z` is given by
204
+ a representative in the upper half plane, returning a point in
205
+ the complex numbers.
206
+
207
+ All computations are done with ``prec`` bits
208
+ of precision. If ``prec`` is not given, use the precision of `z`.
209
+ Use self(z) to compute the image of z on the Weierstrass equation
210
+ of the curve.
211
+
212
+ EXAMPLES::
213
+
214
+ sage: # needs sage.symbolic
215
+ sage: E = EllipticCurve('37a'); phi = E.modular_parametrization()
216
+ sage: x = polygen(ZZ, 'x')
217
+ sage: tau = (sqrt(7)*I - 17)/74
218
+ sage: z = phi.map_to_complex_numbers(tau); z
219
+ 0.929592715285395 - 1.22569469099340*I
220
+ sage: E.elliptic_exponential(z)
221
+ (...e-16 - ...e-16*I : ...e-16 + ...e-16*I : 1.00000000000000)
222
+ sage: phi(tau)
223
+ (...e-16 - ...e-16*I : ...e-16 + ...e-16*I : 1.00000000000000)
224
+ """
225
+ if prec is None:
226
+ try:
227
+ prec = z.parent().prec()
228
+ except AttributeError:
229
+ prec = 53
230
+ CC = ComplexField(prec)
231
+ if z in QQ:
232
+ raise NotImplementedError
233
+ z = CC(z)
234
+ if z.imag() <= 0:
235
+ raise ValueError("Point must be in the upper half plane")
236
+ # TODO: for very small imaginary part, maybe try to transform under
237
+ # \Gamma_0(N) to a better representative?
238
+ q = (2 * CC.gen() * CC.pi() * z).exp()
239
+ # nterms'th term is less than 2**-(prec+10) (c.f. eclib code)
240
+ nterms = (-(prec + 10) / q.abs().log2()).ceil()
241
+ # Use Horner's rule to sum the integral of the form
242
+ enumerated_an = list(enumerate(self._E.anlist(nterms)))[1:]
243
+ lattice_point = 0
244
+ for n, an in reversed(enumerated_an):
245
+ lattice_point += an / n
246
+ lattice_point *= q
247
+ return lattice_point
248
+
249
+ def power_series(self, prec=20):
250
+ r"""
251
+ Return the power series of this modular parametrization.
252
+
253
+ The curve must be a minimal model. The prec parameter determines
254
+ the number of significant terms. This means that X will be given up
255
+ to O(q^(prec-2)) and Y will be given up to O(q^(prec-3)).
256
+
257
+ OUTPUT:
258
+
259
+ A list of two Laurent series [`X(x)`,`Y(x)`] of degrees `-2`, `-3`,
260
+ respectively, which satisfy the equation of the elliptic curve.
261
+ There are modular functions on `\Gamma_0(N)` where `N` is the
262
+ conductor.
263
+
264
+ The series should satisfy the differential equation
265
+
266
+ .. MATH::
267
+
268
+ \frac{\mathrm{d}X}{2Y + a_1 X + a_3} = \frac{f(q)\, \mathrm{d}q}{q}
269
+
270
+ where `f` is ``self.curve().q_expansion()``.
271
+
272
+ EXAMPLES::
273
+
274
+ sage: E = EllipticCurve('389a1')
275
+ sage: phi = E.modular_parametrization()
276
+ sage: X, Y = phi.power_series(prec=10)
277
+ sage: X
278
+ q^-2 + 2*q^-1 + 4 + 7*q + 13*q^2 + 18*q^3 + 31*q^4 + 49*q^5 + 74*q^6 + 111*q^7 + O(q^8)
279
+ sage: Y
280
+ -q^-3 - 3*q^-2 - 8*q^-1 - 17 - 33*q - 61*q^2 - 110*q^3 - 186*q^4 - 320*q^5 - 528*q^6 + O(q^7)
281
+ sage: X,Y = phi.power_series()
282
+ sage: X
283
+ q^-2 + 2*q^-1 + 4 + 7*q + 13*q^2 + 18*q^3 + 31*q^4 + 49*q^5 + 74*q^6 + 111*q^7 + 173*q^8 + 251*q^9 + 379*q^10 + 560*q^11 + 824*q^12 + 1199*q^13 + 1773*q^14 + 2548*q^15 + 3722*q^16 + 5374*q^17 + O(q^18)
284
+ sage: Y
285
+ -q^-3 - 3*q^-2 - 8*q^-1 - 17 - 33*q - 61*q^2 - 110*q^3 - 186*q^4 - 320*q^5 - 528*q^6 - 861*q^7 - 1383*q^8 - 2218*q^9 - 3472*q^10 - 5451*q^11 - 8447*q^12 - 13020*q^13 - 19923*q^14 - 30403*q^15 - 46003*q^16 + O(q^17)
286
+
287
+ The following should give 0, but only approximately::
288
+
289
+ sage: q = X.parent().gen()
290
+ sage: E.defining_polynomial()(X,Y,1) + O(q^11) == 0
291
+ True
292
+
293
+ Note that below we have to change variable from `x` to `q`::
294
+
295
+ sage: a1,_,a3,_,_ = E.a_invariants()
296
+ sage: f = E.q_expansion(17)
297
+ sage: q = f.parent().gen()
298
+ sage: f/q == (X.derivative()/(2*Y+a1*X+a3))
299
+ True
300
+ """
301
+ R = LaurentSeriesRing(RationalField(), 'q')
302
+ if not self._E.is_minimal():
303
+ raise NotImplementedError("only implemented for minimal curves")
304
+ XY = self._E.pari_mincurve().elltaniyama(prec - 1)
305
+ return R(XY[0]), R(XY[1])