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.

Files changed (490) hide show
  1. PySingular.cpython-314-aarch64-linux-gnu.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +490 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +6 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-6a2a8666.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-ac579979.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-66e33516.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-81de1160.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgf2x-fbd36f80.so.3.0.0 +0 -0
  11. passagemath_singular.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  12. passagemath_singular.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  13. passagemath_singular.libs/libgsl-e3525837.so.28.0.0 +0 -0
  14. passagemath_singular.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  15. passagemath_singular.libs/libntl-0043a3a2.so.44.0.1 +0 -0
  16. passagemath_singular.libs/libomalloc-0-06512335.9.6.so +0 -0
  17. passagemath_singular.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  18. passagemath_singular.libs/libpolys-4-cb7246b5.4.1.so +0 -0
  19. passagemath_singular.libs/libreadline-28330744.so.8.2 +0 -0
  20. passagemath_singular.libs/libsingular_resources-4-8c425241.4.1.so +0 -0
  21. passagemath_singular.libs/libtinfo-f81c2d16.so.6.3 +0 -0
  22. sage/algebras/all__sagemath_singular.py +3 -0
  23. sage/algebras/fusion_rings/all.py +19 -0
  24. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  25. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-aarch64-linux-gnu.so +0 -0
  26. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  27. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  28. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-aarch64-linux-gnu.so +0 -0
  29. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  30. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  31. sage/algebras/fusion_rings/fusion_double.py +899 -0
  32. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  33. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-aarch64-linux-gnu.so +0 -0
  34. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  35. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  36. sage/algebras/fusion_rings/shm_managers.cpython-314-aarch64-linux-gnu.so +0 -0
  37. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  38. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  39. sage/algebras/letterplace/all.py +1 -0
  40. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-aarch64-linux-gnu.so +0 -0
  41. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  42. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  43. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  45. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  46. sage/algebras/letterplace/letterplace_ideal.cpython-314-aarch64-linux-gnu.so +0 -0
  47. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  48. sage/algebras/quatalg/all.py +2 -0
  49. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  50. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-aarch64-linux-gnu.so +0 -0
  51. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  52. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  53. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  54. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  55. sage/all__sagemath_singular.py +11 -0
  56. sage/ext_data/all__sagemath_singular.py +1 -0
  57. sage/ext_data/singular/function_field/core.lib +98 -0
  58. sage/interfaces/all__sagemath_singular.py +1 -0
  59. sage/interfaces/singular.py +2835 -0
  60. sage/libs/all__sagemath_singular.py +1 -0
  61. sage/libs/singular/__init__.py +1 -0
  62. sage/libs/singular/decl.pxd +1168 -0
  63. sage/libs/singular/function.cpython-314-aarch64-linux-gnu.so +0 -0
  64. sage/libs/singular/function.pxd +87 -0
  65. sage/libs/singular/function.pyx +1901 -0
  66. sage/libs/singular/function_factory.py +61 -0
  67. sage/libs/singular/groebner_strategy.cpython-314-aarch64-linux-gnu.so +0 -0
  68. sage/libs/singular/groebner_strategy.pxd +22 -0
  69. sage/libs/singular/groebner_strategy.pyx +582 -0
  70. sage/libs/singular/option.cpython-314-aarch64-linux-gnu.so +0 -0
  71. sage/libs/singular/option.pyx +671 -0
  72. sage/libs/singular/polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/libs/singular/polynomial.pxd +39 -0
  74. sage/libs/singular/polynomial.pyx +661 -0
  75. sage/libs/singular/ring.cpython-314-aarch64-linux-gnu.so +0 -0
  76. sage/libs/singular/ring.pxd +58 -0
  77. sage/libs/singular/ring.pyx +893 -0
  78. sage/libs/singular/singular.cpython-314-aarch64-linux-gnu.so +0 -0
  79. sage/libs/singular/singular.pxd +72 -0
  80. sage/libs/singular/singular.pyx +1944 -0
  81. sage/libs/singular/standard_options.py +145 -0
  82. sage/matrix/all__sagemath_singular.py +1 -0
  83. sage/matrix/matrix_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  84. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  85. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  86. sage/rings/all__sagemath_singular.py +1 -0
  87. sage/rings/function_field/all__sagemath_singular.py +1 -0
  88. sage/rings/function_field/derivations_polymod.py +911 -0
  89. sage/rings/function_field/element_polymod.cpython-314-aarch64-linux-gnu.so +0 -0
  90. sage/rings/function_field/element_polymod.pyx +406 -0
  91. sage/rings/function_field/function_field_polymod.py +2611 -0
  92. sage/rings/function_field/ideal_polymod.py +1775 -0
  93. sage/rings/function_field/order_polymod.py +1475 -0
  94. sage/rings/function_field/place_polymod.py +681 -0
  95. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  96. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  98. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  99. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-aarch64-linux-gnu.so +0 -0
  100. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  101. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  102. sage/rings/polynomial/plural.cpython-314-aarch64-linux-gnu.so +0 -0
  103. sage/rings/polynomial/plural.pxd +48 -0
  104. sage/rings/polynomial/plural.pyx +3171 -0
  105. sage/symbolic/all__sagemath_singular.py +1 -0
  106. sage/symbolic/comparison_impl.pxi +428 -0
  107. sage/symbolic/constants_c_impl.pxi +178 -0
  108. sage/symbolic/expression.cpython-314-aarch64-linux-gnu.so +0 -0
  109. sage/symbolic/expression.pxd +7 -0
  110. sage/symbolic/expression.pyx +14200 -0
  111. sage/symbolic/getitem_impl.pxi +202 -0
  112. sage/symbolic/pynac.pxi +572 -0
  113. sage/symbolic/pynac_constant_impl.pxi +133 -0
  114. sage/symbolic/pynac_function_impl.pxi +206 -0
  115. sage/symbolic/pynac_impl.pxi +2576 -0
  116. sage/symbolic/pynac_wrap.h +124 -0
  117. sage/symbolic/series_impl.pxi +272 -0
  118. sage/symbolic/substitution_map_impl.pxi +94 -0
  119. sage_wheels/bin/ESingular +0 -0
  120. sage_wheels/bin/Singular +0 -0
  121. sage_wheels/bin/TSingular +0 -0
  122. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  123. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  124. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  125. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  126. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  127. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  128. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  129. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  130. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  131. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  132. sage_wheels/lib/singular/MOD/interval.la +41 -0
  133. sage_wheels/lib/singular/MOD/interval.so +0 -0
  134. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  135. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  136. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  137. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  138. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  139. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  140. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  146. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  147. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  148. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  149. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  150. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  151. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  152. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  153. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  154. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  155. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  156. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  157. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  158. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  159. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  160. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  161. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  162. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  163. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  164. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  165. sage_wheels/libexec/singular/MOD/surfex +16 -0
  166. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  167. sage_wheels/share/factory/gftables/10201 +342 -0
  168. sage_wheels/share/factory/gftables/1024 +37 -0
  169. sage_wheels/share/factory/gftables/10609 +356 -0
  170. sage_wheels/share/factory/gftables/11449 +384 -0
  171. sage_wheels/share/factory/gftables/11881 +398 -0
  172. sage_wheels/share/factory/gftables/121 +6 -0
  173. sage_wheels/share/factory/gftables/12167 +408 -0
  174. sage_wheels/share/factory/gftables/125 +7 -0
  175. sage_wheels/share/factory/gftables/12769 +428 -0
  176. sage_wheels/share/factory/gftables/128 +7 -0
  177. sage_wheels/share/factory/gftables/1331 +47 -0
  178. sage_wheels/share/factory/gftables/1369 +48 -0
  179. sage_wheels/share/factory/gftables/14641 +490 -0
  180. sage_wheels/share/factory/gftables/15625 +523 -0
  181. sage_wheels/share/factory/gftables/16 +3 -0
  182. sage_wheels/share/factory/gftables/16129 +540 -0
  183. sage_wheels/share/factory/gftables/16384 +549 -0
  184. sage_wheels/share/factory/gftables/16807 +563 -0
  185. sage_wheels/share/factory/gftables/1681 +58 -0
  186. sage_wheels/share/factory/gftables/169 +8 -0
  187. sage_wheels/share/factory/gftables/17161 +574 -0
  188. sage_wheels/share/factory/gftables/1849 +64 -0
  189. sage_wheels/share/factory/gftables/18769 +628 -0
  190. sage_wheels/share/factory/gftables/19321 +646 -0
  191. sage_wheels/share/factory/gftables/19683 +659 -0
  192. sage_wheels/share/factory/gftables/2048 +71 -0
  193. sage_wheels/share/factory/gftables/2187 +75 -0
  194. sage_wheels/share/factory/gftables/2197 +76 -0
  195. sage_wheels/share/factory/gftables/2209 +76 -0
  196. sage_wheels/share/factory/gftables/22201 +742 -0
  197. sage_wheels/share/factory/gftables/22801 +762 -0
  198. sage_wheels/share/factory/gftables/2401 +82 -0
  199. sage_wheels/share/factory/gftables/243 +11 -0
  200. sage_wheels/share/factory/gftables/24389 +815 -0
  201. sage_wheels/share/factory/gftables/24649 +824 -0
  202. sage_wheels/share/factory/gftables/25 +3 -0
  203. sage_wheels/share/factory/gftables/256 +11 -0
  204. sage_wheels/share/factory/gftables/26569 +888 -0
  205. sage_wheels/share/factory/gftables/27 +3 -0
  206. sage_wheels/share/factory/gftables/27889 +932 -0
  207. sage_wheels/share/factory/gftables/2809 +96 -0
  208. sage_wheels/share/factory/gftables/28561 +954 -0
  209. sage_wheels/share/factory/gftables/289 +12 -0
  210. sage_wheels/share/factory/gftables/29791 +995 -0
  211. sage_wheels/share/factory/gftables/29929 +1000 -0
  212. sage_wheels/share/factory/gftables/3125 +107 -0
  213. sage_wheels/share/factory/gftables/32 +4 -0
  214. sage_wheels/share/factory/gftables/32041 +1070 -0
  215. sage_wheels/share/factory/gftables/32761 +1094 -0
  216. sage_wheels/share/factory/gftables/32768 +1095 -0
  217. sage_wheels/share/factory/gftables/343 +14 -0
  218. sage_wheels/share/factory/gftables/3481 +118 -0
  219. sage_wheels/share/factory/gftables/361 +14 -0
  220. sage_wheels/share/factory/gftables/36481 +1218 -0
  221. sage_wheels/share/factory/gftables/3721 +126 -0
  222. sage_wheels/share/factory/gftables/37249 +1244 -0
  223. sage_wheels/share/factory/gftables/38809 +1296 -0
  224. sage_wheels/share/factory/gftables/39601 +1322 -0
  225. sage_wheels/share/factory/gftables/4 +3 -0
  226. sage_wheels/share/factory/gftables/4096 +139 -0
  227. sage_wheels/share/factory/gftables/44521 +1486 -0
  228. sage_wheels/share/factory/gftables/4489 +152 -0
  229. sage_wheels/share/factory/gftables/49 +4 -0
  230. sage_wheels/share/factory/gftables/4913 +166 -0
  231. sage_wheels/share/factory/gftables/49729 +1660 -0
  232. sage_wheels/share/factory/gftables/5041 +170 -0
  233. sage_wheels/share/factory/gftables/50653 +1691 -0
  234. sage_wheels/share/factory/gftables/512 +20 -0
  235. sage_wheels/share/factory/gftables/51529 +1720 -0
  236. sage_wheels/share/factory/gftables/52441 +1750 -0
  237. sage_wheels/share/factory/gftables/529 +20 -0
  238. sage_wheels/share/factory/gftables/5329 +180 -0
  239. sage_wheels/share/factory/gftables/54289 +1812 -0
  240. sage_wheels/share/factory/gftables/57121 +1906 -0
  241. sage_wheels/share/factory/gftables/58081 +1938 -0
  242. sage_wheels/share/factory/gftables/59049 +1971 -0
  243. sage_wheels/share/factory/gftables/6241 +210 -0
  244. sage_wheels/share/factory/gftables/625 +23 -0
  245. sage_wheels/share/factory/gftables/63001 +2102 -0
  246. sage_wheels/share/factory/gftables/64 +5 -0
  247. sage_wheels/share/factory/gftables/6561 +221 -0
  248. sage_wheels/share/factory/gftables/6859 +231 -0
  249. sage_wheels/share/factory/gftables/6889 +232 -0
  250. sage_wheels/share/factory/gftables/729 +27 -0
  251. sage_wheels/share/factory/gftables/7921 +266 -0
  252. sage_wheels/share/factory/gftables/8 +3 -0
  253. sage_wheels/share/factory/gftables/81 +5 -0
  254. sage_wheels/share/factory/gftables/8192 +276 -0
  255. sage_wheels/share/factory/gftables/841 +30 -0
  256. sage_wheels/share/factory/gftables/9 +3 -0
  257. sage_wheels/share/factory/gftables/9409 +316 -0
  258. sage_wheels/share/factory/gftables/961 +34 -0
  259. sage_wheels/share/info/singular.info +191898 -0
  260. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  261. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  262. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  263. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  264. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  265. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  266. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  267. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  268. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  269. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  270. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  271. sage_wheels/share/singular/LIB/all.lib +136 -0
  272. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  273. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  274. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  275. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  276. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  277. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  278. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  279. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  280. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  281. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  282. sage_wheels/share/singular/LIB/central.lib +2169 -0
  283. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  284. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  285. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  286. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  287. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  288. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  289. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  290. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  291. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  292. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  293. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  294. sage_wheels/share/singular/LIB/control.lib +1636 -0
  295. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  296. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  297. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  298. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  299. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  300. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  301. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  302. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  303. sage_wheels/share/singular/LIB/deform.lib +925 -0
  304. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  305. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  306. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  307. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  308. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  309. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  310. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  311. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  312. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  313. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  314. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  315. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  316. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  317. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  318. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  319. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  320. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  321. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  322. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  323. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  324. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  325. sage_wheels/share/singular/LIB/general.lib +1350 -0
  326. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  327. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  328. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  329. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  330. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  331. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  332. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  333. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  334. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  335. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  336. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  337. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  338. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  339. sage_wheels/share/singular/LIB/help.cnf +57 -0
  340. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  341. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  342. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  343. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  344. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  345. sage_wheels/share/singular/LIB/inout.lib +679 -0
  346. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  347. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  348. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  349. sage_wheels/share/singular/LIB/invar.lib +443 -0
  350. sage_wheels/share/singular/LIB/involut.lib +980 -0
  351. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  352. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  353. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  354. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  355. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  356. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  357. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  358. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  359. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  360. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  361. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  362. sage_wheels/share/singular/LIB/methods.lib +212 -0
  363. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  364. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  365. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  366. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  367. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  368. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  369. sage_wheels/share/singular/LIB/modular.lib +545 -0
  370. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  371. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  372. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  373. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  374. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  375. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  376. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  377. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  378. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  379. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  380. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  381. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  382. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  383. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  384. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  385. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  386. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  387. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  388. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  389. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  390. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  391. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  392. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  393. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  394. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  395. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  396. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  397. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  398. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  399. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  400. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  401. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  402. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  403. sage_wheels/share/singular/LIB/perron.lib +202 -0
  404. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  405. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  406. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  407. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  408. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  409. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  410. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  411. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  412. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  413. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  414. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  415. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  416. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  417. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  418. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  419. sage_wheels/share/singular/LIB/random.lib +455 -0
  420. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  421. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  422. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  423. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  424. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  425. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  426. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  427. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  428. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  429. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  430. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  431. sage_wheels/share/singular/LIB/resources.lib +170 -0
  432. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  433. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  434. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  435. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  436. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  437. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  438. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  439. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  440. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  441. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  442. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  443. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  444. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  445. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  446. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  447. sage_wheels/share/singular/LIB/sets.lib +524 -0
  448. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  449. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  450. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  451. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  452. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  453. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  454. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  455. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  456. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  457. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  458. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  459. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  460. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  461. sage_wheels/share/singular/LIB/surf.lib +506 -0
  462. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  463. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  464. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  465. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  466. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  467. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  468. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  469. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  470. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  471. sage_wheels/share/singular/LIB/template.lib +116 -0
  472. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  473. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  474. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  475. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  476. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  477. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  478. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  479. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  480. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  481. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  482. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  483. sage_wheels/share/singular/emacs/COPYING +44 -0
  484. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  485. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  486. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  487. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  488. sage_wheels/share/singular/emacs/singular.el +4273 -0
  489. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  490. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,545 @@
1
+ ////////////////////////////////////////////////////////////////////
2
+ version="version modular.lib 4.4.1.1 Feb_2025 "; // $Id: 46167e43bde95cf43e83f5255177ca733f180d56 $
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
+ if(system("cpu")>1)
132
+ {
133
+ // compute list of primes
134
+ if (nAllPrimes == 0)
135
+ {
136
+ nNewPrimes = NbModProcs();
137
+ }
138
+ else
139
+ {
140
+ ncores_available = max(1, system("semaphore", "get_value",
141
+ sem_cores)+1);
142
+ if (nAllPrimes < ncores_available)
143
+ {
144
+ nNewPrimes = nAllPrimes;
145
+ }
146
+ else
147
+ {
148
+ nNewPrimes = (nAllPrimes div ncores_available)
149
+ *ncores_available;
150
+ }
151
+ }
152
+ primes = primeList(nNewPrimes, pmax);
153
+ pmax = primes[size(primes)]-1;
154
+ nAllPrimes = nAllPrimes+nNewPrimes;
155
+
156
+ // do computation modulo several primes
157
+ for (i = size(primes); i > 0; i--)
158
+ {
159
+ task t(i) = "Modular::modp", primes[i];
160
+ }
161
+ startTasks(t(1..size(primes)));
162
+ waitAllTasks(t(1..size(primes)));
163
+ for (i = size(primes); i > 0; i--)
164
+ {
165
+ modresults[i] = getResult(t(i));
166
+ killTask(t(i));
167
+ kill t(i);
168
+ }
169
+
170
+ // delete unlucky primes
171
+ indices = deleteUnluckyPrimes(modresults);
172
+ indices = sort(indices)[1];
173
+ for (i = size(indices); i > 1; i--)
174
+ {
175
+ if (indices[i] == indices[i-1])
176
+ {
177
+ indices = delete(indices, i);
178
+ }
179
+ }
180
+ for (i = size(indices); i > 0; i--)
181
+ {
182
+ modresults = delete(modresults, indices[i]);
183
+ primes = delete(primes, indices[i]);
184
+ }
185
+
186
+ // lift result
187
+ if (N == 1)
188
+ {
189
+ result_lift = chinrem_recursive(modresults, primes);
190
+ }
191
+ else
192
+ {
193
+ result_lift = chinrem_recursive(list(result_lift)+modresults,
194
+ list(N)+primes);
195
+ }
196
+ modresults = list();
197
+ for (i = size(primes); i > 0; i--)
198
+ {
199
+ N = N*primes[i];
200
+ }
201
+
202
+ // apply farey
203
+ result = farey_parallel(result_lift, N);
204
+
205
+ // pTest
206
+ p = prime(random(pmax div 2, pmax-1));
207
+ while (!Modular::primeTest(p, Arguments))
208
+ {
209
+ if (p <= 2) { ERROR("no more primes"); }
210
+ p = prime(random(p div 2, p-1));
211
+ }
212
+ if (!pTest(Command, Arguments, result, p)) { continue; }
213
+
214
+ // finalTest
215
+ if (finalTest(Command, Arguments, result)) break;
216
+ }
217
+ else
218
+ {
219
+ // compute list of primes
220
+ nNewPrimes = 3;
221
+ primes = primeList(nNewPrimes, pmax);
222
+ pmax = primes[size(primes)]-1;
223
+ nAllPrimes = nAllPrimes+nNewPrimes;
224
+
225
+ // do computation modulo several primes
226
+ for (i = size(primes); i > 0; i--)
227
+ {
228
+ modresults[i]=Modular::modp(primes[i]);
229
+ }
230
+
231
+ // delete unlucky primes
232
+ indices = deleteUnluckyPrimes(modresults);
233
+ indices = sort(indices)[1];
234
+ for (i = size(indices); i > 1; i--)
235
+ {
236
+ if (indices[i] == indices[i-1])
237
+ {
238
+ indices = delete(indices, i);
239
+ }
240
+ }
241
+ for (i = size(indices); i > 0; i--)
242
+ {
243
+ modresults = delete(modresults, indices[i]);
244
+ primes = delete(primes, indices[i]);
245
+ }
246
+
247
+ // lift result
248
+ if (N == 1)
249
+ {
250
+ result_lift = chinrem_recursive(modresults, primes);
251
+ }
252
+ else
253
+ {
254
+ result_lift = chinrem_recursive(list(result_lift)+modresults,
255
+ list(N)+primes);
256
+ }
257
+ modresults = list();
258
+ for (i = size(primes); i > 0; i--)
259
+ {
260
+ N = N*primes[i];
261
+ }
262
+
263
+ // apply farey
264
+ result = farey_parallel(result_lift, N);
265
+
266
+ // pTest
267
+ p = prime(random(pmax div 2, pmax-1));
268
+ while (!Modular::primeTest(p, Arguments))
269
+ {
270
+ if (p <= 2) { ERROR("no more primes"); }
271
+ p = prime(random(p div 2, p-1));
272
+ }
273
+ if (!pTest(Command, Arguments, result, p)) { continue; }
274
+
275
+ // finalTest
276
+ if (finalTest(Command, Arguments, result)) break;
277
+ }
278
+ }
279
+
280
+ /* kill exported data */
281
+ kill Command;
282
+ kill Arguments;
283
+ kill primeTest;
284
+
285
+ /* return of result */
286
+ return(result);
287
+ }
288
+ example
289
+ {
290
+ "EXAMPLE:";
291
+ echo = 2;
292
+ ring R = 0, (x,y), dp;
293
+ ideal I = x9y2+x10, x2y7-y8;
294
+ modular("std", list(I));
295
+ }
296
+
297
+ static proc chinrem_recursive(list modresults, list moduli)
298
+ {
299
+ if (typeof(modresults[1]) != "list")
300
+ {
301
+ return(chinrem(modresults, moduli));
302
+ }
303
+ // if typeof(modresults[1]) == "list", then we assume
304
+ // size(modresults[1]) == size(modresults[k])
305
+ // for k = 2, ..., size(modresults)
306
+ int n_sublists = size(modresults[1]);
307
+ int i, j;
308
+ list modresults_sublists;
309
+ for (j = n_sublists; j > 0; j--)
310
+ {
311
+ modresults_sublists[j] = list();
312
+ for (i = size(modresults); i > 0; i--)
313
+ {
314
+ modresults_sublists[j][i] = modresults[i][j];
315
+ }
316
+ task t(j) = "Modular::chinrem_recursive",
317
+ list(modresults_sublists[j], moduli);
318
+ }
319
+ startTasks(t(1..n_sublists));
320
+ waitAllTasks(t(1..n_sublists));
321
+ list result;
322
+ for (j = n_sublists; j > 0; j--)
323
+ {
324
+ result[j] = getResult(t(j));
325
+ killTask(t(j));
326
+ }
327
+ return(result);
328
+ }
329
+
330
+ static proc primeList(int n, int pmax)
331
+ {
332
+ list primes;
333
+ int p = pmax;
334
+ int i;
335
+ if (system("cpu")>1)
336
+ {
337
+ for (i = 1; i <= n; i++)
338
+ {
339
+ if (p < 2)
340
+ { ERROR("no more primes"); }
341
+ p = prime(p);
342
+ task t(i) = "Modular::primeList_task", list(p);
343
+ p--;
344
+ }
345
+ startTasks(t(1..n));
346
+ waitAllTasks(t(1..n));
347
+ int j;
348
+ for (i = 1; i <= n; i++)
349
+ {
350
+ if (getResult(t(i)))
351
+ {
352
+ j++;
353
+ primes[j] = getArguments(t(i))[1];
354
+ }
355
+ killTask(t(i));
356
+ }
357
+ }
358
+ else
359
+ {
360
+ int j;
361
+ for (i = 1; i <= n; i++)
362
+ {
363
+ if (p < 2)
364
+ { ERROR("no more primes"); }
365
+ p = prime(p);
366
+ if (Modular::primeList_task(p))
367
+ {
368
+ j++;
369
+ primes[j]=p;
370
+ }
371
+ p--;
372
+ }
373
+ }
374
+ if (j < n)
375
+ {
376
+ primes = primes+primeList(n-j, p);
377
+ }
378
+ return(primes);
379
+ }
380
+
381
+ static proc primeList_task(int p)
382
+ {
383
+ return(Modular::primeTest(p, Arguments));
384
+ }
385
+
386
+ static proc modp(int p)
387
+ {
388
+ def br = basering;
389
+ list lbr = ringlist(br);
390
+ if (typeof(lbr[1]) == "int")
391
+ { lbr[1] = p; }
392
+ else
393
+ { lbr[1][1] = p; }
394
+ def rp = ring(lbr);
395
+ setring(rp);
396
+ list args = fetch(br, Arguments);
397
+ execute("def result = "+Command+"("+Tasks::argsToString("args", size(args))
398
+ +");");
399
+ setring(br);
400
+ def result = fetch(rp, result);
401
+ return(result);
402
+ }
403
+
404
+ static proc primeTest_default(int p, alias list args)
405
+ {
406
+ return(1);
407
+ }
408
+
409
+ static proc deleteUnluckyPrimes_default(alias list modresults)
410
+ {
411
+ return(list());
412
+ }
413
+
414
+ static proc pTest_default(string command, alias list args, alias def result,
415
+ int p)
416
+ {
417
+ return(1);
418
+ }
419
+
420
+ static proc finalTest_default(string command, alias list args,
421
+ alias def result)
422
+ {
423
+ return(1);
424
+ }
425
+
426
+ static proc farey_parallel(def farey_arg, bigint farey_N)
427
+ {
428
+ arg_type = typeof(farey_arg);
429
+ if (arg_type != "bigint" && arg_type != "ideal" && arg_type != "module"
430
+ && arg_type != "matrix" && arg_type != "list")
431
+ { ERROR("wrong input type"); }
432
+ int i;
433
+ if (arg_type == "list")
434
+ {
435
+ if(system("cpu")>1)
436
+ {
437
+ int size_farey_arg = size(farey_arg);
438
+ for (i = size_farey_arg; i > 0; i--)
439
+ {
440
+ task t(i) = "Modular::farey_parallel", list(farey_arg[i], farey_N);
441
+ }
442
+ startTasks(t(1..size_farey_arg));
443
+ waitAllTasks(t(1..size_farey_arg));
444
+ list result;
445
+ for (i = size_farey_arg; i > 0; i--)
446
+ {
447
+ result[i] = getResult(t(i));
448
+ killTask(t(i));
449
+ }
450
+ }
451
+ else
452
+ {
453
+ int size_farey_arg = size(farey_arg);
454
+ for (i = size_farey_arg; i > 0; i--)
455
+ {
456
+ result[i] = Modular::farey_parallel(farey_arg[i], farey_N);
457
+ }
458
+ }
459
+ return(result);
460
+ }
461
+ if (arg_type == "bigint" || arg_type == "matrix")
462
+ { return(farey(farey_arg, farey_N)); }
463
+ // else: farey_arg is an ideal or a module
464
+ //if(hasQQCoefficient(basering))
465
+ //{
466
+ // return(farey(farey_arg,farey_N));
467
+ //}
468
+ exportto(Modular, farey_arg);
469
+ if (defined(farey_N)>1) {exportto(Modular, farey_N);}
470
+ int size_arg = ncols(farey_arg);
471
+ int chunks = par_range(size_arg);
472
+ intvec range;
473
+ if(system("cpu")>1)
474
+ {
475
+ for (i = chunks; i > 0; i--)
476
+ {
477
+ range = par_range(size_arg, i);
478
+ task t(i) = "Modular::farey_task", list(range);
479
+ }
480
+ startTasks(t(1..chunks));
481
+ waitAllTasks(t(1..chunks));
482
+ def result = getResult(t(chunks));
483
+ for (i = chunks-1; i > 0; i--)
484
+ {
485
+ result = getResult(t(i)), result;
486
+ killTask(t(i));
487
+ }
488
+ }
489
+ else
490
+ {
491
+ def result;
492
+ range = par_range(size_arg, chunks);
493
+ result = Modular::farey_task(range);
494
+ for (i = chunks-1; i > 0; i--)
495
+ {
496
+ range = par_range(size_arg, i);
497
+ result = Modular::farey_task(range),result;
498
+ }
499
+ }
500
+ kill farey_arg;
501
+ kill farey_N;
502
+ return(result);
503
+ }
504
+
505
+ static proc farey_task(intvec range)
506
+ {
507
+ execute("def result = farey("+arg_type+"(farey_arg[range[1]..range[2]]),"
508
+ +" farey_N);");
509
+ return(result);
510
+ }
511
+
512
+ static proc par_range(int N, list #)
513
+ {
514
+ int nchunks = 2*getcores();
515
+ if (nchunks > N) {
516
+ nchunks = N;
517
+ }
518
+ if (size(#)) {
519
+ int index = #[1];
520
+ intvec range = ((N*(index-1)) div nchunks)+1, (N*index) div nchunks;
521
+ return(range);
522
+ }
523
+ else {
524
+ return(nchunks);
525
+ }
526
+ }
527
+
528
+ static proc NbModProcs()
529
+ {
530
+ int available = max(1, system("semaphore", "get_value", sem_cores)+1);
531
+ int nb;
532
+ if (available < 16) {
533
+ nb = ((10 div available)+1-(10%available == 0))*available;
534
+ }
535
+ else { // gives approx. (log_2(available))^2
536
+ int tmp = available;
537
+ while (tmp > 1) {
538
+ tmp = tmp div 2;
539
+ nb++;
540
+ } // nb = log_2(available)
541
+ nb = ((2*nb+1)*available) div (2^nb) + (nb-1)^2 - 2;
542
+ }
543
+ return(nb);
544
+ }
545
+