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
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
r"""
|
|
3
|
+
`p`-adic Base Generic
|
|
4
|
+
|
|
5
|
+
A superclass for implementations of `\ZZ_p` and `\QQ_p`.
|
|
6
|
+
|
|
7
|
+
AUTHORS:
|
|
8
|
+
|
|
9
|
+
- David Roe
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
#*****************************************************************************
|
|
13
|
+
# Copyright (C) 2007-2013 David Roe <roed.math@gmail.com>
|
|
14
|
+
# William Stein <wstein@gmail.com>
|
|
15
|
+
#
|
|
16
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
17
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
18
|
+
# the License, or (at your option) any later version.
|
|
19
|
+
#
|
|
20
|
+
# http://www.gnu.org/licenses/
|
|
21
|
+
#*****************************************************************************
|
|
22
|
+
|
|
23
|
+
from sage.rings.integer_ring import ZZ
|
|
24
|
+
from sage.rings.rational_field import QQ
|
|
25
|
+
|
|
26
|
+
from .padic_generic import pAdicGeneric
|
|
27
|
+
from .misc import precprint
|
|
28
|
+
from sage.rings.padics.pow_computer import PowComputer
|
|
29
|
+
from sage.rings.padics.padic_capped_relative_element import pAdicCoercion_ZZ_CR, pAdicCoercion_QQ_CR, pAdicConvert_QQ_CR
|
|
30
|
+
from sage.rings.padics.padic_capped_absolute_element import pAdicCoercion_ZZ_CA, pAdicConvert_QQ_CA
|
|
31
|
+
from sage.rings.padics.padic_fixed_mod_element import pAdicCoercion_ZZ_FM, pAdicConvert_QQ_FM
|
|
32
|
+
from sage.rings.padics.padic_floating_point_element import pAdicCoercion_ZZ_FP, pAdicCoercion_QQ_FP, pAdicConvert_QQ_FP
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class pAdicBaseGeneric(pAdicGeneric):
|
|
36
|
+
_implementation = 'GMP'
|
|
37
|
+
|
|
38
|
+
def __init__(self, p, prec, print_mode, names, element_class, category=None):
|
|
39
|
+
"""
|
|
40
|
+
Initialization.
|
|
41
|
+
|
|
42
|
+
TESTS::
|
|
43
|
+
|
|
44
|
+
sage: R = Zp(5) # indirect doctest
|
|
45
|
+
"""
|
|
46
|
+
if self.is_relaxed():
|
|
47
|
+
from sage.rings.padics.pow_computer_flint import PowComputer_flint
|
|
48
|
+
self.prime_pow = PowComputer_flint(p, 1, 1, 1, self.is_field())
|
|
49
|
+
else:
|
|
50
|
+
self.prime_pow = PowComputer(p, max(min(prec - 1, 30), 1), prec, self.is_field(), self._prec_type())
|
|
51
|
+
pAdicGeneric.__init__(self, self, p, prec, print_mode, names, element_class, category=category)
|
|
52
|
+
if self.is_field():
|
|
53
|
+
if self.is_capped_relative():
|
|
54
|
+
coerce_list = [pAdicCoercion_ZZ_CR(self), pAdicCoercion_QQ_CR(self)]
|
|
55
|
+
convert_list = []
|
|
56
|
+
elif self.is_floating_point():
|
|
57
|
+
coerce_list = [pAdicCoercion_ZZ_FP(self), pAdicCoercion_QQ_FP(self)]
|
|
58
|
+
convert_list = []
|
|
59
|
+
elif self.is_lattice_prec():
|
|
60
|
+
coerce_list = [QQ]
|
|
61
|
+
convert_list = []
|
|
62
|
+
elif self.is_relaxed():
|
|
63
|
+
coerce_list = [QQ]
|
|
64
|
+
convert_list = []
|
|
65
|
+
else:
|
|
66
|
+
raise RuntimeError
|
|
67
|
+
elif self.is_capped_relative():
|
|
68
|
+
coerce_list = [pAdicCoercion_ZZ_CR(self)]
|
|
69
|
+
convert_list = [pAdicConvert_QQ_CR(self)]
|
|
70
|
+
elif self.is_capped_absolute():
|
|
71
|
+
coerce_list = [pAdicCoercion_ZZ_CA(self)]
|
|
72
|
+
convert_list = [pAdicConvert_QQ_CA(self)]
|
|
73
|
+
elif self.is_fixed_mod():
|
|
74
|
+
coerce_list = [pAdicCoercion_ZZ_FM(self)]
|
|
75
|
+
convert_list = [pAdicConvert_QQ_FM(self)]
|
|
76
|
+
elif self.is_floating_point():
|
|
77
|
+
coerce_list = [pAdicCoercion_ZZ_FP(self)]
|
|
78
|
+
convert_list = [pAdicConvert_QQ_FP(self)]
|
|
79
|
+
elif self.is_lattice_prec():
|
|
80
|
+
coerce_list = [ZZ]
|
|
81
|
+
convert_list = [QQ]
|
|
82
|
+
elif self.is_relaxed():
|
|
83
|
+
coerce_list = [ZZ]
|
|
84
|
+
convert_list = [QQ]
|
|
85
|
+
else:
|
|
86
|
+
raise RuntimeError
|
|
87
|
+
self.Element = element_class
|
|
88
|
+
self._populate_coercion_lists_(coerce_list=coerce_list, convert_list=convert_list)
|
|
89
|
+
|
|
90
|
+
def _repr_(self, do_latex=False):
|
|
91
|
+
r"""
|
|
92
|
+
Return a print representation of this `p`-adic ring or field.
|
|
93
|
+
|
|
94
|
+
EXAMPLES::
|
|
95
|
+
|
|
96
|
+
sage: K = Zp(17); K # indirect doctest
|
|
97
|
+
17-adic Ring with capped relative precision 20
|
|
98
|
+
sage: latex(K)
|
|
99
|
+
\Bold{Z}_{17}
|
|
100
|
+
sage: K = ZpCA(17); K # indirect doctest
|
|
101
|
+
17-adic Ring with capped absolute precision 20
|
|
102
|
+
sage: latex(K)
|
|
103
|
+
\Bold{Z}_{17}
|
|
104
|
+
sage: K = ZpFP(17); K # indirect doctest
|
|
105
|
+
17-adic Ring with floating precision 20
|
|
106
|
+
sage: latex(K)
|
|
107
|
+
\Bold{Z}_{17}
|
|
108
|
+
sage: K = ZpFM(7); K
|
|
109
|
+
7-adic Ring of fixed modulus 7^20
|
|
110
|
+
sage: latex(K) # indirect doctest
|
|
111
|
+
\Bold{Z}_{7}
|
|
112
|
+
sage: K = ZpLF(2); K # indirect doctest
|
|
113
|
+
doctest:...: FutureWarning: This class/method/function is marked as experimental. It, its functionality or its interface might change without a formal deprecation.
|
|
114
|
+
See https://github.com/sagemath/sage/issues/23505 for details.
|
|
115
|
+
2-adic Ring with lattice-float precision
|
|
116
|
+
sage: latex(K)
|
|
117
|
+
\Bold{Z}_{2}
|
|
118
|
+
sage: K = Qp(17); K # indirect doctest
|
|
119
|
+
17-adic Field with capped relative precision 20
|
|
120
|
+
sage: latex(K)
|
|
121
|
+
\Bold{Q}_{17}
|
|
122
|
+
sage: K = QpFP(17); K # indirect doctest
|
|
123
|
+
17-adic Field with floating precision 20
|
|
124
|
+
sage: latex(K)
|
|
125
|
+
\Bold{Q}_{17}
|
|
126
|
+
sage: K = QpLC(2); K # indirect doctest
|
|
127
|
+
2-adic Field with lattice-cap precision
|
|
128
|
+
sage: latex(K)
|
|
129
|
+
\Bold{Q}_{2}
|
|
130
|
+
"""
|
|
131
|
+
if do_latex:
|
|
132
|
+
if self.is_field():
|
|
133
|
+
s = r"\Bold{Q}_{%s}" % self.prime()
|
|
134
|
+
else:
|
|
135
|
+
s = r"\Bold{Z}_{%s}" % self.prime()
|
|
136
|
+
if hasattr(self, '_label') and self._label:
|
|
137
|
+
s = r"\verb'%s' (\simeq %s)" % (self._label, s)
|
|
138
|
+
else:
|
|
139
|
+
s = "Field " if self.is_field() else "Ring "
|
|
140
|
+
s = "%s-adic " % self.prime() + s + precprint(self._prec_type(), self.precision_cap(), self.prime())
|
|
141
|
+
if hasattr(self, '_label') and self._label:
|
|
142
|
+
s += " (label: %s)" % self._label
|
|
143
|
+
return s
|
|
144
|
+
|
|
145
|
+
def exact_field(self):
|
|
146
|
+
"""
|
|
147
|
+
Return the rational field.
|
|
148
|
+
|
|
149
|
+
For compatibility with extensions of `p`-adics.
|
|
150
|
+
|
|
151
|
+
EXAMPLES::
|
|
152
|
+
|
|
153
|
+
sage: Zp(5).exact_field()
|
|
154
|
+
Rational Field
|
|
155
|
+
"""
|
|
156
|
+
from sage.rings.rational_field import QQ
|
|
157
|
+
return QQ
|
|
158
|
+
|
|
159
|
+
def exact_ring(self):
|
|
160
|
+
"""
|
|
161
|
+
Return the integer ring.
|
|
162
|
+
|
|
163
|
+
EXAMPLES::
|
|
164
|
+
|
|
165
|
+
sage: Zp(5).exact_ring()
|
|
166
|
+
Integer Ring
|
|
167
|
+
"""
|
|
168
|
+
from sage.rings.integer_ring import ZZ
|
|
169
|
+
return ZZ
|
|
170
|
+
|
|
171
|
+
def is_isomorphic(self, ring):
|
|
172
|
+
r"""
|
|
173
|
+
Return whether ``self`` and ``ring`` are isomorphic, i.e. whether
|
|
174
|
+
``ring`` is an implementation of `\ZZ_p` for the same prime as ``self``.
|
|
175
|
+
|
|
176
|
+
INPUT:
|
|
177
|
+
|
|
178
|
+
- ``self`` -- a `p`-adic ring
|
|
179
|
+
|
|
180
|
+
- ``ring`` -- a ring
|
|
181
|
+
|
|
182
|
+
OUTPUT: ``boolean`` -- whether ``ring`` is an implementation of \ZZ_p`
|
|
183
|
+
for the same prime as ``self``
|
|
184
|
+
|
|
185
|
+
EXAMPLES::
|
|
186
|
+
|
|
187
|
+
sage: R = Zp(5, 15, print_mode='digits'); S = Zp(5, 44, print_max_terms=4); R.is_isomorphic(S)
|
|
188
|
+
True
|
|
189
|
+
"""
|
|
190
|
+
return isinstance(ring, pAdicBaseGeneric) and self.prime() == ring.prime() and self.is_field() == ring.is_field()
|
|
191
|
+
|
|
192
|
+
def gen(self, n=0):
|
|
193
|
+
"""
|
|
194
|
+
Return the `n`-th generator of this extension. For base
|
|
195
|
+
rings/fields, we consider the generator to be the prime.
|
|
196
|
+
|
|
197
|
+
EXAMPLES::
|
|
198
|
+
|
|
199
|
+
sage: R = Zp(5); R.gen()
|
|
200
|
+
5 + O(5^21)
|
|
201
|
+
"""
|
|
202
|
+
if n != 0:
|
|
203
|
+
raise IndexError("only one generator")
|
|
204
|
+
return self(self.prime())
|
|
205
|
+
|
|
206
|
+
def modulus(self, exact=False):
|
|
207
|
+
r"""
|
|
208
|
+
Return the polynomial defining this extension.
|
|
209
|
+
|
|
210
|
+
For compatibility with extension fields; we define the modulus to be `x-1`.
|
|
211
|
+
|
|
212
|
+
INPUT:
|
|
213
|
+
|
|
214
|
+
- ``exact`` -- boolean (default: ``False``); whether to return a
|
|
215
|
+
polynomial with integer entries
|
|
216
|
+
|
|
217
|
+
EXAMPLES::
|
|
218
|
+
|
|
219
|
+
sage: Zp(5).modulus(exact=True)
|
|
220
|
+
x
|
|
221
|
+
"""
|
|
222
|
+
return self.defining_polynomial(exact=exact)
|
|
223
|
+
|
|
224
|
+
def absolute_discriminant(self):
|
|
225
|
+
"""
|
|
226
|
+
Return the absolute discriminant of this `p`-adic ring.
|
|
227
|
+
|
|
228
|
+
EXAMPLES::
|
|
229
|
+
|
|
230
|
+
sage: Zp(5).absolute_discriminant()
|
|
231
|
+
1
|
|
232
|
+
"""
|
|
233
|
+
return 1
|
|
234
|
+
|
|
235
|
+
def discriminant(self, K=None):
|
|
236
|
+
"""
|
|
237
|
+
Return the discriminant of this `p`-adic ring over ``K``.
|
|
238
|
+
|
|
239
|
+
INPUT:
|
|
240
|
+
|
|
241
|
+
- ``self`` -- a `p`-adic ring
|
|
242
|
+
|
|
243
|
+
- ``K`` -- a sub-ring of ``self`` or ``None`` (default: ``None``)
|
|
244
|
+
|
|
245
|
+
OUTPUT:
|
|
246
|
+
|
|
247
|
+
integer; the discriminant of this ring over ``K`` (or the absolute
|
|
248
|
+
discriminant if ``K`` is ``None``)
|
|
249
|
+
|
|
250
|
+
EXAMPLES::
|
|
251
|
+
|
|
252
|
+
sage: Zp(5).discriminant()
|
|
253
|
+
1
|
|
254
|
+
"""
|
|
255
|
+
if (K is None or K is self):
|
|
256
|
+
return 1
|
|
257
|
+
else:
|
|
258
|
+
raise ValueError("Ground Ring must be a subring of self")
|
|
259
|
+
|
|
260
|
+
def is_abelian(self):
|
|
261
|
+
"""
|
|
262
|
+
Return whether the Galois group is abelian, i.e. ``True``.
|
|
263
|
+
#should this be automorphism group?
|
|
264
|
+
|
|
265
|
+
EXAMPLES::
|
|
266
|
+
|
|
267
|
+
sage: R = Zp(3, 10,'fixed-mod'); R.is_abelian()
|
|
268
|
+
True
|
|
269
|
+
"""
|
|
270
|
+
return True
|
|
271
|
+
|
|
272
|
+
def is_normal(self):
|
|
273
|
+
"""
|
|
274
|
+
Return whether or not this is a normal extension, i.e. ``True``.
|
|
275
|
+
|
|
276
|
+
EXAMPLES::
|
|
277
|
+
|
|
278
|
+
sage: R = Zp(3, 10,'fixed-mod'); R.is_normal()
|
|
279
|
+
True
|
|
280
|
+
"""
|
|
281
|
+
return True
|
|
282
|
+
|
|
283
|
+
def uniformizer(self):
|
|
284
|
+
"""
|
|
285
|
+
Return a uniformizer for this ring.
|
|
286
|
+
|
|
287
|
+
EXAMPLES::
|
|
288
|
+
|
|
289
|
+
sage: R = Zp(3,5,'fixed-mod', 'series')
|
|
290
|
+
sage: R.uniformizer()
|
|
291
|
+
3
|
|
292
|
+
"""
|
|
293
|
+
return self(self.prime_pow._prime())
|
|
294
|
+
|
|
295
|
+
def uniformizer_pow(self, n):
|
|
296
|
+
"""
|
|
297
|
+
Return the `n`-th power of the uniformizer of ``self`` (as
|
|
298
|
+
an element of ``self``).
|
|
299
|
+
|
|
300
|
+
EXAMPLES::
|
|
301
|
+
|
|
302
|
+
sage: R = Zp(5)
|
|
303
|
+
sage: R.uniformizer_pow(5)
|
|
304
|
+
5^5 + O(5^25)
|
|
305
|
+
sage: R.uniformizer_pow(infinity)
|
|
306
|
+
0
|
|
307
|
+
"""
|
|
308
|
+
return self(self.prime_pow(n))
|
|
309
|
+
|
|
310
|
+
def _uniformizer_print(self):
|
|
311
|
+
"""
|
|
312
|
+
Return how the uniformizer is supposed to print.
|
|
313
|
+
|
|
314
|
+
EXAMPLES::
|
|
315
|
+
|
|
316
|
+
sage: R = Zp(5, names='pi'); R._uniformizer_print()
|
|
317
|
+
'pi'
|
|
318
|
+
"""
|
|
319
|
+
return self.variable_name()
|
|
320
|
+
|
|
321
|
+
def has_pth_root(self):
|
|
322
|
+
r"""
|
|
323
|
+
Return whether or not `\ZZ_p` has a primitive `p`-th
|
|
324
|
+
root of unity.
|
|
325
|
+
|
|
326
|
+
EXAMPLES::
|
|
327
|
+
|
|
328
|
+
sage: Zp(2).has_pth_root()
|
|
329
|
+
True
|
|
330
|
+
sage: Zp(17).has_pth_root()
|
|
331
|
+
False
|
|
332
|
+
"""
|
|
333
|
+
return (self.prime() == 2)
|
|
334
|
+
|
|
335
|
+
def has_root_of_unity(self, n):
|
|
336
|
+
r"""
|
|
337
|
+
Return whether or not `\ZZ_p` has a primitive `n`-th
|
|
338
|
+
root of unity.
|
|
339
|
+
|
|
340
|
+
INPUT:
|
|
341
|
+
|
|
342
|
+
- ``self`` -- a `p`-adic ring
|
|
343
|
+
|
|
344
|
+
- ``n`` -- integer
|
|
345
|
+
|
|
346
|
+
OUTPUT:
|
|
347
|
+
|
|
348
|
+
boolean; whether ``self`` has primitive `n`-th root of unity
|
|
349
|
+
|
|
350
|
+
EXAMPLES::
|
|
351
|
+
|
|
352
|
+
sage: R=Zp(37)
|
|
353
|
+
sage: R.has_root_of_unity(12)
|
|
354
|
+
True
|
|
355
|
+
sage: R.has_root_of_unity(11)
|
|
356
|
+
False
|
|
357
|
+
"""
|
|
358
|
+
if (self.prime() == 2):
|
|
359
|
+
return n.divides(2)
|
|
360
|
+
else:
|
|
361
|
+
return n.divides(self.prime() - 1)
|
|
362
|
+
|
|
363
|
+
def zeta(self, n=None):
|
|
364
|
+
r"""
|
|
365
|
+
Return a generator of the group of roots of unity.
|
|
366
|
+
|
|
367
|
+
INPUT:
|
|
368
|
+
|
|
369
|
+
- ``self`` -- a `p`-adic ring
|
|
370
|
+
|
|
371
|
+
- ``n`` -- integer or ``None`` (default: ``None``)
|
|
372
|
+
|
|
373
|
+
OUTPUT:
|
|
374
|
+
|
|
375
|
+
``element``; a generator of the `n`-th roots of unity, or a generator
|
|
376
|
+
of the full group of roots of unity if ``n`` is ``None``
|
|
377
|
+
|
|
378
|
+
EXAMPLES::
|
|
379
|
+
|
|
380
|
+
sage: R = Zp(37,5)
|
|
381
|
+
sage: R.zeta(12)
|
|
382
|
+
8 + 24*37 + 37^2 + 29*37^3 + 23*37^4 + O(37^5)
|
|
383
|
+
"""
|
|
384
|
+
if (self.prime() == 2):
|
|
385
|
+
if (n is None) or (n == 2):
|
|
386
|
+
return self(-1)
|
|
387
|
+
if n == 1:
|
|
388
|
+
return self(1)
|
|
389
|
+
else:
|
|
390
|
+
raise ValueError("No, %sth root of unity in self" % n)
|
|
391
|
+
else:
|
|
392
|
+
from sage.rings.finite_rings.finite_field_constructor import GF
|
|
393
|
+
return self.teichmuller(GF(self.prime()).zeta(n).lift())
|
|
394
|
+
|
|
395
|
+
def zeta_order(self):
|
|
396
|
+
"""
|
|
397
|
+
Return the order of the group of roots of unity.
|
|
398
|
+
|
|
399
|
+
EXAMPLES::
|
|
400
|
+
|
|
401
|
+
sage: R = Zp(37); R.zeta_order()
|
|
402
|
+
36
|
|
403
|
+
sage: Zp(2).zeta_order()
|
|
404
|
+
2
|
|
405
|
+
"""
|
|
406
|
+
if (self.prime() == 2):
|
|
407
|
+
return 2
|
|
408
|
+
else:
|
|
409
|
+
return self.prime() - 1
|
|
410
|
+
|
|
411
|
+
def plot(self, max_points=2500, **args):
|
|
412
|
+
r"""
|
|
413
|
+
Create a visualization of this `p`-adic ring as a fractal
|
|
414
|
+
similar to a generalization of the Sierpi\'nski
|
|
415
|
+
triangle.
|
|
416
|
+
|
|
417
|
+
The resulting image attempts to capture the
|
|
418
|
+
algebraic and topological characteristics of `\ZZ_p`.
|
|
419
|
+
|
|
420
|
+
INPUT:
|
|
421
|
+
|
|
422
|
+
- ``max_points`` -- the maximum number or points to plot,
|
|
423
|
+
which controls the depth of recursion (default: 2500)
|
|
424
|
+
|
|
425
|
+
- ``**args`` -- color, size, etc. that are passed to the
|
|
426
|
+
underlying point graphics objects
|
|
427
|
+
|
|
428
|
+
REFERENCES:
|
|
429
|
+
|
|
430
|
+
- Cuoco, A. ''Visualizing the `p`-adic Integers'', The
|
|
431
|
+
American Mathematical Monthly, Vol. 98, No. 4 (Apr., 1991),
|
|
432
|
+
pp. 355-364
|
|
433
|
+
|
|
434
|
+
EXAMPLES::
|
|
435
|
+
|
|
436
|
+
sage: Zp(3).plot() # needs sage.plot
|
|
437
|
+
Graphics object consisting of 1 graphics primitive
|
|
438
|
+
sage: Zp(5).plot(max_points=625) # needs sage.plot
|
|
439
|
+
Graphics object consisting of 1 graphics primitive
|
|
440
|
+
sage: Zp(23).plot(rgbcolor=(1,0,0)) # needs sage.plot
|
|
441
|
+
Graphics object consisting of 1 graphics primitive
|
|
442
|
+
"""
|
|
443
|
+
if 'pointsize' not in args:
|
|
444
|
+
args['pointsize'] = 1
|
|
445
|
+
from sage.misc.mrange import cartesian_product_iterator
|
|
446
|
+
from sage.rings.real_double import RDF
|
|
447
|
+
from sage.plot.all import points
|
|
448
|
+
p = self.prime()
|
|
449
|
+
phi = 2*RDF.pi()/p
|
|
450
|
+
V = RDF**2
|
|
451
|
+
vs = [V([(phi*t).sin(), (phi*t).cos()]) for t in range(p)]
|
|
452
|
+
all = []
|
|
453
|
+
depth = max(RDF(max_points).log(p).floor(), 1)
|
|
454
|
+
scale = min(RDF(1.5/p), 1/RDF(3))
|
|
455
|
+
pts = [vs]*depth
|
|
456
|
+
if depth == 1 and 23 < p < max_points:
|
|
457
|
+
extras = int(max_points/p)
|
|
458
|
+
if p/extras > 5:
|
|
459
|
+
pts = [vs]*depth + [vs[::extras]]
|
|
460
|
+
for digits in cartesian_product_iterator(pts):
|
|
461
|
+
p = sum([v * scale**n for n, v in enumerate(digits)])
|
|
462
|
+
all.append(tuple(p))
|
|
463
|
+
g = points(all, **args)
|
|
464
|
+
# Set default plotting options
|
|
465
|
+
g.axes(False)
|
|
466
|
+
g.set_aspect_ratio(1)
|
|
467
|
+
return g
|