passagemath-schemes 10.6.40__cp314-cp314-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of passagemath-schemes might be problematic. Click here for more details.

Files changed (314) hide show
  1. passagemath_schemes/.dylibs/libflint.22.0.dylib +0 -0
  2. passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
  3. passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
  4. passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
  5. passagemath_schemes/__init__.py +3 -0
  6. passagemath_schemes-10.6.40.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.40.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.40.dist-info/RECORD +314 -0
  9. passagemath_schemes-10.6.40.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.40.dist-info/top_level.txt +3 -0
  11. sage/all__sagemath_schemes.py +23 -0
  12. sage/databases/all__sagemath_schemes.py +7 -0
  13. sage/databases/cremona.py +1723 -0
  14. sage/dynamics/all__sagemath_schemes.py +2 -0
  15. sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
  16. sage/dynamics/arithmetic_dynamics/all.py +14 -0
  17. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
  18. sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
  19. sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
  20. sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
  21. sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
  22. sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
  23. sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-314-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +745 -0
  29. sage/lfunctions/pari.py +818 -0
  30. sage/lfunctions/zero_sums.cpython-314-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5135 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
  34. sage/modular/abvar/abvar_newform.py +244 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +186 -0
  37. sage/modular/abvar/cuspidal_subgroup.py +371 -0
  38. sage/modular/abvar/finite_subgroup.py +896 -0
  39. sage/modular/abvar/homology.py +720 -0
  40. sage/modular/abvar/homspace.py +998 -0
  41. sage/modular/abvar/lseries.py +415 -0
  42. sage/modular/abvar/morphism.py +935 -0
  43. sage/modular/abvar/torsion_point.py +274 -0
  44. sage/modular/abvar/torsion_subgroup.py +740 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-314-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1402 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-314-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +363 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +653 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1469 -0
  57. sage/modular/arithgroup/congroup_generic.py +628 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +267 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-314-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1066 -0
  61. sage/modular/arithgroup/tests.py +418 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3753 -0
  64. sage/modular/btquotients/pautomorphicform.py +2570 -0
  65. sage/modular/buzzard.py +100 -0
  66. sage/modular/congroup.py +29 -0
  67. sage/modular/congroup_element.py +13 -0
  68. sage/modular/cusps.py +1109 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +569 -0
  71. sage/modular/dirichlet.py +3310 -0
  72. sage/modular/drinfeld_modform/all.py +2 -0
  73. sage/modular/drinfeld_modform/element.py +446 -0
  74. sage/modular/drinfeld_modform/ring.py +773 -0
  75. sage/modular/drinfeld_modform/tutorial.py +236 -0
  76. sage/modular/etaproducts.py +1065 -0
  77. sage/modular/hecke/algebra.py +746 -0
  78. sage/modular/hecke/all.py +20 -0
  79. sage/modular/hecke/ambient_module.py +1019 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +325 -0
  82. sage/modular/hecke/hecke_operator.py +780 -0
  83. sage/modular/hecke/homspace.py +206 -0
  84. sage/modular/hecke/module.py +1767 -0
  85. sage/modular/hecke/morphism.py +174 -0
  86. sage/modular/hecke/submodule.py +989 -0
  87. sage/modular/hypergeometric_misc.cpython-314-darwin.so +0 -0
  88. sage/modular/hypergeometric_misc.pxd +4 -0
  89. sage/modular/hypergeometric_misc.pyx +166 -0
  90. sage/modular/hypergeometric_motive.py +2017 -0
  91. sage/modular/local_comp/all.py +2 -0
  92. sage/modular/local_comp/liftings.py +292 -0
  93. sage/modular/local_comp/local_comp.py +1071 -0
  94. sage/modular/local_comp/smoothchar.py +1825 -0
  95. sage/modular/local_comp/type_space.py +748 -0
  96. sage/modular/modform/all.py +30 -0
  97. sage/modular/modform/ambient.py +815 -0
  98. sage/modular/modform/ambient_R.py +177 -0
  99. sage/modular/modform/ambient_eps.py +306 -0
  100. sage/modular/modform/ambient_g0.py +124 -0
  101. sage/modular/modform/ambient_g1.py +204 -0
  102. sage/modular/modform/constructor.py +545 -0
  103. sage/modular/modform/cuspidal_submodule.py +708 -0
  104. sage/modular/modform/defaults.py +14 -0
  105. sage/modular/modform/eis_series.py +505 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4131 -0
  108. sage/modular/modform/find_generators.py +59 -0
  109. sage/modular/modform/half_integral.py +154 -0
  110. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  111. sage/modular/modform/j_invariant.py +47 -0
  112. sage/modular/modform/l_series_gross_zagier.py +133 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314-darwin.so +0 -0
  114. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  115. sage/modular/modform/notes.py +45 -0
  116. sage/modular/modform/numerical.py +514 -0
  117. sage/modular/modform/periods.py +14 -0
  118. sage/modular/modform/ring.py +1257 -0
  119. sage/modular/modform/space.py +1860 -0
  120. sage/modular/modform/submodule.py +118 -0
  121. sage/modular/modform/tests.py +64 -0
  122. sage/modular/modform/theta.py +110 -0
  123. sage/modular/modform/vm_basis.py +381 -0
  124. sage/modular/modform/weight1.py +220 -0
  125. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  126. sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
  127. sage/modular/modform_hecketriangle/all.py +30 -0
  128. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  129. sage/modular/modform_hecketriangle/constructor.py +416 -0
  130. sage/modular/modform_hecketriangle/element.py +351 -0
  131. sage/modular/modform_hecketriangle/functors.py +752 -0
  132. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  133. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
  135. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
  136. sage/modular/modform_hecketriangle/readme.py +1214 -0
  137. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  138. sage/modular/modform_hecketriangle/space.py +1037 -0
  139. sage/modular/modform_hecketriangle/subspace.py +423 -0
  140. sage/modular/modsym/all.py +17 -0
  141. sage/modular/modsym/ambient.py +3846 -0
  142. sage/modular/modsym/boundary.py +1420 -0
  143. sage/modular/modsym/element.py +336 -0
  144. sage/modular/modsym/g1list.py +178 -0
  145. sage/modular/modsym/ghlist.py +182 -0
  146. sage/modular/modsym/hecke_operator.py +73 -0
  147. sage/modular/modsym/manin_symbol.cpython-314-darwin.so +0 -0
  148. sage/modular/modsym/manin_symbol.pxd +5 -0
  149. sage/modular/modsym/manin_symbol.pyx +497 -0
  150. sage/modular/modsym/manin_symbol_list.py +1295 -0
  151. sage/modular/modsym/modsym.py +400 -0
  152. sage/modular/modsym/modular_symbols.py +384 -0
  153. sage/modular/modsym/p1list.cpython-314-darwin.so +0 -0
  154. sage/modular/modsym/p1list.pxd +29 -0
  155. sage/modular/modsym/p1list.pyx +1372 -0
  156. sage/modular/modsym/p1list_nf.py +1241 -0
  157. sage/modular/modsym/relation_matrix.py +591 -0
  158. sage/modular/modsym/relation_matrix_pyx.cpython-314-darwin.so +0 -0
  159. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  160. sage/modular/modsym/space.py +2468 -0
  161. sage/modular/modsym/subspace.py +455 -0
  162. sage/modular/modsym/tests.py +375 -0
  163. sage/modular/multiple_zeta.py +2632 -0
  164. sage/modular/multiple_zeta_F_algebra.py +786 -0
  165. sage/modular/overconvergent/all.py +6 -0
  166. sage/modular/overconvergent/genus0.py +1878 -0
  167. sage/modular/overconvergent/hecke_series.py +1187 -0
  168. sage/modular/overconvergent/weightspace.py +778 -0
  169. sage/modular/pollack_stevens/all.py +4 -0
  170. sage/modular/pollack_stevens/distributions.py +874 -0
  171. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  172. sage/modular/pollack_stevens/manin_map.py +859 -0
  173. sage/modular/pollack_stevens/modsym.py +1593 -0
  174. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  175. sage/modular/pollack_stevens/sigma0.py +534 -0
  176. sage/modular/pollack_stevens/space.py +1076 -0
  177. sage/modular/quasimodform/all.py +3 -0
  178. sage/modular/quasimodform/element.py +845 -0
  179. sage/modular/quasimodform/ring.py +828 -0
  180. sage/modular/quatalg/all.py +3 -0
  181. sage/modular/quatalg/brandt.py +1642 -0
  182. sage/modular/ssmod/all.py +8 -0
  183. sage/modular/ssmod/ssmod.py +827 -0
  184. sage/rings/all__sagemath_schemes.py +1 -0
  185. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  186. sage/rings/polynomial/binary_form_reduce.py +585 -0
  187. sage/schemes/all.py +41 -0
  188. sage/schemes/berkovich/all.py +6 -0
  189. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  190. sage/schemes/berkovich/berkovich_space.py +748 -0
  191. sage/schemes/curves/affine_curve.py +2928 -0
  192. sage/schemes/curves/all.py +33 -0
  193. sage/schemes/curves/closed_point.py +434 -0
  194. sage/schemes/curves/constructor.py +381 -0
  195. sage/schemes/curves/curve.py +542 -0
  196. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  197. sage/schemes/curves/point.py +463 -0
  198. sage/schemes/curves/projective_curve.py +3026 -0
  199. sage/schemes/curves/zariski_vankampen.py +1932 -0
  200. sage/schemes/cyclic_covers/all.py +2 -0
  201. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  202. sage/schemes/cyclic_covers/constructor.py +137 -0
  203. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  204. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  205. sage/schemes/elliptic_curves/BSD.py +1036 -0
  206. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  207. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  208. sage/schemes/elliptic_curves/all.py +49 -0
  209. sage/schemes/elliptic_curves/cardinality.py +609 -0
  210. sage/schemes/elliptic_curves/cm.py +1102 -0
  211. sage/schemes/elliptic_curves/constructor.py +1552 -0
  212. sage/schemes/elliptic_curves/ec_database.py +175 -0
  213. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  214. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  215. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  216. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  217. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  218. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  219. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  220. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  221. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  222. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  223. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  224. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  225. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  226. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  227. sage/schemes/elliptic_curves/formal_group.py +760 -0
  228. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  229. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  230. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  231. sage/schemes/elliptic_curves/heegner.py +7335 -0
  232. sage/schemes/elliptic_curves/height.py +2109 -0
  233. sage/schemes/elliptic_curves/hom.py +1406 -0
  234. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  235. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  236. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  237. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  238. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  239. sage/schemes/elliptic_curves/homset.py +271 -0
  240. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  241. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  242. sage/schemes/elliptic_curves/jacobian.py +237 -0
  243. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  244. sage/schemes/elliptic_curves/kraus.py +1014 -0
  245. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  246. sage/schemes/elliptic_curves/mod5family.py +105 -0
  247. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  248. sage/schemes/elliptic_curves/mod_sym_num.cpython-314-darwin.so +0 -0
  249. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  250. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  251. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  252. sage/schemes/elliptic_curves/padics.py +1816 -0
  253. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  254. sage/schemes/elliptic_curves/period_lattice_region.cpython-314-darwin.so +0 -0
  255. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  256. sage/schemes/elliptic_curves/saturation.py +715 -0
  257. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  258. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  259. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  260. sage/schemes/hyperelliptic_curves/all.py +6 -0
  261. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  264. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  265. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  266. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  267. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  270. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  271. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  272. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  273. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  274. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  275. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  276. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  277. sage/schemes/jacobians/all.py +2 -0
  278. sage/schemes/overview.py +161 -0
  279. sage/schemes/plane_conics/all.py +22 -0
  280. sage/schemes/plane_conics/con_field.py +1296 -0
  281. sage/schemes/plane_conics/con_finite_field.py +158 -0
  282. sage/schemes/plane_conics/con_number_field.py +456 -0
  283. sage/schemes/plane_conics/con_rational_field.py +406 -0
  284. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  285. sage/schemes/plane_conics/constructor.py +249 -0
  286. sage/schemes/plane_quartics/all.py +2 -0
  287. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  288. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  289. sage/schemes/riemann_surfaces/all.py +1 -0
  290. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  291. sage_wheels/share/cremona/cremona_mini.db +0 -0
  292. sage_wheels/share/ellcurves/rank0 +30427 -0
  293. sage_wheels/share/ellcurves/rank1 +31871 -0
  294. sage_wheels/share/ellcurves/rank10 +6 -0
  295. sage_wheels/share/ellcurves/rank11 +6 -0
  296. sage_wheels/share/ellcurves/rank12 +1 -0
  297. sage_wheels/share/ellcurves/rank14 +1 -0
  298. sage_wheels/share/ellcurves/rank15 +1 -0
  299. sage_wheels/share/ellcurves/rank17 +1 -0
  300. sage_wheels/share/ellcurves/rank19 +1 -0
  301. sage_wheels/share/ellcurves/rank2 +2388 -0
  302. sage_wheels/share/ellcurves/rank20 +1 -0
  303. sage_wheels/share/ellcurves/rank21 +1 -0
  304. sage_wheels/share/ellcurves/rank22 +1 -0
  305. sage_wheels/share/ellcurves/rank23 +1 -0
  306. sage_wheels/share/ellcurves/rank24 +1 -0
  307. sage_wheels/share/ellcurves/rank28 +1 -0
  308. sage_wheels/share/ellcurves/rank3 +836 -0
  309. sage_wheels/share/ellcurves/rank4 +10 -0
  310. sage_wheels/share/ellcurves/rank5 +5 -0
  311. sage_wheels/share/ellcurves/rank6 +5 -0
  312. sage_wheels/share/ellcurves/rank7 +5 -0
  313. sage_wheels/share/ellcurves/rank8 +6 -0
  314. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,33 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Plane curves
4
+ """
5
+
6
+ # *****************************************************************************
7
+ #
8
+ # Sage: Open Source Mathematical Software
9
+ #
10
+ # Copyright (C) 2005 William Stein <was@math.harvard.edu>
11
+ #
12
+ # Distributed under the terms of the GNU General Public License (GPL)
13
+ #
14
+ # This code is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ # General Public License for more details.
18
+ #
19
+ # The full text of the GPL is available at:
20
+ #
21
+ # https://www.gnu.org/licenses/
22
+ # *****************************************************************************
23
+
24
+ from sage.schemes.curves.constructor import Curve
25
+ from sage.schemes.curves.projective_curve import Hasse_bounds
26
+
27
+ from sage.misc.lazy_import import lazy_import
28
+
29
+ lazy_import('sage.schemes.curves.plane_curve_arrangement', 'PlaneCurveArrangements')
30
+
31
+ lazy_import('sage.schemes.curves.plane_curve_arrangement', 'AffinePlaneCurveArrangements')
32
+
33
+ lazy_import('sage.schemes.curves.plane_curve_arrangement', 'ProjectivePlaneCurveArrangements')
@@ -0,0 +1,434 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ Closed points of integral curves
4
+
5
+ A rational point of a curve in Sage is represented by its coordinates. If the
6
+ curve is defined over finite field and integral, that is reduced and
7
+ irreducible, then it is empowered by the global function field machinery of
8
+ Sage. Thus closed points of the curve are computable, as represented by maximal
9
+ ideals of the coordinate ring of the ambient space.
10
+
11
+ EXAMPLES::
12
+
13
+ sage: F.<a> = GF(2)
14
+ sage: P.<x,y> = AffineSpace(F, 2)
15
+ sage: C = Curve(y^2 + y - x^3)
16
+ sage: C.closed_points()
17
+ [Point (x, y), Point (x, y + 1)]
18
+ sage: C.closed_points(2)
19
+ [Point (y^2 + y + 1, x + 1),
20
+ Point (y^2 + y + 1, x + y),
21
+ Point (y^2 + y + 1, x + y + 1)]
22
+ sage: C.closed_points(3)
23
+ [Point (x^2 + x + y, x*y + 1, y^2 + x + 1),
24
+ Point (x^2 + x + y + 1, x*y + x + 1, y^2 + x)]
25
+
26
+ Closed points of projective curves are represented by homogeneous maximal
27
+ ideals::
28
+
29
+ sage: F.<a> = GF(2)
30
+ sage: P.<x,y,z> = ProjectiveSpace(F, 2)
31
+ sage: C = Curve(x^3*y + y^3*z + x*z^3)
32
+ sage: C.closed_points()
33
+ [Point (x, z), Point (x, y), Point (y, z)]
34
+ sage: C.closed_points(2)
35
+ [Point (y^2 + y*z + z^2, x + y + z)]
36
+ sage: C.closed_points(3)
37
+ [Point (y^3 + y^2*z + z^3, x + y),
38
+ Point (y^3 + y*z^2 + z^3, x + z),
39
+ Point (x^2 + x*z + y*z + z^2, x*y + x*z + z^2, y^2 + x*z),
40
+ Point (x^2 + y*z, x*y + x*z + z^2, y^2 + x*z + y*z),
41
+ Point (x^3 + x*z^2 + z^3, y + z),
42
+ Point (x^2 + y*z + z^2, x*y + x*z + y*z, y^2 + x*z + y*z + z^2),
43
+ Point (x^2 + y*z + z^2, x*y + z^2, y^2 + x*z + y*z)]
44
+
45
+ Rational points are easily converted to closed points and vice versa if the
46
+ closed point is of degree one::
47
+
48
+ sage: F.<a> = GF(2)
49
+ sage: P.<x,y,z> = ProjectiveSpace(F, 2)
50
+ sage: C = Curve(x^3*y + y^3*z + x*z^3)
51
+ sage: p1, p2, p3 = C.closed_points()
52
+ sage: p1.rational_point()
53
+ (0 : 1 : 0)
54
+ sage: p2.rational_point()
55
+ (0 : 0 : 1)
56
+ sage: p3.rational_point()
57
+ (1 : 0 : 0)
58
+ sage: _.closed_point()
59
+ Point (y, z)
60
+ sage: _ == p3
61
+ True
62
+
63
+ AUTHORS:
64
+
65
+ - Kwankyu Lee (2019-03): initial version
66
+ """
67
+
68
+ # *****************************************************************************
69
+ # Copyright (C) 2019 Kwankyu Lee <kwankyu@gmail.com>
70
+ #
71
+ # Distributed under the terms of the GNU General Public License (GPL)
72
+ # as published by the Free Software Foundation; either version 2 of
73
+ # the License, or (at your option) any later version.
74
+ # https://www.gnu.org/licenses/
75
+ # *****************************************************************************
76
+
77
+ from sage.structure.richcmp import richcmp
78
+ from sage.schemes.generic.point import SchemeTopologicalPoint_prime_ideal
79
+
80
+
81
+ class CurveClosedPoint(SchemeTopologicalPoint_prime_ideal):
82
+ """
83
+ Base class of closed points of curves.
84
+ """
85
+ pass
86
+
87
+
88
+ class IntegralCurveClosedPoint(CurveClosedPoint):
89
+ """
90
+ Closed points of integral curves.
91
+
92
+ INPUT:
93
+
94
+ - ``curve`` -- the curve to which the closed point belongs
95
+
96
+ - ``prime_ideal`` -- a prime ideal
97
+
98
+ - ``degree`` -- degree of the closed point
99
+
100
+ EXAMPLES::
101
+
102
+ sage: # needs sage.rings.finite_rings
103
+ sage: F.<a> = GF(4)
104
+ sage: P.<x,y> = AffineSpace(F, 2)
105
+ sage: C = Curve(y^2 + y - x^3)
106
+ sage: C.closed_points()
107
+ [Point (x, y),
108
+ Point (x, y + 1),
109
+ Point (x + a, y + a),
110
+ Point (x + a, y + (a + 1)),
111
+ Point (x + (a + 1), y + a),
112
+ Point (x + (a + 1), y + (a + 1)),
113
+ Point (x + 1, y + a),
114
+ Point (x + 1, y + (a + 1))]
115
+ """
116
+ def __init__(self, curve, prime_ideal, degree):
117
+ """
118
+ Initialize.
119
+
120
+ TESTS::
121
+
122
+ sage: # needs sage.rings.finite_rings
123
+ sage: F.<a> = GF(4)
124
+ sage: P.<x,y> = AffineSpace(F, 2)
125
+ sage: C = Curve(y^2 + y - x^3)
126
+ sage: p = C([0,0]); p
127
+ (0, 0)
128
+ sage: loads(dumps(p)) == p
129
+ True
130
+ """
131
+ super().__init__(curve.ambient_space(), prime_ideal)
132
+
133
+ self._curve = curve
134
+ self._degree = degree
135
+
136
+ def __hash__(self):
137
+ """
138
+ Return the hash of ``self``.
139
+
140
+ EXAMPLES::
141
+
142
+ sage: # needs sage.rings.finite_rings
143
+ sage: F.<a> = GF(4)
144
+ sage: P.<x,y> = AffineSpace(F, 2)
145
+ sage: C = Curve(y^2 + y - x^3)
146
+ sage: pts = C.closed_points()
147
+ sage: p = pts[0]
148
+ sage: {p: 1}
149
+ {Point (x, y): 1}
150
+ """
151
+ return hash((self.parent(), self.prime_ideal()))
152
+
153
+ def _richcmp_(self, other, op):
154
+ """
155
+ Compare ``self`` and ``other`` with respect to the operator.
156
+
157
+ INPUT:
158
+
159
+ - ``other`` -- a closed point
160
+
161
+ - ``op`` -- a comparison operator
162
+
163
+ EXAMPLES::
164
+
165
+ sage: # needs sage.rings.finite_rings
166
+ sage: F.<a> = GF(4)
167
+ sage: P.<x,y> = AffineSpace(F, 2)
168
+ sage: C = Curve(y^2 + y - x^3)
169
+ sage: pts = C.closed_points()
170
+ sage: pts[0] == pts[1]
171
+ False
172
+ """
173
+ return richcmp((self._curve, self.prime_ideal()), (other._curve, other.prime_ideal()), op)
174
+
175
+ def _repr_(self):
176
+ """
177
+ Return the string representation of the closed point.
178
+
179
+ EXAMPLES::
180
+
181
+ sage: # needs sage.rings.finite_rings
182
+ sage: F.<a> = GF(4)
183
+ sage: P.<x,y> = AffineSpace(F, 2)
184
+ sage: C = Curve(y^2 + y - x^3)
185
+ sage: pts = C.closed_points()
186
+ sage: pts[0]
187
+ Point (x, y)
188
+ """
189
+ return "Point ({})".format(', '.join(repr(g) for g in self.prime_ideal().gens()))
190
+
191
+ def curve(self):
192
+ """
193
+ Return the curve to which this point belongs.
194
+
195
+ EXAMPLES::
196
+
197
+ sage: # needs sage.rings.finite_rings
198
+ sage: F.<a> = GF(4)
199
+ sage: P.<x,y> = AffineSpace(F, 2)
200
+ sage: C = Curve(y^2 + y - x^3)
201
+ sage: pts = C.closed_points()
202
+ sage: p = pts[0]
203
+ sage: p.curve()
204
+ Affine Plane Curve over Finite Field in a of size 2^2 defined by x^3 + y^2 + y
205
+ """
206
+ return self._curve
207
+
208
+ def degree(self):
209
+ """
210
+ Return the degree of the point.
211
+
212
+ EXAMPLES::
213
+
214
+ sage: # needs sage.rings.finite_rings
215
+ sage: F.<a> = GF(4)
216
+ sage: P.<x,y> = AffineSpace(F, 2)
217
+ sage: C = Curve(y^2 + y - x^3)
218
+ sage: pts = C.closed_points()
219
+ sage: p = pts[0]
220
+ sage: p.degree()
221
+ 1
222
+ """
223
+ return self._degree
224
+
225
+ def places(self):
226
+ """
227
+ Return all places on this closed point.
228
+
229
+ EXAMPLES::
230
+
231
+ sage: # needs sage.rings.finite_rings
232
+ sage: F.<a> = GF(4)
233
+ sage: P.<x,y> = AffineSpace(F, 2)
234
+ sage: C = Curve(y^2 + y - x^3)
235
+ sage: pts = C.closed_points()
236
+ sage: p = pts[0]
237
+ sage: p.places()
238
+ [Place (x, y)]
239
+ """
240
+ return self._curve.places_on(self)
241
+
242
+ def place(self):
243
+ """
244
+ Return a place on this closed point.
245
+
246
+ If there are more than one, arbitrary one is chosen.
247
+
248
+ EXAMPLES::
249
+
250
+ sage: # needs sage.rings.finite_rings
251
+ sage: F.<a> = GF(4)
252
+ sage: P.<x,y> = AffineSpace(F, 2)
253
+ sage: C = Curve(y^2 + y - x^3)
254
+ sage: pts = C.closed_points()
255
+ sage: p = pts[0]
256
+ sage: p.place()
257
+ Place (x, y)
258
+ """
259
+ return self._curve.places_on(self)[0]
260
+
261
+
262
+ class IntegralAffineCurveClosedPoint(IntegralCurveClosedPoint):
263
+ """
264
+ Closed points of affine curves.
265
+ """
266
+ def rational_point(self):
267
+ """
268
+ Return the rational point if this closed point is of degree `1`.
269
+
270
+ EXAMPLES::
271
+
272
+ sage: # needs sage.rings.finite_rings
273
+ sage: A.<x,y> = AffineSpace(GF(3^2), 2)
274
+ sage: C = Curve(y^2 - x^5 - x^4 - 2*x^3 - 2*x - 2)
275
+ sage: C.closed_points()
276
+ [Point (x, y + (z2 + 1)),
277
+ Point (x, y + (-z2 - 1)),
278
+ Point (x + (z2 + 1), y + (z2 - 1)),
279
+ Point (x + (z2 + 1), y + (-z2 + 1)),
280
+ Point (x - 1, y + (z2 + 1)),
281
+ Point (x - 1, y + (-z2 - 1)),
282
+ Point (x + (-z2 - 1), y + z2),
283
+ Point (x + (-z2 - 1), y + (-z2)),
284
+ Point (x + 1, y + 1),
285
+ Point (x + 1, y - 1)]
286
+ sage: [p.rational_point() for p in _]
287
+ [(0, 2*z2 + 2),
288
+ (0, z2 + 1),
289
+ (2*z2 + 2, 2*z2 + 1),
290
+ (2*z2 + 2, z2 + 2),
291
+ (1, 2*z2 + 2),
292
+ (1, z2 + 1),
293
+ (z2 + 1, 2*z2),
294
+ (z2 + 1, z2),
295
+ (2, 2),
296
+ (2, 1)]
297
+ sage: set(_) == set(C.rational_points())
298
+ True
299
+ """
300
+ if self.degree() != 1:
301
+ raise ValueError("not a rational point")
302
+
303
+ G = self.prime_ideal().groebner_basis()
304
+ C = self._curve
305
+ return C([g.reduce(G) for g in C.ambient_space().gens()])
306
+
307
+ def projective(self, i=0):
308
+ """
309
+ Return the point in the projective closure of the curve, of which this
310
+ curve is the ``i``-th affine patch.
311
+
312
+ INPUT:
313
+
314
+ - ``i`` -- integer
315
+
316
+ EXAMPLES::
317
+
318
+ sage: F.<a> = GF(2)
319
+ sage: A.<x,y> = AffineSpace(F, 2)
320
+ sage: C = Curve(y^2 + y - x^3, A)
321
+ sage: p1, p2 = C.closed_points()
322
+ sage: p1
323
+ Point (x, y)
324
+ sage: p2
325
+ Point (x, y + 1)
326
+ sage: p1.projective()
327
+ Point (x1, x2)
328
+ sage: p2.projective(0)
329
+ Point (x1, x0 + x2)
330
+ sage: p2.projective(1)
331
+ Point (x0, x1 + x2)
332
+ sage: p2.projective(2)
333
+ Point (x0, x1 + x2)
334
+ """
335
+ C = self.curve()
336
+ A = C.ambient_space()
337
+ ideal = self.prime_ideal()
338
+
339
+ phi = A.projective_embedding(i)
340
+
341
+ gs = list(phi.codomain().gens())
342
+ xi = gs.pop(i)
343
+
344
+ # gens of ideal is a groebner basis in degrevlex order
345
+ S = phi.codomain().coordinate_ring()
346
+ prime = S.ideal(ideal.subs(dict(zip(A.gens(), gs))).homogenize(xi))
347
+
348
+ Cp = C.projective_closure(i)
349
+ return Cp._closed_point(Cp, prime, self.degree())
350
+
351
+
352
+ class IntegralProjectiveCurveClosedPoint(IntegralCurveClosedPoint):
353
+ """
354
+ Closed points of projective plane curves.
355
+ """
356
+ def rational_point(self):
357
+ """
358
+ Return the rational point if this closed point is of degree `1`.
359
+
360
+ EXAMPLES::
361
+
362
+ sage: # needs sage.rings.finite_rings
363
+ sage: F.<a> = GF(4)
364
+ sage: P.<x,y,z> = ProjectiveSpace(F, 2)
365
+ sage: C = Curve(x^3*y + y^3*z + x*z^3)
366
+ sage: C.closed_points()
367
+ [Point (x, z),
368
+ Point (x, y),
369
+ Point (y, z),
370
+ Point (x + a*z, y + (a + 1)*z),
371
+ Point (x + (a + 1)*z, y + a*z)]
372
+ sage: [p.rational_point() for p in _]
373
+ [(0 : 1 : 0), (0 : 0 : 1), (1 : 0 : 0), (a : a + 1 : 1), (a + 1 : a : 1)]
374
+ sage: set(_) == set(C.rational_points())
375
+ True
376
+ """
377
+ if self.degree() != 1:
378
+ raise ValueError("not a rational point")
379
+
380
+ C = self.curve()
381
+ A = C.ambient_space().coordinate_ring()
382
+ prime_ideal = self.prime_ideal()
383
+ for i in range(A.ngens()):
384
+ G = (prime_ideal + A.ideal([A.gen(i) - 1])).groebner_basis()
385
+ if 1 not in G:
386
+ break
387
+ return C([A.gen(j).reduce(G) for j in range(A.ngens())])
388
+
389
+ def affine(self, i=None):
390
+ """
391
+ Return the point in the ``i``-th affine patch of the curve.
392
+
393
+ INPUT:
394
+
395
+ - ``i`` -- integer; if not specified, it is chosen automatically
396
+
397
+ EXAMPLES::
398
+
399
+ sage: F.<a> = GF(2)
400
+ sage: P.<x,y,z> = ProjectiveSpace(F, 2)
401
+ sage: C = Curve(x^3*y + y^3*z + x*z^3)
402
+ sage: p1, p2, p3 = C.closed_points()
403
+ sage: p1.affine()
404
+ Point (x, z)
405
+ sage: p2.affine()
406
+ Point (x, y)
407
+ sage: p3.affine()
408
+ Point (y, z)
409
+ sage: p3.affine(0)
410
+ Point (y, z)
411
+ sage: p3.affine(1)
412
+ Traceback (most recent call last):
413
+ ...
414
+ ValueError: not in the affine patch
415
+ """
416
+ C = self.curve()
417
+ P = C.ambient_space()
418
+ ideal = self.prime_ideal()
419
+ if i is None:
420
+ for j in range(P.ngens()):
421
+ if P.gen(j) not in ideal:
422
+ i = j
423
+ break
424
+ else:
425
+ if P.gen(i) in ideal:
426
+ raise ValueError("not in the affine patch")
427
+
428
+ A = P.affine_patch(i)
429
+ phi = A.projective_embedding(i, P)
430
+
431
+ prime = A.coordinate_ring().ideal(ideal.subs(dict(zip(P.gens(), phi.defining_polynomials()))))
432
+
433
+ Ca = C.affine_patch(i)
434
+ return Ca._closed_point(Ca, prime, self.degree())