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,200 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Morphism to bring a genus-one curve into Weierstrass form
4
+
5
+ You should use
6
+ :func:`~sage.schemes.elliptic_curves.constructor.EllipticCurve_from_cubic`
7
+ or
8
+ :func:`~sage.schemes.elliptic_curves.constructor.EllipticCurve_from_curve`
9
+ to construct the transformation starting with a cubic or with a genus
10
+ one curve.
11
+
12
+ EXAMPLES::
13
+
14
+ sage: R.<u,v,w> = QQ[]
15
+ sage: f = EllipticCurve_from_cubic(u^3 + v^3 + w^3, [1,-1,0], morphism=True); f
16
+ Scheme morphism:
17
+ From: Projective Plane Curve over Rational Field defined by u^3 + v^3 + w^3
18
+ To: Elliptic Curve defined by y^2 - 9*y = x^3 - 27 over Rational Field
19
+ Defn: Defined on coordinates by sending (u : v : w) to
20
+ (-w : 3*u : 1/3*u + 1/3*v)
21
+
22
+ sage: finv = f.inverse(); finv
23
+ Scheme morphism:
24
+ From: Elliptic Curve defined by y^2 - 9*y = x^3 - 27 over Rational Field
25
+ To: Projective Plane Curve over Rational Field defined by u^3 + v^3 + w^3
26
+ Defn: Defined on coordinates by sending (x : y : z) to
27
+ (1/3*y : -1/3*y + 3*z : -x)
28
+
29
+ sage: (u^3 + v^3 + w^3)(f.inverse().defining_polynomials()) * f.inverse().post_rescaling()
30
+ -x^3 + y^2*z - 9*y*z^2 + 27*z^3
31
+
32
+ sage: E = finv.domain()
33
+ sage: E.defining_polynomial()(f.defining_polynomials()) * f.post_rescaling()
34
+ u^3 + v^3 + w^3
35
+
36
+ sage: f([1,-1,0])
37
+ (0 : 1 : 0)
38
+ sage: f([1,0,-1])
39
+ (3 : 9 : 1)
40
+ sage: f([0,1,-1])
41
+ (3 : 0 : 1)
42
+ """
43
+
44
+ ##############################################################################
45
+ # Copyright (C) 2013 Volker Braun <vbraun.name@gmail.com>
46
+ #
47
+ # Distributed under the terms of the GNU General Public License (GPL)
48
+ #
49
+ # The full text of the GPL is available at:
50
+ #
51
+ # http://www.gnu.org/licenses/
52
+ ##############################################################################
53
+
54
+ from sage.schemes.generic.morphism import SchemeMorphism_polynomial
55
+
56
+
57
+ class WeierstrassTransformation(SchemeMorphism_polynomial):
58
+
59
+ def __init__(self, domain, codomain, defining_polynomials, post_multiplication):
60
+ r"""
61
+ A morphism of a genus-one curve to/from the Weierstrass form.
62
+
63
+ INPUT:
64
+
65
+ - ``domain``, ``codomain`` -- two schemes, one of which is an
66
+ elliptic curve
67
+
68
+ - ``defining_polynomials`` -- triplet of polynomials that
69
+ define the transformation
70
+
71
+ - ``post_multiplication`` -- a polynomial to homogeneously
72
+ rescale after substituting the defining polynomials
73
+
74
+ EXAMPLES::
75
+
76
+ sage: P2.<u,v,w> = ProjectiveSpace(2,QQ)
77
+ sage: C = P2.subscheme(u^3 + v^3 + w^3)
78
+ sage: E = EllipticCurve([2, -1, -1/3, 1/3, -1/27])
79
+ sage: from sage.schemes.elliptic_curves.weierstrass_transform import WeierstrassTransformation
80
+ sage: f = WeierstrassTransformation(C, E, [w, -v-w, -3*u-3*v], 1); f
81
+ Scheme morphism:
82
+ From: Closed subscheme of Projective Space of dimension 2 over Rational Field defined by:
83
+ u^3 + v^3 + w^3
84
+ To: Elliptic Curve defined by y^2 + 2*x*y - 1/3*y = x^3 - x^2 + 1/3*x - 1/27
85
+ over Rational Field
86
+ Defn: Defined on coordinates by sending (u : v : w) to
87
+ (w : -v - w : -3*u - 3*v)
88
+
89
+ sage: f([-1, 1, 0])
90
+ (0 : 1 : 0)
91
+ sage: f([-1, 0, 1])
92
+ (1/3 : -1/3 : 1)
93
+ sage: f([ 0,-1, 1])
94
+ (1/3 : 0 : 1)
95
+
96
+ sage: A2.<a,b> = AffineSpace(2,QQ)
97
+ sage: C = A2.subscheme(a^3 + b^3 + 1)
98
+ sage: f = WeierstrassTransformation(C, E, [1, -b-1, -3*a-3*b], 1); f
99
+ Scheme morphism:
100
+ From: Closed subscheme of Affine Space of dimension 2 over Rational Field defined by:
101
+ a^3 + b^3 + 1
102
+ To: Elliptic Curve defined by y^2 + 2*x*y - 1/3*y
103
+ = x^3 - x^2 + 1/3*x - 1/27 over Rational Field
104
+ Defn: Defined on coordinates by sending (a, b) to
105
+ (1 : -b - 1 : -3*a - 3*b)
106
+ sage: f([-1,0])
107
+ (1/3 : -1/3 : 1)
108
+ sage: f([0,-1])
109
+ (1/3 : 0 : 1)
110
+ """
111
+ Hom = domain.Hom(codomain)
112
+ super().__init__(Hom, defining_polynomials)
113
+ self._post = post_multiplication
114
+
115
+ def post_rescaling(self):
116
+ """
117
+ Return the homogeneous rescaling to apply after the coordinate
118
+ substitution.
119
+
120
+ OUTPUT: a polynomial; see the example below
121
+
122
+ EXAMPLES::
123
+
124
+ sage: R.<a,b,c> = QQ[]
125
+ sage: cubic = a^3+7*b^3+64*c^3
126
+ sage: P = [2,2,-1]
127
+ sage: f = EllipticCurve_from_cubic(cubic, P, morphism=True).inverse()
128
+ sage: f.post_rescaling()
129
+ -1/7
130
+
131
+ So here is what it does. If we just plug in the coordinate
132
+ transformation, we get the defining polynomial up to
133
+ scale. This method returns the overall rescaling of the
134
+ equation to bring the result into the standard form::
135
+
136
+ sage: cubic(f.defining_polynomials())
137
+ 7*x^3 - 7*y^2*z + 1806336*y*z^2 - 155373797376*z^3
138
+ sage: cubic(f.defining_polynomials()) * f.post_rescaling()
139
+ -x^3 + y^2*z - 258048*y*z^2 + 22196256768*z^3
140
+ """
141
+ return self._post
142
+
143
+
144
+ def WeierstrassTransformationWithInverse(domain, codomain,
145
+ defining_polynomials, post_multiplication,
146
+ inv_defining_polynomials, inv_post_multiplication):
147
+ """
148
+ Construct morphism of a genus-one curve to/from the Weierstrass
149
+ form with its inverse.
150
+
151
+ EXAMPLES::
152
+
153
+ sage: R.<u,v,w> = QQ[]
154
+ sage: f = EllipticCurve_from_cubic(u^3 + v^3 + w^3, [1,-1,0], morphism=True); f
155
+ Scheme morphism:
156
+ From: Projective Plane Curve over Rational Field defined by u^3 + v^3 + w^3
157
+ To: Elliptic Curve defined by y^2 - 9*y = x^3 - 27 over Rational Field
158
+ Defn: Defined on coordinates by sending (u : v : w) to
159
+ (-w : 3*u : 1/3*u + 1/3*v)
160
+
161
+ Scheme morphism:
162
+ From: Closed subscheme of Projective Space of dimension 2 over Rational Field defined by:
163
+ u^3 + v^3 + w^3
164
+ To: Elliptic Curve defined by y^2 + 2*x*y + 1/3*y
165
+ = x^3 - x^2 - 1/3*x - 1/27 over Rational Field
166
+ Defn: Defined on coordinates by sending (u : v : w) to
167
+ (-w : -v + w : 3*u + 3*v)
168
+ """
169
+ fwd = WeierstrassTransformationWithInverse_class(
170
+ domain, codomain, defining_polynomials, post_multiplication)
171
+ inv = WeierstrassTransformationWithInverse_class(
172
+ codomain, domain, inv_defining_polynomials, inv_post_multiplication)
173
+ fwd._inverse = inv
174
+ inv._inverse = fwd
175
+ return fwd
176
+
177
+
178
+ class WeierstrassTransformationWithInverse_class(WeierstrassTransformation):
179
+
180
+ def inverse(self):
181
+ """
182
+ Return the inverse.
183
+
184
+ OUTPUT:
185
+
186
+ A morphism in the opposite direction. This may be a rational
187
+ inverse or an analytic inverse.
188
+
189
+ EXAMPLES::
190
+
191
+ sage: R.<u,v,w> = QQ[]
192
+ sage: f = EllipticCurve_from_cubic(u^3 + v^3 + w^3, [1,-1,0], morphism=True)
193
+ sage: f.inverse()
194
+ Scheme morphism:
195
+ From: Elliptic Curve defined by y^2 - 9*y = x^3 - 27 over Rational Field
196
+ To: Projective Plane Curve over Rational Field defined by u^3 + v^3 + w^3
197
+ Defn: Defined on coordinates by sending (x : y : z) to
198
+ (1/3*y : -1/3*y + 3*z : -x)
199
+ """
200
+ return self._inverse
@@ -0,0 +1,6 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ from sage.schemes.hyperelliptic_curves.constructor import HyperellipticCurve
3
+ from sage.schemes.hyperelliptic_curves.kummer_surface import KummerSurface
4
+ from sage.schemes.hyperelliptic_curves.mestre import (
5
+ Mestre_conic, HyperellipticCurve_from_invariants)
6
+ from sage.schemes.hyperelliptic_curves import monsky_washnitzer
@@ -0,0 +1,291 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Hyperelliptic curve constructor
4
+
5
+ AUTHORS:
6
+
7
+ - David Kohel (2006): initial version
8
+
9
+ - Anna Somoza (2019-04): dynamic class creation
10
+ """
11
+ # ****************************************************************************
12
+ # Copyright (C) 2006 David Kohel <kohel@maths.usyd.edu>
13
+ # 2019 Anna Somoza <anna.somoza.henares@gmail.com>
14
+ # Distributed under the terms of the GNU General Public License (GPL)
15
+ # https://www.gnu.org/licenses/
16
+ # ****************************************************************************
17
+
18
+ from .hyperelliptic_generic import HyperellipticCurve_generic
19
+ from .hyperelliptic_finite_field import HyperellipticCurve_finite_field
20
+ from .hyperelliptic_rational_field import HyperellipticCurve_rational_field
21
+ from .hyperelliptic_padic_field import HyperellipticCurve_padic_field
22
+ from .hyperelliptic_g2 import HyperellipticCurve_g2
23
+
24
+ import sage.rings.abc
25
+
26
+ from sage.rings.finite_rings.finite_field_base import FiniteField
27
+ from sage.rings.polynomial.polynomial_element import Polynomial
28
+ from sage.rings.rational_field import RationalField
29
+ from sage.schemes.projective.projective_space import ProjectiveSpace
30
+ from sage.structure.dynamic_class import dynamic_class
31
+
32
+
33
+ def HyperellipticCurve(f, h=0, names=None, PP=None, check_squarefree=True):
34
+ r"""
35
+ Return the hyperelliptic curve `y^2 + h y = f`, for
36
+ univariate polynomials `h` and `f`. If `h`
37
+ is not given, then it defaults to 0.
38
+
39
+ INPUT:
40
+
41
+ - ``f`` -- univariate polynomial
42
+
43
+ - ``h`` -- (optional) univariate polynomial
44
+
45
+ - ``names`` -- (default: ``["x","y"]``) names for the coordinate functions
46
+
47
+ - ``check_squarefree`` -- boolean (default: ``True``); test if the input
48
+ defines a hyperelliptic curve when f is homogenized to degree `2g+2` and
49
+ h to degree `g+1` for some `g`
50
+
51
+ .. WARNING::
52
+
53
+ When setting ``check_squarefree=False`` or using a base ring that is
54
+ not a field, the output curves are not to be trusted. For example, the
55
+ output of ``is_singular`` is always ``False``, without this being
56
+ properly tested in that case.
57
+
58
+ .. NOTE::
59
+
60
+ The words "hyperelliptic curve" are normally only used for curves of
61
+ genus at least two, but this class allows more general smooth double
62
+ covers of the projective line (conics and elliptic curves), even though
63
+ the class is not meant for those and some outputs may be incorrect.
64
+
65
+ EXAMPLES:
66
+
67
+ Basic examples::
68
+
69
+ sage: R.<x> = QQ[]
70
+ sage: HyperellipticCurve(x^5 + x + 1)
71
+ Hyperelliptic Curve over Rational Field defined by y^2 = x^5 + x + 1
72
+ sage: HyperellipticCurve(x^19 + x + 1, x - 2)
73
+ Hyperelliptic Curve over Rational Field defined by y^2 + (x - 2)*y = x^19 + x + 1
74
+
75
+ sage: k.<a> = GF(9); R.<x> = k[] # needs sage.rings.finite_rings
76
+ sage: HyperellipticCurve(x^3 + x - 1, x+a) # needs sage.rings.finite_rings
77
+ Hyperelliptic Curve over Finite Field in a of size 3^2
78
+ defined by y^2 + (x + a)*y = x^3 + x + 2
79
+
80
+ Characteristic two::
81
+
82
+ sage: # needs sage.rings.finite_rings
83
+ sage: P.<x> = GF(8, 'a')[]
84
+ sage: HyperellipticCurve(x^7 + 1, x)
85
+ Hyperelliptic Curve over Finite Field in a of size 2^3
86
+ defined by y^2 + x*y = x^7 + 1
87
+ sage: HyperellipticCurve(x^8 + x^7 + 1, x^4 + 1)
88
+ Hyperelliptic Curve over Finite Field in a of size 2^3
89
+ defined by y^2 + (x^4 + 1)*y = x^8 + x^7 + 1
90
+ sage: HyperellipticCurve(x^8 + 1, x)
91
+ Traceback (most recent call last):
92
+ ...
93
+ ValueError: not a hyperelliptic curve: highly singular at infinity
94
+ sage: HyperellipticCurve(x^8 + x^7 + 1, x^4)
95
+ Traceback (most recent call last):
96
+ ...
97
+ ValueError: not a hyperelliptic curve: singularity in the provided affine patch
98
+
99
+ sage: F.<t> = PowerSeriesRing(FiniteField(2))
100
+ sage: P.<x> = PolynomialRing(FractionField(F))
101
+ sage: HyperellipticCurve(x^5 + t, x)
102
+ Hyperelliptic Curve over Laurent Series Ring in t over Finite Field of size 2
103
+ defined by y^2 + x*y = x^5 + t
104
+
105
+ We can change the names of the variables in the output::
106
+
107
+ sage: k.<a> = GF(9); R.<x> = k[] # needs sage.rings.finite_rings
108
+ sage: HyperellipticCurve(x^3 + x - 1, x + a, names=['X','Y']) # needs sage.rings.finite_rings
109
+ Hyperelliptic Curve over Finite Field in a of size 3^2
110
+ defined by Y^2 + (X + a)*Y = X^3 + X + 2
111
+
112
+ This class also allows curves of genus zero or one, which are strictly
113
+ speaking not hyperelliptic::
114
+
115
+ sage: P.<x> = QQ[]
116
+ sage: HyperellipticCurve(x^2 + 1)
117
+ Hyperelliptic Curve over Rational Field defined by y^2 = x^2 + 1
118
+ sage: HyperellipticCurve(x^4 - 1)
119
+ Hyperelliptic Curve over Rational Field defined by y^2 = x^4 - 1
120
+ sage: HyperellipticCurve(x^3 + 2*x + 2)
121
+ Hyperelliptic Curve over Rational Field defined by y^2 = x^3 + 2*x + 2
122
+
123
+ Double roots::
124
+
125
+ sage: P.<x> = GF(7)[]
126
+ sage: HyperellipticCurve((x^3-x+2)^2*(x^6-1))
127
+ Traceback (most recent call last):
128
+ ...
129
+ ValueError: not a hyperelliptic curve: singularity in the provided affine patch
130
+
131
+ sage: HyperellipticCurve((x^3-x+2)^2*(x^6-1), check_squarefree=False)
132
+ Hyperelliptic Curve over Finite Field of size 7 defined by
133
+ y^2 = x^12 + 5*x^10 + 4*x^9 + x^8 + 3*x^7 + 3*x^6 + 2*x^4 + 3*x^3 + 6*x^2 + 4*x + 3
134
+
135
+ The input for a (smooth) hyperelliptic curve of genus `g` should not
136
+ contain polynomials of degree greater than `2g+2`. In the following
137
+ example, the hyperelliptic curve has genus 2 and there exists a model
138
+ `y^2 = F` of degree 6, so the model `y^2 + yh = f` of degree 200 is not
139
+ allowed.::
140
+
141
+ sage: P.<x> = QQ[]
142
+ sage: h = x^100
143
+ sage: F = x^6 + 1
144
+ sage: f = F - h^2/4
145
+ sage: HyperellipticCurve(f, h)
146
+ Traceback (most recent call last):
147
+ ...
148
+ ValueError: not a hyperelliptic curve: highly singular at infinity
149
+
150
+ sage: HyperellipticCurve(F)
151
+ Hyperelliptic Curve over Rational Field defined by y^2 = x^6 + 1
152
+
153
+ An example with a singularity over an inseparable extension of the
154
+ base field::
155
+
156
+ sage: F.<t> = GF(5)[]
157
+ sage: P.<x> = F[]
158
+ sage: HyperellipticCurve(x^5 + t)
159
+ Traceback (most recent call last):
160
+ ...
161
+ ValueError: not a hyperelliptic curve: singularity in the provided affine patch
162
+
163
+ Input with integer coefficients creates objects with the integers
164
+ as base ring, but only checks smoothness over `\QQ`, not over Spec(`\ZZ`).
165
+ In other words, it is checked that the discriminant is nonzero, but it is
166
+ not checked whether the discriminant is a unit in `\ZZ^*`.::
167
+
168
+ sage: P.<x> = ZZ[]
169
+ sage: HyperellipticCurve(3*x^7 + 6*x + 6)
170
+ Hyperelliptic Curve over Integer Ring defined by y^2 = 3*x^7 + 6*x + 6
171
+
172
+ TESTS:
173
+
174
+ Check that `f` can be a constant (see :issue:`15516`)::
175
+
176
+ sage: R.<u> = PolynomialRing(Rationals())
177
+ sage: HyperellipticCurve(-12, u^4 + 7)
178
+ Hyperelliptic Curve over Rational Field defined by y^2 + (x^4 + 7)*y = -12
179
+
180
+ Check that two curves with the same class name have the same class type::
181
+
182
+ sage: # needs sage.rings.finite_rings
183
+ sage: R.<t> = PolynomialRing(GF(next_prime(10^9)))
184
+ sage: C = HyperellipticCurve(t^5 + t + 1)
185
+ sage: C2 = HyperellipticCurve(t^5 + 3*t + 1)
186
+ sage: type(C2) == type(C)
187
+ True
188
+
189
+ Check that the inheritance is correct::
190
+
191
+ sage: # needs sage.rings.finite_rings
192
+ sage: R.<t> = PolynomialRing(GF(next_prime(10^9)))
193
+ sage: C = HyperellipticCurve(t^5 + t + 1)
194
+ sage: type(C).mro()
195
+ [<class 'sage.schemes.hyperelliptic_curves.constructor.HyperellipticCurve_g2_FiniteField_with_category'>,
196
+ <class 'sage.schemes.hyperelliptic_curves.constructor.HyperellipticCurve_g2_FiniteField'>,
197
+ <class 'sage.schemes.hyperelliptic_curves.hyperelliptic_g2.HyperellipticCurve_g2'>,
198
+ <class 'sage.schemes.hyperelliptic_curves.hyperelliptic_finite_field.HyperellipticCurve_finite_field'>,
199
+ <class 'sage.schemes.hyperelliptic_curves.hyperelliptic_generic.HyperellipticCurve_generic'>,
200
+ ...]
201
+ """
202
+ # F is the discriminant; use this for the type check
203
+ # rather than f and h, one of which might be constant.
204
+ F = h**2 + 4 * f
205
+ if not isinstance(F, Polynomial):
206
+ raise TypeError(f"arguments f = {f} and h = {h} must be polynomials")
207
+ P = F.parent()
208
+ f = P(f)
209
+ h = P(h)
210
+ df = f.degree()
211
+ dh_2 = 2 * h.degree()
212
+ if dh_2 < df:
213
+ g = (df - 1) // 2
214
+ else:
215
+ g = (dh_2 - 1) // 2
216
+ if check_squarefree:
217
+ # Assuming we are working over a field, this checks that after
218
+ # resolving the singularity at infinity, we get a smooth double cover
219
+ # of P^1.
220
+ if P(2) == 0:
221
+ # characteristic 2
222
+ if h == 0:
223
+ raise ValueError(
224
+ f"for characteristic 2, argument h = {h} must be nonzero"
225
+ )
226
+ if h[g + 1] == 0 and f[2 * g + 1] ** 2 == f[2 * g + 2] * h[g] ** 2:
227
+ raise ValueError(
228
+ "not a hyperelliptic curve: highly singular at infinity"
229
+ )
230
+ should_be_coprime = [h, f * h.derivative() ** 2 + f.derivative() ** 2]
231
+ else:
232
+ # characteristic not 2
233
+ if F.degree() not in [2 * g + 1, 2 * g + 2]:
234
+ raise ValueError(
235
+ "not a hyperelliptic curve: highly singular at infinity"
236
+ )
237
+ should_be_coprime = [F, F.derivative()]
238
+ try:
239
+ smooth = should_be_coprime[0].gcd(should_be_coprime[1]).degree() == 0
240
+ except (AttributeError, NotImplementedError, TypeError):
241
+ try:
242
+ smooth = should_be_coprime[0].resultant(should_be_coprime[1]) != 0
243
+ except (AttributeError, NotImplementedError, TypeError):
244
+ raise NotImplementedError(
245
+ "cannot determine whether "
246
+ f"polynomials {should_be_coprime} have a common root, use "
247
+ "check_squarefree=False to skip this check"
248
+ )
249
+ if not smooth:
250
+ raise ValueError(
251
+ "not a hyperelliptic curve: singularity in the provided affine patch"
252
+ )
253
+ R = P.base_ring()
254
+ PP = ProjectiveSpace(2, R)
255
+ if names is None:
256
+ names = ["x", "y"]
257
+
258
+ bases = []
259
+ cls_name = ["HyperellipticCurve"]
260
+
261
+ # For certain genus we specialise to subclasses with
262
+ # optimised methods
263
+ genus_classes = {2: HyperellipticCurve_g2}
264
+ if g in genus_classes:
265
+ bases.append(genus_classes[g])
266
+ cls_name.append(f"g{g}")
267
+
268
+ # For certain base fields, we specialise to subclasses
269
+ # with special case methods
270
+ fields = [
271
+ ("FiniteField", FiniteField, HyperellipticCurve_finite_field),
272
+ ("RationalField", RationalField, HyperellipticCurve_rational_field),
273
+ ("pAdicField", sage.rings.abc.pAdicField, HyperellipticCurve_padic_field),
274
+ ]
275
+
276
+ for name, base_ring_cls, cls in fields:
277
+ if isinstance(R, base_ring_cls):
278
+ bases.append(cls)
279
+ cls_name.append(name)
280
+ break
281
+
282
+ # If no specialised subclasses are identified, we simply use the
283
+ # generic class in the class construction
284
+ if not bases:
285
+ bases = [HyperellipticCurve_generic]
286
+
287
+ # Dynamically build a class from multiple inheritance. Note that
288
+ # all classes we select from are subclasses of HyperellipticCurve_generic
289
+ class_name = "_".join(cls_name)
290
+ cls = dynamic_class(class_name, tuple(bases), doccls=HyperellipticCurve)
291
+ return cls(PP, f, h, names=names, genus=g)