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,335 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
"""
|
|
3
|
+
Unramified Extension Generic
|
|
4
|
+
|
|
5
|
+
This file implements the shared functionality for unramified extensions.
|
|
6
|
+
|
|
7
|
+
AUTHORS:
|
|
8
|
+
|
|
9
|
+
- David Roe
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
# ****************************************************************************
|
|
13
|
+
# Copyright (C) 2008 David Roe <roed.math@gmail.com>
|
|
14
|
+
# William Stein <wstein@gmail.com>
|
|
15
|
+
#
|
|
16
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
17
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
18
|
+
# the License, or (at your option) any later version.
|
|
19
|
+
#
|
|
20
|
+
# https://www.gnu.org/licenses/
|
|
21
|
+
# ****************************************************************************
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
from .padic_extension_generic import pAdicExtensionGeneric
|
|
25
|
+
from sage.rings.finite_rings.finite_field_constructor import GF
|
|
26
|
+
from sage.misc.cachefunc import cached_method
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class UnramifiedExtensionGeneric(pAdicExtensionGeneric):
|
|
30
|
+
r"""
|
|
31
|
+
An unramified extension of `\QQ_p` or `\ZZ_p`.
|
|
32
|
+
"""
|
|
33
|
+
def __init__(self, poly, prec, print_mode, names, element_class):
|
|
34
|
+
"""
|
|
35
|
+
Initialize ``self``.
|
|
36
|
+
|
|
37
|
+
INPUT:
|
|
38
|
+
|
|
39
|
+
- ``poly`` -- polynomial defining this extension
|
|
40
|
+
- ``prec`` -- the precision cap
|
|
41
|
+
- ``print_mode`` -- dictionary with print options
|
|
42
|
+
- ``names`` -- a 4-tuple, (``variable_name``, ``residue_name``,
|
|
43
|
+
``unramified_subextension_variable_name``, ``uniformizer_name``)
|
|
44
|
+
- ``element_class`` -- the class for elements of this unramified extension
|
|
45
|
+
|
|
46
|
+
EXAMPLES::
|
|
47
|
+
|
|
48
|
+
sage: R.<a> = Zq(27) # indirect doctest # needs sage.libs.ntl
|
|
49
|
+
"""
|
|
50
|
+
#base = poly.base_ring()
|
|
51
|
+
#if base.is_field():
|
|
52
|
+
# self._PQR = pqr.PolynomialQuotientRing_field(poly.parent(), poly, name = names)
|
|
53
|
+
#else:
|
|
54
|
+
# self._PQR = pqr.PolynomialQuotientRing_domain(poly.parent(), poly, name = names)
|
|
55
|
+
pAdicExtensionGeneric.__init__(self, poly, prec, print_mode, names, element_class)
|
|
56
|
+
self._res_field = GF(self.prime_pow.pow_Integer_Integer(poly.degree()), name=names[1], modulus=poly.change_ring(poly.base_ring().residue_field()))
|
|
57
|
+
|
|
58
|
+
def _extension_type(self):
|
|
59
|
+
"""
|
|
60
|
+
Return the type (``Unramified``, ``Eisenstein``) of this
|
|
61
|
+
extension as a string, if any.
|
|
62
|
+
|
|
63
|
+
Used for printing.
|
|
64
|
+
|
|
65
|
+
EXAMPLES::
|
|
66
|
+
|
|
67
|
+
sage: K.<a> = Qq(5^3) # needs sage.libs.ntl
|
|
68
|
+
sage: K._extension_type() # needs sage.libs.ntl
|
|
69
|
+
'Unramified'
|
|
70
|
+
|
|
71
|
+
sage: x = polygen(ZZ, 'x')
|
|
72
|
+
sage: L.<pi> = Qp(5).extension(x^2 - 5) # needs sage.libs.ntl
|
|
73
|
+
sage: L._extension_type() # needs sage.libs.ntl
|
|
74
|
+
'Eisenstein'
|
|
75
|
+
"""
|
|
76
|
+
return "Unramified"
|
|
77
|
+
|
|
78
|
+
def absolute_f(self):
|
|
79
|
+
"""
|
|
80
|
+
Return the degree of the residue field of this ring/field
|
|
81
|
+
over its prime subfield.
|
|
82
|
+
|
|
83
|
+
EXAMPLES::
|
|
84
|
+
|
|
85
|
+
sage: K.<a> = Qq(3^5) # needs sage.libs.ntl
|
|
86
|
+
sage: K.absolute_f() # needs sage.libs.ntl
|
|
87
|
+
5
|
|
88
|
+
|
|
89
|
+
sage: x = polygen(ZZ, 'x')
|
|
90
|
+
sage: L.<pi> = Qp(3).extension(x^2 - 3) # needs sage.libs.ntl
|
|
91
|
+
sage: L.absolute_f() # needs sage.libs.ntl
|
|
92
|
+
1
|
|
93
|
+
"""
|
|
94
|
+
return self.modulus().degree() * self.base_ring().absolute_f()
|
|
95
|
+
|
|
96
|
+
#def extension(self, *args, **kwds):
|
|
97
|
+
# raise NotImplementedError
|
|
98
|
+
|
|
99
|
+
#def get_extension(self):
|
|
100
|
+
# raise NotImplementedError
|
|
101
|
+
|
|
102
|
+
def residue_class_field(self):
|
|
103
|
+
"""
|
|
104
|
+
Return the residue class field.
|
|
105
|
+
|
|
106
|
+
EXAMPLES::
|
|
107
|
+
|
|
108
|
+
sage: R.<a> = Zq(125); R.residue_class_field() # needs sage.libs.ntl
|
|
109
|
+
Finite Field in a0 of size 5^3
|
|
110
|
+
"""
|
|
111
|
+
#should eventually take advantage of finite field
|
|
112
|
+
#\code{extension} or finite field
|
|
113
|
+
#\code{unramified_extension_of_degree} over the automatic
|
|
114
|
+
#coercion base.
|
|
115
|
+
return self._res_field
|
|
116
|
+
|
|
117
|
+
def residue_ring(self, n):
|
|
118
|
+
"""
|
|
119
|
+
Return the quotient of the ring of integers by the `n`-th power of its maximal ideal.
|
|
120
|
+
|
|
121
|
+
EXAMPLES::
|
|
122
|
+
|
|
123
|
+
sage: R.<a> = Zq(125) # needs sage.libs.ntl
|
|
124
|
+
sage: R.residue_ring(1) # needs sage.libs.ntl
|
|
125
|
+
Finite Field in a0 of size 5^3
|
|
126
|
+
|
|
127
|
+
The following requires implementing more general Artinian rings::
|
|
128
|
+
|
|
129
|
+
sage: R.residue_ring(2) # needs sage.libs.ntl
|
|
130
|
+
Traceback (most recent call last):
|
|
131
|
+
...
|
|
132
|
+
NotImplementedError
|
|
133
|
+
"""
|
|
134
|
+
if n == 1:
|
|
135
|
+
return self._res_field
|
|
136
|
+
else:
|
|
137
|
+
raise NotImplementedError
|
|
138
|
+
|
|
139
|
+
def discriminant(self, K=None):
|
|
140
|
+
"""
|
|
141
|
+
Return the discriminant of ``self`` over the subring `K`.
|
|
142
|
+
|
|
143
|
+
INPUT:
|
|
144
|
+
|
|
145
|
+
- ``K`` -- a subring/subfield (defaults to the base ring)
|
|
146
|
+
|
|
147
|
+
EXAMPLES::
|
|
148
|
+
|
|
149
|
+
sage: R.<a> = Zq(125) # needs sage.libs.ntl
|
|
150
|
+
sage: R.discriminant() # needs sage.libs.ntl
|
|
151
|
+
Traceback (most recent call last):
|
|
152
|
+
...
|
|
153
|
+
NotImplementedError
|
|
154
|
+
"""
|
|
155
|
+
if K is self:
|
|
156
|
+
return 1
|
|
157
|
+
else:
|
|
158
|
+
raise NotImplementedError
|
|
159
|
+
|
|
160
|
+
#def automorphisms(self):
|
|
161
|
+
# raise NotImplementedError
|
|
162
|
+
|
|
163
|
+
#def galois_group(self):
|
|
164
|
+
# r"""
|
|
165
|
+
# Returns the Galois group of ``self``'s fraction field over Qp.
|
|
166
|
+
# """
|
|
167
|
+
# ##
|
|
168
|
+
# ## If K is a number field, then K.galois_group() can return
|
|
169
|
+
# ## other variants, i.e. via Pari or KASH. We could consider
|
|
170
|
+
# ## doing this.
|
|
171
|
+
# ##
|
|
172
|
+
# from sage.groups.perm_gps.permgroup import CyclicPermutationGroup
|
|
173
|
+
# return CyclicPermutationGroup(self.modulus().degree())
|
|
174
|
+
|
|
175
|
+
#def is_abelian(self):
|
|
176
|
+
# return True
|
|
177
|
+
|
|
178
|
+
def is_galois(self, K=None):
|
|
179
|
+
"""
|
|
180
|
+
Return ``True`` if this extension is Galois.
|
|
181
|
+
|
|
182
|
+
Every unramified extension is Galois.
|
|
183
|
+
|
|
184
|
+
INPUT:
|
|
185
|
+
|
|
186
|
+
- ``K`` -- a subring/subfield (defaults to the base ring)
|
|
187
|
+
|
|
188
|
+
EXAMPLES::
|
|
189
|
+
|
|
190
|
+
sage: R.<a> = Zq(125); R.is_galois() # needs sage.libs.ntl
|
|
191
|
+
True
|
|
192
|
+
"""
|
|
193
|
+
if K is None or K is self:
|
|
194
|
+
return True
|
|
195
|
+
raise NotImplementedError
|
|
196
|
+
|
|
197
|
+
def gen(self, n=0):
|
|
198
|
+
"""
|
|
199
|
+
Return a generator for this unramified extension.
|
|
200
|
+
|
|
201
|
+
This is an element that satisfies the polynomial defining this
|
|
202
|
+
extension. Such an element will reduce to a generator of the
|
|
203
|
+
corresponding residue field extension.
|
|
204
|
+
|
|
205
|
+
EXAMPLES::
|
|
206
|
+
|
|
207
|
+
sage: R.<a> = Zq(125); R.gen() # needs sage.libs.ntl
|
|
208
|
+
a + O(5^20)
|
|
209
|
+
"""
|
|
210
|
+
if n != 0:
|
|
211
|
+
raise IndexError("only one generator")
|
|
212
|
+
return self([0,1])
|
|
213
|
+
|
|
214
|
+
@cached_method
|
|
215
|
+
def _frob_gen(self, arithmetic=True):
|
|
216
|
+
"""
|
|
217
|
+
Return frobenius of the generator for this unramified extension.
|
|
218
|
+
|
|
219
|
+
EXAMPLES::
|
|
220
|
+
|
|
221
|
+
sage: R.<a> = Zq(9) # needs sage.libs.ntl
|
|
222
|
+
sage: R._frob_gen() # needs sage.libs.ntl
|
|
223
|
+
(2*a + 1) + (2*a + 2)*3 + (2*a + 2)*3^2 + (2*a + 2)*3^3 + (2*a + 2)*3^4 + (2*a + 2)*3^5 + (2*a + 2)*3^6 + (2*a + 2)*3^7 + (2*a + 2)*3^8 + (2*a + 2)*3^9 + (2*a + 2)*3^10 + (2*a + 2)*3^11 + (2*a + 2)*3^12 + (2*a + 2)*3^13 + (2*a + 2)*3^14 + (2*a + 2)*3^15 + (2*a + 2)*3^16 + (2*a + 2)*3^17 + (2*a + 2)*3^18 + (2*a + 2)*3^19 + O(3^20)
|
|
224
|
+
"""
|
|
225
|
+
p = self.prime()
|
|
226
|
+
exp = p
|
|
227
|
+
a = self.gen()
|
|
228
|
+
if not arithmetic:
|
|
229
|
+
exp = p**(self.absolute_degree() - 1)
|
|
230
|
+
approx = (self(a.residue()**exp)).lift_to_precision(self.precision_cap()) #first approximation
|
|
231
|
+
f = self.defining_polynomial()
|
|
232
|
+
g = f.derivative()
|
|
233
|
+
while f(approx) != 0: # hensel lift frobenius(a)
|
|
234
|
+
approx = approx - f(approx) / g(approx)
|
|
235
|
+
return approx
|
|
236
|
+
|
|
237
|
+
def uniformizer_pow(self, n):
|
|
238
|
+
"""
|
|
239
|
+
Return the `n`-th power of the uniformizer of ``self`` (as an element of ``self``).
|
|
240
|
+
|
|
241
|
+
EXAMPLES::
|
|
242
|
+
|
|
243
|
+
sage: R.<a> = ZqCR(125) # needs sage.libs.ntl
|
|
244
|
+
sage: R.uniformizer_pow(5) # needs sage.libs.ntl
|
|
245
|
+
5^5 + O(5^25)
|
|
246
|
+
"""
|
|
247
|
+
return self(self.prime_pow(n))
|
|
248
|
+
|
|
249
|
+
def uniformizer(self):
|
|
250
|
+
r"""
|
|
251
|
+
Return a uniformizer for this extension.
|
|
252
|
+
|
|
253
|
+
Since this extension is unramified, a uniformizer for the
|
|
254
|
+
ground ring will also be a uniformizer for this extension.
|
|
255
|
+
|
|
256
|
+
EXAMPLES::
|
|
257
|
+
|
|
258
|
+
sage: R.<a> = ZqCR(125) # needs sage.libs.ntl
|
|
259
|
+
sage: R.uniformizer() # needs sage.libs.ntl
|
|
260
|
+
5 + O(5^21)
|
|
261
|
+
"""
|
|
262
|
+
return self(self.ground_ring().uniformizer())
|
|
263
|
+
|
|
264
|
+
def _uniformizer_print(self):
|
|
265
|
+
r"""
|
|
266
|
+
Return how the uniformizer is supposed to print.
|
|
267
|
+
|
|
268
|
+
EXAMPLES::
|
|
269
|
+
|
|
270
|
+
sage: R.<a> = Zq(125); R._uniformizer_print() # needs sage.libs.ntl
|
|
271
|
+
'5'
|
|
272
|
+
"""
|
|
273
|
+
return self.ground_ring()._uniformizer_print()
|
|
274
|
+
|
|
275
|
+
def _unram_print(self):
|
|
276
|
+
r"""
|
|
277
|
+
Return how the generator prints.
|
|
278
|
+
|
|
279
|
+
EXAMPLES::
|
|
280
|
+
|
|
281
|
+
sage: R.<a> = Zq(125); R._unram_print() # needs sage.libs.ntl
|
|
282
|
+
'a'
|
|
283
|
+
"""
|
|
284
|
+
return self.variable_name()
|
|
285
|
+
|
|
286
|
+
def has_pth_root(self):
|
|
287
|
+
r"""
|
|
288
|
+
Return whether or not `\ZZ_p` has a primitive `p`-th root of unity.
|
|
289
|
+
|
|
290
|
+
Since adjoining a `p`-th root of unity yields a
|
|
291
|
+
totally ramified extension, ``self`` will contain one if and only
|
|
292
|
+
if the ground ring does.
|
|
293
|
+
|
|
294
|
+
INPUT:
|
|
295
|
+
|
|
296
|
+
- ``self`` -- a `p`-adic ring
|
|
297
|
+
|
|
298
|
+
OUTPUT: boolean; whether ``self`` has primitive `p`-th root of unity
|
|
299
|
+
|
|
300
|
+
EXAMPLES::
|
|
301
|
+
|
|
302
|
+
sage: R.<a> = Zq(1024); R.has_pth_root() # needs sage.libs.ntl
|
|
303
|
+
True
|
|
304
|
+
sage: R.<a> = Zq(17^5); R.has_pth_root() # needs sage.libs.ntl
|
|
305
|
+
False
|
|
306
|
+
"""
|
|
307
|
+
return self.ground_ring().has_pth_root()
|
|
308
|
+
|
|
309
|
+
def has_root_of_unity(self, n):
|
|
310
|
+
r"""
|
|
311
|
+
Return whether or not `\ZZ_p` has a primitive `n`-th
|
|
312
|
+
root of unity.
|
|
313
|
+
|
|
314
|
+
INPUT:
|
|
315
|
+
|
|
316
|
+
- ``self`` -- a `p`-adic ring
|
|
317
|
+
- ``n`` -- integer
|
|
318
|
+
|
|
319
|
+
OUTPUT: boolean
|
|
320
|
+
|
|
321
|
+
EXAMPLES::
|
|
322
|
+
|
|
323
|
+
sage: # needs sage.libs.ntl
|
|
324
|
+
sage: R.<a> = Zq(37^8)
|
|
325
|
+
sage: R.has_root_of_unity(144)
|
|
326
|
+
True
|
|
327
|
+
sage: R.has_root_of_unity(89)
|
|
328
|
+
True
|
|
329
|
+
sage: R.has_root_of_unity(11)
|
|
330
|
+
False
|
|
331
|
+
"""
|
|
332
|
+
if self.prime() == 2:
|
|
333
|
+
return n.divides(2 * (self.residue_class_field().order() - 1))
|
|
334
|
+
else:
|
|
335
|
+
return n.divides(self.residue_class_field().order() - 1)
|