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,429 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
"""
|
|
3
|
+
Relative extensions of `p`-adic rings
|
|
4
|
+
|
|
5
|
+
We represent general extensions of `p`-adic rings as a two-step extension:
|
|
6
|
+
first an unramified extension of Qp, followed by an Eisenstein extension
|
|
7
|
+
of the result.
|
|
8
|
+
|
|
9
|
+
This file contains the parent classes for such extensions.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
#*****************************************************************************
|
|
13
|
+
# Copyright (C) 2017 David Roe <roed.math@gmail.com>
|
|
14
|
+
#
|
|
15
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
16
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
17
|
+
# the License, or (at your option) any later version.
|
|
18
|
+
#
|
|
19
|
+
# http://www.gnu.org/licenses/
|
|
20
|
+
#*****************************************************************************
|
|
21
|
+
|
|
22
|
+
from sage.categories.morphism import Morphism
|
|
23
|
+
from sage.categories.homset import Hom
|
|
24
|
+
from .generic_nodes import pAdicFixedModRingGeneric, pAdicCappedAbsoluteRingGeneric, pAdicCappedRelativeRingGeneric, pAdicCappedRelativeFieldGeneric, pAdicFloatingPointRingGeneric, pAdicFloatingPointFieldGeneric
|
|
25
|
+
from .eisenstein_extension_generic import EisensteinExtensionGeneric
|
|
26
|
+
from .relative_ramified_FM import RelativeRamifiedFixedModElement
|
|
27
|
+
from .relative_ramified_CA import RelativeRamifiedCappedAbsoluteElement
|
|
28
|
+
from .relative_ramified_CR import RelativeRamifiedCappedRelativeElement
|
|
29
|
+
from .relative_ramified_FP import RelativeRamifiedFloatingPointElement
|
|
30
|
+
from .pow_computer_relative import PowComputer_relative_maker
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class pAdicRelativeBaseringInjection(Morphism):
|
|
34
|
+
"""
|
|
35
|
+
The injection of the unramified base into the two-step extension.
|
|
36
|
+
|
|
37
|
+
INPUT:
|
|
38
|
+
|
|
39
|
+
- ``R`` -- an unramified `p`-adic ring or field
|
|
40
|
+
- ``S`` -- an eisenstein extension of ``R``
|
|
41
|
+
|
|
42
|
+
EXAMPLES::
|
|
43
|
+
|
|
44
|
+
sage: # needs sage.libs.ntl
|
|
45
|
+
sage: K.<a> = Qq(125)
|
|
46
|
+
sage: R.<x> = K[]
|
|
47
|
+
sage: W.<w> = K.extension(x^3 + 15*a*x - 5*(1+a^2))
|
|
48
|
+
sage: f = W.coerce_map_from(K); f
|
|
49
|
+
Generic morphism:
|
|
50
|
+
From: 5-adic Unramified Extension Field in a defined by x^3 + 3*x + 3
|
|
51
|
+
To: 5-adic Eisenstein Extension Field in w defined by x^3 + 15*a*x - 5*a^2 - 5 over its base field
|
|
52
|
+
"""
|
|
53
|
+
def __init__(self, R, S):
|
|
54
|
+
"""
|
|
55
|
+
Initialization.
|
|
56
|
+
|
|
57
|
+
EXAMPLES::
|
|
58
|
+
|
|
59
|
+
sage: # needs sage.libs.ntl
|
|
60
|
+
sage: K.<a> = Qq(125)
|
|
61
|
+
sage: R.<x> = K[]
|
|
62
|
+
sage: W.<w> = K.extension(x^3 + 15*a*x - 5*(1+a^2))
|
|
63
|
+
sage: f = W.coerce_map_from(K)
|
|
64
|
+
sage: type(f)
|
|
65
|
+
<class 'sage.rings.padics.relative_extension_leaves.pAdicRelativeBaseringInjection'>
|
|
66
|
+
"""
|
|
67
|
+
if not R.is_field() or S.is_field():
|
|
68
|
+
Morphism.__init__(self, Hom(R, S))
|
|
69
|
+
else:
|
|
70
|
+
from sage.categories.sets_with_partial_maps import SetsWithPartialMaps
|
|
71
|
+
Morphism.__init__(self, Hom(R, S, SetsWithPartialMaps()))
|
|
72
|
+
|
|
73
|
+
def _call_(self, x):
|
|
74
|
+
"""
|
|
75
|
+
Evaluation.
|
|
76
|
+
|
|
77
|
+
EXAMPLES::
|
|
78
|
+
|
|
79
|
+
sage: # needs sage.libs.ntl
|
|
80
|
+
sage: K.<a> = Qq(125,2)
|
|
81
|
+
sage: R.<x> = K[]
|
|
82
|
+
sage: W.<w> = K.extension(x^3 + 15*a*x - 5*(1+a^2))
|
|
83
|
+
sage: f = W.coerce_map_from(K)
|
|
84
|
+
sage: f(a+5) # indirect doctest
|
|
85
|
+
a + (4*a^2 + 4*a + 3)*w^3 + (a + 2)*w^4 + (2*a^2 + 4*a + 2)*w^5 + O(w^6)
|
|
86
|
+
"""
|
|
87
|
+
if x.is_zero():
|
|
88
|
+
return self.codomain()(0,x.precision_absolute())
|
|
89
|
+
else:
|
|
90
|
+
return self.codomain()([x])
|
|
91
|
+
|
|
92
|
+
def _call_with_args(self, x, args=(), kwds={}):
|
|
93
|
+
"""
|
|
94
|
+
This function is used when some precision cap is passed in
|
|
95
|
+
(relative or absolute or both).
|
|
96
|
+
|
|
97
|
+
EXAMPLES::
|
|
98
|
+
|
|
99
|
+
sage: # needs sage.libs.ntl
|
|
100
|
+
sage: K.<a> = Qq(125,2)
|
|
101
|
+
sage: R.<x> = K[]
|
|
102
|
+
sage: W.<w> = K.extension(x^3 + 15*a*x - 5*(1+a^2))
|
|
103
|
+
sage: f = W.coerce_map_from(K)
|
|
104
|
+
sage: f(5*a,5)
|
|
105
|
+
(4*a^2 + a + 3)*w^3 + (a^2 + 2*a)*w^4 + O(w^5)
|
|
106
|
+
sage: f(5*a,8,2) # indirect doctest
|
|
107
|
+
(4*a^2 + a + 3)*w^3 + (a^2 + 2*a)*w^4 + O(w^5)
|
|
108
|
+
"""
|
|
109
|
+
return self.codomain()([x], *args, **kwds)
|
|
110
|
+
|
|
111
|
+
def section(self):
|
|
112
|
+
"""
|
|
113
|
+
Map back to the base ring.
|
|
114
|
+
|
|
115
|
+
EXAMPLES::
|
|
116
|
+
|
|
117
|
+
sage: # needs sage.libs.ntl
|
|
118
|
+
sage: K.<a> = Qq(125,2)
|
|
119
|
+
sage: R.<x> = K[]
|
|
120
|
+
sage: W.<w> = K.extension(x^3 + 15*a*x - 5*(1+a^2))
|
|
121
|
+
sage: f = W.coerce_map_from(K)
|
|
122
|
+
sage: g = f.section()
|
|
123
|
+
sage: g(a + w - w)
|
|
124
|
+
a + O(5^2)
|
|
125
|
+
"""
|
|
126
|
+
return pAdicRelativeBaseringSection(self.codomain(), self.domain())
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
class pAdicRelativeBaseringSection(Morphism):
|
|
130
|
+
"""
|
|
131
|
+
The map from a two-step extension back to its maximal unramified subextension.
|
|
132
|
+
|
|
133
|
+
EXAMPLES::
|
|
134
|
+
|
|
135
|
+
sage: # needs sage.libs.ntl
|
|
136
|
+
sage: K.<a> = Qq(2^10)
|
|
137
|
+
sage: R.<x> = K[]
|
|
138
|
+
sage: W.<w> = K.extension(x^4 + 2*a*x^2 - 16*x - 6)
|
|
139
|
+
sage: f = K.convert_map_from(W); f
|
|
140
|
+
Generic morphism:
|
|
141
|
+
From: 2-adic Eisenstein Extension Field in w defined by x^4 + 2*a*x^2 - 16*x - 6 over its base field
|
|
142
|
+
To: 2-adic Unramified Extension Field in a defined by x^10 + x^6 + x^5 + x^3 + x^2 + x + 1
|
|
143
|
+
"""
|
|
144
|
+
def __init__(self, S, R):
|
|
145
|
+
"""
|
|
146
|
+
Initialization.
|
|
147
|
+
|
|
148
|
+
EXAMPLES::
|
|
149
|
+
|
|
150
|
+
sage: # needs sage.libs.ntl
|
|
151
|
+
sage: K.<a> = Qq(2^10)
|
|
152
|
+
sage: R.<x> = K[]
|
|
153
|
+
sage: W.<w> = K.extension(x^4 + 2*a*x^2 - 16*x - 6*a)
|
|
154
|
+
sage: f = K.convert_map_from(W); type(f)
|
|
155
|
+
<class 'sage.rings.padics.relative_extension_leaves.pAdicRelativeBaseringSection'>
|
|
156
|
+
"""
|
|
157
|
+
from sage.categories.sets_with_partial_maps import SetsWithPartialMaps
|
|
158
|
+
Morphism.__init__(self, Hom(S, R, SetsWithPartialMaps()))
|
|
159
|
+
|
|
160
|
+
def _call_(self, x):
|
|
161
|
+
"""
|
|
162
|
+
Evaluation.
|
|
163
|
+
|
|
164
|
+
EXAMPLES::
|
|
165
|
+
|
|
166
|
+
sage: # needs sage.libs.ntl
|
|
167
|
+
sage: K.<a> = Qq(2^10)
|
|
168
|
+
sage: R.<x> = K[]
|
|
169
|
+
sage: W.<w> = K.extension(x^4 + 2*a*x^2 - 16*x - 6*a)
|
|
170
|
+
sage: f = K.convert_map_from(W)
|
|
171
|
+
sage: f(a + w - w) # indirect doctest
|
|
172
|
+
a + O(2^20)
|
|
173
|
+
sage: f(w)
|
|
174
|
+
Traceback (most recent call last):
|
|
175
|
+
...
|
|
176
|
+
ValueError: Element not contained in base ring
|
|
177
|
+
"""
|
|
178
|
+
f = x.polynomial()
|
|
179
|
+
if f.degree() > 0:
|
|
180
|
+
raise ValueError("Element not contained in base ring")
|
|
181
|
+
return f[0]
|
|
182
|
+
|
|
183
|
+
def _call_with_args(self, x, args=(), kwds={}):
|
|
184
|
+
"""
|
|
185
|
+
Used when specifying absolute or relative precision.
|
|
186
|
+
|
|
187
|
+
EXAMPLES::
|
|
188
|
+
|
|
189
|
+
sage: # needs sage.libs.ntl
|
|
190
|
+
sage: K.<a> = Qq(2^10)
|
|
191
|
+
sage: R.<x> = K[]
|
|
192
|
+
sage: W.<w> = K.extension(x^4 + 2*a*x^2 - 16*x - 6*a)
|
|
193
|
+
sage: f = K.convert_map_from(W)
|
|
194
|
+
sage: f(a, 5) # indirect doctest
|
|
195
|
+
a + O(2^5)
|
|
196
|
+
"""
|
|
197
|
+
return self.codomain()(self._call_(x), *args, **kwds)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class RelativeRamifiedExtensionRingFixedMod(EisensteinExtensionGeneric, pAdicFixedModRingGeneric):
|
|
201
|
+
"""
|
|
202
|
+
Two-step extension ring with fixed-mod precision.
|
|
203
|
+
|
|
204
|
+
EXAMPLES::
|
|
205
|
+
|
|
206
|
+
sage: # needs sage.libs.flint
|
|
207
|
+
sage: A.<a> = ZqFM(2^10)
|
|
208
|
+
sage: R.<x> = A[]
|
|
209
|
+
sage: W.<w> = A.extension(x^4 + 2*a*x^2 - 16*x - 6*a); W
|
|
210
|
+
2-adic Eisenstein Extension Ring in w defined by x^4 + 2*a*x^2 - 16*x - 6*a over its base ring
|
|
211
|
+
sage: w^4 + 2*a*w^2 - 16*w - 6*a == 0
|
|
212
|
+
True
|
|
213
|
+
"""
|
|
214
|
+
def __init__(self, exact_modulus, approx_modulus, prec, print_mode, shift_seed, names, implementation):
|
|
215
|
+
"""
|
|
216
|
+
Initialization.
|
|
217
|
+
|
|
218
|
+
EXAMPLES::
|
|
219
|
+
|
|
220
|
+
sage: # needs sage.libs.flint
|
|
221
|
+
sage: A.<a> = ZqFM(5^4)
|
|
222
|
+
sage: R.<x> = A[]
|
|
223
|
+
sage: W.<w> = A.extension(x^3 - 25*(a+1)*x + 10*(a^2+2))
|
|
224
|
+
sage: TestSuite(W).run(max_samples=16) # long time
|
|
225
|
+
"""
|
|
226
|
+
self._exact_modulus = exact_modulus
|
|
227
|
+
unram_prec = (prec + approx_modulus.degree() - 1) // approx_modulus.degree()
|
|
228
|
+
KFP = approx_modulus.base_ring().change(prec=unram_prec+1)
|
|
229
|
+
self.prime_pow = PowComputer_relative_maker(approx_modulus.base_ring().prime(), max(min(unram_prec - 1, 30), 1), unram_prec, prec, False, exact_modulus.change_ring(KFP), shift_seed.change_ring(KFP), 'fixed-mod')
|
|
230
|
+
self._implementation = 'Polynomial'
|
|
231
|
+
EisensteinExtensionGeneric.__init__(self, approx_modulus, prec, print_mode, names, RelativeRamifiedFixedModElement)
|
|
232
|
+
from .relative_ramified_FM import pAdicCoercion_ZZ_FM, pAdicConvert_QQ_FM
|
|
233
|
+
self.register_coercion(pAdicCoercion_ZZ_FM(self))
|
|
234
|
+
self.register_coercion(pAdicRelativeBaseringInjection(approx_modulus.base_ring(), self))
|
|
235
|
+
self.register_conversion(pAdicConvert_QQ_FM(self))
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
class RelativeRamifiedExtensionRingCappedAbsolute(EisensteinExtensionGeneric, pAdicCappedAbsoluteRingGeneric):
|
|
239
|
+
"""
|
|
240
|
+
Two-step extension ring with capped absolute precision.
|
|
241
|
+
|
|
242
|
+
EXAMPLES::
|
|
243
|
+
|
|
244
|
+
sage: # needs sage.libs.flint
|
|
245
|
+
sage: A.<a> = ZqCA(2^10)
|
|
246
|
+
sage: R.<x> = A[]
|
|
247
|
+
sage: W.<w> = A.extension(x^4 + 2*a*x^2 - 16*x - 6*a); W
|
|
248
|
+
2-adic Eisenstein Extension Ring in w defined by x^4 + 2*a*x^2 - 16*x - 6*a over its base ring
|
|
249
|
+
sage: w^4 + 2*a*w^2 - 16*w - 6*a == 0
|
|
250
|
+
True
|
|
251
|
+
"""
|
|
252
|
+
def __init__(self, exact_modulus, approx_modulus, prec, print_mode, shift_seed, names, implementation):
|
|
253
|
+
"""
|
|
254
|
+
Initialization.
|
|
255
|
+
|
|
256
|
+
EXAMPLES::
|
|
257
|
+
|
|
258
|
+
sage: # needs sage.libs.flint
|
|
259
|
+
sage: A.<a> = ZqCA(5^4)
|
|
260
|
+
sage: R.<x> = A[]
|
|
261
|
+
sage: W.<w> = A.extension(x^3 - 25*(a+1)*x + 10*(a^2+2))
|
|
262
|
+
sage: TestSuite(W).run(max_samples=16) # long time
|
|
263
|
+
"""
|
|
264
|
+
self._exact_modulus = exact_modulus
|
|
265
|
+
unram_prec = (prec + approx_modulus.degree() - 1) // approx_modulus.degree()
|
|
266
|
+
KFP = approx_modulus.base_ring().change(show_prec=False, type='floating-point')
|
|
267
|
+
self.prime_pow = PowComputer_relative_maker(approx_modulus.base_ring().prime(), max(min(unram_prec - 1, 30), 1), unram_prec, prec, False, exact_modulus.change_ring(KFP), shift_seed.change_ring(KFP), 'capped-abs')
|
|
268
|
+
self._implementation = 'Polynomial'
|
|
269
|
+
EisensteinExtensionGeneric.__init__(self, approx_modulus, prec, print_mode, names, RelativeRamifiedCappedAbsoluteElement)
|
|
270
|
+
from .relative_ramified_CA import pAdicCoercion_ZZ_CA, pAdicConvert_QQ_CA
|
|
271
|
+
self.register_coercion(pAdicCoercion_ZZ_CA(self))
|
|
272
|
+
self.register_coercion(pAdicRelativeBaseringInjection(approx_modulus.base_ring(), self))
|
|
273
|
+
self.register_conversion(pAdicConvert_QQ_CA(self))
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
class RelativeRamifiedExtensionRingCappedRelative(EisensteinExtensionGeneric, pAdicCappedRelativeRingGeneric):
|
|
277
|
+
"""
|
|
278
|
+
Two-step extension ring with capped relative precision.
|
|
279
|
+
|
|
280
|
+
EXAMPLES::
|
|
281
|
+
|
|
282
|
+
sage: # needs sage.libs.ntl
|
|
283
|
+
sage: A.<a> = ZqCR(2^10)
|
|
284
|
+
sage: R.<x> = A[]
|
|
285
|
+
sage: W.<w> = A.extension(x^4 + 2*a*x^2 - 16*x - 6*a); W
|
|
286
|
+
2-adic Eisenstein Extension Ring in w defined by x^4 + 2*a*x^2 - 16*x - 6*a over its base ring
|
|
287
|
+
sage: w^4 + 2*a*w^2 - 16*w - 6*a == 0
|
|
288
|
+
True
|
|
289
|
+
"""
|
|
290
|
+
def __init__(self, exact_modulus, approx_modulus, prec, print_mode, shift_seed, names, implementation):
|
|
291
|
+
"""
|
|
292
|
+
Initialization.
|
|
293
|
+
|
|
294
|
+
EXAMPLES::
|
|
295
|
+
|
|
296
|
+
sage: # needs sage.libs.ntl
|
|
297
|
+
sage: A.<a> = ZqCR(5^4)
|
|
298
|
+
sage: R.<x> = A[]
|
|
299
|
+
sage: W.<w> = A.extension(x^3 - 25*(a+1)*x + 10*(a^2+2))
|
|
300
|
+
sage: TestSuite(W).run(max_samples=16) # long time
|
|
301
|
+
"""
|
|
302
|
+
self._exact_modulus = exact_modulus
|
|
303
|
+
unram_prec = (prec + approx_modulus.degree() - 1) // approx_modulus.degree()
|
|
304
|
+
KFP = approx_modulus.base_ring().change(show_prec=False, type='floating-point')
|
|
305
|
+
self.prime_pow = PowComputer_relative_maker(approx_modulus.base_ring().prime(), max(min(unram_prec - 1, 30), 1), unram_prec, prec, False, exact_modulus.change_ring(KFP), shift_seed.change_ring(KFP), 'capped-rel')
|
|
306
|
+
self._implementation = 'Polynomial'
|
|
307
|
+
EisensteinExtensionGeneric.__init__(self, approx_modulus, prec, print_mode, names, RelativeRamifiedCappedRelativeElement)
|
|
308
|
+
from .relative_ramified_CR import pAdicCoercion_ZZ_CR, pAdicConvert_QQ_CR
|
|
309
|
+
self.register_coercion(pAdicCoercion_ZZ_CR(self))
|
|
310
|
+
self.register_coercion(pAdicRelativeBaseringInjection(approx_modulus.base_ring(), self))
|
|
311
|
+
self.register_conversion(pAdicConvert_QQ_CR(self))
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
class RelativeRamifiedExtensionFieldCappedRelative(EisensteinExtensionGeneric, pAdicCappedRelativeFieldGeneric):
|
|
315
|
+
"""
|
|
316
|
+
Two-step extension field with capped relative precision.
|
|
317
|
+
|
|
318
|
+
EXAMPLES::
|
|
319
|
+
|
|
320
|
+
sage: # needs sage.libs.ntl
|
|
321
|
+
sage: A.<a> = QqCR(2^10)
|
|
322
|
+
sage: R.<x> = A[]
|
|
323
|
+
sage: W.<w> = A.extension(x^4 + 2*a*x^2 - 16*x - 6*a); W
|
|
324
|
+
2-adic Eisenstein Extension Field in w defined by x^4 + 2*a*x^2 - 16*x - 6*a over its base field
|
|
325
|
+
sage: w^4 + 2*a*w^2 - 16*w - 6*a == 0
|
|
326
|
+
True
|
|
327
|
+
"""
|
|
328
|
+
def __init__(self, exact_modulus, approx_modulus, prec, print_mode, shift_seed, names, implementation):
|
|
329
|
+
"""
|
|
330
|
+
Initialization.
|
|
331
|
+
|
|
332
|
+
EXAMPLES::
|
|
333
|
+
|
|
334
|
+
sage: # needs sage.libs.ntl
|
|
335
|
+
sage: A.<a> = QqCR(5^4)
|
|
336
|
+
sage: R.<x> = A[]
|
|
337
|
+
sage: W.<w> = A.extension(x^3 - 25*(a+1)*x + 10*(a^2+2))
|
|
338
|
+
sage: TestSuite(W).run(max_samples=16) # long time
|
|
339
|
+
"""
|
|
340
|
+
self._exact_modulus = exact_modulus
|
|
341
|
+
unram_prec = (prec + approx_modulus.degree() - 1) // approx_modulus.degree()
|
|
342
|
+
KFP = approx_modulus.base_ring().change(show_prec=False, type='floating-point')
|
|
343
|
+
self.prime_pow = PowComputer_relative_maker(approx_modulus.base_ring().prime(), max(min(unram_prec - 1, 30), 1), unram_prec, prec, True, exact_modulus.change_ring(KFP), shift_seed.change_ring(KFP), 'capped-rel')
|
|
344
|
+
self._implementation = 'Polynomial'
|
|
345
|
+
EisensteinExtensionGeneric.__init__(self, approx_modulus, prec, print_mode, names, RelativeRamifiedCappedRelativeElement)
|
|
346
|
+
from .relative_ramified_CR import pAdicCoercion_ZZ_CR, pAdicCoercion_QQ_CR
|
|
347
|
+
self.register_coercion(pAdicCoercion_ZZ_CR(self))
|
|
348
|
+
self.register_coercion(pAdicRelativeBaseringInjection(approx_modulus.base_ring(), self))
|
|
349
|
+
# We also want to convert down to the ring of integers: this is used in teichmuller expansion
|
|
350
|
+
self.register_coercion(pAdicRelativeBaseringInjection(approx_modulus.base_ring().integer_ring(), self))
|
|
351
|
+
self.register_coercion(pAdicCoercion_QQ_CR(self))
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
class RelativeRamifiedExtensionRingFloatingPoint(EisensteinExtensionGeneric, pAdicFloatingPointRingGeneric):
|
|
355
|
+
"""
|
|
356
|
+
Two-step extension ring with floating point precision.
|
|
357
|
+
|
|
358
|
+
EXAMPLES::
|
|
359
|
+
|
|
360
|
+
sage: # needs sage.libs.flint
|
|
361
|
+
sage: A.<a> = ZqFP(2^10)
|
|
362
|
+
sage: R.<x> = A[]
|
|
363
|
+
sage: W.<w> = A.extension(x^4 + 2*a*x^2 - 16*x - 6*a); W
|
|
364
|
+
2-adic Eisenstein Extension Ring in w defined by x^4 + 2*a*x^2 - 16*x - 6*a over its base ring
|
|
365
|
+
sage: w^4 + 2*a*w^2 - 16*w - 6*a == 0
|
|
366
|
+
True
|
|
367
|
+
"""
|
|
368
|
+
def __init__(self, exact_modulus, approx_modulus, prec, print_mode, shift_seed, names, implementation):
|
|
369
|
+
"""
|
|
370
|
+
Initialization.
|
|
371
|
+
|
|
372
|
+
EXAMPLES::
|
|
373
|
+
|
|
374
|
+
sage: # needs sage.libs.flint
|
|
375
|
+
sage: A.<a> = ZqFP(5^4)
|
|
376
|
+
sage: R.<x> = A[]
|
|
377
|
+
sage: W.<w> = A.extension(x^3 - 25*(a+1)*x + 10*(a^2+2))
|
|
378
|
+
sage: TestSuite(W).run(max_samples=16) # long time
|
|
379
|
+
"""
|
|
380
|
+
self._exact_modulus = exact_modulus
|
|
381
|
+
unram_prec = (prec + approx_modulus.degree() - 1) // approx_modulus.degree()
|
|
382
|
+
KFP = approx_modulus.base_ring() # .change(field=False, show_prec=False)
|
|
383
|
+
self.prime_pow = PowComputer_relative_maker(approx_modulus.base_ring().prime(), max(min(unram_prec - 1, 30), 1), unram_prec, prec, False, exact_modulus.change_ring(KFP), shift_seed.change_ring(KFP), 'floating-point')
|
|
384
|
+
self._implementation = 'Polynomial'
|
|
385
|
+
EisensteinExtensionGeneric.__init__(self, approx_modulus, prec, print_mode, names, RelativeRamifiedFloatingPointElement)
|
|
386
|
+
from .relative_ramified_FP import pAdicCoercion_ZZ_FP, pAdicConvert_QQ_FP
|
|
387
|
+
self.register_coercion(pAdicCoercion_ZZ_FP(self))
|
|
388
|
+
self.register_coercion(pAdicRelativeBaseringInjection(approx_modulus.base_ring(), self))
|
|
389
|
+
self.register_conversion(pAdicConvert_QQ_FP(self))
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
class RelativeRamifiedExtensionFieldFloatingPoint(EisensteinExtensionGeneric, pAdicFloatingPointFieldGeneric):
|
|
393
|
+
"""
|
|
394
|
+
Two-step extension field with floating point precision.
|
|
395
|
+
|
|
396
|
+
EXAMPLES::
|
|
397
|
+
|
|
398
|
+
sage: # needs sage.libs.flint
|
|
399
|
+
sage: A.<a> = QqFP(2^10)
|
|
400
|
+
sage: R.<x> = A[]
|
|
401
|
+
sage: W.<w> = A.extension(x^4 + 2*a*x^2 - 16*x - 6*a); W
|
|
402
|
+
2-adic Eisenstein Extension Field in w defined by x^4 + 2*a*x^2 - 16*x - 6*a over its base field
|
|
403
|
+
sage: w^4 + 2*a*w^2 - 16*w - 6*a == 0
|
|
404
|
+
True
|
|
405
|
+
"""
|
|
406
|
+
def __init__(self, exact_modulus, approx_modulus, prec, print_mode, shift_seed, names, implementation):
|
|
407
|
+
"""
|
|
408
|
+
Initialization.
|
|
409
|
+
|
|
410
|
+
EXAMPLES::
|
|
411
|
+
|
|
412
|
+
sage: # needs sage.libs.flint
|
|
413
|
+
sage: A.<a> = QqFP(5^4)
|
|
414
|
+
sage: R.<x> = A[]
|
|
415
|
+
sage: W.<w> = A.extension(x^3 - 25*(a+1)*x + 10*(a^2+2))
|
|
416
|
+
sage: TestSuite(W).run(max_samples=16) # long time
|
|
417
|
+
"""
|
|
418
|
+
self._exact_modulus = exact_modulus
|
|
419
|
+
unram_prec = (prec + approx_modulus.degree() - 1) // approx_modulus.degree()
|
|
420
|
+
KFP = approx_modulus.base_ring() # .change(field=False, show_prec=False)
|
|
421
|
+
self.prime_pow = PowComputer_relative_maker(approx_modulus.base_ring().prime(), max(min(unram_prec - 1, 30), 1), unram_prec, prec, True, exact_modulus.change_ring(KFP), shift_seed.change_ring(KFP), 'floating-point')
|
|
422
|
+
self._implementation = 'Polynomial'
|
|
423
|
+
EisensteinExtensionGeneric.__init__(self, approx_modulus, prec, print_mode, names, RelativeRamifiedFloatingPointElement)
|
|
424
|
+
from .relative_ramified_FP import pAdicCoercion_ZZ_FP, pAdicCoercion_QQ_FP
|
|
425
|
+
self.register_coercion(pAdicCoercion_ZZ_FP(self))
|
|
426
|
+
self.register_coercion(pAdicRelativeBaseringInjection(approx_modulus.base_ring(), self))
|
|
427
|
+
# We also want to convert down to the ring of integers: this is used in teichmuller expansion
|
|
428
|
+
self.register_coercion(pAdicRelativeBaseringInjection(approx_modulus.base_ring().integer_ring(), self))
|
|
429
|
+
self.register_coercion(pAdicCoercion_QQ_FP(self))
|
|
Binary file
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense_inexact as celement
|
|
3
|
+
from sage.rings.padics.pow_computer_relative cimport PowComputer_relative_eis as PowComputer_
|
|
4
|
+
from sage.rings.padics.relative_ramified_CR cimport CRElement
|
|
5
|
+
|
|
6
|
+
include "CA_template_header.pxi"
|
|
7
|
+
|
|
8
|
+
cdef class RelativeRamifiedCappedAbsoluteElement(CAElement):
|
|
9
|
+
pass
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
# sage.doctest: needs sage.libs.flint
|
|
3
|
+
include "sage/libs/linkages/padics/Polynomial_ram.pxi"
|
|
4
|
+
include "CA_template.pxi"
|
|
5
|
+
|
|
6
|
+
cdef class RelativeRamifiedCappedAbsoluteElement(CAElement):
|
|
7
|
+
def _poly_rep(self):
|
|
8
|
+
"""
|
|
9
|
+
Return the underlying polynomial representation of this element
|
|
10
|
+
(which is used for computations).
|
|
11
|
+
|
|
12
|
+
For debugging and printing purpose.
|
|
13
|
+
|
|
14
|
+
EXAMPLES::
|
|
15
|
+
|
|
16
|
+
sage: K.<a> = ZqCA(125)
|
|
17
|
+
sage: S.<x> = PolynomialRing(K)
|
|
18
|
+
sage: W.<w> = K.extension(x^3 - 25*x^2 - 5*a*x + 5)
|
|
19
|
+
sage: w._poly_rep()
|
|
20
|
+
x
|
|
21
|
+
sage: W(5)._poly_rep()
|
|
22
|
+
5
|
|
23
|
+
|
|
24
|
+
The coefficients of P are floating point `p`-adics::
|
|
25
|
+
|
|
26
|
+
sage: P = W.random_element()._poly_rep()
|
|
27
|
+
sage: ring = P.parent().base_ring()
|
|
28
|
+
sage: ring
|
|
29
|
+
5-adic Unramified Extension Ring in a defined by x^3 + 3*x + 3
|
|
30
|
+
sage: ring._prec_type()
|
|
31
|
+
'floating-point'
|
|
32
|
+
"""
|
|
33
|
+
return self.value
|
|
Binary file
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense_inexact as celement
|
|
3
|
+
from sage.rings.padics.pow_computer_relative cimport PowComputer_relative_eis as PowComputer_
|
|
4
|
+
|
|
5
|
+
include "CR_template_header.pxi"
|
|
6
|
+
|
|
7
|
+
cdef class RelativeRamifiedCappedRelativeElement(CRElement):
|
|
8
|
+
pass
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
# sage.doctest: needs sage.libs.ntl
|
|
3
|
+
include "sage/libs/linkages/padics/Polynomial_ram.pxi"
|
|
4
|
+
include "CR_template.pxi"
|
|
5
|
+
|
|
6
|
+
cdef class RelativeRamifiedCappedRelativeElement(CRElement):
|
|
7
|
+
def _poly_rep(self):
|
|
8
|
+
"""
|
|
9
|
+
Return the underlying polynomial representation of the element
|
|
10
|
+
(which is used for computations).
|
|
11
|
+
|
|
12
|
+
For debugging and printing purpose.
|
|
13
|
+
|
|
14
|
+
EXAMPLES::
|
|
15
|
+
|
|
16
|
+
sage: K.<a> = Zq(125)
|
|
17
|
+
sage: S.<x> = PolynomialRing(K)
|
|
18
|
+
sage: W.<w> = K.extension(x^3 - 25*x^2 - 5*a*x + 5)
|
|
19
|
+
sage: w._poly_rep()
|
|
20
|
+
x
|
|
21
|
+
sage: W(5)._poly_rep()
|
|
22
|
+
5
|
|
23
|
+
|
|
24
|
+
The coefficients of P are floating point `p`-adics::
|
|
25
|
+
|
|
26
|
+
sage: P = W.random_element()._poly_rep()
|
|
27
|
+
sage: ring = P.parent().base_ring()
|
|
28
|
+
sage: ring
|
|
29
|
+
5-adic Unramified Extension Ring in a defined by x^3 + 3*x + 3
|
|
30
|
+
sage: ring._prec_type()
|
|
31
|
+
'floating-point'
|
|
32
|
+
"""
|
|
33
|
+
return self.unit.parent()(ccoefficients(self.unit, self.ordp, self.relprec, self.prime_pow))
|
|
Binary file
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense_inexact as celement
|
|
3
|
+
from sage.rings.padics.pow_computer_relative cimport PowComputer_relative_eis as PowComputer_
|
|
4
|
+
from sage.rings.padics.relative_ramified_FP cimport FPElement
|
|
5
|
+
|
|
6
|
+
include "FM_template_header.pxi"
|
|
7
|
+
|
|
8
|
+
cdef class RelativeRamifiedFixedModElement(FMElement):
|
|
9
|
+
pass
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
# sage.doctest: needs sage.libs.flint
|
|
3
|
+
include "sage/libs/linkages/padics/Polynomial_ram.pxi"
|
|
4
|
+
include "FM_template.pxi"
|
|
5
|
+
|
|
6
|
+
cdef class RelativeRamifiedFixedModElement(FMElement):
|
|
7
|
+
def _poly_rep(self):
|
|
8
|
+
"""
|
|
9
|
+
Return the underlying polynomial representation of the element
|
|
10
|
+
(which is used for computations).
|
|
11
|
+
|
|
12
|
+
For debugging and printing purpose.
|
|
13
|
+
|
|
14
|
+
EXAMPLES::
|
|
15
|
+
|
|
16
|
+
sage: K.<a> = ZqFM(125)
|
|
17
|
+
sage: S.<x> = PolynomialRing(K)
|
|
18
|
+
sage: W.<w> = K.extension(x^3 - 25*x^2 - 5*a*x + 5)
|
|
19
|
+
sage: w._poly_rep()
|
|
20
|
+
x
|
|
21
|
+
sage: W(5)._poly_rep()
|
|
22
|
+
5
|
|
23
|
+
|
|
24
|
+
The coefficients of P are fixed-mod `p`-adics::
|
|
25
|
+
|
|
26
|
+
sage: P = W.random_element()._poly_rep()
|
|
27
|
+
sage: ring = P.parent().base_ring()
|
|
28
|
+
sage: ring
|
|
29
|
+
5-adic Unramified Extension Ring in a defined by x^3 + 3*x + 3
|
|
30
|
+
sage: ring._prec_type()
|
|
31
|
+
'fixed-mod'
|
|
32
|
+
"""
|
|
33
|
+
return self.value
|
|
Binary file
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
from sage.rings.polynomial.polynomial_element cimport Polynomial_generic_dense_inexact as celement
|
|
3
|
+
from sage.rings.padics.pow_computer_relative cimport PowComputer_relative_eis as PowComputer_
|
|
4
|
+
|
|
5
|
+
include "FP_template_header.pxi"
|
|
6
|
+
|
|
7
|
+
cdef class RelativeRamifiedFloatingPointElement(FPElement):
|
|
8
|
+
pass
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
# sage.doctest: needs sage.libs.flint
|
|
3
|
+
include "sage/libs/linkages/padics/Polynomial_ram.pxi"
|
|
4
|
+
include "FP_template.pxi"
|
|
5
|
+
|
|
6
|
+
cdef class RelativeRamifiedFloatingPointElement(FPElement):
|
|
7
|
+
def _poly_rep(self):
|
|
8
|
+
"""
|
|
9
|
+
Return the underlying polynomial representation of the element
|
|
10
|
+
(which is used for computations).
|
|
11
|
+
|
|
12
|
+
For debugging and printing purpose.
|
|
13
|
+
|
|
14
|
+
EXAMPLES::
|
|
15
|
+
|
|
16
|
+
sage: K.<a> = QqFP(125)
|
|
17
|
+
sage: S.<x> = PolynomialRing(K)
|
|
18
|
+
sage: W.<w> = K.extension(x^3 - 25*x^2 - 5*a*x + 5)
|
|
19
|
+
sage: w._poly_rep()
|
|
20
|
+
x
|
|
21
|
+
sage: W(5)._poly_rep()
|
|
22
|
+
5
|
|
23
|
+
|
|
24
|
+
The coefficients of P are floating point `p`-adics::
|
|
25
|
+
|
|
26
|
+
sage: P = W.random_element()._poly_rep()
|
|
27
|
+
sage: ring = P.parent().base_ring()
|
|
28
|
+
sage: ring
|
|
29
|
+
5-adic Unramified Extension Field in a defined by x^3 + 3*x + 3
|
|
30
|
+
sage: ring._prec_type()
|
|
31
|
+
'floating-point'
|
|
32
|
+
"""
|
|
33
|
+
return self.unit.parent()(ccoefficients(self.unit, self.ordp, self.prime_pow.ram_prec_cap, self.prime_pow))
|