passagemath-schemes 10.6.38__cp314-cp314t-macosx_13_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-schemes might be problematic. Click here for more details.
- passagemath_schemes/.dylibs/libflint.21.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.38.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.38.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.38.dist-info/RECORD +314 -0
- passagemath_schemes-10.6.38.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.38.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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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-314t-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,310 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
"""
|
|
3
|
+
Cyclic covers curves over a general ring
|
|
4
|
+
|
|
5
|
+
EXAMPLES::
|
|
6
|
+
|
|
7
|
+
sage: ZZx.<x> = ZZ[]
|
|
8
|
+
sage: C = CyclicCover(5, x^5 + x + 1); C
|
|
9
|
+
Cyclic Cover of P^1 over Integer Ring defined by y^5 = x^5 + x + 1
|
|
10
|
+
sage: C.genus()
|
|
11
|
+
6
|
|
12
|
+
sage: D = C.projective_closure(); D
|
|
13
|
+
Projective Plane Curve over Integer Ring defined by x0^5 + x0^4*x1 + x1^5 - x2^5
|
|
14
|
+
sage: D.change_ring(QQ).genus()
|
|
15
|
+
6
|
|
16
|
+
sage: C.change_ring(GF(5))
|
|
17
|
+
Traceback (most recent call last):
|
|
18
|
+
...
|
|
19
|
+
ValueError: As the characteristic divides the order of the cover, this model is not smooth.
|
|
20
|
+
|
|
21
|
+
sage: GF7x.<x> = GF(7)[]
|
|
22
|
+
sage: C = CyclicCover(3, x^9 + x + 1)
|
|
23
|
+
sage: C
|
|
24
|
+
Cyclic Cover of P^1 over Finite Field of size 7 defined by y^3 = x^9 + x + 1
|
|
25
|
+
sage: C.genus()
|
|
26
|
+
7
|
|
27
|
+
sage: C.projective_closure()
|
|
28
|
+
Traceback (most recent call last):
|
|
29
|
+
...
|
|
30
|
+
NotImplementedError: Weighted Projective Space is not implemented
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
# *****************************************************************************
|
|
34
|
+
# Copyright (C) 2018 Edgar Costa <edgarc@mit.edu>
|
|
35
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
36
|
+
# https://www.gnu.org/licenses/
|
|
37
|
+
# *****************************************************************************
|
|
38
|
+
|
|
39
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
40
|
+
from sage.structure.category_object import normalize_names
|
|
41
|
+
from sage.arith.misc import GCD
|
|
42
|
+
from sage.schemes.curves.affine_curve import AffinePlaneCurve
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class CyclicCover_generic(AffinePlaneCurve):
|
|
46
|
+
def __init__(self, AA, r, f, names=None):
|
|
47
|
+
"""
|
|
48
|
+
Cyclic covers over a general ring.
|
|
49
|
+
|
|
50
|
+
INPUT:
|
|
51
|
+
|
|
52
|
+
- ``A`` -- ambient affine space
|
|
53
|
+
|
|
54
|
+
- ``r`` -- degree of the cover
|
|
55
|
+
|
|
56
|
+
- ``f`` -- univariate polynomial
|
|
57
|
+
|
|
58
|
+
- ``names`` -- (default: ``["x","y"]``); names for the
|
|
59
|
+
coordinate functions
|
|
60
|
+
|
|
61
|
+
TESTS::
|
|
62
|
+
|
|
63
|
+
sage: ZZx.<x> = ZZ[]
|
|
64
|
+
sage: C = CyclicCover(5, x^5 + x + 1); C
|
|
65
|
+
Cyclic Cover of P^1 over Integer Ring defined by y^5 = x^5 + x + 1
|
|
66
|
+
sage: C.genus()
|
|
67
|
+
6
|
|
68
|
+
sage: D = C.projective_closure(); D
|
|
69
|
+
Projective Plane Curve over Integer Ring defined by x0^5 + x0^4*x1 + x1^5 - x2^5
|
|
70
|
+
sage: D.change_ring(QQ).genus()
|
|
71
|
+
6
|
|
72
|
+
sage: C.change_ring(GF(5))
|
|
73
|
+
Traceback (most recent call last):
|
|
74
|
+
...
|
|
75
|
+
ValueError: As the characteristic divides the order of the cover,
|
|
76
|
+
this model is not smooth.
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
sage: GF7x.<x> = GF(7)[]
|
|
80
|
+
sage: C = CyclicCover(3, x^9 + x + 1)
|
|
81
|
+
sage: C
|
|
82
|
+
Cyclic Cover of P^1 over Finite Field of size 7 defined by y^3 = x^9 + x + 1
|
|
83
|
+
sage: C.genus()
|
|
84
|
+
7
|
|
85
|
+
sage: C.projective_closure()
|
|
86
|
+
Traceback (most recent call last):
|
|
87
|
+
...
|
|
88
|
+
NotImplementedError: Weighted Projective Space is not implemented
|
|
89
|
+
"""
|
|
90
|
+
x, y = AA.gens()
|
|
91
|
+
self._r = r
|
|
92
|
+
self._d = f.degree()
|
|
93
|
+
self._delta = GCD(self._r, self._d)
|
|
94
|
+
self._genus = ((self._d - 1) * (self._r - 1) - (self._delta - 1)) // 2
|
|
95
|
+
self._f = f
|
|
96
|
+
|
|
97
|
+
F = y**r - f(x)
|
|
98
|
+
AffinePlaneCurve.__init__(self, AA, F)
|
|
99
|
+
if names is None:
|
|
100
|
+
names = ("x", "y")
|
|
101
|
+
else:
|
|
102
|
+
names = normalize_names(2, names)
|
|
103
|
+
self._names = names
|
|
104
|
+
|
|
105
|
+
def change_ring(self, R):
|
|
106
|
+
"""
|
|
107
|
+
Return this CyclicCover over a new base ring R.
|
|
108
|
+
|
|
109
|
+
EXAMPLES::
|
|
110
|
+
|
|
111
|
+
sage: ZZx.<x> = ZZ[]
|
|
112
|
+
sage: C = CyclicCover(5, x^5 + x + 1)
|
|
113
|
+
sage: C.change_ring(GF(5))
|
|
114
|
+
Traceback (most recent call last):
|
|
115
|
+
...
|
|
116
|
+
ValueError: As the characteristic divides the order of the cover,
|
|
117
|
+
this model is not smooth.
|
|
118
|
+
sage: C.change_ring(GF(3))
|
|
119
|
+
Traceback (most recent call last):
|
|
120
|
+
...
|
|
121
|
+
ValueError: Not a smooth Cyclic Cover of P^1: singularity in the
|
|
122
|
+
provided affine patch.
|
|
123
|
+
sage: C.change_ring(GF(17))
|
|
124
|
+
Cyclic Cover of P^1 over Finite Field of size 17 defined by y^5 = x^5 + x + 1
|
|
125
|
+
"""
|
|
126
|
+
from .constructor import CyclicCover
|
|
127
|
+
|
|
128
|
+
return CyclicCover(self._r, self._f.change_ring(R), self._names)
|
|
129
|
+
|
|
130
|
+
base_extend = change_ring
|
|
131
|
+
|
|
132
|
+
def _repr_(self):
|
|
133
|
+
"""
|
|
134
|
+
String representation of cyclic covers.
|
|
135
|
+
|
|
136
|
+
EXAMPLES::
|
|
137
|
+
|
|
138
|
+
sage: R.<x> = QQ[]
|
|
139
|
+
sage: CyclicCover(2, x^5 + x + 1)
|
|
140
|
+
Cyclic Cover of P^1 over Rational Field defined by y^2 = x^5 + x + 1
|
|
141
|
+
sage: CyclicCover(3, x^5 + x + 1)
|
|
142
|
+
Cyclic Cover of P^1 over Rational Field defined by y^3 = x^5 + x + 1
|
|
143
|
+
sage: CyclicCover(5, x^5 + x + 1)
|
|
144
|
+
Cyclic Cover of P^1 over Rational Field defined by y^5 = x^5 + x + 1
|
|
145
|
+
sage: CyclicCover(15, x^9 + x + 1)
|
|
146
|
+
Cyclic Cover of P^1 over Rational Field defined by y^15 = x^9 + x + 1
|
|
147
|
+
"""
|
|
148
|
+
R = self.base_ring()
|
|
149
|
+
x, y = self.ambient_space().gens()
|
|
150
|
+
r = self._r
|
|
151
|
+
f = self._f
|
|
152
|
+
return "Cyclic Cover of P^1 over %s defined by %s = %s" % (R, y**r, f(x))
|
|
153
|
+
|
|
154
|
+
def __eq__(self, other):
|
|
155
|
+
"""
|
|
156
|
+
Test of equality.
|
|
157
|
+
|
|
158
|
+
EXAMPLES::
|
|
159
|
+
|
|
160
|
+
sage: ZZx.<x> = ZZ[]
|
|
161
|
+
sage: C0 = CyclicCover(5, x^5 + x + 1)
|
|
162
|
+
sage: C1 = C0.change_ring(QQ)
|
|
163
|
+
sage: C1 == C0
|
|
164
|
+
False
|
|
165
|
+
sage: C2 = CyclicCover(3, x^5 + x + 1)
|
|
166
|
+
sage: C2 == C0
|
|
167
|
+
False
|
|
168
|
+
sage: C3 = CyclicCover(5, x^6 + x + 1)
|
|
169
|
+
sage: C3 == C0
|
|
170
|
+
False
|
|
171
|
+
sage: C0 == CyclicCover(5, x^5 + x + 1)
|
|
172
|
+
True
|
|
173
|
+
"""
|
|
174
|
+
if not isinstance(other, CyclicCover_generic):
|
|
175
|
+
return False
|
|
176
|
+
|
|
177
|
+
return (
|
|
178
|
+
(self.base_ring() == other.base_ring())
|
|
179
|
+
and (self._r == other._r)
|
|
180
|
+
and (self._f == other._f)
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
def __ne__(self, other):
|
|
184
|
+
"""
|
|
185
|
+
Test of not equality.
|
|
186
|
+
|
|
187
|
+
EXAMPLES::
|
|
188
|
+
|
|
189
|
+
sage: ZZx.<x> = ZZ[]
|
|
190
|
+
sage: C0 = CyclicCover(5, x^5 + x + 1)
|
|
191
|
+
sage: C1 = C0.change_ring(QQ)
|
|
192
|
+
sage: C1 != C0
|
|
193
|
+
True
|
|
194
|
+
sage: C2 = CyclicCover(3, x^5 + x + 1)
|
|
195
|
+
sage: C2 != C0
|
|
196
|
+
True
|
|
197
|
+
sage: C3 = CyclicCover(5, x^6 + x + 1)
|
|
198
|
+
sage: C3 != C0
|
|
199
|
+
True
|
|
200
|
+
sage: C0 != CyclicCover(5, x^5 + x + 1)
|
|
201
|
+
False
|
|
202
|
+
"""
|
|
203
|
+
return not self == other
|
|
204
|
+
|
|
205
|
+
def order(self):
|
|
206
|
+
"""
|
|
207
|
+
The order of the cover.
|
|
208
|
+
|
|
209
|
+
EXAMPLES::
|
|
210
|
+
|
|
211
|
+
sage: ZZx.<x> = ZZ[]
|
|
212
|
+
sage: CyclicCover(5, x^5 + x + 1).order()
|
|
213
|
+
5
|
|
214
|
+
sage: CyclicCover(3, x^5 + x + 1).order()
|
|
215
|
+
3
|
|
216
|
+
"""
|
|
217
|
+
return self._r
|
|
218
|
+
|
|
219
|
+
def genus(self):
|
|
220
|
+
"""
|
|
221
|
+
The geometric genus of the curve.
|
|
222
|
+
|
|
223
|
+
EXAMPLES::
|
|
224
|
+
|
|
225
|
+
sage: ZZx.<x> = ZZ[]
|
|
226
|
+
sage: CyclicCover(5, x^5 + x + 1).genus()
|
|
227
|
+
6
|
|
228
|
+
sage: CyclicCover(3, x^5 + x + 1).genus()
|
|
229
|
+
4
|
|
230
|
+
"""
|
|
231
|
+
return self._genus
|
|
232
|
+
|
|
233
|
+
def projective_closure(self, **kwds):
|
|
234
|
+
"""
|
|
235
|
+
Return the projective closure of this affine curve.
|
|
236
|
+
|
|
237
|
+
EXAMPLES::
|
|
238
|
+
|
|
239
|
+
sage: GF7x.<x> = GF(7)[]
|
|
240
|
+
sage: CyclicCover(3, x^9 + x + 1).projective_closure()
|
|
241
|
+
Traceback (most recent call last):
|
|
242
|
+
...
|
|
243
|
+
NotImplementedError: Weighted Projective Space is not implemented
|
|
244
|
+
|
|
245
|
+
sage: ZZx.<x> = ZZ[]
|
|
246
|
+
sage: CyclicCover(5, x^5 + x + 1).projective_closure()
|
|
247
|
+
Projective Plane Curve over Integer Ring defined by x0^5 + x0^4*x1 + x1^5 - x2^5
|
|
248
|
+
"""
|
|
249
|
+
# test d = 3 and 4
|
|
250
|
+
if self._d == self._r:
|
|
251
|
+
return AffinePlaneCurve.projective_closure(self, **kwds)
|
|
252
|
+
else:
|
|
253
|
+
raise NotImplementedError("Weighted Projective Space is not implemented")
|
|
254
|
+
|
|
255
|
+
def cover_polynomial(self, K=None, var='x'):
|
|
256
|
+
"""
|
|
257
|
+
Return the polynomial defining the cyclic cover.
|
|
258
|
+
|
|
259
|
+
EXAMPLES::
|
|
260
|
+
|
|
261
|
+
sage: ZZx.<x> = ZZ[]; CyclicCover(5, x^5 + x + 1).cover_polynomial()
|
|
262
|
+
x^5 + x + 1
|
|
263
|
+
"""
|
|
264
|
+
|
|
265
|
+
if K is None:
|
|
266
|
+
return self._f
|
|
267
|
+
else:
|
|
268
|
+
P = PolynomialRing(K, var)
|
|
269
|
+
return P(self._f)
|
|
270
|
+
|
|
271
|
+
def is_singular(self):
|
|
272
|
+
r"""
|
|
273
|
+
Return if this curve is singular or not.
|
|
274
|
+
|
|
275
|
+
This just checks that the characteristic of the ring does not divide the
|
|
276
|
+
order of the cover and that the defining polynomial of the cover is
|
|
277
|
+
square free.
|
|
278
|
+
|
|
279
|
+
EXAMPLES::
|
|
280
|
+
|
|
281
|
+
sage: R.<x> = QQ[]
|
|
282
|
+
sage: CyclicCover(3, x^5 + x + 1).is_singular()
|
|
283
|
+
False
|
|
284
|
+
sage: CyclicCover(3, (x^5 + x + 1)^2, check_smooth=False).is_singular()
|
|
285
|
+
True
|
|
286
|
+
"""
|
|
287
|
+
P = self._f.parent()
|
|
288
|
+
r = self._r
|
|
289
|
+
if P(r) == 0:
|
|
290
|
+
return True
|
|
291
|
+
else:
|
|
292
|
+
return not self._f.is_squarefree()
|
|
293
|
+
|
|
294
|
+
def is_smooth(self):
|
|
295
|
+
r"""
|
|
296
|
+
Return if this curve is smooth or not.
|
|
297
|
+
|
|
298
|
+
This just checks that the characteristic of the ring does not divide the
|
|
299
|
+
order of the cover and that the defining polynomial of the cover is
|
|
300
|
+
square free.
|
|
301
|
+
|
|
302
|
+
EXAMPLES::
|
|
303
|
+
|
|
304
|
+
sage: R.<x> = QQ[]
|
|
305
|
+
sage: CyclicCover(3, x^5 + x + 1).is_smooth()
|
|
306
|
+
True
|
|
307
|
+
sage: CyclicCover(3, (x^5 + x + 1)^2, check_smooth=False).is_smooth()
|
|
308
|
+
False
|
|
309
|
+
"""
|
|
310
|
+
return not self.is_singular()
|