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,959 @@
|
|
|
1
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version absfact.lib 4.1.2.0 Feb_2019 "; // $Id: 493e1bf99c9c2c29fe49fb584d903890e4d93d57 $
|
|
3
|
+
category="Factorization";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: absfact.lib Absolute factorization for characteristic 0
|
|
6
|
+
AUTHORS: Wolfram Decker, decker at math.uni-sb.de
|
|
7
|
+
Gregoire Lecerf, lecerf at math.uvsq.fr
|
|
8
|
+
Gerhard Pfister, pfister at mathematik.uni-kl.de
|
|
9
|
+
Martin Lee, mlee at mathematik.uni-kl.de
|
|
10
|
+
|
|
11
|
+
OVERVIEW:
|
|
12
|
+
A library for computing the absolute factorization of multivariate
|
|
13
|
+
polynomials f with coefficients in a field K of characteristic zero.
|
|
14
|
+
Using Trager's idea, the implemented algorithm computes an absolutely
|
|
15
|
+
irreducible factor by factorizing over some finite extension field L
|
|
16
|
+
(which is chosen such that V(f) has a smooth point with coordinates in L).
|
|
17
|
+
Then a minimal extension field is determined making use of the
|
|
18
|
+
Rothstein-Trager partial fraction decomposition algorithm.
|
|
19
|
+
absFactorizeBCG uses the algorithm of Bertone, Cheze and Galligo for bivariate
|
|
20
|
+
polynomials and similar ideas as above to reduce to this case.
|
|
21
|
+
|
|
22
|
+
REFERENCES:
|
|
23
|
+
G. Cheze, G. Lecerf: Lifting and recombination techniques for absolute
|
|
24
|
+
factorization. Journal of Complexity, 23(3):380-420, 2007.
|
|
25
|
+
C. Bertone, G. Cheze, and A. Galligo: Modular las vegas algorithms for
|
|
26
|
+
polynomial absolute factorization. J. Symb. Comput.,
|
|
27
|
+
45(12):1280-1295, December 2010
|
|
28
|
+
|
|
29
|
+
KEYWORDS: factorization; absolute factorization.
|
|
30
|
+
SEE ALSO: factorize
|
|
31
|
+
|
|
32
|
+
PROCEDURES:
|
|
33
|
+
absFactorize(); absolute factorization of poly
|
|
34
|
+
absFactorizeBCG(); absolute factorization of poly
|
|
35
|
+
";
|
|
36
|
+
|
|
37
|
+
////////////////////////////////////////////////////////////////////
|
|
38
|
+
static proc partialDegree(poly p, int i)
|
|
39
|
+
"USAGE: partialDegree(p,i); p poly, i int
|
|
40
|
+
RETURN: int, the degree of p in the i-th variable
|
|
41
|
+
"
|
|
42
|
+
{
|
|
43
|
+
int n = nvars(basering);
|
|
44
|
+
intvec tmp;
|
|
45
|
+
tmp[n] = 0;
|
|
46
|
+
tmp[i] = 1;
|
|
47
|
+
return(deg(p,tmp));
|
|
48
|
+
}
|
|
49
|
+
////////////////////////////////////////////////////////////////////
|
|
50
|
+
static proc belongTo(string s, list l)
|
|
51
|
+
"USAGE: belongTo(s,l); s string, l list
|
|
52
|
+
RETURN: 1 if s belongs to l, 0 otherwise
|
|
53
|
+
"
|
|
54
|
+
{
|
|
55
|
+
string tmp;
|
|
56
|
+
for(int i = 1; i <= size(l); i++) {
|
|
57
|
+
tmp = l[i];
|
|
58
|
+
if (tmp == s) {
|
|
59
|
+
return(1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return(0);
|
|
63
|
+
}
|
|
64
|
+
////////////////////////////////////////////////////////////////////
|
|
65
|
+
static proc variableWithSmallestPositiveDegree(poly p)
|
|
66
|
+
"USAGE: variableWithSmallestPositiveDegree(p); p poly
|
|
67
|
+
RETURN: int; 0 if p is constant. Otherwise, the index of the
|
|
68
|
+
variable which has the smallest positive degree in p.
|
|
69
|
+
"
|
|
70
|
+
{
|
|
71
|
+
int n = nvars(basering);
|
|
72
|
+
int v = 0;
|
|
73
|
+
int d = deg(p);
|
|
74
|
+
int d_loc;
|
|
75
|
+
for(int i = 1; i <= n; i++) {
|
|
76
|
+
d_loc = partialDegree(p, i);
|
|
77
|
+
if (d_loc >= 1 and d_loc <= d) {
|
|
78
|
+
v = i;
|
|
79
|
+
d = d_loc;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return(v);
|
|
83
|
+
}
|
|
84
|
+
////////////////////////////////////////////////////////////////////
|
|
85
|
+
static proc smallestProperSimpleFactor(poly p)
|
|
86
|
+
"USAGE: smallestProperSimpleFactor(p); p poly
|
|
87
|
+
RETURN: poly: a proper irreducible simple factor of p of smallest
|
|
88
|
+
degree. If no such factor exists, 0 is returned.
|
|
89
|
+
"
|
|
90
|
+
{
|
|
91
|
+
list p_facts = factorize(p);
|
|
92
|
+
int s = size(p_facts[1]);
|
|
93
|
+
int d = deg(p)+1;
|
|
94
|
+
poly q = 0;
|
|
95
|
+
poly f;
|
|
96
|
+
int e;
|
|
97
|
+
for(int i = 1; i <= s; i++)
|
|
98
|
+
{
|
|
99
|
+
f = p_facts[1][i];
|
|
100
|
+
e = deg(f);
|
|
101
|
+
if (e >= 1 and e < d and p_facts[2][i] == 1)
|
|
102
|
+
{
|
|
103
|
+
q = f / leadcoef(f);
|
|
104
|
+
d = e;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return(q);
|
|
108
|
+
}
|
|
109
|
+
////////////////////////////////////////////////////////////////////
|
|
110
|
+
static proc smallestProperFactor(poly p)
|
|
111
|
+
"USAGE: smallestProperFactor(p); p poly
|
|
112
|
+
RETURN: poly: a proper irreducible factor of p of smallest degree.
|
|
113
|
+
If p is constant, 0 is returned.
|
|
114
|
+
"
|
|
115
|
+
{
|
|
116
|
+
list p_facts = factorize(p);
|
|
117
|
+
int s = size(p_facts[1]);
|
|
118
|
+
int d = deg(p)+1;
|
|
119
|
+
poly q = 0;
|
|
120
|
+
poly f;
|
|
121
|
+
int e;
|
|
122
|
+
for(int i = 1; i <= s; i++)
|
|
123
|
+
{
|
|
124
|
+
f = p_facts[1][i];
|
|
125
|
+
e = deg(f);
|
|
126
|
+
if (e >= 1 and e < d)
|
|
127
|
+
{
|
|
128
|
+
q = f / leadcoef(f);
|
|
129
|
+
d = e;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return(q);
|
|
133
|
+
}
|
|
134
|
+
////////////////////////////////////////////////////////////////////
|
|
135
|
+
static proc extensionContainingSmoothPoint(poly p, int m)
|
|
136
|
+
"USAGE: extensionContainingSmoothPoint(p,m); p poly, m int
|
|
137
|
+
RETURN: poly: an irreducible univariate polynomial that defines an
|
|
138
|
+
algebraic extension of the current ground field that contains
|
|
139
|
+
a smooth point of the hypersurface defined by p=0.
|
|
140
|
+
"
|
|
141
|
+
{
|
|
142
|
+
int n = nvars(basering) - 1;
|
|
143
|
+
poly q = 0;
|
|
144
|
+
int i;
|
|
145
|
+
list a;
|
|
146
|
+
for(i=1;i<=n+1;i++){a[i] = 0;}
|
|
147
|
+
a[m] = var(n+1);
|
|
148
|
+
// The list a is to be taken with random entries in [-e, e].
|
|
149
|
+
// Every 10 * n trial, e is incremented by 1.
|
|
150
|
+
int e = 1;
|
|
151
|
+
int nbtrial = 0;
|
|
152
|
+
map h;
|
|
153
|
+
while (q == 0)
|
|
154
|
+
{
|
|
155
|
+
h = basering, a[1..n+1];
|
|
156
|
+
q = smallestProperSimpleFactor(h(p));
|
|
157
|
+
for(i = 1; i <= n ; i = i + 1)
|
|
158
|
+
{
|
|
159
|
+
if (i != m)
|
|
160
|
+
{
|
|
161
|
+
a[i] = random(-e, e);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
nbtrial++;
|
|
165
|
+
if (nbtrial >= 10 * n)
|
|
166
|
+
{
|
|
167
|
+
e = e + 1;
|
|
168
|
+
nbtrial = 0;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return(q);
|
|
172
|
+
}
|
|
173
|
+
////////////////////////////////////////////////////////////////////
|
|
174
|
+
static proc RothsteinTragerResultant(poly g, poly f, int m)
|
|
175
|
+
"USAGE: RothsteinTragerResultant(g,f,m); g,f poly, m int
|
|
176
|
+
RETURN: poly
|
|
177
|
+
NOTE: To be called by the RothsteinTrager procedure only.
|
|
178
|
+
"
|
|
179
|
+
{
|
|
180
|
+
def MPz = basering;
|
|
181
|
+
int n = nvars(MPz) - 1;
|
|
182
|
+
int d = partialDegree(f, m);
|
|
183
|
+
poly df = diff(f, var(m));
|
|
184
|
+
list a;
|
|
185
|
+
int i;
|
|
186
|
+
for(i=1;i<=n+1;i++){ a[i] = 0; }
|
|
187
|
+
a[m] = var(m);
|
|
188
|
+
poly q = 0;
|
|
189
|
+
int e = 1;
|
|
190
|
+
int nbtrial = 0;
|
|
191
|
+
map h;
|
|
192
|
+
while (q == 0)
|
|
193
|
+
{
|
|
194
|
+
h = MPz, a[1..n+1];
|
|
195
|
+
q = resultant(h(f), h(df) * var(n+1) - h(g), var(m));
|
|
196
|
+
if (deg(q) == d)
|
|
197
|
+
{
|
|
198
|
+
return(q/leadcoef(q));
|
|
199
|
+
}
|
|
200
|
+
q = 0;
|
|
201
|
+
for(i = 1; i <= n ; i++)
|
|
202
|
+
{
|
|
203
|
+
if (i != m)
|
|
204
|
+
{
|
|
205
|
+
a[i] = random(-e, e);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
nbtrial++;
|
|
209
|
+
if (nbtrial >= 10 * n)
|
|
210
|
+
{
|
|
211
|
+
e++;
|
|
212
|
+
nbtrial = 0;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
////////////////////////////////////////////////////////////////////
|
|
217
|
+
static proc RothsteinTrager(list g, poly p, int m, int expectedDegQ)
|
|
218
|
+
"USAGE: RothsteinTrager(g,p,m,d); g list, p poly, m,d int
|
|
219
|
+
RETURN: list L consisting of two entries of type poly
|
|
220
|
+
NOTE: the return value is the Rothstein-Trager partial fraction
|
|
221
|
+
decomposition of the quotient s/p, where s is a generic linear
|
|
222
|
+
combination of the elements of g. The genericity via d
|
|
223
|
+
(the expected degree of L[1]).
|
|
224
|
+
"
|
|
225
|
+
{
|
|
226
|
+
def MPz = basering;
|
|
227
|
+
int n = nvars(MPz) - 1;
|
|
228
|
+
poly dp = diff(p, var(m));
|
|
229
|
+
int r = size(g);
|
|
230
|
+
list a;
|
|
231
|
+
int i;
|
|
232
|
+
for(i=1;i<=r;i++){a[i] = 0;}
|
|
233
|
+
a[r] = 1;
|
|
234
|
+
int nbtrial = 0;
|
|
235
|
+
int e = 1;
|
|
236
|
+
poly s;
|
|
237
|
+
poly q;
|
|
238
|
+
while (1)
|
|
239
|
+
{
|
|
240
|
+
s = 0;
|
|
241
|
+
for(i = 1; i <= r; i++){s = s + a[i] * g[i];}
|
|
242
|
+
q = RothsteinTragerResultant(s, p, m);
|
|
243
|
+
q = smallestProperFactor(q);
|
|
244
|
+
if (deg(q) == expectedDegQ)
|
|
245
|
+
{
|
|
246
|
+
// Go into the quotient by q(z)=0
|
|
247
|
+
ring MP_z = (0,var(n+1)), (x(1..n)), dp;
|
|
248
|
+
list lMP_z = ringlist(MP_z);
|
|
249
|
+
lMP_z[1][4] = ideal(imap(MPz,q));
|
|
250
|
+
list tmp = ringlist(MPz)[2];
|
|
251
|
+
lMP_z[2] = list(tmp[1..n]);
|
|
252
|
+
def MPq = ring(lMP_z);
|
|
253
|
+
setring(MPq);
|
|
254
|
+
poly f = gcd(imap(MPz, p), par(1) * imap(MPz, dp) - imap(MPz, s));
|
|
255
|
+
f = f / leadcoef(f);
|
|
256
|
+
setring(MPz);
|
|
257
|
+
return(list(q, imap(MPq, f)));
|
|
258
|
+
}
|
|
259
|
+
for(i = 1; i <= r ; i++)
|
|
260
|
+
{
|
|
261
|
+
a[i] = random(-e, e);
|
|
262
|
+
}
|
|
263
|
+
nbtrial++;
|
|
264
|
+
if (nbtrial >= 10 * r)
|
|
265
|
+
{
|
|
266
|
+
e++;
|
|
267
|
+
nbtrial = 0;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
////////////////////////////////////////////////////////////////////
|
|
272
|
+
static proc absFactorizeIrreducible(poly p)
|
|
273
|
+
"USAGE: absFactorizeIrreducible(p); p poly
|
|
274
|
+
ASSUME: p is an irreducible polynomial that does not depend on the last
|
|
275
|
+
variable @z of the basering.
|
|
276
|
+
RETURN: list L of two polynomials: q=L[1] is an irreducible polynomial of
|
|
277
|
+
minimal degree in @z such that p has an absolute factor
|
|
278
|
+
over K[@z]/<q>, and f represents such an absolute factor.
|
|
279
|
+
"
|
|
280
|
+
{
|
|
281
|
+
int dblevel = printlevel - voice + 2;
|
|
282
|
+
dbprint(dblevel,"Entering absfact.lib::absFactorizeIrreducible with ",p);
|
|
283
|
+
def MPz = basering;
|
|
284
|
+
int d = deg(p);
|
|
285
|
+
int n = nvars(MPz) - 1;
|
|
286
|
+
|
|
287
|
+
if (d < 1)
|
|
288
|
+
{
|
|
289
|
+
return(list(var(n+1), p));
|
|
290
|
+
}
|
|
291
|
+
int m = variableWithSmallestPositiveDegree(p);
|
|
292
|
+
// var(m) is now considered as the main variable.
|
|
293
|
+
|
|
294
|
+
poly q = extensionContainingSmoothPoint(p, m);
|
|
295
|
+
int r = deg(q);
|
|
296
|
+
if (r == 1)
|
|
297
|
+
{
|
|
298
|
+
return(list(var(n+1), p));
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
list tmp = ringlist(MPz)[2];
|
|
302
|
+
// Go into the quotient by q(z)=0
|
|
303
|
+
ring MP_z = (0,var(n+1)), (x(1..n)), dp;
|
|
304
|
+
list lMP_z = ringlist(MP_z);
|
|
305
|
+
lMP_z[1][4] = ideal(imap(MPz,q));
|
|
306
|
+
lMP_z[2] = list(tmp[1..n]);
|
|
307
|
+
def MPq = ring(lMP_z);
|
|
308
|
+
setring(MPq);
|
|
309
|
+
dbprint(dblevel-1,"Factoring in algebraic extension");
|
|
310
|
+
// "Factoring p in the algebraic extension...";
|
|
311
|
+
poly p_loc = imap(MPz, p);
|
|
312
|
+
poly f = smallestProperSimpleFactor(p_loc);
|
|
313
|
+
int degf = deg(f);
|
|
314
|
+
|
|
315
|
+
if (degf == d)
|
|
316
|
+
{
|
|
317
|
+
setring(MPz);
|
|
318
|
+
return(list(var(n+1), p));
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
if (degf * r == d)
|
|
322
|
+
{
|
|
323
|
+
setring(MPz);
|
|
324
|
+
return(list(q, imap(MPq, f)));
|
|
325
|
+
}
|
|
326
|
+
dbprint(dblevel-1,"Absolutely irreducible factor found");
|
|
327
|
+
dbprint(dblevel,"Minimizing field extension");
|
|
328
|
+
// "Need to find a minimal extension";
|
|
329
|
+
poly co_f = p_loc / f;
|
|
330
|
+
poly e = diff(f, var(m)) * co_f;
|
|
331
|
+
setring(MPz);
|
|
332
|
+
poly e = imap(MPq, e);
|
|
333
|
+
list g;
|
|
334
|
+
int i;
|
|
335
|
+
for(i = 1; i <= r; i++)
|
|
336
|
+
{
|
|
337
|
+
g[i] = subst(e, var(n+1), 0);
|
|
338
|
+
e = diff(e, var(n+1));
|
|
339
|
+
}
|
|
340
|
+
return(RothsteinTrager(g, p, m, d div degf));
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
////////////////////////////////////////////////////////////////////
|
|
344
|
+
proc absFactorize(poly p, list #)
|
|
345
|
+
"USAGE: absFactorize(p [,s]); p poly, s string
|
|
346
|
+
ASSUME: coefficient field is the field of rational numbers or a
|
|
347
|
+
transcendental extension thereof
|
|
348
|
+
RETURN: ring @code{R} which is obtained from the current basering
|
|
349
|
+
by adding a new parameter (if a string @code{s} is given as a
|
|
350
|
+
second input, the new parameter gets this string as name). The ring
|
|
351
|
+
@code{R} comes with a list @code{absolute_factors} with the
|
|
352
|
+
following entries:
|
|
353
|
+
@format
|
|
354
|
+
absolute_factors[1]: ideal (the absolute factors)
|
|
355
|
+
absolute_factors[2]: intvec (the multiplicities)
|
|
356
|
+
absolute_factors[3]: ideal (the minimal polynomials)
|
|
357
|
+
absolute_factors[4]: int (total number of nontriv. absolute factors)
|
|
358
|
+
@end format
|
|
359
|
+
The entry @code{absolute_factors[1][1]} is a constant, the
|
|
360
|
+
entry @code{absolute_factors[3][1]} is the parameter added to the
|
|
361
|
+
current ring.@*
|
|
362
|
+
Each of the remaining entries @code{absolute_factors[1][j]} stands for
|
|
363
|
+
a class of conjugated absolute factors. The corresponding entry
|
|
364
|
+
@code{absolute_factors[3][j]} is the minimal polynomial of the
|
|
365
|
+
field extension over which the factor is minimally defined (its degree
|
|
366
|
+
is the number of conjugates in the class). If the entry
|
|
367
|
+
@code{absolute_factors[3][j]} coincides with @code{absolute_factors[3][1]},
|
|
368
|
+
no field extension was necessary for the @code{j}th (class of)
|
|
369
|
+
absolute factor(s).
|
|
370
|
+
NOTE: All factors are presented denominator- and content-free. The constant
|
|
371
|
+
factor (first entry) is chosen such that the product of all (!) the
|
|
372
|
+
(denominator- and content-free) absolute factors of @code{p} equals
|
|
373
|
+
@code{p / absolute_factors[1][1]}.
|
|
374
|
+
SEE ALSO: factorize, absPrimdecGTZ
|
|
375
|
+
EXAMPLE: example absFactorize; shows an example
|
|
376
|
+
"
|
|
377
|
+
{
|
|
378
|
+
int dblevel = printlevel - voice + 2;
|
|
379
|
+
dbprint(dblevel,"Entering absfact.lib::absFactorize with ",p);
|
|
380
|
+
def MP = basering;
|
|
381
|
+
int i;
|
|
382
|
+
if (char(MP) != 0)
|
|
383
|
+
{
|
|
384
|
+
ERROR("// absfact.lib::absFactorize is only implemented for "+
|
|
385
|
+
"characteristic 0");
|
|
386
|
+
}
|
|
387
|
+
if(minpoly!=0)
|
|
388
|
+
{
|
|
389
|
+
ERROR("// absfact.lib::absFactorize is not implemented for algebraic "
|
|
390
|
+
+"extensions");
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
int n = nvars(MP);
|
|
394
|
+
int pa=npars(MP);
|
|
395
|
+
list lMP= ringlist(MP);
|
|
396
|
+
list buflMP= lMP;
|
|
397
|
+
intvec vv,vk;
|
|
398
|
+
for(i=1;i<=n;i++){vv[i]=1;}
|
|
399
|
+
vk=vv,1;
|
|
400
|
+
|
|
401
|
+
//if the basering has parameters, add the parameters to the variables
|
|
402
|
+
//takes care about coefficients and possible denominators
|
|
403
|
+
if(pa>0)
|
|
404
|
+
{
|
|
405
|
+
poly qh=cleardenom(p);
|
|
406
|
+
if (p==0)
|
|
407
|
+
{
|
|
408
|
+
number cok=0;
|
|
409
|
+
}
|
|
410
|
+
else
|
|
411
|
+
{
|
|
412
|
+
number cok=leadcoef(p)/leadcoef(qh);
|
|
413
|
+
}
|
|
414
|
+
p=qh;
|
|
415
|
+
string sp;
|
|
416
|
+
for(i=1;i<=npars(basering);i++)
|
|
417
|
+
{
|
|
418
|
+
sp=string(par(i));
|
|
419
|
+
sp=sp[2..size(sp)-1];
|
|
420
|
+
lMP[2][n+i]=sp;
|
|
421
|
+
vv=vv,1;
|
|
422
|
+
}
|
|
423
|
+
lMP[1]=0;
|
|
424
|
+
n=n+npars(MP);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// MPz is obtained by adding the new variable @z to MP
|
|
428
|
+
// ordering is wp(1...1)
|
|
429
|
+
// All the above subroutines work in MPz
|
|
430
|
+
string newvar;
|
|
431
|
+
if(size(#)>0)
|
|
432
|
+
{
|
|
433
|
+
if(typeof(#[1])=="string")
|
|
434
|
+
{
|
|
435
|
+
newvar=#[1];
|
|
436
|
+
}
|
|
437
|
+
else
|
|
438
|
+
{
|
|
439
|
+
newvar = "a";
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
else
|
|
443
|
+
{
|
|
444
|
+
newvar = "a";
|
|
445
|
+
}
|
|
446
|
+
if (newvar=="a")
|
|
447
|
+
{
|
|
448
|
+
if(belongTo(newvar, lMP[2])||defined(a)){newvar = "b";}
|
|
449
|
+
if(belongTo(newvar, lMP[2])||defined(b)){newvar = "c";}
|
|
450
|
+
if(belongTo(newvar, lMP[2])||defined(c)){newvar = "@c";}
|
|
451
|
+
while(belongTo(newvar, lMP[2]))
|
|
452
|
+
{
|
|
453
|
+
newvar = "@" + newvar;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
lMP[2][n+1] = newvar;
|
|
457
|
+
|
|
458
|
+
// new ordering
|
|
459
|
+
vv=vv,1;
|
|
460
|
+
list orst;
|
|
461
|
+
orst[1]=list("wp",vv);
|
|
462
|
+
orst[2]=list("C",0);
|
|
463
|
+
lMP[3]=orst;
|
|
464
|
+
|
|
465
|
+
def MPz = ring(lMP);
|
|
466
|
+
setring(MPz);
|
|
467
|
+
poly p=imap(MP,p);
|
|
468
|
+
|
|
469
|
+
// special treatment in the homogeneous case, dropping one variable
|
|
470
|
+
// by substituting the first variable by 1
|
|
471
|
+
int ho=homog(p);
|
|
472
|
+
if(ho)
|
|
473
|
+
{
|
|
474
|
+
int dh=deg(p);
|
|
475
|
+
p=subst(p,var(1),1);
|
|
476
|
+
int di=deg(p);
|
|
477
|
+
}
|
|
478
|
+
list rat_facts = factorize(p);
|
|
479
|
+
int s = size(rat_facts[1]);
|
|
480
|
+
list tmpf; // absolute factors
|
|
481
|
+
intvec tmpm; // respective multiplicities
|
|
482
|
+
tmpf[1] = list(var(n+1), leadcoef(imap(MP,p)));
|
|
483
|
+
tmpm[1] = 1;
|
|
484
|
+
poly tmp;
|
|
485
|
+
for(i = 2; i <= s; i++)
|
|
486
|
+
{
|
|
487
|
+
tmp = rat_facts[1][i];
|
|
488
|
+
tmp = tmp / leadcoef(tmp);
|
|
489
|
+
tmpf[i] = absFactorizeIrreducible(tmp);
|
|
490
|
+
tmpm[i] = rat_facts[2][i];
|
|
491
|
+
}
|
|
492
|
+
// the homogeneous case, homogenizing the result
|
|
493
|
+
// the new variable has to have degree 0
|
|
494
|
+
// need to change the ring
|
|
495
|
+
if(ho)
|
|
496
|
+
{
|
|
497
|
+
list ll=ringlist(MPz);
|
|
498
|
+
vv[size(vv)]=0;
|
|
499
|
+
ll[3][1][2]=vv;
|
|
500
|
+
def MPhelp=ring(ll);
|
|
501
|
+
setring(MPhelp);
|
|
502
|
+
list tmpf=imap(MPz,tmpf);
|
|
503
|
+
for(i=2;i<=size(tmpf);i++)
|
|
504
|
+
{
|
|
505
|
+
tmpf[i][2]=homog(tmpf[i][2],var(1));
|
|
506
|
+
}
|
|
507
|
+
if(dh>di)
|
|
508
|
+
{
|
|
509
|
+
tmpf[size(tmpf)+1]=list(var(n+1),var(1));
|
|
510
|
+
tmpm[size(tmpm)+1]=dh-di;
|
|
511
|
+
}
|
|
512
|
+
setring(MPz);
|
|
513
|
+
tmpf=imap(MPhelp,tmpf);
|
|
514
|
+
}
|
|
515
|
+
// in case of parameters we have to go back to the old ring
|
|
516
|
+
// taking care about constant factors
|
|
517
|
+
if(pa)
|
|
518
|
+
{
|
|
519
|
+
setring(MP);
|
|
520
|
+
n=nvars(MP);
|
|
521
|
+
list lM=ringlist(MP);
|
|
522
|
+
orst[1]=list("wp",vk);
|
|
523
|
+
orst[2]=list("C",0);
|
|
524
|
+
lM[2][n+1] = newvar;
|
|
525
|
+
lM[3]=orst;
|
|
526
|
+
def MPout=ring(lM);
|
|
527
|
+
setring(MPout);
|
|
528
|
+
list tmpf=imap(MPz,tmpf);
|
|
529
|
+
number cok=imap(MP,cok);
|
|
530
|
+
tmpf[1][2]=cok*tmpf[1][2];
|
|
531
|
+
}
|
|
532
|
+
else
|
|
533
|
+
{
|
|
534
|
+
def MPout=MPz;
|
|
535
|
+
}
|
|
536
|
+
// if we want the output as string
|
|
537
|
+
if(size(#)>0)
|
|
538
|
+
{
|
|
539
|
+
if(typeof(#[1])=="int")
|
|
540
|
+
{
|
|
541
|
+
if(#[1]==77)
|
|
542
|
+
{ // undocumented feature for Gerhard's absPrimdecGTZ
|
|
543
|
+
if (size(tmpf)<2){ list abs_fac = list(var(n+1),poly(1)); }
|
|
544
|
+
else { list abs_fac=tmpf[2..size(tmpf)]; }
|
|
545
|
+
abs_fac=abs_fac,newvar;
|
|
546
|
+
string result = string(abs_fac);
|
|
547
|
+
setring(MP);
|
|
548
|
+
return(result);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
// preparing the output for SINGULAR standard
|
|
553
|
+
// a list: factors(ideal),multiplicities(intvec),minpolys(ideal),
|
|
554
|
+
// number of factors in the absolute factorization
|
|
555
|
+
// the output(except the coefficient) should have no denominators
|
|
556
|
+
// and no content
|
|
557
|
+
ideal facts,minpols;
|
|
558
|
+
intvec mults;
|
|
559
|
+
int nfacts;
|
|
560
|
+
number co=1;
|
|
561
|
+
minpols[1]=tmpf[1][1];
|
|
562
|
+
facts[1]=tmpf[1][2]; //the coefficient
|
|
563
|
+
for(i=2;i<=size(tmpf);i++)
|
|
564
|
+
{
|
|
565
|
+
minpols[i]=cleardenom(tmpf[i][1]);
|
|
566
|
+
facts[i]=cleardenom(tmpf[i][2]);
|
|
567
|
+
co=co*(leadcoef(tmpf[i][2])/leadcoef(facts[i]))^(deg(minpols[i])*tmpm[i]);
|
|
568
|
+
}
|
|
569
|
+
facts[1]=facts[1]*co;
|
|
570
|
+
for(i=1;i<=size(tmpm);i++)
|
|
571
|
+
{
|
|
572
|
+
mults[i]=tmpm[i];
|
|
573
|
+
}
|
|
574
|
+
for(i=2;i<=size(mults);i++)
|
|
575
|
+
{
|
|
576
|
+
nfacts=nfacts+mults[i]*deg(minpols[i]);
|
|
577
|
+
}
|
|
578
|
+
list absolute_factors=facts,mults,minpols,nfacts;
|
|
579
|
+
|
|
580
|
+
// create ring with extra parameter `newvar` for output:
|
|
581
|
+
setring(MP);
|
|
582
|
+
list Lout=ringlist(MP);
|
|
583
|
+
if(!pa)
|
|
584
|
+
{
|
|
585
|
+
list Lpar=list(char(MP),list(newvar),list(list("lp",intvec(1))),ideal(0));
|
|
586
|
+
}
|
|
587
|
+
else
|
|
588
|
+
{
|
|
589
|
+
list Lpar=Lout[1];
|
|
590
|
+
Lpar[2][size(Lpar[2])+1]=newvar;
|
|
591
|
+
vv=Lpar[3][1][2];
|
|
592
|
+
vv=vv,1;
|
|
593
|
+
Lpar[3][1][2]=vv;
|
|
594
|
+
}
|
|
595
|
+
Lout[1]=Lpar;
|
|
596
|
+
def MPo=ring(Lout);
|
|
597
|
+
setring(MPo);
|
|
598
|
+
list absolute_factors=imap(MPout,absolute_factors);
|
|
599
|
+
export absolute_factors;
|
|
600
|
+
setring(MP);
|
|
601
|
+
|
|
602
|
+
dbprint( printlevel-voice+3,"
|
|
603
|
+
// 'absFactorize' created a ring, in which a list absolute_factors (the
|
|
604
|
+
// absolute factors) is stored.
|
|
605
|
+
// To access the list of absolute factors, type (if the name S was assigned
|
|
606
|
+
// to the return value):
|
|
607
|
+
// setring(S); absolute_factors;
|
|
608
|
+
");
|
|
609
|
+
return(MPo);
|
|
610
|
+
}
|
|
611
|
+
example
|
|
612
|
+
{
|
|
613
|
+
"EXAMPLE:"; echo = 2;
|
|
614
|
+
ring R = (0), (x,y), lp;
|
|
615
|
+
poly p = (-7*x^2 + 2*x*y^2 + 6*x + y^4 + 14*y^2 + 47)*(5x2+y2)^3*(x-y)^4;
|
|
616
|
+
def S = absFactorize(p) ;
|
|
617
|
+
setring(S);
|
|
618
|
+
absolute_factors;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
622
|
+
proc absFactorizeBCG(poly p, list #)
|
|
623
|
+
"USAGE: absFactorizeBCG(p [,s]); p poly, s string
|
|
624
|
+
ASSUME: coefficient field is the field of rational numbers or a
|
|
625
|
+
transcendental extension thereof
|
|
626
|
+
RETURN: ring @code{R} which is obtained from the current basering
|
|
627
|
+
by adding a new parameter (if a string @code{s} is given as a
|
|
628
|
+
second input, the new parameter gets this string as name). The ring
|
|
629
|
+
@code{R} comes with a list @code{absolute_factors} with the
|
|
630
|
+
following entries:
|
|
631
|
+
@format
|
|
632
|
+
absolute_factors[1]: ideal (the absolute factors)
|
|
633
|
+
absolute_factors[2]: intvec (the multiplicities)
|
|
634
|
+
absolute_factors[3]: ideal (the minimal polynomials)
|
|
635
|
+
absolute_factors[4]: int (total number of nontriv. absolute factors)
|
|
636
|
+
@end format
|
|
637
|
+
The entry @code{absolute_factors[1][1]} is a constant, the
|
|
638
|
+
entry @code{absolute_factors[3][1]} is the parameter added to the
|
|
639
|
+
current ring.@*
|
|
640
|
+
Each of the remaining entries @code{absolute_factors[1][j]} stands for
|
|
641
|
+
a class of conjugated absolute factors. The corresponding entry
|
|
642
|
+
@code{absolute_factors[3][j]} is the minimal polynomial of the
|
|
643
|
+
field extension over which the factor is minimally defined (its degree
|
|
644
|
+
is the number of conjugates in the class). If the entry
|
|
645
|
+
@code{absolute_factors[3][j]} coincides with @code{absolute_factors[3][1]},
|
|
646
|
+
no field extension was necessary for the @code{j}th (class of)
|
|
647
|
+
absolute factor(s).
|
|
648
|
+
NOTE: All factors are presented denominator- and content-free. The constant
|
|
649
|
+
factor (first entry) is chosen such that the product of all (!) the
|
|
650
|
+
(denominator- and content-free) absolute factors of @code{p} equals
|
|
651
|
+
@code{p / absolute_factors[1][1]}.
|
|
652
|
+
SEE ALSO: factorize, absPrimdecGTZ, absFactorize
|
|
653
|
+
EXAMPLE: example absFactorizeBCG; shows an example
|
|
654
|
+
"
|
|
655
|
+
{
|
|
656
|
+
int dblevel = printlevel - voice + 2;
|
|
657
|
+
dbprint(dblevel,"Entering absfact.lib::absFactorizeBCG with ",p);
|
|
658
|
+
def MP = basering;
|
|
659
|
+
int i;
|
|
660
|
+
if (char(MP) != 0)
|
|
661
|
+
{
|
|
662
|
+
ERROR("// absfact.lib::absFactorizeBCG is only implemented for "+
|
|
663
|
+
"characteristic 0");
|
|
664
|
+
}
|
|
665
|
+
if(minpoly!=0)
|
|
666
|
+
{
|
|
667
|
+
ERROR("// absfact.lib::absFactorizeBCG is not implemented for algebraic "
|
|
668
|
+
+"extensions");
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
int n = nvars(MP);
|
|
672
|
+
int pa=npars(MP);
|
|
673
|
+
list lMP= ringlist(MP);
|
|
674
|
+
intvec vv,vk;
|
|
675
|
+
for(i=1;i<=n;i++){vv[i]=1;}
|
|
676
|
+
vk=vv,1;
|
|
677
|
+
|
|
678
|
+
//if the basering has parameters, add the parameters to the variables
|
|
679
|
+
//takes care about coefficients and possible denominators
|
|
680
|
+
if(pa>0)
|
|
681
|
+
{
|
|
682
|
+
poly qh=cleardenom(p);
|
|
683
|
+
if (p==0)
|
|
684
|
+
{
|
|
685
|
+
number cok=0;
|
|
686
|
+
}
|
|
687
|
+
else
|
|
688
|
+
{
|
|
689
|
+
number cok=leadcoef(p)/leadcoef(qh);
|
|
690
|
+
}
|
|
691
|
+
p=qh;
|
|
692
|
+
string sp;
|
|
693
|
+
for(i=1;i<=npars(basering);i++)
|
|
694
|
+
{
|
|
695
|
+
sp=string(par(i));
|
|
696
|
+
sp=sp[2..size(sp)-1];
|
|
697
|
+
lMP[2][n+i]=sp;
|
|
698
|
+
vv=vv,1;
|
|
699
|
+
}
|
|
700
|
+
lMP[1]=0;
|
|
701
|
+
n=n+npars(MP);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
// MPz is obtained by adding the new variable @z to MP
|
|
705
|
+
// ordering is wp(1...1)
|
|
706
|
+
// All the above subroutines work in MPz
|
|
707
|
+
string newvar;
|
|
708
|
+
if(size(#)>0)
|
|
709
|
+
{
|
|
710
|
+
if(typeof(#[1])=="string")
|
|
711
|
+
{
|
|
712
|
+
newvar=#[1];
|
|
713
|
+
}
|
|
714
|
+
else
|
|
715
|
+
{
|
|
716
|
+
newvar = "a";
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
else
|
|
720
|
+
{
|
|
721
|
+
newvar = "a";
|
|
722
|
+
}
|
|
723
|
+
if (newvar=="a")
|
|
724
|
+
{
|
|
725
|
+
if(belongTo(newvar, lMP[2])||defined(a)){newvar = "b";}
|
|
726
|
+
if(belongTo(newvar, lMP[2])||defined(b)){newvar = "c";}
|
|
727
|
+
if(belongTo(newvar, lMP[2])||defined(c)){newvar = "@c";}
|
|
728
|
+
while(belongTo(newvar, lMP[2]))
|
|
729
|
+
{
|
|
730
|
+
newvar = "@" + newvar;
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
// create ring with extra parameter `newvar` for output:
|
|
735
|
+
setring(MP);
|
|
736
|
+
list Lout=ringlist(MP);
|
|
737
|
+
if(!pa)
|
|
738
|
+
{
|
|
739
|
+
list Lpar=list(char(MP),list(newvar),list(list("lp",intvec(1))),ideal(0));
|
|
740
|
+
}
|
|
741
|
+
else
|
|
742
|
+
{
|
|
743
|
+
list Lpar=Lout[1];
|
|
744
|
+
Lpar[2][size(Lpar[2])+1]=newvar;
|
|
745
|
+
vv=Lpar[3][1][2];
|
|
746
|
+
vv=vv,1;
|
|
747
|
+
Lpar[3][1][2]=vv;
|
|
748
|
+
}
|
|
749
|
+
Lout[1]=Lpar;
|
|
750
|
+
def MPo=ring(Lout);
|
|
751
|
+
setring(MPo);
|
|
752
|
+
|
|
753
|
+
poly p=imap(MP,p);
|
|
754
|
+
|
|
755
|
+
// special treatment in the homogeneous case, dropping one variable
|
|
756
|
+
// by substituting the first variable by 1
|
|
757
|
+
int ho=homog(p);
|
|
758
|
+
if(ho)
|
|
759
|
+
{
|
|
760
|
+
int dh=deg(p);
|
|
761
|
+
p=subst(p,var(1),1);
|
|
762
|
+
int di=deg(p);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
list tmpf=system ("absFact", p);
|
|
766
|
+
|
|
767
|
+
// the homogeneous case, homogenizing the result
|
|
768
|
+
// the new variable has to have degree 0
|
|
769
|
+
// need to change the ring
|
|
770
|
+
if(ho)
|
|
771
|
+
{
|
|
772
|
+
list ll=ringlist(MPo);
|
|
773
|
+
vv[size(vv)]=0;
|
|
774
|
+
ll[3][1][2]=vv;
|
|
775
|
+
def MPhelp=ring(ll);
|
|
776
|
+
setring(MPhelp);
|
|
777
|
+
list tmpf=imap(MPo,tmpf);
|
|
778
|
+
for(i=2;i<=size(tmpf[1]);i++)
|
|
779
|
+
{
|
|
780
|
+
tmpf[1][i]=homog(tmpf[1][i],var(1));
|
|
781
|
+
}
|
|
782
|
+
if(dh>di)
|
|
783
|
+
{
|
|
784
|
+
tmpf[1][size(tmpf[1])+1]=var(1);
|
|
785
|
+
tmpf[2][size(tmpf[2])+1]=dh-di;
|
|
786
|
+
tmpf[3][size(tmpf[3])+1]=par(npars(MPo));
|
|
787
|
+
tmpf[4]= tmpf[4]+dh-di;
|
|
788
|
+
}
|
|
789
|
+
setring(MPo);
|
|
790
|
+
tmpf=imap(MPhelp,tmpf);
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
if (pa)
|
|
794
|
+
{
|
|
795
|
+
number cok=imap(MP,cok);
|
|
796
|
+
tmpf[1][1]=cok*tmpf[1][1];
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
// if we want the output as string
|
|
800
|
+
if(size(#)>0)
|
|
801
|
+
{
|
|
802
|
+
if(typeof(#[1])=="int")
|
|
803
|
+
{
|
|
804
|
+
if(#[1]==77)
|
|
805
|
+
{ // undocumented feature for Gerhard's absPrimdecGTZ
|
|
806
|
+
if (size(tmpf[1])<2){ list abs_fac = list(var(n+1),poly(1)); }
|
|
807
|
+
else
|
|
808
|
+
{
|
|
809
|
+
list abs_fac= tmpf[3][2];
|
|
810
|
+
abs_fac= abs_fac, tmpf[1][2];
|
|
811
|
+
for (i= 3; i <= size(tmpf[1]); i++)
|
|
812
|
+
{
|
|
813
|
+
abs_fac=abs_fac,tmpf[3][i];
|
|
814
|
+
abs_fac=abs_fac,tmpf[1][i];
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
abs_fac=abs_fac,newvar;
|
|
818
|
+
string result = string(abs_fac);
|
|
819
|
+
setring(MP);
|
|
820
|
+
return(result);
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
list absolute_factors= tmpf;
|
|
826
|
+
export absolute_factors;
|
|
827
|
+
setring(MP);
|
|
828
|
+
|
|
829
|
+
dbprint( printlevel-voice+3,"
|
|
830
|
+
// 'absFactorizeBCG' created a ring, in which a list absolute_factors (the
|
|
831
|
+
// absolute factors) is stored.
|
|
832
|
+
// To access the list of absolute factors, type (if the name S was assigned
|
|
833
|
+
// to the return value):
|
|
834
|
+
// setring(S); absolute_factors;
|
|
835
|
+
");
|
|
836
|
+
return(MPo);
|
|
837
|
+
}
|
|
838
|
+
example
|
|
839
|
+
{
|
|
840
|
+
"EXAMPLE:"; echo = 2;
|
|
841
|
+
ring R = (0), (x,y), lp;
|
|
842
|
+
poly p = (-7*x^2 + 2*x*y^2 + 6*x + y^4 + 14*y^2 + 47)*(5x2+y2)^3*(x-y)^4;
|
|
843
|
+
def S = absFactorizeBCG(p) ;
|
|
844
|
+
setring(S);
|
|
845
|
+
absolute_factors;
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
|
|
849
|
+
/*
|
|
850
|
+
ring r=0,(x,t),dp;
|
|
851
|
+
poly p=x^4+(t^3-2t^2-2t)*x^3-(t^5-2t^4-t^2-2t-1)*x^2
|
|
852
|
+
-(t^6-4t^5+t^4+6t^3+2t^2)*x+(t^6-4t^5+2t^4+4t^3+t^2);
|
|
853
|
+
def S = absFactorize(p,"s");
|
|
854
|
+
setring(S);
|
|
855
|
+
absolute_factors;
|
|
856
|
+
|
|
857
|
+
ring r1=(0,a,b),(x,y),dp;
|
|
858
|
+
poly p=(a3-a2b+27ab3-27b4)/(a+b5)*x2+(a2+27b3)*y;
|
|
859
|
+
def S = absFactorize(p);
|
|
860
|
+
setring(S);
|
|
861
|
+
absolute_factors;
|
|
862
|
+
|
|
863
|
+
ring r2=0,(x,y,z,w),dp;
|
|
864
|
+
poly f=(x2+y2+z2)^2+w4;
|
|
865
|
+
def S =absFactorize(f);
|
|
866
|
+
setring(S);
|
|
867
|
+
absolute_factors;
|
|
868
|
+
|
|
869
|
+
ring r=0,(x),dp;
|
|
870
|
+
poly p=0;
|
|
871
|
+
def S = absFactorize(p);
|
|
872
|
+
setring(S);
|
|
873
|
+
absolute_factors;
|
|
874
|
+
|
|
875
|
+
ring r=0,(x),dp;
|
|
876
|
+
poly p=7/11;
|
|
877
|
+
def S = absFactorize(p);
|
|
878
|
+
setring(S);
|
|
879
|
+
absolute_factors;
|
|
880
|
+
|
|
881
|
+
ring r=(0,a,b),(x,y),dp;
|
|
882
|
+
poly p=0;
|
|
883
|
+
def S = absFactorize(p);
|
|
884
|
+
setring(S);
|
|
885
|
+
absolute_factors;
|
|
886
|
+
|
|
887
|
+
ring r=(0,a,b),(x,y),dp;
|
|
888
|
+
poly p=(a+1)/b;
|
|
889
|
+
def S = absFactorize(p);
|
|
890
|
+
setring(S);
|
|
891
|
+
absolute_factors;
|
|
892
|
+
|
|
893
|
+
ring r=(0,a,b),(x,y),dp;
|
|
894
|
+
poly p=(a+1)/b*x;
|
|
895
|
+
def S = absFactorize(p,"s");
|
|
896
|
+
setring(S);
|
|
897
|
+
absolute_factors;
|
|
898
|
+
|
|
899
|
+
ring r=(0,a,b),(x,y),dp;
|
|
900
|
+
poly p=(a+1)/b*x + 1;
|
|
901
|
+
def S = absFactorize(p,"s");
|
|
902
|
+
setring(S);
|
|
903
|
+
absolute_factors;
|
|
904
|
+
|
|
905
|
+
ring r=(0,a,b),(x,y),dp;
|
|
906
|
+
poly p=(a+1)/b*x + y;
|
|
907
|
+
def S = absFactorize(p,"s");
|
|
908
|
+
setring(S);
|
|
909
|
+
absolute_factors;
|
|
910
|
+
|
|
911
|
+
ring r=0,(x,t),dp;
|
|
912
|
+
poly p=x^4+(t^3-2t^2-2t)*x^3-(t^5-2t^4-t^2-2t-1)*x^2
|
|
913
|
+
-(t^6-4t^5+t^4+6t^3+2t^2)*x+(t^6-4t^5+2t^4+4t^3+t^2);
|
|
914
|
+
def S = absFactorize(p,"s");
|
|
915
|
+
setring(S);
|
|
916
|
+
absolute_factors;
|
|
917
|
+
|
|
918
|
+
ring r1=(0,a,b),(x,y),dp;
|
|
919
|
+
poly p=(a3-a2b+27ab3-27b4)/(a+b5)*x2+(a2+27b3)*y;
|
|
920
|
+
def S = absFactorize(p);
|
|
921
|
+
setring(S);
|
|
922
|
+
absolute_factors;
|
|
923
|
+
|
|
924
|
+
ring r2=0,(x,y,z,w),dp;
|
|
925
|
+
poly f=(x2+y2+z2)^2+w4;
|
|
926
|
+
def S =absFactorize(f);
|
|
927
|
+
setring(S);
|
|
928
|
+
absolute_factors;
|
|
929
|
+
|
|
930
|
+
ring r3=0,(x,y,z,w),dp;
|
|
931
|
+
poly f=(x2+y2+z2)^4+w8;
|
|
932
|
+
def S =absFactorize(f);
|
|
933
|
+
setring(S);
|
|
934
|
+
absolute_factors;
|
|
935
|
+
|
|
936
|
+
ring r4=0,(x,y),dp;
|
|
937
|
+
poly f=y6-(2x2-2x-14)*y4-(4x3+35x2-6x-47)*y2+14x4-12x3-94x2;
|
|
938
|
+
def S=absFactorize(f);
|
|
939
|
+
setring(S);
|
|
940
|
+
absolute_factors;
|
|
941
|
+
|
|
942
|
+
ring R1 = 0, x, dp;
|
|
943
|
+
def S1 = absFactorize(x4-2);
|
|
944
|
+
setring(S1);
|
|
945
|
+
absolute_factors;
|
|
946
|
+
|
|
947
|
+
ring R3 = 0, (x,y), dp;
|
|
948
|
+
poly f = x2y4+y6+2x3y2+2xy4-7x4+7x2y2+14y4+6x3+6xy2+47x2+47y2;
|
|
949
|
+
def S3 = absFactorize(f);
|
|
950
|
+
setring(S3);
|
|
951
|
+
absolute_factors;
|
|
952
|
+
|
|
953
|
+
ring R4 = 0, (x,y), dp;
|
|
954
|
+
poly f = y4+2*xy2-7*x2+14*y2+6*x+47;
|
|
955
|
+
def S4 = absFactorize(f);
|
|
956
|
+
setring(S4);
|
|
957
|
+
absolute_factors;
|
|
958
|
+
|
|
959
|
+
*/
|