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,84 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Hyperelliptic curves over the rationals
4
+ """
5
+ #*****************************************************************************
6
+ # Copyright (C) 2006 David Kohel <kohel@maths.usyd.edu>
7
+ # Distributed under the terms of the GNU General Public License (GPL)
8
+ # http://www.gnu.org/licenses/
9
+ #*****************************************************************************
10
+
11
+ import sage.rings.abc
12
+
13
+ from sage.misc.lazy_import import lazy_import
14
+ from sage.schemes.curves.projective_curve import ProjectivePlaneCurve_field
15
+
16
+ lazy_import('sage.rings.padics.factory', 'Qp', as_='pAdicField')
17
+
18
+ from . import hyperelliptic_generic
19
+
20
+
21
+ class HyperellipticCurve_rational_field(hyperelliptic_generic.HyperellipticCurve_generic,
22
+ ProjectivePlaneCurve_field):
23
+
24
+ def matrix_of_frobenius(self, p, prec=20):
25
+ """
26
+ Compute the matrix of Frobenius on Monsky-Washnitzer cohomology using
27
+ the `p`-adic field with precision ``prec``.
28
+
29
+ This function is essentially a wrapper function of
30
+ :meth:`sage.schemes.hyperelliptic_curves.monsky_washnitzer.matrix_of_frobenius_hyperelliptic`.
31
+
32
+ INPUT:
33
+
34
+ - ``p`` -- prime integer or pAdic ring / field; if ``p`` is an integer,
35
+ constructs a ``pAdicField`` with ``p`` to compute the matrix of
36
+ Frobenius, otherwise uses the supplied pAdic ring or field
37
+
38
+ - ``prec`` -- (optional) if ``p`` is an prime integer, the `p`-adic
39
+ precision of the coefficient ring constructed
40
+
41
+ EXAMPLES::
42
+
43
+ sage: K = pAdicField(5, prec=3)
44
+ sage: R.<x> = QQ['x']
45
+ sage: H = HyperellipticCurve(x^5 - 2*x + 3)
46
+ sage: H.matrix_of_frobenius(K)
47
+ [ 4*5 + O(5^3) 5 + 2*5^2 + O(5^3) 2 + 3*5 + 2*5^2 + O(5^3) 2 + 5 + 5^2 + O(5^3)]
48
+ [ 3*5 + 5^2 + O(5^3) 3*5 + O(5^3) 4*5 + O(5^3) 2 + 5^2 + O(5^3)]
49
+ [ 4*5 + 4*5^2 + O(5^3) 3*5 + 2*5^2 + O(5^3) 5 + 3*5^2 + O(5^3) 2*5 + 2*5^2 + O(5^3)]
50
+ [ 5^2 + O(5^3) 5 + 4*5^2 + O(5^3) 4*5 + 3*5^2 + O(5^3) 2*5 + O(5^3)]
51
+
52
+ You can also pass directly a prime `p` with to construct a pAdic field with precision
53
+ ``prec``::
54
+
55
+ sage: H.matrix_of_frobenius(3, prec=2)
56
+ [ O(3^2) 3 + O(3^2) O(3^2) O(3^2)]
57
+ [ 3 + O(3^2) O(3^2) O(3^2) 2 + 3 + O(3^2)]
58
+ [ 2*3 + O(3^2) O(3^2) O(3^2) 3^-1 + O(3)]
59
+ [ O(3^2) O(3^2) 3 + O(3^2) O(3^2)]
60
+ """
61
+ import sage.schemes.hyperelliptic_curves.monsky_washnitzer as monsky_washnitzer
62
+ if isinstance(p, (sage.rings.abc.pAdicField, sage.rings.abc.pAdicRing)):
63
+ K = p
64
+ else:
65
+ K = pAdicField(p, prec)
66
+ frob_p, _ = monsky_washnitzer.matrix_of_frobenius_hyperelliptic(self.change_ring(K))
67
+ return frob_p
68
+
69
+ def lseries(self, prec=53):
70
+ """
71
+ Return the `L`-series of this hyperelliptic curve of genus 2.
72
+
73
+ EXAMPLES::
74
+
75
+ sage: x = polygen(QQ, 'x')
76
+ sage: C = HyperellipticCurve(x^2+x, x^3+x^2+1)
77
+ sage: C.lseries()
78
+ PARI L-function associated to Hyperelliptic Curve
79
+ over Rational Field defined by y^2 + (x^3 + x^2 + 1)*y = x^2 + x
80
+ """
81
+ from sage.lfunctions.pari import LFunction, lfun_genus2
82
+ L = LFunction(lfun_genus2(self), prec=prec)
83
+ L.rename('PARI L-function associated to %s' % self)
84
+ return L
@@ -0,0 +1,410 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ r"""
3
+ Compute invariants of quintics and sextics via 'Ueberschiebung'
4
+
5
+ .. TODO::
6
+
7
+ * Implement invariants in small positive characteristic.
8
+
9
+ * Cardona-Quer and additional invariants for classifying automorphism groups.
10
+
11
+ AUTHOR:
12
+
13
+ - Nick Alexander
14
+ """
15
+ from sage.rings.integer_ring import ZZ
16
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
17
+
18
+
19
+ def diffxy(f, x, xtimes, y, ytimes):
20
+ r"""
21
+ Differentiate a polynomial ``f``, ``xtimes`` with respect to ``x``, and
22
+ ``ytimes`` with respect to ``y``.
23
+
24
+ EXAMPLES::
25
+
26
+ sage: from sage.schemes.hyperelliptic_curves.invariants import diffxy
27
+ sage: R.<u, v> = QQ[]
28
+ sage: diffxy(u^2*v^3, u, 0, v, 0)
29
+ u^2*v^3
30
+ sage: diffxy(u^2*v^3, u, 2, v, 1)
31
+ 6*v^2
32
+ sage: diffxy(u^2*v^3, u, 2, v, 2)
33
+ 12*v
34
+ sage: diffxy(u^2*v^3 + u^4*v^4, u, 2, v, 2)
35
+ 144*u^2*v^2 + 12*v
36
+ """
37
+ h = f
38
+ for i in range(xtimes):
39
+ h = h.derivative(x)
40
+ for j in range(ytimes):
41
+ h = h.derivative(y)
42
+ return h
43
+
44
+
45
+ def differential_operator(f, g, k):
46
+ r"""
47
+ Return the differential operator `(f g)_k` symbolically in the polynomial ring in ``dfdx, dfdy, dgdx, dgdy``.
48
+
49
+ This is defined by Mestre on p 315 [Mes1991]_:
50
+
51
+ .. MATH::
52
+
53
+ (f g)_k = \frac{(m - k)! (n - k)!}{m! n!} \left(
54
+ \frac{\partial f}{\partial x} \frac{\partial g}{\partial y} -
55
+ \frac{\partial f}{\partial y} \frac{\partial g}{\partial x} \right)^k .
56
+
57
+ EXAMPLES::
58
+
59
+ sage: from sage.schemes.hyperelliptic_curves.invariants import differential_operator
60
+ sage: R.<x, y> = QQ[]
61
+ sage: differential_operator(x, y, 0)
62
+ 1
63
+ sage: differential_operator(x, y, 1)
64
+ -dfdy*dgdx + dfdx*dgdy
65
+ sage: differential_operator(x*y, x*y, 2)
66
+ 1/4*dfdy^2*dgdx^2 - 1/2*dfdx*dfdy*dgdx*dgdy + 1/4*dfdx^2*dgdy^2
67
+ sage: differential_operator(x^2*y, x*y^2, 2)
68
+ 1/36*dfdy^2*dgdx^2 - 1/18*dfdx*dfdy*dgdx*dgdy + 1/36*dfdx^2*dgdy^2
69
+ sage: differential_operator(x^2*y, x*y^2, 4)
70
+ 1/576*dfdy^4*dgdx^4 - 1/144*dfdx*dfdy^3*dgdx^3*dgdy + 1/96*dfdx^2*dfdy^2*dgdx^2*dgdy^2
71
+ - 1/144*dfdx^3*dfdy*dgdx*dgdy^3 + 1/576*dfdx^4*dgdy^4
72
+ """
73
+ (x, y) = f.parent().gens()
74
+ n = max(ZZ(f.degree()), ZZ(k))
75
+ m = max(ZZ(g.degree()), ZZ(k))
76
+ R, (fx, fy, gx, gy) = PolynomialRing(f.base_ring(), 4, 'dfdx,dfdy,dgdx,dgdy').objgens()
77
+ const = (m - k).factorial() * (n - k).factorial() / (m.factorial() * n.factorial())
78
+ U = f.base_ring()(const) * (fx*gy - fy*gx)**k
79
+ return U
80
+
81
+
82
+ def diffsymb(U, f, g):
83
+ r"""
84
+ Given a differential operator ``U`` in ``dfdx, dfdy, dgdx, dgdy``,
85
+ represented symbolically by ``U``, apply it to ``f, g``.
86
+
87
+ EXAMPLES::
88
+
89
+ sage: from sage.schemes.hyperelliptic_curves.invariants import diffsymb
90
+ sage: R.<x, y> = QQ[]
91
+ sage: S.<dfdx, dfdy, dgdx, dgdy> = QQ[]
92
+ sage: [ diffsymb(dd, x^2, y*0 + 1) for dd in S.gens() ]
93
+ [2*x, 0, 0, 0]
94
+ sage: [ diffsymb(dd, x*0 + 1, y^2) for dd in S.gens() ]
95
+ [0, 0, 0, 2*y]
96
+ sage: [ diffsymb(dd, x^2, y^2) for dd in S.gens() ]
97
+ [2*x*y^2, 0, 0, 2*x^2*y]
98
+
99
+ sage: diffsymb(dfdx + dfdy*dgdy, y*x^2, y^3)
100
+ 2*x*y^4 + 3*x^2*y^2
101
+ """
102
+ (x, y) = f.parent().gens()
103
+ R, (fx, fy, gx, gy) = PolynomialRing(f.base_ring(), 4, 'dfdx,dfdy,dgdx,dgdy').objgens()
104
+ res = 0
105
+ for coeff, mon in list(U):
106
+ mon = R(mon)
107
+ a = diffxy(f, x, mon.degree(fx), y, mon.degree(fy))
108
+ b = diffxy(g, x, mon.degree(gx), y, mon.degree(gy))
109
+ temp = coeff * a * b
110
+ res = res + temp
111
+ return res
112
+
113
+
114
+ def Ueberschiebung(f, g, k):
115
+ r"""
116
+ Return the differential operator `(f g)_k`.
117
+
118
+ This is defined by Mestre on page 315 [Mes1991]_:
119
+
120
+ .. MATH::
121
+
122
+ (f g)_k = \frac{(m - k)! (n - k)!}{m! n!} \left(
123
+ \frac{\partial f}{\partial x} \frac{\partial g}{\partial y} -
124
+ \frac{\partial f}{\partial y} \frac{\partial g}{\partial x} \right)^k .
125
+
126
+ EXAMPLES::
127
+
128
+ sage: from sage.schemes.hyperelliptic_curves.invariants import Ueberschiebung as ub
129
+ sage: R.<x, y> = QQ[]
130
+ sage: ub(x, y, 0)
131
+ x*y
132
+ sage: ub(x^5 + 1, x^5 + 1, 1)
133
+ 0
134
+ sage: ub(x^5 + 5*x + 1, x^5 + 5*x + 1, 0)
135
+ x^10 + 10*x^6 + 2*x^5 + 25*x^2 + 10*x + 1
136
+ """
137
+ U = differential_operator(f, g, k)
138
+ # U is the (f g)_k = ... of Mestre, p315, symbolically
139
+ return diffsymb(U, f, g)
140
+
141
+
142
+ def ubs(f):
143
+ r"""
144
+ Given a sextic form `f`, return a dictionary of the invariants of Mestre, p 317 [Mes1991]_.
145
+
146
+ `f` may be homogeneous in two variables or inhomogeneous in one.
147
+
148
+ EXAMPLES::
149
+
150
+ sage: from sage.schemes.hyperelliptic_curves.invariants import ubs
151
+ sage: x = QQ['x'].0
152
+ sage: ubs(x^6 + 1)
153
+ {'A': 2,
154
+ 'B': 2/3,
155
+ 'C': -2/9,
156
+ 'D': 0,
157
+ 'Delta': -2/3*x^2*h^2,
158
+ 'f': x^6 + h^6,
159
+ 'i': 2*x^2*h^2,
160
+ 'y1': 0,
161
+ 'y2': 0,
162
+ 'y3': 0}
163
+
164
+ sage: R.<u, v> = QQ[]
165
+ sage: ubs(u^6 + v^6)
166
+ {'A': 2,
167
+ 'B': 2/3,
168
+ 'C': -2/9,
169
+ 'D': 0,
170
+ 'Delta': -2/3*u^2*v^2,
171
+ 'f': u^6 + v^6,
172
+ 'i': 2*u^2*v^2,
173
+ 'y1': 0,
174
+ 'y2': 0,
175
+ 'y3': 0}
176
+
177
+ sage: R.<t> = GF(31)[]
178
+ sage: ubs(t^6 + 2*t^5 + t^2 + 3*t + 1)
179
+ {'A': 0,
180
+ 'B': -12,
181
+ 'C': -15,
182
+ 'D': -15,
183
+ 'Delta': -10*t^4 + 12*t^3*h + 7*t^2*h^2 - 5*t*h^3 + 2*h^4,
184
+ 'f': t^6 + 2*t^5*h + t^2*h^4 + 3*t*h^5 + h^6,
185
+ 'i': -4*t^4 + 10*t^3*h + 2*t^2*h^2 - 9*t*h^3 - 7*h^4,
186
+ 'y1': 4*t^2 - 10*t*h - 13*h^2,
187
+ 'y2': 6*t^2 - 4*t*h + 2*h^2,
188
+ 'y3': 4*t^2 - 4*t*h - 9*h^2}
189
+ """
190
+ ub = Ueberschiebung
191
+ if f.parent().ngens() == 1:
192
+ f = PolynomialRing(f.parent().base_ring(), 1, f.parent().variable_name())(f)
193
+ x1, x2 = f.homogenize().parent().gens()
194
+ f = sum([ f[i]*x1**i*x2**(6-i) for i in range(7) ])
195
+ U = {}
196
+ U['f'] = f
197
+ U['i'] = ub(f, f, 4)
198
+ U['Delta'] = ub(U['i'], U['i'], 2)
199
+ U['y1'] = ub(f, U['i'], 4)
200
+ U['y2'] = ub(U['i'], U['y1'], 2)
201
+ U['y3'] = ub(U['i'], U['y2'], 2)
202
+ U['A'] = ub(f, f, 6)
203
+ U['B'] = ub(U['i'], U['i'], 4)
204
+ U['C'] = ub(U['i'], U['Delta'], 4)
205
+ U['D'] = ub(U['y3'], U['y1'], 2)
206
+ return U
207
+
208
+
209
+ def clebsch_to_igusa(A, B, C, D):
210
+ r"""
211
+ Convert Clebsch invariants `A, B, C, D` to Igusa invariants `I_2, I_4, I_6, I_{10}`.
212
+
213
+ EXAMPLES::
214
+
215
+ sage: from sage.schemes.hyperelliptic_curves.invariants import clebsch_to_igusa, igusa_to_clebsch
216
+ sage: clebsch_to_igusa(2, 3, 4, 5)
217
+ (-240, 17370, 231120, -103098906)
218
+ sage: igusa_to_clebsch(*clebsch_to_igusa(2, 3, 4, 5))
219
+ (2, 3, 4, 5)
220
+
221
+ sage: Cs = tuple(map(GF(31), (2, 3, 4, 5))); Cs
222
+ (2, 3, 4, 5)
223
+ sage: clebsch_to_igusa(*Cs)
224
+ (8, 10, 15, 26)
225
+ sage: igusa_to_clebsch(*clebsch_to_igusa(*Cs))
226
+ (2, 3, 4, 5)
227
+ """
228
+ I2 = -120*A
229
+ I4 = -720*A**2 + 6750*B
230
+ I6 = 8640*A**3 - 108000*A*B + 202500*C
231
+ I10 = -62208*A**5 + 972000*A**3*B + 1620000*A**2*C - 3037500*A*B**2 - 6075000*B*C - 4556250*D
232
+ return (I2, I4, I6, I10)
233
+
234
+
235
+ def igusa_to_clebsch(I2, I4, I6, I10):
236
+ r"""
237
+ Convert Igusa invariants `I_2, I_4, I_6, I_{10}` to Clebsch invariants `A, B, C, D`.
238
+
239
+ EXAMPLES::
240
+
241
+ sage: from sage.schemes.hyperelliptic_curves.invariants import clebsch_to_igusa, igusa_to_clebsch
242
+ sage: igusa_to_clebsch(-2400, 173700, 23112000, -10309890600)
243
+ (20, 342/5, 2512/5, 43381012/1125)
244
+ sage: clebsch_to_igusa(*igusa_to_clebsch(-2400, 173700, 23112000, -10309890600))
245
+ (-2400, 173700, 23112000, -10309890600)
246
+
247
+ sage: Is = tuple(map(GF(31), (-2400, 173700, 23112000, -10309890600))); Is
248
+ (18, 7, 12, 27)
249
+ sage: igusa_to_clebsch(*Is)
250
+ (20, 25, 25, 12)
251
+ sage: clebsch_to_igusa(*igusa_to_clebsch(*Is))
252
+ (18, 7, 12, 27)
253
+ """
254
+ A = -(+ I2) / 120
255
+ B = -(- I2**2 - 20*I4)/135000
256
+ C = -(+ I2**3 + 80*I2*I4 - 600*I6)/121500000
257
+ D = -(+ 9*I2**5 + 700*I2**3*I4 - 3600*I2**2*I6 - 12400*I2*I4**2 + 48000*I4*I6 + 10800000*I10) / 49207500000000
258
+ return (A, B, C, D)
259
+
260
+
261
+ def clebsch_invariants(f):
262
+ r"""
263
+ Given a sextic form `f`, return the Clebsch invariants `(A, B, C, D)` of
264
+ Mestre, p 317, [Mes1991]_.
265
+
266
+ `f` may be homogeneous in two variables or inhomogeneous in one.
267
+
268
+ EXAMPLES::
269
+
270
+ sage: from sage.schemes.hyperelliptic_curves.invariants import clebsch_invariants
271
+ sage: R.<x, y> = QQ[]
272
+ sage: clebsch_invariants(x^6 + y^6)
273
+ (2, 2/3, -2/9, 0)
274
+ sage: R.<x> = QQ[]
275
+ sage: clebsch_invariants(x^6 + x^5 + x^4 + x^2 + 2)
276
+ (62/15, 15434/5625, -236951/140625, 229930748/791015625)
277
+
278
+ sage: magma(x^6 + 1).ClebschInvariants() # optional - magma
279
+ [ 2, 2/3, -2/9, 0 ]
280
+ sage: magma(x^6 + x^5 + x^4 + x^2 + 2).ClebschInvariants() # optional - magma
281
+ [ 62/15, 15434/5625, -236951/140625, 229930748/791015625 ]
282
+ """
283
+ R = f.parent().base_ring()
284
+ if R.characteristic() in [2, 3, 5]:
285
+ raise NotImplementedError("Invariants of binary sextics/genus 2 hyperelliptic "
286
+ "curves not implemented in characteristics 2, 3, and 5")
287
+
288
+ U = ubs(f)
289
+ L = U['A'], U['B'], U['C'], U['D']
290
+ assert all(t.is_constant() for t in L)
291
+ return tuple([ t.constant_coefficient() for t in L ])
292
+
293
+
294
+ def igusa_clebsch_invariants(f):
295
+ r"""
296
+ Given a sextic form `f`, return the Igusa-Clebsch invariants `I_2, I_4,
297
+ I_6, I_{10}` of Igusa and Clebsch [IJ1960]_.
298
+
299
+ `f` may be homogeneous in two variables or inhomogeneous in one.
300
+
301
+ EXAMPLES::
302
+
303
+ sage: from sage.schemes.hyperelliptic_curves.invariants import igusa_clebsch_invariants
304
+ sage: R.<x, y> = QQ[]
305
+ sage: igusa_clebsch_invariants(x^6 + y^6)
306
+ (-240, 1620, -119880, -46656)
307
+ sage: R.<x> = QQ[]
308
+ sage: igusa_clebsch_invariants(x^6 + x^5 + x^4 + x^2 + 2)
309
+ (-496, 6220, -955932, -1111784)
310
+
311
+ sage: magma(x^6 + 1).IgusaClebschInvariants() # optional - magma
312
+ [ -240, 1620, -119880, -46656 ]
313
+ sage: magma(x^6 + x^5 + x^4 + x^2 + 2).IgusaClebschInvariants() # optional - magma
314
+ [ -496, 6220, -955932, -1111784 ]
315
+
316
+ TESTS:
317
+
318
+ Let's check a symbolic example::
319
+
320
+ sage: R.<a, b, c, d, e> = QQ[]
321
+ sage: S.<x> = R[]
322
+ sage: igusa_clebsch_invariants(x^5 + a*x^4 + b*x^3 + c*x^2 + d*x + e)[0]
323
+ 6*b^2 - 16*a*c + 40*d
324
+
325
+ sage: from sage.schemes.hyperelliptic_curves.invariants import absolute_igusa_invariants_wamelen
326
+ sage: absolute_igusa_invariants_wamelen(GF(5)['x'](x^6 - 2*x))
327
+ Traceback (most recent call last):
328
+ ...
329
+ NotImplementedError: Invariants of binary sextics/genus 2 hyperelliptic curves
330
+ not implemented in characteristics 2, 3, and 5
331
+ """
332
+ return clebsch_to_igusa(*clebsch_invariants(f))
333
+
334
+
335
+ def absolute_igusa_invariants_wamelen(f):
336
+ r"""
337
+ Given a sextic form `f`, return the three absolute Igusa invariants used by van Wamelen [Wam1999]_.
338
+
339
+ `f` may be homogeneous in two variables or inhomogeneous in one.
340
+
341
+ REFERENCES:
342
+
343
+ - [Wam1999]_
344
+
345
+ EXAMPLES::
346
+
347
+ sage: from sage.schemes.hyperelliptic_curves.invariants import absolute_igusa_invariants_wamelen
348
+ sage: R.<x> = QQ[]
349
+ sage: absolute_igusa_invariants_wamelen(x^5 - 1)
350
+ (0, 0, 0)
351
+
352
+ The following example can be checked against van Wamelen's paper::
353
+
354
+ sage: h = -x^5 + 3*x^4 + 2*x^3 - 6*x^2 - 3*x + 1
355
+ sage: i1, i2, i3 = absolute_igusa_invariants_wamelen(h)
356
+ sage: list(map(factor, (i1, i2, i3)))
357
+ [2^7 * 3^15, 2^5 * 3^11 * 5, 2^4 * 3^9 * 31]
358
+
359
+ TESTS::
360
+
361
+ sage: absolute_igusa_invariants_wamelen(GF(3)['x'](x^5 - 2*x))
362
+ Traceback (most recent call last):
363
+ ...
364
+ NotImplementedError: Invariants of binary sextics/genus 2 hyperelliptic curves
365
+ not implemented in characteristics 2, 3, and 5
366
+ """
367
+ I2, I4, I6, I10 = igusa_clebsch_invariants(f)
368
+ i1 = I2**5/I10
369
+ i2 = I2**3*I4/I10
370
+ i3 = I2**2*I6/I10
371
+ return (i1, i2, i3)
372
+
373
+
374
+ def absolute_igusa_invariants_kohel(f):
375
+ r"""
376
+ Given a sextic form `f`, return the three absolute Igusa invariants used by Kohel [KohECHIDNA]_.
377
+
378
+ `f` may be homogeneous in two variables or inhomogeneous in one.
379
+
380
+ EXAMPLES::
381
+
382
+ sage: from sage.schemes.hyperelliptic_curves.invariants import absolute_igusa_invariants_kohel
383
+ sage: R.<x> = QQ[]
384
+ sage: absolute_igusa_invariants_kohel(x^5 - 1)
385
+ (0, 0, 0)
386
+ sage: absolute_igusa_invariants_kohel(x^5 - x)
387
+ (100, -20000, -2000)
388
+
389
+ The following example can be checked against Kohel's database [KohECHIDNA]_ ::
390
+
391
+ sage: h = -x^5 + 3*x^4 + 2*x^3 - 6*x^2 - 3*x + 1
392
+ sage: i1, i2, i3 = absolute_igusa_invariants_kohel(h)
393
+ sage: list(map(factor, (i1, i2, i3)))
394
+ [2^2 * 3^5 * 5 * 31, 2^5 * 3^11 * 5, 2^4 * 3^9 * 31]
395
+ sage: list(map(factor, (150660, 28343520, 9762768)))
396
+ [2^2 * 3^5 * 5 * 31, 2^5 * 3^11 * 5, 2^4 * 3^9 * 31]
397
+
398
+ TESTS::
399
+
400
+ sage: absolute_igusa_invariants_kohel(GF(2)['x'](x^5 - x))
401
+ Traceback (most recent call last):
402
+ ...
403
+ NotImplementedError: Invariants of binary sextics/genus 2 hyperelliptic curves
404
+ not implemented in characteristics 2, 3, and 5
405
+ """
406
+ I2, I4, I6, I10 = igusa_clebsch_invariants(f)
407
+ i1 = I4*I6/I10
408
+ i2 = I2**3*I4/I10
409
+ i3 = I2**2*I6/I10
410
+ return (i1, i2, i3)