passagemath-singular 10.6.30__cp310-cp310-macosx_13_0_arm64.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-310-darwin.so +0 -0
- passagemath_singular-10.6.30.dist-info/METADATA +182 -0
- passagemath_singular-10.6.30.dist-info/RECORD +488 -0
- passagemath_singular-10.6.30.dist-info/WHEEL +6 -0
- passagemath_singular-10.6.30.dist-info/top_level.txt +3 -0
- passagemath_singular.dylibs/libSingular-4.4.1.dylib +0 -0
- passagemath_singular.dylibs/libcddgmp.0.dylib +0 -0
- passagemath_singular.dylibs/libfactory-4.4.1.dylib +0 -0
- passagemath_singular.dylibs/libflint.21.0.dylib +0 -0
- passagemath_singular.dylibs/libgf2x.3.dylib +0 -0
- passagemath_singular.dylibs/libgfortran.5.dylib +0 -0
- passagemath_singular.dylibs/libgmp.10.dylib +0 -0
- passagemath_singular.dylibs/libgsl.28.dylib +0 -0
- passagemath_singular.dylibs/libmpfr.6.dylib +0 -0
- passagemath_singular.dylibs/libntl.44.dylib +0 -0
- passagemath_singular.dylibs/libomalloc-0.9.6.dylib +0 -0
- passagemath_singular.dylibs/libopenblasp-r0.3.29.dylib +0 -0
- passagemath_singular.dylibs/libpolys-4.4.1.dylib +0 -0
- passagemath_singular.dylibs/libquadmath.0.dylib +0 -0
- passagemath_singular.dylibs/libreadline.8.2.dylib +0 -0
- passagemath_singular.dylibs/libsingular_resources-4.4.1.dylib +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-310-darwin.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-310-darwin.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-310-darwin.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-310-darwin.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-310-darwin.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-310-darwin.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-310-darwin.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-310-darwin.so +0 -0
- sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
- sage/algebras/quatalg/quaternion_algebra_element.cpython-310-darwin.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-310-darwin.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-310-darwin.so +0 -0
- sage/libs/singular/groebner_strategy.pxd +22 -0
- sage/libs/singular/groebner_strategy.pyx +582 -0
- sage/libs/singular/option.cpython-310-darwin.so +0 -0
- sage/libs/singular/option.pyx +671 -0
- sage/libs/singular/polynomial.cpython-310-darwin.so +0 -0
- sage/libs/singular/polynomial.pxd +39 -0
- sage/libs/singular/polynomial.pyx +661 -0
- sage/libs/singular/ring.cpython-310-darwin.so +0 -0
- sage/libs/singular/ring.pxd +58 -0
- sage/libs/singular/ring.pyx +893 -0
- sage/libs/singular/singular.cpython-310-darwin.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-310-darwin.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-310-darwin.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-310-darwin.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-310-darwin.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-310-darwin.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-310-darwin.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 +187111 -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 +769 -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 +1927 -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 +1258 -0
- sage_wheels/share/singular/LIB/modquotient.lib +269 -0
- sage_wheels/share/singular/LIB/modstd.lib +1025 -0
- sage_wheels/share/singular/LIB/modular.lib +438 -0
- sage_wheels/share/singular/LIB/modules.lib +2553 -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 +2140 -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 +305 -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 +9593 -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 +169 -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 +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/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 +1195 -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 +4310 -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 +4986 -0
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version modular.lib 4.2.0.0 Dec_2020 "; // $Id: e3c81f6b38861e00f9a7575e74ef097b2ba98a32 $
|
|
3
|
+
category="General purpose";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: modular.lib An abstraction layer for modular techniques
|
|
6
|
+
AUTHOR: Andreas Steenpass, e-mail: steenpass@mathematik.uni-kl.de
|
|
7
|
+
|
|
8
|
+
OVERVIEW:
|
|
9
|
+
This library is an abstraction layer for modular techniques which are
|
|
10
|
+
well-known to speed up many computations and to be easy parallelizable.
|
|
11
|
+
@* The basic idea is to execute some computation modulo several primes and then
|
|
12
|
+
to lift the result back to characteristic zero via the farey rational map and
|
|
13
|
+
chinese remaindering. It is thus possible to overcome the often problematic
|
|
14
|
+
coefficient swell and to run the modular computations in parallel.
|
|
15
|
+
@* In Singular, modular techniques have been quite successfully employed for
|
|
16
|
+
several applications. A first implementation was done for Groebner bases in
|
|
17
|
+
Singular's @ref{modstd_lib}, a pioneering work by Stefan Steidel. Since the
|
|
18
|
+
algorithm is basically the same for all applications, this library aims at
|
|
19
|
+
preventing library authors from writing the same code over and over again by
|
|
20
|
+
providing an appropriate abstraction layer. It also offers one-line commands
|
|
21
|
+
for ordinary Singular users who want to take advantage of modular techniques
|
|
22
|
+
for their own calculations. Thus modular techniques can be regarded as
|
|
23
|
+
a parallel skeleton of their own.
|
|
24
|
+
@* The terminology (such as 'pTest' and 'finalTest') follows Singular's
|
|
25
|
+
@ref{modstd_lib} and [1].
|
|
26
|
+
|
|
27
|
+
REFERENCES:
|
|
28
|
+
[1] Nazeran Idrees, Gerhard Pfister, Stefan Steidel: Parallelization of
|
|
29
|
+
Modular Algorithms. Journal of Symbolic Computation 46, 672-684 (2011).
|
|
30
|
+
http://arxiv.org/abs/1005.5663
|
|
31
|
+
|
|
32
|
+
SEE ALSO: link, tasks_lib, parallel_lib, modstd_lib, assprimeszerodim_lib
|
|
33
|
+
|
|
34
|
+
KEYWORDS: modular_lib; Modular techniques; Parallelization;
|
|
35
|
+
Skeletons for parallelization; Distributed computing
|
|
36
|
+
|
|
37
|
+
PROCEDURES:
|
|
38
|
+
modular(...) execute a command modulo several primes and lift the result
|
|
39
|
+
back to characteristic zero
|
|
40
|
+
";
|
|
41
|
+
|
|
42
|
+
LIB "general.lib";
|
|
43
|
+
LIB "resources.lib";
|
|
44
|
+
LIB "tasks.lib";
|
|
45
|
+
LIB "parallel.lib";
|
|
46
|
+
|
|
47
|
+
static proc mod_init()
|
|
48
|
+
{
|
|
49
|
+
string arg_type;
|
|
50
|
+
exportto(Modular,arg_type);
|
|
51
|
+
if (!defined(Resources))
|
|
52
|
+
{
|
|
53
|
+
LIB "resources.lib";
|
|
54
|
+
}
|
|
55
|
+
int sem_cores = Resources::sem_cores; // the number of processor cores
|
|
56
|
+
exportto(Modular, sem_cores);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
proc modular(string Command, alias list Arguments, list #)
|
|
60
|
+
"USAGE: modular(command, arguments[, primeTest, deleteUnluckyPrimes, pTest,
|
|
61
|
+
finalTest, pmax), command string, arguments list, primeTest proc,
|
|
62
|
+
deleteUnluckyPrimes proc, pTest proc, finalTest proc, pmax int
|
|
63
|
+
RETURN: the result of @code{command} applied to @code{arguments},
|
|
64
|
+
computed using modular methods.
|
|
65
|
+
NOTE: For the general algorithm and the role of the optional arguments
|
|
66
|
+
primeTest, deleteUnluckyPrimes, pTest, and finalTest, see
|
|
67
|
+
@ref{modStd} and the reference given in @ref{modular_lib}. The
|
|
68
|
+
default for these arguments is that all tests succeed and that all
|
|
69
|
+
primes are assumed to be lucky.
|
|
70
|
+
@* The type of the result when @code{command} is applied to
|
|
71
|
+
@code{arguments} must be either @code{bigint}, @code{ideal},
|
|
72
|
+
@code{module}, or @code{matrix}.
|
|
73
|
+
@* The optional argument pmax is an upper bound for the prime numbers
|
|
74
|
+
to be used for the modular computations. The default is 2147483647
|
|
75
|
+
(largest prime which can be represented as an @code{int} in
|
|
76
|
+
Singular), or 536870909 (largest prime below 2^29} for baserings with
|
|
77
|
+
parameters.
|
|
78
|
+
SEE ALSO: modStd
|
|
79
|
+
EXAMPLE: example modular; shows an example"
|
|
80
|
+
{
|
|
81
|
+
/* check for errors */
|
|
82
|
+
if (char(basering) != 0)
|
|
83
|
+
{ ERROR("The characteristic must be zero."); }
|
|
84
|
+
|
|
85
|
+
/* auxiliary variables */
|
|
86
|
+
int i;
|
|
87
|
+
|
|
88
|
+
/* set maximal prime number */
|
|
89
|
+
int pmax = 2147483647;
|
|
90
|
+
if (npars(basering) > 0)
|
|
91
|
+
{
|
|
92
|
+
pmax = 536870909; // prime(2^29)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* read optional parameters */
|
|
96
|
+
list defaults = list(primeTest_default, deleteUnluckyPrimes_default,
|
|
97
|
+
pTest_default, finalTest_default, pmax);
|
|
98
|
+
for (i = 1; i <= size(defaults); i++)
|
|
99
|
+
{
|
|
100
|
+
if (typeof(#[i]) != typeof(defaults[i]))
|
|
101
|
+
{
|
|
102
|
+
# = insert(#, defaults[i], i-1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (size(#) != size(defaults))
|
|
106
|
+
{ ERROR("wrong optional parameters"); }
|
|
107
|
+
proc primeTest = #[1];
|
|
108
|
+
proc deleteUnluckyPrimes = #[2];
|
|
109
|
+
proc pTest = #[3];
|
|
110
|
+
proc finalTest = #[4];
|
|
111
|
+
pmax = #[5];
|
|
112
|
+
exportto(Modular, primeTest);
|
|
113
|
+
|
|
114
|
+
/* export command and arguments */
|
|
115
|
+
exportto(Modular, Command);
|
|
116
|
+
exportto(Modular, Arguments);
|
|
117
|
+
|
|
118
|
+
/* modular computations */
|
|
119
|
+
def result;
|
|
120
|
+
def result_lift;
|
|
121
|
+
bigint N = 1;
|
|
122
|
+
list modresults;
|
|
123
|
+
list primes;
|
|
124
|
+
int nAllPrimes;
|
|
125
|
+
int nNewPrimes;
|
|
126
|
+
int p;
|
|
127
|
+
list indices;
|
|
128
|
+
int ncores_available;
|
|
129
|
+
while (1)
|
|
130
|
+
{
|
|
131
|
+
// compute list of primes
|
|
132
|
+
if (nAllPrimes == 0)
|
|
133
|
+
{
|
|
134
|
+
nNewPrimes = NbModProcs();
|
|
135
|
+
}
|
|
136
|
+
else
|
|
137
|
+
{
|
|
138
|
+
ncores_available = max(1, system("semaphore", "get_value",
|
|
139
|
+
sem_cores)+1);
|
|
140
|
+
if (nAllPrimes < ncores_available)
|
|
141
|
+
{
|
|
142
|
+
nNewPrimes = nAllPrimes;
|
|
143
|
+
}
|
|
144
|
+
else
|
|
145
|
+
{
|
|
146
|
+
nNewPrimes = (nAllPrimes div ncores_available)
|
|
147
|
+
*ncores_available;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
primes = primeList(nNewPrimes, pmax);
|
|
151
|
+
pmax = primes[size(primes)]-1;
|
|
152
|
+
nAllPrimes = nAllPrimes+nNewPrimes;
|
|
153
|
+
|
|
154
|
+
// do computation modulo several primes
|
|
155
|
+
for (i = size(primes); i > 0; i--)
|
|
156
|
+
{
|
|
157
|
+
task t(i) = "Modular::modp", primes[i];
|
|
158
|
+
}
|
|
159
|
+
startTasks(t(1..size(primes)));
|
|
160
|
+
waitAllTasks(t(1..size(primes)));
|
|
161
|
+
for (i = size(primes); i > 0; i--)
|
|
162
|
+
{
|
|
163
|
+
modresults[i] = getResult(t(i));
|
|
164
|
+
killTask(t(i));
|
|
165
|
+
kill t(i);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// delete unlucky primes
|
|
169
|
+
indices = deleteUnluckyPrimes(modresults);
|
|
170
|
+
indices = sort(indices)[1];
|
|
171
|
+
for (i = size(indices); i > 1; i--)
|
|
172
|
+
{
|
|
173
|
+
if (indices[i] == indices[i-1])
|
|
174
|
+
{
|
|
175
|
+
indices = delete(indices, i);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
for (i = size(indices); i > 0; i--)
|
|
179
|
+
{
|
|
180
|
+
modresults = delete(modresults, indices[i]);
|
|
181
|
+
primes = delete(primes, indices[i]);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// lift result
|
|
185
|
+
if (N == 1)
|
|
186
|
+
{
|
|
187
|
+
result_lift = chinrem_recursive(modresults, primes);
|
|
188
|
+
}
|
|
189
|
+
else
|
|
190
|
+
{
|
|
191
|
+
result_lift = chinrem_recursive(list(result_lift)+modresults,
|
|
192
|
+
list(N)+primes);
|
|
193
|
+
}
|
|
194
|
+
modresults = list();
|
|
195
|
+
for (i = size(primes); i > 0; i--)
|
|
196
|
+
{
|
|
197
|
+
N = N*primes[i];
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// apply farey
|
|
201
|
+
result = farey_parallel(result_lift, N);
|
|
202
|
+
|
|
203
|
+
// pTest
|
|
204
|
+
p = prime(random(pmax div 2, pmax-1));
|
|
205
|
+
while (!Modular::primeTest(p, Arguments))
|
|
206
|
+
{
|
|
207
|
+
if (p <= 2) { ERROR("no more primes"); }
|
|
208
|
+
p = prime(random(p div 2, p-1));
|
|
209
|
+
}
|
|
210
|
+
if (!pTest(Command, Arguments, result, p)) { continue; }
|
|
211
|
+
|
|
212
|
+
// finalTest
|
|
213
|
+
if (finalTest(Command, Arguments, result)) break;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* kill exported data */
|
|
217
|
+
kill Command;
|
|
218
|
+
kill Arguments;
|
|
219
|
+
kill primeTest;
|
|
220
|
+
|
|
221
|
+
/* return of result */
|
|
222
|
+
return(result);
|
|
223
|
+
}
|
|
224
|
+
example
|
|
225
|
+
{
|
|
226
|
+
"EXAMPLE:";
|
|
227
|
+
echo = 2;
|
|
228
|
+
ring R = 0, (x,y), dp;
|
|
229
|
+
ideal I = x9y2+x10, x2y7-y8;
|
|
230
|
+
modular("std", list(I));
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
static proc chinrem_recursive(list modresults, list moduli)
|
|
234
|
+
{
|
|
235
|
+
if (typeof(modresults[1]) != "list")
|
|
236
|
+
{
|
|
237
|
+
return(chinrem(modresults, moduli));
|
|
238
|
+
}
|
|
239
|
+
// if typeof(modresults[1]) == "list", then we assume
|
|
240
|
+
// size(modresults[1]) == size(modresults[k])
|
|
241
|
+
// for k = 2, ..., size(modresults)
|
|
242
|
+
int n_sublists = size(modresults[1]);
|
|
243
|
+
int i, j;
|
|
244
|
+
list modresults_sublists;
|
|
245
|
+
for (j = n_sublists; j > 0; j--)
|
|
246
|
+
{
|
|
247
|
+
modresults_sublists[j] = list();
|
|
248
|
+
for (i = size(modresults); i > 0; i--)
|
|
249
|
+
{
|
|
250
|
+
modresults_sublists[j][i] = modresults[i][j];
|
|
251
|
+
}
|
|
252
|
+
task t(j) = "Modular::chinrem_recursive",
|
|
253
|
+
list(modresults_sublists[j], moduli);
|
|
254
|
+
}
|
|
255
|
+
startTasks(t(1..n_sublists));
|
|
256
|
+
waitAllTasks(t(1..n_sublists));
|
|
257
|
+
list result;
|
|
258
|
+
for (j = n_sublists; j > 0; j--)
|
|
259
|
+
{
|
|
260
|
+
result[j] = getResult(t(j));
|
|
261
|
+
killTask(t(j));
|
|
262
|
+
}
|
|
263
|
+
return(result);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
static proc primeList(int n, int pmax)
|
|
267
|
+
{
|
|
268
|
+
list primes;
|
|
269
|
+
int p = pmax;
|
|
270
|
+
int i;
|
|
271
|
+
for (i = 1; i <= n; i++)
|
|
272
|
+
{
|
|
273
|
+
if (p < 2)
|
|
274
|
+
{ ERROR("no more primes"); }
|
|
275
|
+
p = prime(p);
|
|
276
|
+
task t(i) = "Modular::primeList_task", list(p);
|
|
277
|
+
p--;
|
|
278
|
+
}
|
|
279
|
+
startTasks(t(1..n));
|
|
280
|
+
waitAllTasks(t(1..n));
|
|
281
|
+
int j;
|
|
282
|
+
for (i = 1; i <= n; i++)
|
|
283
|
+
{
|
|
284
|
+
if (getResult(t(i)))
|
|
285
|
+
{
|
|
286
|
+
j++;
|
|
287
|
+
primes[j] = getArguments(t(i))[1];
|
|
288
|
+
}
|
|
289
|
+
killTask(t(i));
|
|
290
|
+
}
|
|
291
|
+
if (j < n)
|
|
292
|
+
{
|
|
293
|
+
primes = primes+primeList(n-j, p);
|
|
294
|
+
}
|
|
295
|
+
return(primes);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
static proc primeList_task(int p)
|
|
299
|
+
{
|
|
300
|
+
return(Modular::primeTest(p, Arguments));
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
static proc modp(int p)
|
|
304
|
+
{
|
|
305
|
+
def br = basering;
|
|
306
|
+
list lbr = ringlist(br);
|
|
307
|
+
if (typeof(lbr[1]) == "int")
|
|
308
|
+
{ lbr[1] = p; }
|
|
309
|
+
else
|
|
310
|
+
{ lbr[1][1] = p; }
|
|
311
|
+
def rp = ring(lbr);
|
|
312
|
+
setring(rp);
|
|
313
|
+
list args = fetch(br, Arguments);
|
|
314
|
+
execute("def result = "+Command+"("+Tasks::argsToString("args", size(args))
|
|
315
|
+
+");");
|
|
316
|
+
setring(br);
|
|
317
|
+
def result = fetch(rp, result);
|
|
318
|
+
return(result);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
static proc primeTest_default(int p, alias list args)
|
|
322
|
+
{
|
|
323
|
+
return(1);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
static proc deleteUnluckyPrimes_default(alias list modresults)
|
|
327
|
+
{
|
|
328
|
+
return(list());
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
static proc pTest_default(string command, alias list args, alias def result,
|
|
332
|
+
int p)
|
|
333
|
+
{
|
|
334
|
+
return(1);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
static proc finalTest_default(string command, alias list args,
|
|
338
|
+
alias def result)
|
|
339
|
+
{
|
|
340
|
+
return(1);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
static proc farey_parallel(def farey_arg, bigint farey_N)
|
|
344
|
+
{
|
|
345
|
+
if(system("cpu")==0) { return(farey(farey_arg,farey_N)); }
|
|
346
|
+
arg_type = typeof(farey_arg);
|
|
347
|
+
if (arg_type != "bigint" && arg_type != "ideal" && arg_type != "module"
|
|
348
|
+
&& arg_type != "matrix" && arg_type != "list")
|
|
349
|
+
{ ERROR("wrong input type"); }
|
|
350
|
+
int i;
|
|
351
|
+
if (arg_type == "list")
|
|
352
|
+
{
|
|
353
|
+
int size_farey_arg = size(farey_arg);
|
|
354
|
+
for (i = size_farey_arg; i > 0; i--)
|
|
355
|
+
{
|
|
356
|
+
task t(i) = "Modular::farey_parallel", list(farey_arg[i], farey_N);
|
|
357
|
+
}
|
|
358
|
+
startTasks(t(1..size_farey_arg));
|
|
359
|
+
waitAllTasks(t(1..size_farey_arg));
|
|
360
|
+
list result;
|
|
361
|
+
for (i = size_farey_arg; i > 0; i--)
|
|
362
|
+
{
|
|
363
|
+
result[i] = getResult(t(i));
|
|
364
|
+
killTask(t(i));
|
|
365
|
+
}
|
|
366
|
+
return(result);
|
|
367
|
+
}
|
|
368
|
+
if (arg_type == "bigint" || arg_type == "matrix")
|
|
369
|
+
{ return(farey(farey_arg, farey_N)); }
|
|
370
|
+
// else: farey_arg is an ideal or a module
|
|
371
|
+
//if(hasQQCoefficient(basering))
|
|
372
|
+
//{
|
|
373
|
+
// return(farey(farey_arg,farey_N));
|
|
374
|
+
//}
|
|
375
|
+
exportto(Modular, farey_arg);
|
|
376
|
+
exportto(Modular, farey_N);
|
|
377
|
+
int size_arg = ncols(farey_arg);
|
|
378
|
+
int chunks = par_range(size_arg);
|
|
379
|
+
intvec range;
|
|
380
|
+
for (i = chunks; i > 0; i--)
|
|
381
|
+
{
|
|
382
|
+
range = par_range(size_arg, i);
|
|
383
|
+
task t(i) = "Modular::farey_task", list(range);
|
|
384
|
+
}
|
|
385
|
+
startTasks(t(1..chunks));
|
|
386
|
+
waitAllTasks(t(1..chunks));
|
|
387
|
+
def result = getResult(t(chunks));
|
|
388
|
+
for (i = chunks-1; i > 0; i--)
|
|
389
|
+
{
|
|
390
|
+
result = getResult(t(i)), result;
|
|
391
|
+
killTask(t(i));
|
|
392
|
+
}
|
|
393
|
+
kill farey_arg;
|
|
394
|
+
kill farey_N;
|
|
395
|
+
return(result);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
static proc farey_task(intvec range)
|
|
399
|
+
{
|
|
400
|
+
execute("def result = farey("+arg_type+"(farey_arg[range[1]..range[2]]),"
|
|
401
|
+
+" farey_N);");
|
|
402
|
+
return(result);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
static proc par_range(int N, list #)
|
|
406
|
+
{
|
|
407
|
+
int nchunks = 2*getcores();
|
|
408
|
+
if (nchunks > N) {
|
|
409
|
+
nchunks = N;
|
|
410
|
+
}
|
|
411
|
+
if (size(#)) {
|
|
412
|
+
int index = #[1];
|
|
413
|
+
intvec range = ((N*(index-1)) div nchunks)+1, (N*index) div nchunks;
|
|
414
|
+
return(range);
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
return(nchunks);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
static proc NbModProcs()
|
|
422
|
+
{
|
|
423
|
+
int available = max(1, system("semaphore", "get_value", sem_cores)+1);
|
|
424
|
+
int nb;
|
|
425
|
+
if (available < 16) {
|
|
426
|
+
nb = ((10 div available)+1-(10%available == 0))*available;
|
|
427
|
+
}
|
|
428
|
+
else { // gives approx. (log_2(available))^2
|
|
429
|
+
int tmp = available;
|
|
430
|
+
while (tmp > 1) {
|
|
431
|
+
tmp = tmp div 2;
|
|
432
|
+
nb++;
|
|
433
|
+
} // nb = log_2(available)
|
|
434
|
+
nb = ((2*nb+1)*available) div (2^nb) + (nb-1)^2 - 2;
|
|
435
|
+
}
|
|
436
|
+
return(nb);
|
|
437
|
+
}
|
|
438
|
+
|