passagemath-schemes 10.8.1a4__cp314-cp314t-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) 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.8.1a4.dist-info/METADATA +203 -0
  7. passagemath_schemes-10.8.1a4.dist-info/METADATA.bak +204 -0
  8. passagemath_schemes-10.8.1a4.dist-info/RECORD +312 -0
  9. passagemath_schemes-10.8.1a4.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.8.1a4.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 +9556 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-314t-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2578 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +727 -0
  29. sage/lfunctions/pari.py +971 -0
  30. sage/lfunctions/zero_sums.cpython-314t-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5132 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +414 -0
  34. sage/modular/abvar/abvar_newform.py +246 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +187 -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 +721 -0
  40. sage/modular/abvar/homspace.py +989 -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 +741 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-314t-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1406 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-314t-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +361 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +659 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1491 -0
  57. sage/modular/arithgroup/congroup_generic.py +630 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +266 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-314t-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1067 -0
  61. sage/modular/arithgroup/tests.py +425 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3736 -0
  64. sage/modular/btquotients/pautomorphicform.py +2564 -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 +1107 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +571 -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 +1076 -0
  77. sage/modular/hecke/algebra.py +725 -0
  78. sage/modular/hecke/all.py +19 -0
  79. sage/modular/hecke/ambient_module.py +994 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +302 -0
  82. sage/modular/hecke/hecke_operator.py +736 -0
  83. sage/modular/hecke/homspace.py +185 -0
  84. sage/modular/hecke/module.py +1744 -0
  85. sage/modular/hecke/morphism.py +139 -0
  86. sage/modular/hecke/submodule.py +970 -0
  87. sage/modular/hypergeometric_misc.cpython-314t-darwin.so +0 -0
  88. sage/modular/hypergeometric_misc.pxd +4 -0
  89. sage/modular/hypergeometric_misc.pyx +166 -0
  90. sage/modular/hypergeometric_motive.py +2020 -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 +1070 -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 +817 -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 +120 -0
  101. sage/modular/modform/ambient_g1.py +199 -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 +487 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4105 -0
  108. sage/modular/modform/half_integral.py +154 -0
  109. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  110. sage/modular/modform/j_invariant.py +47 -0
  111. sage/modular/modform/l_series_gross_zagier.py +127 -0
  112. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314t-darwin.so +0 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  114. sage/modular/modform/notes.py +45 -0
  115. sage/modular/modform/numerical.py +514 -0
  116. sage/modular/modform/periods.py +14 -0
  117. sage/modular/modform/ring.py +1257 -0
  118. sage/modular/modform/space.py +1859 -0
  119. sage/modular/modform/submodule.py +118 -0
  120. sage/modular/modform/tests.py +64 -0
  121. sage/modular/modform/theta.py +110 -0
  122. sage/modular/modform/vm_basis.py +380 -0
  123. sage/modular/modform/weight1.py +221 -0
  124. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  125. sage/modular/modform_hecketriangle/abstract_space.py +2527 -0
  126. sage/modular/modform_hecketriangle/all.py +30 -0
  127. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  128. sage/modular/modform_hecketriangle/constructor.py +416 -0
  129. sage/modular/modform_hecketriangle/element.py +351 -0
  130. sage/modular/modform_hecketriangle/functors.py +752 -0
  131. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  132. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  133. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3349 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1426 -0
  135. sage/modular/modform_hecketriangle/readme.py +1214 -0
  136. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  137. sage/modular/modform_hecketriangle/space.py +1037 -0
  138. sage/modular/modform_hecketriangle/subspace.py +423 -0
  139. sage/modular/modsym/all.py +17 -0
  140. sage/modular/modsym/ambient.py +3844 -0
  141. sage/modular/modsym/boundary.py +1420 -0
  142. sage/modular/modsym/element.py +336 -0
  143. sage/modular/modsym/g1list.py +178 -0
  144. sage/modular/modsym/ghlist.py +182 -0
  145. sage/modular/modsym/hecke_operator.py +73 -0
  146. sage/modular/modsym/manin_symbol.cpython-314t-darwin.so +0 -0
  147. sage/modular/modsym/manin_symbol.pxd +5 -0
  148. sage/modular/modsym/manin_symbol.pyx +497 -0
  149. sage/modular/modsym/manin_symbol_list.py +1291 -0
  150. sage/modular/modsym/modsym.py +400 -0
  151. sage/modular/modsym/modular_symbols.py +384 -0
  152. sage/modular/modsym/p1list_nf.py +1241 -0
  153. sage/modular/modsym/relation_matrix.py +591 -0
  154. sage/modular/modsym/relation_matrix_pyx.cpython-314t-darwin.so +0 -0
  155. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  156. sage/modular/modsym/space.py +2468 -0
  157. sage/modular/modsym/subspace.py +455 -0
  158. sage/modular/modsym/tests.py +376 -0
  159. sage/modular/multiple_zeta.py +2635 -0
  160. sage/modular/multiple_zeta_F_algebra.py +789 -0
  161. sage/modular/overconvergent/all.py +6 -0
  162. sage/modular/overconvergent/genus0.py +1879 -0
  163. sage/modular/overconvergent/hecke_series.py +1187 -0
  164. sage/modular/overconvergent/weightspace.py +776 -0
  165. sage/modular/pollack_stevens/all.py +4 -0
  166. sage/modular/pollack_stevens/distributions.py +874 -0
  167. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  168. sage/modular/pollack_stevens/manin_map.py +856 -0
  169. sage/modular/pollack_stevens/modsym.py +1590 -0
  170. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  171. sage/modular/pollack_stevens/sigma0.py +534 -0
  172. sage/modular/pollack_stevens/space.py +1078 -0
  173. sage/modular/quasimodform/all.py +3 -0
  174. sage/modular/quasimodform/element.py +846 -0
  175. sage/modular/quasimodform/ring.py +826 -0
  176. sage/modular/quatalg/all.py +3 -0
  177. sage/modular/quatalg/brandt.py +1642 -0
  178. sage/modular/ssmod/all.py +8 -0
  179. sage/modular/ssmod/ssmod.py +827 -0
  180. sage/rings/all__sagemath_schemes.py +1 -0
  181. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/binary_form_reduce.py +585 -0
  183. sage/schemes/all.py +41 -0
  184. sage/schemes/berkovich/all.py +6 -0
  185. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  186. sage/schemes/berkovich/berkovich_space.py +700 -0
  187. sage/schemes/curves/affine_curve.py +2924 -0
  188. sage/schemes/curves/all.py +33 -0
  189. sage/schemes/curves/closed_point.py +434 -0
  190. sage/schemes/curves/constructor.py +397 -0
  191. sage/schemes/curves/curve.py +542 -0
  192. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  193. sage/schemes/curves/point.py +463 -0
  194. sage/schemes/curves/projective_curve.py +3203 -0
  195. sage/schemes/curves/weighted_projective_curve.py +106 -0
  196. sage/schemes/curves/zariski_vankampen.py +1931 -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 +991 -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 +1103 -0
  208. sage/schemes/elliptic_curves/constructor.py +1530 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3971 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +457 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2837 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3249 -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 +4944 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7184 -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 +1663 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7328 -0
  229. sage/schemes/elliptic_curves/height.py +2108 -0
  230. sage/schemes/elliptic_curves/hom.py +1788 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +1084 -0
  232. sage/schemes/elliptic_curves/hom_fractional.py +544 -0
  233. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  234. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  235. sage/schemes/elliptic_curves/hom_sum.py +681 -0
  236. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  237. sage/schemes/elliptic_curves/homset.py +271 -0
  238. sage/schemes/elliptic_curves/isogeny_class.py +1523 -0
  239. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  240. sage/schemes/elliptic_curves/jacobian.py +247 -0
  241. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  242. sage/schemes/elliptic_curves/kraus.py +1014 -0
  243. sage/schemes/elliptic_curves/lseries_ell.py +915 -0
  244. sage/schemes/elliptic_curves/mod5family.py +105 -0
  245. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.cpython-314t-darwin.so +0 -0
  247. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  248. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  249. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  250. sage/schemes/elliptic_curves/padics.py +1816 -0
  251. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.cpython-314t-darwin.so +0 -0
  253. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  254. sage/schemes/elliptic_curves/saturation.py +716 -0
  255. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  256. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  257. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  258. sage/schemes/hyperelliptic_curves/all.py +6 -0
  259. sage/schemes/hyperelliptic_curves/constructor.py +369 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1948 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +936 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  264. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  265. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +312 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_generic.py +437 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  270. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +878 -0
  271. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  272. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  273. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3863 -0
  274. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  275. sage/schemes/jacobians/all.py +2 -0
  276. sage/schemes/overview.py +161 -0
  277. sage/schemes/plane_conics/all.py +22 -0
  278. sage/schemes/plane_conics/con_field.py +1296 -0
  279. sage/schemes/plane_conics/con_finite_field.py +158 -0
  280. sage/schemes/plane_conics/con_number_field.py +456 -0
  281. sage/schemes/plane_conics/con_rational_field.py +406 -0
  282. sage/schemes/plane_conics/con_rational_function_field.py +581 -0
  283. sage/schemes/plane_conics/constructor.py +249 -0
  284. sage/schemes/plane_quartics/all.py +2 -0
  285. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  286. sage/schemes/plane_quartics/quartic_generic.py +53 -0
  287. sage/schemes/riemann_surfaces/all.py +1 -0
  288. sage/schemes/riemann_surfaces/riemann_surface.py +4177 -0
  289. sage_wheels/share/cremona/cremona_mini.db +0 -0
  290. sage_wheels/share/ellcurves/rank0 +30427 -0
  291. sage_wheels/share/ellcurves/rank1 +31871 -0
  292. sage_wheels/share/ellcurves/rank10 +6 -0
  293. sage_wheels/share/ellcurves/rank11 +6 -0
  294. sage_wheels/share/ellcurves/rank12 +1 -0
  295. sage_wheels/share/ellcurves/rank14 +1 -0
  296. sage_wheels/share/ellcurves/rank15 +1 -0
  297. sage_wheels/share/ellcurves/rank17 +1 -0
  298. sage_wheels/share/ellcurves/rank19 +1 -0
  299. sage_wheels/share/ellcurves/rank2 +2388 -0
  300. sage_wheels/share/ellcurves/rank20 +1 -0
  301. sage_wheels/share/ellcurves/rank21 +1 -0
  302. sage_wheels/share/ellcurves/rank22 +1 -0
  303. sage_wheels/share/ellcurves/rank23 +1 -0
  304. sage_wheels/share/ellcurves/rank24 +1 -0
  305. sage_wheels/share/ellcurves/rank28 +1 -0
  306. sage_wheels/share/ellcurves/rank3 +836 -0
  307. sage_wheels/share/ellcurves/rank4 +10 -0
  308. sage_wheels/share/ellcurves/rank5 +5 -0
  309. sage_wheels/share/ellcurves/rank6 +5 -0
  310. sage_wheels/share/ellcurves/rank7 +5 -0
  311. sage_wheels/share/ellcurves/rank8 +6 -0
  312. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,99 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Kummer surfaces over a general ring
4
+ """
5
+
6
+ #*****************************************************************************
7
+ # Copyright (C) 2006 David Kohel <kohel@maths.usyd.edu>
8
+ # Distributed under the terms of the GNU General Public License (GPL)
9
+ # http://www.gnu.org/licenses/
10
+ #*****************************************************************************
11
+
12
+ from sage.schemes.projective.projective_space import ProjectiveSpace
13
+ from sage.schemes.projective.projective_subscheme\
14
+ import AlgebraicScheme_subscheme_projective
15
+ from sage.categories.homset import Hom
16
+ from sage.categories.schemes import Schemes
17
+
18
+ # The generic genus 2 curve in Weierstrass form:
19
+ #
20
+ # y^2 + (c9*x^3 + c6*x^2 + c3*x + c0)*y =
21
+ # a12*x^6 + a10*x^5 + a8*x^4 + a6*x^3 + a4*x^2 + a2*x + a0.
22
+ #
23
+ # Transforms to:
24
+ #
25
+ # y^2 = (c9^2 + 4*a12)*x^6 + (2*c6*c9 + 4*a10)*x^5
26
+ # + (2*c3*c9 + c6^2 + 4*a8)*x^4 + (2*c0*c9 + 2*c3*c6 + 4*a6)*x^3
27
+ # + (2*c0*c6 + c3^2 + 4*a4)*x^2 + (2*c0*c3 + 4*a2)*x + c0^2 + 4*a0
28
+
29
+
30
+ class KummerSurface(AlgebraicScheme_subscheme_projective):
31
+ def __init__(self, J):
32
+ """
33
+ EXAMPLES::
34
+
35
+ sage: R.<x> = QQ[]
36
+ sage: f = x^5 + x + 1
37
+ sage: X = HyperellipticCurve(f)
38
+ sage: J = Jacobian(X)
39
+ sage: K = KummerSurface(J); K
40
+ Closed subscheme of Projective Space of dimension 3 over Rational Field defined by:
41
+ X0^4 - 4*X0*X1^3 + 4*X0^2*X1*X2 - 4*X0*X1^2*X2 + 2*X0^2*X2^2 + X2^4 - 4*X0^3*X3 - 2*X0^2*X1*X3 - 2*X1*X2^2*X3 + X1^2*X3^2 - 4*X0*X2*X3^2
42
+ """
43
+ R = J.base_ring()
44
+ PP = ProjectiveSpace(3, R, ["X0", "X1", "X2", "X3"])
45
+ X0, X1, X2, X3 = PP.gens()
46
+ C = J.curve()
47
+ f, h = C.hyperelliptic_polynomials()
48
+ a12 = f[0]
49
+ a10 = f[1]
50
+ a8 = f[2]
51
+ a6 = f[3]
52
+ a4 = f[4]
53
+ a2 = f[5]
54
+ a0 = f[6]
55
+ if h != 0:
56
+ c6 = h[0]
57
+ c4 = h[1]
58
+ c2 = h[2]
59
+ c0 = h[3]
60
+ a12, a10, a8, a6, a4, a2, a0 = \
61
+ (4*a12 + c6**2,
62
+ 4*a10 + 2*c4*c6,
63
+ 4*a8 + 2*c2*c6 + c4**2,
64
+ 4*a6 + 2*c0*c6 + 2*c2*c4,
65
+ 4*a4 + 2*c0*c4 + c2**2,
66
+ 4*a2 + 2*c0*c2,
67
+ 4*a0 + c0**2)
68
+ F = \
69
+ (-4*a8*a12 + a10**2)*X0**4 + \
70
+ -4*a6*a12*X0**3*X1 + \
71
+ -2*a6*a10*X0**3*X2 + \
72
+ -4*a12*X0**3*X3 + \
73
+ -4*a4*a12*X0**2*X1**2 + \
74
+ (4*a2*a12 - 4*a4*a10)*X0**2*X1*X2 + \
75
+ -2*a10*X0**2*X1*X3 + \
76
+ (-4*a0*a12 + 2*a2*a10 - 4*a4*a8 + a6**2)*X0**2*X2**2 + \
77
+ -4*a8*X0**2*X2*X3 + \
78
+ -4*a2*a12*X0*X1**3 + \
79
+ (8*a0*a12 - 4*a2*a10)*X0*X1**2*X2 + \
80
+ (4*a0*a10 - 4*a2*a8)*X0*X1*X2**2 + \
81
+ -2*a6*X0*X1*X2*X3 + \
82
+ -2*a2*a6*X0*X2**3 + \
83
+ -4*a4*X0*X2**2*X3 + \
84
+ -4*X0*X2*X3**2 + \
85
+ -4*a0*a12*X1**4 + \
86
+ -4*a0*a10*X1**3*X2 + \
87
+ -4*a0*a8*X1**2*X2**2 + \
88
+ X1**2*X3**2 + \
89
+ -4*a0*a6*X1*X2**3 + \
90
+ -2*a2*X1*X2**2*X3 + \
91
+ (-4*a0*a4 + a2**2)*X2**4 + \
92
+ -4*a0*X2**3*X3
93
+ AlgebraicScheme_subscheme_projective.__init__(self, PP, F)
94
+ X, Y, Z = C.ambient_space().gens()
95
+ if a0 == 0:
96
+ a0 = a2
97
+ phi = Hom(C, self)([X.parent().zero(), Z**2, X*Z, a0*X**2], Schemes())
98
+ C._kummer_morphism = phi
99
+ J._kummer_surface = self
@@ -0,0 +1,302 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ r"""
3
+ Mestre's algorithm
4
+
5
+ This file contains functions that:
6
+
7
+ - create hyperelliptic curves from the Igusa-Clebsch invariants (over
8
+ `\QQ` and finite fields)
9
+ - create Mestre's conic from the Igusa-Clebsch invariants
10
+
11
+ AUTHORS:
12
+
13
+ - Florian Bouyer
14
+ - Marco Streng
15
+ """
16
+ #*****************************************************************************
17
+ # Copyright (C) 2011, 2012, 2013
18
+ # Florian Bouyer <f.j.s.c.bouyer@gmail.com>
19
+ # Marco Streng <marco.streng@gmail.com>
20
+ #
21
+ # Distributed under the terms of the GNU General Public License (GPL)
22
+ # as published by the Free Software Foundation; either version 2 of
23
+ # the License, or (at your option) any later version.
24
+ # http://www.gnu.org/licenses/
25
+ #*****************************************************************************
26
+
27
+ from sage.matrix.constructor import Matrix
28
+ from sage.schemes.plane_conics.constructor import Conic
29
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
30
+ from sage.schemes.hyperelliptic_curves.constructor import HyperellipticCurve
31
+
32
+
33
+ def HyperellipticCurve_from_invariants(i, reduced=True, precision=None,
34
+ algorithm='default'):
35
+ r"""
36
+ Return a hyperelliptic curve with the given Igusa-Clebsch invariants up to
37
+ scaling.
38
+
39
+ The output is a curve over the field in which the Igusa-Clebsch invariants
40
+ are given. The output curve is unique up to isomorphism over the algebraic
41
+ closure. If no such curve exists over the given field, then raise a
42
+ :exc:`ValueError`.
43
+
44
+ INPUT:
45
+
46
+ - ``i`` -- list or tuple of length 4 containing the four Igusa-Clebsch
47
+ invariants: I2,I4,I6,I10
48
+ - ``reduced`` -- boolean (default: ``True``); if ``True``, tries to reduce
49
+ the polynomial defining the hyperelliptic curve using the function
50
+ :func:`reduce_polynomial` (see the :func:`reduce_polynomial`
51
+ documentation for more details).
52
+ - ``precision`` -- integer (default: ``None``); which precision for real and
53
+ complex numbers should the reduction use. This only affects the
54
+ reduction, not the correctness. If ``None``, the algorithm uses the default
55
+ 53 bit precision.
56
+ - ``algorithm`` -- ``'default'`` or ``'magma'``. If set to ``'magma'``, uses
57
+ Magma to parameterize Mestre's conic (needs Magma to be installed)
58
+
59
+ OUTPUT: a hyperelliptic curve object
60
+
61
+ EXAMPLES:
62
+
63
+ Examples over the rationals::
64
+
65
+ sage: HyperellipticCurve_from_invariants([3840,414720,491028480,2437709561856])
66
+ Traceback (most recent call last):
67
+ ...
68
+ NotImplementedError: Reduction of hyperelliptic curves not yet implemented.
69
+ See issues #14755 and #14756.
70
+
71
+ sage: HyperellipticCurve_from_invariants([3840,414720,491028480,2437709561856], reduced=False)
72
+ Hyperelliptic Curve over Rational Field defined by
73
+ y^2 = -46656*x^6 + 46656*x^5 - 19440*x^4 + 4320*x^3 - 540*x^2 + 4410*x - 1
74
+
75
+ sage: HyperellipticCurve_from_invariants([21, 225/64, 22941/512, 1])
76
+ Traceback (most recent call last):
77
+ ...
78
+ NotImplementedError: Reduction of hyperelliptic curves not yet implemented.
79
+ See issues #14755 and #14756.
80
+
81
+ An example over a finite field::
82
+
83
+ sage: H = HyperellipticCurve_from_invariants([GF(13)(1), 3, 7, 5]); H
84
+ Hyperelliptic Curve over Finite Field of size 13 defined by ...
85
+ sage: H.igusa_clebsch_invariants()
86
+ (4, 9, 6, 11)
87
+
88
+ An example over a number field::
89
+
90
+ sage: K = QuadraticField(353, 'a') # needs sage.rings.number_field
91
+ sage: H = HyperellipticCurve_from_invariants([21, 225/64, 22941/512, 1], # needs sage.rings.number_field
92
+ ....: reduced=false)
93
+ sage: f = K['x'](H.hyperelliptic_polynomials()[0]) # needs sage.rings.number_field
94
+
95
+ If the Mestre Conic defined by the Igusa-Clebsch invariants has no rational
96
+ points, then there exists no hyperelliptic curve over the base field with
97
+ the given invariants.::
98
+
99
+ sage: HyperellipticCurve_from_invariants([1,2,3,4])
100
+ Traceback (most recent call last):
101
+ ...
102
+ ValueError: No such curve exists over Rational Field as there are
103
+ no rational points on Projective Conic Curve over Rational Field defined by
104
+ -2572155000*u^2 - 317736000*u*v + 1250755459200*v^2 + 2501510918400*u*w
105
+ + 39276887040*v*w + 2736219686912*w^2
106
+
107
+ Mestre's algorithm only works for generic curves of genus two, so another
108
+ algorithm is needed for those curves with extra automorphism. See also
109
+ :issue:`12199`::
110
+
111
+ sage: P.<x> = QQ[]
112
+ sage: C = HyperellipticCurve(x^6 + 1)
113
+ sage: i = C.igusa_clebsch_invariants()
114
+ sage: HyperellipticCurve_from_invariants(i)
115
+ Traceback (most recent call last):
116
+ ...
117
+ TypeError: F (=0) must have degree 2
118
+
119
+
120
+ Igusa-Clebsch invariants also only work over fields of characteristic
121
+ different from 2, 3, and 5, so another algorithm will be needed for fields
122
+ of those characteristics. See also :issue:`12200`::
123
+
124
+ sage: P.<x> = GF(3)[]
125
+ sage: HyperellipticCurve(x^6 + x + 1).igusa_clebsch_invariants()
126
+ Traceback (most recent call last):
127
+ ...
128
+ NotImplementedError: Invariants of binary sextics/genus 2 hyperelliptic curves
129
+ not implemented in characteristics 2, 3, and 5
130
+ sage: HyperellipticCurve_from_invariants([GF(5)(1), 1, 0, 1])
131
+ Traceback (most recent call last):
132
+ ...
133
+ ZeroDivisionError: inverse of Mod(0, 5) does not exist
134
+
135
+ ALGORITHM:
136
+
137
+ This is Mestre's algorithm [Mes1991]_. Our implementation is based on the
138
+ formulae on page 957 of [LY2001]_, cross-referenced with [Wam1999b]_ to
139
+ correct typos.
140
+
141
+ First construct Mestre's conic using the :func:`Mestre_conic` function.
142
+ Parametrize the conic if possible.
143
+ Let `f_1, f_2, f_3` be the three coordinates of the parametrization of the
144
+ conic by the projective line, and change them into one variable by letting
145
+ `F_i = f_i(t, 1)`. Note that each `F_i` has degree at most 2.
146
+
147
+ Then construct a sextic polynomial
148
+ `f = \sum_{0<=i,j,k<=3}{c_{ijk}*F_i*F_j*F_k}`,
149
+ where `c_{ijk}` are defined as rational functions in the invariants
150
+ (see the source code for detailed formulae for `c_{ijk}`).
151
+ The output is the hyperelliptic curve `y^2 = f`.
152
+ """
153
+ from sage.structure.sequence import Sequence
154
+ i = Sequence(i)
155
+ k = i.universe()
156
+ try:
157
+ k = k.fraction_field()
158
+ except (TypeError, AttributeError, NotImplementedError):
159
+ pass
160
+
161
+ MConic, x, y, z = Mestre_conic(i, xyz=True)
162
+ if k.is_finite():
163
+ reduced = False
164
+
165
+ t = k['t'].gen()
166
+
167
+ if algorithm == 'magma':
168
+ from sage.interfaces.magma import magma
169
+ if MConic.has_rational_point(algorithm='magma'):
170
+ parametrization = magma(MConic).Parametrization().DefiningPolynomials().sage()
171
+ F1, F2, F3 = (p(t, 1) for p in parametrization)
172
+ else:
173
+ raise ValueError(f"No such curve exists over {k} as there are no "
174
+ f"rational points on {MConic}")
175
+ else:
176
+ if MConic.has_rational_point():
177
+ parametrization = MConic.parametrization(morphism=False)[0]
178
+ F1, F2, F3 = (p(t, 1) for p in parametrization)
179
+ else:
180
+ raise ValueError(f"No such curve exists over {k} as there are no "
181
+ f"rational points on {MConic}")
182
+
183
+ # setting the cijk from Mestre's algorithm
184
+ c111 = 12*x*y - 2*y/3 - 4*z
185
+ c112 = -18*x**3 - 12*x*y - 36*y**2 - 2*z
186
+ c113 = -9*x**3 - 36*x**2*y - 4*x*y - 6*x*z - 18*y**2
187
+ c122 = c113
188
+ c123 = -54*x**4 - 36*x**2*y - 36*x*y**2 - 6*x*z - 4*y**2 - 24*y*z
189
+ c133 = -27*x**4/2 - 72*x**3*y - 6*x**2*y - 9*x**2*z - 39*x*y**2 - \
190
+ 36*y**3 - 2*y*z
191
+ c222 = -27*x**4 - 18*x**2*y - 6*x*y**2 - 8*y**2/3 + 2*y*z
192
+ c223 = 9*x**3*y - 27*x**2*z + 6*x*y**2 + 18*y**3 - 8*y*z
193
+ c233 = -81*x**5/2 - 27*x**3*y - 9*x**2*y**2 - 4*x*y**2 + 3*x*y*z - 6*z**2
194
+ c333 = 27*x**4*y/2 - 27*x**3*z/2 + 9*x**2*y**2 + 3*x*y**3 - 6*x*y*z + \
195
+ 4*y**3/3 - 10*y**2*z
196
+
197
+ # writing out the hyperelliptic curve polynomial
198
+ f = c111*F1**3 + c112*F1**2*F2 + c113*F1**2*F3 + c122*F1*F2**2 + \
199
+ c123*F1*F2*F3 + c133*F1*F3**2 + c222*F2**3 + c223*F2**2*F3 + \
200
+ c233*F2*F3**2 + c333*F3**3
201
+
202
+ try:
203
+ f = f * f.denominator() # clear the denominator
204
+ except (AttributeError, TypeError):
205
+ pass
206
+
207
+ if reduced:
208
+ raise NotImplementedError("Reduction of hyperelliptic curves not "
209
+ "yet implemented. "
210
+ "See issues #14755 and #14756.")
211
+
212
+ return HyperellipticCurve(f)
213
+
214
+
215
+ def Mestre_conic(i, xyz=False, names='u,v,w'):
216
+ r"""
217
+ Return the conic equation from Mestre's algorithm given the Igusa-Clebsch
218
+ invariants.
219
+
220
+ It has a rational point if and only if a hyperelliptic curve
221
+ corresponding to the invariants exists.
222
+
223
+ INPUT:
224
+
225
+ - ``i`` -- list or tuple of length 4 containing the four Igusa-Clebsch
226
+ invariants: I2, I4, I6, I10
227
+ - ``xyz`` -- boolean (default: ``False``); if ``True``, the algorithm also
228
+ returns three invariants `x`,`y`,`z` used in Mestre's algorithm
229
+ - ``names`` -- (default: ``'u,v,w'``) the variable names for the conic
230
+
231
+ OUTPUT: a Conic object
232
+
233
+ EXAMPLES:
234
+
235
+ A standard example::
236
+
237
+ sage: Mestre_conic([1,2,3,4])
238
+ Projective Conic Curve over Rational Field defined by
239
+ -2572155000*u^2 - 317736000*u*v + 1250755459200*v^2 + 2501510918400*u*w
240
+ + 39276887040*v*w + 2736219686912*w^2
241
+
242
+ Note that the algorithm works over number fields as well::
243
+
244
+ sage: x = polygen(ZZ, 'x')
245
+ sage: k = NumberField(x^2 - 41, 'a') # needs sage.rings.number_field
246
+ sage: a = k.an_element() # needs sage.rings.number_field
247
+ sage: Mestre_conic([1, 2 + a, a, 4 + a]) # needs sage.rings.number_field
248
+ Projective Conic Curve over Number Field in a with defining polynomial x^2 - 41
249
+ defined by (-801900000*a + 343845000)*u^2 + (855360000*a + 15795864000)*u*v
250
+ + (312292800000*a + 1284808579200)*v^2 + (624585600000*a + 2569617158400)*u*w
251
+ + (15799910400*a + 234573143040)*v*w + (2034199306240*a + 16429854656512)*w^2
252
+
253
+ And over finite fields::
254
+
255
+ sage: Mestre_conic([GF(7)(10), GF(7)(1), GF(7)(2), GF(7)(3)])
256
+ Projective Conic Curve over Finite Field of size 7
257
+ defined by -2*u*v - v^2 - 2*u*w + 2*v*w - 3*w^2
258
+
259
+ An example with ``xyz``::
260
+
261
+ sage: Mestre_conic([5,6,7,8], xyz=True)
262
+ (Projective Conic Curve over Rational Field
263
+ defined by -415125000*u^2 + 608040000*u*v + 33065136000*v^2
264
+ + 66130272000*u*w + 240829440*v*w + 10208835584*w^2,
265
+ 232/1125, -1072/16875, 14695616/2109375)
266
+
267
+ ALGORITHM:
268
+
269
+ The formulas are taken from pages 956 - 957 of [LY2001]_ and based on pages
270
+ 321 and 332 of [Mes1991]_.
271
+
272
+ See the code or [LY2001]_ for the detailed formulae defining x, y, z and L.
273
+ """
274
+ from sage.structure.sequence import Sequence
275
+ k = Sequence(i).universe()
276
+ try:
277
+ k = k.fraction_field()
278
+ except (TypeError, AttributeError, NotImplementedError):
279
+ pass
280
+
281
+ I2, I4, I6, I10 = i
282
+
283
+ #Setting x,y,z as in Mestre's algorithm (Using Lauter and Yang's formulas)
284
+ x = 8*(1 + 20*I4/(I2**2))/225
285
+ y = 16*(1 + 80*I4/(I2**2) - 600*I6/(I2**3))/3375
286
+ z = -64*(-10800000*I10/(I2**5) - 9 - 700*I4/(I2**2) + 3600*I6/(I2**3) +
287
+ 12400*I4**2/(I2**4) - 48000*I4*I6/(I2**5))/253125
288
+
289
+ L = Matrix([[x+6*y , 6*x**2+2*y , 2*z ],
290
+ [6*x**2+2*y, 2*z , 9*x**3 + 4*x*y + 6*y**2 ],
291
+ [2*z , 9*x**3+4*x*y+6*y**2, 6*x**2*y + 2*y**2 + 3*x*z]])
292
+
293
+ try:
294
+ L = L*L.denominator() # clears the denominator
295
+ except (AttributeError, TypeError):
296
+ pass
297
+
298
+ u, v, w = PolynomialRing(k, names).gens()
299
+ MConic = Conic(k, L, names)
300
+ if xyz:
301
+ return MConic, x, y, z
302
+ return MConic