passagemath-schemes 10.6.47__cp312-cp312-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. passagemath_schemes/.dylibs/libflint.22.0.dylib +0 -0
  2. passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
  3. passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
  4. passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
  5. passagemath_schemes/__init__.py +3 -0
  6. passagemath_schemes-10.6.47.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.47.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.47.dist-info/RECORD +311 -0
  9. passagemath_schemes-10.6.47.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.47.dist-info/top_level.txt +3 -0
  11. sage/all__sagemath_schemes.py +23 -0
  12. sage/databases/all__sagemath_schemes.py +7 -0
  13. sage/databases/cremona.py +1723 -0
  14. sage/dynamics/all__sagemath_schemes.py +2 -0
  15. sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
  16. sage/dynamics/arithmetic_dynamics/all.py +14 -0
  17. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
  18. sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
  19. sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
  20. sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
  21. sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
  22. sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
  23. sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-312-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +745 -0
  29. sage/lfunctions/pari.py +818 -0
  30. sage/lfunctions/zero_sums.cpython-312-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5135 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
  34. sage/modular/abvar/abvar_newform.py +244 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +186 -0
  37. sage/modular/abvar/cuspidal_subgroup.py +371 -0
  38. sage/modular/abvar/finite_subgroup.py +896 -0
  39. sage/modular/abvar/homology.py +720 -0
  40. sage/modular/abvar/homspace.py +998 -0
  41. sage/modular/abvar/lseries.py +415 -0
  42. sage/modular/abvar/morphism.py +935 -0
  43. sage/modular/abvar/torsion_point.py +274 -0
  44. sage/modular/abvar/torsion_subgroup.py +740 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-312-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1402 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-312-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +363 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +653 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1469 -0
  57. sage/modular/arithgroup/congroup_generic.py +628 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +267 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-312-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1066 -0
  61. sage/modular/arithgroup/tests.py +418 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3753 -0
  64. sage/modular/btquotients/pautomorphicform.py +2570 -0
  65. sage/modular/buzzard.py +100 -0
  66. sage/modular/congroup.py +29 -0
  67. sage/modular/congroup_element.py +13 -0
  68. sage/modular/cusps.py +1109 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +569 -0
  71. sage/modular/dirichlet.py +3310 -0
  72. sage/modular/drinfeld_modform/all.py +2 -0
  73. sage/modular/drinfeld_modform/element.py +446 -0
  74. sage/modular/drinfeld_modform/ring.py +773 -0
  75. sage/modular/drinfeld_modform/tutorial.py +236 -0
  76. sage/modular/etaproducts.py +1065 -0
  77. sage/modular/hecke/algebra.py +746 -0
  78. sage/modular/hecke/all.py +20 -0
  79. sage/modular/hecke/ambient_module.py +1019 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +325 -0
  82. sage/modular/hecke/hecke_operator.py +780 -0
  83. sage/modular/hecke/homspace.py +206 -0
  84. sage/modular/hecke/module.py +1767 -0
  85. sage/modular/hecke/morphism.py +174 -0
  86. sage/modular/hecke/submodule.py +989 -0
  87. sage/modular/hypergeometric_misc.cpython-312-darwin.so +0 -0
  88. sage/modular/hypergeometric_misc.pxd +4 -0
  89. sage/modular/hypergeometric_misc.pyx +166 -0
  90. sage/modular/hypergeometric_motive.py +2017 -0
  91. sage/modular/local_comp/all.py +2 -0
  92. sage/modular/local_comp/liftings.py +292 -0
  93. sage/modular/local_comp/local_comp.py +1071 -0
  94. sage/modular/local_comp/smoothchar.py +1825 -0
  95. sage/modular/local_comp/type_space.py +748 -0
  96. sage/modular/modform/all.py +30 -0
  97. sage/modular/modform/ambient.py +815 -0
  98. sage/modular/modform/ambient_R.py +177 -0
  99. sage/modular/modform/ambient_eps.py +306 -0
  100. sage/modular/modform/ambient_g0.py +124 -0
  101. sage/modular/modform/ambient_g1.py +204 -0
  102. sage/modular/modform/constructor.py +545 -0
  103. sage/modular/modform/cuspidal_submodule.py +708 -0
  104. sage/modular/modform/defaults.py +14 -0
  105. sage/modular/modform/eis_series.py +505 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4131 -0
  108. sage/modular/modform/find_generators.py +59 -0
  109. sage/modular/modform/half_integral.py +154 -0
  110. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  111. sage/modular/modform/j_invariant.py +47 -0
  112. sage/modular/modform/l_series_gross_zagier.py +133 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-312-darwin.so +0 -0
  114. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  115. sage/modular/modform/notes.py +45 -0
  116. sage/modular/modform/numerical.py +514 -0
  117. sage/modular/modform/periods.py +14 -0
  118. sage/modular/modform/ring.py +1257 -0
  119. sage/modular/modform/space.py +1860 -0
  120. sage/modular/modform/submodule.py +118 -0
  121. sage/modular/modform/tests.py +64 -0
  122. sage/modular/modform/theta.py +110 -0
  123. sage/modular/modform/vm_basis.py +381 -0
  124. sage/modular/modform/weight1.py +220 -0
  125. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  126. sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
  127. sage/modular/modform_hecketriangle/all.py +30 -0
  128. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  129. sage/modular/modform_hecketriangle/constructor.py +416 -0
  130. sage/modular/modform_hecketriangle/element.py +351 -0
  131. sage/modular/modform_hecketriangle/functors.py +752 -0
  132. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  133. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
  135. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
  136. sage/modular/modform_hecketriangle/readme.py +1214 -0
  137. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  138. sage/modular/modform_hecketriangle/space.py +1037 -0
  139. sage/modular/modform_hecketriangle/subspace.py +423 -0
  140. sage/modular/modsym/all.py +17 -0
  141. sage/modular/modsym/ambient.py +3846 -0
  142. sage/modular/modsym/boundary.py +1420 -0
  143. sage/modular/modsym/element.py +336 -0
  144. sage/modular/modsym/g1list.py +178 -0
  145. sage/modular/modsym/ghlist.py +182 -0
  146. sage/modular/modsym/hecke_operator.py +73 -0
  147. sage/modular/modsym/manin_symbol.cpython-312-darwin.so +0 -0
  148. sage/modular/modsym/manin_symbol.pxd +5 -0
  149. sage/modular/modsym/manin_symbol.pyx +497 -0
  150. sage/modular/modsym/manin_symbol_list.py +1295 -0
  151. sage/modular/modsym/modsym.py +400 -0
  152. sage/modular/modsym/modular_symbols.py +384 -0
  153. sage/modular/modsym/p1list_nf.py +1241 -0
  154. sage/modular/modsym/relation_matrix.py +591 -0
  155. sage/modular/modsym/relation_matrix_pyx.cpython-312-darwin.so +0 -0
  156. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  157. sage/modular/modsym/space.py +2468 -0
  158. sage/modular/modsym/subspace.py +455 -0
  159. sage/modular/modsym/tests.py +375 -0
  160. sage/modular/multiple_zeta.py +2632 -0
  161. sage/modular/multiple_zeta_F_algebra.py +786 -0
  162. sage/modular/overconvergent/all.py +6 -0
  163. sage/modular/overconvergent/genus0.py +1878 -0
  164. sage/modular/overconvergent/hecke_series.py +1187 -0
  165. sage/modular/overconvergent/weightspace.py +778 -0
  166. sage/modular/pollack_stevens/all.py +4 -0
  167. sage/modular/pollack_stevens/distributions.py +874 -0
  168. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  169. sage/modular/pollack_stevens/manin_map.py +859 -0
  170. sage/modular/pollack_stevens/modsym.py +1593 -0
  171. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  172. sage/modular/pollack_stevens/sigma0.py +534 -0
  173. sage/modular/pollack_stevens/space.py +1076 -0
  174. sage/modular/quasimodform/all.py +3 -0
  175. sage/modular/quasimodform/element.py +845 -0
  176. sage/modular/quasimodform/ring.py +828 -0
  177. sage/modular/quatalg/all.py +3 -0
  178. sage/modular/quatalg/brandt.py +1642 -0
  179. sage/modular/ssmod/all.py +8 -0
  180. sage/modular/ssmod/ssmod.py +827 -0
  181. sage/rings/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  183. sage/rings/polynomial/binary_form_reduce.py +585 -0
  184. sage/schemes/all.py +41 -0
  185. sage/schemes/berkovich/all.py +6 -0
  186. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  187. sage/schemes/berkovich/berkovich_space.py +748 -0
  188. sage/schemes/curves/affine_curve.py +2928 -0
  189. sage/schemes/curves/all.py +33 -0
  190. sage/schemes/curves/closed_point.py +434 -0
  191. sage/schemes/curves/constructor.py +381 -0
  192. sage/schemes/curves/curve.py +542 -0
  193. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  194. sage/schemes/curves/point.py +463 -0
  195. sage/schemes/curves/projective_curve.py +3026 -0
  196. sage/schemes/curves/zariski_vankampen.py +1932 -0
  197. sage/schemes/cyclic_covers/all.py +2 -0
  198. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  199. sage/schemes/cyclic_covers/constructor.py +137 -0
  200. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  201. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  202. sage/schemes/elliptic_curves/BSD.py +1036 -0
  203. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  204. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  205. sage/schemes/elliptic_curves/all.py +49 -0
  206. sage/schemes/elliptic_curves/cardinality.py +609 -0
  207. sage/schemes/elliptic_curves/cm.py +1102 -0
  208. sage/schemes/elliptic_curves/constructor.py +1552 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
  214. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  215. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  216. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  217. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  218. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  219. sage/schemes/elliptic_curves/ell_point.py +4787 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
  221. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  222. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  223. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  224. sage/schemes/elliptic_curves/formal_group.py +760 -0
  225. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  226. sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7335 -0
  229. sage/schemes/elliptic_curves/height.py +2109 -0
  230. sage/schemes/elliptic_curves/hom.py +1406 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  232. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  233. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  234. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  235. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  236. sage/schemes/elliptic_curves/homset.py +271 -0
  237. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  238. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  239. sage/schemes/elliptic_curves/jacobian.py +237 -0
  240. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  241. sage/schemes/elliptic_curves/kraus.py +1014 -0
  242. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  243. sage/schemes/elliptic_curves/mod5family.py +105 -0
  244. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  245. sage/schemes/elliptic_curves/mod_sym_num.cpython-312-darwin.so +0 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  247. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  248. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  249. sage/schemes/elliptic_curves/padics.py +1816 -0
  250. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  251. sage/schemes/elliptic_curves/period_lattice_region.cpython-312-darwin.so +0 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  253. sage/schemes/elliptic_curves/saturation.py +715 -0
  254. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  255. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  256. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  257. sage/schemes/hyperelliptic_curves/all.py +6 -0
  258. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  259. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  264. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  265. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  270. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  271. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  272. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  273. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  274. sage/schemes/jacobians/all.py +2 -0
  275. sage/schemes/overview.py +161 -0
  276. sage/schemes/plane_conics/all.py +22 -0
  277. sage/schemes/plane_conics/con_field.py +1296 -0
  278. sage/schemes/plane_conics/con_finite_field.py +158 -0
  279. sage/schemes/plane_conics/con_number_field.py +456 -0
  280. sage/schemes/plane_conics/con_rational_field.py +406 -0
  281. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  282. sage/schemes/plane_conics/constructor.py +249 -0
  283. sage/schemes/plane_quartics/all.py +2 -0
  284. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  285. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  286. sage/schemes/riemann_surfaces/all.py +1 -0
  287. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  288. sage_wheels/share/cremona/cremona_mini.db +0 -0
  289. sage_wheels/share/ellcurves/rank0 +30427 -0
  290. sage_wheels/share/ellcurves/rank1 +31871 -0
  291. sage_wheels/share/ellcurves/rank10 +6 -0
  292. sage_wheels/share/ellcurves/rank11 +6 -0
  293. sage_wheels/share/ellcurves/rank12 +1 -0
  294. sage_wheels/share/ellcurves/rank14 +1 -0
  295. sage_wheels/share/ellcurves/rank15 +1 -0
  296. sage_wheels/share/ellcurves/rank17 +1 -0
  297. sage_wheels/share/ellcurves/rank19 +1 -0
  298. sage_wheels/share/ellcurves/rank2 +2388 -0
  299. sage_wheels/share/ellcurves/rank20 +1 -0
  300. sage_wheels/share/ellcurves/rank21 +1 -0
  301. sage_wheels/share/ellcurves/rank22 +1 -0
  302. sage_wheels/share/ellcurves/rank23 +1 -0
  303. sage_wheels/share/ellcurves/rank24 +1 -0
  304. sage_wheels/share/ellcurves/rank28 +1 -0
  305. sage_wheels/share/ellcurves/rank3 +836 -0
  306. sage_wheels/share/ellcurves/rank4 +10 -0
  307. sage_wheels/share/ellcurves/rank5 +5 -0
  308. sage_wheels/share/ellcurves/rank6 +5 -0
  309. sage_wheels/share/ellcurves/rank7 +5 -0
  310. sage_wheels/share/ellcurves/rank8 +6 -0
  311. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,381 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.libs.singular
3
+ """
4
+ Curve constructor
5
+
6
+ Curves are constructed through the curve constructor, after an ambient space is
7
+ defined either explicitly or implicitly.
8
+
9
+ EXAMPLES::
10
+
11
+ sage: A.<x,y> = AffineSpace(QQ, 2)
12
+ sage: Curve([y - x^2], A)
13
+ Affine Plane Curve over Rational Field defined by -x^2 + y
14
+
15
+ ::
16
+
17
+ sage: P.<x,y,z> = ProjectiveSpace(GF(5), 2)
18
+ sage: Curve(y^2*z^7 - x^9 - x*z^8)
19
+ Projective Plane Curve over Finite Field of size 5
20
+ defined by -x^9 + y^2*z^7 - x*z^8
21
+
22
+ AUTHORS:
23
+
24
+ - William Stein (2005-11-13)
25
+
26
+ - David Kohel (2006-01)
27
+
28
+ - Grayson Jorgenson (2016-06)
29
+ """
30
+ # ********************************************************************
31
+ # Copyright (C) 2005 William Stein <wstein@gmail.com>
32
+ #
33
+ # Distributed under the terms of the GNU General Public License (GPL)
34
+ # as published by the Free Software Foundation; either version 2 of
35
+ # the License, or (at your option) any later version.
36
+ # https://www.gnu.org/licenses/
37
+ # ********************************************************************
38
+
39
+ from sage.categories.fields import Fields
40
+ from sage.categories.number_fields import NumberFields
41
+
42
+ from sage.rings.polynomial.multi_polynomial import MPolynomial
43
+ from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base
44
+ from sage.rings.finite_rings.finite_field_base import FiniteField
45
+ from sage.rings.rational_field import QQ
46
+
47
+ from sage.structure.all import Sequence
48
+
49
+ from sage.schemes.generic.ambient_space import AmbientSpace
50
+ from sage.schemes.generic.algebraic_scheme import AlgebraicScheme
51
+ from sage.schemes.affine.affine_space import AffineSpace, AffineSpace_generic
52
+ from sage.schemes.projective.projective_space import ProjectiveSpace, ProjectiveSpace_ring
53
+ from sage.schemes.plane_conics.constructor import Conic
54
+
55
+ from .projective_curve import (ProjectiveCurve,
56
+ ProjectivePlaneCurve,
57
+ ProjectiveCurve_field,
58
+ ProjectivePlaneCurve_field,
59
+ ProjectivePlaneCurve_finite_field,
60
+ IntegralProjectiveCurve,
61
+ IntegralProjectiveCurve_finite_field,
62
+ IntegralProjectivePlaneCurve,
63
+ IntegralProjectivePlaneCurve_finite_field)
64
+
65
+ from .affine_curve import (AffineCurve,
66
+ AffinePlaneCurve,
67
+ AffineCurve_field,
68
+ AffinePlaneCurve_field,
69
+ AffinePlaneCurve_finite_field,
70
+ IntegralAffineCurve,
71
+ IntegralAffineCurve_finite_field,
72
+ IntegralAffinePlaneCurve,
73
+ IntegralAffinePlaneCurve_finite_field)
74
+
75
+
76
+ def _is_irreducible_and_reduced(F) -> bool:
77
+ """
78
+ Check if the polynomial F is irreducible and reduced.
79
+
80
+ TESTS::
81
+
82
+ sage: R.<x,y> = QQ[]
83
+ sage: F = x^2 + y^2
84
+ sage: from sage.schemes.curves.constructor import _is_irreducible_and_reduced
85
+ sage: _is_irreducible_and_reduced(F)
86
+ True
87
+ """
88
+ factors = F.factor()
89
+ return len(factors) == 1 and factors[0][1] == 1
90
+
91
+
92
+ def Curve(F, A=None):
93
+ """
94
+ Return the plane or space curve defined by ``F``, where ``F`` can be either
95
+ a multivariate polynomial, a list or tuple of polynomials, or an algebraic
96
+ scheme.
97
+
98
+ If no ambient space is passed in for ``A``, and if ``F`` is not an
99
+ algebraic scheme, a new ambient space is constructed.
100
+
101
+ Also not specifying an ambient space will cause the curve to be defined in
102
+ either affine or projective space based on properties of ``F``. In
103
+ particular, if ``F`` contains a nonhomogeneous polynomial, the curve is
104
+ affine, and if ``F`` consists of homogeneous polynomials, then the curve is
105
+ projective.
106
+
107
+ INPUT:
108
+
109
+ - ``F`` -- a multivariate polynomial, or a list or tuple of polynomials, or an algebraic scheme
110
+
111
+ - ``A`` -- (default: ``None``) an ambient space in which to create the curve
112
+
113
+ EXAMPLES:
114
+
115
+ A projective plane curve::
116
+
117
+ sage: x,y,z = QQ['x,y,z'].gens()
118
+ sage: C = Curve(x^3 + y^3 + z^3); C
119
+ Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
120
+ sage: C.genus()
121
+ 1
122
+
123
+ Affine plane curves. ::
124
+
125
+ sage: x,y = GF(7)['x,y'].gens()
126
+ sage: C = Curve(y^2 + x^3 + x^10); C
127
+ Affine Plane Curve over Finite Field of size 7 defined by x^10 + x^3 + y^2
128
+ sage: C.genus()
129
+ 0
130
+ sage: x, y = QQ['x,y'].gens()
131
+ sage: Curve(x^3 + y^3 + 1)
132
+ Affine Plane Curve over Rational Field defined by x^3 + y^3 + 1
133
+
134
+ A projective space curve. ::
135
+
136
+ sage: x,y,z,w = QQ['x,y,z,w'].gens()
137
+ sage: C = Curve([x^3 + y^3 - z^3 - w^3, x^5 - y*z^4]); C
138
+ Projective Curve over Rational Field defined by x^3 + y^3 - z^3 - w^3, x^5 - y*z^4
139
+ sage: C.genus()
140
+ 13
141
+
142
+ An affine space curve. ::
143
+
144
+ sage: x,y,z = QQ['x,y,z'].gens()
145
+ sage: C = Curve([y^2 + x^3 + x^10 + z^7, x^2 + y^2]); C
146
+ Affine Curve over Rational Field defined by x^10 + z^7 + x^3 + y^2, x^2 + y^2
147
+ sage: C.genus()
148
+ 47
149
+
150
+ We can also make non-reduced non-irreducible curves. ::
151
+
152
+ sage: x,y,z = QQ['x,y,z'].gens()
153
+ sage: Curve((x-y)*(x+y))
154
+ Projective Conic Curve over Rational Field defined by x^2 - y^2
155
+ sage: Curve((x-y)^2*(x+y)^2)
156
+ Projective Plane Curve over Rational Field defined by x^4 - 2*x^2*y^2 + y^4
157
+
158
+ A union of curves is a curve. ::
159
+
160
+ sage: x,y,z = QQ['x,y,z'].gens()
161
+ sage: C = Curve(x^3 + y^3 + z^3)
162
+ sage: D = Curve(x^4 + y^4 + z^4)
163
+ sage: C.union(D)
164
+ Projective Plane Curve over Rational Field defined by
165
+ x^7 + x^4*y^3 + x^3*y^4 + y^7 + x^4*z^3 + y^4*z^3 + x^3*z^4 + y^3*z^4 + z^7
166
+
167
+ The intersection is not a curve, though it is a scheme. ::
168
+
169
+ sage: X = C.intersection(D); X
170
+ Closed subscheme of Projective Space of dimension 2 over Rational Field
171
+ defined by: x^3 + y^3 + z^3,
172
+ x^4 + y^4 + z^4
173
+
174
+ Note that the intersection has dimension 0. ::
175
+
176
+ sage: X.dimension()
177
+ 0
178
+ sage: I = X.defining_ideal(); I
179
+ Ideal (x^3 + y^3 + z^3, x^4 + y^4 + z^4) of
180
+ Multivariate Polynomial Ring in x, y, z over Rational Field
181
+
182
+ If only a polynomial in three variables is given, then it must be
183
+ homogeneous such that a projective curve is constructed. ::
184
+
185
+ sage: x,y,z = QQ['x,y,z'].gens()
186
+ sage: Curve(x^2 + y^2)
187
+ Projective Conic Curve over Rational Field defined by x^2 + y^2
188
+ sage: Curve(x^2 + y^2 + z)
189
+ Traceback (most recent call last):
190
+ ...
191
+ TypeError: x^2 + y^2 + z is not a homogeneous polynomial
192
+
193
+ An ambient space can be specified to construct a space curve in an affine
194
+ or a projective space. ::
195
+
196
+ sage: A.<x,y,z> = AffineSpace(QQ, 3)
197
+ sage: C = Curve([y - x^2, z - x^3], A)
198
+ sage: C
199
+ Affine Curve over Rational Field defined by -x^2 + y, -x^3 + z
200
+ sage: A == C.ambient_space()
201
+ True
202
+
203
+ The defining polynomial must be nonzero unless the ambient space itself is
204
+ of dimension 1. ::
205
+
206
+ sage: P1.<x,y> = ProjectiveSpace(1, GF(5))
207
+ sage: S = P1.coordinate_ring()
208
+ sage: Curve(S(0), P1)
209
+ Projective Line over Finite Field of size 5
210
+ sage: Curve(P1)
211
+ Projective Line over Finite Field of size 5
212
+
213
+ An affine line::
214
+
215
+ sage: A1.<x> = AffineSpace(1, QQ)
216
+ sage: R = A1.coordinate_ring()
217
+ sage: Curve(R(0), A1)
218
+ Affine Line over Rational Field
219
+ sage: Curve(A1)
220
+ Affine Line over Rational Field
221
+
222
+ A projective line::
223
+
224
+ sage: R.<x> = QQ[]
225
+ sage: N.<a> = NumberField(x^2 + 1)
226
+ sage: P1.<x,y> = ProjectiveSpace(N, 1)
227
+ sage: C = Curve(P1)
228
+ sage: C
229
+ Projective Line over Number Field in a with defining polynomial x^2 + 1
230
+ sage: C.geometric_genus()
231
+ 0
232
+ sage: C.arithmetic_genus()
233
+ 0
234
+ """
235
+ if A is None:
236
+ if isinstance(F, AmbientSpace) and F.dimension() == 1:
237
+ return Curve(F.coordinate_ring().zero(), F)
238
+
239
+ if isinstance(F, AlgebraicScheme):
240
+ return Curve(F.defining_polynomials(), F.ambient_space())
241
+
242
+ if isinstance(F, (list, tuple)):
243
+ P = Sequence(F).universe()
244
+ if not isinstance(P, MPolynomialRing_base):
245
+ raise TypeError("universe of F must be a multivariate polynomial ring")
246
+ for f in F:
247
+ if not f.is_homogeneous():
248
+ A = AffineSpace(P.ngens(), P.base_ring(), names=P.variable_names())
249
+ A._coordinate_ring = P
250
+ break
251
+ else:
252
+ A = ProjectiveSpace(P.ngens() - 1, P.base_ring(), names=P.variable_names())
253
+ A._coordinate_ring = P
254
+ elif isinstance(F, MPolynomial): # define a plane curve
255
+ P = F.parent()
256
+ k = F.base_ring()
257
+
258
+ if not k.is_field():
259
+ if k.is_integral_domain(): # upgrade to a field
260
+ P = P.change_ring(k.fraction_field())
261
+ F = P(F)
262
+ k = F.base_ring()
263
+ else:
264
+ raise TypeError("not a multivariate polynomial over a field or an integral domain")
265
+
266
+ if F.parent().ngens() == 2:
267
+ if F == 0:
268
+ raise ValueError("defining polynomial of curve must be nonzero")
269
+ A = AffineSpace(2, P.base_ring(), names=P.variable_names())
270
+ A._coordinate_ring = P
271
+ elif F.parent().ngens() == 3:
272
+ if F == 0:
273
+ raise ValueError("defining polynomial of curve must be nonzero")
274
+
275
+ # special case: construct a conic curve
276
+ if F.total_degree() == 2 and k.is_field():
277
+ return Conic(k, F)
278
+
279
+ A = ProjectiveSpace(2, P.base_ring(), names=P.variable_names())
280
+ A._coordinate_ring = P
281
+ elif F.parent().ngens() == 1:
282
+ if not F.is_zero():
283
+ raise ValueError("defining polynomial of curve must be zero "
284
+ "if the ambient space is of dimension 1")
285
+
286
+ A = AffineSpace(1, P.base_ring(), names=P.variable_names())
287
+ A._coordinate_ring = P
288
+ else:
289
+ raise TypeError("number of variables of F (={}) must be 2 or 3".format(F))
290
+ F = [F]
291
+ else:
292
+ raise TypeError("F (={}) must be a multivariate polynomial".format(F))
293
+ else:
294
+ if not isinstance(A, AmbientSpace):
295
+ raise TypeError("ambient space must be either an affine or projective space")
296
+ if not isinstance(F, (list, tuple)):
297
+ F = [F]
298
+ if not all(f.parent() == A.coordinate_ring() for f in F):
299
+ raise TypeError("need a list of polynomials of the coordinate ring of {}".format(A))
300
+
301
+ n = A.dimension_relative()
302
+ if n < 1:
303
+ raise TypeError("ambient space should be an affine or projective space of positive dimension")
304
+
305
+ k = A.base_ring()
306
+
307
+ if isinstance(A, AffineSpace_generic):
308
+ if n == 1:
309
+ if A.coordinate_ring().ideal(F).is_zero():
310
+ if isinstance(k, FiniteField):
311
+ return IntegralAffineCurve_finite_field(A, F)
312
+ if k in Fields():
313
+ return IntegralAffineCurve(A, F)
314
+ return AffineCurve(A, F)
315
+ raise TypeError(f"{F} does not define a curve in one-dimensional affine space")
316
+ if n != 2:
317
+ if isinstance(k, FiniteField):
318
+ if A.coordinate_ring().ideal(F).is_prime():
319
+ return IntegralAffineCurve_finite_field(A, F)
320
+ if k in Fields():
321
+ if (k == QQ or k in NumberFields()) and A.coordinate_ring().ideal(F).is_prime():
322
+ return IntegralAffineCurve(A, F)
323
+ return AffineCurve_field(A, F)
324
+ return AffineCurve(A, F)
325
+
326
+ if not (len(F) == 1 and F[0] != 0 and F[0].degree() > 0):
327
+ raise TypeError("need a single nonconstant polynomial to define a plane curve")
328
+
329
+ F = F[0]
330
+ if isinstance(k, FiniteField):
331
+ if _is_irreducible_and_reduced(F):
332
+ return IntegralAffinePlaneCurve_finite_field(A, F)
333
+ return AffinePlaneCurve_finite_field(A, F)
334
+ if k in Fields():
335
+ if (k == QQ or k in NumberFields()) and _is_irreducible_and_reduced(F):
336
+ return IntegralAffinePlaneCurve(A, F)
337
+ return AffinePlaneCurve_field(A, F)
338
+ return AffinePlaneCurve(A, F)
339
+
340
+ elif isinstance(A, ProjectiveSpace_ring):
341
+ if n == 1:
342
+ if A.coordinate_ring().ideal(F).is_zero():
343
+ if isinstance(k, FiniteField):
344
+ return IntegralProjectiveCurve_finite_field(A, F)
345
+ if k in Fields():
346
+ return IntegralProjectiveCurve(A, F)
347
+ return ProjectiveCurve(A, F)
348
+ raise TypeError(f"{F} does not define a curve in one-dimensional projective space")
349
+ if n != 2:
350
+ if not all(f.is_homogeneous() for f in F):
351
+ raise TypeError("polynomials defining a curve in a projective space must be homogeneous")
352
+ if isinstance(k, FiniteField):
353
+ if A.coordinate_ring().ideal(F).is_prime():
354
+ return IntegralProjectiveCurve_finite_field(A, F)
355
+ if k in Fields():
356
+ if (k == QQ or k in NumberFields()) and A.coordinate_ring().ideal(F).is_prime():
357
+ return IntegralProjectiveCurve(A, F)
358
+ return ProjectiveCurve_field(A, F)
359
+ return ProjectiveCurve(A, F)
360
+
361
+ # There is no dimension check when initializing a plane curve, so check
362
+ # here that F consists of a single nonconstant polynomial.
363
+ if not (len(F) == 1 and F[0] != 0 and F[0].degree() > 0):
364
+ raise TypeError("need a single nonconstant polynomial to define a plane curve")
365
+
366
+ F = F[0]
367
+ if not F.is_homogeneous():
368
+ raise TypeError("{} is not a homogeneous polynomial".format(F))
369
+
370
+ if isinstance(k, FiniteField):
371
+ if _is_irreducible_and_reduced(F):
372
+ return IntegralProjectivePlaneCurve_finite_field(A, F)
373
+ return ProjectivePlaneCurve_finite_field(A, F)
374
+ if k in Fields():
375
+ if (k == QQ or k in NumberFields()) and _is_irreducible_and_reduced(F):
376
+ return IntegralProjectivePlaneCurve(A, F)
377
+ return ProjectivePlaneCurve_field(A, F)
378
+ return ProjectivePlaneCurve(A, F)
379
+
380
+ else:
381
+ raise TypeError('ambient space neither affine nor projective')