passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.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-aarch64-linux-gnu.so +0 -0
- passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
- passagemath_singular-10.6.31rc3.dist-info/RECORD +490 -0
- passagemath_singular-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
- passagemath_singular.libs/libSingular-4-6a2a8666.4.1.so +0 -0
- passagemath_singular.libs/libcddgmp-ac579979.so.0.1.3 +0 -0
- passagemath_singular.libs/libfactory-4-66e33516.4.1.so +0 -0
- passagemath_singular.libs/libflint-81de1160.so.21.0.0 +0 -0
- passagemath_singular.libs/libgf2x-fbd36f80.so.3.0.0 +0 -0
- passagemath_singular.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
- passagemath_singular.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
- passagemath_singular.libs/libgsl-e3525837.so.28.0.0 +0 -0
- passagemath_singular.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
- passagemath_singular.libs/libntl-0043a3a2.so.44.0.1 +0 -0
- passagemath_singular.libs/libomalloc-0-06512335.9.6.so +0 -0
- passagemath_singular.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
- passagemath_singular.libs/libpolys-4-cb7246b5.4.1.so +0 -0
- passagemath_singular.libs/libreadline-28330744.so.8.2 +0 -0
- passagemath_singular.libs/libsingular_resources-4-8c425241.4.1.so +0 -0
- passagemath_singular.libs/libtinfo-f81c2d16.so.6.3 +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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.so +0 -0
- sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
- sage/algebras/quatalg/quaternion_algebra_element.cpython-314-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.so +0 -0
- sage/libs/singular/option.pyx +671 -0
- sage/libs/singular/polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/libs/singular/polynomial.pxd +39 -0
- sage/libs/singular/polynomial.pyx +661 -0
- sage/libs/singular/ring.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/libs/singular/ring.pxd +58 -0
- sage/libs/singular/ring.pyx +893 -0
- sage/libs/singular/singular.cpython-314-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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,1119 @@
|
|
|
1
|
+
///////////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version toric.lib 4.3.1.3 Feb_2023 "; // $Id: 624e30fed8d8dbb3e6a5c8c0ff0da33c492ae28f $
|
|
3
|
+
category="Commutative Algebra";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: toric.lib Standard Basis of Toric Ideals
|
|
6
|
+
AUTHOR: Christine Theis, email: ctheis@math.uni-sb.de
|
|
7
|
+
|
|
8
|
+
PROCEDURES:
|
|
9
|
+
toric_ideal(A,..); computes the toric ideal of A
|
|
10
|
+
toric_std(ideal I); standard basis of I by a specialized Buchberger algorithm
|
|
11
|
+
";
|
|
12
|
+
|
|
13
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
14
|
+
|
|
15
|
+
static proc toric_ideal_1(intmat A, string alg)
|
|
16
|
+
{
|
|
17
|
+
ideal I;
|
|
18
|
+
// to be returned
|
|
19
|
+
|
|
20
|
+
// check suitability of actual basering
|
|
21
|
+
if(nvars(basering)<ncols(A))
|
|
22
|
+
{
|
|
23
|
+
ERROR("The number of matrix columns is smaller than the number of ring variables.");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// check suitability of actual term ordering
|
|
27
|
+
// the "module ordering" c or C is ignored
|
|
28
|
+
string singular_ord=ordstr(basering);
|
|
29
|
+
string test_ord;
|
|
30
|
+
string external_ord="";
|
|
31
|
+
int i,j;
|
|
32
|
+
intvec weightvec;
|
|
33
|
+
|
|
34
|
+
if(find(singular_ord,"lp")==1)
|
|
35
|
+
{
|
|
36
|
+
external_ord="W_LEX";
|
|
37
|
+
for(i=1;i<=nvars(basering);i++)
|
|
38
|
+
{
|
|
39
|
+
weightvec[i]=0;
|
|
40
|
+
}
|
|
41
|
+
test_ord="lp("+string(nvars(basering))+"),";
|
|
42
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
43
|
+
{
|
|
44
|
+
"Warning: Block orderings are not supported; lp used for computation.";
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if(external_ord=="" && find(singular_ord,"lp")==3)
|
|
48
|
+
{
|
|
49
|
+
external_ord="W_LEX";
|
|
50
|
+
for(i=1;i<=nvars(basering);i++)
|
|
51
|
+
{
|
|
52
|
+
weightvec[i]=0;
|
|
53
|
+
}
|
|
54
|
+
test_ord="lp("+string(nvars(basering))+"),";
|
|
55
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
56
|
+
{
|
|
57
|
+
"Warning: Block orderings are not supported; lp used for computation.";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if(external_ord=="" && find(singular_ord,"dp")==1)
|
|
62
|
+
{
|
|
63
|
+
external_ord="W_REV_LEX";
|
|
64
|
+
for(i=1;i<=nvars(basering);i++)
|
|
65
|
+
{
|
|
66
|
+
weightvec[i]=1;
|
|
67
|
+
}
|
|
68
|
+
test_ord="dp("+string(nvars(basering))+"),";
|
|
69
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
70
|
+
{
|
|
71
|
+
"Warning: Block orderings are not supported; dp used for computation.";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if(external_ord=="" && find(singular_ord,"dp")==3)
|
|
75
|
+
{
|
|
76
|
+
external_ord="W_REV_LEX";
|
|
77
|
+
for(i=1;i<=nvars(basering);i++)
|
|
78
|
+
{
|
|
79
|
+
weightvec[i]=1;
|
|
80
|
+
}
|
|
81
|
+
test_ord="dp("+string(nvars(basering))+"),";
|
|
82
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
83
|
+
{
|
|
84
|
+
"Warning: Block orderings are not supported; dp used for computation.";
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if(external_ord=="" && find(singular_ord,"Dp")==1)
|
|
89
|
+
{
|
|
90
|
+
external_ord="W_LEX";
|
|
91
|
+
for(i=1;i<=nvars(basering);i++)
|
|
92
|
+
{
|
|
93
|
+
weightvec[i]=1;
|
|
94
|
+
}
|
|
95
|
+
test_ord="Dp("+string(nvars(basering))+"),";
|
|
96
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
97
|
+
{
|
|
98
|
+
"Warning: Block orderings are not supported; Dp used for computation.";
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if(external_ord=="" && find(singular_ord,"Dp")==3)
|
|
102
|
+
{
|
|
103
|
+
external_ord="W_LEX";
|
|
104
|
+
for(i=1;i<=nvars(basering);i++)
|
|
105
|
+
{
|
|
106
|
+
weightvec[i]=1;
|
|
107
|
+
}
|
|
108
|
+
test_ord="Dp("+string(nvars(basering))+"),";
|
|
109
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
110
|
+
{
|
|
111
|
+
"Warning: Block orderings are not supported; Dp used for computation.";
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
int pos;
|
|
116
|
+
string number_string;
|
|
117
|
+
|
|
118
|
+
if(external_ord=="" && find(singular_ord,"wp")==1)
|
|
119
|
+
{
|
|
120
|
+
external_ord="W_REV_LEX";
|
|
121
|
+
pos=3;
|
|
122
|
+
for(i=1;i<=nvars(basering);i++)
|
|
123
|
+
{
|
|
124
|
+
pos++;
|
|
125
|
+
number_string="";
|
|
126
|
+
while(singular_ord[pos]!=",")
|
|
127
|
+
{
|
|
128
|
+
number_string=number_string+singular_ord[pos];
|
|
129
|
+
pos++;
|
|
130
|
+
}
|
|
131
|
+
weightvec[i]=`number_string`;
|
|
132
|
+
}
|
|
133
|
+
test_ord="wp("+string(weightvec)+"),";
|
|
134
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
135
|
+
{
|
|
136
|
+
"Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if(external_ord=="" && find(singular_ord,"wp")==3)
|
|
140
|
+
{
|
|
141
|
+
external_ord="W_REV_LEX";
|
|
142
|
+
pos=5;
|
|
143
|
+
for(i=1;i<=nvars(basering);i++)
|
|
144
|
+
{
|
|
145
|
+
pos++;
|
|
146
|
+
number_string="";
|
|
147
|
+
while(singular_ord[pos]!=",")
|
|
148
|
+
{
|
|
149
|
+
number_string=number_string+singular_ord[pos];
|
|
150
|
+
pos++;
|
|
151
|
+
}
|
|
152
|
+
weightvec[i]=`number_string`;
|
|
153
|
+
}
|
|
154
|
+
test_ord="wp("+string(weightvec)+"),";
|
|
155
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
156
|
+
{
|
|
157
|
+
"Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if(external_ord=="" && find(singular_ord,"Wp")==1)
|
|
162
|
+
{
|
|
163
|
+
external_ord="W_LEX";
|
|
164
|
+
pos=3;
|
|
165
|
+
for(i=1;i<=nvars(basering);i++)
|
|
166
|
+
{
|
|
167
|
+
pos++;
|
|
168
|
+
number_string="";
|
|
169
|
+
while(singular_ord[pos]!=",")
|
|
170
|
+
{
|
|
171
|
+
number_string=number_string+singular_ord[pos];
|
|
172
|
+
pos++;
|
|
173
|
+
}
|
|
174
|
+
weightvec[i]=`number_string`;
|
|
175
|
+
}
|
|
176
|
+
test_ord="Wp("+string(weightvec)+"),";
|
|
177
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
178
|
+
{
|
|
179
|
+
"Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if(external_ord=="" && find(singular_ord,"Wp")==3)
|
|
183
|
+
{
|
|
184
|
+
external_ord="W_LEX";
|
|
185
|
+
pos=5;
|
|
186
|
+
for(i=1;i<=nvars(basering);i++)
|
|
187
|
+
{
|
|
188
|
+
pos++;
|
|
189
|
+
number_string="";
|
|
190
|
+
while(singular_ord[pos]!=",")
|
|
191
|
+
{
|
|
192
|
+
number_string=number_string+singular_ord[pos];
|
|
193
|
+
pos++;
|
|
194
|
+
}
|
|
195
|
+
weightvec[i]=`number_string`;
|
|
196
|
+
}
|
|
197
|
+
test_ord="Wp("+string(weightvec)+"),";
|
|
198
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
199
|
+
{
|
|
200
|
+
"Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if(external_ord=="")
|
|
205
|
+
{
|
|
206
|
+
ERROR("The term ordering of the actual basering is not supported.");
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// check algorithm
|
|
210
|
+
if(alg=="ct" || alg=="pct")
|
|
211
|
+
// these algorithms will not cause an error in the external program;
|
|
212
|
+
// however, they do not compute the toric ideal of A, but of an
|
|
213
|
+
// extended matrix
|
|
214
|
+
{
|
|
215
|
+
ERROR("The chosen algorithm is not suitable.");
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// create temporary file with which the external program is called
|
|
219
|
+
|
|
220
|
+
int dummy;
|
|
221
|
+
int process=system("pid");
|
|
222
|
+
string matrixfile="temp_MATRIX"+string(process);
|
|
223
|
+
link MATRIX=":w "+matrixfile;
|
|
224
|
+
open(MATRIX);
|
|
225
|
+
|
|
226
|
+
write(MATRIX,"MATRIX","columns:",ncols(A),"cost vector:");
|
|
227
|
+
for(j=1;j<=ncols(A);j++)
|
|
228
|
+
{
|
|
229
|
+
write(MATRIX,weightvec[j]);
|
|
230
|
+
}
|
|
231
|
+
write(MATRIX,"rows:",nrows(A),"matrix:");
|
|
232
|
+
for(i=1;i<=nrows(A);i++)
|
|
233
|
+
{
|
|
234
|
+
for(j=1;j<=ncols(A);j++)
|
|
235
|
+
{
|
|
236
|
+
write(MATRIX,A[i,j]);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// search for positive row space vector, if required by the
|
|
241
|
+
// algorithm
|
|
242
|
+
int found=0;
|
|
243
|
+
if((alg=="blr") || (alg=="hs"))
|
|
244
|
+
{
|
|
245
|
+
for(i=1;i<=nrows(A);i++)
|
|
246
|
+
{
|
|
247
|
+
found=i;
|
|
248
|
+
for(j=1;j<=ncols(A);j++)
|
|
249
|
+
{
|
|
250
|
+
if(A[i,j]<=0)
|
|
251
|
+
{
|
|
252
|
+
found=0;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if(found>0)
|
|
256
|
+
{
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
if(found==0)
|
|
261
|
+
{
|
|
262
|
+
close(MATRIX);
|
|
263
|
+
dummy=system("sh","rm -f "+matrixfile);
|
|
264
|
+
ERROR("The chosen algorithm needs a positive vector in the row space of the matrix.");
|
|
265
|
+
}
|
|
266
|
+
write(MATRIX,"positive row space vector:");
|
|
267
|
+
for(j=1;j<=ncols(A);j++)
|
|
268
|
+
{
|
|
269
|
+
write(MATRIX,A[found,j]);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
close(MATRIX);
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
// call external program
|
|
276
|
+
if (status(system("SingularBin")+"toric_ideal","exists")=="yes")
|
|
277
|
+
{
|
|
278
|
+
dummy=system("sh",system("SingularBin")+"toric_ideal -alg "+alg+" "+matrixfile);
|
|
279
|
+
}
|
|
280
|
+
else
|
|
281
|
+
{
|
|
282
|
+
dummy=system("sh","toric_ideal -alg "+alg+" "+matrixfile);
|
|
283
|
+
}
|
|
284
|
+
if (dummy!=0) { ERROR("toric_ideal failed with error code "+string(dummy)); }
|
|
285
|
+
|
|
286
|
+
// read toric ideal from created file
|
|
287
|
+
link TORIC_IDEAL=":r "+matrixfile+".GB."+alg;
|
|
288
|
+
string toric_id=read(TORIC_IDEAL);
|
|
289
|
+
|
|
290
|
+
int generators;
|
|
291
|
+
pos=find(toric_id,"size");
|
|
292
|
+
pos=find(toric_id,":",pos);
|
|
293
|
+
pos++;
|
|
294
|
+
|
|
295
|
+
while(toric_id[pos]==" " || toric_id[pos]==newline)
|
|
296
|
+
{
|
|
297
|
+
pos++;
|
|
298
|
+
}
|
|
299
|
+
number_string="";
|
|
300
|
+
while(toric_id[pos]!=" " && toric_id[pos]!=newline)
|
|
301
|
+
{
|
|
302
|
+
number_string=number_string+toric_id[pos];
|
|
303
|
+
pos++;
|
|
304
|
+
}
|
|
305
|
+
generators=`number_string`;
|
|
306
|
+
|
|
307
|
+
intvec v;
|
|
308
|
+
poly head;
|
|
309
|
+
poly tail;
|
|
310
|
+
|
|
311
|
+
pos=find(toric_id,"basis");
|
|
312
|
+
pos=find(toric_id,":",pos);
|
|
313
|
+
pos++;
|
|
314
|
+
|
|
315
|
+
for(i=1;i<=generators;i++)
|
|
316
|
+
{
|
|
317
|
+
head=1;
|
|
318
|
+
tail=1;
|
|
319
|
+
|
|
320
|
+
for(j=1;j<=ncols(A);j++)
|
|
321
|
+
{
|
|
322
|
+
while(toric_id[pos]==" " || toric_id[pos]==newline)
|
|
323
|
+
{
|
|
324
|
+
pos++;
|
|
325
|
+
}
|
|
326
|
+
number_string="";
|
|
327
|
+
while(toric_id[pos]!=" " && toric_id[pos]!=newline)
|
|
328
|
+
{
|
|
329
|
+
number_string=number_string+toric_id[pos];
|
|
330
|
+
pos++;
|
|
331
|
+
}
|
|
332
|
+
v[j]=`number_string`;
|
|
333
|
+
if(v[j]<0)
|
|
334
|
+
{
|
|
335
|
+
tail=tail*var(j)^(-v[j]);
|
|
336
|
+
}
|
|
337
|
+
if(v[j]>0)
|
|
338
|
+
{
|
|
339
|
+
head=head*var(j)^v[j];
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
I[i]=head-tail;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// delete all created files
|
|
346
|
+
dummy=system("sh","rm -f "+matrixfile);
|
|
347
|
+
dummy=system("sh","rm -f "+matrixfile+".GB."+alg);
|
|
348
|
+
|
|
349
|
+
return(I);
|
|
350
|
+
}
|
|
351
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
352
|
+
|
|
353
|
+
static proc toric_ideal_2(intmat A, string alg, intvec prsv)
|
|
354
|
+
{
|
|
355
|
+
ideal I;
|
|
356
|
+
// to be returned
|
|
357
|
+
|
|
358
|
+
// check arguments
|
|
359
|
+
if(size(prsv)<ncols(A))
|
|
360
|
+
{
|
|
361
|
+
ERROR("The number of matrix columns does not equal the size of the positive row space vector.");
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// check suitability of actual basering
|
|
365
|
+
if(nvars(basering)!=ncols(A))
|
|
366
|
+
{
|
|
367
|
+
ERROR("The number of matrix columns is smaller than the number of ring variables.");
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// check suitability of actual term ordering
|
|
371
|
+
// the "module ordering" c or C is ignored
|
|
372
|
+
string singular_ord=ordstr(basering);
|
|
373
|
+
string test_ord;
|
|
374
|
+
string external_ord="";
|
|
375
|
+
int i,j;
|
|
376
|
+
intvec weightvec;
|
|
377
|
+
|
|
378
|
+
if(find(singular_ord,"lp")==1)
|
|
379
|
+
{
|
|
380
|
+
external_ord="W_LEX";
|
|
381
|
+
for(i=1;i<=nvars(basering);i++)
|
|
382
|
+
{
|
|
383
|
+
weightvec[i]=0;
|
|
384
|
+
}
|
|
385
|
+
test_ord="lp("+string(nvars(basering))+"),";
|
|
386
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
387
|
+
{
|
|
388
|
+
"Warning: Block orderings are not supported; lp used for computation.";
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if(external_ord=="" && find(singular_ord,"lp")==3)
|
|
392
|
+
{
|
|
393
|
+
external_ord="W_LEX";
|
|
394
|
+
for(i=1;i<=nvars(basering);i++)
|
|
395
|
+
{
|
|
396
|
+
weightvec[i]=0;
|
|
397
|
+
}
|
|
398
|
+
test_ord="lp("+string(nvars(basering))+"),";
|
|
399
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
400
|
+
{
|
|
401
|
+
"Warning: Block orderings are not supported; lp used for computation.";
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
if(external_ord=="" && find(singular_ord,"dp")==1)
|
|
406
|
+
{
|
|
407
|
+
external_ord="W_REV_LEX";
|
|
408
|
+
for(i=1;i<=nvars(basering);i++)
|
|
409
|
+
{
|
|
410
|
+
weightvec[i]=1;
|
|
411
|
+
}
|
|
412
|
+
test_ord="dp("+string(nvars(basering))+"),";
|
|
413
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
414
|
+
{
|
|
415
|
+
"Warning: Block orderings are not supported; dp used for computation.";
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
if(external_ord=="" && find(singular_ord,"dp")==3)
|
|
419
|
+
{
|
|
420
|
+
external_ord="W_REV_LEX";
|
|
421
|
+
for(i=1;i<=nvars(basering);i++)
|
|
422
|
+
{
|
|
423
|
+
weightvec[i]=1;
|
|
424
|
+
}
|
|
425
|
+
test_ord="dp("+string(nvars(basering))+"),";
|
|
426
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
427
|
+
{
|
|
428
|
+
"Warning: Block orderings are not supported; dp used for computation.";
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
if(external_ord=="" && find(singular_ord,"Dp")==1)
|
|
433
|
+
{
|
|
434
|
+
external_ord="W_LEX";
|
|
435
|
+
for(i=1;i<=nvars(basering);i++)
|
|
436
|
+
{
|
|
437
|
+
weightvec[i]=1;
|
|
438
|
+
}
|
|
439
|
+
test_ord="Dp("+string(nvars(basering))+"),";
|
|
440
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
441
|
+
{
|
|
442
|
+
"Warning: Block orderings are not supported; Dp used for computation.";
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
if(external_ord=="" && find(singular_ord,"Dp")==3)
|
|
446
|
+
{
|
|
447
|
+
external_ord="W_LEX";
|
|
448
|
+
for(i=1;i<=nvars(basering);i++)
|
|
449
|
+
{
|
|
450
|
+
weightvec[i]=1;
|
|
451
|
+
}
|
|
452
|
+
test_ord="Dp("+string(nvars(basering))+"),";
|
|
453
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
454
|
+
{
|
|
455
|
+
"Warning: Block orderings are not supported; Dp used for computation.";
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
int pos;
|
|
460
|
+
string number_string;
|
|
461
|
+
|
|
462
|
+
if(external_ord=="" && find(singular_ord,"wp")==1)
|
|
463
|
+
{
|
|
464
|
+
external_ord="W_REV_LEX";
|
|
465
|
+
pos=3;
|
|
466
|
+
for(i=1;i<=nvars(basering);i++)
|
|
467
|
+
{
|
|
468
|
+
pos++;
|
|
469
|
+
number_string="";
|
|
470
|
+
while(singular_ord[pos]!=",")
|
|
471
|
+
{
|
|
472
|
+
number_string=number_string+singular_ord[pos];
|
|
473
|
+
pos++;
|
|
474
|
+
}
|
|
475
|
+
weightvec[i]=`number_string`;
|
|
476
|
+
}
|
|
477
|
+
test_ord="wp("+string(weightvec)+"),";
|
|
478
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
479
|
+
{
|
|
480
|
+
"Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
if(external_ord=="" && find(singular_ord,"wp")==3)
|
|
484
|
+
{
|
|
485
|
+
external_ord="W_REV_LEX";
|
|
486
|
+
pos=5;
|
|
487
|
+
for(i=1;i<=nvars(basering);i++)
|
|
488
|
+
{
|
|
489
|
+
pos++;
|
|
490
|
+
number_string="";
|
|
491
|
+
while(singular_ord[pos]!=",")
|
|
492
|
+
{
|
|
493
|
+
number_string=number_string+singular_ord[pos];
|
|
494
|
+
pos++;
|
|
495
|
+
}
|
|
496
|
+
weightvec[i]=`number_string`;
|
|
497
|
+
}
|
|
498
|
+
test_ord="wp("+string(weightvec)+"),";
|
|
499
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
500
|
+
{
|
|
501
|
+
"Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
if(external_ord=="" && find(singular_ord,"Wp")==1)
|
|
506
|
+
{
|
|
507
|
+
external_ord="W_LEX";
|
|
508
|
+
pos=3;
|
|
509
|
+
for(i=1;i<=nvars(basering);i++)
|
|
510
|
+
{
|
|
511
|
+
pos++;
|
|
512
|
+
number_string="";
|
|
513
|
+
while(singular_ord[pos]!=",")
|
|
514
|
+
{
|
|
515
|
+
number_string=number_string+singular_ord[pos];
|
|
516
|
+
pos++;
|
|
517
|
+
}
|
|
518
|
+
weightvec[i]=`number_string`;
|
|
519
|
+
}
|
|
520
|
+
test_ord="Wp("+string(weightvec)+"),";
|
|
521
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
522
|
+
{
|
|
523
|
+
"Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
if(external_ord=="" && find(singular_ord,"Wp")==3)
|
|
527
|
+
{
|
|
528
|
+
external_ord="W_LEX";
|
|
529
|
+
pos=5;
|
|
530
|
+
for(i=1;i<=nvars(basering);i++)
|
|
531
|
+
{
|
|
532
|
+
pos++;
|
|
533
|
+
number_string="";
|
|
534
|
+
while(singular_ord[pos]!=",")
|
|
535
|
+
{
|
|
536
|
+
number_string=number_string+singular_ord[pos];
|
|
537
|
+
pos++;
|
|
538
|
+
}
|
|
539
|
+
weightvec[i]=`number_string`;
|
|
540
|
+
}
|
|
541
|
+
test_ord="Wp("+string(weightvec)+"),";
|
|
542
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
543
|
+
{
|
|
544
|
+
"Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
if(external_ord=="")
|
|
549
|
+
{
|
|
550
|
+
ERROR("The term ordering of the actual basering is not supported.");
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
// check algorithm
|
|
554
|
+
if(alg=="ct" || alg=="pct")
|
|
555
|
+
// these algorithms will not cause an error in the external program;
|
|
556
|
+
// however, they do not compute the toric ideal of A, but of an
|
|
557
|
+
// extended matrix
|
|
558
|
+
{
|
|
559
|
+
ERROR("The chosen algorithm is not suitable.");
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// create temporary file with that the external program is called
|
|
563
|
+
|
|
564
|
+
int dummy;
|
|
565
|
+
int process=system("pid");
|
|
566
|
+
string matrixfile="temp_MATRIX"+string(process);
|
|
567
|
+
link MATRIX=":w "+matrixfile;
|
|
568
|
+
open(MATRIX);
|
|
569
|
+
|
|
570
|
+
write(MATRIX,"MATRIX","columns:",ncols(A),"cost vector:");
|
|
571
|
+
for(j=1;j<=ncols(A);j++)
|
|
572
|
+
{
|
|
573
|
+
write(MATRIX,weightvec[j]);
|
|
574
|
+
}
|
|
575
|
+
write(MATRIX,"rows:",nrows(A),"matrix:");
|
|
576
|
+
for(i=1;i<=nrows(A);i++)
|
|
577
|
+
{
|
|
578
|
+
for(j=1;j<=ncols(A);j++)
|
|
579
|
+
{
|
|
580
|
+
write(MATRIX,A[i,j]);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
// enter positive row space vector, if required by the algorithm
|
|
585
|
+
if((alg=="blr") || (alg=="hs"))
|
|
586
|
+
{
|
|
587
|
+
write(MATRIX,"positive row space vector:");
|
|
588
|
+
for(j=1;j<=ncols(A);j++)
|
|
589
|
+
{
|
|
590
|
+
write(MATRIX,prsv[j]);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
close(MATRIX);
|
|
594
|
+
|
|
595
|
+
// call external program
|
|
596
|
+
if (status(system("SingularBin")+"toric_ideal","exists")=="yes")
|
|
597
|
+
{
|
|
598
|
+
dummy=system("sh",system("SingularBin")+"toric_ideal -alg "+alg+" "+matrixfile);
|
|
599
|
+
}
|
|
600
|
+
else
|
|
601
|
+
{
|
|
602
|
+
dummy=system("sh","toric_ideal -alg "+alg+" "+matrixfile);
|
|
603
|
+
}
|
|
604
|
+
if (dummy!=0) { ERROR("toric_ideal failed with error code "+string(dummy)); }
|
|
605
|
+
|
|
606
|
+
// read toric ideal from created file
|
|
607
|
+
link TORIC_IDEAL=":r "+matrixfile+".GB."+alg;
|
|
608
|
+
string toric_id=read(TORIC_IDEAL);
|
|
609
|
+
|
|
610
|
+
int generators;
|
|
611
|
+
pos=find(toric_id,"size");
|
|
612
|
+
pos=find(toric_id,":",pos);
|
|
613
|
+
pos++;
|
|
614
|
+
|
|
615
|
+
while(toric_id[pos]==" " || toric_id[pos]==newline)
|
|
616
|
+
{
|
|
617
|
+
pos++;
|
|
618
|
+
}
|
|
619
|
+
number_string="";
|
|
620
|
+
while(toric_id[pos]!=" " && toric_id[pos]!=newline)
|
|
621
|
+
{
|
|
622
|
+
number_string=number_string+toric_id[pos];
|
|
623
|
+
pos++;
|
|
624
|
+
}
|
|
625
|
+
generators=`number_string`;
|
|
626
|
+
|
|
627
|
+
intvec v;
|
|
628
|
+
poly head;
|
|
629
|
+
poly tail;
|
|
630
|
+
|
|
631
|
+
pos=find(toric_id,"basis");
|
|
632
|
+
pos=find(toric_id,":",pos);
|
|
633
|
+
pos++;
|
|
634
|
+
|
|
635
|
+
for(i=1;i<=generators;i++)
|
|
636
|
+
{
|
|
637
|
+
head=1;
|
|
638
|
+
tail=1;
|
|
639
|
+
|
|
640
|
+
for(j=1;j<=ncols(A);j++)
|
|
641
|
+
{
|
|
642
|
+
while(toric_id[pos]==" " || toric_id[pos]==newline)
|
|
643
|
+
{
|
|
644
|
+
pos++;
|
|
645
|
+
}
|
|
646
|
+
number_string="";
|
|
647
|
+
while(toric_id[pos]!=" " && toric_id[pos]!=newline)
|
|
648
|
+
{
|
|
649
|
+
number_string=number_string+toric_id[pos];
|
|
650
|
+
pos++;
|
|
651
|
+
}
|
|
652
|
+
v[j]=`number_string`;
|
|
653
|
+
if(v[j]<0)
|
|
654
|
+
{
|
|
655
|
+
tail=tail*var(j)^(-v[j]);
|
|
656
|
+
}
|
|
657
|
+
if(v[j]>0)
|
|
658
|
+
{
|
|
659
|
+
head=head*var(j)^v[j];
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
I[i]=head-tail;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// delete all created files
|
|
666
|
+
dummy=system("sh","rm -f "+matrixfile);
|
|
667
|
+
dummy=system("sh","rm -f "+matrixfile+".GB."+alg);
|
|
668
|
+
|
|
669
|
+
return(I);
|
|
670
|
+
}
|
|
671
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
672
|
+
|
|
673
|
+
proc toric_ideal
|
|
674
|
+
"USAGE: toric_ideal(A,alg); A intmat, alg string
|
|
675
|
+
toric_ideal(A,alg,prsv); A intmat, alg string, prsv intvec
|
|
676
|
+
RETURN: ideal: standard basis of the toric ideal of A
|
|
677
|
+
NOTE: These procedures return the standard basis of the toric ideal of A
|
|
678
|
+
with respect to the term ordering in the current basering. Not all
|
|
679
|
+
term orderings are supported: The usual global term orderings may be
|
|
680
|
+
used, but no block orderings combining them.
|
|
681
|
+
One may call the procedure with several different algorithms: @*
|
|
682
|
+
- the algorithm of Conti/Traverso using elimination (ect), @*
|
|
683
|
+
- the algorithm of Pottier (pt),
|
|
684
|
+
- an algorithm of Bigatti/La Scala/Robbiano (blr),
|
|
685
|
+
- the algorithm of Hosten/Sturmfels (hs),
|
|
686
|
+
- the algorithm of DiBiase/Urbanke (du).
|
|
687
|
+
The argument `alg' should be the abbreviation for an algorithm as
|
|
688
|
+
above: ect, pt, blr, hs or du.
|
|
689
|
+
|
|
690
|
+
If `alg' is chosen to be `blr' or `hs', the algorithm needs a vector
|
|
691
|
+
with positive coefficients in the row space of A.
|
|
692
|
+
If no row of A contains only positive entries, one has to use the
|
|
693
|
+
second version of toric_ideal which takes such a vector as its third
|
|
694
|
+
argument.
|
|
695
|
+
For the mathematical background, see
|
|
696
|
+
@texinfo
|
|
697
|
+
@ref{Toric ideals and integer programming}.
|
|
698
|
+
@end texinfo
|
|
699
|
+
EXAMPLE: example toric_ideal; shows an example
|
|
700
|
+
SEE ALSO: toric_std, intprog_lib, Toric ideals
|
|
701
|
+
"
|
|
702
|
+
{
|
|
703
|
+
if(size(#)==2)
|
|
704
|
+
{
|
|
705
|
+
return(toric_ideal_1(#[1],#[2]));
|
|
706
|
+
}
|
|
707
|
+
else
|
|
708
|
+
{
|
|
709
|
+
return(toric_ideal_2(#[1],#[2],#[3]));
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
|
|
714
|
+
|
|
715
|
+
example
|
|
716
|
+
{
|
|
717
|
+
"EXAMPLE"; echo=2;
|
|
718
|
+
|
|
719
|
+
ring r=0,(x,y,z),dp;
|
|
720
|
+
|
|
721
|
+
// call with two arguments
|
|
722
|
+
intmat A[2][3]=1,1,0,0,1,1;
|
|
723
|
+
A;
|
|
724
|
+
|
|
725
|
+
ideal I=toric_ideal(A,"du");
|
|
726
|
+
I;
|
|
727
|
+
|
|
728
|
+
I=toric_ideal(A,"blr");
|
|
729
|
+
I;
|
|
730
|
+
|
|
731
|
+
// call with three arguments
|
|
732
|
+
intvec prsv=1,2,1;
|
|
733
|
+
I=toric_ideal(A,"blr",prsv);
|
|
734
|
+
I;
|
|
735
|
+
|
|
736
|
+
}
|
|
737
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
738
|
+
|
|
739
|
+
proc toric_std(ideal I)
|
|
740
|
+
"USAGE: toric_std(I); I ideal
|
|
741
|
+
RETURN: ideal: standard basis of I
|
|
742
|
+
NOTE: This procedure computes the standard basis of I using a specialized
|
|
743
|
+
Buchberger algorithm. The generating system by which I is given has
|
|
744
|
+
to consist of binomials of the form x^u-x^v. There is no real check
|
|
745
|
+
if I is toric. If I is generated by binomials of the above form,
|
|
746
|
+
but not toric, toric_std computes an ideal `between' I and its
|
|
747
|
+
saturation with respect to all variables.
|
|
748
|
+
For the mathematical background, see
|
|
749
|
+
@texinfo
|
|
750
|
+
@ref{Toric ideals and integer programming}.
|
|
751
|
+
@end texinfo
|
|
752
|
+
EXAMPLE: example toric_std; shows an example
|
|
753
|
+
SEE ALSO: toric_ideal, toric_lib, intprog_lib, Toric ideals
|
|
754
|
+
"
|
|
755
|
+
{
|
|
756
|
+
ideal J;
|
|
757
|
+
// to be returned
|
|
758
|
+
|
|
759
|
+
// check suitability of actual term ordering
|
|
760
|
+
// the "module ordering" c or C is ignored
|
|
761
|
+
string singular_ord=ordstr(basering);
|
|
762
|
+
string test_ord;
|
|
763
|
+
string external_ord="";
|
|
764
|
+
int i,j;
|
|
765
|
+
intvec weightvec;
|
|
766
|
+
|
|
767
|
+
if(find(singular_ord,"lp")==1)
|
|
768
|
+
{
|
|
769
|
+
external_ord="W_LEX";
|
|
770
|
+
for(i=1;i<=nvars(basering);i++)
|
|
771
|
+
{
|
|
772
|
+
weightvec[i]=0;
|
|
773
|
+
}
|
|
774
|
+
test_ord="lp("+string(nvars(basering))+"),";
|
|
775
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
776
|
+
{
|
|
777
|
+
"Warning: Block orderings are not supported; lp used for computation.";
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
if(external_ord=="" && find(singular_ord,"lp")==3)
|
|
781
|
+
{
|
|
782
|
+
external_ord="W_LEX";
|
|
783
|
+
for(i=1;i<=nvars(basering);i++)
|
|
784
|
+
{
|
|
785
|
+
weightvec[i]=0;
|
|
786
|
+
}
|
|
787
|
+
test_ord="lp("+string(nvars(basering))+"),";
|
|
788
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
789
|
+
{
|
|
790
|
+
"Warning: Block orderings are not supported; lp used for computation.";
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
if(external_ord=="" && find(singular_ord,"dp")==1)
|
|
795
|
+
{
|
|
796
|
+
external_ord="W_REV_LEX";
|
|
797
|
+
for(i=1;i<=nvars(basering);i++)
|
|
798
|
+
{
|
|
799
|
+
weightvec[i]=1;
|
|
800
|
+
}
|
|
801
|
+
test_ord="dp("+string(nvars(basering))+"),";
|
|
802
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
803
|
+
{
|
|
804
|
+
"Warning: Block orderings are not supported; dp used for computation.";
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
if(external_ord=="" && find(singular_ord,"dp")==3)
|
|
808
|
+
{
|
|
809
|
+
external_ord="W_REV_LEX";
|
|
810
|
+
for(i=1;i<=nvars(basering);i++)
|
|
811
|
+
{
|
|
812
|
+
weightvec[i]=1;
|
|
813
|
+
}
|
|
814
|
+
test_ord="dp("+string(nvars(basering))+"),";
|
|
815
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
816
|
+
{
|
|
817
|
+
"Warning: Block orderings are not supported; dp used for computation.";
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
if(external_ord=="" && find(singular_ord,"Dp")==1)
|
|
822
|
+
{
|
|
823
|
+
external_ord="W_LEX";
|
|
824
|
+
for(i=1;i<=nvars(basering);i++)
|
|
825
|
+
{
|
|
826
|
+
weightvec[i]=1;
|
|
827
|
+
}
|
|
828
|
+
test_ord="Dp("+string(nvars(basering))+"),";
|
|
829
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
830
|
+
{
|
|
831
|
+
"Warning: Block orderings are not supported; Dp used for computation.";
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
if(external_ord=="" && find(singular_ord,"Dp")==3)
|
|
835
|
+
{
|
|
836
|
+
external_ord="W_LEX";
|
|
837
|
+
for(i=1;i<=nvars(basering);i++)
|
|
838
|
+
{
|
|
839
|
+
weightvec[i]=1;
|
|
840
|
+
}
|
|
841
|
+
test_ord="Dp("+string(nvars(basering))+"),";
|
|
842
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
843
|
+
{
|
|
844
|
+
"Warning: Block orderings are not supported; Dp used for computation.";
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
int pos;
|
|
849
|
+
string number_string;
|
|
850
|
+
|
|
851
|
+
if(external_ord=="" && find(singular_ord,"wp")==1)
|
|
852
|
+
{
|
|
853
|
+
external_ord="W_REV_LEX";
|
|
854
|
+
pos=3;
|
|
855
|
+
for(i=1;i<=nvars(basering);i++)
|
|
856
|
+
{
|
|
857
|
+
pos++;
|
|
858
|
+
number_string="";
|
|
859
|
+
while(singular_ord[pos]!="," && singular_ord[pos]!=")")
|
|
860
|
+
{
|
|
861
|
+
number_string=number_string+singular_ord[pos];
|
|
862
|
+
pos++;
|
|
863
|
+
}
|
|
864
|
+
weightvec[i]=`number_string`;
|
|
865
|
+
}
|
|
866
|
+
test_ord="wp("+string(weightvec)+"),";
|
|
867
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
868
|
+
{
|
|
869
|
+
"Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
if(external_ord=="" && find(singular_ord,"wp")==3)
|
|
874
|
+
{
|
|
875
|
+
external_ord="W_REV_LEX";
|
|
876
|
+
pos=5;
|
|
877
|
+
for(i=1;i<=nvars(basering);i++)
|
|
878
|
+
{
|
|
879
|
+
pos++;
|
|
880
|
+
number_string="";
|
|
881
|
+
while(singular_ord[pos]!=",")
|
|
882
|
+
{
|
|
883
|
+
number_string=number_string+singular_ord[pos];
|
|
884
|
+
pos++;
|
|
885
|
+
}
|
|
886
|
+
weightvec[i]=`number_string`;
|
|
887
|
+
}
|
|
888
|
+
test_ord="wp("+string(weightvec)+"),";
|
|
889
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
890
|
+
{
|
|
891
|
+
"Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
if(external_ord=="" && find(singular_ord,"Wp")==1)
|
|
896
|
+
{
|
|
897
|
+
external_ord="W_LEX";
|
|
898
|
+
pos=3;
|
|
899
|
+
for(i=1;i<=nvars(basering);i++)
|
|
900
|
+
{
|
|
901
|
+
pos++;
|
|
902
|
+
number_string="";
|
|
903
|
+
while(singular_ord[pos]!=",")
|
|
904
|
+
{
|
|
905
|
+
number_string=number_string+singular_ord[pos];
|
|
906
|
+
pos++;
|
|
907
|
+
}
|
|
908
|
+
weightvec[i]=`number_string`;
|
|
909
|
+
}
|
|
910
|
+
test_ord="Wp("+string(weightvec)+"),";
|
|
911
|
+
if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
|
|
912
|
+
{
|
|
913
|
+
"Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
if(external_ord=="" && find(singular_ord,"Wp")==3)
|
|
917
|
+
{
|
|
918
|
+
external_ord="W_LEX";
|
|
919
|
+
pos=5;
|
|
920
|
+
for(i=1;i<=nvars(basering);i++)
|
|
921
|
+
{
|
|
922
|
+
pos++;
|
|
923
|
+
number_string="";
|
|
924
|
+
while(singular_ord[pos]!=",")
|
|
925
|
+
{
|
|
926
|
+
number_string=number_string+singular_ord[pos];
|
|
927
|
+
pos++;
|
|
928
|
+
}
|
|
929
|
+
weightvec[i]=`number_string`;
|
|
930
|
+
}
|
|
931
|
+
test_ord="Wp("+string(weightvec)+"),";
|
|
932
|
+
if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
|
|
933
|
+
{
|
|
934
|
+
"Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
if(external_ord=="")
|
|
939
|
+
{
|
|
940
|
+
ERROR("The term ordering of the actual basering is not supported.");
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
// create first temporary file with which the external program is called
|
|
944
|
+
|
|
945
|
+
int dummy;
|
|
946
|
+
int process=system("pid");
|
|
947
|
+
string groebnerfile="temp_GROEBNER"+string(process);
|
|
948
|
+
link GROEBNER=":w "+groebnerfile;
|
|
949
|
+
open(GROEBNER);
|
|
950
|
+
|
|
951
|
+
write(GROEBNER,"GROEBNER","computed with algorithm:","pt","term ordering:","elimination block",0,"weighted block",nvars(basering),external_ord);
|
|
952
|
+
// algorithm is totally unimportant, only required by the external program
|
|
953
|
+
|
|
954
|
+
for(i=1;i<=nvars(basering);i++)
|
|
955
|
+
{
|
|
956
|
+
write(GROEBNER,weightvec[i]);
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
write(GROEBNER,"size:",size(I),"Groebner basis:");
|
|
960
|
+
poly head;
|
|
961
|
+
poly tail;
|
|
962
|
+
poly rest;
|
|
963
|
+
intvec v;
|
|
964
|
+
|
|
965
|
+
for(j=1;j<=size(I);j++)
|
|
966
|
+
{
|
|
967
|
+
// test suitability of generator j
|
|
968
|
+
rest=I[j];
|
|
969
|
+
head=lead(rest);
|
|
970
|
+
rest=rest-head;
|
|
971
|
+
tail=lead(rest);
|
|
972
|
+
rest=rest-tail;
|
|
973
|
+
|
|
974
|
+
if(head==0 && tail==0 && rest!=0)
|
|
975
|
+
{
|
|
976
|
+
close(GROEBNER);
|
|
977
|
+
dummy=system("sh","rm -f "+groebnerfile);
|
|
978
|
+
ERROR("Generator "+string(j)+" of the input ideal is no binomial.");
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
if(leadcoef(tail)!=-leadcoef(head))
|
|
982
|
+
// generator is no difference of monomials (or a constant multiple)
|
|
983
|
+
{
|
|
984
|
+
close(GROEBNER);
|
|
985
|
+
dummy=system("sh","rm -f "+groebnerfile);
|
|
986
|
+
ERROR("Generator "+string(j)+" of the input ideal is no difference of monomials.");
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
if(gcd(head,tail)!=1)
|
|
990
|
+
{
|
|
991
|
+
"Warning: The monomials of generator "+string(j)+" of the input ideal are not relatively prime.";
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
// write vector representation of generator j into the file
|
|
995
|
+
v=leadexp(head)-leadexp(tail);
|
|
996
|
+
for(i=1;i<=nvars(basering);i++)
|
|
997
|
+
{
|
|
998
|
+
write(GROEBNER,v[i]);
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
close(GROEBNER);
|
|
1002
|
+
|
|
1003
|
+
// create second temporary file
|
|
1004
|
+
|
|
1005
|
+
string newcostfile="temp_NEW_COST"+string(process);
|
|
1006
|
+
link NEW_COST=":w "+newcostfile;
|
|
1007
|
+
open(NEW_COST);
|
|
1008
|
+
|
|
1009
|
+
write(NEW_COST,"NEW_COST","variables:",nvars(basering),"cost vector:");
|
|
1010
|
+
for(i=1;i<=nvars(basering);i++)
|
|
1011
|
+
{
|
|
1012
|
+
write(NEW_COST,weightvec[i]);
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
// call external program
|
|
1016
|
+
if (status(system("SingularBin")+"change_cost","exists")=="yes")
|
|
1017
|
+
{
|
|
1018
|
+
dummy=system("sh",system("SingularBin")+"change_cost "+groebnerfile+" "+newcostfile);
|
|
1019
|
+
}
|
|
1020
|
+
else
|
|
1021
|
+
{
|
|
1022
|
+
dummy=system("sh","change_cost "+groebnerfile+" "+newcostfile);
|
|
1023
|
+
}
|
|
1024
|
+
if (dummy!=0) { ERROR("change_cost failed with error code "+string(dummy)); }
|
|
1025
|
+
|
|
1026
|
+
// read toric standard basis from created file
|
|
1027
|
+
link TORIC_IDEAL=":r "+newcostfile+".GB.pt";
|
|
1028
|
+
string toric_id=read(TORIC_IDEAL);
|
|
1029
|
+
|
|
1030
|
+
int generators;
|
|
1031
|
+
pos=find(toric_id,"size");
|
|
1032
|
+
pos=find(toric_id,":",pos);
|
|
1033
|
+
pos++;
|
|
1034
|
+
|
|
1035
|
+
while(toric_id[pos]==" " || toric_id[pos]==newline)
|
|
1036
|
+
{
|
|
1037
|
+
pos++;
|
|
1038
|
+
}
|
|
1039
|
+
number_string="";
|
|
1040
|
+
while(toric_id[pos]!=" " && toric_id[pos]!=newline)
|
|
1041
|
+
{
|
|
1042
|
+
number_string=number_string+toric_id[pos];
|
|
1043
|
+
pos++;
|
|
1044
|
+
}
|
|
1045
|
+
generators=`number_string`;
|
|
1046
|
+
|
|
1047
|
+
pos=find(toric_id,"basis");
|
|
1048
|
+
pos=find(toric_id,":",pos);
|
|
1049
|
+
pos++;
|
|
1050
|
+
|
|
1051
|
+
for(j=1;j<=generators;j++)
|
|
1052
|
+
{
|
|
1053
|
+
head=1;
|
|
1054
|
+
tail=1;
|
|
1055
|
+
|
|
1056
|
+
for(i=1;i<=nvars(basering);i++)
|
|
1057
|
+
{
|
|
1058
|
+
while(toric_id[pos]==" " || toric_id[pos]==newline)
|
|
1059
|
+
{
|
|
1060
|
+
pos++;
|
|
1061
|
+
}
|
|
1062
|
+
number_string="";
|
|
1063
|
+
while(toric_id[pos]!=" " && toric_id[pos]!=newline)
|
|
1064
|
+
{
|
|
1065
|
+
number_string=number_string+toric_id[pos];
|
|
1066
|
+
pos++;
|
|
1067
|
+
}
|
|
1068
|
+
v[i]=`number_string`;
|
|
1069
|
+
if(v[i]<0)
|
|
1070
|
+
{
|
|
1071
|
+
tail=tail*var(i)^(-v[i]);
|
|
1072
|
+
}
|
|
1073
|
+
if(v[i]>0)
|
|
1074
|
+
{
|
|
1075
|
+
head=head*var(i)^v[i];
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
J[j]=head-tail;
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
// delete all created files
|
|
1082
|
+
dummy=system("sh","rm -f "+groebnerfile);
|
|
1083
|
+
dummy=system("sh","rm -f "+groebnerfile+".GB.pt");
|
|
1084
|
+
dummy=system("sh","rm -f "+newcostfile);
|
|
1085
|
+
|
|
1086
|
+
return(J);
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
example
|
|
1090
|
+
{
|
|
1091
|
+
"EXAMPLE"; echo=2;
|
|
1092
|
+
|
|
1093
|
+
ring r=0,(x,y,z),wp(3,2,1);
|
|
1094
|
+
|
|
1095
|
+
// call with toric ideal (of the matrix A=(1,1,1))
|
|
1096
|
+
ideal I=x-y,x-z;
|
|
1097
|
+
ideal J=toric_std(I);
|
|
1098
|
+
J;
|
|
1099
|
+
|
|
1100
|
+
// call with the same ideal, but badly chosen generators:
|
|
1101
|
+
// 1) not only binomials
|
|
1102
|
+
I=x-y,2x-y-z;
|
|
1103
|
+
J=toric_std(I);
|
|
1104
|
+
// 2) binomials whose monomials are not relatively prime
|
|
1105
|
+
I=x-y,xy-yz,y-z;
|
|
1106
|
+
J=toric_std(I);
|
|
1107
|
+
J;
|
|
1108
|
+
|
|
1109
|
+
// call with a non-toric ideal that seems to be toric
|
|
1110
|
+
I=x-yz,xy-z;
|
|
1111
|
+
J=toric_std(I);
|
|
1112
|
+
J;
|
|
1113
|
+
// comparison with real standard basis and saturation
|
|
1114
|
+
ideal H=std(I);
|
|
1115
|
+
H;
|
|
1116
|
+
LIB "elim.lib";
|
|
1117
|
+
sat_with_exp(H,xyz);
|
|
1118
|
+
}
|
|
1119
|
+
///////////////////////////////////////////////////////////////////////////////
|