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,397 @@
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
+ Here, we construct a hyperelliptic curve manually::
23
+
24
+ sage: WP.<x,y,z> = WeightedProjectiveSpace([1, 3, 1], GF(103))
25
+ sage: Curve(y^2 - (x^5*z + 17*x^2*z^4 + 92*z^6), WP)
26
+ Weighted Projective Curve over Finite Field of size 103 defined by y^2 - x^5*z - 17*x^2*z^4 + 11*z^6
27
+
28
+ AUTHORS:
29
+
30
+ - William Stein (2005-11-13)
31
+
32
+ - David Kohel (2006-01)
33
+
34
+ - Grayson Jorgenson (2016-06)
35
+ """
36
+ # ********************************************************************
37
+ # Copyright (C) 2005 William Stein <wstein@gmail.com>
38
+ #
39
+ # Distributed under the terms of the GNU General Public License (GPL)
40
+ # as published by the Free Software Foundation; either version 2 of
41
+ # the License, or (at your option) any later version.
42
+ # https://www.gnu.org/licenses/
43
+ # ********************************************************************
44
+
45
+ from sage.categories.fields import Fields
46
+ from sage.categories.number_fields import NumberFields
47
+
48
+ from sage.rings.polynomial.multi_polynomial import MPolynomial
49
+ from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base
50
+ from sage.rings.finite_rings.finite_field_base import FiniteField
51
+ from sage.rings.rational_field import QQ
52
+
53
+ from sage.structure.sequence import Sequence
54
+
55
+ from sage.schemes.generic.ambient_space import AmbientSpace
56
+ from sage.schemes.generic.algebraic_scheme import AlgebraicScheme
57
+ from sage.schemes.affine.affine_space import AffineSpace, AffineSpace_generic
58
+ from sage.schemes.projective.projective_space import ProjectiveSpace, ProjectiveSpace_ring
59
+ from sage.schemes.weighted_projective.weighted_projective_space import WeightedProjectiveSpace_ring
60
+ from sage.schemes.plane_conics.constructor import Conic
61
+
62
+ from .projective_curve import (ProjectiveCurve,
63
+ ProjectivePlaneCurve,
64
+ ProjectiveCurve_field,
65
+ ProjectivePlaneCurve_field,
66
+ ProjectivePlaneCurve_finite_field,
67
+ IntegralProjectiveCurve,
68
+ IntegralProjectiveCurve_finite_field,
69
+ IntegralProjectivePlaneCurve,
70
+ IntegralProjectivePlaneCurve_finite_field)
71
+
72
+ from .affine_curve import (AffineCurve,
73
+ AffinePlaneCurve,
74
+ AffineCurve_field,
75
+ AffinePlaneCurve_field,
76
+ AffinePlaneCurve_finite_field,
77
+ IntegralAffineCurve,
78
+ IntegralAffineCurve_finite_field,
79
+ IntegralAffinePlaneCurve,
80
+ IntegralAffinePlaneCurve_finite_field)
81
+
82
+ from .weighted_projective_curve import WeightedProjectiveCurve
83
+
84
+
85
+ def _is_irreducible_and_reduced(F) -> bool:
86
+ """
87
+ Check if the polynomial F is irreducible and reduced.
88
+
89
+ TESTS::
90
+
91
+ sage: R.<x,y> = QQ[]
92
+ sage: F = x^2 + y^2
93
+ sage: from sage.schemes.curves.constructor import _is_irreducible_and_reduced
94
+ sage: _is_irreducible_and_reduced(F)
95
+ True
96
+ """
97
+ factors = F.factor()
98
+ return len(factors) == 1 and factors[0][1] == 1
99
+
100
+
101
+ def Curve(F, A=None):
102
+ """
103
+ Return the plane or space curve defined by ``F``, where ``F`` can be either
104
+ a multivariate polynomial, a list or tuple of polynomials, or an algebraic
105
+ scheme.
106
+
107
+ If no ambient space is passed in for ``A``, and if ``F`` is not an
108
+ algebraic scheme, a new ambient space is constructed.
109
+
110
+ Also not specifying an ambient space will cause the curve to be defined in
111
+ either affine or projective space based on properties of ``F``. In
112
+ particular, if ``F`` contains a nonhomogeneous polynomial, the curve is
113
+ affine, and if ``F`` consists of homogeneous polynomials, then the curve is
114
+ projective.
115
+
116
+ INPUT:
117
+
118
+ - ``F`` -- a multivariate polynomial, or a list or tuple of polynomials, or an algebraic scheme
119
+
120
+ - ``A`` -- (default: ``None``) an ambient space in which to create the curve
121
+
122
+ EXAMPLES:
123
+
124
+ A projective plane curve::
125
+
126
+ sage: x,y,z = QQ['x,y,z'].gens()
127
+ sage: C = Curve(x^3 + y^3 + z^3); C
128
+ Projective Plane Curve over Rational Field defined by x^3 + y^3 + z^3
129
+ sage: C.genus()
130
+ 1
131
+
132
+ Affine plane curves. ::
133
+
134
+ sage: x,y = GF(7)['x,y'].gens()
135
+ sage: C = Curve(y^2 + x^3 + x^10); C
136
+ Affine Plane Curve over Finite Field of size 7 defined by x^10 + x^3 + y^2
137
+ sage: C.genus()
138
+ 0
139
+ sage: x, y = QQ['x,y'].gens()
140
+ sage: Curve(x^3 + y^3 + 1)
141
+ Affine Plane Curve over Rational Field defined by x^3 + y^3 + 1
142
+
143
+ A projective space curve. ::
144
+
145
+ sage: x,y,z,w = QQ['x,y,z,w'].gens()
146
+ sage: C = Curve([x^3 + y^3 - z^3 - w^3, x^5 - y*z^4]); C
147
+ Projective Curve over Rational Field defined by x^3 + y^3 - z^3 - w^3, x^5 - y*z^4
148
+ sage: C.genus()
149
+ 13
150
+
151
+ An affine space curve. ::
152
+
153
+ sage: x,y,z = QQ['x,y,z'].gens()
154
+ sage: C = Curve([y^2 + x^3 + x^10 + z^7, x^2 + y^2]); C
155
+ Affine Curve over Rational Field defined by x^10 + z^7 + x^3 + y^2, x^2 + y^2
156
+ sage: C.genus()
157
+ 47
158
+
159
+ We can also make non-reduced non-irreducible curves. ::
160
+
161
+ sage: x,y,z = QQ['x,y,z'].gens()
162
+ sage: Curve((x-y)*(x+y))
163
+ Projective Conic Curve over Rational Field defined by x^2 - y^2
164
+ sage: Curve((x-y)^2*(x+y)^2)
165
+ Projective Plane Curve over Rational Field defined by x^4 - 2*x^2*y^2 + y^4
166
+
167
+ A union of curves is a curve. ::
168
+
169
+ sage: x,y,z = QQ['x,y,z'].gens()
170
+ sage: C = Curve(x^3 + y^3 + z^3)
171
+ sage: D = Curve(x^4 + y^4 + z^4)
172
+ sage: C.union(D)
173
+ Projective Plane Curve over Rational Field defined by
174
+ 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
175
+
176
+ The intersection is not a curve, though it is a scheme. ::
177
+
178
+ sage: X = C.intersection(D); X
179
+ Closed subscheme of Projective Space of dimension 2 over Rational Field
180
+ defined by: x^3 + y^3 + z^3,
181
+ x^4 + y^4 + z^4
182
+
183
+ Note that the intersection has dimension 0. ::
184
+
185
+ sage: X.dimension()
186
+ 0
187
+ sage: I = X.defining_ideal(); I
188
+ Ideal (x^3 + y^3 + z^3, x^4 + y^4 + z^4) of
189
+ Multivariate Polynomial Ring in x, y, z over Rational Field
190
+
191
+ If only a polynomial in three variables is given, then it must be
192
+ homogeneous such that a projective curve is constructed. ::
193
+
194
+ sage: x,y,z = QQ['x,y,z'].gens()
195
+ sage: Curve(x^2 + y^2)
196
+ Projective Conic Curve over Rational Field defined by x^2 + y^2
197
+ sage: Curve(x^2 + y^2 + z)
198
+ Traceback (most recent call last):
199
+ ...
200
+ TypeError: x^2 + y^2 + z is not a homogeneous polynomial
201
+
202
+ An ambient space can be specified to construct a space curve in an affine
203
+ or a projective space. ::
204
+
205
+ sage: A.<x,y,z> = AffineSpace(QQ, 3)
206
+ sage: C = Curve([y - x^2, z - x^3], A)
207
+ sage: C
208
+ Affine Curve over Rational Field defined by -x^2 + y, -x^3 + z
209
+ sage: A == C.ambient_space()
210
+ True
211
+
212
+ The defining polynomial must be nonzero unless the ambient space itself is
213
+ of dimension 1. ::
214
+
215
+ sage: P1.<x,y> = ProjectiveSpace(1, GF(5))
216
+ sage: S = P1.coordinate_ring()
217
+ sage: Curve(S(0), P1)
218
+ Projective Line over Finite Field of size 5
219
+ sage: Curve(P1)
220
+ Projective Line over Finite Field of size 5
221
+
222
+ An affine line::
223
+
224
+ sage: A1.<x> = AffineSpace(1, QQ)
225
+ sage: R = A1.coordinate_ring()
226
+ sage: Curve(R(0), A1)
227
+ Affine Line over Rational Field
228
+ sage: Curve(A1)
229
+ Affine Line over Rational Field
230
+
231
+ A projective line::
232
+
233
+ sage: R.<x> = QQ[]
234
+ sage: N.<a> = NumberField(x^2 + 1)
235
+ sage: P1.<x,y> = ProjectiveSpace(N, 1)
236
+ sage: C = Curve(P1)
237
+ sage: C
238
+ Projective Line over Number Field in a with defining polynomial x^2 + 1
239
+ sage: C.geometric_genus()
240
+ 0
241
+ sage: C.arithmetic_genus()
242
+ 0
243
+ """
244
+ if A is None:
245
+ if isinstance(F, AmbientSpace) and F.dimension() == 1:
246
+ return Curve(F.coordinate_ring().zero(), F)
247
+
248
+ if isinstance(F, AlgebraicScheme):
249
+ return Curve(F.defining_polynomials(), F.ambient_space())
250
+
251
+ if isinstance(F, (list, tuple)):
252
+ P = Sequence(F).universe()
253
+ if not isinstance(P, MPolynomialRing_base):
254
+ raise TypeError("universe of F must be a multivariate polynomial ring")
255
+ for f in F:
256
+ if not f.is_homogeneous():
257
+ A = AffineSpace(P.ngens(), P.base_ring(), names=P.variable_names())
258
+ A._coordinate_ring = P
259
+ break
260
+ else:
261
+ A = ProjectiveSpace(P.ngens() - 1, P.base_ring(), names=P.variable_names())
262
+ A._coordinate_ring = P
263
+ elif isinstance(F, MPolynomial): # define a plane curve
264
+ P = F.parent()
265
+ k = F.base_ring()
266
+
267
+ if not k.is_field():
268
+ if k.is_integral_domain(): # upgrade to a field
269
+ P = P.change_ring(k.fraction_field())
270
+ F = P(F)
271
+ k = F.base_ring()
272
+ else:
273
+ raise TypeError("not a multivariate polynomial over a field or an integral domain")
274
+
275
+ if F.parent().ngens() == 2:
276
+ if F == 0:
277
+ raise ValueError("defining polynomial of curve must be nonzero")
278
+ A = AffineSpace(2, P.base_ring(), names=P.variable_names())
279
+ A._coordinate_ring = P
280
+ elif F.parent().ngens() == 3:
281
+ if F == 0:
282
+ raise ValueError("defining polynomial of curve must be nonzero")
283
+
284
+ # special case: construct a conic curve
285
+ if F.total_degree() == 2 and k.is_field():
286
+ return Conic(k, F)
287
+
288
+ A = ProjectiveSpace(2, P.base_ring(), names=P.variable_names())
289
+ A._coordinate_ring = P
290
+ elif F.parent().ngens() == 1:
291
+ if not F.is_zero():
292
+ raise ValueError("defining polynomial of curve must be zero "
293
+ "if the ambient space is of dimension 1")
294
+
295
+ A = AffineSpace(1, P.base_ring(), names=P.variable_names())
296
+ A._coordinate_ring = P
297
+ else:
298
+ raise TypeError("number of variables of F (={}) must be 2 or 3".format(F))
299
+ F = [F]
300
+ else:
301
+ raise TypeError("F (={}) must be a multivariate polynomial".format(F))
302
+ else:
303
+ if not isinstance(A, AmbientSpace):
304
+ raise TypeError("ambient space must be either an affine or projective space")
305
+ if not isinstance(F, (list, tuple)):
306
+ F = [F]
307
+ if not all(f.parent() == A.coordinate_ring() for f in F):
308
+ raise TypeError("need a list of polynomials of the coordinate ring of {}".format(A))
309
+
310
+ n = A.dimension_relative()
311
+ if n < 1:
312
+ raise TypeError("ambient space should be an affine or projective space of positive dimension")
313
+
314
+ k = A.base_ring()
315
+
316
+ if isinstance(A, AffineSpace_generic):
317
+ if n == 1:
318
+ if A.coordinate_ring().ideal(F).is_zero():
319
+ if isinstance(k, FiniteField):
320
+ return IntegralAffineCurve_finite_field(A, F)
321
+ if k in Fields():
322
+ return IntegralAffineCurve(A, F)
323
+ return AffineCurve(A, F)
324
+ raise TypeError(f"{F} does not define a curve in one-dimensional affine space")
325
+ if n != 2:
326
+ if isinstance(k, FiniteField):
327
+ if A.coordinate_ring().ideal(F).is_prime():
328
+ return IntegralAffineCurve_finite_field(A, F)
329
+ if k in Fields():
330
+ if (k == QQ or k in NumberFields()) and A.coordinate_ring().ideal(F).is_prime():
331
+ return IntegralAffineCurve(A, F)
332
+ return AffineCurve_field(A, F)
333
+ return AffineCurve(A, F)
334
+
335
+ if not (len(F) == 1 and F[0] != 0 and F[0].degree() > 0):
336
+ raise TypeError("need a single nonconstant polynomial to define a plane curve")
337
+
338
+ F = F[0]
339
+ if isinstance(k, FiniteField):
340
+ if _is_irreducible_and_reduced(F):
341
+ return IntegralAffinePlaneCurve_finite_field(A, F)
342
+ return AffinePlaneCurve_finite_field(A, F)
343
+ if k in Fields():
344
+ if (k == QQ or k in NumberFields()) and _is_irreducible_and_reduced(F):
345
+ return IntegralAffinePlaneCurve(A, F)
346
+ return AffinePlaneCurve_field(A, F)
347
+ return AffinePlaneCurve(A, F)
348
+
349
+ elif isinstance(A, ProjectiveSpace_ring):
350
+ if n == 1:
351
+ if A.coordinate_ring().ideal(F).is_zero():
352
+ if isinstance(k, FiniteField):
353
+ return IntegralProjectiveCurve_finite_field(A, F)
354
+ if k in Fields():
355
+ return IntegralProjectiveCurve(A, F)
356
+ return ProjectiveCurve(A, F)
357
+ raise TypeError(f"{F} does not define a curve in one-dimensional projective space")
358
+ if n != 2:
359
+ if not all(f.is_homogeneous() for f in F):
360
+ raise TypeError("polynomials defining a curve in a projective space must be homogeneous")
361
+ if isinstance(k, FiniteField):
362
+ if A.coordinate_ring().ideal(F).is_prime():
363
+ return IntegralProjectiveCurve_finite_field(A, F)
364
+ if k in Fields():
365
+ if (k == QQ or k in NumberFields()) and A.coordinate_ring().ideal(F).is_prime():
366
+ return IntegralProjectiveCurve(A, F)
367
+ return ProjectiveCurve_field(A, F)
368
+ return ProjectiveCurve(A, F)
369
+
370
+ # There is no dimension check when initializing a plane curve, so check
371
+ # here that F consists of a single nonconstant polynomial.
372
+ if not (len(F) == 1 and F[0] != 0 and F[0].degree() > 0):
373
+ raise TypeError("need a single nonconstant polynomial to define a plane curve")
374
+
375
+ F = F[0]
376
+ if not F.is_homogeneous():
377
+ raise TypeError("{} is not a homogeneous polynomial".format(F))
378
+
379
+ if isinstance(k, FiniteField):
380
+ if _is_irreducible_and_reduced(F):
381
+ return IntegralProjectivePlaneCurve_finite_field(A, F)
382
+ return ProjectivePlaneCurve_finite_field(A, F)
383
+ if k in Fields():
384
+ if (k == QQ or k in NumberFields()) and _is_irreducible_and_reduced(F):
385
+ return IntegralProjectivePlaneCurve(A, F)
386
+ return ProjectivePlaneCurve_field(A, F)
387
+ return ProjectivePlaneCurve(A, F)
388
+
389
+ elif isinstance(A, WeightedProjectiveSpace_ring):
390
+ # currently, we only support curves in a weighted projective plane
391
+ if n != 2:
392
+ raise NotImplementedError("ambient space has to be a weighted projective plane")
393
+ # currently, we do not perform checks on weighted projective curves
394
+ return WeightedProjectiveCurve(A, F)
395
+
396
+ else:
397
+ raise TypeError('ambient space neither affine nor projective')