passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_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-gnu.so +0 -0
- passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
- passagemath_singular-10.6.31rc3.dist-info/RECORD +491 -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-20aec911.4.1.so +0 -0
- passagemath_singular.libs/libcddgmp-21acf0c6.so.0.1.3 +0 -0
- passagemath_singular.libs/libfactory-4-fcee31da.4.1.so +0 -0
- passagemath_singular.libs/libflint-66e12231.so.21.0.0 +0 -0
- passagemath_singular.libs/libgf2x-a4cdec90.so.3.0.0 +0 -0
- passagemath_singular.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
- passagemath_singular.libs/libgmp-6e109695.so.10.5.0 +0 -0
- passagemath_singular.libs/libgsl-cda90e79.so.28.0.0 +0 -0
- passagemath_singular.libs/libmpfr-82690d50.so.6.2.1 +0 -0
- passagemath_singular.libs/libntl-e6f0d543.so.44.0.1 +0 -0
- passagemath_singular.libs/libomalloc-0-5c9e866e.9.6.so +0 -0
- passagemath_singular.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
- passagemath_singular.libs/libpolys-4-5c0a87e0.4.1.so +0 -0
- passagemath_singular.libs/libquadmath-2284e583.so.0.0.0 +0 -0
- passagemath_singular.libs/libreadline-ea270e21.so.8.2 +0 -0
- passagemath_singular.libs/libsingular_resources-4-a1aafc6d.4.1.so +0 -0
- passagemath_singular.libs/libtinfo-ceb117d9.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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-gnu.so +0 -0
- sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
- sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-gnu.so +0 -0
- sage/libs/singular/option.pyx +671 -0
- sage/libs/singular/polynomial.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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,1023 @@
|
|
|
1
|
+
//////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version ncfrac.lib 4.1.2.0 Feb_2019 "; // $Id: c669cdf8284f2933030148cc3a020817850b2ab4 $
|
|
3
|
+
category="Noncommutative";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: ncfrac.lib object-oriented interface for olga.lib
|
|
6
|
+
AUTHOR: Johannes Hoffmann, email: johannes.hoffmann at math.rwth-aachen.de
|
|
7
|
+
|
|
8
|
+
OVERVIEW:
|
|
9
|
+
This library introduces a new type: ncfrac.
|
|
10
|
+
This type wraps the data defining a (non-commutative) fraction in an Ore
|
|
11
|
+
localization of a G-algebra as in olga.lib.
|
|
12
|
+
An element of type ncfrac has five members:
|
|
13
|
+
- polys lnum, lden, rnum, rden
|
|
14
|
+
- ncloc loc
|
|
15
|
+
|
|
16
|
+
OPERATIONS:
|
|
17
|
+
string(ncfrac);
|
|
18
|
+
give a string representation of the data describing the fraction
|
|
19
|
+
print(ncfrac);
|
|
20
|
+
prints the string representation of the fraction
|
|
21
|
+
status(ncfrac);
|
|
22
|
+
report on the status/validity of the fraction
|
|
23
|
+
test(ncfrac);
|
|
24
|
+
check if the fraction is valid
|
|
25
|
+
|
|
26
|
+
INFIX OPERATIONS:
|
|
27
|
+
ncfrac == ncfrac;
|
|
28
|
+
compare two fractions
|
|
29
|
+
ncfrac != ncfrac;
|
|
30
|
+
compare two fractions
|
|
31
|
+
ncfrac + ncfrac;
|
|
32
|
+
add two fractions
|
|
33
|
+
ncfrac - ncfrac
|
|
34
|
+
subtract two fractions
|
|
35
|
+
ncfrac * ncfrac
|
|
36
|
+
multiply two fractions
|
|
37
|
+
ncfrac / ncfrac
|
|
38
|
+
divide two fractions
|
|
39
|
+
ncfrac = int/number/poly
|
|
40
|
+
create a fraction with:
|
|
41
|
+
- left and right denominator equal to 1
|
|
42
|
+
- left and right numerator determined by the input
|
|
43
|
+
- localization data describing the trivial monoidal localization at 1
|
|
44
|
+
ncfrac = vector
|
|
45
|
+
create a fraction from a vector v with unspecified localization such that
|
|
46
|
+
lden,lnum,rnum,rden = v[1],v[2],v[3],v[4]
|
|
47
|
+
(note: without specifying a localization afterwards this results is an
|
|
48
|
+
invalid fraction)
|
|
49
|
+
ncfrac = list
|
|
50
|
+
create a fraction from a list L as follows:
|
|
51
|
+
- try to create a fraction from L[1] as above
|
|
52
|
+
- if L[2] is of type ncloc set the localization of the fraction to L[2]
|
|
53
|
+
|
|
54
|
+
PROCEDURES:
|
|
55
|
+
hasLeftDenom(ncfrac); check if the given fraction has a left representation
|
|
56
|
+
hasRightDenom(ncfrac); check if the given fraction has a right representation
|
|
57
|
+
isZeroNcfrac(ncfrac); check if the given fraction is equal to zero
|
|
58
|
+
isOneNcfrac(ncfrac); check if the given fraction is equal to one
|
|
59
|
+
zeroNcfrac(ncloc loc); create the fraction equal to zero in the given localization
|
|
60
|
+
oneNcfrac(ncloc loc); create the fraction equal to one in the given localization
|
|
61
|
+
ensureLeftNcfrac(ncfrac); compute a left representation of the given fraction if it does not have one
|
|
62
|
+
ensureRightNcfrac(ncfrac); compute a right representation of the given fraction if it does not have one
|
|
63
|
+
negateNcfrac(ncfrac); compute the additive inverse of the given fraction
|
|
64
|
+
isInvertibleNcfrac(ncfrac); check if the given fraction is invertible (note: see the description of
|
|
65
|
+
isInvertibleLeftFraction from olga.lib for specific behaviour)
|
|
66
|
+
invertNcfrac(ncfrac); compute the multiplicative inverse of the given fraction (note: see the
|
|
67
|
+
description of invertLeftFraction from olga.lib for specific behaviour)
|
|
68
|
+
testNcfrac(); execute a series of internal testing procedures
|
|
69
|
+
testNcfracExamples(); execute the examples of all procedures in this library
|
|
70
|
+
";
|
|
71
|
+
//////////////////////////////////////////////////////////////////////
|
|
72
|
+
proc testNcfracExamples()
|
|
73
|
+
"USAGE: testNcfracExamples()
|
|
74
|
+
PURPOSE: execute the examples of all procedures in this library
|
|
75
|
+
RETURN: nothing
|
|
76
|
+
NOTE:
|
|
77
|
+
EXAMPLE: "
|
|
78
|
+
{
|
|
79
|
+
example hasLeftDenom;
|
|
80
|
+
example hasRightDenom;
|
|
81
|
+
example isZeroNcfrac;
|
|
82
|
+
example isOneNcfrac;
|
|
83
|
+
example zeroNcfrac;
|
|
84
|
+
example oneNcfrac;
|
|
85
|
+
example ensureLeftNcfrac;
|
|
86
|
+
example ensureRightNcfrac;
|
|
87
|
+
}
|
|
88
|
+
//////////////////////////////////////////////////////////////////////
|
|
89
|
+
proc testNcfrac()
|
|
90
|
+
"USAGE: testNcfrac()
|
|
91
|
+
PURPOSE: execute a series of internal testing procedures
|
|
92
|
+
RETURN: nothing
|
|
93
|
+
NOTE:
|
|
94
|
+
EXAMPLE: "
|
|
95
|
+
{
|
|
96
|
+
print("testing ncfrac.lib...");
|
|
97
|
+
testHasLeftHasRight();
|
|
98
|
+
testIsZeroIsOne();
|
|
99
|
+
testNcFracCreation();
|
|
100
|
+
testNcfracComparison();
|
|
101
|
+
testNcfracAddition();
|
|
102
|
+
testNcfracSubtraction();
|
|
103
|
+
testNcfracMultiplication();
|
|
104
|
+
testNcfracDivision();
|
|
105
|
+
testNcfracInversion();
|
|
106
|
+
testEnsureRightNcfrac();
|
|
107
|
+
testEnsureLeftNcfrac();
|
|
108
|
+
print("testing complete - ncfrac.lib OK");
|
|
109
|
+
}
|
|
110
|
+
//////////////////////////////////////////////////////////////////////
|
|
111
|
+
static proc mod_init() {
|
|
112
|
+
LIB "ncloc.lib";
|
|
113
|
+
/* new type: ncfrac (non-commutative fraction) */
|
|
114
|
+
newstruct("ncfrac", "ncloc loc, poly rden, poly rnum, poly lden, poly lnum");
|
|
115
|
+
system("install", "ncfrac", "print", printNcfrac, 1);
|
|
116
|
+
system("install", "ncfrac", "string", ncfracToString, 1);
|
|
117
|
+
system("install", "ncfrac", "=", createNcfrac, 1);
|
|
118
|
+
system("install", "ncfrac", "==", compareNcfracs, 2);
|
|
119
|
+
system("install", "ncfrac", "!=", invertedCompareNcfracs, 2);
|
|
120
|
+
system("install", "ncfrac", "+", addNcfracs, 2);
|
|
121
|
+
system("install", "ncfrac", "-", subtractNcfracs, 2);
|
|
122
|
+
system("install", "ncfrac", "*", multiplyNcfracs, 2);
|
|
123
|
+
system("install", "ncfrac", "/", divideNcfracs, 2);
|
|
124
|
+
system("install", "ncfrac", "test", testNcfrac, 4);
|
|
125
|
+
system("install", "ncfrac", "status", statusNcfrac, 4);
|
|
126
|
+
}
|
|
127
|
+
//////////////////////////////////////////////////////////////////////
|
|
128
|
+
proc hasLeftDenom(ncfrac frac)
|
|
129
|
+
"USAGE: hasLeftDenom(frac), ncfrac frac
|
|
130
|
+
PURPOSE: checks if frac has a left representation
|
|
131
|
+
RETURN: int, 1 if frac has a left representation, 0 otherwise
|
|
132
|
+
EXAMPLE: example hasLeftDenom; shows example"
|
|
133
|
+
{
|
|
134
|
+
return(frac.lden != 0);
|
|
135
|
+
}
|
|
136
|
+
example
|
|
137
|
+
{
|
|
138
|
+
"EXAMPLE:"; echo = 2;
|
|
139
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
140
|
+
def S = Weyl();
|
|
141
|
+
setring S;
|
|
142
|
+
ncloc loc = ideal(x-3,y+7);
|
|
143
|
+
ncfrac noLeft = list([0,0,3*y*Dx,x+2], loc);
|
|
144
|
+
hasLeftDenom(noLeft);
|
|
145
|
+
ncfrac left = list([1,Dx,Dx,1], loc);
|
|
146
|
+
hasLeftDenom(left);
|
|
147
|
+
}
|
|
148
|
+
//////////////////////////////////////////////////////////////////////
|
|
149
|
+
proc hasRightDenom(ncfrac frac)
|
|
150
|
+
"USAGE: hasRightDenom(frac), ncfrac frac
|
|
151
|
+
PURPOSE: checks if frac has a right representation
|
|
152
|
+
RETURN: int, 1 if frac has a right representation, 0 otherwise
|
|
153
|
+
EXAMPLE: example hasRightDenom; shows example"
|
|
154
|
+
{
|
|
155
|
+
return(frac.rden != 0);
|
|
156
|
+
}
|
|
157
|
+
example
|
|
158
|
+
{
|
|
159
|
+
"EXAMPLE:"; echo = 2;
|
|
160
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
161
|
+
def S = Weyl();
|
|
162
|
+
setring S;
|
|
163
|
+
ncloc loc = ideal(x-3,y+7);
|
|
164
|
+
ncfrac noRight = list([x+2,3*y*Dx,0,0], loc);
|
|
165
|
+
hasRightDenom(noRight);
|
|
166
|
+
ncfrac right = list([1,Dx,Dx,1], loc);
|
|
167
|
+
hasRightDenom(right);
|
|
168
|
+
}
|
|
169
|
+
////////// status and printing ///////////////////////////////////////
|
|
170
|
+
static proc toVector(ncfrac frac) {
|
|
171
|
+
return([frac.lden, frac.lnum, frac.rnum, frac.rden]);
|
|
172
|
+
}
|
|
173
|
+
//////////////////////////////////////////////////////////////////////
|
|
174
|
+
static proc statusNcfrac(ncfrac frac) {
|
|
175
|
+
return(fracStatus(toVector(frac), frac.loc.locType, frac.loc.locData));
|
|
176
|
+
// fracStatus from olga.lib
|
|
177
|
+
}
|
|
178
|
+
//////////////////////////////////////////////////////////////////////
|
|
179
|
+
static proc testNcfrac(ncfrac frac) {
|
|
180
|
+
list stat = status(frac);
|
|
181
|
+
if(!stat[1]) {
|
|
182
|
+
ERROR(stat[2]);
|
|
183
|
+
} else {
|
|
184
|
+
return();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//////////////////////////////////////////////////////////////////////
|
|
188
|
+
static proc ncfracToString(ncfrac frac) {
|
|
189
|
+
list stat = status(frac);
|
|
190
|
+
if (!stat[1]) {
|
|
191
|
+
return(stat[2]);
|
|
192
|
+
} else {
|
|
193
|
+
return("left repr.: (" + string(frac.lden) + "," + string(frac.lnum)
|
|
194
|
+
+ ")" + newline + "right repr.: (" + string(frac.rnum) + ","
|
|
195
|
+
+ string(frac.rden) + ")");
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//////////////////////////////////////////////////////////////////////
|
|
199
|
+
static proc printNcfrac(ncfrac frac) {
|
|
200
|
+
string(frac);
|
|
201
|
+
}
|
|
202
|
+
//////////////////////////////////////////////////////////////////////
|
|
203
|
+
proc isZeroNcfrac(ncfrac frac)
|
|
204
|
+
"USAGE: isZeroNcfrac(frac), ncfrac frac
|
|
205
|
+
PURPOSE: checks if frac is zero
|
|
206
|
+
RETURN: int, 1 if frac is zero, 0 otherwise
|
|
207
|
+
EXAMPLE: example isZeroNcfrac; shows example"
|
|
208
|
+
{
|
|
209
|
+
testNcfrac(frac);
|
|
210
|
+
if (hasLeftDenom(frac)) { // frac has left representation
|
|
211
|
+
return(frac.lnum == 0);
|
|
212
|
+
} else { // frac has right representation, but no left representation
|
|
213
|
+
return(frac.rnum == 0);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
example
|
|
217
|
+
{
|
|
218
|
+
"EXAMPLE:"; echo = 2;
|
|
219
|
+
ring Q = (0,q),(x,y,Qx,Qy),dp;
|
|
220
|
+
matrix C[4][4] = UpOneMatrix(4);
|
|
221
|
+
C[1,3] = q;
|
|
222
|
+
C[2,4] = q;
|
|
223
|
+
def ncQ = nc_algebra(C,0);
|
|
224
|
+
setring ncQ;
|
|
225
|
+
ncloc loc = intvec(2);
|
|
226
|
+
ncfrac frac = list([y^2+7*y+1,0,0,0], loc);
|
|
227
|
+
isZeroNcfrac(frac);
|
|
228
|
+
frac.lnum = 42*y*Qy+7*Qx+3*x+7;
|
|
229
|
+
isZeroNcfrac(frac);
|
|
230
|
+
}
|
|
231
|
+
//////////////////////////////////////////////////////////////////////
|
|
232
|
+
proc isOneNcfrac(ncfrac frac)
|
|
233
|
+
"USAGE: isOneNcfrac(frac), ncfrac frac
|
|
234
|
+
PURPOSE: checks if frac is one
|
|
235
|
+
RETURN: int, 1 if frac is one, 0 otherwise
|
|
236
|
+
EXAMPLE: example isOneNcfrac; shows example"
|
|
237
|
+
{
|
|
238
|
+
testNcfrac(frac);
|
|
239
|
+
if (hasLeftDenom(frac)) { // frac has left representation
|
|
240
|
+
return(frac.lden == frac.lnum);
|
|
241
|
+
} else { // frac has right representation, but no left representation
|
|
242
|
+
return(frac.rden == frac.rnum);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
example
|
|
246
|
+
{
|
|
247
|
+
"EXAMPLE:"; echo = 2;
|
|
248
|
+
ring Q = (0,q),(x,y,Qx,Qy),dp;
|
|
249
|
+
matrix C[4][4] = UpOneMatrix(4);
|
|
250
|
+
C[1,3] = q;
|
|
251
|
+
C[2,4] = q;
|
|
252
|
+
def ncQ = nc_algebra(C,0);
|
|
253
|
+
setring ncQ;
|
|
254
|
+
ncloc loc = intvec(2);
|
|
255
|
+
ncfrac frac = list([y^2+7*y+1,y^2+7*y+1,0,0], loc);
|
|
256
|
+
isOneNcfrac(frac);
|
|
257
|
+
frac.lnum = 42*y*Qy+7*Qx+3*x+7;
|
|
258
|
+
isOneNcfrac(frac);
|
|
259
|
+
}
|
|
260
|
+
////////// initialization, comparison and declaration ////////////////
|
|
261
|
+
static proc createNcfrac(def input) {
|
|
262
|
+
string inputType = typeof(input);
|
|
263
|
+
ncfrac result;
|
|
264
|
+
if (inputType == "list") {
|
|
265
|
+
if (size(input) >= 2) {
|
|
266
|
+
result = createNcfrac(input[1]);
|
|
267
|
+
if (typeof(input[2]) == "ncloc") {
|
|
268
|
+
result.loc = input[2];
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (inputType == "int" || inputType == "number" || inputType == "poly") {
|
|
273
|
+
result.lden = poly(1);
|
|
274
|
+
result.lnum = poly(input);
|
|
275
|
+
result.rden = poly(1);
|
|
276
|
+
result.rnum = poly(input);
|
|
277
|
+
result.loc = ncloc(list(1));
|
|
278
|
+
}
|
|
279
|
+
if (inputType == "vector") {
|
|
280
|
+
result.lden = input[1];
|
|
281
|
+
result.lnum = input[2];
|
|
282
|
+
result.rnum = input[3];
|
|
283
|
+
result.rden = input[4];
|
|
284
|
+
}
|
|
285
|
+
return(result);
|
|
286
|
+
}
|
|
287
|
+
//////////////////////////////////////////////////////////////////////
|
|
288
|
+
proc zeroNcfrac(ncloc loc)
|
|
289
|
+
"USAGE: zeroNcfrac(loc), ncloc loc
|
|
290
|
+
PURPOSE: returns the zero fraction in the localization loc
|
|
291
|
+
RETURN: ncfrac
|
|
292
|
+
EXAMPLE: example zeroNcfrac; shows example"
|
|
293
|
+
{
|
|
294
|
+
return(ncfrac(list([1,0,0,1], loc)));
|
|
295
|
+
}
|
|
296
|
+
example
|
|
297
|
+
{
|
|
298
|
+
"EXAMPLE:"; echo = 2;
|
|
299
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
300
|
+
def S = Weyl();
|
|
301
|
+
setring S;
|
|
302
|
+
ncloc loc = ideal(x-53,y-7);
|
|
303
|
+
zeroNcfrac(loc);
|
|
304
|
+
}
|
|
305
|
+
//////////////////////////////////////////////////////////////////////
|
|
306
|
+
proc oneNcfrac(ncloc loc)
|
|
307
|
+
"USAGE: oneNcfrac(loc), ncloc loc
|
|
308
|
+
PURPOSE: returns the one fraction in the localization loc
|
|
309
|
+
RETURN: ncfrac
|
|
310
|
+
EXAMPLE: "
|
|
311
|
+
{
|
|
312
|
+
return(ncfrac(list([1,1,1,1], loc)));
|
|
313
|
+
}
|
|
314
|
+
example
|
|
315
|
+
{
|
|
316
|
+
"EXAMPLE:"; echo = 2;
|
|
317
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
318
|
+
def S = Weyl();
|
|
319
|
+
setring S;
|
|
320
|
+
ncloc loc = ideal(x-42,y-17);
|
|
321
|
+
oneNcfrac(loc);
|
|
322
|
+
}
|
|
323
|
+
//////////////////////////////////////////////////////////////////////
|
|
324
|
+
static proc trimNcfrac(ncfrac frac)
|
|
325
|
+
"USAGE: trimNcfrac(frac), ncfrac frac
|
|
326
|
+
PURPOSE: simplifies complicated representations of zero and one
|
|
327
|
+
RETURN: ncfrac
|
|
328
|
+
NOTE: - if frac is zero, returns the default representation of zero
|
|
329
|
+
- if frac is one, returns the default representation of one
|
|
330
|
+
- otherwise returns frac
|
|
331
|
+
EXAMPLE: example trimNcfrac; shows example"
|
|
332
|
+
{
|
|
333
|
+
testNcfrac(frac);
|
|
334
|
+
if (isZeroNcfrac(frac)) {
|
|
335
|
+
return(zeroNcfrac(frac.loc));
|
|
336
|
+
}
|
|
337
|
+
if (isOneNcfrac(frac)) {
|
|
338
|
+
return(oneNcfrac(frac.loc));
|
|
339
|
+
}
|
|
340
|
+
return(frac);
|
|
341
|
+
} example {
|
|
342
|
+
"EXAMPLE:"; echo = 2;
|
|
343
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
344
|
+
def S = Weyl();
|
|
345
|
+
setring S;
|
|
346
|
+
ncloc loc = poly(x);
|
|
347
|
+
loc;
|
|
348
|
+
ncfrac frac1 = list([x^2,x*x,0,0], loc);
|
|
349
|
+
trimNcfrac(frac1);
|
|
350
|
+
ncfrac frac2 = list([0,0,0,x], loc);
|
|
351
|
+
trimNcfrac(frac2);
|
|
352
|
+
}
|
|
353
|
+
//////////////////////////////////////////////////////////////////////
|
|
354
|
+
static proc compareNcfracs(ncfrac frac1, ncfrac frac2) {
|
|
355
|
+
testNcfrac(frac1);
|
|
356
|
+
testNcfrac(frac2);
|
|
357
|
+
if (isZeroNcfrac(frac1)) {
|
|
358
|
+
return(isZeroNcfrac(frac2));
|
|
359
|
+
}
|
|
360
|
+
if (isOneNcfrac(frac1)) {
|
|
361
|
+
return(isOneNcfrac(frac2));
|
|
362
|
+
}
|
|
363
|
+
if (isZeroNcfrac(frac1 - frac2)) {
|
|
364
|
+
// frac1 and frac2 are equal iff their difference is zero
|
|
365
|
+
return (1);
|
|
366
|
+
} else {
|
|
367
|
+
return (0);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
//////////////////////////////////////////////////////////////////////
|
|
371
|
+
static proc invertedCompareNcfracs(ncfrac frac1, ncfrac frac2) {
|
|
372
|
+
return(!compareNcfracs(frac1, frac2));
|
|
373
|
+
}
|
|
374
|
+
////////// compute left resp. right representations //////////////////
|
|
375
|
+
proc ensureLeftNcfrac(ncfrac frac)
|
|
376
|
+
"USAGE: ensureLeftNcfrac(frac), ncfrac frac
|
|
377
|
+
PURPOSE: ensures that frac has a left representation (by computing it if not
|
|
378
|
+
alreaDy known)
|
|
379
|
+
RETURN: ncfrac, a representation of frac which has a left representation
|
|
380
|
+
EXAMPLE: "
|
|
381
|
+
{
|
|
382
|
+
testNcfrac(frac);
|
|
383
|
+
if (hasLeftDenom(frac)) {
|
|
384
|
+
return(frac);
|
|
385
|
+
}
|
|
386
|
+
ncloc loc = frac.loc;
|
|
387
|
+
vector f = toVector(frac);
|
|
388
|
+
vector result = convertRightToLeftFraction(f, loc.locType, loc.locData);
|
|
389
|
+
return(ncfrac(list(result, loc)));
|
|
390
|
+
}
|
|
391
|
+
example
|
|
392
|
+
{
|
|
393
|
+
"EXAMPLE:"; echo = 2;
|
|
394
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
395
|
+
def S = Weyl();
|
|
396
|
+
setring S; S;
|
|
397
|
+
// monoidal localization
|
|
398
|
+
poly g1 = x+3;
|
|
399
|
+
poly g2 = x*y;
|
|
400
|
+
list L = g1,g2;
|
|
401
|
+
ncloc loc0 = L;
|
|
402
|
+
poly g = g1^2*g2;
|
|
403
|
+
poly f = Dx;
|
|
404
|
+
ncfrac frac0 = [0,0,f,g];
|
|
405
|
+
frac0.loc = loc0;
|
|
406
|
+
ncfrac rm = ensureLeftNcfrac(frac0);
|
|
407
|
+
print(rm);
|
|
408
|
+
rm.lnum*g-rm.lden*f;
|
|
409
|
+
// geometric localization
|
|
410
|
+
ncloc loc1 = ideal(x-1,y-3);
|
|
411
|
+
f = Dx;
|
|
412
|
+
g = x^2+y;
|
|
413
|
+
ncfrac frac1 = [0,0,f,g];
|
|
414
|
+
frac1.loc = loc1;
|
|
415
|
+
ncfrac rg = ensureLeftNcfrac(frac1);
|
|
416
|
+
print(rg);
|
|
417
|
+
rg.lnum*g-rg.lden*f;
|
|
418
|
+
// rational localization
|
|
419
|
+
intvec rat = 1;
|
|
420
|
+
ncloc loc2 = rat;
|
|
421
|
+
f = Dx+Dy;
|
|
422
|
+
g = x;
|
|
423
|
+
ncfrac frac2 = [0,0,f,g];
|
|
424
|
+
frac2.loc = loc2;
|
|
425
|
+
ncfrac rr = ensureLeftNcfrac(frac2);
|
|
426
|
+
print(rr);
|
|
427
|
+
rr.lnum*g-rr.lden*f;
|
|
428
|
+
}
|
|
429
|
+
//////////////////////////////////////////////////////////////////////
|
|
430
|
+
proc ensureRightNcfrac(ncfrac frac)
|
|
431
|
+
"USAGE: ensureLeftNcfrac(frac), ncfrac frac
|
|
432
|
+
PURPOSE: ensures that frac has a right representation (by computing it if not
|
|
433
|
+
alreaDy known)
|
|
434
|
+
RETURN: ncfrac, a representation of frac which has a right representation
|
|
435
|
+
EXAMPLE: "
|
|
436
|
+
{
|
|
437
|
+
testNcfrac(frac);
|
|
438
|
+
if (hasRightDenom(frac)) {
|
|
439
|
+
return (frac);
|
|
440
|
+
}
|
|
441
|
+
ncloc loc = frac.loc;
|
|
442
|
+
vector f = toVector(frac);
|
|
443
|
+
vector result = convertLeftToRightFraction(f, loc.locType, loc.locData);
|
|
444
|
+
return(ncfrac(list(result, loc)));
|
|
445
|
+
}
|
|
446
|
+
example
|
|
447
|
+
{
|
|
448
|
+
"EXAMPLE:"; echo = 2;
|
|
449
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
450
|
+
def S = Weyl();
|
|
451
|
+
setring S; S;
|
|
452
|
+
// monoidal localization
|
|
453
|
+
poly g = x;
|
|
454
|
+
poly f = Dx;
|
|
455
|
+
ncloc loc0 = g;
|
|
456
|
+
ncfrac frac0 = [g,f,0,0];
|
|
457
|
+
frac0.loc = loc0;
|
|
458
|
+
ncfrac rm = ensureRightNcfrac(frac0);
|
|
459
|
+
print(rm);
|
|
460
|
+
f*rm.rden-g*rm.rnum;
|
|
461
|
+
// geometric localization
|
|
462
|
+
g = x+y;
|
|
463
|
+
f = Dx+Dy;
|
|
464
|
+
ncloc loc1 = ideal(x-1,y-3);
|
|
465
|
+
ncfrac frac1 = [g,f,0,0];
|
|
466
|
+
frac1.loc = loc1;
|
|
467
|
+
ncfrac rg = ensureRightNcfrac(frac1);
|
|
468
|
+
print(rg);
|
|
469
|
+
f*rg.rden-g*rg.rnum;
|
|
470
|
+
// rational localization
|
|
471
|
+
intvec rat = 1;
|
|
472
|
+
f = Dx+Dy;
|
|
473
|
+
g = x;
|
|
474
|
+
ncloc loc2 = rat;
|
|
475
|
+
ncfrac frac2 = [g,f,0,0];
|
|
476
|
+
frac2.loc = loc2;
|
|
477
|
+
ncfrac rr = ensureRightNcfrac(frac2);
|
|
478
|
+
print(rr);
|
|
479
|
+
f*rr.rden-g*rr.rnum;
|
|
480
|
+
}
|
|
481
|
+
////////// arithmetic ////////////////////////////////////////////////
|
|
482
|
+
static proc addNcfracs(ncfrac frac1, ncfrac frac2) {
|
|
483
|
+
testNcfrac(frac1);
|
|
484
|
+
testNcfrac(frac2);
|
|
485
|
+
ncloc loc = frac1.loc;
|
|
486
|
+
if (loc != frac2.loc) {
|
|
487
|
+
ERROR("cannot add fractions: incompatible localizations");
|
|
488
|
+
}
|
|
489
|
+
vector f1 = toVector(frac1);
|
|
490
|
+
vector f2 = toVector(frac2);
|
|
491
|
+
vector result = addLeftFractions(f1, f2, loc.locType, loc.locData, 1);
|
|
492
|
+
return(ncfrac(list(result, loc)));
|
|
493
|
+
}
|
|
494
|
+
//////////////////////////////////////////////////////////////////////
|
|
495
|
+
proc negateNcfrac(ncfrac frac)
|
|
496
|
+
"USAGE: negateNcfrac(frac), ncfrac frac
|
|
497
|
+
PURPOSE: compute the negative (i.e. additive inverse) of frac
|
|
498
|
+
RETURN: ncfrac
|
|
499
|
+
NOTE: returns (-1)*frac
|
|
500
|
+
EXAMPLE: example negateNcfrac; shows example"
|
|
501
|
+
{
|
|
502
|
+
ncfrac result = frac;
|
|
503
|
+
result.lnum = result.lnum * (-1);
|
|
504
|
+
result.rnum = result.rnum * (-1);
|
|
505
|
+
return(result);
|
|
506
|
+
}
|
|
507
|
+
example
|
|
508
|
+
{
|
|
509
|
+
"EXAMPLE:"; echo = 2;
|
|
510
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
511
|
+
def S = Weyl();
|
|
512
|
+
setring S;
|
|
513
|
+
poly g = x*y^2+4*x+7*y-98;
|
|
514
|
+
ncloc loc = g;
|
|
515
|
+
ncfrac frac = list([g, 13*x^2], loc);
|
|
516
|
+
frac;
|
|
517
|
+
ncfrac negFrac = negateNcfrac(frac);
|
|
518
|
+
negFrac;
|
|
519
|
+
frac + negFrac;
|
|
520
|
+
}
|
|
521
|
+
//////////////////////////////////////////////////////////////////////
|
|
522
|
+
static proc subtractNcfracs(ncfrac frac1, ncfrac frac2) {
|
|
523
|
+
testNcfrac(frac1);
|
|
524
|
+
testNcfrac(frac2);
|
|
525
|
+
if (frac1.loc != frac2.loc) {
|
|
526
|
+
ERROR("cannot subtract fractions: incompatible localizations");
|
|
527
|
+
}
|
|
528
|
+
return(frac1 + negateNcfrac(frac2));
|
|
529
|
+
}
|
|
530
|
+
//////////////////////////////////////////////////////////////////////
|
|
531
|
+
static proc multiplyNcfracs(ncfrac frac1, ncfrac frac2) {
|
|
532
|
+
testNcfrac(frac1);
|
|
533
|
+
testNcfrac(frac2);
|
|
534
|
+
ncloc loc = frac1.loc;
|
|
535
|
+
if (loc != frac2.loc) {
|
|
536
|
+
ERROR("cannot multiply fractions: incompatible localizations");
|
|
537
|
+
}
|
|
538
|
+
vector f1 = toVector(frac1);
|
|
539
|
+
vector f2 = toVector(frac2);
|
|
540
|
+
vector result = multiplyLeftFractions(f1, f2, loc.locType, loc.locData, 1);
|
|
541
|
+
return(ncfrac(list(result, loc)));
|
|
542
|
+
}
|
|
543
|
+
//////////////////////////////////////////////////////////////////////
|
|
544
|
+
proc isInvertibleNcfrac(ncfrac frac)
|
|
545
|
+
"USAGE: isInvertibleNcfrac(frac), ncfrac frac
|
|
546
|
+
PURPOSE: checks if frac is invertible
|
|
547
|
+
RETURN: int, 1 if frac is invertible, 0 otherwise
|
|
548
|
+
EXAMPLE: example isInvertibleNcfrac; shows example"
|
|
549
|
+
{
|
|
550
|
+
testNcfrac(frac);
|
|
551
|
+
poly num;
|
|
552
|
+
if (hasLeftDenom(frac)) { // frac has left representation
|
|
553
|
+
num = frac.lnum;
|
|
554
|
+
} else { // frac has right representation, but no left representation
|
|
555
|
+
num = frac.rnum;
|
|
556
|
+
}
|
|
557
|
+
return(isDenom(num, frac.loc));
|
|
558
|
+
}
|
|
559
|
+
example
|
|
560
|
+
{
|
|
561
|
+
"EXAMPLE:"; echo = 2;
|
|
562
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
563
|
+
def S = Weyl();
|
|
564
|
+
setring S;
|
|
565
|
+
ncloc loc = intvec(2);
|
|
566
|
+
ncfrac frac = list([y,y+1,0,0], loc);
|
|
567
|
+
isInvertibleNcfrac(frac);
|
|
568
|
+
frac = list([y,x+1,0,0], loc);
|
|
569
|
+
isInvertibleNcfrac(frac);
|
|
570
|
+
}
|
|
571
|
+
//////////////////////////////////////////////////////////////////////
|
|
572
|
+
proc invertNcfrac(ncfrac frac)
|
|
573
|
+
"USAGE: invertNcfrac(frac), ncfrac frac
|
|
574
|
+
PURPOSE: compute the inverse of frac
|
|
575
|
+
RETURN: ncfrac
|
|
576
|
+
NOTE: returns the zero fraction if frac is not invertible
|
|
577
|
+
EXAMPLE: example invertNcfrac; shows example"
|
|
578
|
+
{
|
|
579
|
+
ncfrac result;
|
|
580
|
+
if (!isInvertibleNcfrac(frac)) {
|
|
581
|
+
result = zeroNcfrac(frac.loc);
|
|
582
|
+
} else {
|
|
583
|
+
result = list([frac.lnum, frac.lden, frac.rden, frac.rnum], frac.loc);
|
|
584
|
+
}
|
|
585
|
+
return(result);
|
|
586
|
+
}
|
|
587
|
+
example
|
|
588
|
+
{
|
|
589
|
+
"EXAMPLE:"; echo = 2;
|
|
590
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
591
|
+
def S = Weyl();
|
|
592
|
+
setring S;
|
|
593
|
+
ncloc loc = intvec(2);
|
|
594
|
+
ncfrac frac1 = list([y,y+1,0,0], loc);
|
|
595
|
+
// frac1 is invertible
|
|
596
|
+
ncfrac inv = invertNcfrac(frac1);
|
|
597
|
+
inv;
|
|
598
|
+
ncfrac frac2 = list([y,x+1,0,0], loc);
|
|
599
|
+
// frac2 is not invertible
|
|
600
|
+
inv = invertNcfrac(frac2);
|
|
601
|
+
inv;
|
|
602
|
+
}
|
|
603
|
+
//////////////////////////////////////////////////////////////////////
|
|
604
|
+
static proc divideNcfracs(ncfrac frac1, ncfrac frac2) {
|
|
605
|
+
testNcfrac(frac1);
|
|
606
|
+
testNcfrac(frac2);
|
|
607
|
+
if (frac1.loc != frac2.loc) {
|
|
608
|
+
ERROR("cannot multiply fractions: incompatible localizations");
|
|
609
|
+
}
|
|
610
|
+
if(!isInvertibleNcfrac(frac2)) {
|
|
611
|
+
ERROR("division by non-invertible fraction");
|
|
612
|
+
} else {
|
|
613
|
+
return(frac1 * invertNcfrac(frac2));
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
//////////////////////////////////////////////////////////////////////
|
|
617
|
+
////////// internal testing procedures ///////////////////////////////
|
|
618
|
+
static proc testHasLeftHasRight()
|
|
619
|
+
{
|
|
620
|
+
print(" testing ncfrac hasLeftDenom/hasRightDenom...");
|
|
621
|
+
ring r = 0,(x,y,Dx,Dy),dp;
|
|
622
|
+
def R = Weyl();
|
|
623
|
+
setring R;
|
|
624
|
+
ncloc loc = ideal(x-3,y+7);
|
|
625
|
+
ncfrac noLeft = list([0,0,3*y*Dx,x+2], loc);
|
|
626
|
+
if (hasLeftDenom(noLeft)) {
|
|
627
|
+
ERROR("hasLeftDenom noLeft failed");
|
|
628
|
+
}
|
|
629
|
+
ncfrac left = list([1,Dx,Dx,1], loc);
|
|
630
|
+
if (!hasLeftDenom(left)) {
|
|
631
|
+
ERROR("hasLeftDenom left failed");
|
|
632
|
+
}
|
|
633
|
+
ncfrac noRight = list([x+2,3*y*Dx,0,0], loc);
|
|
634
|
+
if (hasRightDenom(noRight)) {
|
|
635
|
+
ERROR("hasRightDenom noRight failed");
|
|
636
|
+
}
|
|
637
|
+
ncfrac right = list([1,Dx,Dx,1], loc);
|
|
638
|
+
if (!hasRightDenom(right)) {
|
|
639
|
+
ERROR("hasRightDenom right failed");
|
|
640
|
+
}
|
|
641
|
+
print(" ncloc hasLeftDenom/hasRightDenom OK");
|
|
642
|
+
}
|
|
643
|
+
//////////////////////////////////////////////////////////////////////
|
|
644
|
+
static proc testIsZeroIsOne()
|
|
645
|
+
{
|
|
646
|
+
print(" testing ncfrac isZeroNcfrac/isOneNcfrac...");
|
|
647
|
+
ring Q = (0,q),(x,y,Qx,Qy),dp;
|
|
648
|
+
matrix C[4][4] = UpOneMatrix(4);
|
|
649
|
+
C[1,3] = q;
|
|
650
|
+
C[2,4] = q;
|
|
651
|
+
def ncQ = nc_algebra(C,0);
|
|
652
|
+
setring ncQ;
|
|
653
|
+
ncloc loc = intvec(2);
|
|
654
|
+
ncfrac frac = list([y^2+7*y+1,0,0,0], loc);
|
|
655
|
+
if (!isZeroNcfrac(frac)) {
|
|
656
|
+
ERROR("isZeroNcfrac zero failed");
|
|
657
|
+
}
|
|
658
|
+
frac.lnum = 42*y*Qy+7*Qx+3*x+7;
|
|
659
|
+
if (isZeroNcfrac(frac)) {
|
|
660
|
+
ERROR("isZeroNcfrac non-zero failed");
|
|
661
|
+
}
|
|
662
|
+
frac.lnum = frac.lden;
|
|
663
|
+
//frac = list([y^2+7*y+1,y^2+7*y+1,0,0], loc);
|
|
664
|
+
if (!isOneNcfrac(frac)) {
|
|
665
|
+
ERROR("isOneNcfrac one failed");
|
|
666
|
+
}
|
|
667
|
+
frac.lnum = 42*y*Qy+7*Qx+3*x+7;
|
|
668
|
+
if (isOneNcfrac(frac)) {
|
|
669
|
+
ERROR("isOneNcfrac non-one failed");
|
|
670
|
+
}
|
|
671
|
+
print(" ncloc isZeroNcfrac/isOneNcfrac OK");
|
|
672
|
+
}
|
|
673
|
+
//////////////////////////////////////////////////////////////////////
|
|
674
|
+
static proc testNcFracCreation() {
|
|
675
|
+
print(" testing ncfrac creation...");
|
|
676
|
+
ring r = 0,(x,y,Dx,Dy),dp;
|
|
677
|
+
def R = Weyl();
|
|
678
|
+
setring R;
|
|
679
|
+
ncloc loc = list(x);
|
|
680
|
+
ncfrac frac1 = [x,Dx,0,0]; // create from vector
|
|
681
|
+
frac1.loc = loc;
|
|
682
|
+
test(frac1);
|
|
683
|
+
ncfrac frac2 = 7; // create from interface
|
|
684
|
+
frac2.loc = loc;
|
|
685
|
+
test(frac2);
|
|
686
|
+
ncfrac frac3 = 4*x*Dx*Dy*Dy; // create from poly
|
|
687
|
+
frac3.loc = loc;
|
|
688
|
+
test(frac3);
|
|
689
|
+
ncfrac frac4 = list([x^2,Dx], loc); // create from list with vector
|
|
690
|
+
test(frac4);
|
|
691
|
+
ncfrac frac5 = list(42, loc); // create from list with int
|
|
692
|
+
test(frac5);
|
|
693
|
+
print(" ncfrac creation OK");
|
|
694
|
+
}
|
|
695
|
+
//////////////////////////////////////////////////////////////////////
|
|
696
|
+
static proc testNcfracComparison() {
|
|
697
|
+
print(" testing ncfrac comparison...");
|
|
698
|
+
ring r = 0,(x,y,Dx,Dy),dp;
|
|
699
|
+
def R = Weyl();
|
|
700
|
+
setring R;
|
|
701
|
+
// monoidal
|
|
702
|
+
poly g1 = x*y+3;
|
|
703
|
+
poly g2 = y^3;
|
|
704
|
+
ncloc locm = list(g1, g2);
|
|
705
|
+
ncfrac fracm1 = list([g1,Dx,0,0], locm);
|
|
706
|
+
ncfrac fracm2 = list([g1*g2,g2*Dx,0,0], locm);
|
|
707
|
+
ncfrac fracm3 = list([g1*g2,g1*Dx+3,0,0], locm);
|
|
708
|
+
if (!(fracm1 == fracm2)) {
|
|
709
|
+
ERROR("Weyl monoidal positive basic comparison error");
|
|
710
|
+
}
|
|
711
|
+
if (fracm1 == fracm3) {
|
|
712
|
+
ERROR("Weyl monoidal first negative basic comparison error");
|
|
713
|
+
}
|
|
714
|
+
if (fracm2 == fracm3) {
|
|
715
|
+
ERROR("Weyl monoidal second negative basic comparison error");
|
|
716
|
+
}
|
|
717
|
+
// geometric
|
|
718
|
+
ideal p = x+5, y-2;
|
|
719
|
+
ncloc locg = p;
|
|
720
|
+
ncfrac fracg1 = list([g1,Dx,0,0], locg);
|
|
721
|
+
ncfrac fracg2 = list([g1*g2,g2*Dx,0,0], locg);
|
|
722
|
+
ncfrac fracg3 = list([g1*g2,g1*Dx+3,0,0], locg);
|
|
723
|
+
if (!(fracg1 == fracg2)) {
|
|
724
|
+
ERROR("Weyl geometric positive basic comparison error");
|
|
725
|
+
}
|
|
726
|
+
if (fracg1 == fracg3) {
|
|
727
|
+
ERROR("Weyl geometric first negative basic comparison error");
|
|
728
|
+
}
|
|
729
|
+
if (fracg2 == fracg3) {
|
|
730
|
+
ERROR("Weyl geometric second negative basic comparison error");
|
|
731
|
+
}
|
|
732
|
+
// rational
|
|
733
|
+
intvec rat = 1,4;
|
|
734
|
+
ncloc locr = rat;
|
|
735
|
+
ncfrac fracr1 = list([x+Dy,Dx,0,0], locr);
|
|
736
|
+
ncfrac fracr2 = list([x*Dy*(x+Dy),x*Dx*Dy,0,0], locr);
|
|
737
|
+
ncfrac fracr3 = list([Dy*x*(x+Dy),x*Dx*Dy+1,0,0], locr);
|
|
738
|
+
if (!(fracr1 == fracr2)) {
|
|
739
|
+
ERROR("Weyl rational positive basic comparison error");
|
|
740
|
+
}
|
|
741
|
+
if (fracr1 == fracr3) {
|
|
742
|
+
ERROR("Weyl rational first negative basic comparison error");
|
|
743
|
+
}
|
|
744
|
+
if (fracr2 == fracr3) {
|
|
745
|
+
ERROR("Weyl rational second negative basic comparison error");
|
|
746
|
+
}
|
|
747
|
+
print(" ncfrac comparison OK");
|
|
748
|
+
}
|
|
749
|
+
//////////////////////////////////////////////////////////////////////
|
|
750
|
+
static proc testNcfracAddition() {
|
|
751
|
+
print(" testing ncfrac addition...");
|
|
752
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
753
|
+
def S = Weyl();
|
|
754
|
+
setring S;
|
|
755
|
+
poly g1 = x+3;
|
|
756
|
+
poly g2 = x*y+y;
|
|
757
|
+
ncloc loc = list(g1,g2);
|
|
758
|
+
ncfrac frac1 = list([g1,Dx,0,0], loc);
|
|
759
|
+
ncfrac frac2 = list([g2,Dy,0,0], loc);
|
|
760
|
+
ncfrac resu = frac1 + frac2;
|
|
761
|
+
if (resu.lden != g1*g2 || resu.lnum != g2*Dx+g1*Dy) {
|
|
762
|
+
ERROR("Weyl monoidal addition error");
|
|
763
|
+
}
|
|
764
|
+
loc = ideal(x-1,y-3);
|
|
765
|
+
frac1.loc = loc;
|
|
766
|
+
frac2.loc = loc;
|
|
767
|
+
resu = frac1 + frac2;
|
|
768
|
+
if (resu.lden != g1*g2 || resu.lnum != g2*Dx+g1*Dy) {
|
|
769
|
+
ERROR("Weyl geometric maximal addition error");
|
|
770
|
+
}
|
|
771
|
+
loc = ideal(y+3);
|
|
772
|
+
frac1.loc = loc;
|
|
773
|
+
frac2.loc = loc;
|
|
774
|
+
resu = frac1 + frac2;
|
|
775
|
+
if (resu.lden != g1*g2 || resu.lnum != g2*Dx+g1*Dy) {
|
|
776
|
+
ERROR("Weyl geometric prime addition error");
|
|
777
|
+
}
|
|
778
|
+
loc = intvec(2);
|
|
779
|
+
frac1 = list([y^2+y+1,Dx,0,0], loc);
|
|
780
|
+
frac2 = list([y-2,Dy,0,0], loc);
|
|
781
|
+
resu = frac1 + frac2;
|
|
782
|
+
if (resu.lden != (y^2+y+1)*(y-2) || resu.lnum != (y-2)*Dx+(y^2+y+1)*Dy) {
|
|
783
|
+
ERROR("Weyl rational addition error");
|
|
784
|
+
}
|
|
785
|
+
print(" ncfrac addition OK");
|
|
786
|
+
}
|
|
787
|
+
//////////////////////////////////////////////////////////////////////
|
|
788
|
+
static proc testNcfracSubtraction() {
|
|
789
|
+
print(" testing ncfrac subtraction...");
|
|
790
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
791
|
+
def S = Weyl();
|
|
792
|
+
setring S;
|
|
793
|
+
poly g1 = x+3;
|
|
794
|
+
poly g2 = x*y+y;
|
|
795
|
+
ncloc loc = list(g1,g2);
|
|
796
|
+
ncfrac frac1 = list([g1,Dx,0,0], loc);
|
|
797
|
+
ncfrac frac2 = list([g2,-Dy,0,0], loc);
|
|
798
|
+
ncfrac resu = frac1 - frac2;
|
|
799
|
+
if (resu.lden != g1*g2 || resu.lnum != g2*Dx+g1*Dy) {
|
|
800
|
+
ERROR("Weyl monoidal subtraction error");
|
|
801
|
+
}
|
|
802
|
+
loc = ideal(x-1,y-3);
|
|
803
|
+
frac1.loc = loc;
|
|
804
|
+
frac2.loc = loc;
|
|
805
|
+
resu = frac1 - frac2;
|
|
806
|
+
if (resu.lden != g1*g2 || resu.lnum != g2*Dx+g1*Dy) {
|
|
807
|
+
ERROR("Weyl geometric subtraction error");
|
|
808
|
+
}
|
|
809
|
+
loc = intvec(2);
|
|
810
|
+
frac1 = list([y^2+y+1,Dx,0,0], loc);
|
|
811
|
+
frac2 = list([y-2,-Dy,0,0], loc);
|
|
812
|
+
resu = frac1 - frac2;
|
|
813
|
+
if (resu.lden != (y^2+y+1)*(y-2) || resu.lnum != (y-2)*Dx+(y^2+y+1)*Dy) {
|
|
814
|
+
ERROR("Weyl rational subtraction error");
|
|
815
|
+
}
|
|
816
|
+
print(" ncfrac subtraction OK");
|
|
817
|
+
}
|
|
818
|
+
//////////////////////////////////////////////////////////////////////
|
|
819
|
+
static proc testNcfracMultiplication() {
|
|
820
|
+
print(" testing ncfrac multiplication...");
|
|
821
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
822
|
+
def S = Weyl();
|
|
823
|
+
setring S;
|
|
824
|
+
// monoidal localization
|
|
825
|
+
poly g1 = x+3;
|
|
826
|
+
poly g2 = x*y+y;
|
|
827
|
+
ncloc loc = list(g1,g2);
|
|
828
|
+
ncfrac frac1 = list([g1,Dx,0,0], loc);
|
|
829
|
+
ncfrac frac2 = list([g2,Dy,0,0], loc);
|
|
830
|
+
ncfrac resu = frac1 * frac2;
|
|
831
|
+
if (resu.lden != g1*g2^2 || resu.lnum != x*y*Dx*Dy+y*Dx*Dy-y*Dy) {
|
|
832
|
+
ERROR("Weyl monoidal multiplication error");
|
|
833
|
+
}
|
|
834
|
+
// geometric localization
|
|
835
|
+
loc = ideal(x-1,y-3);
|
|
836
|
+
frac1.loc = loc;
|
|
837
|
+
frac2.loc = loc;
|
|
838
|
+
resu = frac1 * frac2;
|
|
839
|
+
if (resu.lden != g1*g2*(x+1) || resu.lnum != x*Dx*Dy+Dx*Dy-Dy) {
|
|
840
|
+
ERROR("Weyl geometric multiplication error");
|
|
841
|
+
}
|
|
842
|
+
// rational localization
|
|
843
|
+
loc = intvec(2);
|
|
844
|
+
frac1 = list([y^2+y+1,Dx,0,0], loc);
|
|
845
|
+
frac2 = list([y-2,Dy,0,0], loc);
|
|
846
|
+
resu = frac1 * frac2;
|
|
847
|
+
if (resu.lden != (y^2+y+1)*(y-2) || resu.lnum != Dx*Dy) {
|
|
848
|
+
ERROR("Weyl rational multiplication (1*2) error");
|
|
849
|
+
}
|
|
850
|
+
resu = frac2 * frac1;
|
|
851
|
+
if (resu.lden != (y^2+y+1)^2*(y-2) || resu.lnum != y^2*Dx*Dy+y*Dx*Dy-2*y*Dx+Dx*Dy-Dx) {
|
|
852
|
+
ERROR("Weyl rational multiplication (2*1) error");
|
|
853
|
+
}
|
|
854
|
+
print(" ncfrac multiplication OK");
|
|
855
|
+
}
|
|
856
|
+
//////////////////////////////////////////////////////////////////////
|
|
857
|
+
static proc testNcfracDivision() {
|
|
858
|
+
print(" testing ncfrac division...");
|
|
859
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
860
|
+
def S = Weyl();
|
|
861
|
+
setring S;
|
|
862
|
+
// monoidal localization
|
|
863
|
+
poly g1 = x+3;
|
|
864
|
+
poly g2 = x*y+y;
|
|
865
|
+
ncloc loc = list(g1,g2);
|
|
866
|
+
ncfrac frac1 = list([g1,Dx,0,0], loc);
|
|
867
|
+
ncfrac frac2 = list([g2,g1,0,0], loc);
|
|
868
|
+
ncfrac resu = frac1 / frac2;
|
|
869
|
+
if (resu.lden != g1^3 || resu.lnum != x^2*y*Dx+4*x*y*Dx+3*y*Dx+2*y) {
|
|
870
|
+
ERROR("Weyl monoidal division error");
|
|
871
|
+
}
|
|
872
|
+
// geometric localization
|
|
873
|
+
loc = ideal(x-1,y-3);
|
|
874
|
+
frac1.loc = loc;
|
|
875
|
+
frac2.loc = loc;
|
|
876
|
+
resu = frac1 / frac2;
|
|
877
|
+
if (resu.lden != g1^3 || resu.lnum != x^2*y*Dx+4*x*y*Dx+3*y*Dx+2*y) {
|
|
878
|
+
ERROR("Weyl geometric division error");
|
|
879
|
+
}
|
|
880
|
+
// rational localization
|
|
881
|
+
loc = intvec(2);
|
|
882
|
+
frac1 = list([y^2+y+1,Dx,0,0], loc);
|
|
883
|
+
frac2 = list([y-2,3*y^2-21y+2,0,0], loc);
|
|
884
|
+
resu = frac1 / frac2;
|
|
885
|
+
if (resu.lden != 3*y^4-18*y^3-16*y^2-19*y+2 || resu.lnum != (y-2)*Dx) {
|
|
886
|
+
ERROR("Weyl geometric division error");
|
|
887
|
+
}
|
|
888
|
+
print(" ncfrac division OK");
|
|
889
|
+
}
|
|
890
|
+
//////////////////////////////////////////////////////////////////////
|
|
891
|
+
static proc testNcfracInversion() {
|
|
892
|
+
print(" testing ncfrac invertNcfrac...");
|
|
893
|
+
ring R = 0,(x,y,Dx,Dy),dp;
|
|
894
|
+
def S = Weyl();
|
|
895
|
+
setring S;
|
|
896
|
+
poly g1 = x+3;
|
|
897
|
+
poly g2 = x*y;
|
|
898
|
+
ncfrac frac = list([g1*g2, 17, 0, 0], ncloc(list(g1,g2)));
|
|
899
|
+
frac = invertNcfrac(frac);
|
|
900
|
+
if (frac.lden != 17 || frac.lnum != g1*g2) {
|
|
901
|
+
ERROR("Weyl monoidal inversion error");
|
|
902
|
+
}
|
|
903
|
+
frac = list([g1, 3*x, 0, 0], ncloc(ideal(x-1,y)));
|
|
904
|
+
frac = invertNcfrac(frac);
|
|
905
|
+
if (frac.lden != 3*x || frac.lnum != x+3) {
|
|
906
|
+
ERROR("Weyl geometric inversion error");
|
|
907
|
+
}
|
|
908
|
+
frac = list([g1*g2, y, 0, 0], ncloc(intvec(1,2)));
|
|
909
|
+
frac = invertNcfrac(frac);
|
|
910
|
+
if (frac.lden != y || frac.lnum != g1*g2) {
|
|
911
|
+
ERROR("Weyl rational inversion error");
|
|
912
|
+
}
|
|
913
|
+
print(" ncfrac invertNcfrac OK");
|
|
914
|
+
}
|
|
915
|
+
//////////////////////////////////////////////////////////////////////
|
|
916
|
+
static proc testEnsureRightNcfrac() {
|
|
917
|
+
print(" testing ncfrac ensureRightNcfrac...");
|
|
918
|
+
// Weyl
|
|
919
|
+
ring W = 0,(x,y,Dx,Dy),dp;
|
|
920
|
+
def ncW = Weyl();
|
|
921
|
+
setring ncW;
|
|
922
|
+
//// monoidal localization
|
|
923
|
+
ncloc monloc = list(x);
|
|
924
|
+
ncfrac monfrac = list([x,Dx,0,0], monloc);
|
|
925
|
+
ncfrac monresult = ensureRightNcfrac(monfrac);
|
|
926
|
+
if (!status(monresult)[1]) {
|
|
927
|
+
ERROR("Weyl monoidal ensureRightNcfrac failed");
|
|
928
|
+
}
|
|
929
|
+
//// geometrical localization
|
|
930
|
+
ncloc geoloc = ideal(x-1,y-3);
|
|
931
|
+
ncfrac geofrac = list([x+y,Dx+Dy,0,0], geoloc);
|
|
932
|
+
ncfrac georesult = ensureRightNcfrac(geofrac);
|
|
933
|
+
if (!status(georesult)[1]) {
|
|
934
|
+
ERROR("Weyl geometric ensureRightNcfrac failed");
|
|
935
|
+
}
|
|
936
|
+
//// rational localization
|
|
937
|
+
ncloc ratloc = intvec(1);
|
|
938
|
+
ncfrac ratfrac = list([x,Dx+Dy], ratloc);
|
|
939
|
+
ncfrac ratresult = ensureRightNcfrac(ratfrac);
|
|
940
|
+
if (!status(ratresult)[1]) {
|
|
941
|
+
ERROR("Weyl rational ensureRightNcfrac failed");
|
|
942
|
+
}
|
|
943
|
+
// shift rational localization
|
|
944
|
+
ring S = 0,(x,y,Sx,Sy),dp;
|
|
945
|
+
matrix D[4][4];
|
|
946
|
+
D[1,3] = Sx;
|
|
947
|
+
D[2,4] = Sy;
|
|
948
|
+
def ncS = nc_algebra(1, D);
|
|
949
|
+
setring ncS;
|
|
950
|
+
ncfrac shiftfrac = list([x,Sx+Sy], ratloc);
|
|
951
|
+
ncfrac shiftresult = ensureRightNcfrac(shiftfrac);
|
|
952
|
+
if (!status(shiftresult)[1]) {
|
|
953
|
+
ERROR("Shift rational ensureRightNcfrac failed");
|
|
954
|
+
}
|
|
955
|
+
// q-shift rational localization
|
|
956
|
+
ring Q = (0,q),(x,y,Qx,Qy),dp;
|
|
957
|
+
matrix C[4][4] = UpOneMatrix(4);
|
|
958
|
+
C[1,3] = q;
|
|
959
|
+
C[2,4] = q;
|
|
960
|
+
def ncQ = nc_algebra(C, 0);
|
|
961
|
+
setring ncQ;
|
|
962
|
+
ncfrac qshiftfrac = list([x,Qx+Qy], ratloc);
|
|
963
|
+
ncfrac qshiftresult = ensureRightNcfrac(qshiftfrac);
|
|
964
|
+
if (!status(qshiftresult)[1]) {
|
|
965
|
+
ERROR("q-shift rational ensureRightNcfrac failed");
|
|
966
|
+
}
|
|
967
|
+
print(" ncfrac ensureRightNcfrac OK");
|
|
968
|
+
}
|
|
969
|
+
//////////////////////////////////////////////////////////////////////
|
|
970
|
+
static proc testEnsureLeftNcfrac() {
|
|
971
|
+
print(" testing ncfrac ensureLeftNcfrac...");
|
|
972
|
+
// Weyl
|
|
973
|
+
ring W = 0,(x,y,Dx,Dy),dp;
|
|
974
|
+
def ncW = Weyl();
|
|
975
|
+
setring ncW;
|
|
976
|
+
//// monoidal localization
|
|
977
|
+
ncloc monloc = list(x+3, x*y);
|
|
978
|
+
ncfrac monfrac = list([0,0,Dx,(x+3)^2*x], monloc);
|
|
979
|
+
ncfrac monresult = ensureLeftNcfrac(monfrac);
|
|
980
|
+
if (!status(monresult)[1]) {
|
|
981
|
+
ERROR("Weyl monoidal ensureLeftNcfrac failed");
|
|
982
|
+
}
|
|
983
|
+
//// geometric localization
|
|
984
|
+
ncloc geoloc = ideal(x-1,y-3);
|
|
985
|
+
ncfrac geofrac = list([0,0,Dx,x^2+y], geoloc);
|
|
986
|
+
ncfrac georesult = ensureLeftNcfrac(geofrac);
|
|
987
|
+
if (!status(georesult)[1]) {
|
|
988
|
+
ERROR("Weyl monoidal ensureLeftNcfrac failed");
|
|
989
|
+
}
|
|
990
|
+
//// rational localization
|
|
991
|
+
ncloc ratloc = intvec(1);
|
|
992
|
+
ncfrac ratfrac = list([0,0,Dx+Dy,x], ratloc);
|
|
993
|
+
ncfrac ratresult = ensureLeftNcfrac(ratfrac);
|
|
994
|
+
if (!status(ratresult)[1]) {
|
|
995
|
+
ERROR("Weyl monoidal ensureLeftNcfrac failed");
|
|
996
|
+
}
|
|
997
|
+
// shift rational localization
|
|
998
|
+
ring S = 0,(x,y,Sx,Sy),dp;
|
|
999
|
+
matrix D[4][4];
|
|
1000
|
+
D[1,3] = Sx;
|
|
1001
|
+
D[2,4] = Sy;
|
|
1002
|
+
def ncS = nc_algebra(1, D);
|
|
1003
|
+
setring ncS;
|
|
1004
|
+
ncfrac shiftfrac = list([0,0,Sx+Sy,x], ratloc);
|
|
1005
|
+
ncfrac shiftresult = ensureLeftNcfrac(shiftfrac);
|
|
1006
|
+
if (!status(shiftresult)[1]) {
|
|
1007
|
+
ERROR("Shift rational ensureLeftNcfrac failed");
|
|
1008
|
+
}
|
|
1009
|
+
// q-shift rational localization
|
|
1010
|
+
ring Q = (0,q),(x,y,Qx,Qy),dp;
|
|
1011
|
+
matrix C[4][4] = UpOneMatrix(4);
|
|
1012
|
+
C[1,3] = q;
|
|
1013
|
+
C[2,4] = q;
|
|
1014
|
+
def ncQ = nc_algebra(C, 0);
|
|
1015
|
+
setring ncQ;
|
|
1016
|
+
ncfrac qshiftfrac = list([0,0,Qx+Qy,x], ratloc);
|
|
1017
|
+
ncfrac qshiftresult = ensureLeftNcfrac(qshiftfrac);
|
|
1018
|
+
if (!status(qshiftresult)[1]) {
|
|
1019
|
+
ERROR("q-shift rational ensureLeftNcfrac failed");
|
|
1020
|
+
}
|
|
1021
|
+
print(" ncfrac ensureLeftNcfrac OK");
|
|
1022
|
+
}
|
|
1023
|
+
//////////////////////////////////////////////////////////////////////
|