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,306 @@
|
|
|
1
|
+
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
|
2
|
+
\\ Copyright (C) 2014 Denis Simon
|
|
3
|
+
\\
|
|
4
|
+
\\ Distributed under the terms of the GNU General Public License (GPL)
|
|
5
|
+
\\
|
|
6
|
+
\\ This code is distributed in the hope that it will be useful,
|
|
7
|
+
\\ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
8
|
+
\\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
9
|
+
\\ General Public License for more details.
|
|
10
|
+
\\
|
|
11
|
+
\\ The full text of the GPL is available at:
|
|
12
|
+
\\
|
|
13
|
+
\\ http://www.gnu.org/licenses/
|
|
14
|
+
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
Auteur :
|
|
18
|
+
Denis SIMON -> simon@math.unicaen.fr
|
|
19
|
+
adresse du fichier :
|
|
20
|
+
www.math.unicaen.fr/~simon/resultant3.gp
|
|
21
|
+
|
|
22
|
+
*********************************************
|
|
23
|
+
* VERSION 13/01/2014 *
|
|
24
|
+
*********************************************
|
|
25
|
+
|
|
26
|
+
Ce fichier gp contient des fonctions pour calculer
|
|
27
|
+
le resultant de trois polynomes p1, p2, p3 homogenes
|
|
28
|
+
en trois variables (toujours x,y,z), ainsi que
|
|
29
|
+
le discriminant d'un polynome homogene en ces trois variables.
|
|
30
|
+
L'algorithme utilise est celui du sous-resultant.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
exemple d'utilisation :
|
|
34
|
+
|
|
35
|
+
? p1=x^2-3*z^2+y*z;p2=x-y+15*z;p3=y^2*x+z^3-x*y*z+x^2*z;
|
|
36
|
+
? resultant3([p1,p2,p3])
|
|
37
|
+
%2 = 521784
|
|
38
|
+
? discriminant3(p3)
|
|
39
|
+
%3 = -63
|
|
40
|
+
|
|
41
|
+
la fonction hom sert a rendre homogene un polynome en x et y:
|
|
42
|
+
? ell=y^2-y-x^3+x^2;
|
|
43
|
+
? discriminant3(hom(ell))
|
|
44
|
+
%5 = -11
|
|
45
|
+
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
global(DEBUGLEVEL_res):small;
|
|
49
|
+
|
|
50
|
+
DEBUGLEVEL_res = 0; \\ si DEBUGLEVEL_res = 1 : afficher des resultats intermediaires.
|
|
51
|
+
|
|
52
|
+
\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
|
53
|
+
\\ SCRIPT \\
|
|
54
|
+
\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
|
55
|
+
|
|
56
|
+
{default_res(
|
|
57
|
+
DEBUGLEVEL_res_val:small = 0
|
|
58
|
+
) =
|
|
59
|
+
|
|
60
|
+
DEBUGLEVEL_res = DEBUGLEVEL_res_val;
|
|
61
|
+
print(" DEBUGLEVEL_res = ",DEBUGLEVEL_res);
|
|
62
|
+
}
|
|
63
|
+
{hom(p) =
|
|
64
|
+
p = substvec(p,['x,'y],['x/'z,'y/'z]);
|
|
65
|
+
p /= 'z^valuation(p,'z);
|
|
66
|
+
return(p);
|
|
67
|
+
}
|
|
68
|
+
{degreetot(p) =
|
|
69
|
+
\\ degre d'un polynome homogene.
|
|
70
|
+
my(auxdeg,auxp);
|
|
71
|
+
|
|
72
|
+
auxdeg = poldegree(p,'x); auxp = pollead(p,'x);
|
|
73
|
+
auxdeg += poldegree(auxp,'y); auxp = pollead(auxp,'y);
|
|
74
|
+
auxdeg += poldegree(auxp,'z); auxp = pollead(auxp,'z);
|
|
75
|
+
return(auxdeg);
|
|
76
|
+
}
|
|
77
|
+
{ex( vec, i, j) =
|
|
78
|
+
my(aux);
|
|
79
|
+
aux = vec[i]; vec[i] = vec[j]; vec[j] = aux;
|
|
80
|
+
return(vec);
|
|
81
|
+
}
|
|
82
|
+
{mycontent(p) =
|
|
83
|
+
my(vz,co,dco);
|
|
84
|
+
vz = valuation(p,'z);
|
|
85
|
+
p = subst(p,'z,1);
|
|
86
|
+
co = content(p);
|
|
87
|
+
dco = poldegree(co,'y);
|
|
88
|
+
if( dco, co = subst(co,'y,'y/'z)*'z^dco);
|
|
89
|
+
return(co*'z^vz);
|
|
90
|
+
}
|
|
91
|
+
{myresultant2( p, q) =
|
|
92
|
+
my(dp,dq,valp,valq,auxr,auxp,auxq,res);
|
|
93
|
+
|
|
94
|
+
if( p==0 || q==0, return(0));
|
|
95
|
+
dp = degreetot(p); valp = valuation(p,'y);
|
|
96
|
+
dq = degreetot(q); valq = valuation(q,'y);
|
|
97
|
+
if( valp && valq, return(0));
|
|
98
|
+
auxr = 1;
|
|
99
|
+
if( valp,
|
|
100
|
+
if(dq%2 && valp%2, auxr = -1);
|
|
101
|
+
auxr *= pollead(q,'x)^valp
|
|
102
|
+
);
|
|
103
|
+
if( valq,
|
|
104
|
+
auxr = pollead(p,'x)^valq
|
|
105
|
+
);
|
|
106
|
+
auxp = subst(p,'y,1);
|
|
107
|
+
auxq = subst(q,'y,1);
|
|
108
|
+
res = auxr*polresultant(auxp,auxq,'x);
|
|
109
|
+
return(res);
|
|
110
|
+
}
|
|
111
|
+
{resultantcomp(vp=['x,'y,'z]) =
|
|
112
|
+
\\ les vp[i] sont des pol homogenes en x,y et z.
|
|
113
|
+
\\ vp[3] ne depend que de y et z.
|
|
114
|
+
my(p,q,rt,dp,dq,drt,vy,vz,lrt,lp,res,aux,res2,dres2);
|
|
115
|
+
|
|
116
|
+
p = vp[1]; q = vp[2]; rt = vp[3];
|
|
117
|
+
if( p==0 || q==0 || rt==0, return(0));
|
|
118
|
+
dp = degreetot(p); dq = degreetot(q); drt = degreetot(rt);
|
|
119
|
+
if( drt == 0, return(rt^(dp*dq)));
|
|
120
|
+
vy = valuation(rt,'y); vz = valuation(rt,'z);
|
|
121
|
+
rt = subst(rt,'y,1); if( vz, rt /= 'z^vz);
|
|
122
|
+
lrt = polcoeff(rt,drt,'z); lp = polcoeff(p,dp,'x);
|
|
123
|
+
res = 1;
|
|
124
|
+
if( lp == 0,
|
|
125
|
+
aux = p; p = q; q = aux;
|
|
126
|
+
aux = dp; dp = dq; dq = aux;
|
|
127
|
+
if( dp%2 && dq%2 && drt%2, res = -res);
|
|
128
|
+
lp = polcoeff(p,dp,'x);
|
|
129
|
+
if( lp == 0, return(0))
|
|
130
|
+
);
|
|
131
|
+
if( vy,
|
|
132
|
+
if( dp%2 && dq%2, res2 = -1, res2 = 1);
|
|
133
|
+
res2 *= myresultant2(subst(subst(p,'y,0),'z,'y),subst(subst(q,'y,0),'z,'y));
|
|
134
|
+
res2 *= myresultant2(subst(subst(p,'y,0),'z,'y),subst(subst(q,'y,0),'z,'y));
|
|
135
|
+
if( res2 == 0, return(0));
|
|
136
|
+
res *= res2^vy
|
|
137
|
+
);
|
|
138
|
+
if( vz,
|
|
139
|
+
res2 = myresultant2(subst(p,'z,0),subst(q,'z,0));
|
|
140
|
+
if( res2 == 0, return(0));
|
|
141
|
+
res *= res2^vz
|
|
142
|
+
);
|
|
143
|
+
drt -= vy+vz;
|
|
144
|
+
if( drt == 0, return(res*rt^(dp*dq)));
|
|
145
|
+
res2 = polresultant(subst(p,'y,1),subst(q,'y,1),'x);
|
|
146
|
+
dres2 = poldegree(res2,'z);
|
|
147
|
+
res2 = polresultant(rt,res2,'z);
|
|
148
|
+
res *= res2;
|
|
149
|
+
if( dq != poldegree(subst(q,'y,1),'x),
|
|
150
|
+
res *= lp^(drt*(dq-poldegree(subst(q,'y,1),'x))));
|
|
151
|
+
if( dres2 != dp*dq,
|
|
152
|
+
res *= pollead(rt,'z)^(dp*dq-dres2));
|
|
153
|
+
return(res);
|
|
154
|
+
}
|
|
155
|
+
{resultant3(vp=['x,'y,'z]) =
|
|
156
|
+
\\ resultant de 3 polynomes homogenes en x,y,z.
|
|
157
|
+
\\ on travaille sur la variable x.
|
|
158
|
+
my(vdt,vdx,prodd,s,denom,nume,lp,p0,q0,r0,dd,cq,rm,res,delta);
|
|
159
|
+
|
|
160
|
+
for( i = 1, 3,
|
|
161
|
+
if( vp[i] == 0, return(0)));
|
|
162
|
+
vdt = vector(3,i,degreetot(vp[i]));
|
|
163
|
+
vdx = vector(3,i,poldegree(vp[i],'x));
|
|
164
|
+
if( vecmin(vdt-vdx), return(0));
|
|
165
|
+
\\ en effet, dans ce cas, les polynomes sont dans l'ideal <y,z>
|
|
166
|
+
|
|
167
|
+
prodd = prod( i = 1, 3, vdt[i]);
|
|
168
|
+
s = 1;
|
|
169
|
+
denom = 1; nume = 1;
|
|
170
|
+
|
|
171
|
+
\\ on echange pour que vdx[1] >= vdx[2] >= vdx[3]
|
|
172
|
+
if(vdx[1]<vdx[2] || (vdx[1]==vdx[2] && vdt[1]<vdt[2]),
|
|
173
|
+
vp = ex(vp,1,2);
|
|
174
|
+
vdx = ex(vdx,1,2);
|
|
175
|
+
vdt = ex(vdt,1,2);
|
|
176
|
+
if( prodd%2, s *= -1)
|
|
177
|
+
);
|
|
178
|
+
if(vdx[1]<vdx[3] || (vdx[1]==vdx[3] && vdt[1]<vdt[3]),
|
|
179
|
+
vp = ex(vp,1,3);
|
|
180
|
+
vdx = ex(vdx,1,3);
|
|
181
|
+
vdt = ex(vdt,1,3);
|
|
182
|
+
if( prodd%2, s *= -1)
|
|
183
|
+
);
|
|
184
|
+
if(vdx[2]<vdx[3] || (vdx[2]==vdx[3] && vdt[2]<vdt[3]),
|
|
185
|
+
vp = ex(vp,2,3);
|
|
186
|
+
vdx = ex(vdx,2,3);
|
|
187
|
+
vdt = ex(vdt,2,3);
|
|
188
|
+
if( prodd%2, s *= -1)
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
\\ cas particulier ou vp[3] est constant
|
|
192
|
+
if( vdt[3]==0,
|
|
193
|
+
return(vp[3]^(vdt[1]*vdt[2])*s));
|
|
194
|
+
|
|
195
|
+
\\ on fait un echange pour que vp[1] contienne le monome x^vdt[1]
|
|
196
|
+
lp = polcoeff(vp[1],vdt[1],'x);
|
|
197
|
+
if( lp == 0,
|
|
198
|
+
lp = polcoeff(vp[2],vdt[2],'x);
|
|
199
|
+
if( lp == 0,
|
|
200
|
+
lp = polcoeff(vp[3],vdt[3],'x);
|
|
201
|
+
if( lp == 0, return(0));
|
|
202
|
+
vp = ex(vp,1,3);
|
|
203
|
+
vdx = ex(vdx,1,3);
|
|
204
|
+
vdt = ex(vdt,1,3);
|
|
205
|
+
if( prodd%2, s *= -1)
|
|
206
|
+
, vp = ex(vp,1,2);
|
|
207
|
+
vdx = ex(vdx,1,2);
|
|
208
|
+
vdt = ex(vdt,1,2);
|
|
209
|
+
if( prodd%2, s *= -1)
|
|
210
|
+
));
|
|
211
|
+
|
|
212
|
+
\\ on supprime de vp[1] les puissances de x
|
|
213
|
+
p0 = polcoeff(vp[1],0,'x);
|
|
214
|
+
q0 = polcoeff(vp[2],0,'x);
|
|
215
|
+
r0 = polcoeff(vp[3],0,'x);
|
|
216
|
+
while( p0 == 0,
|
|
217
|
+
vp[1] /= 'x;
|
|
218
|
+
vdx[1] -= 1;
|
|
219
|
+
vdt[1] -= 1;
|
|
220
|
+
p0 = polcoeff(vp[1],0,'x);
|
|
221
|
+
nume *= myresultant2(subst(subst(q0,'y,'x),'z,'y),subst(subst(r0,'y,'x),'z,'y))
|
|
222
|
+
);
|
|
223
|
+
|
|
224
|
+
if( nume == 0, return(0));
|
|
225
|
+
dd = vecmax(vdx)+1;
|
|
226
|
+
while( vdx[3],
|
|
227
|
+
|
|
228
|
+
if(DEBUGLEVEL_res, print("vp = "vp));
|
|
229
|
+
if(DEBUGLEVEL_res, print("vdx = "vdx));
|
|
230
|
+
if(DEBUGLEVEL_res, print("vdt = "vdt));
|
|
231
|
+
if(DEBUGLEVEL_res, print([nume,denom]));
|
|
232
|
+
|
|
233
|
+
if( denom == 0, error("denom = 0"));
|
|
234
|
+
if( nume == 0, return(0));
|
|
235
|
+
for( i = 2, 3, if(vp[i] == 0, return(0)));
|
|
236
|
+
|
|
237
|
+
q0 = polcoeff(vp[2],0,'x);
|
|
238
|
+
if( q0 == 0, \\ si vp[2] est divisible par x
|
|
239
|
+
vp[2] /= 'x;
|
|
240
|
+
vdx[2] -= 1;
|
|
241
|
+
vdt[2]-=1;
|
|
242
|
+
nume *= myresultant2(subst(subst(r0,'y,'x),'z,'y),subst(subst(p0,'y,'x),'z,'y));
|
|
243
|
+
next
|
|
244
|
+
);
|
|
245
|
+
r0 = polcoeff(vp[3],0,'x);
|
|
246
|
+
if( r0 == 0, \\ si vp[3] est divisible par x
|
|
247
|
+
vp[3] /= 'x;
|
|
248
|
+
vdx[3] -= 1;
|
|
249
|
+
vdt[3] -= 1;
|
|
250
|
+
nume *= myresultant2(subst(subst(p0,'y,'x),'z,'y),subst(subst(q0,'y,'x),'z,'y));
|
|
251
|
+
next
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
\\ on enleve le contenu
|
|
255
|
+
cq = mycontent(vp[2]);
|
|
256
|
+
if( cq != 1,
|
|
257
|
+
nume *= resultantcomp([vp[3],vp[1],cq]);
|
|
258
|
+
vp[2] /= cq;
|
|
259
|
+
vdt[2] -= poldegree(cq);
|
|
260
|
+
next
|
|
261
|
+
);
|
|
262
|
+
cq = mycontent(vp[3]);
|
|
263
|
+
if( cq != 1,
|
|
264
|
+
nume *= resultantcomp([vp[1],vp[2],cq]);
|
|
265
|
+
vp[3] /= cq;
|
|
266
|
+
vdt[3] -= poldegree(cq);
|
|
267
|
+
next
|
|
268
|
+
);
|
|
269
|
+
|
|
270
|
+
rm = pollead(vp[3],'x); \\ le coefficient dominant de vp[3].
|
|
271
|
+
res = resultantcomp([vp[1],vp[3]-rm*'x^vdx[3],rm]);
|
|
272
|
+
if( res == 0, error("sorry, case not implemented")); \\ ce cas est-il possible ?
|
|
273
|
+
if(vdt[1]%2 && vdt[3]%2 && degreetot(rm)%2, res *= -1);
|
|
274
|
+
|
|
275
|
+
\\ on baisse le degre de vp[2] en retranchant des multiples de vp[3].
|
|
276
|
+
while( vdx[3] <= vdx[2],
|
|
277
|
+
delta = vdx[2]-vdx[3];
|
|
278
|
+
lp = pollead(vp[2],'x);
|
|
279
|
+
vp[2] = simplify(rm*vp[2]-lp*vp[3]*'x^delta);
|
|
280
|
+
vdx[2] = poldegree(vp[2],'x);
|
|
281
|
+
denom *= res
|
|
282
|
+
);
|
|
283
|
+
vdt[2] = degreetot(vp[2]);
|
|
284
|
+
|
|
285
|
+
prodd = prod(i=1,3,vdt[i]);
|
|
286
|
+
vp = ex(vp,2,3);
|
|
287
|
+
vdx = ex(vdx,2,3);
|
|
288
|
+
vdt = ex(vdt,2,3);
|
|
289
|
+
if( prodd%2, s *= -1);
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
vp[3] = polcoeff(vp[3],0,'x);
|
|
293
|
+
nume *= resultantcomp(vp);
|
|
294
|
+
if(DEBUGLEVEL_res, print([nume,denom]));
|
|
295
|
+
return(simplify(s*nume/denom));
|
|
296
|
+
}
|
|
297
|
+
{discriminant3(p)=
|
|
298
|
+
\\ discriminant d'un pol homogene en 3 variables x, y et z.
|
|
299
|
+
my(dp,normal,re);
|
|
300
|
+
|
|
301
|
+
dp = degreetot(p);
|
|
302
|
+
normal = dp^(dp^2-3*dp+3)*(-1)^(dp*(dp-1)/2);
|
|
303
|
+
re = resultant3([deriv(p,'x),deriv(p,'y),deriv(p,'z)]);
|
|
304
|
+
if( re == 'x, return(0));
|
|
305
|
+
return(re/normal);
|
|
306
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
# sage.doctest: needs sage.groups sage.libs.pari
|
|
3
|
+
r"""
|
|
4
|
+
PARI Groups
|
|
5
|
+
|
|
6
|
+
See :pari:`polgalois` for the PARI documentation of these objects.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from sage.libs.pari import pari
|
|
10
|
+
from sage.misc.lazy_import import lazy_import
|
|
11
|
+
from sage.rings.integer import Integer
|
|
12
|
+
|
|
13
|
+
lazy_import('sage.groups.perm_gps.permgroup_named', 'TransitiveGroup')
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class PariGroup:
|
|
17
|
+
def __init__(self, x, degree):
|
|
18
|
+
"""
|
|
19
|
+
EXAMPLES::
|
|
20
|
+
|
|
21
|
+
sage: PariGroup([6, -1, 2, "S3"], 3)
|
|
22
|
+
PARI group [6, -1, 2, S3] of degree 3
|
|
23
|
+
sage: R.<x> = PolynomialRing(QQ)
|
|
24
|
+
sage: f = x^4 - 17*x^3 - 2*x + 1
|
|
25
|
+
sage: G = f.galois_group(pari_group=True); G
|
|
26
|
+
PARI group [24, -1, 5, "S4"] of degree 4
|
|
27
|
+
"""
|
|
28
|
+
self.__x = pari(x)
|
|
29
|
+
self.__degree = Integer(degree)
|
|
30
|
+
|
|
31
|
+
def __repr__(self):
|
|
32
|
+
"""
|
|
33
|
+
String representation of this group.
|
|
34
|
+
|
|
35
|
+
EXAMPLES::
|
|
36
|
+
|
|
37
|
+
sage: PariGroup([6, -1, 2, "S3"], 3)
|
|
38
|
+
PARI group [6, -1, 2, S3] of degree 3
|
|
39
|
+
"""
|
|
40
|
+
return "PARI group %s of degree %s" % (self.__x, self.__degree)
|
|
41
|
+
|
|
42
|
+
def __eq__(self, other):
|
|
43
|
+
"""
|
|
44
|
+
Test equality.
|
|
45
|
+
|
|
46
|
+
EXAMPLES::
|
|
47
|
+
|
|
48
|
+
sage: R.<x> = PolynomialRing(QQ)
|
|
49
|
+
sage: f1 = x^4 - 17*x^3 - 2*x + 1
|
|
50
|
+
sage: f2 = x^3 - x - 1
|
|
51
|
+
sage: G1 = f1.galois_group(pari_group=True)
|
|
52
|
+
sage: G2 = f2.galois_group(pari_group=True)
|
|
53
|
+
sage: G1 == G1
|
|
54
|
+
True
|
|
55
|
+
sage: G1 == G2
|
|
56
|
+
False
|
|
57
|
+
"""
|
|
58
|
+
return (isinstance(other, PariGroup) and
|
|
59
|
+
(self.__x, self.__degree) == (other.__x, other.__degree))
|
|
60
|
+
|
|
61
|
+
def __ne__(self, other):
|
|
62
|
+
"""
|
|
63
|
+
Test inequality.
|
|
64
|
+
|
|
65
|
+
EXAMPLES::
|
|
66
|
+
|
|
67
|
+
sage: R.<x> = PolynomialRing(QQ)
|
|
68
|
+
sage: f1 = x^4 - 17*x^3 - 2*x + 1
|
|
69
|
+
sage: f2 = x^3 - x - 1
|
|
70
|
+
sage: G1 = f1.galois_group(pari_group=True)
|
|
71
|
+
sage: G2 = f2.galois_group(pari_group=True)
|
|
72
|
+
sage: G1 != G1
|
|
73
|
+
False
|
|
74
|
+
sage: G1 != G2
|
|
75
|
+
True
|
|
76
|
+
"""
|
|
77
|
+
return not (self == other)
|
|
78
|
+
|
|
79
|
+
def __pari__(self):
|
|
80
|
+
"""
|
|
81
|
+
TESTS::
|
|
82
|
+
|
|
83
|
+
sage: G = PariGroup([6, -1, 2, "S3"], 3)
|
|
84
|
+
sage: pari(G)
|
|
85
|
+
[6, -1, 2, S3]
|
|
86
|
+
"""
|
|
87
|
+
return self.__x
|
|
88
|
+
|
|
89
|
+
def degree(self):
|
|
90
|
+
"""
|
|
91
|
+
Return the degree of this group.
|
|
92
|
+
|
|
93
|
+
EXAMPLES::
|
|
94
|
+
|
|
95
|
+
sage: R.<x> = PolynomialRing(QQ)
|
|
96
|
+
sage: f1 = x^4 - 17*x^3 - 2*x + 1
|
|
97
|
+
sage: G1 = f1.galois_group(pari_group=True)
|
|
98
|
+
sage: G1.degree()
|
|
99
|
+
4
|
|
100
|
+
"""
|
|
101
|
+
return self.__degree
|
|
102
|
+
|
|
103
|
+
def signature(self):
|
|
104
|
+
"""
|
|
105
|
+
Return 1 if contained in the alternating group, -1 otherwise.
|
|
106
|
+
|
|
107
|
+
EXAMPLES::
|
|
108
|
+
|
|
109
|
+
sage: R.<x> = QQ[]
|
|
110
|
+
sage: f1 = x^4 - 17*x^3 - 2*x + 1
|
|
111
|
+
sage: G1 = f1.galois_group(pari_group=True)
|
|
112
|
+
sage: G1.signature()
|
|
113
|
+
-1
|
|
114
|
+
"""
|
|
115
|
+
return Integer(self.__x[1])
|
|
116
|
+
|
|
117
|
+
def transitive_number(self):
|
|
118
|
+
"""
|
|
119
|
+
If the transitive label is nTk, return `k`.
|
|
120
|
+
|
|
121
|
+
EXAMPLES::
|
|
122
|
+
|
|
123
|
+
sage: R.<x> = QQ[]
|
|
124
|
+
sage: f1 = x^4 - 17*x^3 - 2*x + 1
|
|
125
|
+
sage: G1 = f1.galois_group(pari_group=True)
|
|
126
|
+
sage: G1.transitive_number()
|
|
127
|
+
5
|
|
128
|
+
"""
|
|
129
|
+
return Integer(self.__x[2])
|
|
130
|
+
|
|
131
|
+
def label(self):
|
|
132
|
+
"""
|
|
133
|
+
Return the human readable description for this group generated by Pari.
|
|
134
|
+
|
|
135
|
+
EXAMPLES::
|
|
136
|
+
|
|
137
|
+
sage: R.<x> = QQ[]
|
|
138
|
+
sage: f1 = x^4 - 17*x^3 - 2*x + 1
|
|
139
|
+
sage: G1 = f1.galois_group(pari_group=True)
|
|
140
|
+
sage: G1.label()
|
|
141
|
+
'S4'
|
|
142
|
+
"""
|
|
143
|
+
return str(self.__x[3])
|
|
144
|
+
|
|
145
|
+
def order(self):
|
|
146
|
+
"""
|
|
147
|
+
Return the order of ``self``.
|
|
148
|
+
|
|
149
|
+
EXAMPLES::
|
|
150
|
+
|
|
151
|
+
sage: R.<x> = PolynomialRing(QQ)
|
|
152
|
+
sage: f1 = x^4 - 17*x^3 - 2*x + 1
|
|
153
|
+
sage: G1 = f1.galois_group(pari_group=True)
|
|
154
|
+
sage: G1.order()
|
|
155
|
+
24
|
|
156
|
+
"""
|
|
157
|
+
return Integer(self.__x[0])
|
|
158
|
+
|
|
159
|
+
cardinality = order
|
|
160
|
+
|
|
161
|
+
def permutation_group(self):
|
|
162
|
+
"""
|
|
163
|
+
Return the corresponding GAP transitive group.
|
|
164
|
+
|
|
165
|
+
EXAMPLES::
|
|
166
|
+
|
|
167
|
+
sage: R.<x> = QQ[]
|
|
168
|
+
sage: f = x^8 - x^5 + x^4 - x^3 + 1
|
|
169
|
+
sage: G = f.galois_group(pari_group=True)
|
|
170
|
+
sage: G.permutation_group()
|
|
171
|
+
Transitive group number 44 of degree 8
|
|
172
|
+
"""
|
|
173
|
+
return TransitiveGroup(self.__degree, self.__x[2])
|
|
174
|
+
|
|
175
|
+
_permgroup_ = permutation_group
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|