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,210 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
"""
|
|
3
|
+
Convert PARI objects to/from GMP objects
|
|
4
|
+
|
|
5
|
+
Utility function to convert PARI ``GEN``s to/from the GMP types
|
|
6
|
+
``mpz_t`` and ``mpq_t``.
|
|
7
|
+
|
|
8
|
+
AUTHORS:
|
|
9
|
+
|
|
10
|
+
- Luca De Feo (2016-09-06): Separate Sage-specific components from
|
|
11
|
+
generic C-interface in ``Pari`` (:issue:`20241`)
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
#*****************************************************************************
|
|
15
|
+
# Copyright (C) 2016 Luca De Feo <luca.defeo@polytechnique.edu>
|
|
16
|
+
#
|
|
17
|
+
# This program is free software: you can redistribute it and/or modify
|
|
18
|
+
# it under the terms of the GNU General Public License as published by
|
|
19
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
20
|
+
# (at your option) any later version.
|
|
21
|
+
# https://www.gnu.org/licenses/
|
|
22
|
+
#*****************************************************************************
|
|
23
|
+
|
|
24
|
+
from cysignals.signals cimport sig_on
|
|
25
|
+
|
|
26
|
+
from sage.libs.gmp.all cimport *
|
|
27
|
+
|
|
28
|
+
from cypari2.paridecl cimport *
|
|
29
|
+
from cypari2.stack cimport new_gen
|
|
30
|
+
|
|
31
|
+
cdef Gen new_gen_from_mpz_t(mpz_t value):
|
|
32
|
+
"""
|
|
33
|
+
Create a new PARI Gen of type ``t_INT`` from a given
|
|
34
|
+
GMP integer ``value``.
|
|
35
|
+
|
|
36
|
+
EXAMPLES::
|
|
37
|
+
|
|
38
|
+
sage: pari(42) # indirect doctest
|
|
39
|
+
42
|
|
40
|
+
|
|
41
|
+
TESTS:
|
|
42
|
+
|
|
43
|
+
Check that the hash of an integer does not depend on existing
|
|
44
|
+
garbage on the stack (:issue:`11611`)::
|
|
45
|
+
|
|
46
|
+
sage: foo = pari(2^(32*1024)) # Create large integer to put PARI stack in known state
|
|
47
|
+
sage: a5 = pari(5)
|
|
48
|
+
sage: foo = pari(0xDEADBEEF * (2^(32*1024)-1)//(2^32 - 1)) # Dirty PARI stack
|
|
49
|
+
sage: b5 = pari(5)
|
|
50
|
+
sage: a5.__hash__() == b5.__hash__()
|
|
51
|
+
True
|
|
52
|
+
"""
|
|
53
|
+
sig_on()
|
|
54
|
+
return new_gen(_new_GEN_from_mpz_t(value))
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
cdef inline GEN _new_GEN_from_mpz_t(mpz_t value) noexcept:
|
|
58
|
+
r"""
|
|
59
|
+
Create a new PARI ``t_INT`` from a ``mpz_t``.
|
|
60
|
+
|
|
61
|
+
For internal use only; this directly uses the PARI stack.
|
|
62
|
+
One should call ``sig_on()`` before and ``sig_off()`` after.
|
|
63
|
+
"""
|
|
64
|
+
if mpz_sgn(value) == 0:
|
|
65
|
+
return gen_0
|
|
66
|
+
|
|
67
|
+
cdef unsigned long limbs = mpz_size(value)
|
|
68
|
+
|
|
69
|
+
cdef GEN z = cgeti(limbs + 2)
|
|
70
|
+
# Set sign and "effective length"
|
|
71
|
+
z[1] = evalsigne(mpz_sgn(value)) + evallgefint(limbs + 2)
|
|
72
|
+
mpz_export(int_LSW(z), NULL, -1, sizeof(long), 0, 0, value)
|
|
73
|
+
|
|
74
|
+
return z
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
cdef Gen new_gen_from_mpq_t(mpq_t value):
|
|
78
|
+
"""
|
|
79
|
+
Create a new PARI Gen of type ``t_INT`` or ``t_FRAC`` from a given
|
|
80
|
+
GMP rational ``value``.
|
|
81
|
+
|
|
82
|
+
EXAMPLES::
|
|
83
|
+
|
|
84
|
+
sage: pari(-2/3)
|
|
85
|
+
-2/3
|
|
86
|
+
sage: pari(QQ(42))
|
|
87
|
+
42
|
|
88
|
+
sage: pari(QQ(42)).type()
|
|
89
|
+
't_INT'
|
|
90
|
+
sage: pari(QQ(1/42)).type()
|
|
91
|
+
't_FRAC'
|
|
92
|
+
|
|
93
|
+
TESTS:
|
|
94
|
+
|
|
95
|
+
Check that the hash of a rational does not depend on existing
|
|
96
|
+
garbage on the stack (:issue:`11854`)::
|
|
97
|
+
|
|
98
|
+
sage: foo = pari(2^(32*1024)) # Create large integer to put PARI stack in known state
|
|
99
|
+
sage: a5 = pari(5/7)
|
|
100
|
+
sage: foo = pari(0xDEADBEEF * (2^(32*1024)-1)//(2^32 - 1)) # Dirty PARI stack
|
|
101
|
+
sage: b5 = pari(5/7)
|
|
102
|
+
sage: a5.__hash__() == b5.__hash__()
|
|
103
|
+
True
|
|
104
|
+
"""
|
|
105
|
+
sig_on()
|
|
106
|
+
return new_gen(_new_GEN_from_mpq_t(value))
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
cdef inline GEN _new_GEN_from_mpq_t(mpq_t value) noexcept:
|
|
110
|
+
r"""
|
|
111
|
+
Create a new PARI ``t_INT`` or ``t_FRAC`` from a ``mpq_t``.
|
|
112
|
+
|
|
113
|
+
For internal use only; this directly uses the PARI stack.
|
|
114
|
+
One should call ``sig_on()`` before and ``sig_off()`` after.
|
|
115
|
+
"""
|
|
116
|
+
cdef GEN num = _new_GEN_from_mpz_t(mpq_numref(value))
|
|
117
|
+
if mpz_cmpabs_ui(mpq_denref(value), 1) == 0:
|
|
118
|
+
# Denominator is 1, return the numerator (an integer)
|
|
119
|
+
return num
|
|
120
|
+
cdef GEN denom = _new_GEN_from_mpz_t(mpq_denref(value))
|
|
121
|
+
return mkfrac(num, denom)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
cdef Gen new_gen_from_padic(long ordp, long relprec,
|
|
125
|
+
mpz_t prime, mpz_t p_pow, mpz_t unit):
|
|
126
|
+
"""
|
|
127
|
+
Create a new PARI Gen of type ``t_PADIC`` from the given input data
|
|
128
|
+
as GMP integers.
|
|
129
|
+
"""
|
|
130
|
+
cdef GEN z
|
|
131
|
+
sig_on()
|
|
132
|
+
z = cgetg(5, t_PADIC)
|
|
133
|
+
z[1] = evalprecp(relprec) + evalvalp(ordp)
|
|
134
|
+
set_gel(z, 2, _new_GEN_from_mpz_t(prime))
|
|
135
|
+
set_gel(z, 3, _new_GEN_from_mpz_t(p_pow))
|
|
136
|
+
set_gel(z, 4, _new_GEN_from_mpz_t(unit))
|
|
137
|
+
return new_gen(z)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
cdef GEN _new_GEN_from_mpq_t_matrix(mpq_t** B, long nr, long nc) noexcept:
|
|
141
|
+
"""
|
|
142
|
+
Create a new PARI ``t_MAT`` from a given
|
|
143
|
+
2-dimensional array of GMP rationals ``mpq_t``.
|
|
144
|
+
|
|
145
|
+
For internal use only; this directly uses the PARI stack.
|
|
146
|
+
One should call ``sig_on()`` before and ``sig_off()`` after.
|
|
147
|
+
"""
|
|
148
|
+
cdef GEN x
|
|
149
|
+
# Allocate zero matrix
|
|
150
|
+
cdef GEN A = zeromatcopy(nr, nc)
|
|
151
|
+
cdef long i, j
|
|
152
|
+
for i in range(nr):
|
|
153
|
+
for j in range(nc):
|
|
154
|
+
x = _new_GEN_from_mpq_t(B[i][j])
|
|
155
|
+
set_gcoeff(A, i+1, j+1, x) # A[i+1, j+1] = x (using 1-based indexing)
|
|
156
|
+
return A
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
cdef Gen rational_matrix(mpq_t** B, long nr, long nc):
|
|
160
|
+
"""
|
|
161
|
+
Create a new PARI matrix of type ``t_MAT`` from a given
|
|
162
|
+
array of GMP rationals ``mpq_t``.
|
|
163
|
+
|
|
164
|
+
INPUT:
|
|
165
|
+
|
|
166
|
+
- ``B`` -- a 2-dimensional array of ``mpq_t`` values. This array is
|
|
167
|
+
accessed as ``B[i][j]``, where ``i`` is the row index and ``j``
|
|
168
|
+
the column index.
|
|
169
|
+
|
|
170
|
+
- ``nr`` -- number of rows of this matrix
|
|
171
|
+
|
|
172
|
+
- ``nc`` -- number of columns of this matrix
|
|
173
|
+
|
|
174
|
+
EXAMPLES::
|
|
175
|
+
|
|
176
|
+
sage: matrix(QQ,2,[1..6]).__pari__() # indirect doctest # needs sage.modules
|
|
177
|
+
[1, 2, 3; 4, 5, 6]
|
|
178
|
+
"""
|
|
179
|
+
sig_on()
|
|
180
|
+
cdef GEN g = _new_GEN_from_mpq_t_matrix(B, nr, nc)
|
|
181
|
+
return new_gen(g)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
cdef inline void INT_to_mpz(mpz_ptr value, GEN g) noexcept:
|
|
185
|
+
"""
|
|
186
|
+
Convert a PARI ``t_INT`` to a GMP integer, stored in ``value``.
|
|
187
|
+
"""
|
|
188
|
+
if typ(g) != t_INT:
|
|
189
|
+
pari_err(e_TYPE, <char*>"conversion to mpz", g)
|
|
190
|
+
|
|
191
|
+
cdef long size = lgefint(g) - 2
|
|
192
|
+
mpz_import(value, size, -1, sizeof(long), 0, 0, int_LSW(g))
|
|
193
|
+
|
|
194
|
+
if signe(g) < 0:
|
|
195
|
+
mpz_neg(value, value)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
cdef void INTFRAC_to_mpq(mpq_ptr value, GEN g) noexcept:
|
|
199
|
+
"""
|
|
200
|
+
Convert a PARI ``t_INT`` or ``t_FRAC`` to a GMP rational, stored in
|
|
201
|
+
``value``.
|
|
202
|
+
"""
|
|
203
|
+
if typ(g) == t_FRAC:
|
|
204
|
+
INT_to_mpz(mpq_numref(value), gel(g, 1))
|
|
205
|
+
INT_to_mpz(mpq_denref(value), gel(g, 2))
|
|
206
|
+
elif typ(g) == t_INT:
|
|
207
|
+
INT_to_mpz(mpq_numref(value), g)
|
|
208
|
+
mpz_set_ui(mpq_denref(value), 1)
|
|
209
|
+
else:
|
|
210
|
+
pari_err(e_TYPE, <char*>"conversion to mpq", g)
|
|
Binary file
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
from cypari2.gen cimport Gen
|
|
3
|
+
from sage.rings.integer cimport Integer
|
|
4
|
+
from sage.rings.rational cimport Rational
|
|
5
|
+
|
|
6
|
+
cpdef gen_to_sage(Gen z, locals=*)
|
|
7
|
+
|
|
8
|
+
cpdef set_integer_from_gen(Integer self, Gen x)
|
|
9
|
+
cpdef Gen new_gen_from_integer(Integer self)
|
|
10
|
+
cpdef set_rational_from_gen(Rational self, Gen x)
|
|
11
|
+
cpdef Gen new_gen_from_rational(Rational self)
|
|
12
|
+
|
|
13
|
+
cpdef pari_is_prime(Integer p)
|
|
14
|
+
cpdef pari_is_prime_power(Integer q, bint get_data)
|
|
15
|
+
cpdef unsigned long pari_maxprime() noexcept
|
|
16
|
+
cpdef list pari_prime_range(long c_start, long c_stop, bint py_ints=*)
|