passagemath-schemes 10.6.47__cp312-cp312-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. passagemath_schemes/.dylibs/libflint.22.0.dylib +0 -0
  2. passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
  3. passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
  4. passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
  5. passagemath_schemes/__init__.py +3 -0
  6. passagemath_schemes-10.6.47.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.47.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.47.dist-info/RECORD +311 -0
  9. passagemath_schemes-10.6.47.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.47.dist-info/top_level.txt +3 -0
  11. sage/all__sagemath_schemes.py +23 -0
  12. sage/databases/all__sagemath_schemes.py +7 -0
  13. sage/databases/cremona.py +1723 -0
  14. sage/dynamics/all__sagemath_schemes.py +2 -0
  15. sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
  16. sage/dynamics/arithmetic_dynamics/all.py +14 -0
  17. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
  18. sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
  19. sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
  20. sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
  21. sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
  22. sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
  23. sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-312-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +745 -0
  29. sage/lfunctions/pari.py +818 -0
  30. sage/lfunctions/zero_sums.cpython-312-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5135 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
  34. sage/modular/abvar/abvar_newform.py +244 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +186 -0
  37. sage/modular/abvar/cuspidal_subgroup.py +371 -0
  38. sage/modular/abvar/finite_subgroup.py +896 -0
  39. sage/modular/abvar/homology.py +720 -0
  40. sage/modular/abvar/homspace.py +998 -0
  41. sage/modular/abvar/lseries.py +415 -0
  42. sage/modular/abvar/morphism.py +935 -0
  43. sage/modular/abvar/torsion_point.py +274 -0
  44. sage/modular/abvar/torsion_subgroup.py +740 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-312-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1402 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-312-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +363 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +653 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1469 -0
  57. sage/modular/arithgroup/congroup_generic.py +628 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +267 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-312-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1066 -0
  61. sage/modular/arithgroup/tests.py +418 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3753 -0
  64. sage/modular/btquotients/pautomorphicform.py +2570 -0
  65. sage/modular/buzzard.py +100 -0
  66. sage/modular/congroup.py +29 -0
  67. sage/modular/congroup_element.py +13 -0
  68. sage/modular/cusps.py +1109 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +569 -0
  71. sage/modular/dirichlet.py +3310 -0
  72. sage/modular/drinfeld_modform/all.py +2 -0
  73. sage/modular/drinfeld_modform/element.py +446 -0
  74. sage/modular/drinfeld_modform/ring.py +773 -0
  75. sage/modular/drinfeld_modform/tutorial.py +236 -0
  76. sage/modular/etaproducts.py +1065 -0
  77. sage/modular/hecke/algebra.py +746 -0
  78. sage/modular/hecke/all.py +20 -0
  79. sage/modular/hecke/ambient_module.py +1019 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +325 -0
  82. sage/modular/hecke/hecke_operator.py +780 -0
  83. sage/modular/hecke/homspace.py +206 -0
  84. sage/modular/hecke/module.py +1767 -0
  85. sage/modular/hecke/morphism.py +174 -0
  86. sage/modular/hecke/submodule.py +989 -0
  87. sage/modular/hypergeometric_misc.cpython-312-darwin.so +0 -0
  88. sage/modular/hypergeometric_misc.pxd +4 -0
  89. sage/modular/hypergeometric_misc.pyx +166 -0
  90. sage/modular/hypergeometric_motive.py +2017 -0
  91. sage/modular/local_comp/all.py +2 -0
  92. sage/modular/local_comp/liftings.py +292 -0
  93. sage/modular/local_comp/local_comp.py +1071 -0
  94. sage/modular/local_comp/smoothchar.py +1825 -0
  95. sage/modular/local_comp/type_space.py +748 -0
  96. sage/modular/modform/all.py +30 -0
  97. sage/modular/modform/ambient.py +815 -0
  98. sage/modular/modform/ambient_R.py +177 -0
  99. sage/modular/modform/ambient_eps.py +306 -0
  100. sage/modular/modform/ambient_g0.py +124 -0
  101. sage/modular/modform/ambient_g1.py +204 -0
  102. sage/modular/modform/constructor.py +545 -0
  103. sage/modular/modform/cuspidal_submodule.py +708 -0
  104. sage/modular/modform/defaults.py +14 -0
  105. sage/modular/modform/eis_series.py +505 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4131 -0
  108. sage/modular/modform/find_generators.py +59 -0
  109. sage/modular/modform/half_integral.py +154 -0
  110. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  111. sage/modular/modform/j_invariant.py +47 -0
  112. sage/modular/modform/l_series_gross_zagier.py +133 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-312-darwin.so +0 -0
  114. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  115. sage/modular/modform/notes.py +45 -0
  116. sage/modular/modform/numerical.py +514 -0
  117. sage/modular/modform/periods.py +14 -0
  118. sage/modular/modform/ring.py +1257 -0
  119. sage/modular/modform/space.py +1860 -0
  120. sage/modular/modform/submodule.py +118 -0
  121. sage/modular/modform/tests.py +64 -0
  122. sage/modular/modform/theta.py +110 -0
  123. sage/modular/modform/vm_basis.py +381 -0
  124. sage/modular/modform/weight1.py +220 -0
  125. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  126. sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
  127. sage/modular/modform_hecketriangle/all.py +30 -0
  128. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  129. sage/modular/modform_hecketriangle/constructor.py +416 -0
  130. sage/modular/modform_hecketriangle/element.py +351 -0
  131. sage/modular/modform_hecketriangle/functors.py +752 -0
  132. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  133. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
  135. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
  136. sage/modular/modform_hecketriangle/readme.py +1214 -0
  137. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  138. sage/modular/modform_hecketriangle/space.py +1037 -0
  139. sage/modular/modform_hecketriangle/subspace.py +423 -0
  140. sage/modular/modsym/all.py +17 -0
  141. sage/modular/modsym/ambient.py +3846 -0
  142. sage/modular/modsym/boundary.py +1420 -0
  143. sage/modular/modsym/element.py +336 -0
  144. sage/modular/modsym/g1list.py +178 -0
  145. sage/modular/modsym/ghlist.py +182 -0
  146. sage/modular/modsym/hecke_operator.py +73 -0
  147. sage/modular/modsym/manin_symbol.cpython-312-darwin.so +0 -0
  148. sage/modular/modsym/manin_symbol.pxd +5 -0
  149. sage/modular/modsym/manin_symbol.pyx +497 -0
  150. sage/modular/modsym/manin_symbol_list.py +1295 -0
  151. sage/modular/modsym/modsym.py +400 -0
  152. sage/modular/modsym/modular_symbols.py +384 -0
  153. sage/modular/modsym/p1list_nf.py +1241 -0
  154. sage/modular/modsym/relation_matrix.py +591 -0
  155. sage/modular/modsym/relation_matrix_pyx.cpython-312-darwin.so +0 -0
  156. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  157. sage/modular/modsym/space.py +2468 -0
  158. sage/modular/modsym/subspace.py +455 -0
  159. sage/modular/modsym/tests.py +375 -0
  160. sage/modular/multiple_zeta.py +2632 -0
  161. sage/modular/multiple_zeta_F_algebra.py +786 -0
  162. sage/modular/overconvergent/all.py +6 -0
  163. sage/modular/overconvergent/genus0.py +1878 -0
  164. sage/modular/overconvergent/hecke_series.py +1187 -0
  165. sage/modular/overconvergent/weightspace.py +778 -0
  166. sage/modular/pollack_stevens/all.py +4 -0
  167. sage/modular/pollack_stevens/distributions.py +874 -0
  168. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  169. sage/modular/pollack_stevens/manin_map.py +859 -0
  170. sage/modular/pollack_stevens/modsym.py +1593 -0
  171. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  172. sage/modular/pollack_stevens/sigma0.py +534 -0
  173. sage/modular/pollack_stevens/space.py +1076 -0
  174. sage/modular/quasimodform/all.py +3 -0
  175. sage/modular/quasimodform/element.py +845 -0
  176. sage/modular/quasimodform/ring.py +828 -0
  177. sage/modular/quatalg/all.py +3 -0
  178. sage/modular/quatalg/brandt.py +1642 -0
  179. sage/modular/ssmod/all.py +8 -0
  180. sage/modular/ssmod/ssmod.py +827 -0
  181. sage/rings/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  183. sage/rings/polynomial/binary_form_reduce.py +585 -0
  184. sage/schemes/all.py +41 -0
  185. sage/schemes/berkovich/all.py +6 -0
  186. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  187. sage/schemes/berkovich/berkovich_space.py +748 -0
  188. sage/schemes/curves/affine_curve.py +2928 -0
  189. sage/schemes/curves/all.py +33 -0
  190. sage/schemes/curves/closed_point.py +434 -0
  191. sage/schemes/curves/constructor.py +381 -0
  192. sage/schemes/curves/curve.py +542 -0
  193. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  194. sage/schemes/curves/point.py +463 -0
  195. sage/schemes/curves/projective_curve.py +3026 -0
  196. sage/schemes/curves/zariski_vankampen.py +1932 -0
  197. sage/schemes/cyclic_covers/all.py +2 -0
  198. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  199. sage/schemes/cyclic_covers/constructor.py +137 -0
  200. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  201. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  202. sage/schemes/elliptic_curves/BSD.py +1036 -0
  203. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  204. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  205. sage/schemes/elliptic_curves/all.py +49 -0
  206. sage/schemes/elliptic_curves/cardinality.py +609 -0
  207. sage/schemes/elliptic_curves/cm.py +1102 -0
  208. sage/schemes/elliptic_curves/constructor.py +1552 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  214. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  215. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  216. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  217. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  218. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  219. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  221. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  222. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  223. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  224. sage/schemes/elliptic_curves/formal_group.py +760 -0
  225. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  226. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7335 -0
  229. sage/schemes/elliptic_curves/height.py +2109 -0
  230. sage/schemes/elliptic_curves/hom.py +1406 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  232. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  233. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  234. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  235. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  236. sage/schemes/elliptic_curves/homset.py +271 -0
  237. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  238. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  239. sage/schemes/elliptic_curves/jacobian.py +237 -0
  240. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  241. sage/schemes/elliptic_curves/kraus.py +1014 -0
  242. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  243. sage/schemes/elliptic_curves/mod5family.py +105 -0
  244. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  245. sage/schemes/elliptic_curves/mod_sym_num.cpython-312-darwin.so +0 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  247. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  248. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  249. sage/schemes/elliptic_curves/padics.py +1816 -0
  250. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  251. sage/schemes/elliptic_curves/period_lattice_region.cpython-312-darwin.so +0 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  253. sage/schemes/elliptic_curves/saturation.py +715 -0
  254. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  255. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  256. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  257. sage/schemes/hyperelliptic_curves/all.py +6 -0
  258. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  259. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  264. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  265. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  270. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  271. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  272. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  273. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  274. sage/schemes/jacobians/all.py +2 -0
  275. sage/schemes/overview.py +161 -0
  276. sage/schemes/plane_conics/all.py +22 -0
  277. sage/schemes/plane_conics/con_field.py +1296 -0
  278. sage/schemes/plane_conics/con_finite_field.py +158 -0
  279. sage/schemes/plane_conics/con_number_field.py +456 -0
  280. sage/schemes/plane_conics/con_rational_field.py +406 -0
  281. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  282. sage/schemes/plane_conics/constructor.py +249 -0
  283. sage/schemes/plane_quartics/all.py +2 -0
  284. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  285. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  286. sage/schemes/riemann_surfaces/all.py +1 -0
  287. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  288. sage_wheels/share/cremona/cremona_mini.db +0 -0
  289. sage_wheels/share/ellcurves/rank0 +30427 -0
  290. sage_wheels/share/ellcurves/rank1 +31871 -0
  291. sage_wheels/share/ellcurves/rank10 +6 -0
  292. sage_wheels/share/ellcurves/rank11 +6 -0
  293. sage_wheels/share/ellcurves/rank12 +1 -0
  294. sage_wheels/share/ellcurves/rank14 +1 -0
  295. sage_wheels/share/ellcurves/rank15 +1 -0
  296. sage_wheels/share/ellcurves/rank17 +1 -0
  297. sage_wheels/share/ellcurves/rank19 +1 -0
  298. sage_wheels/share/ellcurves/rank2 +2388 -0
  299. sage_wheels/share/ellcurves/rank20 +1 -0
  300. sage_wheels/share/ellcurves/rank21 +1 -0
  301. sage_wheels/share/ellcurves/rank22 +1 -0
  302. sage_wheels/share/ellcurves/rank23 +1 -0
  303. sage_wheels/share/ellcurves/rank24 +1 -0
  304. sage_wheels/share/ellcurves/rank28 +1 -0
  305. sage_wheels/share/ellcurves/rank3 +836 -0
  306. sage_wheels/share/ellcurves/rank4 +10 -0
  307. sage_wheels/share/ellcurves/rank5 +5 -0
  308. sage_wheels/share/ellcurves/rank6 +5 -0
  309. sage_wheels/share/ellcurves/rank7 +5 -0
  310. sage_wheels/share/ellcurves/rank8 +6 -0
  311. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,352 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ r"""
3
+ Weierstrass `\wp`-function for elliptic curves
4
+
5
+ The Weierstrass `\wp` function associated to an elliptic curve over a
6
+ field `k` is a Laurent series of the form
7
+
8
+ .. MATH::
9
+
10
+ \wp(z) = \frac{1}{z^2} + c_2 \cdot z^2 + c_4 \cdot z^4 + \cdots.
11
+
12
+ If the field is contained in `\mathbb{C}`, then this is the series
13
+ expansion of the map from `\mathbb{C}` to `E(\mathbb{C})` whose kernel
14
+ is the period lattice of `E`.
15
+
16
+ Over other fields, like finite fields, this still makes sense as a
17
+ formal power series with coefficients in `k` - at least its first `p-2`
18
+ coefficients where `p` is the characteristic of `k`. It can be defined
19
+ via the formal group as `x+c` in the variable `z=\log_E(t)` for a
20
+ constant `c` such that the constant term `c_0` in `\wp(z)` is zero.
21
+
22
+ EXAMPLES::
23
+
24
+ sage: E = EllipticCurve([0,1])
25
+ sage: E.weierstrass_p()
26
+ z^-2 - 1/7*z^4 + 1/637*z^10 - 1/84721*z^16 + O(z^20)
27
+
28
+ REFERENCES:
29
+
30
+ - [BMSS2006]_
31
+
32
+ AUTHORS:
33
+
34
+ - Dan Shumov 04/09: original implementation
35
+
36
+ - Chris Wuthrich 11/09: major restructuring
37
+
38
+ - Jeroen Demeyer (2014-03-06): code clean up, fix characteristic bound
39
+ for quadratic algorithm (see :issue:`15855`)
40
+ """
41
+
42
+ #*****************************************************************************
43
+ # Copyright (C) 2009 William Stein <wstein@gmail.com>
44
+ #
45
+ # This program is free software: you can redistribute it and/or modify
46
+ # it under the terms of the GNU General Public License as published by
47
+ # the Free Software Foundation, either version 2 of the License, or
48
+ # (at your option) any later version.
49
+ # http://www.gnu.org/licenses/
50
+ #*****************************************************************************
51
+
52
+ from sage.rings.laurent_series_ring import LaurentSeriesRing
53
+ from sage.rings.power_series_ring import PowerSeriesRing
54
+
55
+ # Note: Part of the documentation is replicated in ell_field.py for
56
+ # users' convenience. Make sure to keep the two copies synchronized.
57
+
58
+
59
+ def weierstrass_p(E, prec=20, algorithm=None):
60
+ r"""
61
+ Compute the Weierstrass `\wp`-function on an elliptic curve.
62
+
63
+ INPUT:
64
+
65
+ - ``E`` -- an elliptic curve
66
+
67
+ - ``prec`` -- precision
68
+
69
+ - ``algorithm`` -- string or ``None`` (default: ``None``);
70
+ a choice of algorithm among ``'pari'``, ``'fast'``, ``'quadratic'``,
71
+ or ``None`` to let this function determine the best algorithm to use
72
+
73
+ OUTPUT:
74
+
75
+ a Laurent series in one variable `z` with coefficients in the base
76
+ field `k` of `E`.
77
+
78
+ EXAMPLES::
79
+
80
+ sage: E = EllipticCurve('11a1')
81
+ sage: E.weierstrass_p(prec=10)
82
+ z^-2 + 31/15*z^2 + 2501/756*z^4 + 961/675*z^6 + 77531/41580*z^8 + O(z^10)
83
+ sage: E.weierstrass_p(prec=8)
84
+ z^-2 + 31/15*z^2 + 2501/756*z^4 + 961/675*z^6 + O(z^8)
85
+ sage: Esh = E.short_weierstrass_model()
86
+ sage: Esh.weierstrass_p(prec=8)
87
+ z^-2 + 13392/5*z^2 + 1080432/7*z^4 + 59781888/25*z^6 + O(z^8)
88
+
89
+ sage: E.weierstrass_p(prec=8, algorithm='pari')
90
+ z^-2 + 31/15*z^2 + 2501/756*z^4 + 961/675*z^6 + O(z^8)
91
+ sage: E.weierstrass_p(prec=8, algorithm='quadratic')
92
+ z^-2 + 31/15*z^2 + 2501/756*z^4 + 961/675*z^6 + O(z^8)
93
+
94
+ sage: k = GF(11)
95
+ sage: E = EllipticCurve(k, [1,1])
96
+ sage: E.weierstrass_p(prec=6, algorithm='fast')
97
+ z^-2 + 2*z^2 + 3*z^4 + O(z^6)
98
+ sage: E.weierstrass_p(prec=7, algorithm='fast')
99
+ Traceback (most recent call last):
100
+ ...
101
+ ValueError: for computing the Weierstrass p-function via the fast algorithm,
102
+ the characteristic (11) of the underlying field must be greater than prec + 4 = 11
103
+ sage: E.weierstrass_p(prec=8)
104
+ z^-2 + 2*z^2 + 3*z^4 + 5*z^6 + O(z^8)
105
+ sage: E.weierstrass_p(prec=8, algorithm='quadratic')
106
+ z^-2 + 2*z^2 + 3*z^4 + 5*z^6 + O(z^8)
107
+ sage: E.weierstrass_p(prec=8, algorithm='pari')
108
+ z^-2 + 2*z^2 + 3*z^4 + 5*z^6 + O(z^8)
109
+ sage: E.weierstrass_p(prec=9)
110
+ Traceback (most recent call last):
111
+ ...
112
+ NotImplementedError: currently no algorithms for computing the Weierstrass
113
+ p-function for that characteristic / precision pair is implemented.
114
+ Lower the precision below char(k) - 2
115
+ sage: E.weierstrass_p(prec=9, algorithm='quadratic')
116
+ Traceback (most recent call last):
117
+ ...
118
+ ValueError: for computing the Weierstrass p-function via the quadratic
119
+ algorithm, the characteristic (11) of the underlying field must be greater
120
+ than prec + 2 = 11
121
+ sage: E.weierstrass_p(prec=9, algorithm='pari')
122
+ Traceback (most recent call last):
123
+ ...
124
+ ValueError: for computing the Weierstrass p-function via pari, the
125
+ characteristic (11) of the underlying field must be greater than prec + 2 = 11
126
+
127
+ TESTS::
128
+
129
+ sage: E.weierstrass_p(prec=4, algorithm='foo')
130
+ Traceback (most recent call last):
131
+ ...
132
+ ValueError: unknown algorithm for computing the Weierstrass p-function
133
+ """
134
+ k = E.base_ring()
135
+ p = k.characteristic()
136
+
137
+ # if the algorithm is not set, try to determine algorithm from input
138
+ if algorithm is None:
139
+ if 0 < p <= prec + 2:
140
+ raise NotImplementedError("currently no algorithms for computing the Weierstrass p-function for that characteristic / precision pair is implemented. Lower the precision below char(k) - 2")
141
+ algorithm = "pari"
142
+
143
+ if algorithm == "pari":
144
+ if 0 < p <= prec + 2:
145
+ raise ValueError("for computing the Weierstrass p-function via pari, the characteristic (%s) of the underlying field must be greater than prec + 2 = %s" % (p,prec+2))
146
+ return compute_wp_pari(E, prec)
147
+
148
+ # quadratic and fast algorithms require short Weierstrass model
149
+ Esh = E.short_weierstrass_model()
150
+
151
+ A = Esh.a4()
152
+ B = Esh.a6()
153
+
154
+ if algorithm == "quadratic":
155
+ if 0 < p <= prec + 2:
156
+ raise ValueError("for computing the Weierstrass p-function via the quadratic algorithm, the characteristic (%s) of the underlying field must be greater than prec + 2 = %s" % (p,prec+2))
157
+ wp = compute_wp_quadratic(k, A, B, prec)
158
+ elif algorithm == "fast":
159
+ if 0 < p <= prec + 4:
160
+ raise ValueError("for computing the Weierstrass p-function via the fast algorithm, the characteristic (%s) of the underlying field must be greater than prec + 4 = %s" % (p,prec+4))
161
+ wp = compute_wp_fast(k, A, B, prec)
162
+ else:
163
+ raise ValueError("unknown algorithm for computing the Weierstrass p-function")
164
+
165
+ R = wp.parent()
166
+ z = R.gen()
167
+ u = E.isomorphism_to(Esh).u
168
+ return wp(z*u) * u**2
169
+
170
+
171
+ def compute_wp_pari(E, prec):
172
+ r"""
173
+ Compute the Weierstrass `\wp`-function with the ``ellwp`` function
174
+ from PARI.
175
+
176
+ EXAMPLES::
177
+
178
+ sage: E = EllipticCurve([0,1])
179
+ sage: from sage.schemes.elliptic_curves.ell_wp import compute_wp_pari
180
+ sage: compute_wp_pari(E, prec=20)
181
+ z^-2 - 1/7*z^4 + 1/637*z^10 - 1/84721*z^16 + O(z^20)
182
+ sage: compute_wp_pari(E, prec=30)
183
+ z^-2 - 1/7*z^4 + 1/637*z^10 - 1/84721*z^16
184
+ + 3/38548055*z^22 - 4/8364927935*z^28 + O(z^30)
185
+ """
186
+ ep = E.__pari__()
187
+ wpp = ep.ellwp(n=prec)
188
+ k = E.base_ring()
189
+ R = LaurentSeriesRing(k,'z')
190
+ z = R.gen()
191
+ wp = z**(-2)
192
+ for i in range(prec):
193
+ wp += k(wpp[i]) * z**i
194
+ wp = wp.add_bigoh(prec)
195
+ return wp
196
+
197
+
198
+ def compute_wp_quadratic(k, A, B, prec):
199
+ r"""
200
+ Compute the truncated Weierstrass function of an elliptic curve
201
+ defined by short Weierstrass model: `y^2 = x^3 + Ax + B`. Uses an
202
+ algorithm that is of complexity `O(prec^2)`.
203
+
204
+ Let p be the characteristic of the underlying field. Then we must
205
+ have either p = 0, or p > prec + 2.
206
+
207
+ INPUT:
208
+
209
+ - ``k`` -- the field of definition of the curve
210
+ - ``A`` -- and
211
+ - ``B`` -- the coefficients of the elliptic curve
212
+ - ``prec`` -- the precision to which we compute the series
213
+
214
+ OUTPUT:
215
+
216
+ A Laurent series approximating the Weierstrass `\wp`-function to precision ``prec``.
217
+
218
+ ALGORITHM:
219
+
220
+ This function uses the algorithm described in section 3.2 of [BMSS2006]_.
221
+
222
+ EXAMPLES::
223
+
224
+ sage: E = EllipticCurve([7,0])
225
+ sage: E.weierstrass_p(prec=10, algorithm='quadratic')
226
+ z^-2 - 7/5*z^2 + 49/75*z^6 + O(z^10)
227
+
228
+ sage: E = EllipticCurve(GF(103), [1,2])
229
+ sage: E.weierstrass_p(algorithm='quadratic')
230
+ z^-2 + 41*z^2 + 88*z^4 + 11*z^6 + 57*z^8 + 55*z^10 + 73*z^12
231
+ + 11*z^14 + 17*z^16 + 50*z^18 + O(z^20)
232
+
233
+ sage: from sage.schemes.elliptic_curves.ell_wp import compute_wp_quadratic
234
+ sage: compute_wp_quadratic(E.base_ring(), E.a4(), E.a6(), prec=10)
235
+ z^-2 + 41*z^2 + 88*z^4 + 11*z^6 + 57*z^8 + O(z^10)
236
+ """
237
+ m = (prec + 1)//2
238
+ c = [0 for j in range(m)]
239
+ c[0] = -A/5
240
+ c[1] = -B/7
241
+
242
+ # first Z represent z^2
243
+ R = LaurentSeriesRing(k,'z')
244
+ Z = R.gen()
245
+ pe = Z**-1 + c[0]*Z + c[1]*Z**2
246
+
247
+ for i in range(3, m):
248
+ t = 0
249
+ for j in range(1, i - 1):
250
+ t += c[j-1]*c[i-2-j]
251
+ ci = (3*t)/((i-2)*(2*i+3))
252
+ pe += ci * Z**i
253
+ c[i-1] = ci
254
+
255
+ return pe(Z**2).add_bigoh(prec)
256
+
257
+
258
+ def compute_wp_fast(k, A, B, m):
259
+ r"""
260
+ Compute the Weierstrass function of an elliptic curve defined by short Weierstrass model:
261
+ `y^2 = x^3 + Ax + B`. It does this with as fast as polynomial of degree `m` can be multiplied
262
+ together in the base ring, i.e. `O(M(n))` in the notation of [BMSS2006]_.
263
+
264
+ Let `p` be the characteristic of the underlying field: Then we must have either `p=0`, or `p > m + 3`.
265
+
266
+ INPUT:
267
+
268
+ - ``k`` -- the base field of the curve
269
+ - ``A`` -- and
270
+ - ``B`` -- as the coefficients of the short Weierstrass model `y^2 = x^3 +Ax +B`, and
271
+ - ``m`` -- the precision to which the function is computed to
272
+
273
+ OUTPUT: the Weierstrass `\wp` function as a Laurent series to precision `m`
274
+
275
+ ALGORITHM:
276
+
277
+ This function uses the algorithm described in section 3.3 of
278
+ [BMSS2006]_.
279
+
280
+ EXAMPLES::
281
+
282
+ sage: from sage.schemes.elliptic_curves.ell_wp import compute_wp_fast
283
+ sage: compute_wp_fast(QQ, 1, 8, 7)
284
+ z^-2 - 1/5*z^2 - 8/7*z^4 + 1/75*z^6 + O(z^7)
285
+
286
+ sage: k = GF(37)
287
+ sage: compute_wp_fast(k, k(1), k(8), 5)
288
+ z^-2 + 22*z^2 + 20*z^4 + O(z^5)
289
+ """
290
+ R = PowerSeriesRing(k,'z',default_prec=m+5)
291
+ z = R.gen()
292
+ s = 2
293
+ f1 = z.add_bigoh(m+3)
294
+ n = 2*m + 4
295
+
296
+ # solve the nonlinear differential equation
297
+ while (s < n):
298
+ f1pr = f1.derivative()
299
+ next_s = 2*s - 1
300
+
301
+ a = 2*f1pr
302
+ b = -(6*B*(f1**5) + 4*A*(f1**3))
303
+ c = B*(f1**6) + A*f1**4 + 1 - (f1pr**2)
304
+
305
+ # we should really be computing only mod z^next_s here.
306
+ # but we loose only a factor 2
307
+ f2 = solve_linear_differential_system(a, b, c, 0)
308
+ # sometimes we get to 0 quicker than s reaches n
309
+ if f2 == 0:
310
+ break
311
+ f1 = f1 + f2
312
+ s = next_s
313
+
314
+ R = f1
315
+ Q = R**2
316
+ pe = 1/Q
317
+
318
+ return pe
319
+
320
+
321
+ def solve_linear_differential_system(a, b, c, alpha):
322
+ r"""
323
+ Solve a system of linear differential equations: `af' + bf = c` and `f'(0) = \alpha`
324
+ where `a`, `b`, and `c` are power series in one variable and `\alpha` is a constant in the coefficient ring.
325
+
326
+ ALGORITHM:
327
+
328
+ due to Brent and Kung '78.
329
+
330
+ EXAMPLES::
331
+
332
+ sage: from sage.schemes.elliptic_curves.ell_wp import solve_linear_differential_system
333
+ sage: k = GF(17)
334
+ sage: R.<x> = PowerSeriesRing(k)
335
+ sage: a = 1 + x + O(x^7); b = x + O(x^7); c = 1 + x^3 + O(x^7); alpha = k(3)
336
+ sage: f = solve_linear_differential_system(a, b, c, alpha)
337
+ sage: f
338
+ 3 + x + 15*x^2 + x^3 + 10*x^5 + 3*x^6 + 13*x^7 + O(x^8)
339
+ sage: a*f.derivative() + b*f - c
340
+ O(x^7)
341
+ sage: f(0) == alpha
342
+ True
343
+ """
344
+ a_recip = 1 / a
345
+ B = b * a_recip
346
+ C = c * a_recip
347
+ int_B = B.integral()
348
+ J = int_B.exp()
349
+ J_recip = 1 / J
350
+ CJ = C * J
351
+ int_CJ = CJ.integral()
352
+ return J_recip * (alpha + int_CJ)