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,388 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
r"""
|
|
3
|
+
This linkage file implements the padics API for ramified extensions using Sage
|
|
4
|
+
Polynomials.
|
|
5
|
+
|
|
6
|
+
It contains the bits that are specific for ramified extensions. Everything that
|
|
7
|
+
is independent of ramification is in Polynomial_shared.pxi.
|
|
8
|
+
|
|
9
|
+
.. NOTE::
|
|
10
|
+
|
|
11
|
+
There are no doctests in this file since the functions here cannot be
|
|
12
|
+
called directly from Python. Testing of this function is necessarily
|
|
13
|
+
indirect and mostly done through arithmetic black-box tests that are part
|
|
14
|
+
of the test suites of the `p`-adic parents.
|
|
15
|
+
|
|
16
|
+
AUTHORS:
|
|
17
|
+
|
|
18
|
+
- David Roe, Julian Rüth (2017-06-11): initial version
|
|
19
|
+
"""
|
|
20
|
+
# ****************************************************************************
|
|
21
|
+
# Copyright (C) 2017 David Roe <roed.math@gmail.com>
|
|
22
|
+
# 2017 Julian Rüth <julian.rueth@fsfe.org>
|
|
23
|
+
#
|
|
24
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
25
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
26
|
+
# the License, or (at your option) any later version.
|
|
27
|
+
#
|
|
28
|
+
# https://www.gnu.org/licenses/
|
|
29
|
+
# ****************************************************************************
|
|
30
|
+
from sage.rings.integer cimport Integer
|
|
31
|
+
from sage.ext.stdsage cimport PY_NEW
|
|
32
|
+
from sage.libs.gmp.mpz cimport *
|
|
33
|
+
|
|
34
|
+
include "sage/libs/linkages/padics/Polynomial_shared.pxi"
|
|
35
|
+
|
|
36
|
+
cdef inline bint creduce(celement out, celement a, long prec, PowComputer_ prime_pow) except -1:
|
|
37
|
+
r"""
|
|
38
|
+
Reduce ``a`` modulo a power of the maximal ideal.
|
|
39
|
+
|
|
40
|
+
INPUT:
|
|
41
|
+
|
|
42
|
+
- ``out`` -- a ``celement`` to store the reduction
|
|
43
|
+
|
|
44
|
+
- ``a`` -- the ``celement`` to be reduced
|
|
45
|
+
|
|
46
|
+
- ``prec`` -- a ``long``, the precision to reduce modulo
|
|
47
|
+
|
|
48
|
+
- ``prime_pow`` -- the ``PowComputer`` for the ring
|
|
49
|
+
|
|
50
|
+
OUTPUT: ``True`` if the reduction is zero, ``False`` otherwise
|
|
51
|
+
"""
|
|
52
|
+
cdef celement ared = a % prime_pow.modulus
|
|
53
|
+
if ared is a and out is not a:
|
|
54
|
+
out._coeffs = ared._coeffs[:]
|
|
55
|
+
else:
|
|
56
|
+
out._coeffs = ared._coeffs
|
|
57
|
+
cdef long coeff_prec = prec / prime_pow.e + 1
|
|
58
|
+
cdef long break_pt = prec % prime_pow.e
|
|
59
|
+
for i in range(len(out._coeffs)):
|
|
60
|
+
if i == break_pt:
|
|
61
|
+
coeff_prec -= 1
|
|
62
|
+
out._coeffs[i] = out._coeffs[i].add_bigoh(coeff_prec)
|
|
63
|
+
out._normalize()
|
|
64
|
+
return out == 0
|
|
65
|
+
|
|
66
|
+
cdef inline bint creduce_small(celement out, celement a, long prec, PowComputer_ prime_pow) except -1:
|
|
67
|
+
r"""
|
|
68
|
+
Reduce ``a`` modulo a power of the maximal ideal.
|
|
69
|
+
|
|
70
|
+
Similar to ``creduce`` but this function assumes that at most one
|
|
71
|
+
addition/subtraction has happened on reduced inputs. For integral inputs
|
|
72
|
+
this translates to the assumption that `-p^\mathrm{prec} < a < 2p^\mathrm{prec}`.
|
|
73
|
+
|
|
74
|
+
INPUT:
|
|
75
|
+
|
|
76
|
+
- ``out`` -- a ``celement`` to store the reduction
|
|
77
|
+
|
|
78
|
+
- ``a`` -- the ``celement`` to be reduced
|
|
79
|
+
|
|
80
|
+
- ``prec`` -- a ``long``, the precision to reduce modulo
|
|
81
|
+
|
|
82
|
+
- ``prime_pow`` -- the ``PowComputer`` for the ring
|
|
83
|
+
|
|
84
|
+
OUTPUT: ``True`` if the reduction is zero, ``False`` otherwise
|
|
85
|
+
"""
|
|
86
|
+
return creduce(out, a, prec, prime_pow)
|
|
87
|
+
|
|
88
|
+
cdef inline long cvaluation(celement a, long prec, PowComputer_ prime_pow) except -1:
|
|
89
|
+
r"""
|
|
90
|
+
Return the maximum power of the uniformizer dividing ``a``.
|
|
91
|
+
|
|
92
|
+
This function differs from :meth:`cremove` in that the unit is discarded.
|
|
93
|
+
|
|
94
|
+
INPUT:
|
|
95
|
+
|
|
96
|
+
- ``a`` -- the element whose valuation is desired
|
|
97
|
+
|
|
98
|
+
- ``prec`` -- a ``long``; if the valuation of ``a`` exceeds ``prec``, this
|
|
99
|
+
function returns ``prec``. In particular, ``prec`` is returned if ``a``
|
|
100
|
+
is zero.
|
|
101
|
+
|
|
102
|
+
- ``prec`` -- a ``long``, the return value if ``a`` is zero
|
|
103
|
+
|
|
104
|
+
- ``prime_pow`` -- the ``PowComputer`` for the ring
|
|
105
|
+
|
|
106
|
+
OUTPUT:
|
|
107
|
+
|
|
108
|
+
The number of times the uniformizer divides ``a``, or ``prec`` if that is
|
|
109
|
+
higher.
|
|
110
|
+
"""
|
|
111
|
+
C = a._coeffs
|
|
112
|
+
if not C:
|
|
113
|
+
return prec
|
|
114
|
+
cdef long ret = maxordp
|
|
115
|
+
|
|
116
|
+
for i,c in enumerate(C):
|
|
117
|
+
ret = min(ret, c.valuation()*prime_pow.e + i)
|
|
118
|
+
|
|
119
|
+
return ret
|
|
120
|
+
|
|
121
|
+
cdef inline int cshift(celement shifted, celement rem, celement a, long n, long prec, PowComputer_ prime_pow, bint reduce_afterward) except -1:
|
|
122
|
+
r"""
|
|
123
|
+
Multiply ``a`` by an ``n``-th power of the uniformizer.
|
|
124
|
+
|
|
125
|
+
This function shifts the π-adic expansion of ``a`` by ``n``, i.e., it
|
|
126
|
+
multiplies ``a`` by the `n`-th power of the uniformizer and drops any terms
|
|
127
|
+
with negative powers of the uniformizer in the π-adic expansion.
|
|
128
|
+
|
|
129
|
+
INPUT:
|
|
130
|
+
|
|
131
|
+
- ``shifted`` -- a ``celement`` to store the product with π^n
|
|
132
|
+
|
|
133
|
+
- ``rem`` -- a ``celement`` to store the remainder, when `n < 0`
|
|
134
|
+
|
|
135
|
+
- ``a`` -- the ``celement`` to shift
|
|
136
|
+
|
|
137
|
+
- ``n`` -- a ``long``, the amount to shift by
|
|
138
|
+
|
|
139
|
+
- ``prec`` -- a ``long``, a precision modulo which to reduce if
|
|
140
|
+
``reduce_afterward`` is set
|
|
141
|
+
|
|
142
|
+
- ``prime_pow`` -- the ``PowComputer`` for the ring
|
|
143
|
+
|
|
144
|
+
- ``reduce_afterward`` -- whether to :meth:`creduce` ``shifted`` before
|
|
145
|
+
returning
|
|
146
|
+
"""
|
|
147
|
+
cdef long v
|
|
148
|
+
notrunc = False
|
|
149
|
+
if n >= 0:
|
|
150
|
+
notrunc = True
|
|
151
|
+
else:
|
|
152
|
+
v = cvaluation(a, prec, prime_pow)
|
|
153
|
+
notrunc = (v >= -n)
|
|
154
|
+
if notrunc:
|
|
155
|
+
rem._coeffs = []
|
|
156
|
+
return cshift_notrunc(shifted, a, n, prec, prime_pow, reduce_afterward)
|
|
157
|
+
if v > 0:
|
|
158
|
+
b = prime_pow.poly_ring(0)
|
|
159
|
+
cshift_notrunc(b, a, -v, prec, prime_pow, False)
|
|
160
|
+
a = b
|
|
161
|
+
n += v
|
|
162
|
+
# Because the π-adic and p-adic expansions are different,
|
|
163
|
+
# there isn't an obvious way to translate shift-with-truncation
|
|
164
|
+
# in the π-adic expansion in terms of shifting by p in the base.
|
|
165
|
+
# We thus have to compute the first few terms of the π-adic expansion
|
|
166
|
+
# and subtract them.
|
|
167
|
+
_rem = prime_pow.poly_ring(0)
|
|
168
|
+
for i in range(-n):
|
|
169
|
+
rep = a[0]._modp_rep(return_list=False)
|
|
170
|
+
_rem += rep * prime_pow.uniformizer_pow(i)
|
|
171
|
+
a -= rep
|
|
172
|
+
a *= prime_pow.px_pow(1)
|
|
173
|
+
a %= prime_pow.modulus()
|
|
174
|
+
a = a.map_coefficients(lambda c: c>>1)
|
|
175
|
+
cshift_notrunc(rem, _rem, v, prime_pow.ram_prec_cap, prime_pow, True)
|
|
176
|
+
if reduce_afterward:
|
|
177
|
+
creduce(shifted, a, prec, prime_pow)
|
|
178
|
+
else:
|
|
179
|
+
shifted._coeffs = a._coeffs[:]
|
|
180
|
+
|
|
181
|
+
cdef inline int cshift_notrunc(celement out, celement a, long n, long prec, PowComputer_ prime_pow, bint reduce_afterward) except -1:
|
|
182
|
+
r"""
|
|
183
|
+
Multiply ``a`` with an ``n``-th power of the uniformizer.
|
|
184
|
+
|
|
185
|
+
This method is identical to :meth:`cshift` but assumes that the valuation
|
|
186
|
+
of ``a`` is at least ``-n``.
|
|
187
|
+
|
|
188
|
+
INPUT:
|
|
189
|
+
|
|
190
|
+
- ``out`` -- a ``celement`` to store the result
|
|
191
|
+
|
|
192
|
+
- ``a`` -- the ``celement`` to shift
|
|
193
|
+
|
|
194
|
+
- ``n`` -- a ``long``, the amount to shift by
|
|
195
|
+
|
|
196
|
+
- ``prec`` -- a ``long``, a precision modulo which to reduce if
|
|
197
|
+
``reduce_afterward`` is set
|
|
198
|
+
|
|
199
|
+
- ``prime_pow`` -- the ``PowComputer`` for the ring
|
|
200
|
+
|
|
201
|
+
- ``reduce_afterward`` -- whether to :meth:`creduce` ``out`` before
|
|
202
|
+
returning
|
|
203
|
+
"""
|
|
204
|
+
cdef long q, r
|
|
205
|
+
|
|
206
|
+
if n > 0:
|
|
207
|
+
a *= prime_pow.uniformizer_pow(n)
|
|
208
|
+
elif n < 0:
|
|
209
|
+
q = -n / prime_pow.e # ≥ 0
|
|
210
|
+
r = -n % prime_pow.e # ≥ 0
|
|
211
|
+
# As 0 > n = -q*e - r, π^n = p^-q * (p/π^e)^q * π^-r
|
|
212
|
+
if q:
|
|
213
|
+
# Multiply by p^-q. Important to do first for fixed-mod.
|
|
214
|
+
a = a.map_coefficients(lambda c: c>>q)
|
|
215
|
+
# and adjust to the π-adic expansion by multiplying by (p/π^e)^q.
|
|
216
|
+
a *= prime_pow.pxe_pow(q)
|
|
217
|
+
if r:
|
|
218
|
+
# Note that in fixed mod this operation can cause errors in the last
|
|
219
|
+
# few digits, since we must divide by p afterward.
|
|
220
|
+
# Multiply by (p/π^r).
|
|
221
|
+
a *= prime_pow.px_pow(r)
|
|
222
|
+
a %= prime_pow.modulus()
|
|
223
|
+
# Divide by p. This must happen afterward since not all
|
|
224
|
+
# coefficients were multiples of p before.
|
|
225
|
+
a = a.map_coefficients(lambda c: c>>1)
|
|
226
|
+
|
|
227
|
+
if reduce_afterward:
|
|
228
|
+
creduce(out, a, prec, prime_pow)
|
|
229
|
+
else:
|
|
230
|
+
out._coeffs = a._coeffs[:]
|
|
231
|
+
|
|
232
|
+
cdef inline int cinvert(celement out, celement a, long prec, PowComputer_ prime_pow) except -1:
|
|
233
|
+
r"""
|
|
234
|
+
Compute the inverse of ``a``.
|
|
235
|
+
|
|
236
|
+
INPUT:
|
|
237
|
+
|
|
238
|
+
- ``out`` -- a ``celement`` to store the inverse
|
|
239
|
+
|
|
240
|
+
- ``a`` -- a ``celement``, the element to be inverted
|
|
241
|
+
|
|
242
|
+
- ``prec`` -- a ``long``, ``out`` is reduced to this precision
|
|
243
|
+
|
|
244
|
+
- ``prime_pow`` -- the ``PowComputer`` for the ring
|
|
245
|
+
"""
|
|
246
|
+
out._coeffs = prime_pow.invert(a, prec)._coeffs
|
|
247
|
+
creduce(out, out, prec, prime_pow)
|
|
248
|
+
|
|
249
|
+
cdef inline int cdivunit(celement out, celement a, celement b, long prec, PowComputer_ prime_pow) except -1:
|
|
250
|
+
r"""
|
|
251
|
+
Divide ``a`` by ``b``.
|
|
252
|
+
|
|
253
|
+
This function computes ``a*(1/b)`` where the inverse of ``b`` is determined
|
|
254
|
+
to precision ``prec``. No reduction is performed after the product.
|
|
255
|
+
|
|
256
|
+
INPUT:
|
|
257
|
+
|
|
258
|
+
- ``out`` -- a ``celement`` to store the quotient
|
|
259
|
+
|
|
260
|
+
- ``a`` -- a ``celement``, the dividend
|
|
261
|
+
|
|
262
|
+
- ``b`` -- a ``celement``, the divisor, an element of valuation zero
|
|
263
|
+
|
|
264
|
+
- ``prec`` -- a ``long``, the precision to which the inverse of ``b`` is
|
|
265
|
+
determined
|
|
266
|
+
|
|
267
|
+
- ``prime_pow`` -- the ``PowComputer`` for the ring
|
|
268
|
+
"""
|
|
269
|
+
binv = prime_pow.invert(b, prec)
|
|
270
|
+
cmul(out, a, binv, prec, prime_pow)
|
|
271
|
+
|
|
272
|
+
cdef inline int cpow(celement out, celement a, mpz_t n, long prec, PowComputer_ prime_pow) except -1:
|
|
273
|
+
r"""
|
|
274
|
+
Raise ``a`` to the ``n``-th power.
|
|
275
|
+
|
|
276
|
+
INPUT:
|
|
277
|
+
|
|
278
|
+
- ``out`` -- a ``celement`` in which to store the result
|
|
279
|
+
|
|
280
|
+
- ``a`` -- a ``celement``, the base
|
|
281
|
+
|
|
282
|
+
- ``n`` -- an ``mpz_t``, the exponent
|
|
283
|
+
|
|
284
|
+
- ``prec`` -- a ``long``, the working absolute precision
|
|
285
|
+
|
|
286
|
+
- ``prime_pow`` -- the ``PowComputer`` for the ring
|
|
287
|
+
"""
|
|
288
|
+
cdef Integer zn = PY_NEW(Integer)
|
|
289
|
+
mpz_set(zn.value, n)
|
|
290
|
+
|
|
291
|
+
csetone(out, prime_pow)
|
|
292
|
+
if zn == 0:
|
|
293
|
+
return 0
|
|
294
|
+
|
|
295
|
+
cmul(out, out, a, prec, prime_pow)
|
|
296
|
+
|
|
297
|
+
for digit in zn.binary()[1:]:
|
|
298
|
+
cmul(out, out, out, prec, prime_pow)
|
|
299
|
+
if digit == '1':
|
|
300
|
+
cmul(out, out, a, prec, prime_pow)
|
|
301
|
+
# we should probably not creduce that frequently to increase the performance
|
|
302
|
+
creduce(out, out, prec, prime_pow)
|
|
303
|
+
|
|
304
|
+
# The element is filled in for zero in the p-adic expansion if necessary.
|
|
305
|
+
# This WON'T work if the absolute inertia degree is 1.
|
|
306
|
+
_expansion_zero = []
|
|
307
|
+
|
|
308
|
+
# the expansion_mode enum is defined in padic_template_element_header.pxi
|
|
309
|
+
cdef inline cexpansion_next(celement value, expansion_mode mode, long curpower, PowComputer_ prime_pow):
|
|
310
|
+
if mode == teichmuller_mode:
|
|
311
|
+
raise NotImplementedError
|
|
312
|
+
# This is not very efficient, but there's no clear better way.
|
|
313
|
+
# We assume this is only called on two-step extensions (for more general
|
|
314
|
+
# extensions, convert to the absolute field).
|
|
315
|
+
R = value.base_ring()
|
|
316
|
+
p = R.prime()
|
|
317
|
+
if R.absolute_degree() == 1:
|
|
318
|
+
raise NotImplementedError("Absolute extensions using Sage polynomials not completely supported")
|
|
319
|
+
if R.base_ring().absolute_degree() != 1:
|
|
320
|
+
raise TypeError("cexpansion only allowed on towers of height 2")
|
|
321
|
+
ans = []
|
|
322
|
+
p2 = (p-1)//2
|
|
323
|
+
# the following is specific to the ramified over unramified case.
|
|
324
|
+
modp_rep, term = value[0]._modp_rep(mode == smallest_mode)
|
|
325
|
+
if term:
|
|
326
|
+
value._coeffs[0] -= modp_rep
|
|
327
|
+
cshift_notrunc(value, value, -1, curpower, prime_pow, False)
|
|
328
|
+
return term
|
|
329
|
+
|
|
330
|
+
cdef inline cexpansion_getitem(celement value, long m, PowComputer_ prime_pow):
|
|
331
|
+
"""
|
|
332
|
+
Return the `m`-th `p`-adic digit in the ``simple_mode`` expansion.
|
|
333
|
+
|
|
334
|
+
INPUT:
|
|
335
|
+
|
|
336
|
+
- ``value`` -- the `p`-adic element whose expansion is desired
|
|
337
|
+
- ``m`` -- nonnegative integer; which entry in the `p`-adic expansion to return
|
|
338
|
+
- ``prime_pow`` -- a ``PowComputer`` holding `p`-adic data
|
|
339
|
+
"""
|
|
340
|
+
R = value.base_ring()
|
|
341
|
+
p = R.prime()
|
|
342
|
+
while m >= 0:
|
|
343
|
+
modp_rep, term = value[0]._modp_rep()
|
|
344
|
+
if m:
|
|
345
|
+
if len(value._coeffs):
|
|
346
|
+
value._coeffs[0] -= modp_rep
|
|
347
|
+
else:
|
|
348
|
+
value._coeffs.append(-modp_rep)
|
|
349
|
+
cshift_notrunc(value, value, -1, 1, prime_pow, False)
|
|
350
|
+
m -= 1
|
|
351
|
+
return term
|
|
352
|
+
|
|
353
|
+
cdef int cteichmuller(celement out, celement value, long prec, PowComputer_ prime_pow) except -1:
|
|
354
|
+
r"""
|
|
355
|
+
Compute a Teichmüller representative congruent to ``value``.
|
|
356
|
+
|
|
357
|
+
INPUT:
|
|
358
|
+
|
|
359
|
+
- ``out`` -- a ``celement`` which is set to a `q-1`-th root of unity
|
|
360
|
+
congruent to ``value`` modulo π; or 0 if `a \equiv 0 \pmod{π}`
|
|
361
|
+
|
|
362
|
+
- ``value`` -- n ``celement``, the element mod π to lift
|
|
363
|
+
|
|
364
|
+
- ``prec`` -- a ``long``, the precision to which to lift
|
|
365
|
+
|
|
366
|
+
- ``prime_pow`` -- the ``PowComputer`` of the ring
|
|
367
|
+
"""
|
|
368
|
+
if value[0].valuation() > 0:
|
|
369
|
+
out._coeffs = []
|
|
370
|
+
else:
|
|
371
|
+
out._coeffs = [value[0].parent().teichmuller(value[0])]
|
|
372
|
+
|
|
373
|
+
cdef list ccoefficients(celement x, long valshift, long prec, PowComputer_ prime_pow):
|
|
374
|
+
"""
|
|
375
|
+
Return a list of coefficients, as elements that can be converted into the base ring.
|
|
376
|
+
|
|
377
|
+
INPUT:
|
|
378
|
+
|
|
379
|
+
- ``x`` -- a ``celement`` giving the underlying `p`-adic element, or possibly its unit part
|
|
380
|
+
- ``valshift`` -- a long giving the power of the uniformizer to shift `x` by
|
|
381
|
+
- ``prec`` -- a long, the (relative) precision desired, used in rational reconstruction
|
|
382
|
+
- ``prime_pow`` -- the Powcomputer of the ring
|
|
383
|
+
"""
|
|
384
|
+
if valshift == 0:
|
|
385
|
+
return x.list()
|
|
386
|
+
else:
|
|
387
|
+
cshift_notrunc(prime_pow.tmp_ccoeffs, x, valshift, valshift+prec, prime_pow, True)
|
|
388
|
+
return prime_pow.tmp_ccoeffs.list()
|