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,543 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
r"""
|
|
3
|
+
This linkage file implements the relaxed padics API using flint.
|
|
4
|
+
|
|
5
|
+
AUTHOR:
|
|
6
|
+
|
|
7
|
+
- Xavier Caruso (2021-01): initial version
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
# ****************************************************************************
|
|
11
|
+
# Copyright (C) 2021 Xavier Caruso <xavier.caruso@normalesup.org>
|
|
12
|
+
#
|
|
13
|
+
# This program is free software: you can redistribute it and/or modify
|
|
14
|
+
# it under the terms of the GNU General Public License as published by
|
|
15
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
16
|
+
# (at your option) any later version.
|
|
17
|
+
# http://www.gnu.org/licenses/
|
|
18
|
+
# ****************************************************************************
|
|
19
|
+
|
|
20
|
+
from sage.libs.flint.types cimport flint_rand_t
|
|
21
|
+
from sage.libs.flint.fmpz cimport *
|
|
22
|
+
from sage.libs.flint.fmpz_poly cimport *
|
|
23
|
+
from sage.libs.flint.fmpz_poly_sage cimport *
|
|
24
|
+
|
|
25
|
+
cdef extern from "sage/libs/linkages/padics/relaxed/flint_helper.c":
|
|
26
|
+
cdef void flint_randseed(flint_rand_t state, ulong seed1, ulong seed2)
|
|
27
|
+
cdef fmpz* get_coeff(fmpz_poly_t poly, slong i)
|
|
28
|
+
cdef void get_slice(fmpz_poly_t slice, fmpz_poly_t poly, slong start, slong length)
|
|
29
|
+
cdef void iadd_coeff(fmpz_poly_t poly, fmpz_t summand, slong i)
|
|
30
|
+
cdef void isub_coeff(fmpz_poly_t poly, fmpz_t summand, slong i)
|
|
31
|
+
cdef void iadd_shifted(fmpz_poly_t poly, fmpz_poly_t summand, slong shift)
|
|
32
|
+
cdef void reduce_coeff(fmpz_poly_t poly, slong i, fmpz_t modulus)
|
|
33
|
+
cdef void reducesmall_coeff(fmpz_poly_t poly, slong i, fmpz_t modulus)
|
|
34
|
+
cdef void reduceneg_coeff(fmpz_poly_t poly, slong i, fmpz_t modulus)
|
|
35
|
+
|
|
36
|
+
from sage.rings.padics.pow_computer_flint cimport PowComputer_flint
|
|
37
|
+
|
|
38
|
+
from sage.ext.stdsage cimport PY_NEW
|
|
39
|
+
|
|
40
|
+
from sage.rings.finite_rings.finite_field_constructor import GF
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# Operations on digits (intended to be small elements in the exact subring)
|
|
44
|
+
###########################################################################
|
|
45
|
+
|
|
46
|
+
cdef fmpz_t digit_zero
|
|
47
|
+
digit_init(digit_zero)
|
|
48
|
+
|
|
49
|
+
cdef inline void digit_init(fmpz_t a) noexcept:
|
|
50
|
+
r"""
|
|
51
|
+
Initialize a digit and set to it the value `0`.
|
|
52
|
+
|
|
53
|
+
INPUT:
|
|
54
|
+
|
|
55
|
+
- ``a`` -- the ``cdigit`` to initialize
|
|
56
|
+
"""
|
|
57
|
+
fmpz_init(a)
|
|
58
|
+
|
|
59
|
+
cdef inline void digit_clear(fmpz_t a) noexcept:
|
|
60
|
+
r"""
|
|
61
|
+
Deallocate memory assigned to a digit.
|
|
62
|
+
|
|
63
|
+
INPUT:
|
|
64
|
+
|
|
65
|
+
- ``a`` -- the ``cdigit`` to deallocate
|
|
66
|
+
"""
|
|
67
|
+
fmpz_clear(a)
|
|
68
|
+
|
|
69
|
+
# get and set
|
|
70
|
+
|
|
71
|
+
cdef inline Integer digit_get_sage(fmpz_t a):
|
|
72
|
+
r"""
|
|
73
|
+
Convert a digit to a Sage element.
|
|
74
|
+
|
|
75
|
+
INPUT:
|
|
76
|
+
|
|
77
|
+
- ``a`` -- a ``cdigit``
|
|
78
|
+
|
|
79
|
+
OUTPUT:
|
|
80
|
+
|
|
81
|
+
A Sage element representing the same digit.
|
|
82
|
+
"""
|
|
83
|
+
cdef Integer elt = PY_NEW(Integer)
|
|
84
|
+
fmpz_get_mpz(elt.value, a)
|
|
85
|
+
return elt
|
|
86
|
+
|
|
87
|
+
cdef inline void digit_set(fmpz_t a, fmpz_t b) noexcept:
|
|
88
|
+
r"""
|
|
89
|
+
Set up a digit.
|
|
90
|
+
|
|
91
|
+
INPUT:
|
|
92
|
+
|
|
93
|
+
- ``a`` -- the ``cdigit`` to set up
|
|
94
|
+
- ``b`` -- the ``cdigit`` containing the value to assign
|
|
95
|
+
"""
|
|
96
|
+
fmpz_set(a, b)
|
|
97
|
+
|
|
98
|
+
cdef inline void digit_set_ui(fmpz_t a, slong b) noexcept:
|
|
99
|
+
r"""
|
|
100
|
+
Set an integral value of a digit.
|
|
101
|
+
|
|
102
|
+
INPUT:
|
|
103
|
+
|
|
104
|
+
- ``a`` -- the ``cdigit`` to set up
|
|
105
|
+
- ``b`` -- integer; the value of assign
|
|
106
|
+
"""
|
|
107
|
+
fmpz_set_ui(a, b)
|
|
108
|
+
|
|
109
|
+
cdef inline void digit_set_sage(fmpz_t a, Integer elt) noexcept:
|
|
110
|
+
r"""
|
|
111
|
+
Set the value of a digit.
|
|
112
|
+
|
|
113
|
+
INPUT:
|
|
114
|
+
|
|
115
|
+
- ``a`` -- the ``cdigit`` to be assigned
|
|
116
|
+
- ``b`` -- a Sage element containing the value to assign
|
|
117
|
+
"""
|
|
118
|
+
fmpz_set_mpz(a, elt.value)
|
|
119
|
+
|
|
120
|
+
# comparisons
|
|
121
|
+
|
|
122
|
+
cdef inline bint digit_equal(fmpz_t a, fmpz_t b) noexcept:
|
|
123
|
+
r"""
|
|
124
|
+
Comparison of two digits.
|
|
125
|
+
|
|
126
|
+
INPUT:
|
|
127
|
+
|
|
128
|
+
- ``a`` -- a ``cdigit``
|
|
129
|
+
- ``b`` -- a ``cdigit``
|
|
130
|
+
|
|
131
|
+
OUTPUT:
|
|
132
|
+
|
|
133
|
+
`1` of `a` is equal to `b`, `0` otherwise
|
|
134
|
+
"""
|
|
135
|
+
return fmpz_equal(a, b)
|
|
136
|
+
|
|
137
|
+
cdef inline bint digit_equal_ui(fmpz_t a, slong b) noexcept:
|
|
138
|
+
r"""
|
|
139
|
+
Comparison of a digit and an integer
|
|
140
|
+
|
|
141
|
+
INPUT:
|
|
142
|
+
|
|
143
|
+
- ``a`` -- a ``cdigit``
|
|
144
|
+
- ``b`` -- integer
|
|
145
|
+
|
|
146
|
+
OUTPUT:
|
|
147
|
+
|
|
148
|
+
`1` of `a` is equal to `b`, `0` otherwise
|
|
149
|
+
"""
|
|
150
|
+
return fmpz_equal_ui(a, b)
|
|
151
|
+
|
|
152
|
+
cdef inline bint digit_is_zero(fmpz_t a) noexcept:
|
|
153
|
+
r"""
|
|
154
|
+
Comparison to zero
|
|
155
|
+
|
|
156
|
+
INPUT:
|
|
157
|
+
|
|
158
|
+
- ``a`` -- a ``cdigit``
|
|
159
|
+
|
|
160
|
+
OUTPUT:
|
|
161
|
+
|
|
162
|
+
`1` of `a` vanishes, `0` otherwise
|
|
163
|
+
"""
|
|
164
|
+
return fmpz_is_zero(a)
|
|
165
|
+
|
|
166
|
+
# random
|
|
167
|
+
|
|
168
|
+
cdef inline void digit_random_init(flint_rand_t generator, slong seed) noexcept:
|
|
169
|
+
r"""
|
|
170
|
+
Initialize the random generator with a new seed
|
|
171
|
+
|
|
172
|
+
INPUT:
|
|
173
|
+
|
|
174
|
+
- ``generator`` -- the generator to initialize
|
|
175
|
+
- ``seed`` -- the seed
|
|
176
|
+
"""
|
|
177
|
+
flint_randseed(generator, seed, seed*seed + 1)
|
|
178
|
+
|
|
179
|
+
cdef inline void digit_random(fmpz_t res, PowComputer_flint prime_pow, flint_rand_t generator) noexcept:
|
|
180
|
+
r"""
|
|
181
|
+
Set a digit to a random value in the distinguished set of representatives.
|
|
182
|
+
|
|
183
|
+
INPUT:
|
|
184
|
+
|
|
185
|
+
- ``res`` -- the ``cdigit`` to be assigned
|
|
186
|
+
- ``prime_pow`` -- the PowComputer for the ring
|
|
187
|
+
"""
|
|
188
|
+
fmpz_randm(res, generator, prime_pow.fprime)
|
|
189
|
+
|
|
190
|
+
# operations
|
|
191
|
+
|
|
192
|
+
cdef inline void digit_add(fmpz_t res, fmpz_t a, fmpz_t b) noexcept:
|
|
193
|
+
r"""
|
|
194
|
+
Add two digits.
|
|
195
|
+
|
|
196
|
+
INPUT:
|
|
197
|
+
|
|
198
|
+
- ``res`` -- a ``cdigit`` to store the result
|
|
199
|
+
- ``a`` -- a ``cdigit``, the first summand
|
|
200
|
+
- ``b`` -- a ``cdigit``, the second summand
|
|
201
|
+
"""
|
|
202
|
+
fmpz_add(res, a, b)
|
|
203
|
+
|
|
204
|
+
cdef inline void digit_sub(fmpz_t res, fmpz_t a, fmpz_t b) noexcept:
|
|
205
|
+
r"""
|
|
206
|
+
Subtract two digits.
|
|
207
|
+
|
|
208
|
+
INPUT:
|
|
209
|
+
|
|
210
|
+
- ``res`` -- a ``cdigit`` to store the result
|
|
211
|
+
- ``a`` -- a ``cdigit``, the minuend
|
|
212
|
+
- ``b`` -- a ``cdigit``, the subtrahend
|
|
213
|
+
"""
|
|
214
|
+
fmpz_sub(res, a, b)
|
|
215
|
+
|
|
216
|
+
cdef inline void digit_mul(fmpz_t res, fmpz_t a, fmpz_t b) noexcept:
|
|
217
|
+
r"""
|
|
218
|
+
Multiply two digits.
|
|
219
|
+
|
|
220
|
+
INPUT:
|
|
221
|
+
|
|
222
|
+
- ``res`` -- a ``cdigit`` to store the result
|
|
223
|
+
- ``a`` -- a ``cdigit``, the first factor
|
|
224
|
+
- ``b`` -- a ``cdigit``, the second factor
|
|
225
|
+
"""
|
|
226
|
+
fmpz_mul(res, a, b)
|
|
227
|
+
|
|
228
|
+
cdef inline void digit_mod(fmpz_t res, fmpz_t a, PowComputer_flint prime_pow) noexcept:
|
|
229
|
+
r"""
|
|
230
|
+
Reduce a digit modulo the uniformizer.
|
|
231
|
+
|
|
232
|
+
INPUT:
|
|
233
|
+
|
|
234
|
+
- ``res`` -- a ``cdigit`` to store the result
|
|
235
|
+
- ``a`` -- a ``cdigit``, the digit to reduce
|
|
236
|
+
- ``prime_pow`` -- the PowComputer for the ring
|
|
237
|
+
"""
|
|
238
|
+
fmpz_mod(res, a, prime_pow.fprime)
|
|
239
|
+
|
|
240
|
+
cdef inline void digit_quorem(fmpz_t quo, fmpz_t rem, fmpz_t a, PowComputer_flint prime_pow) noexcept:
|
|
241
|
+
r"""
|
|
242
|
+
Reduce a digit modulo the uniformizer and keep the carry.
|
|
243
|
+
|
|
244
|
+
INPUT:
|
|
245
|
+
|
|
246
|
+
- ``quo`` -- a ``cdigit`` to store the carry
|
|
247
|
+
- ``rem`` -- a ``cdigit`` to store the reduction
|
|
248
|
+
- ``a`` -- a ``cdigit``, the digit to reduce
|
|
249
|
+
- ``prime_pow`` -- the PowComputer for the ring
|
|
250
|
+
"""
|
|
251
|
+
fmpz_tdiv_qr(quo, rem, a, prime_pow.fprime)
|
|
252
|
+
|
|
253
|
+
cdef inline void digit_smallest(cdigit res, cdigit carry, cdigit a, PowComputer_flint prime_pow) noexcept:
|
|
254
|
+
r"""
|
|
255
|
+
Compute the smallest representative of a digit.
|
|
256
|
+
|
|
257
|
+
INPUT:
|
|
258
|
+
|
|
259
|
+
- ``res`` -- a ``cdigit`` to store the smallest representative
|
|
260
|
+
- ``carry`` -- a ``cdigit`` to store the carry
|
|
261
|
+
- ``a`` -- a ``cdigit``, the digit to reduce
|
|
262
|
+
- ``prime_pow`` -- the PowComputer for the ring
|
|
263
|
+
|
|
264
|
+
.. NOTE::
|
|
265
|
+
|
|
266
|
+
This function assumes that ``a`` is always reduced in the
|
|
267
|
+
usual sense, that is belongs to the range `[0, p-1]`.
|
|
268
|
+
"""
|
|
269
|
+
cdef fmpz_t b
|
|
270
|
+
fmpz_init(b)
|
|
271
|
+
fmpz_mul_ui(b, a, 2)
|
|
272
|
+
if fmpz_cmp(b, prime_pow.fprime) > 0:
|
|
273
|
+
fmpz_sub(res, a, prime_pow.fprime)
|
|
274
|
+
fmpz_set_ui(carry, 1)
|
|
275
|
+
else:
|
|
276
|
+
fmpz_set(res, a)
|
|
277
|
+
fmpz_set_ui(carry, 0)
|
|
278
|
+
fmpz_clear(b)
|
|
279
|
+
|
|
280
|
+
cdef inline void digit_inv(fmpz_t res, fmpz_t a, PowComputer_flint prime_pow) noexcept:
|
|
281
|
+
r"""
|
|
282
|
+
Compute the multiplicative inverse of a digit modulo the uniformizer.
|
|
283
|
+
|
|
284
|
+
INPUT:
|
|
285
|
+
|
|
286
|
+
- ``res`` -- a ``cdigit`` to store the result
|
|
287
|
+
- ``a`` -- a ``cdigit``, the digit to invert
|
|
288
|
+
- ``prime_pow`` -- the PowComputer for the ring
|
|
289
|
+
"""
|
|
290
|
+
cdef fmpz_t gcd
|
|
291
|
+
fmpz_init(gcd)
|
|
292
|
+
fmpz_gcdinv(gcd, res, a, prime_pow.fprime)
|
|
293
|
+
fmpz_clear(gcd)
|
|
294
|
+
|
|
295
|
+
cdef bint digit_sqrt(fmpz_t ans, fmpz_t x, PowComputer_flint prime_pow) noexcept:
|
|
296
|
+
r"""
|
|
297
|
+
Compute the square root of a digit modulo the uniformizer.
|
|
298
|
+
|
|
299
|
+
INPUT:
|
|
300
|
+
|
|
301
|
+
- ``res`` -- a ``cdigit`` to store the result
|
|
302
|
+
- ``a`` -- a ``cdigit``, the digit to square root
|
|
303
|
+
- ``prime_pow`` -- the PowComputer for the ring
|
|
304
|
+
"""
|
|
305
|
+
return not fmpz_sqrtmod(ans, x, prime_pow.fprime)
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
# Operations on elements (represented as series of digits)
|
|
309
|
+
##########################################################
|
|
310
|
+
|
|
311
|
+
cdef inline void element_init(fmpz_poly_t x) noexcept:
|
|
312
|
+
r"""
|
|
313
|
+
Initialize an element.
|
|
314
|
+
|
|
315
|
+
INPUT:
|
|
316
|
+
|
|
317
|
+
- ``x`` -- the ``celement`` to initialize
|
|
318
|
+
"""
|
|
319
|
+
fmpz_poly_init(x)
|
|
320
|
+
|
|
321
|
+
cdef inline void element_clear(fmpz_poly_t x) noexcept:
|
|
322
|
+
r"""
|
|
323
|
+
Deallocate memory assigned to an element.
|
|
324
|
+
|
|
325
|
+
INPUT:
|
|
326
|
+
|
|
327
|
+
- ``x`` -- the ``celement`` to deallocate
|
|
328
|
+
"""
|
|
329
|
+
fmpz_poly_clear(x)
|
|
330
|
+
|
|
331
|
+
# get and set
|
|
332
|
+
|
|
333
|
+
cdef inline Integer element_get_sage(fmpz_poly_t x, PowComputer_flint prime_pow):
|
|
334
|
+
r"""
|
|
335
|
+
Convert a digit to a Sage element.
|
|
336
|
+
|
|
337
|
+
INPUT:
|
|
338
|
+
|
|
339
|
+
- ``x`` -- a ``celement``
|
|
340
|
+
- ``prime_pow`` -- the PowComputer for the ring
|
|
341
|
+
|
|
342
|
+
OUTPUT:
|
|
343
|
+
|
|
344
|
+
A Sage integer representing the same element modulo the known precision
|
|
345
|
+
"""
|
|
346
|
+
cdef fmpz_t value
|
|
347
|
+
fmpz_init(value)
|
|
348
|
+
fmpz_poly_evaluate_fmpz(value, x, prime_pow.fprime)
|
|
349
|
+
cdef Integer ans = digit_get_sage(value)
|
|
350
|
+
fmpz_clear(value)
|
|
351
|
+
return ans
|
|
352
|
+
|
|
353
|
+
cdef inline void element_set(fmpz_poly_t x, fmpz_poly_t y) noexcept:
|
|
354
|
+
r"""
|
|
355
|
+
Set an element
|
|
356
|
+
|
|
357
|
+
INPUT:
|
|
358
|
+
|
|
359
|
+
- ``x`` -- the ``celement`` to be assigned
|
|
360
|
+
- ``y`` -- the ``celement`` containing the value to assign
|
|
361
|
+
"""
|
|
362
|
+
fmpz_poly_set(x, y)
|
|
363
|
+
|
|
364
|
+
# get and set digits
|
|
365
|
+
|
|
366
|
+
cdef inline fmpz* element_get_digit(fmpz_poly_t x, slong i) noexcept:
|
|
367
|
+
r"""
|
|
368
|
+
Return the `i`-th coefficient of `x`.
|
|
369
|
+
|
|
370
|
+
INPUT:
|
|
371
|
+
|
|
372
|
+
- ``x`` -- a ``celement``
|
|
373
|
+
- ``i`` -- integer
|
|
374
|
+
"""
|
|
375
|
+
return get_coeff(x, i)
|
|
376
|
+
|
|
377
|
+
cdef inline void element_get_slice(fmpz_poly_t res, fmpz_poly_t x, slong start, slong length) noexcept:
|
|
378
|
+
r"""
|
|
379
|
+
Select a slice of an element.
|
|
380
|
+
|
|
381
|
+
INPUT:
|
|
382
|
+
|
|
383
|
+
- ``res`` -- a ``celement`` to store the slice
|
|
384
|
+
- ``x`` -- a ``celement``, the element from which the slice is extracted
|
|
385
|
+
- ``start`` -- integer; the start position of the slice
|
|
386
|
+
- ``length`` -- integer; the length of the slice
|
|
387
|
+
|
|
388
|
+
.. NOTE::
|
|
389
|
+
|
|
390
|
+
The function only sets up a pointer to the requested slice
|
|
391
|
+
(the slice is not copied). Hence any future modification
|
|
392
|
+
of the slice ``res`` will affect the container ``x``.
|
|
393
|
+
"""
|
|
394
|
+
get_slice(res, x, start, length)
|
|
395
|
+
|
|
396
|
+
cdef inline void element_set_digit(fmpz_poly_t x, fmpz_t a, slong i) noexcept:
|
|
397
|
+
r"""
|
|
398
|
+
Set `i`-th coefficient of `x` to the value `a`.
|
|
399
|
+
|
|
400
|
+
INPUT:
|
|
401
|
+
|
|
402
|
+
- ``x`` -- a ``celement``
|
|
403
|
+
- ``a`` -- a ``cdigit``
|
|
404
|
+
- ``i`` -- integer
|
|
405
|
+
"""
|
|
406
|
+
fmpz_poly_set_coeff_fmpz(x, i, a)
|
|
407
|
+
|
|
408
|
+
cdef inline void element_set_digit_ui(fmpz_poly_t x, slong a, slong i) noexcept:
|
|
409
|
+
r"""
|
|
410
|
+
Set `i`-th coefficient of `x` to the value `a`.
|
|
411
|
+
|
|
412
|
+
INPUT:
|
|
413
|
+
|
|
414
|
+
- ``x`` -- a ``celement``
|
|
415
|
+
- ``a`` -- integer
|
|
416
|
+
- ``i`` -- integer
|
|
417
|
+
"""
|
|
418
|
+
fmpz_poly_set_coeff_ui(x, i, a)
|
|
419
|
+
|
|
420
|
+
cdef inline void element_set_digit_sage(fmpz_poly_t x, Integer a, slong i) noexcept:
|
|
421
|
+
r"""
|
|
422
|
+
Set `i`-th coefficient of `x` to the value `a`.
|
|
423
|
+
|
|
424
|
+
INPUT:
|
|
425
|
+
|
|
426
|
+
- ``x`` -- a ``celement``
|
|
427
|
+
- ``a`` -- a Sage element
|
|
428
|
+
- ``i`` -- integer
|
|
429
|
+
"""
|
|
430
|
+
fmpz_poly_set_coeff_mpz(x, i, a.value)
|
|
431
|
+
|
|
432
|
+
# operations
|
|
433
|
+
|
|
434
|
+
cdef inline void element_iadd_digit(fmpz_poly_t x, fmpz_t a, slong i) noexcept:
|
|
435
|
+
r"""
|
|
436
|
+
Inplace addition:
|
|
437
|
+
add `a` to the `i`-th coefficient of `x`.
|
|
438
|
+
|
|
439
|
+
INPUT:
|
|
440
|
+
|
|
441
|
+
- ``x`` -- a ``celement``
|
|
442
|
+
- ``a`` -- a ``cdigit``
|
|
443
|
+
- ``i`` -- integer
|
|
444
|
+
"""
|
|
445
|
+
iadd_coeff(x, a, i)
|
|
446
|
+
|
|
447
|
+
cdef inline void element_isub_digit(fmpz_poly_t x, fmpz_t a, slong i) noexcept:
|
|
448
|
+
r"""
|
|
449
|
+
Inplace subtraction:
|
|
450
|
+
subtract `a` to the `i`-th coefficient of `x`.
|
|
451
|
+
|
|
452
|
+
INPUT:
|
|
453
|
+
|
|
454
|
+
- ``x`` -- a ``celement``
|
|
455
|
+
- ``a`` -- a ``cdigit``
|
|
456
|
+
- ``i`` -- integer
|
|
457
|
+
"""
|
|
458
|
+
isub_coeff(x, a, i)
|
|
459
|
+
|
|
460
|
+
cdef inline void element_iadd_slice(fmpz_poly_t x, fmpz_poly_t slice, slong start) noexcept:
|
|
461
|
+
r"""
|
|
462
|
+
Inplace addition:
|
|
463
|
+
add a slice to an element
|
|
464
|
+
|
|
465
|
+
INPUT:
|
|
466
|
+
|
|
467
|
+
- ``x`` -- a ``celement``, the element to update
|
|
468
|
+
- ``slice`` -- a ``celement``, the slice to be added
|
|
469
|
+
- ``start`` -- the position from which the slice will be added
|
|
470
|
+
"""
|
|
471
|
+
iadd_shifted(x, slice, start)
|
|
472
|
+
|
|
473
|
+
cdef inline void element_scalarmul(fmpz_poly_t res, fmpz_poly_t x, fmpz_t a) noexcept:
|
|
474
|
+
r"""
|
|
475
|
+
Scalar multiplication.
|
|
476
|
+
|
|
477
|
+
INPUT:
|
|
478
|
+
|
|
479
|
+
- ``res`` -- a ``celement``, the element to store the result
|
|
480
|
+
- ``x`` -- a ``celement``, the multiplicand
|
|
481
|
+
- ``a`` -- a ``cdigit``, the multiplier
|
|
482
|
+
"""
|
|
483
|
+
fmpz_poly_scalar_mul_fmpz(res, x, a)
|
|
484
|
+
|
|
485
|
+
cdef inline void element_mul(fmpz_poly_t res, fmpz_poly_t x, fmpz_poly_t y) noexcept:
|
|
486
|
+
r"""
|
|
487
|
+
Multiplication.
|
|
488
|
+
|
|
489
|
+
INPUT:
|
|
490
|
+
|
|
491
|
+
- ``res`` -- a ``celement``, the element to store the result
|
|
492
|
+
- ``x`` -- a ``celement``, the first factor
|
|
493
|
+
- ``y`` -- a ``celement``, the second factor
|
|
494
|
+
"""
|
|
495
|
+
fmpz_poly_mul(res, x, y)
|
|
496
|
+
|
|
497
|
+
cdef inline void element_reduce_digit(fmpz_poly_t x, slong i, PowComputer_flint prime_pow) noexcept:
|
|
498
|
+
r"""
|
|
499
|
+
Reduce the `i`-th digit of `x` and propagate carry.
|
|
500
|
+
|
|
501
|
+
INPUT:
|
|
502
|
+
|
|
503
|
+
- ``x`` -- a ``celement``, the element to update
|
|
504
|
+
- ``i`` -- integer
|
|
505
|
+
- ``prime_pow`` -- the PowComputer for the ring
|
|
506
|
+
"""
|
|
507
|
+
reduce_coeff(x, i, prime_pow.fprime)
|
|
508
|
+
|
|
509
|
+
cdef inline void element_reducesmall_digit(fmpz_poly_t x, slong i, PowComputer_flint prime_pow) noexcept:
|
|
510
|
+
r"""
|
|
511
|
+
Reduce the `i`-th digit of `x` and propagate carry,
|
|
512
|
+
assuming that `x` is between `0` and `2*p - 1`.
|
|
513
|
+
|
|
514
|
+
INPUT:
|
|
515
|
+
|
|
516
|
+
- ``x`` -- a ``celement``, the element to update
|
|
517
|
+
- ``i`` -- integer
|
|
518
|
+
- ``prime_pow`` -- the PowComputer for the ring
|
|
519
|
+
"""
|
|
520
|
+
reducesmall_coeff(x, i, prime_pow.fprime)
|
|
521
|
+
|
|
522
|
+
cdef inline void element_reduceneg_digit(fmpz_poly_t x, slong i, PowComputer_flint prime_pow) noexcept:
|
|
523
|
+
r"""
|
|
524
|
+
Reduce the `i`-th digit of `x` and propagate carry,
|
|
525
|
+
assuming that `x` is between `-p` and `p-1`.
|
|
526
|
+
|
|
527
|
+
INPUT:
|
|
528
|
+
|
|
529
|
+
- ``x`` -- a ``celement``, the element to update
|
|
530
|
+
- ``i`` -- integer
|
|
531
|
+
- ``prime_pow`` -- the PowComputer for the ring
|
|
532
|
+
"""
|
|
533
|
+
reduceneg_coeff(x, i, prime_pow.fprime)
|
|
534
|
+
|
|
535
|
+
cdef inline void element_shift_right(fmpz_poly_t x) noexcept:
|
|
536
|
+
r"""
|
|
537
|
+
Remove the first digit of ``x``.
|
|
538
|
+
|
|
539
|
+
INPUT:
|
|
540
|
+
|
|
541
|
+
- ``x`` -- a ``celement``
|
|
542
|
+
"""
|
|
543
|
+
fmpz_poly_shift_right(x, x, 1)
|