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,464 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-pari
|
|
2
|
+
r"""
|
|
3
|
+
Conductor and reduction types for genus 2 curves
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Qing Liu and Henri Cohen (1994-1998): wrote genus2reduction C
|
|
8
|
+
program
|
|
9
|
+
|
|
10
|
+
- William Stein (2006-03-05): wrote Sage interface to genus2reduction
|
|
11
|
+
|
|
12
|
+
- Jeroen Demeyer (2014-09-17): replace genus2reduction program by PARI
|
|
13
|
+
library call (:issue:`15808`)
|
|
14
|
+
|
|
15
|
+
ACKNOWLEDGMENT: (From Liu's website:) Many thanks to Henri Cohen who started
|
|
16
|
+
writing this program. After this program is available, many people pointed out
|
|
17
|
+
to me (mathematical as well as programming) bugs : B. Poonen, E. Schaefer, C.
|
|
18
|
+
Stahlke, M. Stoll, F. Villegas. So thanks to all of them. Thanks also go to
|
|
19
|
+
Ph. Depouilly who help me to compile the program.
|
|
20
|
+
|
|
21
|
+
Also Liu has given me explicit permission to include genus2reduction with Sage
|
|
22
|
+
and for people to modify the C source code however they want.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
# ****************************************************************************
|
|
26
|
+
# Copyright (C) 2006 William Stein <wstein@gmail.com>
|
|
27
|
+
# Copyright (C) 2014 Jeroen Demeyer <jdemeyer@cage.ugent.be>
|
|
28
|
+
#
|
|
29
|
+
# This program is free software: you can redistribute it and/or modify
|
|
30
|
+
# it under the terms of the GNU General Public License as published by
|
|
31
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
32
|
+
# (at your option) any later version.
|
|
33
|
+
# https://www.gnu.org/licenses/
|
|
34
|
+
# ****************************************************************************
|
|
35
|
+
|
|
36
|
+
from sage.structure.sage_object import SageObject
|
|
37
|
+
from sage.rings.integer_ring import ZZ
|
|
38
|
+
from sage.rings.rational_field import QQ
|
|
39
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
40
|
+
from sage.libs.pari import pari
|
|
41
|
+
|
|
42
|
+
roman_numeral = ["", "I", "II", "III", "IV", "V", "VI", "VII"]
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class ReductionData(SageObject):
|
|
46
|
+
r"""
|
|
47
|
+
Reduction data for a genus 2 curve.
|
|
48
|
+
|
|
49
|
+
How to read ``local_data`` attribute, i.e., if this
|
|
50
|
+
class is R, then the following is the meaning of
|
|
51
|
+
``R.local_data[p]``.
|
|
52
|
+
|
|
53
|
+
For each prime number `p` dividing the discriminant of
|
|
54
|
+
`y^2+Q(x)y=P(x)`, there are two lines.
|
|
55
|
+
|
|
56
|
+
The first line contains information about the stable reduction
|
|
57
|
+
after field extension. Here are the meanings of the symbols of
|
|
58
|
+
stable reduction:
|
|
59
|
+
|
|
60
|
+
(I) The stable reduction is smooth (i.e. the curve has potentially
|
|
61
|
+
good reduction).
|
|
62
|
+
|
|
63
|
+
(II) The stable reduction is an elliptic curve `E` with an
|
|
64
|
+
ordinary double point. `j` mod `p` is the modular
|
|
65
|
+
invariant of `E`.
|
|
66
|
+
|
|
67
|
+
(III) The stable reduction is a projective line with two ordinary
|
|
68
|
+
double points.
|
|
69
|
+
|
|
70
|
+
(IV) The stable reduction is two projective lines crossing
|
|
71
|
+
transversally at three points.
|
|
72
|
+
|
|
73
|
+
(V) The stable reduction is the union of two elliptic curves
|
|
74
|
+
`E_1` and `E_2` intersecting transversally at one
|
|
75
|
+
point. Let `j_1`, `j_2` be their modular
|
|
76
|
+
invariants, then `j_1+j_2` and `j_1 j_2` are
|
|
77
|
+
computed (they are numbers mod `p`).
|
|
78
|
+
|
|
79
|
+
(VI) The stable reduction is the union of an elliptic curve
|
|
80
|
+
`E` and a projective line which has an ordinary double
|
|
81
|
+
point. These two components intersect transversally at one point.
|
|
82
|
+
`j` mod `p` is the modular invariant of
|
|
83
|
+
`E`.
|
|
84
|
+
|
|
85
|
+
(VII) The stable reduction is as above, but the two components are
|
|
86
|
+
both singular.
|
|
87
|
+
|
|
88
|
+
In the cases (I) and (V), the Jacobian `J(C)` has
|
|
89
|
+
potentially good reduction. In the cases (III), (IV) and (VII),
|
|
90
|
+
`J(C)` has potentially multiplicative reduction. In the two
|
|
91
|
+
remaining cases, the (potential) semi-abelian reduction of
|
|
92
|
+
`J(C)` is extension of an elliptic curve (with modular
|
|
93
|
+
invariant `j` mod `p`) by a torus.
|
|
94
|
+
|
|
95
|
+
The second line contains three data concerning the reduction at
|
|
96
|
+
`p` without any field extension.
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
#. The first symbol describes the REDUCTION AT `p` of
|
|
100
|
+
`C`. We use the symbols of Namikawa-Ueno for the type of
|
|
101
|
+
the reduction (Namikawa, Ueno:"The complete classification of
|
|
102
|
+
fibers in pencils of curves of genus two", Manuscripta Math., vol.
|
|
103
|
+
9, (1973), pages 143-186.) The reduction symbol is followed by the
|
|
104
|
+
corresponding page number (or just an indication) in the above
|
|
105
|
+
article. The lower index is printed by , for instance, [I2-II-5]
|
|
106
|
+
means [I_2-II-5]. Note that if `K` and `K'` are
|
|
107
|
+
Kodaira symbols for singular fibers of elliptic curves, [K-K'-m]
|
|
108
|
+
and [K'-K-m] are the same type. Finally, [K-K'-1] (not the same as
|
|
109
|
+
[K-K'-1]) is [K'-K-alpha] in the notation of Namikawa-Ueno. The
|
|
110
|
+
figure [2I_0-m] in Namikawa-Ueno, page 159 must be denoted by
|
|
111
|
+
[2I_0-(m+1)].
|
|
112
|
+
|
|
113
|
+
#. The second datum is the GROUP OF CONNECTED COMPONENTS (over an
|
|
114
|
+
ALGEBRAIC CLOSURE (!) of `\GF{p}`) of the Neron
|
|
115
|
+
model of J(C). The symbol (n) means the cyclic group with n
|
|
116
|
+
elements. When n=0, (0) is the trivial group (1).
|
|
117
|
+
``Hn`` is isomorphic to (2)x(2) if n is even and to (4)
|
|
118
|
+
otherwise.
|
|
119
|
+
|
|
120
|
+
Note - The set of rational points of `\Phi` can be computed
|
|
121
|
+
using Theorem 1.17 in S. Bosch and Q. Liu "Rational points of the
|
|
122
|
+
group of components of a Neron model", Manuscripta Math. 98 (1999),
|
|
123
|
+
275-293.
|
|
124
|
+
|
|
125
|
+
#. Finally, `f` is the exponent of the conductor of
|
|
126
|
+
`J(C)` at `p`.
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
.. warning::
|
|
130
|
+
|
|
131
|
+
Be careful regarding the formula:
|
|
132
|
+
|
|
133
|
+
.. MATH::
|
|
134
|
+
|
|
135
|
+
\text{valuation of the naive minimal discriminant} = f + n - 1 + 11c(X).
|
|
136
|
+
|
|
137
|
+
(Q. Liu : "Conducteur et discriminant minimal de courbes de genre
|
|
138
|
+
2", Compositio Math. 94 (1994) 51-79, Theoreme 2) is valid only if
|
|
139
|
+
the residual field is algebraically closed as stated in the paper.
|
|
140
|
+
So this equality does not hold in general over
|
|
141
|
+
`\QQ_p`. The fact is that the minimal discriminant
|
|
142
|
+
may change after unramified extension. One can show however that,
|
|
143
|
+
at worst, the change will stabilize after a quadratic unramified
|
|
144
|
+
extension (Q. Liu : "Modèles entiers de courbes hyperelliptiques
|
|
145
|
+
sur un corps de valuation discrète", Trans. AMS 348 (1996),
|
|
146
|
+
4577-4610, Section 7.2, Proposition 4).
|
|
147
|
+
"""
|
|
148
|
+
def __init__(self, pari_result, P, Q, Pmin, Qmin, minimal_disc,
|
|
149
|
+
local_data, conductor):
|
|
150
|
+
self.pari_result = pari_result
|
|
151
|
+
self.P = P
|
|
152
|
+
self.Q = Q
|
|
153
|
+
self.Pmin = Pmin
|
|
154
|
+
self.Qmin = Qmin
|
|
155
|
+
self.minimal_disc = minimal_disc
|
|
156
|
+
self.local_data = local_data
|
|
157
|
+
self.conductor = conductor
|
|
158
|
+
|
|
159
|
+
def _repr_(self):
|
|
160
|
+
if self.Q == 0:
|
|
161
|
+
yterm = ''
|
|
162
|
+
else:
|
|
163
|
+
yterm = '+ (%s)*y ' % self.Q
|
|
164
|
+
|
|
165
|
+
s = 'Reduction data about this proper smooth genus 2 curve:\n'
|
|
166
|
+
s += '\ty^2 %s= %s\n' % (yterm, self.P)
|
|
167
|
+
if self.Qmin:
|
|
168
|
+
s += 'A Minimal Equation:\n\ty^2 + (%s)y = %s\n' % (self.Qmin, self.Pmin)
|
|
169
|
+
else:
|
|
170
|
+
s += 'A Minimal Equation:\n\ty^2 = %s\n' % self.Pmin
|
|
171
|
+
s += 'Minimal Discriminant: %s\n' % self.minimal_disc
|
|
172
|
+
s += 'Conductor: %s\n' % self.conductor
|
|
173
|
+
s += 'Local Data:\n%s' % self._local_data_str()
|
|
174
|
+
return s
|
|
175
|
+
|
|
176
|
+
def _local_data_str(self):
|
|
177
|
+
s = ''
|
|
178
|
+
D = self.local_data
|
|
179
|
+
K = sorted(D.keys())
|
|
180
|
+
for p in K:
|
|
181
|
+
s += 'p=%s\n%s\n' % (p, D[p])
|
|
182
|
+
s = '\t' + '\n\t'.join(s.strip().split('\n'))
|
|
183
|
+
return s
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def divisors_to_string(divs):
|
|
187
|
+
"""
|
|
188
|
+
Convert a list of numbers (representing the orders of cyclic groups
|
|
189
|
+
in the factorization of a finite abelian group) to a string
|
|
190
|
+
according to the format shown in the examples.
|
|
191
|
+
|
|
192
|
+
INPUT:
|
|
193
|
+
|
|
194
|
+
- ``divs`` -- a (possibly empty) list of numbers
|
|
195
|
+
|
|
196
|
+
OUTPUT: string representation of these numbers
|
|
197
|
+
|
|
198
|
+
EXAMPLES::
|
|
199
|
+
|
|
200
|
+
sage: from sage.interfaces.genus2reduction import divisors_to_string
|
|
201
|
+
sage: print(divisors_to_string([]))
|
|
202
|
+
(1)
|
|
203
|
+
sage: print(divisors_to_string([5]))
|
|
204
|
+
(5)
|
|
205
|
+
sage: print(divisors_to_string([5]*6))
|
|
206
|
+
(5)^6
|
|
207
|
+
sage: print(divisors_to_string([2,3,4]))
|
|
208
|
+
(2)x(3)x(4)
|
|
209
|
+
sage: print(divisors_to_string([6,2,2]))
|
|
210
|
+
(6)x(2)^2
|
|
211
|
+
"""
|
|
212
|
+
s = ""
|
|
213
|
+
n = 0 # How many times have we seen the current divisor?
|
|
214
|
+
for i in range(len(divs)):
|
|
215
|
+
n += 1
|
|
216
|
+
if i+1 == len(divs) or divs[i+1] != divs[i]:
|
|
217
|
+
# Next divisor is different or we are done? Print current one
|
|
218
|
+
if s:
|
|
219
|
+
s += "x"
|
|
220
|
+
s += "(%s)" % divs[i]
|
|
221
|
+
if n > 1:
|
|
222
|
+
s += "^%s" % n
|
|
223
|
+
n = 0
|
|
224
|
+
|
|
225
|
+
return s or "(1)"
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
class Genus2reduction(SageObject):
|
|
229
|
+
r"""
|
|
230
|
+
Conductor and Reduction Types for Genus 2 Curves.
|
|
231
|
+
|
|
232
|
+
Use ``R = genus2reduction(Q, P)`` to obtain reduction
|
|
233
|
+
information about the Jacobian of the projective smooth curve
|
|
234
|
+
defined by `y^2 + Q(x)y = P(x)`. Type ``R?``
|
|
235
|
+
for further documentation and a description of how to interpret the
|
|
236
|
+
local reduction data.
|
|
237
|
+
|
|
238
|
+
EXAMPLES::
|
|
239
|
+
|
|
240
|
+
sage: x = QQ['x'].0
|
|
241
|
+
sage: R = genus2reduction(x^3 - 2*x^2 - 2*x + 1, -5*x^5)
|
|
242
|
+
sage: R.conductor
|
|
243
|
+
1416875
|
|
244
|
+
sage: factor(R.conductor)
|
|
245
|
+
5^4 * 2267
|
|
246
|
+
|
|
247
|
+
The discriminant is always minimal::
|
|
248
|
+
|
|
249
|
+
sage: factor(R.minimal_disc)
|
|
250
|
+
2^3 * 5^5 * 2267
|
|
251
|
+
|
|
252
|
+
Printing R summarizes all the information computed about the curve
|
|
253
|
+
|
|
254
|
+
::
|
|
255
|
+
|
|
256
|
+
sage: R
|
|
257
|
+
Reduction data about this proper smooth genus 2 curve:
|
|
258
|
+
y^2 + (x^3 - 2*x^2 - 2*x + 1)*y = -5*x^5
|
|
259
|
+
A Minimal Equation:
|
|
260
|
+
y^2 ...
|
|
261
|
+
Minimal Discriminant: 56675000
|
|
262
|
+
Conductor: 1416875
|
|
263
|
+
Local Data:
|
|
264
|
+
p=2
|
|
265
|
+
(potential) stable reduction: (II), j=1
|
|
266
|
+
p=5
|
|
267
|
+
(potential) stable reduction: (I)
|
|
268
|
+
reduction at p: [V] page 156, (3), f=4
|
|
269
|
+
p=2267
|
|
270
|
+
(potential) stable reduction: (II), j=432
|
|
271
|
+
reduction at p: [I{1-0-0}] page 170, (1), f=1
|
|
272
|
+
|
|
273
|
+
Here are some examples of curves with modular Jacobians::
|
|
274
|
+
|
|
275
|
+
sage: R = genus2reduction(x^3 + x + 1, -2*x^5 - 3*x^2 + 2*x - 2)
|
|
276
|
+
sage: factor(R.conductor)
|
|
277
|
+
23^2
|
|
278
|
+
sage: factor(genus2reduction(x^3 + 1, -x^5 - 3*x^4 + 2*x^2 + 2*x - 2).conductor)
|
|
279
|
+
29^2
|
|
280
|
+
sage: factor(genus2reduction(x^3 + x + 1, x^5 + 2*x^4 + 2*x^3 + x^2 - x - 1).conductor)
|
|
281
|
+
5^6
|
|
282
|
+
|
|
283
|
+
EXAMPLES::
|
|
284
|
+
|
|
285
|
+
sage: genus2reduction(0, x^6 + 3*x^3 + 63)
|
|
286
|
+
Reduction data about this proper smooth genus 2 curve:
|
|
287
|
+
y^2 = x^6 + 3*x^3 + 63
|
|
288
|
+
A Minimal Equation:
|
|
289
|
+
y^2 ...
|
|
290
|
+
Minimal Discriminant: -10628388316852992
|
|
291
|
+
Conductor: 2893401
|
|
292
|
+
Local Data:
|
|
293
|
+
p=2
|
|
294
|
+
(potential) stable reduction: (V), j1+j2=0, j1*j2=0
|
|
295
|
+
p=3
|
|
296
|
+
(potential) stable reduction: (I)
|
|
297
|
+
reduction at p: [III{9}] page 184, (3)^2, f=10
|
|
298
|
+
p=7
|
|
299
|
+
(potential) stable reduction: (V), j1+j2=0, j1*j2=0
|
|
300
|
+
reduction at p: [I{0}-II-0] page 159, (1), f=2
|
|
301
|
+
|
|
302
|
+
In the above example, Liu remarks that in fact at `p=2`,
|
|
303
|
+
the reduction is [II-II-0] page 163, (1), `f=8`. So the
|
|
304
|
+
conductor of J(C) is actually `2 \cdot 2893401=5786802`.
|
|
305
|
+
|
|
306
|
+
A MODULAR CURVE:
|
|
307
|
+
|
|
308
|
+
Consider the modular curve `X_1(13)` defined by an
|
|
309
|
+
equation
|
|
310
|
+
|
|
311
|
+
.. MATH::
|
|
312
|
+
|
|
313
|
+
y^2 + (x^3-x^2-1)y = x^2 - x.
|
|
314
|
+
|
|
315
|
+
We have::
|
|
316
|
+
|
|
317
|
+
sage: genus2reduction(x^3-x^2-1, x^2 - x)
|
|
318
|
+
Reduction data about this proper smooth genus 2 curve:
|
|
319
|
+
y^2 + (x^3 - x^2 - 1)*y = x^2 - x
|
|
320
|
+
A Minimal Equation:
|
|
321
|
+
y^2 ...
|
|
322
|
+
Minimal Discriminant: -169
|
|
323
|
+
Conductor: 169
|
|
324
|
+
Local Data:
|
|
325
|
+
p=13
|
|
326
|
+
(potential) stable reduction: (V), j1+j2=0, j1*j2=0
|
|
327
|
+
reduction at p: [I{0}-II-0] page 159, (1), f=2
|
|
328
|
+
|
|
329
|
+
So the curve has good reduction at 2. At `p=13`, the stable
|
|
330
|
+
reduction is union of two elliptic curves, and both of them have 0
|
|
331
|
+
as modular invariant. The reduction at 13 is of type [I_0-II-0]
|
|
332
|
+
(see Namikawa-Ueno, page 159). It is an elliptic curve with a cusp.
|
|
333
|
+
The group of connected components of the Neron model of
|
|
334
|
+
`J(C)` is trivial, and the exponent of the conductor of
|
|
335
|
+
`J(C)` at `13` is `f=2`. The conductor of
|
|
336
|
+
`J(C)` is `13^2`. (Note: It is a theorem of
|
|
337
|
+
Conrad-Edixhoven-Stein that the component group of
|
|
338
|
+
`J(X_1(p))` is trivial for all primes `p`.)
|
|
339
|
+
"""
|
|
340
|
+
def __init__(self):
|
|
341
|
+
pass
|
|
342
|
+
|
|
343
|
+
def _repr_(self):
|
|
344
|
+
"""
|
|
345
|
+
EXAMPLES::
|
|
346
|
+
|
|
347
|
+
sage: genus2reduction
|
|
348
|
+
Genus 2 reduction PARI interface
|
|
349
|
+
"""
|
|
350
|
+
return "Genus 2 reduction PARI interface"
|
|
351
|
+
|
|
352
|
+
def __call__(self, Q, P):
|
|
353
|
+
"""
|
|
354
|
+
Compute and return the :class:`ReductionData` corresponding to
|
|
355
|
+
the genus 2 curve `y^2 + Q(x) y = P(x)`.
|
|
356
|
+
|
|
357
|
+
EXAMPLES::
|
|
358
|
+
|
|
359
|
+
sage: x = polygen(QQ)
|
|
360
|
+
sage: genus2reduction(x^3 - 2*x^2 - 2*x + 1, -5*x^5)
|
|
361
|
+
Reduction data about this proper smooth genus 2 curve:
|
|
362
|
+
y^2 + (x^3 - 2*x^2 - 2*x + 1)*y = -5*x^5
|
|
363
|
+
A Minimal Equation:
|
|
364
|
+
y^2 ...
|
|
365
|
+
Minimal Discriminant: 56675000
|
|
366
|
+
Conductor: 1416875
|
|
367
|
+
Local Data:
|
|
368
|
+
p=2
|
|
369
|
+
(potential) stable reduction: (II), j=1
|
|
370
|
+
p=5
|
|
371
|
+
(potential) stable reduction: (I)
|
|
372
|
+
reduction at p: [V] page 156, (3), f=4
|
|
373
|
+
p=2267
|
|
374
|
+
(potential) stable reduction: (II), j=432
|
|
375
|
+
reduction at p: [I{1-0-0}] page 170, (1), f=1
|
|
376
|
+
|
|
377
|
+
::
|
|
378
|
+
|
|
379
|
+
sage: genus2reduction(x^2 + 1, -5*x^5)
|
|
380
|
+
Reduction data about this proper smooth genus 2 curve:
|
|
381
|
+
y^2 + (x^2 + 1)*y = -5*x^5
|
|
382
|
+
A Minimal Equation:
|
|
383
|
+
y^2 ...
|
|
384
|
+
Minimal Discriminant: 48838125
|
|
385
|
+
Conductor: 32025
|
|
386
|
+
Local Data:
|
|
387
|
+
p=3
|
|
388
|
+
(potential) stable reduction: (II), j=1
|
|
389
|
+
reduction at p: [I{1-0-0}] page 170, (1), f=1
|
|
390
|
+
p=5
|
|
391
|
+
(potential) stable reduction: (IV)
|
|
392
|
+
reduction at p: [I{1-1-2}] page 182, (5), f=2
|
|
393
|
+
p=7
|
|
394
|
+
(potential) stable reduction: (II), j=4
|
|
395
|
+
reduction at p: [I{1-0-0}] page 170, (1), f=1
|
|
396
|
+
p=61
|
|
397
|
+
(potential) stable reduction: (II), j=57
|
|
398
|
+
reduction at p: [I{2-0-0}] page 170, (2), f=1
|
|
399
|
+
|
|
400
|
+
Verify that we fix :issue:`5573`::
|
|
401
|
+
|
|
402
|
+
sage: genus2reduction(x^3 + x^2 + x,-2*x^5 + 3*x^4 - x^3 - x^2 - 6*x - 2)
|
|
403
|
+
Reduction data about this proper smooth genus 2 curve:
|
|
404
|
+
y^2 + (x^3 + x^2 + x)*y = -2*x^5 + 3*x^4 - x^3 - x^2 - 6*x - 2
|
|
405
|
+
A Minimal Equation:
|
|
406
|
+
y^2 ...
|
|
407
|
+
Minimal Discriminant: 1520984142
|
|
408
|
+
Conductor: 954
|
|
409
|
+
Local Data:
|
|
410
|
+
p=2
|
|
411
|
+
(potential) stable reduction: (II), j=1
|
|
412
|
+
reduction at p: [I{1-0-0}] page 170, (1), f=1
|
|
413
|
+
p=3
|
|
414
|
+
(potential) stable reduction: (I)
|
|
415
|
+
reduction at p: [II] page 155, (1), f=2
|
|
416
|
+
p=53
|
|
417
|
+
(potential) stable reduction: (II), j=12
|
|
418
|
+
reduction at p: [I{1-0-0}] page 170, (1), f=1
|
|
419
|
+
"""
|
|
420
|
+
R = PolynomialRing(QQ, 'x')
|
|
421
|
+
P = R(P)
|
|
422
|
+
Q = R(Q)
|
|
423
|
+
if P.degree() > 6:
|
|
424
|
+
raise ValueError("P (=%s) must have degree at most 6" % P)
|
|
425
|
+
if Q.degree() >= 4:
|
|
426
|
+
raise ValueError("Q (=%s) must have degree at most 3" % Q)
|
|
427
|
+
|
|
428
|
+
res = pari.genus2red([P, Q])
|
|
429
|
+
conductor = ZZ(res[0])
|
|
430
|
+
Pmin = R(res[2][0])
|
|
431
|
+
Qmin = R(res[2][1])
|
|
432
|
+
minimal_disc = ZZ(pari.hyperelldisc(res[2]))
|
|
433
|
+
|
|
434
|
+
local_data = {}
|
|
435
|
+
for red in res[3]:
|
|
436
|
+
p = ZZ(red[0])
|
|
437
|
+
|
|
438
|
+
t = red[1]
|
|
439
|
+
data = "(potential) stable reduction: (%s)" % roman_numeral[int(t[0])]
|
|
440
|
+
t = t[1]
|
|
441
|
+
if len(t) == 1:
|
|
442
|
+
data += ", j=%s" % t[0].lift()
|
|
443
|
+
elif len(t) == 2:
|
|
444
|
+
data += ", j1+j2=%s, j1*j2=%s" % (t[0].lift(), t[1].lift())
|
|
445
|
+
|
|
446
|
+
t = red[2]
|
|
447
|
+
if t:
|
|
448
|
+
data += "\nreduction at p: %s, " % str(t[0]).replace('"', '').replace("(tame) ", "")
|
|
449
|
+
data += divisors_to_string(t[1]) + ", f=" + str(res[0].valuation(red[0]))
|
|
450
|
+
|
|
451
|
+
local_data[p] = data
|
|
452
|
+
|
|
453
|
+
return ReductionData(res, P, Q, Pmin, Qmin, minimal_disc, local_data, conductor)
|
|
454
|
+
|
|
455
|
+
def __reduce__(self):
|
|
456
|
+
return _reduce_load_genus2reduction, tuple([])
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
# An instance
|
|
460
|
+
genus2reduction = Genus2reduction()
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
def _reduce_load_genus2reduction():
|
|
464
|
+
return genus2reduction
|