passagemath-singular 10.6.31rc3__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-singular might be problematic. Click here for more details.
- PySingular.cpython-314-x86_64-linux-musl.so +0 -0
- passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
- passagemath_singular-10.6.31rc3.dist-info/RECORD +493 -0
- passagemath_singular-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
- passagemath_singular.libs/libSingular-4-67059f19.4.1.so +0 -0
- passagemath_singular.libs/libcddgmp-30166d29.so.0.1.3 +0 -0
- passagemath_singular.libs/libfactory-4-9d37bcf4.4.1.so +0 -0
- passagemath_singular.libs/libflint-fd6f12fc.so.21.0.0 +0 -0
- passagemath_singular.libs/libgcc_s-0cd532bd.so.1 +0 -0
- passagemath_singular.libs/libgf2x-9e30c3e3.so.3.0.0 +0 -0
- passagemath_singular.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
- passagemath_singular.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_singular.libs/libgsl-42cda06f.so.28.0.0 +0 -0
- passagemath_singular.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
- passagemath_singular.libs/libncursesw-9c9e32c3.so.6.5 +0 -0
- passagemath_singular.libs/libntl-26885ca2.so.44.0.1 +0 -0
- passagemath_singular.libs/libomalloc-0-e9ff96db.9.6.so +0 -0
- passagemath_singular.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
- passagemath_singular.libs/libpolys-4-8bcf8e7d.4.1.so +0 -0
- passagemath_singular.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
- passagemath_singular.libs/libreadline-06542304.so.8.2 +0 -0
- passagemath_singular.libs/libsingular_resources-4-73bf7623.4.1.so +0 -0
- passagemath_singular.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
- sage/algebras/all__sagemath_singular.py +3 -0
- sage/algebras/fusion_rings/all.py +19 -0
- sage/algebras/fusion_rings/f_matrix.py +2448 -0
- sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
- sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
- sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
- sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
- sage/algebras/fusion_rings/fusion_double.py +899 -0
- sage/algebras/fusion_rings/fusion_ring.py +1580 -0
- sage/algebras/fusion_rings/poly_tup_engine.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
- sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
- sage/algebras/fusion_rings/shm_managers.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/fusion_rings/shm_managers.pxd +24 -0
- sage/algebras/fusion_rings/shm_managers.pyx +780 -0
- sage/algebras/letterplace/all.py +1 -0
- sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
- sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
- sage/algebras/letterplace/free_algebra_letterplace.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
- sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
- sage/algebras/letterplace/letterplace_ideal.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
- sage/algebras/quatalg/all.py +2 -0
- sage/algebras/quatalg/quaternion_algebra.py +4778 -0
- sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
- sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
- sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
- sage/all__sagemath_singular.py +11 -0
- sage/ext_data/all__sagemath_singular.py +1 -0
- sage/ext_data/singular/function_field/core.lib +98 -0
- sage/interfaces/all__sagemath_singular.py +1 -0
- sage/interfaces/singular.py +2835 -0
- sage/libs/all__sagemath_singular.py +1 -0
- sage/libs/singular/__init__.py +1 -0
- sage/libs/singular/decl.pxd +1168 -0
- sage/libs/singular/function.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/singular/function.pxd +87 -0
- sage/libs/singular/function.pyx +1901 -0
- sage/libs/singular/function_factory.py +61 -0
- sage/libs/singular/groebner_strategy.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/singular/groebner_strategy.pxd +22 -0
- sage/libs/singular/groebner_strategy.pyx +582 -0
- sage/libs/singular/option.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/singular/option.pyx +671 -0
- sage/libs/singular/polynomial.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/singular/polynomial.pxd +39 -0
- sage/libs/singular/polynomial.pyx +661 -0
- sage/libs/singular/ring.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/singular/ring.pxd +58 -0
- sage/libs/singular/ring.pyx +893 -0
- sage/libs/singular/singular.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/singular/singular.pxd +72 -0
- sage/libs/singular/singular.pyx +1944 -0
- sage/libs/singular/standard_options.py +145 -0
- sage/matrix/all__sagemath_singular.py +1 -0
- sage/matrix/matrix_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
- sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
- sage/rings/all__sagemath_singular.py +1 -0
- sage/rings/function_field/all__sagemath_singular.py +1 -0
- sage/rings/function_field/derivations_polymod.py +911 -0
- sage/rings/function_field/element_polymod.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/function_field/element_polymod.pyx +406 -0
- sage/rings/function_field/function_field_polymod.py +2611 -0
- sage/rings/function_field/ideal_polymod.py +1775 -0
- sage/rings/function_field/order_polymod.py +1475 -0
- sage/rings/function_field/place_polymod.py +681 -0
- sage/rings/polynomial/all__sagemath_singular.py +1 -0
- sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
- sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
- sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
- sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
- sage/rings/polynomial/plural.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/plural.pxd +48 -0
- sage/rings/polynomial/plural.pyx +3171 -0
- sage/symbolic/all__sagemath_singular.py +1 -0
- sage/symbolic/comparison_impl.pxi +428 -0
- sage/symbolic/constants_c_impl.pxi +178 -0
- sage/symbolic/expression.cpython-314-x86_64-linux-musl.so +0 -0
- sage/symbolic/expression.pxd +7 -0
- sage/symbolic/expression.pyx +14200 -0
- sage/symbolic/getitem_impl.pxi +202 -0
- sage/symbolic/pynac.pxi +572 -0
- sage/symbolic/pynac_constant_impl.pxi +133 -0
- sage/symbolic/pynac_function_impl.pxi +206 -0
- sage/symbolic/pynac_impl.pxi +2576 -0
- sage/symbolic/pynac_wrap.h +124 -0
- sage/symbolic/series_impl.pxi +272 -0
- sage/symbolic/substitution_map_impl.pxi +94 -0
- sage_wheels/bin/ESingular +0 -0
- sage_wheels/bin/Singular +0 -0
- sage_wheels/bin/TSingular +0 -0
- sage_wheels/lib/singular/MOD/cohomo.la +41 -0
- sage_wheels/lib/singular/MOD/cohomo.so +0 -0
- sage_wheels/lib/singular/MOD/customstd.la +41 -0
- sage_wheels/lib/singular/MOD/customstd.so +0 -0
- sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
- sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
- sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
- sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
- sage_wheels/lib/singular/MOD/gitfan.la +41 -0
- sage_wheels/lib/singular/MOD/gitfan.so +0 -0
- sage_wheels/lib/singular/MOD/interval.la +41 -0
- sage_wheels/lib/singular/MOD/interval.so +0 -0
- sage_wheels/lib/singular/MOD/loctriv.la +41 -0
- sage_wheels/lib/singular/MOD/loctriv.so +0 -0
- sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
- sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
- sage_wheels/lib/singular/MOD/partialgb.la +41 -0
- sage_wheels/lib/singular/MOD/partialgb.so +0 -0
- sage_wheels/lib/singular/MOD/pyobject.la +41 -0
- sage_wheels/lib/singular/MOD/pyobject.so +0 -0
- sage_wheels/lib/singular/MOD/singmathic.la +41 -0
- sage_wheels/lib/singular/MOD/singmathic.so +0 -0
- sage_wheels/lib/singular/MOD/sispasm.la +41 -0
- sage_wheels/lib/singular/MOD/sispasm.so +0 -0
- sage_wheels/lib/singular/MOD/subsets.la +41 -0
- sage_wheels/lib/singular/MOD/subsets.so +0 -0
- sage_wheels/lib/singular/MOD/systhreads.la +41 -0
- sage_wheels/lib/singular/MOD/systhreads.so +0 -0
- sage_wheels/lib/singular/MOD/syzextra.la +41 -0
- sage_wheels/lib/singular/MOD/syzextra.so +0 -0
- sage_wheels/libexec/singular/MOD/change_cost +0 -0
- sage_wheels/libexec/singular/MOD/singularsurf +11 -0
- sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
- sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
- sage_wheels/libexec/singular/MOD/solve_IP +0 -0
- sage_wheels/libexec/singular/MOD/surfex +16 -0
- sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
- sage_wheels/share/factory/gftables/10201 +342 -0
- sage_wheels/share/factory/gftables/1024 +37 -0
- sage_wheels/share/factory/gftables/10609 +356 -0
- sage_wheels/share/factory/gftables/11449 +384 -0
- sage_wheels/share/factory/gftables/11881 +398 -0
- sage_wheels/share/factory/gftables/121 +6 -0
- sage_wheels/share/factory/gftables/12167 +408 -0
- sage_wheels/share/factory/gftables/125 +7 -0
- sage_wheels/share/factory/gftables/12769 +428 -0
- sage_wheels/share/factory/gftables/128 +7 -0
- sage_wheels/share/factory/gftables/1331 +47 -0
- sage_wheels/share/factory/gftables/1369 +48 -0
- sage_wheels/share/factory/gftables/14641 +490 -0
- sage_wheels/share/factory/gftables/15625 +523 -0
- sage_wheels/share/factory/gftables/16 +3 -0
- sage_wheels/share/factory/gftables/16129 +540 -0
- sage_wheels/share/factory/gftables/16384 +549 -0
- sage_wheels/share/factory/gftables/16807 +563 -0
- sage_wheels/share/factory/gftables/1681 +58 -0
- sage_wheels/share/factory/gftables/169 +8 -0
- sage_wheels/share/factory/gftables/17161 +574 -0
- sage_wheels/share/factory/gftables/1849 +64 -0
- sage_wheels/share/factory/gftables/18769 +628 -0
- sage_wheels/share/factory/gftables/19321 +646 -0
- sage_wheels/share/factory/gftables/19683 +659 -0
- sage_wheels/share/factory/gftables/2048 +71 -0
- sage_wheels/share/factory/gftables/2187 +75 -0
- sage_wheels/share/factory/gftables/2197 +76 -0
- sage_wheels/share/factory/gftables/2209 +76 -0
- sage_wheels/share/factory/gftables/22201 +742 -0
- sage_wheels/share/factory/gftables/22801 +762 -0
- sage_wheels/share/factory/gftables/2401 +82 -0
- sage_wheels/share/factory/gftables/243 +11 -0
- sage_wheels/share/factory/gftables/24389 +815 -0
- sage_wheels/share/factory/gftables/24649 +824 -0
- sage_wheels/share/factory/gftables/25 +3 -0
- sage_wheels/share/factory/gftables/256 +11 -0
- sage_wheels/share/factory/gftables/26569 +888 -0
- sage_wheels/share/factory/gftables/27 +3 -0
- sage_wheels/share/factory/gftables/27889 +932 -0
- sage_wheels/share/factory/gftables/2809 +96 -0
- sage_wheels/share/factory/gftables/28561 +954 -0
- sage_wheels/share/factory/gftables/289 +12 -0
- sage_wheels/share/factory/gftables/29791 +995 -0
- sage_wheels/share/factory/gftables/29929 +1000 -0
- sage_wheels/share/factory/gftables/3125 +107 -0
- sage_wheels/share/factory/gftables/32 +4 -0
- sage_wheels/share/factory/gftables/32041 +1070 -0
- sage_wheels/share/factory/gftables/32761 +1094 -0
- sage_wheels/share/factory/gftables/32768 +1095 -0
- sage_wheels/share/factory/gftables/343 +14 -0
- sage_wheels/share/factory/gftables/3481 +118 -0
- sage_wheels/share/factory/gftables/361 +14 -0
- sage_wheels/share/factory/gftables/36481 +1218 -0
- sage_wheels/share/factory/gftables/3721 +126 -0
- sage_wheels/share/factory/gftables/37249 +1244 -0
- sage_wheels/share/factory/gftables/38809 +1296 -0
- sage_wheels/share/factory/gftables/39601 +1322 -0
- sage_wheels/share/factory/gftables/4 +3 -0
- sage_wheels/share/factory/gftables/4096 +139 -0
- sage_wheels/share/factory/gftables/44521 +1486 -0
- sage_wheels/share/factory/gftables/4489 +152 -0
- sage_wheels/share/factory/gftables/49 +4 -0
- sage_wheels/share/factory/gftables/4913 +166 -0
- sage_wheels/share/factory/gftables/49729 +1660 -0
- sage_wheels/share/factory/gftables/5041 +170 -0
- sage_wheels/share/factory/gftables/50653 +1691 -0
- sage_wheels/share/factory/gftables/512 +20 -0
- sage_wheels/share/factory/gftables/51529 +1720 -0
- sage_wheels/share/factory/gftables/52441 +1750 -0
- sage_wheels/share/factory/gftables/529 +20 -0
- sage_wheels/share/factory/gftables/5329 +180 -0
- sage_wheels/share/factory/gftables/54289 +1812 -0
- sage_wheels/share/factory/gftables/57121 +1906 -0
- sage_wheels/share/factory/gftables/58081 +1938 -0
- sage_wheels/share/factory/gftables/59049 +1971 -0
- sage_wheels/share/factory/gftables/6241 +210 -0
- sage_wheels/share/factory/gftables/625 +23 -0
- sage_wheels/share/factory/gftables/63001 +2102 -0
- sage_wheels/share/factory/gftables/64 +5 -0
- sage_wheels/share/factory/gftables/6561 +221 -0
- sage_wheels/share/factory/gftables/6859 +231 -0
- sage_wheels/share/factory/gftables/6889 +232 -0
- sage_wheels/share/factory/gftables/729 +27 -0
- sage_wheels/share/factory/gftables/7921 +266 -0
- sage_wheels/share/factory/gftables/8 +3 -0
- sage_wheels/share/factory/gftables/81 +5 -0
- sage_wheels/share/factory/gftables/8192 +276 -0
- sage_wheels/share/factory/gftables/841 +30 -0
- sage_wheels/share/factory/gftables/9 +3 -0
- sage_wheels/share/factory/gftables/9409 +316 -0
- sage_wheels/share/factory/gftables/961 +34 -0
- sage_wheels/share/info/singular.info +191898 -0
- sage_wheels/share/singular/LIB/GND.lib +1359 -0
- sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
- sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
- sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
- sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
- sage_wheels/share/singular/LIB/VecField.lib +1542 -0
- sage_wheels/share/singular/LIB/absfact.lib +959 -0
- sage_wheels/share/singular/LIB/ainvar.lib +730 -0
- sage_wheels/share/singular/LIB/aksaka.lib +419 -0
- sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
- sage_wheels/share/singular/LIB/algebra.lib +1193 -0
- sage_wheels/share/singular/LIB/all.lib +136 -0
- sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
- sage_wheels/share/singular/LIB/arnold.lib +4553 -0
- sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
- sage_wheels/share/singular/LIB/arr.lib +3486 -0
- sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
- sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
- sage_wheels/share/singular/LIB/bfun.lib +1964 -0
- sage_wheels/share/singular/LIB/bimodules.lib +774 -0
- sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
- sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
- sage_wheels/share/singular/LIB/central.lib +2169 -0
- sage_wheels/share/singular/LIB/chern.lib +4162 -0
- sage_wheels/share/singular/LIB/cimonom.lib +571 -0
- sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
- sage_wheels/share/singular/LIB/classify.lib +3239 -0
- sage_wheels/share/singular/LIB/classify2.lib +1462 -0
- sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
- sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
- sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
- sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
- sage_wheels/share/singular/LIB/combinat.lib +91 -0
- sage_wheels/share/singular/LIB/compregb.lib +276 -0
- sage_wheels/share/singular/LIB/control.lib +1636 -0
- sage_wheels/share/singular/LIB/crypto.lib +3795 -0
- sage_wheels/share/singular/LIB/curveInv.lib +667 -0
- sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
- sage_wheels/share/singular/LIB/customstd.lib +100 -0
- sage_wheels/share/singular/LIB/deRham.lib +5979 -0
- sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
- sage_wheels/share/singular/LIB/decomp.lib +1655 -0
- sage_wheels/share/singular/LIB/deflation.lib +872 -0
- sage_wheels/share/singular/LIB/deform.lib +925 -0
- sage_wheels/share/singular/LIB/difform.lib +3055 -0
- sage_wheels/share/singular/LIB/divisors.lib +750 -0
- sage_wheels/share/singular/LIB/dmod.lib +5817 -0
- sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
- sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
- sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
- sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
- sage_wheels/share/singular/LIB/dummy.lib +17 -0
- sage_wheels/share/singular/LIB/elim.lib +1009 -0
- sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
- sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
- sage_wheels/share/singular/LIB/equising.lib +2127 -0
- sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
- sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
- sage_wheels/share/singular/LIB/findifs.lib +778 -0
- sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
- sage_wheels/share/singular/LIB/finvar.lib +7989 -0
- sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
- sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
- sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
- sage_wheels/share/singular/LIB/freegb.lib +3853 -0
- sage_wheels/share/singular/LIB/general.lib +1350 -0
- sage_wheels/share/singular/LIB/gfan.lib +1768 -0
- sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
- sage_wheels/share/singular/LIB/gkdim.lib +99 -0
- sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
- sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
- sage_wheels/share/singular/LIB/goettsche.lib +909 -0
- sage_wheels/share/singular/LIB/graal.lib +1366 -0
- sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
- sage_wheels/share/singular/LIB/graphics.lib +360 -0
- sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
- sage_wheels/share/singular/LIB/groups.lib +1123 -0
- sage_wheels/share/singular/LIB/grwalk.lib +507 -0
- sage_wheels/share/singular/LIB/hdepth.lib +194 -0
- sage_wheels/share/singular/LIB/help.cnf +57 -0
- sage_wheels/share/singular/LIB/hess.lib +1946 -0
- sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
- sage_wheels/share/singular/LIB/hodge.lib +400 -0
- sage_wheels/share/singular/LIB/homolog.lib +1965 -0
- sage_wheels/share/singular/LIB/hyperel.lib +975 -0
- sage_wheels/share/singular/LIB/inout.lib +679 -0
- sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
- sage_wheels/share/singular/LIB/interval.lib +1418 -0
- sage_wheels/share/singular/LIB/intprog.lib +778 -0
- sage_wheels/share/singular/LIB/invar.lib +443 -0
- sage_wheels/share/singular/LIB/involut.lib +980 -0
- sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
- sage_wheels/share/singular/LIB/kskernel.lib +534 -0
- sage_wheels/share/singular/LIB/latex.lib +3146 -0
- sage_wheels/share/singular/LIB/lejeune.lib +651 -0
- sage_wheels/share/singular/LIB/linalg.lib +2040 -0
- sage_wheels/share/singular/LIB/locnormal.lib +212 -0
- sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
- sage_wheels/share/singular/LIB/makedbm.lib +294 -0
- sage_wheels/share/singular/LIB/mathml.lib +813 -0
- sage_wheels/share/singular/LIB/matrix.lib +1372 -0
- sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
- sage_wheels/share/singular/LIB/methods.lib +212 -0
- sage_wheels/share/singular/LIB/moddiq.lib +322 -0
- sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
- sage_wheels/share/singular/LIB/modnormal.lib +218 -0
- sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
- sage_wheels/share/singular/LIB/modquotient.lib +269 -0
- sage_wheels/share/singular/LIB/modstd.lib +1024 -0
- sage_wheels/share/singular/LIB/modular.lib +545 -0
- sage_wheels/share/singular/LIB/modules.lib +2561 -0
- sage_wheels/share/singular/LIB/modwalk.lib +609 -0
- sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
- sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
- sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
- sage_wheels/share/singular/LIB/mregular.lib +1863 -0
- sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
- sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
- sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
- sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
- sage_wheels/share/singular/LIB/ncall.lib +31 -0
- sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
- sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
- sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
- sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
- sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
- sage_wheels/share/singular/LIB/ncloc.lib +361 -0
- sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
- sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
- sage_wheels/share/singular/LIB/nctools.lib +1887 -0
- sage_wheels/share/singular/LIB/nets.lib +1456 -0
- sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
- sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
- sage_wheels/share/singular/LIB/noether.lib +1106 -0
- sage_wheels/share/singular/LIB/normal.lib +8700 -0
- sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
- sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
- sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
- sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
- sage_wheels/share/singular/LIB/olga.lib +1933 -0
- sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
- sage_wheels/share/singular/LIB/parallel.lib +319 -0
- sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
- sage_wheels/share/singular/LIB/perron.lib +202 -0
- sage_wheels/share/singular/LIB/pfd.lib +2223 -0
- sage_wheels/share/singular/LIB/phindex.lib +642 -0
- sage_wheels/share/singular/LIB/pointid.lib +673 -0
- sage_wheels/share/singular/LIB/polybori.lib +1430 -0
- sage_wheels/share/singular/LIB/polyclass.lib +525 -0
- sage_wheels/share/singular/LIB/polylib.lib +1174 -0
- sage_wheels/share/singular/LIB/polymake.lib +1902 -0
- sage_wheels/share/singular/LIB/presolve.lib +1533 -0
- sage_wheels/share/singular/LIB/primdec.lib +9576 -0
- sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
- sage_wheels/share/singular/LIB/primitiv.lib +401 -0
- sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
- sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
- sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
- sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
- sage_wheels/share/singular/LIB/random.lib +455 -0
- sage_wheels/share/singular/LIB/ratgb.lib +489 -0
- sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
- sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
- sage_wheels/share/singular/LIB/realrad.lib +1197 -0
- sage_wheels/share/singular/LIB/recover.lib +2628 -0
- sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
- sage_wheels/share/singular/LIB/reesclos.lib +465 -0
- sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
- sage_wheels/share/singular/LIB/resgraph.lib +789 -0
- sage_wheels/share/singular/LIB/resjung.lib +820 -0
- sage_wheels/share/singular/LIB/resolve.lib +5110 -0
- sage_wheels/share/singular/LIB/resources.lib +170 -0
- sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
- sage_wheels/share/singular/LIB/ring.lib +1328 -0
- sage_wheels/share/singular/LIB/ringgb.lib +343 -0
- sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
- sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
- sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
- sage_wheels/share/singular/LIB/rootsur.lib +886 -0
- sage_wheels/share/singular/LIB/rstandard.lib +607 -0
- sage_wheels/share/singular/LIB/rwalk.lib +336 -0
- sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
- sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
- sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
- sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
- sage_wheels/share/singular/LIB/schreyer.lib +321 -0
- sage_wheels/share/singular/LIB/schubert.lib +2551 -0
- sage_wheels/share/singular/LIB/sets.lib +524 -0
- sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
- sage_wheels/share/singular/LIB/signcond.lib +437 -0
- sage_wheels/share/singular/LIB/sing.lib +1094 -0
- sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
- sage_wheels/share/singular/LIB/solve.lib +2243 -0
- sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
- sage_wheels/share/singular/LIB/spectrum.lib +62 -0
- sage_wheels/share/singular/LIB/sresext.lib +757 -0
- sage_wheels/share/singular/LIB/ssi.lib +143 -0
- sage_wheels/share/singular/LIB/standard.lib +2769 -0
- sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
- sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
- sage_wheels/share/singular/LIB/stratify.lib +1070 -0
- sage_wheels/share/singular/LIB/surf.lib +506 -0
- sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
- sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
- sage_wheels/share/singular/LIB/surfex.lib +1462 -0
- sage_wheels/share/singular/LIB/swalk.lib +877 -0
- sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
- sage_wheels/share/singular/LIB/systhreads.lib +74 -0
- sage_wheels/share/singular/LIB/tasks.lib +1324 -0
- sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
- sage_wheels/share/singular/LIB/teachstd.lib +858 -0
- sage_wheels/share/singular/LIB/template.lib +116 -0
- sage_wheels/share/singular/LIB/toric.lib +1119 -0
- sage_wheels/share/singular/LIB/transformation.lib +116 -0
- sage_wheels/share/singular/LIB/triang.lib +1197 -0
- sage_wheels/share/singular/LIB/tropical.lib +8741 -0
- sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
- sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
- sage_wheels/share/singular/LIB/tst.lib +1108 -0
- sage_wheels/share/singular/LIB/weierstr.lib +241 -0
- sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
- sage_wheels/share/singular/emacs/.emacs-general +184 -0
- sage_wheels/share/singular/emacs/.emacs-singular +234 -0
- sage_wheels/share/singular/emacs/COPYING +44 -0
- sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
- sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
- sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
- sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
- sage_wheels/share/singular/emacs/singular.el +4273 -0
- sage_wheels/share/singular/emacs/singular.xpm +39 -0
- sage_wheels/share/singular/singular.idx +5002 -0
|
@@ -0,0 +1,681 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-singular
|
|
2
|
+
# sage.doctest: needs sage.rings.function_field
|
|
3
|
+
"""
|
|
4
|
+
Places of function fields: extension
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# ****************************************************************************
|
|
8
|
+
# Copyright (C) 2016-2022 Kwankyu Lee <ekwankyu@gmail.com>
|
|
9
|
+
# 2019 Brent Baccala
|
|
10
|
+
# 2021 Jonathan Kliem
|
|
11
|
+
#
|
|
12
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
13
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
14
|
+
# the License, or (at your option) any later version.
|
|
15
|
+
# http://www.gnu.org/licenses/
|
|
16
|
+
# ****************************************************************************
|
|
17
|
+
|
|
18
|
+
import sage
|
|
19
|
+
from sage.arith.functions import lcm
|
|
20
|
+
from sage.rings.integer_ring import ZZ
|
|
21
|
+
from sage.misc.cachefunc import cached_method
|
|
22
|
+
from sage.rings.number_field.number_field_base import NumberField
|
|
23
|
+
|
|
24
|
+
from .place import FunctionFieldPlace
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class FunctionFieldPlace_polymod(FunctionFieldPlace):
|
|
28
|
+
"""
|
|
29
|
+
Places of extensions of function fields.
|
|
30
|
+
"""
|
|
31
|
+
def place_below(self):
|
|
32
|
+
"""
|
|
33
|
+
Return the place lying below the place.
|
|
34
|
+
|
|
35
|
+
EXAMPLES::
|
|
36
|
+
|
|
37
|
+
sage: # needs sage.rings.finite_rings
|
|
38
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
39
|
+
sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
|
|
40
|
+
sage: OK = K.maximal_order()
|
|
41
|
+
sage: OL = L.maximal_order()
|
|
42
|
+
sage: p = OK.ideal(x^2 + x + 1)
|
|
43
|
+
sage: dec = OL.decomposition(p)
|
|
44
|
+
sage: q = dec[0][0].place()
|
|
45
|
+
sage: q.place_below()
|
|
46
|
+
Place (x^2 + x + 1)
|
|
47
|
+
"""
|
|
48
|
+
return self.prime_ideal().prime_below().place()
|
|
49
|
+
|
|
50
|
+
def relative_degree(self):
|
|
51
|
+
"""
|
|
52
|
+
Return the relative degree of the place.
|
|
53
|
+
|
|
54
|
+
EXAMPLES::
|
|
55
|
+
|
|
56
|
+
sage: # needs sage.rings.finite_rings
|
|
57
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
58
|
+
sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
|
|
59
|
+
sage: OK = K.maximal_order()
|
|
60
|
+
sage: OL = L.maximal_order()
|
|
61
|
+
sage: p = OK.ideal(x^2 + x + 1)
|
|
62
|
+
sage: dec = OL.decomposition(p)
|
|
63
|
+
sage: q = dec[0][0].place()
|
|
64
|
+
sage: q.relative_degree()
|
|
65
|
+
1
|
|
66
|
+
"""
|
|
67
|
+
return self._prime._relative_degree
|
|
68
|
+
|
|
69
|
+
def degree(self):
|
|
70
|
+
"""
|
|
71
|
+
Return the degree of the place.
|
|
72
|
+
|
|
73
|
+
EXAMPLES::
|
|
74
|
+
|
|
75
|
+
sage: # needs sage.rings.finite_rings
|
|
76
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
77
|
+
sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
|
|
78
|
+
sage: OK = K.maximal_order()
|
|
79
|
+
sage: OL = L.maximal_order()
|
|
80
|
+
sage: p = OK.ideal(x^2 + x + 1)
|
|
81
|
+
sage: dec = OL.decomposition(p)
|
|
82
|
+
sage: q = dec[0][0].place()
|
|
83
|
+
sage: q.degree()
|
|
84
|
+
2
|
|
85
|
+
"""
|
|
86
|
+
return self.relative_degree() * self.place_below().degree()
|
|
87
|
+
|
|
88
|
+
def is_infinite_place(self):
|
|
89
|
+
"""
|
|
90
|
+
Return ``True`` if the place is above the unique infinite place
|
|
91
|
+
of the underlying rational function field.
|
|
92
|
+
|
|
93
|
+
EXAMPLES::
|
|
94
|
+
|
|
95
|
+
sage: # needs sage.rings.finite_rings
|
|
96
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
97
|
+
sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
|
|
98
|
+
sage: pls = L.places()
|
|
99
|
+
sage: [p.is_infinite_place() for p in pls]
|
|
100
|
+
[True, True, False]
|
|
101
|
+
sage: [p.place_below() for p in pls]
|
|
102
|
+
[Place (1/x), Place (1/x), Place (x)]
|
|
103
|
+
"""
|
|
104
|
+
return self.place_below().is_infinite_place()
|
|
105
|
+
|
|
106
|
+
def local_uniformizer(self):
|
|
107
|
+
"""
|
|
108
|
+
Return an element of the function field that has a simple zero
|
|
109
|
+
at the place.
|
|
110
|
+
|
|
111
|
+
EXAMPLES::
|
|
112
|
+
|
|
113
|
+
sage: # needs sage.rings.finite_rings
|
|
114
|
+
sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
|
|
115
|
+
sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
|
|
116
|
+
sage: pls = L.places()
|
|
117
|
+
sage: [p.local_uniformizer().valuation(p) for p in pls]
|
|
118
|
+
[1, 1, 1, 1, 1]
|
|
119
|
+
"""
|
|
120
|
+
gens = self._prime.gens()
|
|
121
|
+
for g in gens:
|
|
122
|
+
if g.valuation(self) == 1:
|
|
123
|
+
return g
|
|
124
|
+
assert False, "Internal error"
|
|
125
|
+
|
|
126
|
+
def gaps(self):
|
|
127
|
+
"""
|
|
128
|
+
Return the gap sequence for the place.
|
|
129
|
+
|
|
130
|
+
EXAMPLES::
|
|
131
|
+
|
|
132
|
+
sage: # needs sage.rings.finite_rings
|
|
133
|
+
sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
|
|
134
|
+
sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
|
|
135
|
+
sage: O = L.maximal_order()
|
|
136
|
+
sage: p = O.ideal(x,y).place()
|
|
137
|
+
sage: p.gaps() # a Weierstrass place
|
|
138
|
+
[1, 2, 4]
|
|
139
|
+
|
|
140
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[] # needs sage.rings.finite_rings
|
|
141
|
+
sage: L.<y> = K.extension(Y^3 + x^3 * Y + x) # needs sage.rings.finite_rings
|
|
142
|
+
sage: [p.gaps() for p in L.places()] # needs sage.rings.finite_rings
|
|
143
|
+
[[1, 2, 4], [1, 2, 4], [1, 2, 4]]
|
|
144
|
+
"""
|
|
145
|
+
if self.degree() == 1:
|
|
146
|
+
return self._gaps_rational() # faster for rational places
|
|
147
|
+
else:
|
|
148
|
+
return self._gaps_wronskian()
|
|
149
|
+
|
|
150
|
+
def _gaps_rational(self):
|
|
151
|
+
"""
|
|
152
|
+
Return the gap sequence for the rational place.
|
|
153
|
+
|
|
154
|
+
This method computes the gap numbers using the definition of gap
|
|
155
|
+
numbers. The dimension of the multiple of the prime divisor
|
|
156
|
+
supported at the place is computed by Hess' algorithm.
|
|
157
|
+
|
|
158
|
+
EXAMPLES::
|
|
159
|
+
|
|
160
|
+
sage: # needs sage.rings.finite_rings
|
|
161
|
+
sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
|
|
162
|
+
sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
|
|
163
|
+
sage: O = L.maximal_order()
|
|
164
|
+
sage: p = O.ideal(x, y).place()
|
|
165
|
+
sage: p.gaps() # indirect doctest
|
|
166
|
+
[1, 2, 4]
|
|
167
|
+
|
|
168
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[] # needs sage.rings.finite_rings
|
|
169
|
+
sage: L.<y> = K.extension(Y^3 + x^3*Y + x) # needs sage.rings.finite_rings
|
|
170
|
+
sage: [p.gaps() for p in L.places()] # indirect doctest # needs sage.rings.finite_rings
|
|
171
|
+
[[1, 2, 4], [1, 2, 4], [1, 2, 4]]
|
|
172
|
+
"""
|
|
173
|
+
from sage.matrix.constructor import matrix
|
|
174
|
+
|
|
175
|
+
F = self.function_field()
|
|
176
|
+
n = F.degree()
|
|
177
|
+
O = F.maximal_order()
|
|
178
|
+
Oinf = F.maximal_order_infinite()
|
|
179
|
+
|
|
180
|
+
R = O._module_base_ring._ring
|
|
181
|
+
one = R.one()
|
|
182
|
+
|
|
183
|
+
# Hess' Riemann-Roch basis algorithm stripped down for gaps computation
|
|
184
|
+
def dim_RR(M):
|
|
185
|
+
den = lcm([e.denominator() for e in M.list()])
|
|
186
|
+
mat = matrix(R, M.nrows(), [(den*e).numerator() for e in M.list()])
|
|
187
|
+
|
|
188
|
+
# initialise pivot_row and conflicts list
|
|
189
|
+
pivot_row = [[] for i in range(n)]
|
|
190
|
+
conflicts = []
|
|
191
|
+
for i in range(n):
|
|
192
|
+
bestp = -1
|
|
193
|
+
best = -1
|
|
194
|
+
for c in range(n):
|
|
195
|
+
d = mat[i,c].degree()
|
|
196
|
+
if d >= best:
|
|
197
|
+
bestp = c
|
|
198
|
+
best = d
|
|
199
|
+
|
|
200
|
+
if best >= 0:
|
|
201
|
+
pivot_row[bestp].append((i,best))
|
|
202
|
+
if len(pivot_row[bestp]) > 1:
|
|
203
|
+
conflicts.append(bestp)
|
|
204
|
+
|
|
205
|
+
# while there is a conflict, do a simple transformation
|
|
206
|
+
while conflicts:
|
|
207
|
+
c = conflicts.pop()
|
|
208
|
+
row = pivot_row[c]
|
|
209
|
+
i,ideg = row.pop()
|
|
210
|
+
j,jdeg = row.pop()
|
|
211
|
+
|
|
212
|
+
if jdeg > ideg:
|
|
213
|
+
i,j = j,i
|
|
214
|
+
ideg,jdeg = jdeg,ideg
|
|
215
|
+
|
|
216
|
+
coeff = - mat[i,c].lc() / mat[j,c].lc()
|
|
217
|
+
s = coeff * one.shift(ideg - jdeg)
|
|
218
|
+
|
|
219
|
+
mat.add_multiple_of_row(i, j, s)
|
|
220
|
+
|
|
221
|
+
row.append((j,jdeg))
|
|
222
|
+
|
|
223
|
+
bestp = -1
|
|
224
|
+
best = -1
|
|
225
|
+
for c in range(n):
|
|
226
|
+
d = mat[i,c].degree()
|
|
227
|
+
if d >= best:
|
|
228
|
+
bestp = c
|
|
229
|
+
best = d
|
|
230
|
+
|
|
231
|
+
if best >= 0:
|
|
232
|
+
pivot_row[bestp].append((i,best))
|
|
233
|
+
if len(pivot_row[bestp]) > 1:
|
|
234
|
+
conflicts.append(bestp)
|
|
235
|
+
|
|
236
|
+
dim = 0
|
|
237
|
+
for j in range(n):
|
|
238
|
+
i,ideg = pivot_row[j][0]
|
|
239
|
+
k = den.degree() - ideg + 1
|
|
240
|
+
if k > 0:
|
|
241
|
+
dim += k
|
|
242
|
+
return dim
|
|
243
|
+
|
|
244
|
+
V,fr,to = F.vector_space()
|
|
245
|
+
|
|
246
|
+
prime_inv = ~ self.prime_ideal()
|
|
247
|
+
I = O.ideal(1)
|
|
248
|
+
J = Oinf.ideal(1)
|
|
249
|
+
|
|
250
|
+
B = matrix([to(b) for b in J.gens_over_base()])
|
|
251
|
+
C = matrix([to(v) for v in I.gens_over_base()])
|
|
252
|
+
|
|
253
|
+
prev = dim_RR(C * B.inverse())
|
|
254
|
+
gaps = []
|
|
255
|
+
g = F.genus()
|
|
256
|
+
i = 1
|
|
257
|
+
if self.is_infinite_place():
|
|
258
|
+
while g:
|
|
259
|
+
J = J * prime_inv
|
|
260
|
+
B = matrix([to(b) for b in J.gens_over_base()])
|
|
261
|
+
dim = dim_RR(C * B.inverse())
|
|
262
|
+
if dim == prev:
|
|
263
|
+
gaps.append(i)
|
|
264
|
+
g -= 1
|
|
265
|
+
else:
|
|
266
|
+
prev = dim
|
|
267
|
+
i += 1
|
|
268
|
+
else: # self is a finite place
|
|
269
|
+
Binv = B.inverse()
|
|
270
|
+
while g:
|
|
271
|
+
I = I * prime_inv
|
|
272
|
+
C = matrix([to(v) for v in I.gens_over_base()])
|
|
273
|
+
dim = dim_RR(C * Binv)
|
|
274
|
+
if dim == prev:
|
|
275
|
+
gaps.append(i)
|
|
276
|
+
g -= 1
|
|
277
|
+
else:
|
|
278
|
+
prev = dim
|
|
279
|
+
i += 1
|
|
280
|
+
|
|
281
|
+
return gaps
|
|
282
|
+
|
|
283
|
+
def _gaps_wronskian(self):
|
|
284
|
+
"""
|
|
285
|
+
Return the gap sequence for the place.
|
|
286
|
+
|
|
287
|
+
This method implements the local version of Hess' Algorithm 30 of [Hes2002b]_
|
|
288
|
+
based on the Wronskian determinant.
|
|
289
|
+
|
|
290
|
+
EXAMPLES::
|
|
291
|
+
|
|
292
|
+
sage: # needs sage.rings.finite_rings
|
|
293
|
+
sage: K.<x> = FunctionField(GF(4)); _.<Y> = K[]
|
|
294
|
+
sage: L.<y> = K.extension(Y^3 + x^3*Y + x)
|
|
295
|
+
sage: O = L.maximal_order()
|
|
296
|
+
sage: p = O.ideal(x, y).place()
|
|
297
|
+
sage: p._gaps_wronskian() # a Weierstrass place
|
|
298
|
+
[1, 2, 4]
|
|
299
|
+
|
|
300
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[] # needs sage.rings.finite_rings
|
|
301
|
+
sage: L.<y> = K.extension(Y^3 + x^3 * Y + x) # needs sage.rings.finite_rings
|
|
302
|
+
sage: [p._gaps_wronskian() for p in L.places()] # needs sage.rings.finite_rings
|
|
303
|
+
[[1, 2, 4], [1, 2, 4], [1, 2, 4]]
|
|
304
|
+
"""
|
|
305
|
+
from sage.matrix.constructor import matrix
|
|
306
|
+
from sage.modules.free_module_element import vector
|
|
307
|
+
|
|
308
|
+
F = self.function_field()
|
|
309
|
+
R,fr_R,to_R = self._residue_field()
|
|
310
|
+
der = F.higher_derivation()
|
|
311
|
+
|
|
312
|
+
sep = self.local_uniformizer()
|
|
313
|
+
|
|
314
|
+
# a differential divisor satisfying
|
|
315
|
+
# v_p(W) = 0 for the place p
|
|
316
|
+
W = sep.differential().divisor()
|
|
317
|
+
|
|
318
|
+
# Step 3:
|
|
319
|
+
basis = W._basis()
|
|
320
|
+
d = len(basis)
|
|
321
|
+
M = matrix([to_R(b) for b in basis])
|
|
322
|
+
if M.rank() == 0:
|
|
323
|
+
return []
|
|
324
|
+
|
|
325
|
+
# Steps 4, 5, 6, 7:
|
|
326
|
+
e = 1
|
|
327
|
+
gaps = [1]
|
|
328
|
+
while M.nrows() < d:
|
|
329
|
+
row = vector([to_R(der._derive(basis[i], e, sep)) for i in range(d)])
|
|
330
|
+
if row not in M.row_space():
|
|
331
|
+
M = matrix(M.rows() + [row])
|
|
332
|
+
M.echelonize()
|
|
333
|
+
gaps.append(e + 1)
|
|
334
|
+
e += 1
|
|
335
|
+
|
|
336
|
+
return gaps
|
|
337
|
+
|
|
338
|
+
def residue_field(self, name=None):
|
|
339
|
+
"""
|
|
340
|
+
Return the residue field of the place.
|
|
341
|
+
|
|
342
|
+
INPUT:
|
|
343
|
+
|
|
344
|
+
- ``name`` -- string; name of the generator of the residue field
|
|
345
|
+
|
|
346
|
+
OUTPUT:
|
|
347
|
+
|
|
348
|
+
- a field isomorphic to the residue field
|
|
349
|
+
|
|
350
|
+
- a ring homomorphism from the valuation ring to the field
|
|
351
|
+
|
|
352
|
+
- a ring homomorphism from the field to the valuation ring
|
|
353
|
+
|
|
354
|
+
EXAMPLES::
|
|
355
|
+
|
|
356
|
+
sage: # needs sage.rings.finite_rings
|
|
357
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
358
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
359
|
+
sage: p = L.places_finite()[0]
|
|
360
|
+
sage: k, fr_k, to_k = p.residue_field()
|
|
361
|
+
sage: k
|
|
362
|
+
Finite Field of size 2
|
|
363
|
+
sage: fr_k
|
|
364
|
+
Ring morphism:
|
|
365
|
+
From: Finite Field of size 2
|
|
366
|
+
To: Valuation ring at Place (x, x*y)
|
|
367
|
+
sage: to_k
|
|
368
|
+
Ring morphism:
|
|
369
|
+
From: Valuation ring at Place (x, x*y)
|
|
370
|
+
To: Finite Field of size 2
|
|
371
|
+
sage: to_k(y)
|
|
372
|
+
Traceback (most recent call last):
|
|
373
|
+
...
|
|
374
|
+
TypeError: y fails to convert into the map's domain
|
|
375
|
+
Valuation ring at Place (x, x*y)...
|
|
376
|
+
sage: to_k(1/y)
|
|
377
|
+
0
|
|
378
|
+
sage: to_k(y/(1+y))
|
|
379
|
+
1
|
|
380
|
+
"""
|
|
381
|
+
return self.valuation_ring().residue_field(name=name)
|
|
382
|
+
|
|
383
|
+
@cached_method
|
|
384
|
+
def _residue_field(self, name=None):
|
|
385
|
+
"""
|
|
386
|
+
Return the residue field of the place along with the functions
|
|
387
|
+
mapping from and to it.
|
|
388
|
+
|
|
389
|
+
INPUT:
|
|
390
|
+
|
|
391
|
+
- ``name`` -- string (default: ``None``); name of the generator
|
|
392
|
+
of the residue field
|
|
393
|
+
|
|
394
|
+
EXAMPLES::
|
|
395
|
+
|
|
396
|
+
sage: # needs sage.rings.finite_rings
|
|
397
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
398
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
399
|
+
sage: p = L.places_finite()[0]
|
|
400
|
+
sage: k,fr_k,to_k = p._residue_field()
|
|
401
|
+
sage: k
|
|
402
|
+
Finite Field of size 2
|
|
403
|
+
sage: [fr_k(e) for e in k]
|
|
404
|
+
[0, 1]
|
|
405
|
+
|
|
406
|
+
::
|
|
407
|
+
|
|
408
|
+
sage: # needs sage.rings.finite_rings
|
|
409
|
+
sage: K.<x> = FunctionField(GF(9)); _.<Y> = K[]
|
|
410
|
+
sage: L.<y> = K.extension(Y^3 + Y - x^4)
|
|
411
|
+
sage: p = L.places()[-1]
|
|
412
|
+
sage: p.residue_field()
|
|
413
|
+
(Finite Field in z2 of size 3^2, Ring morphism:
|
|
414
|
+
From: Finite Field in z2 of size 3^2
|
|
415
|
+
To: Valuation ring at Place (x + 1, y + 2*z2), Ring morphism:
|
|
416
|
+
From: Valuation ring at Place (x + 1, y + 2*z2)
|
|
417
|
+
To: Finite Field in z2 of size 3^2)
|
|
418
|
+
|
|
419
|
+
::
|
|
420
|
+
|
|
421
|
+
sage: K.<x> = FunctionField(QQ); _.<Y> = K[]
|
|
422
|
+
sage: L.<y> = K.extension(Y^3 + Y - x^4)
|
|
423
|
+
sage: O = K.maximal_order()
|
|
424
|
+
sage: I = O.ideal(x)
|
|
425
|
+
sage: [p.residue_field() for p in L.places_above(I.place())]
|
|
426
|
+
[(Rational Field, Ring morphism:
|
|
427
|
+
From: Rational Field
|
|
428
|
+
To: Valuation ring at Place (x, y, y^2), Ring morphism:
|
|
429
|
+
From: Valuation ring at Place (x, y, y^2)
|
|
430
|
+
To: Rational Field),
|
|
431
|
+
(Number Field in s with defining polynomial x^2 - 2*x + 2, Ring morphism:
|
|
432
|
+
From: Number Field in s with defining polynomial x^2 - 2*x + 2
|
|
433
|
+
To: Valuation ring at Place (x, x*y, y^2 + 1), Ring morphism:
|
|
434
|
+
From: Valuation ring at Place (x, x*y, y^2 + 1)
|
|
435
|
+
To: Number Field in s with defining polynomial x^2 - 2*x + 2)]
|
|
436
|
+
sage: for p in L.places_above(I.place()):
|
|
437
|
+
....: k, fr_k, to_k = p.residue_field()
|
|
438
|
+
....: assert all(fr_k(k(e)) == e for e in range(10))
|
|
439
|
+
....: assert all(to_k(fr_k(e)) == e for e in [k.random_element() for i in [1..10]])
|
|
440
|
+
|
|
441
|
+
::
|
|
442
|
+
|
|
443
|
+
sage: # needs sage.rings.number_field
|
|
444
|
+
sage: K.<x> = FunctionField(QQbar); _.<Y> = K[]
|
|
445
|
+
sage: L.<y> = K.extension(Y^3 + Y - x^4)
|
|
446
|
+
sage: O = K.maximal_order()
|
|
447
|
+
sage: I = O.ideal(x)
|
|
448
|
+
sage: [p.residue_field() for p in L.places_above(I.place())]
|
|
449
|
+
[(Algebraic Field, Ring morphism:
|
|
450
|
+
From: Algebraic Field
|
|
451
|
+
To: Valuation ring at Place (x, y - I, y^2 + 1), Ring morphism:
|
|
452
|
+
From: Valuation ring at Place (x, y - I, y^2 + 1)
|
|
453
|
+
To: Algebraic Field), (Algebraic Field, Ring morphism:
|
|
454
|
+
From: Algebraic Field
|
|
455
|
+
To: Valuation ring at Place (x, y, y^2), Ring morphism:
|
|
456
|
+
From: Valuation ring at Place (x, y, y^2)
|
|
457
|
+
To: Algebraic Field), (Algebraic Field, Ring morphism:
|
|
458
|
+
From: Algebraic Field
|
|
459
|
+
To: Valuation ring at Place (x, y + I, y^2 + 1), Ring morphism:
|
|
460
|
+
From: Valuation ring at Place (x, y + I, y^2 + 1)
|
|
461
|
+
To: Algebraic Field)]
|
|
462
|
+
"""
|
|
463
|
+
F = self.function_field()
|
|
464
|
+
prime = self.prime_ideal() # Let P be this prime ideal
|
|
465
|
+
|
|
466
|
+
if self.is_infinite_place():
|
|
467
|
+
_F, from_F, to_F = F._inversion_isomorphism()
|
|
468
|
+
_prime = prime._ideal
|
|
469
|
+
_place = _prime.place()
|
|
470
|
+
|
|
471
|
+
K, _from_K, _to_K = _place._residue_field(name=name)
|
|
472
|
+
|
|
473
|
+
from_K = lambda e: from_F(_from_K(e))
|
|
474
|
+
to_K = lambda f: _to_K(to_F(f))
|
|
475
|
+
return K, from_K, to_K
|
|
476
|
+
|
|
477
|
+
from sage.matrix.constructor import matrix
|
|
478
|
+
from sage.modules.free_module_element import vector
|
|
479
|
+
|
|
480
|
+
O = F.maximal_order()
|
|
481
|
+
Obasis = O.basis()
|
|
482
|
+
|
|
483
|
+
M = prime.hnf()
|
|
484
|
+
R = M.base_ring() # univariate polynomial ring
|
|
485
|
+
n = M.nrows() # extension degree of the function field
|
|
486
|
+
|
|
487
|
+
# Step 1: construct a vector space representing the residue field
|
|
488
|
+
#
|
|
489
|
+
# Given an (reversed) HNF basis M for a prime ideal P of O, every
|
|
490
|
+
# element of O mod P can be represented by a vector of polynomials of
|
|
491
|
+
# degrees less than those of the (anti)diagonal elements of M. In turn,
|
|
492
|
+
# the vector of polynomials can be represented by the vector of the
|
|
493
|
+
# coefficients of the polynomials. V is the space of these vectors.
|
|
494
|
+
|
|
495
|
+
k = F.constant_base_field()
|
|
496
|
+
degs = [M[i,i].degree() for i in range(n)]
|
|
497
|
+
deg = sum(degs) # degree of the place
|
|
498
|
+
|
|
499
|
+
# Let V = k**deg
|
|
500
|
+
|
|
501
|
+
def to_V(e):
|
|
502
|
+
"""
|
|
503
|
+
An example to show the idea: Suppose that::
|
|
504
|
+
|
|
505
|
+
[x 0 0]
|
|
506
|
+
M = [0 1 0] and v = (x^10, x^7 + x^3, x^7 + x^4 + x^3 + 1)
|
|
507
|
+
[1 0 1]
|
|
508
|
+
|
|
509
|
+
Then to_V(e) = [1]
|
|
510
|
+
"""
|
|
511
|
+
v = O._coordinate_vector(e)
|
|
512
|
+
vec = []
|
|
513
|
+
for i in reversed(range(n)):
|
|
514
|
+
q,r = v[i].quo_rem(M[i,i])
|
|
515
|
+
v -= q * M[i]
|
|
516
|
+
for j in range(degs[i]):
|
|
517
|
+
vec.append(r[j])
|
|
518
|
+
return vector(vec)
|
|
519
|
+
|
|
520
|
+
def fr_V(vec): # to_O
|
|
521
|
+
vec = vec.list()
|
|
522
|
+
pos = 0
|
|
523
|
+
e = F(0)
|
|
524
|
+
for i in reversed(range(n)):
|
|
525
|
+
if degs[i] == 0:
|
|
526
|
+
continue
|
|
527
|
+
else:
|
|
528
|
+
end = pos + degs[i]
|
|
529
|
+
e += R(vec[pos:end]) * Obasis[i]
|
|
530
|
+
pos = end
|
|
531
|
+
return e
|
|
532
|
+
|
|
533
|
+
# Step 2: find a primitive element of the residue field
|
|
534
|
+
|
|
535
|
+
def candidates():
|
|
536
|
+
# Trial 1: this suffices for places obtained from Kummers' theorem
|
|
537
|
+
# and for places of function fields over number fields or QQbar
|
|
538
|
+
|
|
539
|
+
# Note that a = O._kummer_gen is a simple generator of O/prime over
|
|
540
|
+
# o/p. If b is a simple generator of o/p over the constant base field
|
|
541
|
+
# k, then the set a + k * b contains a simple generator of O/prime
|
|
542
|
+
# over k (as there are finite number of intermediate fields).
|
|
543
|
+
a = O._kummer_gen
|
|
544
|
+
if a is not None:
|
|
545
|
+
K,fr_K,_ = self.place_below().residue_field()
|
|
546
|
+
b = fr_K(K.gen())
|
|
547
|
+
if isinstance(k, (NumberField, sage.rings.abc.AlgebraicField)):
|
|
548
|
+
kk = ZZ
|
|
549
|
+
else:
|
|
550
|
+
kk = k
|
|
551
|
+
for c in kk:
|
|
552
|
+
if c != 0:
|
|
553
|
+
yield a + c * b
|
|
554
|
+
|
|
555
|
+
# Trial 2: basis elements of the maximal order
|
|
556
|
+
for gen in reversed(Obasis):
|
|
557
|
+
yield gen
|
|
558
|
+
|
|
559
|
+
import itertools
|
|
560
|
+
|
|
561
|
+
# Trial 3: exhaustive search in O using only polynomials
|
|
562
|
+
# with coefficients 0 or 1
|
|
563
|
+
for d in range(deg):
|
|
564
|
+
G = itertools.product(itertools.product([0,1],repeat=d+1), repeat=n)
|
|
565
|
+
for g in G:
|
|
566
|
+
gen = sum([R(c1)*c2 for c1,c2 in zip(g, Obasis)])
|
|
567
|
+
yield gen
|
|
568
|
+
|
|
569
|
+
# Trial 4: exhaustive search in O using all polynomials
|
|
570
|
+
for d in range(deg):
|
|
571
|
+
G = itertools.product(R.polynomials(max_degree=d), repeat=n)
|
|
572
|
+
for g in G:
|
|
573
|
+
# discard duplicate cases
|
|
574
|
+
if max(c.degree() for c in g) != d:
|
|
575
|
+
continue
|
|
576
|
+
for j in range(n):
|
|
577
|
+
if g[j] != 0:
|
|
578
|
+
break
|
|
579
|
+
if g[j].leading_coefficient() != 1:
|
|
580
|
+
continue
|
|
581
|
+
|
|
582
|
+
gen = sum([c1*c2 for c1,c2 in zip(g, Obasis)])
|
|
583
|
+
yield gen
|
|
584
|
+
|
|
585
|
+
# Search for a primitive element. It is such an element g of O
|
|
586
|
+
# whose powers span the vector space V.
|
|
587
|
+
for gen in candidates():
|
|
588
|
+
g = F.one()
|
|
589
|
+
m = []
|
|
590
|
+
for i in range(deg):
|
|
591
|
+
m.append(to_V(g))
|
|
592
|
+
g *= gen
|
|
593
|
+
mat = matrix(m)
|
|
594
|
+
if mat.rank() == deg:
|
|
595
|
+
break
|
|
596
|
+
|
|
597
|
+
# Step 3: compute the minimal polynomial of g
|
|
598
|
+
min_poly = R((-mat.solve_left(to_V(g))).list() + [1])
|
|
599
|
+
|
|
600
|
+
# Step 4: construct the residue field K as an extension of the base
|
|
601
|
+
# constant field using the minimal polynomial and compute vector space
|
|
602
|
+
# representation W of K along with maps between them
|
|
603
|
+
if deg > 1:
|
|
604
|
+
if isinstance(k, NumberField):
|
|
605
|
+
if name is None:
|
|
606
|
+
name = 's'
|
|
607
|
+
K = k.extension(min_poly, names=name)
|
|
608
|
+
|
|
609
|
+
def from_W(e):
|
|
610
|
+
return K(list(e))
|
|
611
|
+
|
|
612
|
+
def to_W(e):
|
|
613
|
+
return vector(K(e))
|
|
614
|
+
else:
|
|
615
|
+
K = k.extension(deg, name=name)
|
|
616
|
+
|
|
617
|
+
# primitive element in K corresponding to g in O mod P
|
|
618
|
+
prim = min_poly.roots(K)[0][0]
|
|
619
|
+
|
|
620
|
+
W, from_W, to_W = K.vector_space(k, basis=[prim**i for i in range(deg)], map=True)
|
|
621
|
+
else: # deg == 1
|
|
622
|
+
K = k
|
|
623
|
+
|
|
624
|
+
def from_W(e):
|
|
625
|
+
return K(e[0])
|
|
626
|
+
|
|
627
|
+
def to_W(e):
|
|
628
|
+
return vector([e])
|
|
629
|
+
|
|
630
|
+
# Step 5: compute the matrix of change of basis, from V to W via K
|
|
631
|
+
C = mat.inverse()
|
|
632
|
+
|
|
633
|
+
# Step 6: construct the maps between the residue field of the valuation
|
|
634
|
+
# ring at P and K, via O and V and W
|
|
635
|
+
|
|
636
|
+
def from_K(e):
|
|
637
|
+
return fr_V(to_W(e) * mat)
|
|
638
|
+
|
|
639
|
+
# As explained in Section 4.8.3 of [Coh1993]_, alpha has a simple pole
|
|
640
|
+
# at this place and no other poles at finite places.
|
|
641
|
+
p = prime.prime_below().gen().numerator()
|
|
642
|
+
beta = prime._beta
|
|
643
|
+
alpha = ~p * sum(c1*c2 for c1,c2 in zip(beta, Obasis))
|
|
644
|
+
alpha_powered_by_ramification_index = alpha ** prime._ramification_index
|
|
645
|
+
|
|
646
|
+
def to_K(f):
|
|
647
|
+
if f not in O:
|
|
648
|
+
den = O.coordinate_vector(f).denominator()
|
|
649
|
+
num = den * f
|
|
650
|
+
|
|
651
|
+
# s powered by the valuation of den at the prime
|
|
652
|
+
alpha_power = alpha_powered_by_ramification_index ** den.valuation(p)
|
|
653
|
+
rn = num * alpha_power # in O
|
|
654
|
+
rd = den * alpha_power # in O but not in prime
|
|
655
|
+
|
|
656
|
+
# Note that rn is not in O if and only if f is
|
|
657
|
+
# not in the valuation ring. Hence f is in the
|
|
658
|
+
# valuation ring if and only if this procedure
|
|
659
|
+
# does not fall into an infinite loop.
|
|
660
|
+
return to_K(rn) / to_K(rd)
|
|
661
|
+
|
|
662
|
+
return from_W(to_V(f) * C)
|
|
663
|
+
|
|
664
|
+
return K, from_K, to_K
|
|
665
|
+
|
|
666
|
+
def valuation_ring(self):
|
|
667
|
+
"""
|
|
668
|
+
Return the valuation ring at the place.
|
|
669
|
+
|
|
670
|
+
EXAMPLES::
|
|
671
|
+
|
|
672
|
+
sage: # needs sage.rings.finite_rings
|
|
673
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
674
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
675
|
+
sage: p = L.places_finite()[0]
|
|
676
|
+
sage: p.valuation_ring()
|
|
677
|
+
Valuation ring at Place (x, x*y)
|
|
678
|
+
"""
|
|
679
|
+
from .valuation_ring import FunctionFieldValuationRing
|
|
680
|
+
|
|
681
|
+
return FunctionFieldValuationRing(self.function_field(), self)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-singular
|
|
Binary file
|