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,237 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Construct elliptic curves as Jacobians
4
+
5
+ An elliptic curve is a genus one curve with a designated point. The
6
+ Jacobian of a genus-one curve can be defined as the set of line
7
+ bundles on the curve, and is isomorphic to the original genus-one
8
+ curve. It is also an elliptic curve with the trivial line bundle as
9
+ designated point. The utility of this construction is that we can
10
+ construct elliptic curves without having to specify which point we
11
+ take as the origin.
12
+
13
+ EXAMPLES::
14
+
15
+ sage: R.<u,v,w> = QQ[]
16
+ sage: Jacobian(u^3 + v^3 + w^3)
17
+ Elliptic Curve defined by y^2 = x^3 - 27/4 over Rational Field
18
+ sage: Jacobian(u^4 + v^4 + w^2)
19
+ Elliptic Curve defined by y^2 = x^3 - 4*x over Rational Field
20
+
21
+ sage: C = Curve(u^3 + v^3 + w^3)
22
+ sage: Jacobian(C)
23
+ Elliptic Curve defined by y^2 = x^3 - 27/4 over Rational Field
24
+
25
+ sage: P2.<u,v,w> = ProjectiveSpace(2, QQ)
26
+ sage: C = P2.subscheme(u^3 + v^3 + w^3)
27
+ sage: Jacobian(C)
28
+ Elliptic Curve defined by y^2 = x^3 - 27/4 over Rational Field
29
+
30
+ One can also define Jacobians of varieties that are not genus-one
31
+ curves. These are not implemented in this module, but we call the
32
+ relevant functionality::
33
+
34
+ sage: R.<x> = PolynomialRing(QQ)
35
+ sage: f = x**5 + 1184*x**3 + 1846*x**2 + 956*x + 560
36
+ sage: C = HyperellipticCurve(f)
37
+ sage: Jacobian(C)
38
+ Jacobian of Hyperelliptic Curve over Rational Field defined
39
+ by y^2 = x^5 + 1184*x^3 + 1846*x^2 + 956*x + 560
40
+
41
+ REFERENCES:
42
+
43
+ - :wikipedia:`Jacobian_variety`
44
+ """
45
+
46
+ ##############################################################################
47
+ # Copyright (C) 2013 Volker Braun <vbraun.name@gmail.com>
48
+ #
49
+ # Distributed under the terms of the GNU General Public License (GPL)
50
+ #
51
+ # The full text of the GPL is available at:
52
+ #
53
+ # http://www.gnu.org/licenses/
54
+ ##############################################################################
55
+
56
+ from sage.schemes.elliptic_curves.constructor import EllipticCurve
57
+
58
+
59
+ def Jacobian(X, **kwds):
60
+ """
61
+ Return the Jacobian.
62
+
63
+ INPUT:
64
+
65
+ - ``X`` -- polynomial, algebraic variety, or anything else that
66
+ has a Jacobian elliptic curve
67
+
68
+ - ``kwds`` -- optional keyword arguments
69
+
70
+ The input ``X`` can be one of the following:
71
+
72
+ * A polynomial, see :func:`Jacobian_of_equation` for details.
73
+
74
+ * A curve, see :func:`Jacobian_of_curve` for details.
75
+
76
+ EXAMPLES::
77
+
78
+ sage: R.<u,v,w> = QQ[]
79
+ sage: Jacobian(u^3 + v^3 + w^3)
80
+ Elliptic Curve defined by y^2 = x^3 - 27/4 over Rational Field
81
+
82
+ sage: C = Curve(u^3 + v^3 + w^3)
83
+ sage: Jacobian(C)
84
+ Elliptic Curve defined by y^2 = x^3 - 27/4 over Rational Field
85
+
86
+ sage: P2.<u,v,w> = ProjectiveSpace(2, QQ)
87
+ sage: C = P2.subscheme(u^3 + v^3 + w^3)
88
+ sage: Jacobian(C)
89
+ Elliptic Curve defined by y^2 = x^3 - 27/4 over Rational Field
90
+
91
+ sage: Jacobian(C, morphism=True)
92
+ Scheme morphism:
93
+ From: Closed subscheme of Projective Space of dimension 2 over Rational Field defined by:
94
+ u^3 + v^3 + w^3
95
+ To: Elliptic Curve defined by y^2 = x^3 - 27/4 over Rational Field
96
+ Defn: Defined on coordinates by sending (u : v : w) to
97
+ (-u^4*v^4*w - u^4*v*w^4 - u*v^4*w^4 :
98
+ 1/2*u^6*v^3 - 1/2*u^3*v^6 - 1/2*u^6*w^3 + 1/2*v^6*w^3 + 1/2*u^3*w^6 - 1/2*v^3*w^6 :
99
+ u^3*v^3*w^3)
100
+ """
101
+ try:
102
+ return X.jacobian(**kwds)
103
+ except (AttributeError, TypeError):
104
+ pass
105
+
106
+ morphism = kwds.pop('morphism', False)
107
+ from sage.rings.polynomial.multi_polynomial import MPolynomial
108
+ if isinstance(X, MPolynomial):
109
+ if morphism:
110
+ from sage.schemes.curves.constructor import Curve
111
+ return Jacobian_of_equation(X, curve=Curve(X), **kwds)
112
+ else:
113
+ return Jacobian_of_equation(X, **kwds)
114
+
115
+ from sage.schemes.generic.scheme import Scheme
116
+ if isinstance(X, Scheme) and X.dimension() == 1:
117
+ return Jacobian_of_curve(X, morphism=morphism, **kwds)
118
+
119
+
120
+ def Jacobian_of_curve(curve, morphism=False):
121
+ """
122
+ Return the Jacobian of a genus-one curve.
123
+
124
+ INPUT:
125
+
126
+ - ``curve`` -- a one-dimensional algebraic variety of genus one
127
+
128
+ OUTPUT: its Jacobian elliptic curve
129
+
130
+ EXAMPLES::
131
+
132
+ sage: R.<u,v,w> = QQ[]
133
+ sage: C = Curve(u^3 + v^3 + w^3)
134
+ sage: Jacobian(C)
135
+ Elliptic Curve defined by y^2 = x^3 - 27/4 over Rational Field
136
+ """
137
+ eqn = None
138
+ try:
139
+ eqn = curve.defining_polynomial()
140
+ except AttributeError:
141
+ pass
142
+ if len(curve.defining_polynomials()) == 1:
143
+ eqn = curve.defining_polynomials()[0]
144
+ if eqn is not None:
145
+ if morphism:
146
+ return Jacobian_of_equation(eqn, curve=curve)
147
+ else:
148
+ return Jacobian_of_equation(eqn)
149
+ raise NotImplementedError('Jacobian for this curve is not implemented')
150
+
151
+
152
+ def Jacobian_of_equation(polynomial, variables=None, curve=None):
153
+ r"""
154
+ Construct the Jacobian of a genus-one curve given by a polynomial.
155
+
156
+ INPUT:
157
+
158
+ - ``F`` -- a polynomial defining a plane curve of genus one. May
159
+ be homogeneous or inhomogeneous
160
+
161
+ - ``variables`` -- list of two or three variables or ``None``
162
+ (default). The inhomogeneous or homogeneous coordinates. By
163
+ default, all variables in the polynomial are used.
164
+
165
+ - ``curve`` -- the genus-one curve defined by ``polynomial`` or #
166
+ ``None`` (default). If specified, suitable morphism from the
167
+ jacobian elliptic curve to the curve is returned.
168
+
169
+ OUTPUT:
170
+
171
+ An elliptic curve in short Weierstrass form isomorphic to the
172
+ curve ``polynomial=0``. If the optional argument ``curve`` is
173
+ specified, a rational multicover from the Jacobian elliptic curve
174
+ to the genus-one curve is returned.
175
+
176
+ EXAMPLES::
177
+
178
+ sage: R.<a,b,c> = QQ[]
179
+ sage: f = a^3 + b^3 + 60*c^3
180
+ sage: Jacobian(f)
181
+ Elliptic Curve defined by y^2 = x^3 - 24300 over Rational Field
182
+ sage: Jacobian(f.subs(c=1))
183
+ Elliptic Curve defined by y^2 = x^3 - 24300 over Rational Field
184
+
185
+ If we specify the domain curve, the birational covering is returned::
186
+
187
+ sage: h = Jacobian(f, curve=Curve(f)); h
188
+ Scheme morphism:
189
+ From: Projective Plane Curve over Rational Field defined by a^3 + b^3 + 60*c^3
190
+ To: Elliptic Curve defined by y^2 = x^3 - 24300 over Rational Field
191
+ Defn: Defined on coordinates by sending (a : b : c) to
192
+ (-216000*a^4*b^4*c - 12960000*a^4*b*c^4 - 12960000*a*b^4*c^4
193
+ : 108000*a^6*b^3 - 108000*a^3*b^6 - 6480000*a^6*c^3 + 6480000*b^6*c^3
194
+ + 388800000*a^3*c^6 - 388800000*b^3*c^6
195
+ : 216000*a^3*b^3*c^3)
196
+
197
+ sage: h([1,-1,0])
198
+ (0 : 1 : 0)
199
+
200
+ Plugging in the polynomials defining `h` allows us to verify that
201
+ it is indeed a rational morphism to the elliptic curve::
202
+
203
+ sage: E = h.codomain()
204
+ sage: E.defining_polynomial()(h.defining_polynomials()).factor()
205
+ (2519424000000000) * c^3 * b^3 * a^3 * (a^3 + b^3 + 60*c^3)
206
+ * (a^9*b^6 + a^6*b^9 - 120*a^9*b^3*c^3 + 900*a^6*b^6*c^3 - 120*a^3*b^9*c^3
207
+ + 3600*a^9*c^6 + 54000*a^6*b^3*c^6 + 54000*a^3*b^6*c^6 + 3600*b^9*c^6
208
+ + 216000*a^6*c^9 - 432000*a^3*b^3*c^9 + 216000*b^6*c^9)
209
+
210
+ By specifying the variables, we can also construct an elliptic
211
+ curve over a polynomial ring::
212
+
213
+ sage: R.<u,v,t> = QQ[]
214
+ sage: Jacobian(u^3 + v^3 + t, variables=[u,v])
215
+ Elliptic Curve defined by y^2 = x^3 + (-27/4*t^2) over
216
+ Multivariate Polynomial Ring in u, v, t over Rational Field
217
+
218
+ TESTS::
219
+
220
+ sage: from sage.schemes.elliptic_curves.jacobian import Jacobian_of_equation
221
+ sage: Jacobian_of_equation(f, variables=[a,b,c])
222
+ Elliptic Curve defined by y^2 = x^3 - 24300 over Rational Field
223
+ """
224
+ from sage.schemes.toric.weierstrass import WeierstrassForm
225
+ f, g = WeierstrassForm(polynomial, variables=variables)
226
+ try:
227
+ K = polynomial.base_ring()
228
+ f = K(f)
229
+ g = K(g)
230
+ except (TypeError, ValueError):
231
+ pass
232
+ E = EllipticCurve([f, g])
233
+ if curve is None:
234
+ return E
235
+ X, Y, Z = WeierstrassForm(polynomial, variables=variables, transformation=True)
236
+ from sage.schemes.elliptic_curves.weierstrass_transform import WeierstrassTransformation
237
+ return WeierstrassTransformation(curve, E, [X*Z, Y, Z**3], 1)
@@ -0,0 +1,344 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ r"""
3
+ Kodaira symbols
4
+
5
+ Kodaira symbols encode the type of reduction of an elliptic curve at a
6
+ (finite) place.
7
+
8
+ The standard notation for Kodaira Symbols is as a string which is one
9
+ of `\rm{I}_m`, `\rm{II}`, `\rm{III}`, `\rm{IV}`, `\rm{I}^*_m`,
10
+ `\rm{II}^*`, `\rm{III}^*`, `\rm{IV}^*`, where `m` denotes a
11
+ nonnegative integer. These have been encoded by single integers by
12
+ different people. For convenience we give here the conversion table
13
+ between strings, the eclib coding and the PARI encoding.
14
+
15
+ +----------------------+----------------+--------------------+
16
+ | Kodaira Symbol | Eclib coding | PARI Coding |
17
+ +======================+================+====================+
18
+ | `\rm{I}_0` | `0` | `1` |
19
+ +----------------------+----------------+--------------------+
20
+ | `\rm{I}^*_0` | `1` | `-1` |
21
+ +----------------------+----------------+--------------------+
22
+ | `\rm{I}_m` `(m>0)` | `10m` | `m+4` |
23
+ +----------------------+----------------+--------------------+
24
+ | `\rm{I}^*_m` `(m>0)` | `10m+1` | `-(m+4)` |
25
+ +----------------------+----------------+--------------------+
26
+ | `\rm{II}` | `2` | `2` |
27
+ +----------------------+----------------+--------------------+
28
+ | `\rm{III}` | `3` | `3` |
29
+ +----------------------+----------------+--------------------+
30
+ | `\rm{IV}` | `4` | `4` |
31
+ +----------------------+----------------+--------------------+
32
+ | `\rm{II}^*` | `7` | `-2` |
33
+ +----------------------+----------------+--------------------+
34
+ | `\rm{III}^*` | `6` | `-3` |
35
+ +----------------------+----------------+--------------------+
36
+ | `\rm{IV}^*` | `5` | `-4` |
37
+ +----------------------+----------------+--------------------+
38
+
39
+
40
+ AUTHORS:
41
+
42
+ - David Roe <roed@math.harvard.edu>
43
+
44
+ - John Cremona
45
+ """
46
+
47
+ # ****************************************************************************
48
+ # Copyright (C) 2007 David Roe <roed@math.harvard.edu>
49
+ # William Stein <wstein@gmail.com>
50
+ #
51
+ # Distributed under the terms of the GNU General Public License (GPL)
52
+ #
53
+ # This code is distributed in the hope that it will be useful,
54
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
55
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
56
+ # General Public License for more details.
57
+ #
58
+ # The full text of the GPL is available at:
59
+ #
60
+ # https://www.gnu.org/licenses/
61
+ # ****************************************************************************
62
+
63
+ from sage.structure.sage_object import SageObject
64
+ from sage.structure.richcmp import richcmp_method, richcmp
65
+ from sage.rings.integer import Integer
66
+ import weakref
67
+
68
+
69
+ @richcmp_method
70
+ class KodairaSymbol_class(SageObject):
71
+ r"""
72
+ Class to hold a Kodaira symbol of an elliptic curve over a
73
+ `p`-adic local field.
74
+
75
+ Users should use the ``KodairaSymbol()`` function to construct
76
+ Kodaira Symbols rather than use the class constructor directly.
77
+ """
78
+ def __init__(self, symbol):
79
+ r"""
80
+ Constructor for Kodaira Symbol class.
81
+
82
+ INPUT:
83
+
84
+ - ``symbol`` -- string or integer; the string should be a
85
+ standard string representation (e.g. III*) of a Kodaira
86
+ symbol, which will be parsed. Alternatively, use the PARI
87
+ encoding of Kodaira symbols as integers.
88
+
89
+ EXAMPLES::
90
+
91
+ sage: from sage.schemes.elliptic_curves.kodaira_symbol import KodairaSymbol_class
92
+ sage: KodairaSymbol_class(14)
93
+ I10
94
+ sage: KodairaSymbol_class('III*')
95
+ III*
96
+ sage: latex(KodairaSymbol_class('In'))
97
+ I_n
98
+ sage: KodairaSymbol_class('In')
99
+ In
100
+
101
+ Check that :issue:`31147` is fixed::
102
+
103
+ sage: latex(KodairaSymbol_class(-14))
104
+ I_{10}^{*}
105
+ """
106
+ if not isinstance(symbol, str):
107
+ n = Integer(symbol)
108
+ self._n = None
109
+ if n == 0:
110
+ raise ValueError("Kodaira Symbol code number must be nonzero.")
111
+ if n == 1:
112
+ self._n = 0
113
+ self._roman = 1
114
+ self._str = 'I0'
115
+ self._latex = 'I_0'
116
+ elif n == 2:
117
+ self._roman = 2
118
+ self._str = 'II'
119
+ self._latex = 'II'
120
+ elif n == 3:
121
+ self._roman = 3
122
+ self._str = 'III'
123
+ self._latex = 'III'
124
+ elif n == 4:
125
+ self._roman = 4
126
+ self._str = 'IV'
127
+ self._latex = 'IV'
128
+ elif n > 4:
129
+ nu = n - 4
130
+ self._n = nu
131
+ self._roman = 1
132
+ self._str = 'I%s' % nu
133
+ self._latex = 'I_{%s}' % nu
134
+ elif n == -1:
135
+ self._roman = 1
136
+ self._n = 0
137
+ self._str = 'I0*'
138
+ self._latex = 'I_0^{*}'
139
+ elif n == -2:
140
+ self._roman = 2
141
+ self._str = 'II*'
142
+ self._latex = 'II^{*}'
143
+ elif n == -3:
144
+ self._roman = 3
145
+ self._str = 'III*'
146
+ self._latex = 'III^{*}'
147
+ elif n == -4:
148
+ self._roman = 4
149
+ self._str = 'IV*'
150
+ self._latex = 'IV^{*}'
151
+ elif n < -4:
152
+ nu = -n - 4
153
+ self._roman = 1
154
+ self._n = nu
155
+ self._str = 'I%s*' % nu
156
+ self._latex = 'I_{%s}^{*}' % nu
157
+ self._starred = (n < 0)
158
+ self._pari = n
159
+ return
160
+ elif not symbol:
161
+ raise TypeError("symbol must be a nonempty string")
162
+ if symbol[0] == "I":
163
+ symbol = symbol[1:]
164
+ starred = False
165
+ if symbol[-1] == "*":
166
+ starred = True
167
+ symbol = symbol[:-1]
168
+ self._starred = starred
169
+ if symbol in ["I", "II", "V"]: # NB we have already stripped off the leading 'I'
170
+ self._roman = ["I", "II", "V"].index(symbol) + 2 # =2, 3 or 4
171
+ self._n = None
172
+ if starred:
173
+ sign = -1
174
+ self._str = "I" + symbol + "*"
175
+ self._latex = "I" + symbol + "^*"
176
+ else:
177
+ sign = 1
178
+ self._str = "I" + symbol
179
+ self._latex = "" + self._str + ""
180
+ if symbol == "I":
181
+ self._pari = 2 * sign
182
+ elif symbol == "II":
183
+ self._pari = 3 * sign
184
+ elif symbol == "V":
185
+ self._pari = 4 * sign
186
+ elif symbol == "n":
187
+ self._roman = 1
188
+ self._pari = None
189
+ self._n = "generic"
190
+ if starred:
191
+ self._str = "In*"
192
+ self._latex = "I_n^*"
193
+ else:
194
+ self._str = "In"
195
+ self._latex = "I_n"
196
+ elif symbol.isdigit():
197
+ self._roman = 1
198
+ self._n = Integer(symbol)
199
+ if starred:
200
+ if self._n == 0:
201
+ self._pari = -1
202
+ else:
203
+ self._pari = -self._n - 4
204
+ self._str = "I" + symbol + "*"
205
+ self._latex = "I_{%s}^*" % (symbol)
206
+ else:
207
+ if self._n == 0:
208
+ self._pari = 1
209
+ else:
210
+ self._pari = self._n + 4
211
+ self._str = "I" + symbol
212
+ self._latex = "I_{%s}" % (symbol)
213
+ else:
214
+ raise ValueError("input is not a Kodaira symbol")
215
+
216
+ def __repr__(self):
217
+ r"""
218
+ Return the string representation of this Kodaira Symbol.
219
+
220
+ EXAMPLES::
221
+
222
+ sage: from sage.schemes.elliptic_curves.kodaira_symbol import KodairaSymbol_class
223
+ sage: KS = KodairaSymbol_class(15)
224
+ sage: str(KS) # indirect doctest
225
+ 'I11'
226
+ """
227
+ return self._str
228
+
229
+ def _latex_(self):
230
+ r"""
231
+ Return the string representation of this Kodaira Symbol.
232
+
233
+ EXAMPLES::
234
+
235
+ sage: from sage.schemes.elliptic_curves.kodaira_symbol import KodairaSymbol_class
236
+ sage: KS = KodairaSymbol_class(15)
237
+ sage: latex(KS)
238
+ I_{11}
239
+ """
240
+ return self._latex
241
+
242
+ def __richcmp__(self, other, op):
243
+ r"""
244
+ Standard comparison function for Kodaira Symbols.
245
+
246
+ EXAMPLES::
247
+
248
+ sage: from sage.schemes.elliptic_curves.kodaira_symbol import KodairaSymbol_class
249
+ sage: KS1 = KodairaSymbol_class(15); KS1
250
+ I11
251
+ sage: KS2 = KodairaSymbol_class(-34); KS2
252
+ I30*
253
+ sage: KS1 < KS2
254
+ True
255
+ sage: KS2 < KS1
256
+ False
257
+
258
+ ::
259
+
260
+ sage: Klist = [KodairaSymbol_class(i) for i in [-10..10] if i!=0]
261
+ sage: Klist.sort()
262
+ sage: Klist
263
+ [I0,
264
+ I0*,
265
+ I1,
266
+ I1*,
267
+ I2,
268
+ I2*,
269
+ I3,
270
+ I3*,
271
+ I4,
272
+ I4*,
273
+ I5,
274
+ I5*,
275
+ I6,
276
+ I6*,
277
+ II,
278
+ II*,
279
+ III,
280
+ III*,
281
+ IV,
282
+ IV*]
283
+ """
284
+ if isinstance(other, KodairaSymbol_class):
285
+ if (self._n == "generic" and other._n is not None) or (other._n == "generic" and self._n is not None):
286
+ return richcmp(self._starred, other._starred, op)
287
+ return richcmp(self._str, other._str, op)
288
+ else:
289
+ return NotImplemented
290
+
291
+ def _pari_code(self):
292
+ """
293
+ Return the PARI encoding of this Kodaira Symbol.
294
+
295
+ EXAMPLES::
296
+
297
+ sage: KodairaSymbol('I0')._pari_code()
298
+ 1
299
+ sage: KodairaSymbol('I10')._pari_code()
300
+ 14
301
+ sage: KodairaSymbol('I10*')._pari_code()
302
+ -14
303
+ sage: [KodairaSymbol(s)._pari_code() for s in ['II','III','IV']]
304
+ [2, 3, 4]
305
+ sage: [KodairaSymbol(s)._pari_code() for s in ['II*','III*','IV*']]
306
+ [-2, -3, -4]
307
+ """
308
+ return self._pari
309
+
310
+
311
+ _ks_cache = {}
312
+
313
+
314
+ def KodairaSymbol(symbol):
315
+ r"""
316
+ Return the specified Kodaira symbol.
317
+
318
+ INPUT:
319
+
320
+ - ``symbol`` -- string or integer; either a string of the form
321
+ "I0", "I1", ..., "In", "II", "III", "IV", "I0*", "I1*", ..., "In*", "II*", "III*", or "IV*",
322
+ or an integer encoding a Kodaira symbol using PARI's conventions
323
+
324
+ OUTPUT:
325
+
326
+ (KodairaSymbol) The corresponding Kodaira symbol.
327
+
328
+ EXAMPLES::
329
+
330
+ sage: KS = KodairaSymbol
331
+ sage: [KS(n) for n in range(1,10)]
332
+ [I0, II, III, IV, I1, I2, I3, I4, I5]
333
+ sage: [KS(-n) for n in range(1,10)]
334
+ [I0*, II*, III*, IV*, I1*, I2*, I3*, I4*, I5*]
335
+ sage: all(KS(str(KS(n))) == KS(n) for n in range(-10,10) if n != 0)
336
+ True
337
+ """
338
+ if symbol in _ks_cache:
339
+ ks = _ks_cache[symbol]()
340
+ if ks is not None:
341
+ return ks
342
+ ks = KodairaSymbol_class(symbol)
343
+ _ks_cache[symbol] = weakref.ref(ks)
344
+ return ks