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,249 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
r"""
|
|
3
|
+
Plane conic constructor
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Marco Streng (2010-07-20)
|
|
8
|
+
|
|
9
|
+
- Nick Alexander (2008-01-08)
|
|
10
|
+
"""
|
|
11
|
+
# ****************************************************************************
|
|
12
|
+
# Copyright (C) 2008 Nick Alexander <ncalexander@gmail.com>
|
|
13
|
+
# Copyright (C) 2009/2010 Marco Streng <marco.streng@gmail.com>
|
|
14
|
+
#
|
|
15
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
16
|
+
#
|
|
17
|
+
# This code is distributed in the hope that it will be useful,
|
|
18
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
20
|
+
# General Public License for more details.
|
|
21
|
+
#
|
|
22
|
+
# The full text of the GPL is available at:
|
|
23
|
+
#
|
|
24
|
+
# https://www.gnu.org/licenses/
|
|
25
|
+
# ****************************************************************************
|
|
26
|
+
|
|
27
|
+
from sage.matrix.constructor import matrix
|
|
28
|
+
from sage.modules.free_module_element import vector
|
|
29
|
+
from sage.categories.integral_domains import IntegralDomains
|
|
30
|
+
from sage.rings.rational_field import RationalField
|
|
31
|
+
from sage.rings.finite_rings.finite_field_base import FiniteField
|
|
32
|
+
from sage.rings.fraction_field import FractionField_generic
|
|
33
|
+
|
|
34
|
+
from sage.rings.number_field.number_field_base import NumberField
|
|
35
|
+
from sage.rings.polynomial.multi_polynomial import MPolynomial
|
|
36
|
+
from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base
|
|
37
|
+
from sage.rings.polynomial.polynomial_ring import PolynomialRing_generic
|
|
38
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
39
|
+
from sage.schemes.affine.affine_point import SchemeMorphism_point_affine
|
|
40
|
+
from sage.schemes.projective.projective_point import SchemeMorphism_point_projective_field
|
|
41
|
+
from sage.schemes.projective.projective_space import ProjectiveSpace
|
|
42
|
+
from sage.structure.all import Sequence
|
|
43
|
+
from sage.structure.element import Matrix
|
|
44
|
+
|
|
45
|
+
from .con_field import ProjectiveConic_field
|
|
46
|
+
from .con_finite_field import ProjectiveConic_finite_field
|
|
47
|
+
from .con_number_field import ProjectiveConic_number_field
|
|
48
|
+
from .con_rational_field import ProjectiveConic_rational_field
|
|
49
|
+
from .con_rational_function_field import ProjectiveConic_rational_function_field
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def Conic(base_field, F=None, names=None, unique=True):
|
|
53
|
+
r"""
|
|
54
|
+
Return the plane projective conic curve defined by ``F``
|
|
55
|
+
over ``base_field``.
|
|
56
|
+
|
|
57
|
+
The input form ``Conic(F, names=None)`` is also accepted,
|
|
58
|
+
in which case the fraction field of the base ring of ``F``
|
|
59
|
+
is used as base field.
|
|
60
|
+
|
|
61
|
+
INPUT:
|
|
62
|
+
|
|
63
|
+
- ``base_field`` -- the base field of the conic
|
|
64
|
+
|
|
65
|
+
- ``names`` -- list, tuple, or comma separated string
|
|
66
|
+
of three variable names specifying the names
|
|
67
|
+
of the coordinate functions of the ambient
|
|
68
|
+
space `\Bold{P}^3`. If not specified or read
|
|
69
|
+
off from ``F``, then this defaults to ``'x,y,z'``.
|
|
70
|
+
|
|
71
|
+
- ``F`` -- a polynomial, list, matrix, ternary quadratic form,
|
|
72
|
+
or list or tuple of 5 points in the plane.
|
|
73
|
+
|
|
74
|
+
If ``F`` is a polynomial or quadratic form,
|
|
75
|
+
then the output is the curve in the projective plane
|
|
76
|
+
defined by ``F = 0``.
|
|
77
|
+
|
|
78
|
+
If ``F`` is a polynomial, then it must be a polynomial
|
|
79
|
+
of degree at most 2 in 2 variables, or a homogeneous
|
|
80
|
+
polynomial in of degree 2 in 3 variables.
|
|
81
|
+
|
|
82
|
+
If ``F`` is a matrix, then the output is the zero locus
|
|
83
|
+
of `(x,y,z) F (x,y,z)^t`.
|
|
84
|
+
|
|
85
|
+
If ``F`` is a list of coefficients, then it has
|
|
86
|
+
length 3 or 6 and gives the coefficients of
|
|
87
|
+
the monomials `x^2, y^2, z^2` or all 6 monomials
|
|
88
|
+
`x^2, xy, xz, y^2, yz, z^2` in lexicographic order.
|
|
89
|
+
|
|
90
|
+
If ``F`` is a list of 5 points in the plane, then the output
|
|
91
|
+
is a conic through those points.
|
|
92
|
+
|
|
93
|
+
- ``unique`` -- used only if ``F`` is a list of points in the plane;
|
|
94
|
+
if the conic through the points is not unique, then
|
|
95
|
+
raise :exc:`ValueError` if and only if ``unique`` is ``True``
|
|
96
|
+
|
|
97
|
+
OUTPUT: a plane projective conic curve defined by ``F`` over a field
|
|
98
|
+
|
|
99
|
+
EXAMPLES:
|
|
100
|
+
|
|
101
|
+
Conic curves given by polynomials ::
|
|
102
|
+
|
|
103
|
+
sage: X,Y,Z = QQ['X,Y,Z'].gens()
|
|
104
|
+
sage: Conic(X^2 - X*Y + Y^2 - Z^2)
|
|
105
|
+
Projective Conic Curve over Rational Field defined by X^2 - X*Y + Y^2 - Z^2
|
|
106
|
+
sage: x,y = GF(7)['x,y'].gens()
|
|
107
|
+
sage: Conic(x^2 - x + 2*y^2 - 3, 'U,V,W')
|
|
108
|
+
Projective Conic Curve over Finite Field of size 7
|
|
109
|
+
defined by U^2 + 2*V^2 - U*W - 3*W^2
|
|
110
|
+
|
|
111
|
+
Conic curves given by matrices ::
|
|
112
|
+
|
|
113
|
+
sage: Conic(matrix(QQ, [[1, 2, 0], [4, 0, 0], [7, 0, 9]]), 'x,y,z')
|
|
114
|
+
Projective Conic Curve over Rational Field defined by x^2 + 6*x*y + 7*x*z + 9*z^2
|
|
115
|
+
|
|
116
|
+
sage: x,y,z = GF(11)['x,y,z'].gens()
|
|
117
|
+
sage: C = Conic(x^2 + y^2 - 2*z^2); C
|
|
118
|
+
Projective Conic Curve over Finite Field of size 11 defined by x^2 + y^2 - 2*z^2
|
|
119
|
+
sage: Conic(C.symmetric_matrix(), 'x,y,z')
|
|
120
|
+
Projective Conic Curve over Finite Field of size 11 defined by x^2 + y^2 - 2*z^2
|
|
121
|
+
|
|
122
|
+
Conics given by coefficients ::
|
|
123
|
+
|
|
124
|
+
sage: Conic(QQ, [1,2,3])
|
|
125
|
+
Projective Conic Curve over Rational Field defined by x^2 + 2*y^2 + 3*z^2
|
|
126
|
+
sage: Conic(GF(7), [1,2,3,4,5,6], 'X')
|
|
127
|
+
Projective Conic Curve over Finite Field of size 7
|
|
128
|
+
defined by X0^2 + 2*X0*X1 - 3*X1^2 + 3*X0*X2 - 2*X1*X2 - X2^2
|
|
129
|
+
|
|
130
|
+
The conic through a set of points ::
|
|
131
|
+
|
|
132
|
+
sage: C = Conic(QQ, [[10,2],[3,4],[-7,6],[7,8],[9,10]]); C
|
|
133
|
+
Projective Conic Curve over Rational Field
|
|
134
|
+
defined by x^2 + 13/4*x*y - 17/4*y^2 - 35/2*x*z + 91/4*y*z - 37/2*z^2
|
|
135
|
+
sage: C.rational_point()
|
|
136
|
+
(10 : 2 : 1)
|
|
137
|
+
sage: C.point([3,4])
|
|
138
|
+
(3 : 4 : 1)
|
|
139
|
+
|
|
140
|
+
sage: a = AffineSpace(GF(13), 2)
|
|
141
|
+
sage: Conic([a([x,x^2]) for x in range(5)])
|
|
142
|
+
Projective Conic Curve over Finite Field of size 13 defined by x^2 - y*z
|
|
143
|
+
"""
|
|
144
|
+
if not (base_field is None or base_field in IntegralDomains()):
|
|
145
|
+
if names is None:
|
|
146
|
+
names = F
|
|
147
|
+
F = base_field
|
|
148
|
+
base_field = None
|
|
149
|
+
if isinstance(F, (list, tuple)):
|
|
150
|
+
if len(F) == 1:
|
|
151
|
+
return Conic(base_field, F[0], names)
|
|
152
|
+
if names is None:
|
|
153
|
+
names = 'x,y,z'
|
|
154
|
+
if len(F) == 5:
|
|
155
|
+
L = []
|
|
156
|
+
for f in F:
|
|
157
|
+
if isinstance(f, SchemeMorphism_point_affine):
|
|
158
|
+
C = Sequence(f, universe=base_field)
|
|
159
|
+
if len(C) != 2:
|
|
160
|
+
raise TypeError("points in F (=%s) must be planar" % F)
|
|
161
|
+
C.append(1)
|
|
162
|
+
elif isinstance(f, SchemeMorphism_point_projective_field):
|
|
163
|
+
C = Sequence(f, universe=base_field)
|
|
164
|
+
elif isinstance(f, (list, tuple)):
|
|
165
|
+
C = Sequence(f, universe=base_field)
|
|
166
|
+
if len(C) == 2:
|
|
167
|
+
C.append(1)
|
|
168
|
+
else:
|
|
169
|
+
raise TypeError("F (=%s) must be a sequence of planar "
|
|
170
|
+
"points" % F)
|
|
171
|
+
if len(C) != 3:
|
|
172
|
+
raise TypeError("points in F (=%s) must be planar" % F)
|
|
173
|
+
P = C.universe()
|
|
174
|
+
if P not in IntegralDomains():
|
|
175
|
+
raise TypeError("coordinates of points in F (=%s) must "
|
|
176
|
+
"be in an integral domain" % F)
|
|
177
|
+
L.append(Sequence([C[0]**2, C[0] * C[1],
|
|
178
|
+
C[0] * C[2], C[1]**2,
|
|
179
|
+
C[1] * C[2], C[2]**2], P.fraction_field()))
|
|
180
|
+
M = matrix(L)
|
|
181
|
+
if unique and M.rank() != 5:
|
|
182
|
+
raise ValueError("points in F (=%s) do not define a unique "
|
|
183
|
+
"conic" % F)
|
|
184
|
+
con = Conic(base_field, Sequence(M.right_kernel().gen()), names)
|
|
185
|
+
con.point(F[0])
|
|
186
|
+
return con
|
|
187
|
+
F = Sequence(F, universe=base_field)
|
|
188
|
+
base_field = F.universe().fraction_field()
|
|
189
|
+
temp_ring = PolynomialRing(base_field, 3, names)
|
|
190
|
+
x, y, z = temp_ring.gens()
|
|
191
|
+
if len(F) == 3:
|
|
192
|
+
return Conic(F[0] * x**2 + F[1] * y**2 + F[2] * z**2)
|
|
193
|
+
if len(F) == 6:
|
|
194
|
+
return Conic(F[0] * x**2 + F[1] * x * y + F[2] * x * z +
|
|
195
|
+
F[3] * y**2 + F[4] * y * z + F[5] * z**2)
|
|
196
|
+
raise TypeError("F (=%s) must be a sequence of 3 or 6"
|
|
197
|
+
"coefficients" % F)
|
|
198
|
+
|
|
199
|
+
from sage.quadratic_forms.quadratic_form import QuadraticForm
|
|
200
|
+
|
|
201
|
+
if isinstance(F, QuadraticForm):
|
|
202
|
+
F = F.matrix()
|
|
203
|
+
if isinstance(F, Matrix) and F.is_square() and F.ncols() == 3:
|
|
204
|
+
if names is None:
|
|
205
|
+
names = 'x,y,z'
|
|
206
|
+
temp_ring = PolynomialRing(F.base_ring(), 3, names)
|
|
207
|
+
F = vector(temp_ring.gens()) * F * vector(temp_ring.gens())
|
|
208
|
+
|
|
209
|
+
if not isinstance(F, MPolynomial):
|
|
210
|
+
raise TypeError("F (=%s) must be a three-variable polynomial or "
|
|
211
|
+
"a sequence of points or coefficients" % F)
|
|
212
|
+
|
|
213
|
+
if F.total_degree() != 2:
|
|
214
|
+
raise TypeError("F (=%s) must have degree 2" % F)
|
|
215
|
+
|
|
216
|
+
if base_field is None:
|
|
217
|
+
base_field = F.base_ring()
|
|
218
|
+
if base_field not in IntegralDomains():
|
|
219
|
+
raise ValueError(f"Base field (={base_field}) must be a field")
|
|
220
|
+
base_field = base_field.fraction_field()
|
|
221
|
+
if names is None:
|
|
222
|
+
names = F.parent().variable_names()
|
|
223
|
+
pol_ring = PolynomialRing(base_field, 3, names)
|
|
224
|
+
|
|
225
|
+
if F.parent().ngens() == 2:
|
|
226
|
+
x, y, z = pol_ring.gens()
|
|
227
|
+
F = pol_ring(F(x / z, y / z) * z**2)
|
|
228
|
+
|
|
229
|
+
if F == 0:
|
|
230
|
+
raise ValueError("F must be nonzero over base field %s" % base_field)
|
|
231
|
+
|
|
232
|
+
if F.total_degree() != 2:
|
|
233
|
+
raise TypeError("F (=%s) must have degree 2 over base field %s" %
|
|
234
|
+
(F, base_field))
|
|
235
|
+
|
|
236
|
+
if F.parent().ngens() == 3:
|
|
237
|
+
P2 = ProjectiveSpace(2, base_field, names)
|
|
238
|
+
if isinstance(base_field, FiniteField):
|
|
239
|
+
return ProjectiveConic_finite_field(P2, F)
|
|
240
|
+
if isinstance(base_field, RationalField):
|
|
241
|
+
return ProjectiveConic_rational_field(P2, F)
|
|
242
|
+
if isinstance(base_field, NumberField):
|
|
243
|
+
return ProjectiveConic_number_field(P2, F)
|
|
244
|
+
if isinstance(base_field, FractionField_generic) and isinstance(base_field.ring(), (PolynomialRing_generic, MPolynomialRing_base)):
|
|
245
|
+
return ProjectiveConic_rational_function_field(P2, F)
|
|
246
|
+
|
|
247
|
+
return ProjectiveConic_field(P2, F)
|
|
248
|
+
|
|
249
|
+
raise TypeError("Number of variables of F (=%s) must be 2 or 3" % F)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
"""
|
|
3
|
+
Quartic curve constructor
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
#*****************************************************************************
|
|
7
|
+
# Copyright (C) 2006 David Kohel <kohel@maths.usyd.edu>
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
# http://www.gnu.org/licenses/
|
|
10
|
+
#*****************************************************************************
|
|
11
|
+
|
|
12
|
+
from sage.schemes.projective.projective_space import ProjectiveSpace_ring, ProjectiveSpace
|
|
13
|
+
from sage.rings.polynomial.multi_polynomial import MPolynomial
|
|
14
|
+
|
|
15
|
+
from .quartic_generic import QuarticCurve_generic
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def QuarticCurve(F, PP=None, check=False):
|
|
19
|
+
"""
|
|
20
|
+
Return the quartic curve defined by the polynomial ``F``.
|
|
21
|
+
|
|
22
|
+
INPUT:
|
|
23
|
+
|
|
24
|
+
- ``F`` -- a polynomial in three variables, homogeneous of degree 4
|
|
25
|
+
|
|
26
|
+
- ``PP`` -- a projective plane (default: ``None``)
|
|
27
|
+
|
|
28
|
+
- ``check`` -- whether to check for smoothness or not (default: ``False``)
|
|
29
|
+
|
|
30
|
+
EXAMPLES::
|
|
31
|
+
|
|
32
|
+
sage: x,y,z = PolynomialRing(QQ, ['x','y','z']).gens()
|
|
33
|
+
sage: QuarticCurve(x**4 + y**4 + z**4)
|
|
34
|
+
Quartic Curve over Rational Field defined by x^4 + y^4 + z^4
|
|
35
|
+
|
|
36
|
+
TESTS::
|
|
37
|
+
|
|
38
|
+
sage: QuarticCurve(x**3 + y**3)
|
|
39
|
+
Traceback (most recent call last):
|
|
40
|
+
...
|
|
41
|
+
ValueError: Argument F (=x^3 + y^3) must be a homogeneous polynomial of degree 4
|
|
42
|
+
|
|
43
|
+
sage: QuarticCurve(x**4 + y**4 + z**3)
|
|
44
|
+
Traceback (most recent call last):
|
|
45
|
+
...
|
|
46
|
+
ValueError: Argument F (=x^4 + y^4 + z^3) must be a homogeneous polynomial of degree 4
|
|
47
|
+
|
|
48
|
+
sage: x,y=PolynomialRing(QQ,['x','y']).gens()
|
|
49
|
+
sage: QuarticCurve(x**4 + y**4)
|
|
50
|
+
Traceback (most recent call last):
|
|
51
|
+
...
|
|
52
|
+
ValueError: Argument F (=x^4 + y^4) must be a polynomial in 3 variables
|
|
53
|
+
"""
|
|
54
|
+
if not isinstance(F, MPolynomial):
|
|
55
|
+
raise ValueError(f"Argument F (={F}) must be a multivariate polynomial")
|
|
56
|
+
P = F.parent()
|
|
57
|
+
if not P.ngens() == 3:
|
|
58
|
+
raise ValueError("Argument F (=%s) must be a polynomial in 3 variables" % F)
|
|
59
|
+
if not (F.is_homogeneous() and F.degree() == 4):
|
|
60
|
+
raise ValueError("Argument F (=%s) must be a homogeneous polynomial of degree 4" % F)
|
|
61
|
+
|
|
62
|
+
if PP is not None:
|
|
63
|
+
if not isinstance(PP, ProjectiveSpace_ring) and PP.dimension == 2:
|
|
64
|
+
raise ValueError(f"Argument PP (={PP}) must be a projective plane")
|
|
65
|
+
else:
|
|
66
|
+
PP = ProjectiveSpace(P)
|
|
67
|
+
|
|
68
|
+
if check:
|
|
69
|
+
raise NotImplementedError("Argument checking (for nonsingularity) is not implemented.")
|
|
70
|
+
|
|
71
|
+
return QuarticCurve_generic(PP, F)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
"""
|
|
3
|
+
Plane quartic curves over a general ring
|
|
4
|
+
|
|
5
|
+
These are generic genus 3 curves, as distinct from hyperelliptic curves of genus 3.
|
|
6
|
+
|
|
7
|
+
EXAMPLES::
|
|
8
|
+
|
|
9
|
+
sage: PP.<X,Y,Z> = ProjectiveSpace(2, QQ)
|
|
10
|
+
sage: f = X^4 + Y^4 + Z^4 - 3*X*Y*Z*(X+Y+Z)
|
|
11
|
+
sage: C = QuarticCurve(f); C
|
|
12
|
+
Quartic Curve over Rational Field
|
|
13
|
+
defined by X^4 + Y^4 - 3*X^2*Y*Z - 3*X*Y^2*Z - 3*X*Y*Z^2 + Z^4
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
#*****************************************************************************
|
|
17
|
+
# Copyright (C) 2006 David Kohel <kohel@maths.usyd.edu>
|
|
18
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
19
|
+
# https://www.gnu.org/licenses/
|
|
20
|
+
#*****************************************************************************
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
import sage.schemes.curves.projective_curve as projective_curve
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def is_QuarticCurve(C):
|
|
27
|
+
"""
|
|
28
|
+
Check whether ``C`` is a Quartic Curve.
|
|
29
|
+
|
|
30
|
+
EXAMPLES::
|
|
31
|
+
|
|
32
|
+
sage: from sage.schemes.plane_quartics.quartic_generic import is_QuarticCurve
|
|
33
|
+
sage: x,y,z = PolynomialRing(QQ, ['x','y','z']).gens()
|
|
34
|
+
sage: Q = QuarticCurve(x**4 + y**4 + z**4)
|
|
35
|
+
sage: is_QuarticCurve(Q)
|
|
36
|
+
doctest:warning...
|
|
37
|
+
DeprecationWarning: The function is_QuarticCurve is deprecated; use 'isinstance(..., QuarticCurve_generic)' instead.
|
|
38
|
+
See https://github.com/sagemath/sage/issues/38022 for details.
|
|
39
|
+
True
|
|
40
|
+
"""
|
|
41
|
+
from sage.misc.superseded import deprecation
|
|
42
|
+
deprecation(38022, "The function is_QuarticCurve is deprecated; use 'isinstance(..., QuarticCurve_generic)' instead.")
|
|
43
|
+
return isinstance(C, QuarticCurve_generic)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class QuarticCurve_generic(projective_curve.ProjectivePlaneCurve):
|
|
47
|
+
# DRK: Note that we should check whether the curve is
|
|
48
|
+
|
|
49
|
+
def _repr_type(self):
|
|
50
|
+
"""
|
|
51
|
+
Return the representation of ``self``.
|
|
52
|
+
|
|
53
|
+
EXAMPLES::
|
|
54
|
+
|
|
55
|
+
sage: x,y,z = PolynomialRing(QQ, ['x','y','z']).gens()
|
|
56
|
+
sage: Q = QuarticCurve(x**4 + y**4 + z**4)
|
|
57
|
+
sage: Q._repr_type()
|
|
58
|
+
'Quartic'
|
|
59
|
+
"""
|
|
60
|
+
return "Quartic"
|
|
61
|
+
|
|
62
|
+
def genus(self):
|
|
63
|
+
"""
|
|
64
|
+
Return the genus of ``self``.
|
|
65
|
+
|
|
66
|
+
EXAMPLES::
|
|
67
|
+
|
|
68
|
+
sage: x,y,z = PolynomialRing(QQ, ['x','y','z']).gens()
|
|
69
|
+
sage: Q = QuarticCurve(x**4 + y**4 + z**4)
|
|
70
|
+
sage: Q.genus()
|
|
71
|
+
3
|
|
72
|
+
"""
|
|
73
|
+
return 3
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|