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.
- passagemath_schemes/.dylibs/libflint.22.0.dylib +0 -0
- passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
- passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
- passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
- passagemath_schemes/__init__.py +3 -0
- passagemath_schemes-10.6.40.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.40.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.40.dist-info/RECORD +314 -0
- passagemath_schemes-10.6.40.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.40.dist-info/top_level.txt +3 -0
- sage/all__sagemath_schemes.py +23 -0
- sage/databases/all__sagemath_schemes.py +7 -0
- sage/databases/cremona.py +1723 -0
- sage/dynamics/all__sagemath_schemes.py +2 -0
- sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
- sage/dynamics/arithmetic_dynamics/all.py +14 -0
- sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
- sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
- sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
- sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
- sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
- sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
- sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-314-darwin.so +0 -0
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
- sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
- sage/lfunctions/all.py +18 -0
- sage/lfunctions/dokchitser.py +745 -0
- sage/lfunctions/pari.py +818 -0
- sage/lfunctions/zero_sums.cpython-314-darwin.so +0 -0
- sage/lfunctions/zero_sums.pyx +1847 -0
- sage/modular/abvar/abvar.py +5135 -0
- sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
- sage/modular/abvar/abvar_newform.py +244 -0
- sage/modular/abvar/all.py +8 -0
- sage/modular/abvar/constructor.py +186 -0
- sage/modular/abvar/cuspidal_subgroup.py +371 -0
- sage/modular/abvar/finite_subgroup.py +896 -0
- sage/modular/abvar/homology.py +720 -0
- sage/modular/abvar/homspace.py +998 -0
- sage/modular/abvar/lseries.py +415 -0
- sage/modular/abvar/morphism.py +935 -0
- sage/modular/abvar/torsion_point.py +274 -0
- sage/modular/abvar/torsion_subgroup.py +740 -0
- sage/modular/all.py +43 -0
- sage/modular/arithgroup/all.py +20 -0
- sage/modular/arithgroup/arithgroup_element.cpython-314-darwin.so +0 -0
- sage/modular/arithgroup/arithgroup_element.pyx +474 -0
- sage/modular/arithgroup/arithgroup_generic.py +1402 -0
- sage/modular/arithgroup/arithgroup_perm.py +2692 -0
- sage/modular/arithgroup/congroup.cpython-314-darwin.so +0 -0
- sage/modular/arithgroup/congroup.pyx +334 -0
- sage/modular/arithgroup/congroup_gamma.py +363 -0
- sage/modular/arithgroup/congroup_gamma0.py +692 -0
- sage/modular/arithgroup/congroup_gamma1.py +653 -0
- sage/modular/arithgroup/congroup_gammaH.py +1469 -0
- sage/modular/arithgroup/congroup_generic.py +628 -0
- sage/modular/arithgroup/congroup_sl2z.py +267 -0
- sage/modular/arithgroup/farey_symbol.cpython-314-darwin.so +0 -0
- sage/modular/arithgroup/farey_symbol.pyx +1066 -0
- sage/modular/arithgroup/tests.py +418 -0
- sage/modular/btquotients/all.py +4 -0
- sage/modular/btquotients/btquotient.py +3753 -0
- sage/modular/btquotients/pautomorphicform.py +2570 -0
- sage/modular/buzzard.py +100 -0
- sage/modular/congroup.py +29 -0
- sage/modular/congroup_element.py +13 -0
- sage/modular/cusps.py +1109 -0
- sage/modular/cusps_nf.py +1270 -0
- sage/modular/dims.py +569 -0
- sage/modular/dirichlet.py +3310 -0
- sage/modular/drinfeld_modform/all.py +2 -0
- sage/modular/drinfeld_modform/element.py +446 -0
- sage/modular/drinfeld_modform/ring.py +773 -0
- sage/modular/drinfeld_modform/tutorial.py +236 -0
- sage/modular/etaproducts.py +1065 -0
- sage/modular/hecke/algebra.py +746 -0
- sage/modular/hecke/all.py +20 -0
- sage/modular/hecke/ambient_module.py +1019 -0
- sage/modular/hecke/degenmap.py +119 -0
- sage/modular/hecke/element.py +325 -0
- sage/modular/hecke/hecke_operator.py +780 -0
- sage/modular/hecke/homspace.py +206 -0
- sage/modular/hecke/module.py +1767 -0
- sage/modular/hecke/morphism.py +174 -0
- sage/modular/hecke/submodule.py +989 -0
- sage/modular/hypergeometric_misc.cpython-314-darwin.so +0 -0
- sage/modular/hypergeometric_misc.pxd +4 -0
- sage/modular/hypergeometric_misc.pyx +166 -0
- sage/modular/hypergeometric_motive.py +2017 -0
- sage/modular/local_comp/all.py +2 -0
- sage/modular/local_comp/liftings.py +292 -0
- sage/modular/local_comp/local_comp.py +1071 -0
- sage/modular/local_comp/smoothchar.py +1825 -0
- sage/modular/local_comp/type_space.py +748 -0
- sage/modular/modform/all.py +30 -0
- sage/modular/modform/ambient.py +815 -0
- sage/modular/modform/ambient_R.py +177 -0
- sage/modular/modform/ambient_eps.py +306 -0
- sage/modular/modform/ambient_g0.py +124 -0
- sage/modular/modform/ambient_g1.py +204 -0
- sage/modular/modform/constructor.py +545 -0
- sage/modular/modform/cuspidal_submodule.py +708 -0
- sage/modular/modform/defaults.py +14 -0
- sage/modular/modform/eis_series.py +505 -0
- sage/modular/modform/eisenstein_submodule.py +663 -0
- sage/modular/modform/element.py +4131 -0
- sage/modular/modform/find_generators.py +59 -0
- sage/modular/modform/half_integral.py +154 -0
- sage/modular/modform/hecke_operator_on_qexp.py +247 -0
- sage/modular/modform/j_invariant.py +47 -0
- sage/modular/modform/l_series_gross_zagier.py +133 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314-darwin.so +0 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
- sage/modular/modform/notes.py +45 -0
- sage/modular/modform/numerical.py +514 -0
- sage/modular/modform/periods.py +14 -0
- sage/modular/modform/ring.py +1257 -0
- sage/modular/modform/space.py +1860 -0
- sage/modular/modform/submodule.py +118 -0
- sage/modular/modform/tests.py +64 -0
- sage/modular/modform/theta.py +110 -0
- sage/modular/modform/vm_basis.py +381 -0
- sage/modular/modform/weight1.py +220 -0
- sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
- sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
- sage/modular/modform_hecketriangle/all.py +30 -0
- sage/modular/modform_hecketriangle/analytic_type.py +590 -0
- sage/modular/modform_hecketriangle/constructor.py +416 -0
- sage/modular/modform_hecketriangle/element.py +351 -0
- sage/modular/modform_hecketriangle/functors.py +752 -0
- sage/modular/modform_hecketriangle/graded_ring.py +541 -0
- sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
- sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
- sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
- sage/modular/modform_hecketriangle/readme.py +1214 -0
- sage/modular/modform_hecketriangle/series_constructor.py +580 -0
- sage/modular/modform_hecketriangle/space.py +1037 -0
- sage/modular/modform_hecketriangle/subspace.py +423 -0
- sage/modular/modsym/all.py +17 -0
- sage/modular/modsym/ambient.py +3846 -0
- sage/modular/modsym/boundary.py +1420 -0
- sage/modular/modsym/element.py +336 -0
- sage/modular/modsym/g1list.py +178 -0
- sage/modular/modsym/ghlist.py +182 -0
- sage/modular/modsym/hecke_operator.py +73 -0
- sage/modular/modsym/manin_symbol.cpython-314-darwin.so +0 -0
- sage/modular/modsym/manin_symbol.pxd +5 -0
- sage/modular/modsym/manin_symbol.pyx +497 -0
- sage/modular/modsym/manin_symbol_list.py +1295 -0
- sage/modular/modsym/modsym.py +400 -0
- sage/modular/modsym/modular_symbols.py +384 -0
- sage/modular/modsym/p1list.cpython-314-darwin.so +0 -0
- sage/modular/modsym/p1list.pxd +29 -0
- sage/modular/modsym/p1list.pyx +1372 -0
- sage/modular/modsym/p1list_nf.py +1241 -0
- sage/modular/modsym/relation_matrix.py +591 -0
- sage/modular/modsym/relation_matrix_pyx.cpython-314-darwin.so +0 -0
- sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
- sage/modular/modsym/space.py +2468 -0
- sage/modular/modsym/subspace.py +455 -0
- sage/modular/modsym/tests.py +375 -0
- sage/modular/multiple_zeta.py +2632 -0
- sage/modular/multiple_zeta_F_algebra.py +786 -0
- sage/modular/overconvergent/all.py +6 -0
- sage/modular/overconvergent/genus0.py +1878 -0
- sage/modular/overconvergent/hecke_series.py +1187 -0
- sage/modular/overconvergent/weightspace.py +778 -0
- sage/modular/pollack_stevens/all.py +4 -0
- sage/modular/pollack_stevens/distributions.py +874 -0
- sage/modular/pollack_stevens/fund_domain.py +1572 -0
- sage/modular/pollack_stevens/manin_map.py +859 -0
- sage/modular/pollack_stevens/modsym.py +1593 -0
- sage/modular/pollack_stevens/padic_lseries.py +417 -0
- sage/modular/pollack_stevens/sigma0.py +534 -0
- sage/modular/pollack_stevens/space.py +1076 -0
- sage/modular/quasimodform/all.py +3 -0
- sage/modular/quasimodform/element.py +845 -0
- sage/modular/quasimodform/ring.py +828 -0
- sage/modular/quatalg/all.py +3 -0
- sage/modular/quatalg/brandt.py +1642 -0
- sage/modular/ssmod/all.py +8 -0
- sage/modular/ssmod/ssmod.py +827 -0
- sage/rings/all__sagemath_schemes.py +1 -0
- sage/rings/polynomial/all__sagemath_schemes.py +1 -0
- sage/rings/polynomial/binary_form_reduce.py +585 -0
- sage/schemes/all.py +41 -0
- sage/schemes/berkovich/all.py +6 -0
- sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
- sage/schemes/berkovich/berkovich_space.py +748 -0
- sage/schemes/curves/affine_curve.py +2928 -0
- sage/schemes/curves/all.py +33 -0
- sage/schemes/curves/closed_point.py +434 -0
- sage/schemes/curves/constructor.py +381 -0
- sage/schemes/curves/curve.py +542 -0
- sage/schemes/curves/plane_curve_arrangement.py +1283 -0
- sage/schemes/curves/point.py +463 -0
- sage/schemes/curves/projective_curve.py +3026 -0
- sage/schemes/curves/zariski_vankampen.py +1932 -0
- sage/schemes/cyclic_covers/all.py +2 -0
- sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
- sage/schemes/cyclic_covers/constructor.py +137 -0
- sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
- sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
- sage/schemes/elliptic_curves/BSD.py +1036 -0
- sage/schemes/elliptic_curves/Qcurves.py +592 -0
- sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
- sage/schemes/elliptic_curves/all.py +49 -0
- sage/schemes/elliptic_curves/cardinality.py +609 -0
- sage/schemes/elliptic_curves/cm.py +1102 -0
- sage/schemes/elliptic_curves/constructor.py +1552 -0
- sage/schemes/elliptic_curves/ec_database.py +175 -0
- sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
- sage/schemes/elliptic_curves/ell_egros.py +459 -0
- sage/schemes/elliptic_curves/ell_field.py +2836 -0
- sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
- sage/schemes/elliptic_curves/ell_generic.py +3760 -0
- sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
- sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
- sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
- sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
- sage/schemes/elliptic_curves/ell_point.py +4787 -0
- sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
- sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
- sage/schemes/elliptic_curves/ell_torsion.py +436 -0
- sage/schemes/elliptic_curves/ell_wp.py +352 -0
- sage/schemes/elliptic_curves/formal_group.py +760 -0
- sage/schemes/elliptic_curves/gal_reps.py +1459 -0
- sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
- sage/schemes/elliptic_curves/gp_simon.py +152 -0
- sage/schemes/elliptic_curves/heegner.py +7335 -0
- sage/schemes/elliptic_curves/height.py +2109 -0
- sage/schemes/elliptic_curves/hom.py +1406 -0
- sage/schemes/elliptic_curves/hom_composite.py +934 -0
- sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
- sage/schemes/elliptic_curves/hom_scalar.py +531 -0
- sage/schemes/elliptic_curves/hom_sum.py +682 -0
- sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
- sage/schemes/elliptic_curves/homset.py +271 -0
- sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
- sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
- sage/schemes/elliptic_curves/jacobian.py +237 -0
- sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
- sage/schemes/elliptic_curves/kraus.py +1014 -0
- sage/schemes/elliptic_curves/lseries_ell.py +943 -0
- sage/schemes/elliptic_curves/mod5family.py +105 -0
- sage/schemes/elliptic_curves/mod_poly.py +197 -0
- sage/schemes/elliptic_curves/mod_sym_num.cpython-314-darwin.so +0 -0
- sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
- sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
- sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
- sage/schemes/elliptic_curves/padics.py +1816 -0
- sage/schemes/elliptic_curves/period_lattice.py +2234 -0
- sage/schemes/elliptic_curves/period_lattice_region.cpython-314-darwin.so +0 -0
- sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
- sage/schemes/elliptic_curves/saturation.py +715 -0
- sage/schemes/elliptic_curves/sha_tate.py +1158 -0
- sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
- sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
- sage/schemes/hyperelliptic_curves/all.py +6 -0
- sage/schemes/hyperelliptic_curves/constructor.py +291 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
- sage/schemes/hyperelliptic_curves/invariants.py +410 -0
- sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
- sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
- sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
- sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
- sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
- sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
- sage/schemes/hyperelliptic_curves/mestre.py +302 -0
- sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
- sage/schemes/jacobians/abstract_jacobian.py +277 -0
- sage/schemes/jacobians/all.py +2 -0
- sage/schemes/overview.py +161 -0
- sage/schemes/plane_conics/all.py +22 -0
- sage/schemes/plane_conics/con_field.py +1296 -0
- sage/schemes/plane_conics/con_finite_field.py +158 -0
- sage/schemes/plane_conics/con_number_field.py +456 -0
- sage/schemes/plane_conics/con_rational_field.py +406 -0
- sage/schemes/plane_conics/con_rational_function_field.py +580 -0
- sage/schemes/plane_conics/constructor.py +249 -0
- sage/schemes/plane_quartics/all.py +2 -0
- sage/schemes/plane_quartics/quartic_constructor.py +71 -0
- sage/schemes/plane_quartics/quartic_generic.py +73 -0
- sage/schemes/riemann_surfaces/all.py +1 -0
- sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
- sage_wheels/share/cremona/cremona_mini.db +0 -0
- sage_wheels/share/ellcurves/rank0 +30427 -0
- sage_wheels/share/ellcurves/rank1 +31871 -0
- sage_wheels/share/ellcurves/rank10 +6 -0
- sage_wheels/share/ellcurves/rank11 +6 -0
- sage_wheels/share/ellcurves/rank12 +1 -0
- sage_wheels/share/ellcurves/rank14 +1 -0
- sage_wheels/share/ellcurves/rank15 +1 -0
- sage_wheels/share/ellcurves/rank17 +1 -0
- sage_wheels/share/ellcurves/rank19 +1 -0
- sage_wheels/share/ellcurves/rank2 +2388 -0
- sage_wheels/share/ellcurves/rank20 +1 -0
- sage_wheels/share/ellcurves/rank21 +1 -0
- sage_wheels/share/ellcurves/rank22 +1 -0
- sage_wheels/share/ellcurves/rank23 +1 -0
- sage_wheels/share/ellcurves/rank24 +1 -0
- sage_wheels/share/ellcurves/rank28 +1 -0
- sage_wheels/share/ellcurves/rank3 +836 -0
- sage_wheels/share/ellcurves/rank4 +10 -0
- sage_wheels/share/ellcurves/rank5 +5 -0
- sage_wheels/share/ellcurves/rank6 +5 -0
- sage_wheels/share/ellcurves/rank7 +5 -0
- sage_wheels/share/ellcurves/rank8 +6 -0
- 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')
|