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,408 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-singular
|
|
2
|
+
"""
|
|
3
|
+
Homogeneous ideals of free algebras
|
|
4
|
+
|
|
5
|
+
For twosided ideals and when the base ring is a field, this implementation
|
|
6
|
+
also provides Groebner bases and ideal containment tests.
|
|
7
|
+
|
|
8
|
+
EXAMPLES::
|
|
9
|
+
|
|
10
|
+
sage: F.<x,y,z> = FreeAlgebra(QQ, implementation='letterplace')
|
|
11
|
+
sage: F
|
|
12
|
+
Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
13
|
+
sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
|
|
14
|
+
sage: I
|
|
15
|
+
Twosided Ideal (x*y + y*z, x*x + x*y - y*x - y*y) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
16
|
+
|
|
17
|
+
One can compute Groebner bases out to a finite degree, can compute normal
|
|
18
|
+
forms and can test containment in the ideal::
|
|
19
|
+
|
|
20
|
+
sage: I.groebner_basis(degbound=3)
|
|
21
|
+
Twosided Ideal (x*y + y*z,
|
|
22
|
+
x*x - y*x - y*y - y*z,
|
|
23
|
+
y*y*y - y*y*z + y*z*y - y*z*z,
|
|
24
|
+
y*y*x + y*y*z + y*z*x + y*z*z) of Free Associative Unital Algebra
|
|
25
|
+
on 3 generators (x, y, z) over Rational Field
|
|
26
|
+
sage: (x*y*z*y*x).normal_form(I)
|
|
27
|
+
y*z*z*y*z + y*z*z*z*x + y*z*z*z*z
|
|
28
|
+
sage: x*y*z*y*x - (x*y*z*y*x).normal_form(I) in I
|
|
29
|
+
True
|
|
30
|
+
|
|
31
|
+
AUTHOR:
|
|
32
|
+
|
|
33
|
+
- Simon King (2011-03-22): See :issue:`7797`.
|
|
34
|
+
"""
|
|
35
|
+
# ****************************************************************************
|
|
36
|
+
# Copyright (C) 2011 Simon King <simon.king@uni-jena.de>
|
|
37
|
+
#
|
|
38
|
+
# This program is free software: you can redistribute it and/or modify
|
|
39
|
+
# it under the terms of the GNU General Public License as published by
|
|
40
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
41
|
+
# (at your option) any later version.
|
|
42
|
+
# https://www.gnu.org/licenses/
|
|
43
|
+
# ****************************************************************************
|
|
44
|
+
from sage.rings.noncommutative_ideals import Ideal_nc
|
|
45
|
+
from sage.libs.singular.function import lib
|
|
46
|
+
from sage.algebras.letterplace.free_algebra_letterplace cimport FreeAlgebra_letterplace, FreeAlgebra_letterplace_libsingular
|
|
47
|
+
from sage.algebras.letterplace.free_algebra_element_letterplace cimport FreeAlgebraElement_letterplace
|
|
48
|
+
from sage.rings.infinity import Infinity
|
|
49
|
+
|
|
50
|
+
#####################
|
|
51
|
+
# Define some singular functions
|
|
52
|
+
lib("freegb.lib")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class LetterplaceIdeal(Ideal_nc):
|
|
56
|
+
"""
|
|
57
|
+
Graded homogeneous ideals in free algebras.
|
|
58
|
+
|
|
59
|
+
In the two-sided case over a field, one can compute Groebner bases
|
|
60
|
+
up to a degree bound, normal forms of graded homogeneous elements
|
|
61
|
+
of the free algebra, and ideal containment.
|
|
62
|
+
|
|
63
|
+
EXAMPLES::
|
|
64
|
+
|
|
65
|
+
sage: F.<x,y,z> = FreeAlgebra(QQ, implementation='letterplace')
|
|
66
|
+
sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
|
|
67
|
+
sage: I
|
|
68
|
+
Twosided Ideal (x*y + y*z, x*x + x*y - y*x - y*y) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
69
|
+
sage: I.groebner_basis(2)
|
|
70
|
+
Twosided Ideal (x*y + y*z, x*x - y*x - y*y - y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
71
|
+
sage: I.groebner_basis(4)
|
|
72
|
+
Twosided Ideal (x*y + y*z,
|
|
73
|
+
x*x - y*x - y*y - y*z,
|
|
74
|
+
y*y*y - y*y*z + y*z*y - y*z*z,
|
|
75
|
+
y*y*x + y*y*z + y*z*x + y*z*z,
|
|
76
|
+
y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z,
|
|
77
|
+
y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z,
|
|
78
|
+
y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z,
|
|
79
|
+
y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z) of Free Associative Unital
|
|
80
|
+
Algebra on 3 generators (x, y, z) over Rational Field
|
|
81
|
+
|
|
82
|
+
Groebner bases are cached. If one has computed a Groebner basis
|
|
83
|
+
out to a high degree then it will also be returned if a Groebner
|
|
84
|
+
basis with a lower degree bound is requested::
|
|
85
|
+
|
|
86
|
+
sage: I.groebner_basis(2) is I.groebner_basis(4)
|
|
87
|
+
True
|
|
88
|
+
|
|
89
|
+
Of course, the normal form of any element has to satisfy the following::
|
|
90
|
+
|
|
91
|
+
sage: x*y*z*y*x - (x*y*z*y*x).normal_form(I) in I
|
|
92
|
+
True
|
|
93
|
+
|
|
94
|
+
Left and right ideals can be constructed, but only twosided ideals provide
|
|
95
|
+
Groebner bases::
|
|
96
|
+
|
|
97
|
+
sage: JL = F*[x*y+y*z,x^2+x*y-y*x-y^2]; JL
|
|
98
|
+
Left Ideal (x*y + y*z, x*x + x*y - y*x - y*y) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
99
|
+
sage: JR = [x*y+y*z,x^2+x*y-y*x-y^2]*F; JR
|
|
100
|
+
Right Ideal (x*y + y*z, x*x + x*y - y*x - y*y) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
101
|
+
sage: JR.groebner_basis(2)
|
|
102
|
+
Traceback (most recent call last):
|
|
103
|
+
...
|
|
104
|
+
TypeError: Groebner bases exist only for two-sided ideals
|
|
105
|
+
sage: JL.groebner_basis(2)
|
|
106
|
+
Traceback (most recent call last):
|
|
107
|
+
...
|
|
108
|
+
TypeError: Groebner bases exist only for two-sided ideals
|
|
109
|
+
|
|
110
|
+
Also, it is currently not possible to compute a Groebner basis when the base
|
|
111
|
+
ring is not a field::
|
|
112
|
+
|
|
113
|
+
sage: FZ.<a,b,c> = FreeAlgebra(ZZ, implementation='letterplace')
|
|
114
|
+
sage: J = FZ*[a^3-b^3]*FZ
|
|
115
|
+
sage: J.groebner_basis(2)
|
|
116
|
+
Traceback (most recent call last):
|
|
117
|
+
...
|
|
118
|
+
NotImplementedError: currently, we can only compute Groebner bases if the ring of coefficients is a field
|
|
119
|
+
|
|
120
|
+
The letterplace implementation of free algebras also provides integral degree weights
|
|
121
|
+
for the generators, and we can compute Groebner bases for twosided graded homogeneous
|
|
122
|
+
ideals::
|
|
123
|
+
|
|
124
|
+
sage: F.<x,y,z> = FreeAlgebra(QQ, implementation='letterplace',degrees=[1,2,3])
|
|
125
|
+
sage: I = F*[x*y+z-y*x,x*y*z-x^6+y^3]*F
|
|
126
|
+
sage: I.groebner_basis(Infinity)
|
|
127
|
+
Twosided Ideal (x*y - y*x + z,
|
|
128
|
+
x*x*x*x*x*x - y*x*z - y*y*y + z*z,
|
|
129
|
+
x*z*z - y*x*x*z + y*x*z*x + y*y*z + y*z*y + z*x*z + z*y*y - z*z*x,
|
|
130
|
+
x*x*x*x*x*z + x*x*x*x*z*x + x*x*x*z*x*x + x*x*z*x*x*x + x*z*x*x*x*x +
|
|
131
|
+
y*x*z*y - y*y*x*z + y*z*z + z*x*x*x*x*x - z*z*y,
|
|
132
|
+
x*x*x*x*z*y*y + x*x*x*z*y*y*x - x*x*x*z*y*z - x*x*z*y*x*z + x*x*z*y*y*x*x +
|
|
133
|
+
x*x*z*y*y*y - x*x*z*y*z*x - x*z*y*x*x*z - x*z*y*x*z*x +
|
|
134
|
+
x*z*y*y*x*x*x + 2*x*z*y*y*y*x - 2*x*z*y*y*z - x*z*y*z*x*x -
|
|
135
|
+
x*z*y*z*y + y*x*z*x*x*x*x*x - 4*y*x*z*x*x*z - 4*y*x*z*x*z*x +
|
|
136
|
+
4*y*x*z*y*x*x*x + 3*y*x*z*y*y*x - 4*y*x*z*y*z + y*y*x*x*x*x*z +
|
|
137
|
+
y*y*x*x*x*z*x - 3*y*y*x*x*z*x*x - y*y*x*x*z*y +
|
|
138
|
+
5*y*y*x*z*x*x*x + 4*y*y*x*z*y*x - 4*y*y*y*x*x*z +
|
|
139
|
+
4*y*y*y*x*z*x + 3*y*y*y*y*z + 4*y*y*y*z*x*x + 6*y*y*y*z*y +
|
|
140
|
+
y*y*z*x*x*x*x + y*y*z*x*z + 7*y*y*z*y*x*x + 7*y*y*z*y*y -
|
|
141
|
+
7*y*y*z*z*x - y*z*x*x*x*z - y*z*x*x*z*x + 3*y*z*x*z*x*x +
|
|
142
|
+
y*z*x*z*y + y*z*y*x*x*x*x - 3*y*z*y*x*z + 7*y*z*y*y*x*x +
|
|
143
|
+
3*y*z*y*y*y - 3*y*z*y*z*x - 5*y*z*z*x*x*x - 4*y*z*z*y*x +
|
|
144
|
+
4*y*z*z*z - z*y*x*x*x*z - z*y*x*x*z*x - z*y*x*z*x*x -
|
|
145
|
+
z*y*x*z*y + z*y*y*x*x*x*x - 3*z*y*y*x*z + 3*z*y*y*y*x*x +
|
|
146
|
+
z*y*y*y*y - 3*z*y*y*z*x - z*y*z*x*x*x - 2*z*y*z*y*x +
|
|
147
|
+
2*z*y*z*z - z*z*x*x*x*x*x + 4*z*z*x*x*z + 4*z*z*x*z*x -
|
|
148
|
+
4*z*z*y*x*x*x - 3*z*z*y*y*x + 4*z*z*y*z + 4*z*z*z*x*x +
|
|
149
|
+
2*z*z*z*y)
|
|
150
|
+
of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
151
|
+
|
|
152
|
+
Again, we can compute normal forms::
|
|
153
|
+
|
|
154
|
+
sage: (z*I.0-I.1).normal_form(I)
|
|
155
|
+
0
|
|
156
|
+
sage: (z*I.0-x*y*z).normal_form(I)
|
|
157
|
+
-y*x*z + z*z
|
|
158
|
+
"""
|
|
159
|
+
def __init__(self, ring, gens, coerce=True, side='twosided'):
|
|
160
|
+
"""
|
|
161
|
+
INPUT:
|
|
162
|
+
|
|
163
|
+
- ``ring`` -- a free algebra in letterplace implementation
|
|
164
|
+
- ``gens`` -- list, tuple or sequence of generators
|
|
165
|
+
- ``coerce`` -- boolean (default: ``True``); whether ``gens`` shall be
|
|
166
|
+
coerced first
|
|
167
|
+
- ``side`` -- string; one of ``'twosided'`` (default),
|
|
168
|
+
``'left'`` or ``'right'``. Determines whether the ideal
|
|
169
|
+
is a left, right or twosided ideal. Groebner bases or
|
|
170
|
+
only supported in the twosided case.
|
|
171
|
+
|
|
172
|
+
TESTS::
|
|
173
|
+
|
|
174
|
+
sage: F.<x,y,z> = FreeAlgebra(QQ, implementation='letterplace')
|
|
175
|
+
sage: from sage.algebras.letterplace.letterplace_ideal import LetterplaceIdeal
|
|
176
|
+
sage: LetterplaceIdeal(F,x)
|
|
177
|
+
Twosided Ideal (x) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
178
|
+
sage: LetterplaceIdeal(F,[x,y],side='left')
|
|
179
|
+
Left Ideal (x, y) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
180
|
+
|
|
181
|
+
It is not correctly detected that this class inherits from an
|
|
182
|
+
extension class. Therefore, we have to skip one item of the
|
|
183
|
+
test suite::
|
|
184
|
+
|
|
185
|
+
sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
|
|
186
|
+
sage: TestSuite(I).run(skip=['_test_category'],verbose=True)
|
|
187
|
+
running ._test_eq() . . . pass
|
|
188
|
+
running ._test_new() . . . pass
|
|
189
|
+
running ._test_not_implemented_methods() . . . pass
|
|
190
|
+
running ._test_pickling() . . . pass
|
|
191
|
+
"""
|
|
192
|
+
Ideal_nc.__init__(self, ring, gens, coerce=coerce, side=side)
|
|
193
|
+
self.__GB = self
|
|
194
|
+
self.__uptodeg = 0
|
|
195
|
+
|
|
196
|
+
def groebner_basis(self, degbound=None):
|
|
197
|
+
"""
|
|
198
|
+
Twosided Groebner basis with degree bound.
|
|
199
|
+
|
|
200
|
+
INPUT:
|
|
201
|
+
|
|
202
|
+
- ``degbound`` -- (optional) integer or Infinity; if it is provided,
|
|
203
|
+
a Groebner basis at least out to that degree is returned. By
|
|
204
|
+
default, the current degree bound of the underlying ring is used.
|
|
205
|
+
|
|
206
|
+
ASSUMPTIONS:
|
|
207
|
+
|
|
208
|
+
Currently, we can only compute Groebner bases for twosided
|
|
209
|
+
ideals, and the ring of coefficients must be a field. A
|
|
210
|
+
:exc:`TypeError` is raised if one of these conditions is violated.
|
|
211
|
+
|
|
212
|
+
.. NOTE::
|
|
213
|
+
|
|
214
|
+
- The result is cached. The same Groebner basis is returned
|
|
215
|
+
if a smaller degree bound than the known one is requested.
|
|
216
|
+
- If the degree bound ``Infinity`` is requested, it is attempted to
|
|
217
|
+
compute a complete Groebner basis. But we cannot guarantee
|
|
218
|
+
that the computation will terminate, since not all twosided
|
|
219
|
+
homogeneous ideals of a free algebra have a finite Groebner
|
|
220
|
+
basis.
|
|
221
|
+
|
|
222
|
+
EXAMPLES::
|
|
223
|
+
|
|
224
|
+
sage: F.<x,y,z> = FreeAlgebra(QQ, implementation='letterplace')
|
|
225
|
+
sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
|
|
226
|
+
|
|
227
|
+
Since `F` was cached and since its degree bound cannot be
|
|
228
|
+
decreased, it may happen that, as a side effect of other tests,
|
|
229
|
+
it already has a degree bound bigger than 3. So, we cannot
|
|
230
|
+
test against the output of ``I.groebner_basis()``::
|
|
231
|
+
|
|
232
|
+
sage: F.set_degbound(3)
|
|
233
|
+
sage: I.groebner_basis() # not tested
|
|
234
|
+
Twosided Ideal (y*y*y - y*y*z + y*z*y - y*z*z, y*y*x + y*y*z + y*z*x + y*z*z, x*y + y*z, x*x - y*x - y*y - y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
235
|
+
sage: I.groebner_basis(4)
|
|
236
|
+
Twosided Ideal (x*y + y*z,
|
|
237
|
+
x*x - y*x - y*y - y*z,
|
|
238
|
+
y*y*y - y*y*z + y*z*y - y*z*z,
|
|
239
|
+
y*y*x + y*y*z + y*z*x + y*z*z,
|
|
240
|
+
y*y*z*y - y*y*z*z + y*z*z*y - y*z*z*z,
|
|
241
|
+
y*z*y*y - y*z*y*z + y*z*z*y - y*z*z*z,
|
|
242
|
+
y*y*z*x + y*y*z*z + y*z*z*x + y*z*z*z,
|
|
243
|
+
y*z*y*x + y*z*y*z + y*z*z*x + y*z*z*z) of Free Associative
|
|
244
|
+
Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
245
|
+
sage: I.groebner_basis(2) is I.groebner_basis(4)
|
|
246
|
+
True
|
|
247
|
+
sage: G = I.groebner_basis(4)
|
|
248
|
+
sage: G.groebner_basis(3) is G
|
|
249
|
+
True
|
|
250
|
+
|
|
251
|
+
If a finite complete Groebner basis exists, we can compute
|
|
252
|
+
it as follows::
|
|
253
|
+
|
|
254
|
+
sage: I = F*[x*y-y*x,x*z-z*x,y*z-z*y,x^2*y-z^3,x*y^2+z*x^2]*F
|
|
255
|
+
sage: I.groebner_basis(Infinity)
|
|
256
|
+
Twosided Ideal (-y*z + z*y,
|
|
257
|
+
-x*z + z*x,
|
|
258
|
+
-x*y + y*x,
|
|
259
|
+
x*x*z + x*y*y,
|
|
260
|
+
x*x*y - z*z*z,
|
|
261
|
+
x*x*x*z + y*z*z*z,
|
|
262
|
+
x*z*z*z*z + y*y*z*z*z) of Free Associative Unital Algebra
|
|
263
|
+
on 3 generators (x, y, z) over Rational Field
|
|
264
|
+
|
|
265
|
+
Since the commutators of the generators are contained in the ideal,
|
|
266
|
+
we can verify the above result by a computation in a polynomial ring
|
|
267
|
+
in negative lexicographic order::
|
|
268
|
+
|
|
269
|
+
sage: P.<c,b,a> = PolynomialRing(QQ,order='neglex')
|
|
270
|
+
sage: J = P*[a^2*b-c^3,a*b^2+c*a^2]
|
|
271
|
+
sage: J.groebner_basis()
|
|
272
|
+
[b*a^2 - c^3, b^2*a + c*a^2, c*a^3 + c^3*b, c^3*b^2 + c^4*a]
|
|
273
|
+
|
|
274
|
+
Apparently, the results are compatible, by sending `a` to `x`, `b`
|
|
275
|
+
to `y` and `c` to `z`.
|
|
276
|
+
"""
|
|
277
|
+
cdef FreeAlgebra_letterplace A = self.ring()
|
|
278
|
+
cdef FreeAlgebraElement_letterplace x
|
|
279
|
+
if degbound is None:
|
|
280
|
+
degbound = A.degbound()
|
|
281
|
+
if self.__uptodeg >= degbound:
|
|
282
|
+
return self.__GB
|
|
283
|
+
if not A.base().is_field():
|
|
284
|
+
raise NotImplementedError("currently, we can only compute Groebner bases if the ring of coefficients is a field")
|
|
285
|
+
if self.side() != 'twosided':
|
|
286
|
+
raise TypeError("Groebner bases exist only for two-sided ideals")
|
|
287
|
+
if degbound == Infinity:
|
|
288
|
+
while self.__uptodeg < Infinity:
|
|
289
|
+
test_bound = 2 * max([x._poly.degree()
|
|
290
|
+
for x in self.__GB.gens()])
|
|
291
|
+
self.groebner_basis(test_bound)
|
|
292
|
+
return self.__GB
|
|
293
|
+
# Set the options required by letterplace
|
|
294
|
+
from sage.libs.singular.option import LibSingularOptions
|
|
295
|
+
libsingular_options = LibSingularOptions()
|
|
296
|
+
bck = (libsingular_options['redTail'], libsingular_options['redSB'])
|
|
297
|
+
libsingular_options['redTail'] = True
|
|
298
|
+
libsingular_options['redSB'] = True
|
|
299
|
+
A.set_degbound(degbound)
|
|
300
|
+
P = A._current_ring
|
|
301
|
+
|
|
302
|
+
# note that degbound might be smaller than A._degbound due to caching,
|
|
303
|
+
# but degbound must be large enough to map all generators to the
|
|
304
|
+
# letterplace ring L
|
|
305
|
+
if degbound < A._degbound:
|
|
306
|
+
max_deg = max([x._poly.degree() for x in self.__GB.gens()])
|
|
307
|
+
if degbound < max_deg:
|
|
308
|
+
degbound = max_deg
|
|
309
|
+
|
|
310
|
+
# The following is a workaround for calling Singular's new Letterplace
|
|
311
|
+
# API (see :issue:`25993`). We construct a temporary polynomial ring L
|
|
312
|
+
# with letterplace attributes set as required by the API. As L has
|
|
313
|
+
# duplicate variable names, we need to handle this ring carefully; in
|
|
314
|
+
# particular, we cannot coerce to and from L, so we use homomorphisms
|
|
315
|
+
# for the conversion.
|
|
316
|
+
|
|
317
|
+
cdef FreeAlgebra_letterplace_libsingular lp_ring = \
|
|
318
|
+
FreeAlgebra_letterplace_libsingular(A._commutative_ring, degbound)
|
|
319
|
+
L = lp_ring._lp_ring_internal
|
|
320
|
+
to_L = P.hom(L.gens(), L, check=False)
|
|
321
|
+
from_L = L.hom(P.gens(), P, check=False)
|
|
322
|
+
I = L.ideal([to_L(x._poly) for x in self.__GB.gens()])
|
|
323
|
+
from sage.libs.singular.function import singular_function
|
|
324
|
+
singular_twostd = singular_function("twostd")
|
|
325
|
+
gb = singular_twostd(I)
|
|
326
|
+
out = [FreeAlgebraElement_letterplace(A, from_L(X), check=False)
|
|
327
|
+
for X in gb]
|
|
328
|
+
|
|
329
|
+
libsingular_options['redTail'] = bck[0]
|
|
330
|
+
libsingular_options['redSB'] = bck[1]
|
|
331
|
+
self.__GB = A.ideal(out, side='twosided', coerce=False)
|
|
332
|
+
if degbound >= 2 * max([x._poly.degree() for x in out]):
|
|
333
|
+
degbound = Infinity
|
|
334
|
+
self.__uptodeg = degbound
|
|
335
|
+
self.__GB.__uptodeg = degbound
|
|
336
|
+
return self.__GB
|
|
337
|
+
|
|
338
|
+
def __contains__(self, x):
|
|
339
|
+
"""
|
|
340
|
+
The containment test is based on a normal form computation.
|
|
341
|
+
|
|
342
|
+
EXAMPLES::
|
|
343
|
+
|
|
344
|
+
sage: F.<x,y,z> = FreeAlgebra(QQ, implementation='letterplace')
|
|
345
|
+
sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
|
|
346
|
+
sage: x*I.0-I.1*y+I.0*y in I # indirect doctest
|
|
347
|
+
True
|
|
348
|
+
sage: 1 in I
|
|
349
|
+
False
|
|
350
|
+
"""
|
|
351
|
+
R = self.ring()
|
|
352
|
+
return (x in R) and R(x).normal_form(self).is_zero()
|
|
353
|
+
|
|
354
|
+
def reduce(self, G):
|
|
355
|
+
"""
|
|
356
|
+
Reduction of this ideal by another ideal,
|
|
357
|
+
or normal form of an algebra element with respect to this ideal.
|
|
358
|
+
|
|
359
|
+
INPUT:
|
|
360
|
+
|
|
361
|
+
- ``G`` -- a list or tuple of elements, an ideal,
|
|
362
|
+
the ambient algebra, or a single element
|
|
363
|
+
|
|
364
|
+
OUTPUT:
|
|
365
|
+
|
|
366
|
+
- The normal form of ``G`` with respect to this ideal, if
|
|
367
|
+
``G`` is an element of the algebra.
|
|
368
|
+
- The reduction of this ideal by the elements resp. generators
|
|
369
|
+
of ``G``, if ``G`` is a list, tuple or ideal.
|
|
370
|
+
- The zero ideal, if ``G`` is the algebra containing this ideal.
|
|
371
|
+
|
|
372
|
+
EXAMPLES::
|
|
373
|
+
|
|
374
|
+
sage: F.<x,y,z> = FreeAlgebra(QQ, implementation='letterplace')
|
|
375
|
+
sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
|
|
376
|
+
sage: I.reduce(F)
|
|
377
|
+
Twosided Ideal (0) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
378
|
+
sage: I.reduce(x^3)
|
|
379
|
+
-y*z*x - y*z*y - y*z*z
|
|
380
|
+
sage: I.reduce([x*y])
|
|
381
|
+
Twosided Ideal (y*z, x*x - y*x - y*y) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
382
|
+
sage: I.reduce(F*[x^2+x*y,y^2+y*z]*F)
|
|
383
|
+
Twosided Ideal (x*y + y*z, -y*x + y*z) of Free Associative Unital Algebra on 3 generators (x, y, z) over Rational Field
|
|
384
|
+
"""
|
|
385
|
+
P = self.ring()
|
|
386
|
+
if not isinstance(G, (list, tuple)):
|
|
387
|
+
if G == P:
|
|
388
|
+
return P.ideal([P.zero()])
|
|
389
|
+
if G in P:
|
|
390
|
+
return G.normal_form(self)
|
|
391
|
+
G = G.gens()
|
|
392
|
+
C = P.current_ring()
|
|
393
|
+
sI = C.ideal([C(X.letterplace_polynomial()) for X in self.gens()],
|
|
394
|
+
coerce=False)
|
|
395
|
+
selfdeg = max([x.degree() for x in sI.gens()])
|
|
396
|
+
gI = P._reductor_(G, selfdeg)
|
|
397
|
+
from sage.libs.singular.option import LibSingularOptions
|
|
398
|
+
libsingular_options = LibSingularOptions()
|
|
399
|
+
bck = (libsingular_options['redTail'], libsingular_options['redSB'])
|
|
400
|
+
libsingular_options['redTail'] = True
|
|
401
|
+
libsingular_options['redSB'] = True
|
|
402
|
+
from sage.libs.singular.function import singular_function
|
|
403
|
+
poly_reduce = singular_function("NF")
|
|
404
|
+
sI = poly_reduce(sI, gI, ring=C, attributes={gI: {"isSB": 1}})
|
|
405
|
+
libsingular_options['redTail'] = bck[0]
|
|
406
|
+
libsingular_options['redSB'] = bck[1]
|
|
407
|
+
return P.ideal([FreeAlgebraElement_letterplace(P, x, check=False)
|
|
408
|
+
for x in sI], coerce=False)
|