passagemath-pari 10.6.32__cp314-cp314-musllinux_1_2_x86_64.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-pari might be problematic. Click here for more details.
- PARIKernel/__init__.py +2 -0
- PARIKernel/__main__.py +5 -0
- PARIKernel/io.cpython-314-x86_64-linux-musl.so +0 -0
- PARIKernel/io.pxd +7 -0
- PARIKernel/io.pyx +84 -0
- PARIKernel/kernel.cpython-314-x86_64-linux-musl.so +0 -0
- PARIKernel/kernel.pyx +260 -0
- PARIKernel/paridecl.pxd +95 -0
- PARIKernel/svg.cpython-314-x86_64-linux-musl.so +0 -0
- PARIKernel/svg.pyx +52 -0
- cypari2/__init__.py +8 -0
- cypari2/auto_paridecl.pxd +1070 -0
- cypari2/closure.cpython-314-x86_64-linux-musl.so +0 -0
- cypari2/closure.pxd +5 -0
- cypari2/closure.pyx +246 -0
- cypari2/convert.cpython-314-x86_64-linux-musl.so +0 -0
- cypari2/convert.pxd +80 -0
- cypari2/convert.pyx +613 -0
- cypari2/custom_block.cpython-314-x86_64-linux-musl.so +0 -0
- cypari2/custom_block.pyx +30 -0
- cypari2/cypari.h +13 -0
- cypari2/gen.cpython-314-x86_64-linux-musl.so +0 -0
- cypari2/gen.pxd +69 -0
- cypari2/gen.pyx +4819 -0
- cypari2/handle_error.cpython-314-x86_64-linux-musl.so +0 -0
- cypari2/handle_error.pxd +7 -0
- cypari2/handle_error.pyx +232 -0
- cypari2/pari_instance.cpython-314-x86_64-linux-musl.so +0 -0
- cypari2/pari_instance.pxd +27 -0
- cypari2/pari_instance.pyx +1438 -0
- cypari2/paridecl.pxd +5353 -0
- cypari2/paripriv.pxd +34 -0
- cypari2/pycore_long.h +98 -0
- cypari2/pycore_long.pxd +9 -0
- cypari2/stack.cpython-314-x86_64-linux-musl.so +0 -0
- cypari2/stack.pxd +27 -0
- cypari2/stack.pyx +278 -0
- cypari2/string_utils.cpython-314-x86_64-linux-musl.so +0 -0
- cypari2/string_utils.pxd +29 -0
- cypari2/string_utils.pyx +65 -0
- cypari2/types.pxd +147 -0
- passagemath_pari-10.6.32.data/data/etc/jupyter/nbconfig/notebook.d/gp-mode.json +5 -0
- passagemath_pari-10.6.32.data/data/share/jupyter/kernels/pari_jupyter/kernel.js +28 -0
- passagemath_pari-10.6.32.data/data/share/jupyter/kernels/pari_jupyter/kernel.json +6 -0
- passagemath_pari-10.6.32.data/data/share/jupyter/kernels/pari_jupyter/logo-64x64.png +0 -0
- passagemath_pari-10.6.32.data/data/share/jupyter/kernels/xeus-gp/kernel.json +13 -0
- passagemath_pari-10.6.32.data/data/share/jupyter/kernels/xeus-gp/logo-32x32.png +0 -0
- passagemath_pari-10.6.32.data/data/share/jupyter/kernels/xeus-gp/logo-64x64.png +0 -0
- passagemath_pari-10.6.32.data/data/share/jupyter/kernels/xeus-gp/logo-svg.svg +75 -0
- passagemath_pari-10.6.32.data/data/share/jupyter/nbextensions/gp-mode/gp.js +284 -0
- passagemath_pari-10.6.32.data/data/share/jupyter/nbextensions/gp-mode/main.js +15 -0
- passagemath_pari-10.6.32.dist-info/METADATA +209 -0
- passagemath_pari-10.6.32.dist-info/RECORD +331 -0
- passagemath_pari-10.6.32.dist-info/WHEEL +5 -0
- passagemath_pari-10.6.32.dist-info/top_level.txt +4 -0
- passagemath_pari.libs/libcrypto-f04afe95.so.3 +0 -0
- passagemath_pari.libs/libflint-fd6f12fc.so.21.0.0 +0 -0
- passagemath_pari.libs/libgcc_s-0cd532bd.so.1 +0 -0
- passagemath_pari.libs/libgf2x-9e30c3e3.so.3.0.0 +0 -0
- passagemath_pari.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
- passagemath_pari.libs/libgivaro-9a94c711.so.9.2.1 +0 -0
- passagemath_pari.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_pari.libs/libgmpxx-9e08595c.so.4.7.0 +0 -0
- passagemath_pari.libs/libgsl-42cda06f.so.28.0.0 +0 -0
- passagemath_pari.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
- passagemath_pari.libs/libncursesw-9c9e32c3.so.6.5 +0 -0
- passagemath_pari.libs/libntl-26885ca2.so.44.0.1 +0 -0
- passagemath_pari.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
- passagemath_pari.libs/libpari-gmp-tls-f31f908f.so.2.17.2 +0 -0
- passagemath_pari.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
- passagemath_pari.libs/libreadline-06542304.so.8.2 +0 -0
- passagemath_pari.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
- passagemath_pari.libs/libuuid-f3770415.so.1.3.0 +0 -0
- passagemath_pari.libs/libxeus-735780ff.so.13.1.0 +0 -0
- passagemath_pari.libs/libxeus-zmq-c68577b4.so.6.0.1 +0 -0
- passagemath_pari.libs/libzmq-1ba9a3da.so.5.2.5 +0 -0
- sage/all__sagemath_pari.py +26 -0
- sage/databases/all__sagemath_pari.py +7 -0
- sage/databases/conway.py +274 -0
- sage/ext/all__sagemath_pari.py +1 -0
- sage/ext/memory.cpython-314-x86_64-linux-musl.so +0 -0
- sage/ext/memory.pyx +98 -0
- sage/ext_data/pari/buzzard/DimensionSk.g +286 -0
- sage/ext_data/pari/buzzard/Tpprog.g +179 -0
- sage/ext_data/pari/buzzard/genusn.g +129 -0
- sage/ext_data/pari/dokchitser/computel.gp +740 -0
- sage/ext_data/pari/dokchitser/computel.gp.template +740 -0
- sage/ext_data/pari/dokchitser/ex-bsw +43 -0
- sage/ext_data/pari/dokchitser/ex-chgen +48 -0
- sage/ext_data/pari/dokchitser/ex-chqua +37 -0
- sage/ext_data/pari/dokchitser/ex-delta +35 -0
- sage/ext_data/pari/dokchitser/ex-eisen +30 -0
- sage/ext_data/pari/dokchitser/ex-gen2 +38 -0
- sage/ext_data/pari/dokchitser/ex-gen3 +49 -0
- sage/ext_data/pari/dokchitser/ex-gen4 +54 -0
- sage/ext_data/pari/dokchitser/ex-nf +48 -0
- sage/ext_data/pari/dokchitser/ex-shin +50 -0
- sage/ext_data/pari/dokchitser/ex-tau2 +30 -0
- sage/ext_data/pari/dokchitser/ex-zeta +27 -0
- sage/ext_data/pari/dokchitser/ex-zeta2 +47 -0
- sage/ext_data/pari/dokchitser/testall +13 -0
- sage/ext_data/pari/simon/ell.gp +2129 -0
- sage/ext_data/pari/simon/ellQ.gp +2151 -0
- sage/ext_data/pari/simon/ellcommon.gp +126 -0
- sage/ext_data/pari/simon/qfsolve.gp +722 -0
- sage/ext_data/pari/simon/resultant3.gp +306 -0
- sage/groups/all__sagemath_pari.py +3 -0
- sage/groups/pari_group.py +175 -0
- sage/interfaces/all__sagemath_pari.py +1 -0
- sage/interfaces/genus2reduction.py +464 -0
- sage/interfaces/gp.py +1114 -0
- sage/libs/all__sagemath_pari.py +2 -0
- sage/libs/linkages/__init__.py +1 -0
- sage/libs/linkages/padics/API.pxi +617 -0
- sage/libs/linkages/padics/Polynomial_ram.pxi +388 -0
- sage/libs/linkages/padics/Polynomial_shared.pxi +554 -0
- sage/libs/linkages/padics/__init__.py +1 -0
- sage/libs/linkages/padics/fmpz_poly_unram.pxi +869 -0
- sage/libs/linkages/padics/mpz.pxi +691 -0
- sage/libs/linkages/padics/relaxed/API.pxi +518 -0
- sage/libs/linkages/padics/relaxed/__init__.py +1 -0
- sage/libs/linkages/padics/relaxed/flint.pxi +543 -0
- sage/libs/linkages/padics/unram_shared.pxi +247 -0
- sage/libs/pari/__init__.py +210 -0
- sage/libs/pari/all.py +5 -0
- sage/libs/pari/convert_flint.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/pari/convert_flint.pxd +14 -0
- sage/libs/pari/convert_flint.pyx +159 -0
- sage/libs/pari/convert_gmp.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/pari/convert_gmp.pxd +14 -0
- sage/libs/pari/convert_gmp.pyx +210 -0
- sage/libs/pari/convert_sage.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/pari/convert_sage.pxd +16 -0
- sage/libs/pari/convert_sage.pyx +588 -0
- sage/libs/pari/convert_sage_complex_double.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/pari/convert_sage_complex_double.pxd +14 -0
- sage/libs/pari/convert_sage_complex_double.pyx +132 -0
- sage/libs/pari/convert_sage_matrix.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/pari/convert_sage_matrix.pyx +106 -0
- sage/libs/pari/convert_sage_real_double.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/pari/convert_sage_real_double.pxd +5 -0
- sage/libs/pari/convert_sage_real_double.pyx +14 -0
- sage/libs/pari/convert_sage_real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/pari/convert_sage_real_mpfr.pxd +7 -0
- sage/libs/pari/convert_sage_real_mpfr.pyx +108 -0
- sage/libs/pari/misc.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/pari/misc.pxd +4 -0
- sage/libs/pari/misc.pyx +26 -0
- sage/libs/pari/tests.py +1848 -0
- sage/matrix/all__sagemath_pari.py +1 -0
- sage/matrix/matrix_integer_pari.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_integer_pari.pyx +187 -0
- sage/matrix/matrix_rational_pari.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_rational_pari.pyx +160 -0
- sage/quadratic_forms/all__sagemath_pari.py +10 -0
- sage/quadratic_forms/genera/all.py +9 -0
- sage/quadratic_forms/genera/genus.py +3506 -0
- sage/quadratic_forms/genera/normal_form.py +1519 -0
- sage/quadratic_forms/genera/spinor_genus.py +243 -0
- sage/quadratic_forms/qfsolve.py +255 -0
- sage/quadratic_forms/quadratic_form__automorphisms.py +427 -0
- sage/quadratic_forms/quadratic_form__genus.py +141 -0
- sage/quadratic_forms/quadratic_form__local_density_interfaces.py +140 -0
- sage/quadratic_forms/quadratic_form__local_normal_form.py +421 -0
- sage/quadratic_forms/quadratic_form__local_representation_conditions.py +889 -0
- sage/quadratic_forms/quadratic_form__mass.py +69 -0
- sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py +663 -0
- sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py +373 -0
- sage/quadratic_forms/quadratic_form__siegel_product.py +198 -0
- sage/quadratic_forms/special_values.py +323 -0
- sage/rings/all__sagemath_pari.py +15 -0
- sage/rings/factorint_pari.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/factorint_pari.pyx +80 -0
- sage/rings/finite_rings/all__sagemath_pari.py +1 -0
- sage/rings/finite_rings/element_givaro.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/finite_rings/element_givaro.pxd +91 -0
- sage/rings/finite_rings/element_givaro.pyx +1769 -0
- sage/rings/finite_rings/element_ntl_gf2e.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/finite_rings/element_ntl_gf2e.pxd +22 -0
- sage/rings/finite_rings/element_ntl_gf2e.pyx +1333 -0
- sage/rings/finite_rings/element_pari_ffelt.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/finite_rings/element_pari_ffelt.pxd +13 -0
- sage/rings/finite_rings/element_pari_ffelt.pyx +1441 -0
- sage/rings/finite_rings/finite_field_givaro.py +612 -0
- sage/rings/finite_rings/finite_field_pari_ffelt.py +238 -0
- sage/rings/finite_rings/hom_finite_field_givaro.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_finite_field_givaro.pxd +28 -0
- sage/rings/finite_rings/hom_finite_field_givaro.pyx +280 -0
- sage/rings/finite_rings/residue_field_givaro.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/finite_rings/residue_field_givaro.pyx +133 -0
- sage/rings/finite_rings/residue_field_pari_ffelt.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/finite_rings/residue_field_pari_ffelt.pyx +128 -0
- sage/rings/function_field/all__sagemath_pari.py +1 -0
- sage/rings/function_field/valuation.py +1450 -0
- sage/rings/function_field/valuation_ring.py +212 -0
- sage/rings/number_field/all__sagemath_pari.py +14 -0
- sage/rings/number_field/totallyreal.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/number_field/totallyreal.pyx +509 -0
- sage/rings/number_field/totallyreal_data.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/number_field/totallyreal_data.pxd +26 -0
- sage/rings/number_field/totallyreal_data.pyx +928 -0
- sage/rings/number_field/totallyreal_phc.py +144 -0
- sage/rings/number_field/totallyreal_rel.py +1018 -0
- sage/rings/padics/CA_template.pxi +1847 -0
- sage/rings/padics/CA_template_header.pxi +50 -0
- sage/rings/padics/CR_template.pxi +2563 -0
- sage/rings/padics/CR_template_header.pxi +57 -0
- sage/rings/padics/FM_template.pxi +1575 -0
- sage/rings/padics/FM_template_header.pxi +50 -0
- sage/rings/padics/FP_template.pxi +2176 -0
- sage/rings/padics/FP_template_header.pxi +57 -0
- sage/rings/padics/all.py +3 -0
- sage/rings/padics/all__sagemath_pari.py +11 -0
- sage/rings/padics/common_conversion.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/common_conversion.pxd +15 -0
- sage/rings/padics/common_conversion.pyx +508 -0
- sage/rings/padics/eisenstein_extension_generic.py +232 -0
- sage/rings/padics/factory.py +3623 -0
- sage/rings/padics/generic_nodes.py +1615 -0
- sage/rings/padics/lattice_precision.py +2889 -0
- sage/rings/padics/morphism.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/morphism.pxd +11 -0
- sage/rings/padics/morphism.pyx +366 -0
- sage/rings/padics/padic_base_generic.py +467 -0
- sage/rings/padics/padic_base_leaves.py +1235 -0
- sage/rings/padics/padic_capped_absolute_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_capped_absolute_element.pxd +15 -0
- sage/rings/padics/padic_capped_absolute_element.pyx +520 -0
- sage/rings/padics/padic_capped_relative_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_capped_relative_element.pxd +14 -0
- sage/rings/padics/padic_capped_relative_element.pyx +614 -0
- sage/rings/padics/padic_extension_generic.py +990 -0
- sage/rings/padics/padic_extension_leaves.py +738 -0
- sage/rings/padics/padic_fixed_mod_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_fixed_mod_element.pxd +15 -0
- sage/rings/padics/padic_fixed_mod_element.pyx +584 -0
- sage/rings/padics/padic_floating_point_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_floating_point_element.pxd +14 -0
- sage/rings/padics/padic_floating_point_element.pyx +447 -0
- sage/rings/padics/padic_generic_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_generic_element.pxd +48 -0
- sage/rings/padics/padic_generic_element.pyx +4642 -0
- sage/rings/padics/padic_lattice_element.py +1342 -0
- sage/rings/padics/padic_printing.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_printing.pxd +38 -0
- sage/rings/padics/padic_printing.pyx +1505 -0
- sage/rings/padics/padic_relaxed_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_relaxed_element.pxd +56 -0
- sage/rings/padics/padic_relaxed_element.pyx +18 -0
- sage/rings/padics/padic_relaxed_errors.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_relaxed_errors.pxd +11 -0
- sage/rings/padics/padic_relaxed_errors.pyx +71 -0
- sage/rings/padics/padic_template_element.pxi +1212 -0
- sage/rings/padics/padic_template_element_header.pxi +50 -0
- sage/rings/padics/padic_valuation.py +1423 -0
- sage/rings/padics/pow_computer_flint.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/pow_computer_flint.pxd +38 -0
- sage/rings/padics/pow_computer_flint.pyx +641 -0
- sage/rings/padics/pow_computer_relative.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/pow_computer_relative.pxd +29 -0
- sage/rings/padics/pow_computer_relative.pyx +415 -0
- sage/rings/padics/qadic_flint_CA.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/qadic_flint_CA.pxd +21 -0
- sage/rings/padics/qadic_flint_CA.pyx +130 -0
- sage/rings/padics/qadic_flint_CR.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/qadic_flint_CR.pxd +13 -0
- sage/rings/padics/qadic_flint_CR.pyx +172 -0
- sage/rings/padics/qadic_flint_FM.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/qadic_flint_FM.pxd +14 -0
- sage/rings/padics/qadic_flint_FM.pyx +111 -0
- sage/rings/padics/qadic_flint_FP.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/qadic_flint_FP.pxd +12 -0
- sage/rings/padics/qadic_flint_FP.pyx +165 -0
- sage/rings/padics/relative_extension_leaves.py +429 -0
- sage/rings/padics/relative_ramified_CA.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/relative_ramified_CA.pxd +9 -0
- sage/rings/padics/relative_ramified_CA.pyx +33 -0
- sage/rings/padics/relative_ramified_CR.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/relative_ramified_CR.pxd +8 -0
- sage/rings/padics/relative_ramified_CR.pyx +33 -0
- sage/rings/padics/relative_ramified_FM.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/relative_ramified_FM.pxd +9 -0
- sage/rings/padics/relative_ramified_FM.pyx +33 -0
- sage/rings/padics/relative_ramified_FP.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/padics/relative_ramified_FP.pxd +8 -0
- sage/rings/padics/relative_ramified_FP.pyx +33 -0
- sage/rings/padics/relaxed_template.pxi +4229 -0
- sage/rings/padics/relaxed_template_header.pxi +160 -0
- sage/rings/padics/tests.py +35 -0
- sage/rings/padics/tutorial.py +341 -0
- sage/rings/padics/unramified_extension_generic.py +335 -0
- sage/rings/padics/witt_vector.py +917 -0
- sage/rings/padics/witt_vector_ring.py +934 -0
- sage/rings/pari_ring.py +235 -0
- sage/rings/polynomial/all__sagemath_pari.py +1 -0
- sage/rings/polynomial/padics/all.py +1 -0
- sage/rings/polynomial/padics/polynomial_padic.py +360 -0
- sage/rings/polynomial/padics/polynomial_padic_capped_relative_dense.py +1324 -0
- sage/rings/polynomial/padics/polynomial_padic_flat.py +72 -0
- sage/rings/power_series_pari.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/power_series_pari.pxd +6 -0
- sage/rings/power_series_pari.pyx +934 -0
- sage/rings/tate_algebra.py +1282 -0
- sage/rings/tate_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/tate_algebra_element.pxd +49 -0
- sage/rings/tate_algebra_element.pyx +3464 -0
- sage/rings/tate_algebra_ideal.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/tate_algebra_ideal.pxd +7 -0
- sage/rings/tate_algebra_ideal.pyx +1307 -0
- sage/rings/valuation/all.py +7 -0
- sage/rings/valuation/augmented_valuation.py +2118 -0
- sage/rings/valuation/developing_valuation.py +362 -0
- sage/rings/valuation/gauss_valuation.py +812 -0
- sage/rings/valuation/inductive_valuation.py +1686 -0
- sage/rings/valuation/limit_valuation.py +946 -0
- sage/rings/valuation/mapped_valuation.py +656 -0
- sage/rings/valuation/scaled_valuation.py +322 -0
- sage/rings/valuation/trivial_valuation.py +382 -0
- sage/rings/valuation/valuation.py +1119 -0
- sage/rings/valuation/valuation_space.py +1615 -0
- sage/rings/valuation/valuations_catalog.py +10 -0
- sage/rings/valuation/value_group.py +697 -0
- sage/schemes/all__sagemath_pari.py +1 -0
- sage/schemes/elliptic_curves/all__sagemath_pari.py +1 -0
- sage/schemes/elliptic_curves/descent_two_isogeny_pari.cpython-314-x86_64-linux-musl.so +0 -0
- sage/schemes/elliptic_curves/descent_two_isogeny_pari.pyx +46 -0
- sage_wheels/bin/gp +0 -0
- sage_wheels/bin/gp2c +0 -0
- sage_wheels/bin/gp2c-run +57 -0
- sage_wheels/bin/xeus-gp +0 -0
- sage_wheels/share/gp2c/func.dsc +18414 -0
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
from sage.rings.morphism cimport RingHomomorphism
|
|
3
|
+
from sage.structure.element cimport Element
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
cdef class FrobeniusEndomorphism_padics(RingHomomorphism):
|
|
7
|
+
cdef long _degree
|
|
8
|
+
cdef long _power
|
|
9
|
+
cdef long _order
|
|
10
|
+
|
|
11
|
+
cpdef Element _call_(self, x)
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
# sage.doctest: needs sage.libs.ntl
|
|
3
|
+
"""
|
|
4
|
+
Frobenius endomorphisms on `p`-adic fields
|
|
5
|
+
"""
|
|
6
|
+
# ****************************************************************************
|
|
7
|
+
# Copyright (C) 2013 Xavier Caruso <xavier.caruso@normalesup.org>
|
|
8
|
+
#
|
|
9
|
+
# This program is free software: you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
|
11
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
12
|
+
# (at your option) any later version.
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
# ****************************************************************************
|
|
15
|
+
|
|
16
|
+
from sage.rings.integer cimport Integer
|
|
17
|
+
from sage.rings.infinity import Infinity
|
|
18
|
+
|
|
19
|
+
from sage.categories.homset import Hom
|
|
20
|
+
from sage.structure.element cimport Element
|
|
21
|
+
from sage.structure.richcmp cimport (richcmp, rich_to_bool,
|
|
22
|
+
richcmp_not_equal)
|
|
23
|
+
|
|
24
|
+
from sage.rings.morphism cimport RingHomomorphism
|
|
25
|
+
from sage.rings.padics.padic_generic import pAdicGeneric
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
cdef class FrobeniusEndomorphism_padics(RingHomomorphism):
|
|
29
|
+
"""
|
|
30
|
+
A class implementing Frobenius endomorphisms on `p`-adic fields.
|
|
31
|
+
"""
|
|
32
|
+
def __init__ (self, domain, n=1):
|
|
33
|
+
"""
|
|
34
|
+
INPUT:
|
|
35
|
+
|
|
36
|
+
- ``domain`` -- an unramified `p`-adic field
|
|
37
|
+
|
|
38
|
+
- ``n`` -- integer (default: 1)
|
|
39
|
+
|
|
40
|
+
.. NOTE::
|
|
41
|
+
|
|
42
|
+
`n` may be negative.
|
|
43
|
+
|
|
44
|
+
OUTPUT:
|
|
45
|
+
|
|
46
|
+
The `n`-th power of the absolute (arithmetic) Frobenius
|
|
47
|
+
endomorphism on ``domain``
|
|
48
|
+
|
|
49
|
+
TESTS::
|
|
50
|
+
|
|
51
|
+
sage: from sage.rings.padics.morphism import FrobeniusEndomorphism_padics
|
|
52
|
+
sage: K.<a> = Qq(5^3)
|
|
53
|
+
sage: FrobeniusEndomorphism_padics(K)
|
|
54
|
+
Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^5 on the residue field
|
|
55
|
+
sage: FrobeniusEndomorphism_padics(K,2)
|
|
56
|
+
Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^(5^2) on the residue field
|
|
57
|
+
|
|
58
|
+
sage: FrobeniusEndomorphism_padics(K,a)
|
|
59
|
+
Traceback (most recent call last):
|
|
60
|
+
...
|
|
61
|
+
TypeError: n (=a + O(5^20)) is not an integer
|
|
62
|
+
|
|
63
|
+
sage: K = Qp(5)
|
|
64
|
+
sage: x = polygen(ZZ, 'x')
|
|
65
|
+
sage: L.<pi> = K.extension(x^2 - 5)
|
|
66
|
+
sage: FrobeniusEndomorphism_padics(L)
|
|
67
|
+
Traceback (most recent call last):
|
|
68
|
+
...
|
|
69
|
+
TypeError: The domain must be unramified
|
|
70
|
+
|
|
71
|
+
sage: FrobeniusEndomorphism_padics(QQ)
|
|
72
|
+
Traceback (most recent call last):
|
|
73
|
+
...
|
|
74
|
+
TypeError: The domain must be an instance of pAdicGeneric
|
|
75
|
+
"""
|
|
76
|
+
if not isinstance(domain, pAdicGeneric):
|
|
77
|
+
raise TypeError("The domain must be an instance of pAdicGeneric")
|
|
78
|
+
if domain.absolute_e() != 1:
|
|
79
|
+
raise TypeError("The domain must be unramified")
|
|
80
|
+
try:
|
|
81
|
+
n = Integer(n)
|
|
82
|
+
except (ValueError, TypeError):
|
|
83
|
+
raise TypeError("n (=%s) is not an integer" % n)
|
|
84
|
+
|
|
85
|
+
self._degree = domain.absolute_f()
|
|
86
|
+
self._power = n % self._degree
|
|
87
|
+
self._order = self._degree / domain.absolute_f().gcd(self._power)
|
|
88
|
+
RingHomomorphism.__init__(self, Hom(domain, domain))
|
|
89
|
+
|
|
90
|
+
cdef dict _extra_slots(self):
|
|
91
|
+
"""
|
|
92
|
+
Helper for copying and pickling.
|
|
93
|
+
|
|
94
|
+
TESTS::
|
|
95
|
+
|
|
96
|
+
sage: R.<x> = QQ[]
|
|
97
|
+
sage: U.<a> = Qp(2).extension(x^2 + x + 1)
|
|
98
|
+
sage: F = U.frobenius_endomorphism(); F
|
|
99
|
+
Frobenius endomorphism on 2-adic Unramified Extension Field in a defined by x^2 + x + 1 lifting a |--> a^2 on the residue field
|
|
100
|
+
sage: copy(F)
|
|
101
|
+
Frobenius endomorphism on 2-adic Unramified Extension Field in a defined by x^2 + x + 1 lifting a |--> a^2 on the residue field
|
|
102
|
+
"""
|
|
103
|
+
slots = RingHomomorphism._extra_slots(self)
|
|
104
|
+
slots['_degree'] = self._degree
|
|
105
|
+
slots['_power'] = self._power
|
|
106
|
+
slots['_order'] = self._order
|
|
107
|
+
return slots
|
|
108
|
+
|
|
109
|
+
cdef _update_slots(self, dict slots):
|
|
110
|
+
"""
|
|
111
|
+
Helper for copying and pickling.
|
|
112
|
+
|
|
113
|
+
TESTS::
|
|
114
|
+
|
|
115
|
+
sage: R.<x> = ZZ[]
|
|
116
|
+
sage: U.<a> = Zp(2).extension(x^2 + x + 1)
|
|
117
|
+
sage: F = U.frobenius_endomorphism(); F
|
|
118
|
+
Frobenius endomorphism on 2-adic Unramified Extension Ring in a defined by x^2 + x + 1 lifting a |--> a^2 on the residue field
|
|
119
|
+
sage: loads(dumps(F)) == F
|
|
120
|
+
True
|
|
121
|
+
"""
|
|
122
|
+
self._degree = slots['_degree']
|
|
123
|
+
self._power = slots['_power']
|
|
124
|
+
self._order = slots['_order']
|
|
125
|
+
RingHomomorphism._update_slots(self, slots)
|
|
126
|
+
|
|
127
|
+
def _repr_(self):
|
|
128
|
+
"""
|
|
129
|
+
Return a string representation of this endomorphism.
|
|
130
|
+
|
|
131
|
+
EXAMPLES::
|
|
132
|
+
|
|
133
|
+
sage: K.<a> = Qq(5^3)
|
|
134
|
+
sage: Frob = K.frobenius_endomorphism(); Frob
|
|
135
|
+
Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^5 on the residue field
|
|
136
|
+
|
|
137
|
+
sage: Frob._repr_()
|
|
138
|
+
'Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^5 on the residue field'
|
|
139
|
+
"""
|
|
140
|
+
name = self.domain().variable_name()
|
|
141
|
+
if self._power == 0:
|
|
142
|
+
s = "Identity endomorphism of %s" % self.domain()
|
|
143
|
+
elif self._power == 1:
|
|
144
|
+
s = "Frobenius endomorphism on %s lifting %s |--> %s^%s on the residue field" % (self.domain(), name, name, self.domain().residue_characteristic())
|
|
145
|
+
else:
|
|
146
|
+
s = "Frobenius endomorphism on %s lifting %s |--> %s^(%s^%s) on the residue field" % (self.domain(), name, name, self.domain().residue_characteristic(), self._power)
|
|
147
|
+
return s
|
|
148
|
+
|
|
149
|
+
def _repr_short(self):
|
|
150
|
+
"""
|
|
151
|
+
Return a short string representation of this endomorphism.
|
|
152
|
+
|
|
153
|
+
EXAMPLES::
|
|
154
|
+
|
|
155
|
+
sage: K.<a> = Qq(5^3)
|
|
156
|
+
sage: Frob = K.frobenius_endomorphism(); Frob
|
|
157
|
+
Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^5 on the residue field
|
|
158
|
+
|
|
159
|
+
sage: Frob._repr_short()
|
|
160
|
+
'Frob'
|
|
161
|
+
"""
|
|
162
|
+
if self._power == 0:
|
|
163
|
+
s = "Identity"
|
|
164
|
+
elif self._power == 1:
|
|
165
|
+
s = "Frob"
|
|
166
|
+
else:
|
|
167
|
+
s = "Frob^%s" % self._power
|
|
168
|
+
return s
|
|
169
|
+
|
|
170
|
+
cpdef Element _call_ (self, x):
|
|
171
|
+
"""
|
|
172
|
+
TESTS::
|
|
173
|
+
|
|
174
|
+
sage: K.<a> = Qq(5^3)
|
|
175
|
+
sage: Frob = K.frobenius_endomorphism()
|
|
176
|
+
sage: Frob(a) == a.frobenius()
|
|
177
|
+
True
|
|
178
|
+
"""
|
|
179
|
+
res = x
|
|
180
|
+
for i in range(self._power):
|
|
181
|
+
res = res.frobenius()
|
|
182
|
+
return res
|
|
183
|
+
|
|
184
|
+
def order(self):
|
|
185
|
+
"""
|
|
186
|
+
Return the order of this endomorphism.
|
|
187
|
+
|
|
188
|
+
EXAMPLES::
|
|
189
|
+
|
|
190
|
+
sage: K.<a> = Qq(5^12)
|
|
191
|
+
sage: Frob = K.frobenius_endomorphism()
|
|
192
|
+
sage: Frob.order()
|
|
193
|
+
12
|
|
194
|
+
sage: (Frob^2).order()
|
|
195
|
+
6
|
|
196
|
+
sage: (Frob^9).order()
|
|
197
|
+
4
|
|
198
|
+
"""
|
|
199
|
+
if self._order == 0:
|
|
200
|
+
return Infinity
|
|
201
|
+
else:
|
|
202
|
+
return Integer(self._order)
|
|
203
|
+
|
|
204
|
+
def power(self):
|
|
205
|
+
"""
|
|
206
|
+
Return the smallest integer `n` such that this endomorphism
|
|
207
|
+
is the `n`-th power of the absolute (arithmetic) Frobenius.
|
|
208
|
+
|
|
209
|
+
EXAMPLES::
|
|
210
|
+
|
|
211
|
+
sage: K.<a> = Qq(5^12)
|
|
212
|
+
sage: Frob = K.frobenius_endomorphism()
|
|
213
|
+
sage: Frob.power()
|
|
214
|
+
1
|
|
215
|
+
sage: (Frob^9).power()
|
|
216
|
+
9
|
|
217
|
+
sage: (Frob^13).power()
|
|
218
|
+
1
|
|
219
|
+
"""
|
|
220
|
+
return self._power
|
|
221
|
+
|
|
222
|
+
def __pow__(self, n, modulus):
|
|
223
|
+
"""
|
|
224
|
+
Return the `n`-th iterate of this endomorphism.
|
|
225
|
+
|
|
226
|
+
EXAMPLES::
|
|
227
|
+
|
|
228
|
+
sage: K.<a> = Qq(5^12)
|
|
229
|
+
sage: Frob = K.frobenius_endomorphism()
|
|
230
|
+
sage: Frob^2
|
|
231
|
+
Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^(5^2) on the residue field
|
|
232
|
+
|
|
233
|
+
The result is simplified if possible::
|
|
234
|
+
|
|
235
|
+
sage: Frob^15
|
|
236
|
+
Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^(5^3) on the residue field
|
|
237
|
+
sage: Frob^36
|
|
238
|
+
Identity endomorphism of 5-adic Unramified Extension ...
|
|
239
|
+
"""
|
|
240
|
+
return self.__class__(self.domain(), self.power()*n)
|
|
241
|
+
|
|
242
|
+
def _composition(self, right):
|
|
243
|
+
"""
|
|
244
|
+
Return ``self`` o ``right``.
|
|
245
|
+
|
|
246
|
+
EXAMPLES::
|
|
247
|
+
|
|
248
|
+
sage: K.<a> = Qq(5^12)
|
|
249
|
+
sage: f = K.frobenius_endomorphism(); f
|
|
250
|
+
Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^5 on the residue field
|
|
251
|
+
sage: g = K.frobenius_endomorphism(2); g
|
|
252
|
+
Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^(5^2) on the residue field
|
|
253
|
+
sage: f * g
|
|
254
|
+
Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^(5^3) on the residue field
|
|
255
|
+
|
|
256
|
+
The result is simplified if possible::
|
|
257
|
+
|
|
258
|
+
sage: f = K.frobenius_endomorphism(9)
|
|
259
|
+
sage: g = K.frobenius_endomorphism(10)
|
|
260
|
+
sage: f * g
|
|
261
|
+
Frobenius endomorphism on 5-adic Unramified Extension ... lifting a |--> a^(5^7) on the residue field
|
|
262
|
+
"""
|
|
263
|
+
if isinstance(right,FrobeniusEndomorphism_padics):
|
|
264
|
+
return self.__class__(self.domain(), self._power+right.power())
|
|
265
|
+
else:
|
|
266
|
+
return RingHomomorphism._composition(self,right)
|
|
267
|
+
|
|
268
|
+
def is_injective(self):
|
|
269
|
+
"""
|
|
270
|
+
Return ``True`` since any power of the Frobenius endomorphism
|
|
271
|
+
over an unramified `p`-adic field is always injective.
|
|
272
|
+
|
|
273
|
+
EXAMPLES::
|
|
274
|
+
|
|
275
|
+
sage: K.<a> = Qq(5^3)
|
|
276
|
+
sage: Frob = K.frobenius_endomorphism()
|
|
277
|
+
sage: Frob.is_injective()
|
|
278
|
+
True
|
|
279
|
+
"""
|
|
280
|
+
return True
|
|
281
|
+
|
|
282
|
+
def is_surjective(self):
|
|
283
|
+
"""
|
|
284
|
+
Return ``True`` since any power of the Frobenius endomorphism
|
|
285
|
+
over an unramified `p`-adic field is always surjective.
|
|
286
|
+
|
|
287
|
+
EXAMPLES::
|
|
288
|
+
|
|
289
|
+
sage: K.<a> = Qq(5^3)
|
|
290
|
+
sage: Frob = K.frobenius_endomorphism()
|
|
291
|
+
sage: Frob.is_surjective()
|
|
292
|
+
True
|
|
293
|
+
"""
|
|
294
|
+
return True
|
|
295
|
+
|
|
296
|
+
def is_identity(self):
|
|
297
|
+
"""
|
|
298
|
+
Return ``True`` if this morphism is the identity morphism.
|
|
299
|
+
|
|
300
|
+
EXAMPLES::
|
|
301
|
+
|
|
302
|
+
sage: K.<a> = Qq(5^3)
|
|
303
|
+
sage: Frob = K.frobenius_endomorphism()
|
|
304
|
+
sage: Frob.is_identity()
|
|
305
|
+
False
|
|
306
|
+
sage: (Frob^3).is_identity()
|
|
307
|
+
True
|
|
308
|
+
"""
|
|
309
|
+
return self.power() == 0
|
|
310
|
+
|
|
311
|
+
def __hash__(self):
|
|
312
|
+
r"""
|
|
313
|
+
Return a hash of this morphism.
|
|
314
|
+
|
|
315
|
+
It is the hash of ``(domain, codomain, ('Frob', power)``
|
|
316
|
+
where ``power`` is the smallest integer `n` such that
|
|
317
|
+
this morphism acts by `x \mapsto x^(p^n)` on the residue field.
|
|
318
|
+
|
|
319
|
+
EXAMPLES::
|
|
320
|
+
|
|
321
|
+
sage: K.<a> = Qq(5^3)
|
|
322
|
+
sage: Frob = K.frobenius_endomorphism()
|
|
323
|
+
sage: hash(Frob) # indirect doctest, random
|
|
324
|
+
2818440606874670810
|
|
325
|
+
"""
|
|
326
|
+
domain = self.domain()
|
|
327
|
+
codomain = self.codomain()
|
|
328
|
+
return hash((domain, codomain, ('Frob', self._power)))
|
|
329
|
+
|
|
330
|
+
cpdef _richcmp_(left, right, int op):
|
|
331
|
+
"""
|
|
332
|
+
Compare ``left`` and ``right``.
|
|
333
|
+
|
|
334
|
+
EXAMPLES::
|
|
335
|
+
|
|
336
|
+
sage: K.<a> = Qq(5^3)
|
|
337
|
+
sage: F = K.frobenius_endomorphism()
|
|
338
|
+
sage: G = K.frobenius_endomorphism(4)
|
|
339
|
+
|
|
340
|
+
sage: F == G
|
|
341
|
+
True
|
|
342
|
+
"""
|
|
343
|
+
if left is right:
|
|
344
|
+
return rich_to_bool(op, 0)
|
|
345
|
+
l_domain = left.domain()
|
|
346
|
+
r_domain = right.domain()
|
|
347
|
+
if l_domain != r_domain:
|
|
348
|
+
return richcmp_not_equal(l_domain, r_domain, op)
|
|
349
|
+
|
|
350
|
+
l_codomain = left.codomain()
|
|
351
|
+
r_codomain = right.codomain()
|
|
352
|
+
if l_codomain != r_codomain:
|
|
353
|
+
return richcmp_not_equal(l_codomain, r_codomain, op)
|
|
354
|
+
|
|
355
|
+
if isinstance(right, FrobeniusEndomorphism_padics):
|
|
356
|
+
return richcmp(left._power, (<FrobeniusEndomorphism_padics>right)._power, op)
|
|
357
|
+
|
|
358
|
+
try:
|
|
359
|
+
for x in l_domain.gens():
|
|
360
|
+
lx = left(x)
|
|
361
|
+
rx = right(x)
|
|
362
|
+
if lx != rx:
|
|
363
|
+
return richcmp_not_equal(lx, rx, op)
|
|
364
|
+
return rich_to_bool(op, 0)
|
|
365
|
+
except (AttributeError, NotImplementedError):
|
|
366
|
+
raise NotImplementedError
|