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.
- 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.47.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.47.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.47.dist-info/RECORD +311 -0
- passagemath_schemes-10.6.47.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.47.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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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_nf.py +1241 -0
- sage/modular/modsym/relation_matrix.py +591 -0
- sage/modular/modsym/relation_matrix_pyx.cpython-312-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-312-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-312-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,33 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
"""
|
|
3
|
+
Plane curves
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# *****************************************************************************
|
|
7
|
+
#
|
|
8
|
+
# Sage: Open Source Mathematical Software
|
|
9
|
+
#
|
|
10
|
+
# Copyright (C) 2005 William Stein <was@math.harvard.edu>
|
|
11
|
+
#
|
|
12
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
13
|
+
#
|
|
14
|
+
# This code is distributed in the hope that it will be useful,
|
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
17
|
+
# General Public License for more details.
|
|
18
|
+
#
|
|
19
|
+
# The full text of the GPL is available at:
|
|
20
|
+
#
|
|
21
|
+
# https://www.gnu.org/licenses/
|
|
22
|
+
# *****************************************************************************
|
|
23
|
+
|
|
24
|
+
from sage.schemes.curves.constructor import Curve
|
|
25
|
+
from sage.schemes.curves.projective_curve import Hasse_bounds
|
|
26
|
+
|
|
27
|
+
from sage.misc.lazy_import import lazy_import
|
|
28
|
+
|
|
29
|
+
lazy_import('sage.schemes.curves.plane_curve_arrangement', 'PlaneCurveArrangements')
|
|
30
|
+
|
|
31
|
+
lazy_import('sage.schemes.curves.plane_curve_arrangement', 'AffinePlaneCurveArrangements')
|
|
32
|
+
|
|
33
|
+
lazy_import('sage.schemes.curves.plane_curve_arrangement', 'ProjectivePlaneCurveArrangements')
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
"""
|
|
3
|
+
Closed points of integral curves
|
|
4
|
+
|
|
5
|
+
A rational point of a curve in Sage is represented by its coordinates. If the
|
|
6
|
+
curve is defined over finite field and integral, that is reduced and
|
|
7
|
+
irreducible, then it is empowered by the global function field machinery of
|
|
8
|
+
Sage. Thus closed points of the curve are computable, as represented by maximal
|
|
9
|
+
ideals of the coordinate ring of the ambient space.
|
|
10
|
+
|
|
11
|
+
EXAMPLES::
|
|
12
|
+
|
|
13
|
+
sage: F.<a> = GF(2)
|
|
14
|
+
sage: P.<x,y> = AffineSpace(F, 2)
|
|
15
|
+
sage: C = Curve(y^2 + y - x^3)
|
|
16
|
+
sage: C.closed_points()
|
|
17
|
+
[Point (x, y), Point (x, y + 1)]
|
|
18
|
+
sage: C.closed_points(2)
|
|
19
|
+
[Point (y^2 + y + 1, x + 1),
|
|
20
|
+
Point (y^2 + y + 1, x + y),
|
|
21
|
+
Point (y^2 + y + 1, x + y + 1)]
|
|
22
|
+
sage: C.closed_points(3)
|
|
23
|
+
[Point (x^2 + x + y, x*y + 1, y^2 + x + 1),
|
|
24
|
+
Point (x^2 + x + y + 1, x*y + x + 1, y^2 + x)]
|
|
25
|
+
|
|
26
|
+
Closed points of projective curves are represented by homogeneous maximal
|
|
27
|
+
ideals::
|
|
28
|
+
|
|
29
|
+
sage: F.<a> = GF(2)
|
|
30
|
+
sage: P.<x,y,z> = ProjectiveSpace(F, 2)
|
|
31
|
+
sage: C = Curve(x^3*y + y^3*z + x*z^3)
|
|
32
|
+
sage: C.closed_points()
|
|
33
|
+
[Point (x, z), Point (x, y), Point (y, z)]
|
|
34
|
+
sage: C.closed_points(2)
|
|
35
|
+
[Point (y^2 + y*z + z^2, x + y + z)]
|
|
36
|
+
sage: C.closed_points(3)
|
|
37
|
+
[Point (y^3 + y^2*z + z^3, x + y),
|
|
38
|
+
Point (y^3 + y*z^2 + z^3, x + z),
|
|
39
|
+
Point (x^2 + x*z + y*z + z^2, x*y + x*z + z^2, y^2 + x*z),
|
|
40
|
+
Point (x^2 + y*z, x*y + x*z + z^2, y^2 + x*z + y*z),
|
|
41
|
+
Point (x^3 + x*z^2 + z^3, y + z),
|
|
42
|
+
Point (x^2 + y*z + z^2, x*y + x*z + y*z, y^2 + x*z + y*z + z^2),
|
|
43
|
+
Point (x^2 + y*z + z^2, x*y + z^2, y^2 + x*z + y*z)]
|
|
44
|
+
|
|
45
|
+
Rational points are easily converted to closed points and vice versa if the
|
|
46
|
+
closed point is of degree one::
|
|
47
|
+
|
|
48
|
+
sage: F.<a> = GF(2)
|
|
49
|
+
sage: P.<x,y,z> = ProjectiveSpace(F, 2)
|
|
50
|
+
sage: C = Curve(x^3*y + y^3*z + x*z^3)
|
|
51
|
+
sage: p1, p2, p3 = C.closed_points()
|
|
52
|
+
sage: p1.rational_point()
|
|
53
|
+
(0 : 1 : 0)
|
|
54
|
+
sage: p2.rational_point()
|
|
55
|
+
(0 : 0 : 1)
|
|
56
|
+
sage: p3.rational_point()
|
|
57
|
+
(1 : 0 : 0)
|
|
58
|
+
sage: _.closed_point()
|
|
59
|
+
Point (y, z)
|
|
60
|
+
sage: _ == p3
|
|
61
|
+
True
|
|
62
|
+
|
|
63
|
+
AUTHORS:
|
|
64
|
+
|
|
65
|
+
- Kwankyu Lee (2019-03): initial version
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
# *****************************************************************************
|
|
69
|
+
# Copyright (C) 2019 Kwankyu Lee <kwankyu@gmail.com>
|
|
70
|
+
#
|
|
71
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
72
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
73
|
+
# the License, or (at your option) any later version.
|
|
74
|
+
# https://www.gnu.org/licenses/
|
|
75
|
+
# *****************************************************************************
|
|
76
|
+
|
|
77
|
+
from sage.structure.richcmp import richcmp
|
|
78
|
+
from sage.schemes.generic.point import SchemeTopologicalPoint_prime_ideal
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class CurveClosedPoint(SchemeTopologicalPoint_prime_ideal):
|
|
82
|
+
"""
|
|
83
|
+
Base class of closed points of curves.
|
|
84
|
+
"""
|
|
85
|
+
pass
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class IntegralCurveClosedPoint(CurveClosedPoint):
|
|
89
|
+
"""
|
|
90
|
+
Closed points of integral curves.
|
|
91
|
+
|
|
92
|
+
INPUT:
|
|
93
|
+
|
|
94
|
+
- ``curve`` -- the curve to which the closed point belongs
|
|
95
|
+
|
|
96
|
+
- ``prime_ideal`` -- a prime ideal
|
|
97
|
+
|
|
98
|
+
- ``degree`` -- degree of the closed point
|
|
99
|
+
|
|
100
|
+
EXAMPLES::
|
|
101
|
+
|
|
102
|
+
sage: # needs sage.rings.finite_rings
|
|
103
|
+
sage: F.<a> = GF(4)
|
|
104
|
+
sage: P.<x,y> = AffineSpace(F, 2)
|
|
105
|
+
sage: C = Curve(y^2 + y - x^3)
|
|
106
|
+
sage: C.closed_points()
|
|
107
|
+
[Point (x, y),
|
|
108
|
+
Point (x, y + 1),
|
|
109
|
+
Point (x + a, y + a),
|
|
110
|
+
Point (x + a, y + (a + 1)),
|
|
111
|
+
Point (x + (a + 1), y + a),
|
|
112
|
+
Point (x + (a + 1), y + (a + 1)),
|
|
113
|
+
Point (x + 1, y + a),
|
|
114
|
+
Point (x + 1, y + (a + 1))]
|
|
115
|
+
"""
|
|
116
|
+
def __init__(self, curve, prime_ideal, degree):
|
|
117
|
+
"""
|
|
118
|
+
Initialize.
|
|
119
|
+
|
|
120
|
+
TESTS::
|
|
121
|
+
|
|
122
|
+
sage: # needs sage.rings.finite_rings
|
|
123
|
+
sage: F.<a> = GF(4)
|
|
124
|
+
sage: P.<x,y> = AffineSpace(F, 2)
|
|
125
|
+
sage: C = Curve(y^2 + y - x^3)
|
|
126
|
+
sage: p = C([0,0]); p
|
|
127
|
+
(0, 0)
|
|
128
|
+
sage: loads(dumps(p)) == p
|
|
129
|
+
True
|
|
130
|
+
"""
|
|
131
|
+
super().__init__(curve.ambient_space(), prime_ideal)
|
|
132
|
+
|
|
133
|
+
self._curve = curve
|
|
134
|
+
self._degree = degree
|
|
135
|
+
|
|
136
|
+
def __hash__(self):
|
|
137
|
+
"""
|
|
138
|
+
Return the hash of ``self``.
|
|
139
|
+
|
|
140
|
+
EXAMPLES::
|
|
141
|
+
|
|
142
|
+
sage: # needs sage.rings.finite_rings
|
|
143
|
+
sage: F.<a> = GF(4)
|
|
144
|
+
sage: P.<x,y> = AffineSpace(F, 2)
|
|
145
|
+
sage: C = Curve(y^2 + y - x^3)
|
|
146
|
+
sage: pts = C.closed_points()
|
|
147
|
+
sage: p = pts[0]
|
|
148
|
+
sage: {p: 1}
|
|
149
|
+
{Point (x, y): 1}
|
|
150
|
+
"""
|
|
151
|
+
return hash((self.parent(), self.prime_ideal()))
|
|
152
|
+
|
|
153
|
+
def _richcmp_(self, other, op):
|
|
154
|
+
"""
|
|
155
|
+
Compare ``self`` and ``other`` with respect to the operator.
|
|
156
|
+
|
|
157
|
+
INPUT:
|
|
158
|
+
|
|
159
|
+
- ``other`` -- a closed point
|
|
160
|
+
|
|
161
|
+
- ``op`` -- a comparison operator
|
|
162
|
+
|
|
163
|
+
EXAMPLES::
|
|
164
|
+
|
|
165
|
+
sage: # needs sage.rings.finite_rings
|
|
166
|
+
sage: F.<a> = GF(4)
|
|
167
|
+
sage: P.<x,y> = AffineSpace(F, 2)
|
|
168
|
+
sage: C = Curve(y^2 + y - x^3)
|
|
169
|
+
sage: pts = C.closed_points()
|
|
170
|
+
sage: pts[0] == pts[1]
|
|
171
|
+
False
|
|
172
|
+
"""
|
|
173
|
+
return richcmp((self._curve, self.prime_ideal()), (other._curve, other.prime_ideal()), op)
|
|
174
|
+
|
|
175
|
+
def _repr_(self):
|
|
176
|
+
"""
|
|
177
|
+
Return the string representation of the closed point.
|
|
178
|
+
|
|
179
|
+
EXAMPLES::
|
|
180
|
+
|
|
181
|
+
sage: # needs sage.rings.finite_rings
|
|
182
|
+
sage: F.<a> = GF(4)
|
|
183
|
+
sage: P.<x,y> = AffineSpace(F, 2)
|
|
184
|
+
sage: C = Curve(y^2 + y - x^3)
|
|
185
|
+
sage: pts = C.closed_points()
|
|
186
|
+
sage: pts[0]
|
|
187
|
+
Point (x, y)
|
|
188
|
+
"""
|
|
189
|
+
return "Point ({})".format(', '.join(repr(g) for g in self.prime_ideal().gens()))
|
|
190
|
+
|
|
191
|
+
def curve(self):
|
|
192
|
+
"""
|
|
193
|
+
Return the curve to which this point belongs.
|
|
194
|
+
|
|
195
|
+
EXAMPLES::
|
|
196
|
+
|
|
197
|
+
sage: # needs sage.rings.finite_rings
|
|
198
|
+
sage: F.<a> = GF(4)
|
|
199
|
+
sage: P.<x,y> = AffineSpace(F, 2)
|
|
200
|
+
sage: C = Curve(y^2 + y - x^3)
|
|
201
|
+
sage: pts = C.closed_points()
|
|
202
|
+
sage: p = pts[0]
|
|
203
|
+
sage: p.curve()
|
|
204
|
+
Affine Plane Curve over Finite Field in a of size 2^2 defined by x^3 + y^2 + y
|
|
205
|
+
"""
|
|
206
|
+
return self._curve
|
|
207
|
+
|
|
208
|
+
def degree(self):
|
|
209
|
+
"""
|
|
210
|
+
Return the degree of the point.
|
|
211
|
+
|
|
212
|
+
EXAMPLES::
|
|
213
|
+
|
|
214
|
+
sage: # needs sage.rings.finite_rings
|
|
215
|
+
sage: F.<a> = GF(4)
|
|
216
|
+
sage: P.<x,y> = AffineSpace(F, 2)
|
|
217
|
+
sage: C = Curve(y^2 + y - x^3)
|
|
218
|
+
sage: pts = C.closed_points()
|
|
219
|
+
sage: p = pts[0]
|
|
220
|
+
sage: p.degree()
|
|
221
|
+
1
|
|
222
|
+
"""
|
|
223
|
+
return self._degree
|
|
224
|
+
|
|
225
|
+
def places(self):
|
|
226
|
+
"""
|
|
227
|
+
Return all places on this closed point.
|
|
228
|
+
|
|
229
|
+
EXAMPLES::
|
|
230
|
+
|
|
231
|
+
sage: # needs sage.rings.finite_rings
|
|
232
|
+
sage: F.<a> = GF(4)
|
|
233
|
+
sage: P.<x,y> = AffineSpace(F, 2)
|
|
234
|
+
sage: C = Curve(y^2 + y - x^3)
|
|
235
|
+
sage: pts = C.closed_points()
|
|
236
|
+
sage: p = pts[0]
|
|
237
|
+
sage: p.places()
|
|
238
|
+
[Place (x, y)]
|
|
239
|
+
"""
|
|
240
|
+
return self._curve.places_on(self)
|
|
241
|
+
|
|
242
|
+
def place(self):
|
|
243
|
+
"""
|
|
244
|
+
Return a place on this closed point.
|
|
245
|
+
|
|
246
|
+
If there are more than one, arbitrary one is chosen.
|
|
247
|
+
|
|
248
|
+
EXAMPLES::
|
|
249
|
+
|
|
250
|
+
sage: # needs sage.rings.finite_rings
|
|
251
|
+
sage: F.<a> = GF(4)
|
|
252
|
+
sage: P.<x,y> = AffineSpace(F, 2)
|
|
253
|
+
sage: C = Curve(y^2 + y - x^3)
|
|
254
|
+
sage: pts = C.closed_points()
|
|
255
|
+
sage: p = pts[0]
|
|
256
|
+
sage: p.place()
|
|
257
|
+
Place (x, y)
|
|
258
|
+
"""
|
|
259
|
+
return self._curve.places_on(self)[0]
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
class IntegralAffineCurveClosedPoint(IntegralCurveClosedPoint):
|
|
263
|
+
"""
|
|
264
|
+
Closed points of affine curves.
|
|
265
|
+
"""
|
|
266
|
+
def rational_point(self):
|
|
267
|
+
"""
|
|
268
|
+
Return the rational point if this closed point is of degree `1`.
|
|
269
|
+
|
|
270
|
+
EXAMPLES::
|
|
271
|
+
|
|
272
|
+
sage: # needs sage.rings.finite_rings
|
|
273
|
+
sage: A.<x,y> = AffineSpace(GF(3^2), 2)
|
|
274
|
+
sage: C = Curve(y^2 - x^5 - x^4 - 2*x^3 - 2*x - 2)
|
|
275
|
+
sage: C.closed_points()
|
|
276
|
+
[Point (x, y + (z2 + 1)),
|
|
277
|
+
Point (x, y + (-z2 - 1)),
|
|
278
|
+
Point (x + (z2 + 1), y + (z2 - 1)),
|
|
279
|
+
Point (x + (z2 + 1), y + (-z2 + 1)),
|
|
280
|
+
Point (x - 1, y + (z2 + 1)),
|
|
281
|
+
Point (x - 1, y + (-z2 - 1)),
|
|
282
|
+
Point (x + (-z2 - 1), y + z2),
|
|
283
|
+
Point (x + (-z2 - 1), y + (-z2)),
|
|
284
|
+
Point (x + 1, y + 1),
|
|
285
|
+
Point (x + 1, y - 1)]
|
|
286
|
+
sage: [p.rational_point() for p in _]
|
|
287
|
+
[(0, 2*z2 + 2),
|
|
288
|
+
(0, z2 + 1),
|
|
289
|
+
(2*z2 + 2, 2*z2 + 1),
|
|
290
|
+
(2*z2 + 2, z2 + 2),
|
|
291
|
+
(1, 2*z2 + 2),
|
|
292
|
+
(1, z2 + 1),
|
|
293
|
+
(z2 + 1, 2*z2),
|
|
294
|
+
(z2 + 1, z2),
|
|
295
|
+
(2, 2),
|
|
296
|
+
(2, 1)]
|
|
297
|
+
sage: set(_) == set(C.rational_points())
|
|
298
|
+
True
|
|
299
|
+
"""
|
|
300
|
+
if self.degree() != 1:
|
|
301
|
+
raise ValueError("not a rational point")
|
|
302
|
+
|
|
303
|
+
G = self.prime_ideal().groebner_basis()
|
|
304
|
+
C = self._curve
|
|
305
|
+
return C([g.reduce(G) for g in C.ambient_space().gens()])
|
|
306
|
+
|
|
307
|
+
def projective(self, i=0):
|
|
308
|
+
"""
|
|
309
|
+
Return the point in the projective closure of the curve, of which this
|
|
310
|
+
curve is the ``i``-th affine patch.
|
|
311
|
+
|
|
312
|
+
INPUT:
|
|
313
|
+
|
|
314
|
+
- ``i`` -- integer
|
|
315
|
+
|
|
316
|
+
EXAMPLES::
|
|
317
|
+
|
|
318
|
+
sage: F.<a> = GF(2)
|
|
319
|
+
sage: A.<x,y> = AffineSpace(F, 2)
|
|
320
|
+
sage: C = Curve(y^2 + y - x^3, A)
|
|
321
|
+
sage: p1, p2 = C.closed_points()
|
|
322
|
+
sage: p1
|
|
323
|
+
Point (x, y)
|
|
324
|
+
sage: p2
|
|
325
|
+
Point (x, y + 1)
|
|
326
|
+
sage: p1.projective()
|
|
327
|
+
Point (x1, x2)
|
|
328
|
+
sage: p2.projective(0)
|
|
329
|
+
Point (x1, x0 + x2)
|
|
330
|
+
sage: p2.projective(1)
|
|
331
|
+
Point (x0, x1 + x2)
|
|
332
|
+
sage: p2.projective(2)
|
|
333
|
+
Point (x0, x1 + x2)
|
|
334
|
+
"""
|
|
335
|
+
C = self.curve()
|
|
336
|
+
A = C.ambient_space()
|
|
337
|
+
ideal = self.prime_ideal()
|
|
338
|
+
|
|
339
|
+
phi = A.projective_embedding(i)
|
|
340
|
+
|
|
341
|
+
gs = list(phi.codomain().gens())
|
|
342
|
+
xi = gs.pop(i)
|
|
343
|
+
|
|
344
|
+
# gens of ideal is a groebner basis in degrevlex order
|
|
345
|
+
S = phi.codomain().coordinate_ring()
|
|
346
|
+
prime = S.ideal(ideal.subs(dict(zip(A.gens(), gs))).homogenize(xi))
|
|
347
|
+
|
|
348
|
+
Cp = C.projective_closure(i)
|
|
349
|
+
return Cp._closed_point(Cp, prime, self.degree())
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
class IntegralProjectiveCurveClosedPoint(IntegralCurveClosedPoint):
|
|
353
|
+
"""
|
|
354
|
+
Closed points of projective plane curves.
|
|
355
|
+
"""
|
|
356
|
+
def rational_point(self):
|
|
357
|
+
"""
|
|
358
|
+
Return the rational point if this closed point is of degree `1`.
|
|
359
|
+
|
|
360
|
+
EXAMPLES::
|
|
361
|
+
|
|
362
|
+
sage: # needs sage.rings.finite_rings
|
|
363
|
+
sage: F.<a> = GF(4)
|
|
364
|
+
sage: P.<x,y,z> = ProjectiveSpace(F, 2)
|
|
365
|
+
sage: C = Curve(x^3*y + y^3*z + x*z^3)
|
|
366
|
+
sage: C.closed_points()
|
|
367
|
+
[Point (x, z),
|
|
368
|
+
Point (x, y),
|
|
369
|
+
Point (y, z),
|
|
370
|
+
Point (x + a*z, y + (a + 1)*z),
|
|
371
|
+
Point (x + (a + 1)*z, y + a*z)]
|
|
372
|
+
sage: [p.rational_point() for p in _]
|
|
373
|
+
[(0 : 1 : 0), (0 : 0 : 1), (1 : 0 : 0), (a : a + 1 : 1), (a + 1 : a : 1)]
|
|
374
|
+
sage: set(_) == set(C.rational_points())
|
|
375
|
+
True
|
|
376
|
+
"""
|
|
377
|
+
if self.degree() != 1:
|
|
378
|
+
raise ValueError("not a rational point")
|
|
379
|
+
|
|
380
|
+
C = self.curve()
|
|
381
|
+
A = C.ambient_space().coordinate_ring()
|
|
382
|
+
prime_ideal = self.prime_ideal()
|
|
383
|
+
for i in range(A.ngens()):
|
|
384
|
+
G = (prime_ideal + A.ideal([A.gen(i) - 1])).groebner_basis()
|
|
385
|
+
if 1 not in G:
|
|
386
|
+
break
|
|
387
|
+
return C([A.gen(j).reduce(G) for j in range(A.ngens())])
|
|
388
|
+
|
|
389
|
+
def affine(self, i=None):
|
|
390
|
+
"""
|
|
391
|
+
Return the point in the ``i``-th affine patch of the curve.
|
|
392
|
+
|
|
393
|
+
INPUT:
|
|
394
|
+
|
|
395
|
+
- ``i`` -- integer; if not specified, it is chosen automatically
|
|
396
|
+
|
|
397
|
+
EXAMPLES::
|
|
398
|
+
|
|
399
|
+
sage: F.<a> = GF(2)
|
|
400
|
+
sage: P.<x,y,z> = ProjectiveSpace(F, 2)
|
|
401
|
+
sage: C = Curve(x^3*y + y^3*z + x*z^3)
|
|
402
|
+
sage: p1, p2, p3 = C.closed_points()
|
|
403
|
+
sage: p1.affine()
|
|
404
|
+
Point (x, z)
|
|
405
|
+
sage: p2.affine()
|
|
406
|
+
Point (x, y)
|
|
407
|
+
sage: p3.affine()
|
|
408
|
+
Point (y, z)
|
|
409
|
+
sage: p3.affine(0)
|
|
410
|
+
Point (y, z)
|
|
411
|
+
sage: p3.affine(1)
|
|
412
|
+
Traceback (most recent call last):
|
|
413
|
+
...
|
|
414
|
+
ValueError: not in the affine patch
|
|
415
|
+
"""
|
|
416
|
+
C = self.curve()
|
|
417
|
+
P = C.ambient_space()
|
|
418
|
+
ideal = self.prime_ideal()
|
|
419
|
+
if i is None:
|
|
420
|
+
for j in range(P.ngens()):
|
|
421
|
+
if P.gen(j) not in ideal:
|
|
422
|
+
i = j
|
|
423
|
+
break
|
|
424
|
+
else:
|
|
425
|
+
if P.gen(i) in ideal:
|
|
426
|
+
raise ValueError("not in the affine patch")
|
|
427
|
+
|
|
428
|
+
A = P.affine_patch(i)
|
|
429
|
+
phi = A.projective_embedding(i, P)
|
|
430
|
+
|
|
431
|
+
prime = A.coordinate_ring().ideal(ideal.subs(dict(zip(P.gens(), phi.defining_polynomials()))))
|
|
432
|
+
|
|
433
|
+
Ca = C.affine_patch(i)
|
|
434
|
+
return Ca._closed_point(Ca, prime, self.degree())
|