passagemath-singular 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of passagemath-singular might be problematic. Click here for more details.

Files changed (493) hide show
  1. PySingular.cpython-314-x86_64-linux-musl.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +493 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +5 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-67059f19.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-30166d29.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-9d37bcf4.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-fd6f12fc.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgcc_s-0cd532bd.so.1 +0 -0
  11. passagemath_singular.libs/libgf2x-9e30c3e3.so.3.0.0 +0 -0
  12. passagemath_singular.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  13. passagemath_singular.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  14. passagemath_singular.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  15. passagemath_singular.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  16. passagemath_singular.libs/libncursesw-9c9e32c3.so.6.5 +0 -0
  17. passagemath_singular.libs/libntl-26885ca2.so.44.0.1 +0 -0
  18. passagemath_singular.libs/libomalloc-0-e9ff96db.9.6.so +0 -0
  19. passagemath_singular.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  20. passagemath_singular.libs/libpolys-4-8bcf8e7d.4.1.so +0 -0
  21. passagemath_singular.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  22. passagemath_singular.libs/libreadline-06542304.so.8.2 +0 -0
  23. passagemath_singular.libs/libsingular_resources-4-73bf7623.4.1.so +0 -0
  24. passagemath_singular.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
  25. sage/algebras/all__sagemath_singular.py +3 -0
  26. sage/algebras/fusion_rings/all.py +19 -0
  27. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  28. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-x86_64-linux-musl.so +0 -0
  29. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  30. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  31. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-x86_64-linux-musl.so +0 -0
  32. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  33. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  34. sage/algebras/fusion_rings/fusion_double.py +899 -0
  35. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  36. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-x86_64-linux-musl.so +0 -0
  37. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  38. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  39. sage/algebras/fusion_rings/shm_managers.cpython-314-x86_64-linux-musl.so +0 -0
  40. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  41. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  42. sage/algebras/letterplace/all.py +1 -0
  43. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-x86_64-linux-musl.so +0 -0
  44. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  45. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  46. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-x86_64-linux-musl.so +0 -0
  47. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  48. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  49. sage/algebras/letterplace/letterplace_ideal.cpython-314-x86_64-linux-musl.so +0 -0
  50. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  51. sage/algebras/quatalg/all.py +2 -0
  52. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  53. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-x86_64-linux-musl.so +0 -0
  54. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  55. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  56. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  57. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  58. sage/all__sagemath_singular.py +11 -0
  59. sage/ext_data/all__sagemath_singular.py +1 -0
  60. sage/ext_data/singular/function_field/core.lib +98 -0
  61. sage/interfaces/all__sagemath_singular.py +1 -0
  62. sage/interfaces/singular.py +2835 -0
  63. sage/libs/all__sagemath_singular.py +1 -0
  64. sage/libs/singular/__init__.py +1 -0
  65. sage/libs/singular/decl.pxd +1168 -0
  66. sage/libs/singular/function.cpython-314-x86_64-linux-musl.so +0 -0
  67. sage/libs/singular/function.pxd +87 -0
  68. sage/libs/singular/function.pyx +1901 -0
  69. sage/libs/singular/function_factory.py +61 -0
  70. sage/libs/singular/groebner_strategy.cpython-314-x86_64-linux-musl.so +0 -0
  71. sage/libs/singular/groebner_strategy.pxd +22 -0
  72. sage/libs/singular/groebner_strategy.pyx +582 -0
  73. sage/libs/singular/option.cpython-314-x86_64-linux-musl.so +0 -0
  74. sage/libs/singular/option.pyx +671 -0
  75. sage/libs/singular/polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  76. sage/libs/singular/polynomial.pxd +39 -0
  77. sage/libs/singular/polynomial.pyx +661 -0
  78. sage/libs/singular/ring.cpython-314-x86_64-linux-musl.so +0 -0
  79. sage/libs/singular/ring.pxd +58 -0
  80. sage/libs/singular/ring.pyx +893 -0
  81. sage/libs/singular/singular.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/libs/singular/singular.pxd +72 -0
  83. sage/libs/singular/singular.pyx +1944 -0
  84. sage/libs/singular/standard_options.py +145 -0
  85. sage/matrix/all__sagemath_singular.py +1 -0
  86. sage/matrix/matrix_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  87. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  88. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  89. sage/rings/all__sagemath_singular.py +1 -0
  90. sage/rings/function_field/all__sagemath_singular.py +1 -0
  91. sage/rings/function_field/derivations_polymod.py +911 -0
  92. sage/rings/function_field/element_polymod.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/rings/function_field/element_polymod.pyx +406 -0
  94. sage/rings/function_field/function_field_polymod.py +2611 -0
  95. sage/rings/function_field/ideal_polymod.py +1775 -0
  96. sage/rings/function_field/order_polymod.py +1475 -0
  97. sage/rings/function_field/place_polymod.py +681 -0
  98. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  99. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-x86_64-linux-musl.so +0 -0
  100. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  101. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  102. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  104. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  105. sage/rings/polynomial/plural.cpython-314-x86_64-linux-musl.so +0 -0
  106. sage/rings/polynomial/plural.pxd +48 -0
  107. sage/rings/polynomial/plural.pyx +3171 -0
  108. sage/symbolic/all__sagemath_singular.py +1 -0
  109. sage/symbolic/comparison_impl.pxi +428 -0
  110. sage/symbolic/constants_c_impl.pxi +178 -0
  111. sage/symbolic/expression.cpython-314-x86_64-linux-musl.so +0 -0
  112. sage/symbolic/expression.pxd +7 -0
  113. sage/symbolic/expression.pyx +14200 -0
  114. sage/symbolic/getitem_impl.pxi +202 -0
  115. sage/symbolic/pynac.pxi +572 -0
  116. sage/symbolic/pynac_constant_impl.pxi +133 -0
  117. sage/symbolic/pynac_function_impl.pxi +206 -0
  118. sage/symbolic/pynac_impl.pxi +2576 -0
  119. sage/symbolic/pynac_wrap.h +124 -0
  120. sage/symbolic/series_impl.pxi +272 -0
  121. sage/symbolic/substitution_map_impl.pxi +94 -0
  122. sage_wheels/bin/ESingular +0 -0
  123. sage_wheels/bin/Singular +0 -0
  124. sage_wheels/bin/TSingular +0 -0
  125. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  126. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  127. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  128. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  129. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  130. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  131. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  132. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  133. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  134. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  135. sage_wheels/lib/singular/MOD/interval.la +41 -0
  136. sage_wheels/lib/singular/MOD/interval.so +0 -0
  137. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  138. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  139. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  140. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  146. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  147. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  148. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  149. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  150. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  151. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  152. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  153. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  154. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  155. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  156. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  157. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  158. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  159. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  160. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  161. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  162. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  163. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  164. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  165. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  166. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  167. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  168. sage_wheels/libexec/singular/MOD/surfex +16 -0
  169. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  170. sage_wheels/share/factory/gftables/10201 +342 -0
  171. sage_wheels/share/factory/gftables/1024 +37 -0
  172. sage_wheels/share/factory/gftables/10609 +356 -0
  173. sage_wheels/share/factory/gftables/11449 +384 -0
  174. sage_wheels/share/factory/gftables/11881 +398 -0
  175. sage_wheels/share/factory/gftables/121 +6 -0
  176. sage_wheels/share/factory/gftables/12167 +408 -0
  177. sage_wheels/share/factory/gftables/125 +7 -0
  178. sage_wheels/share/factory/gftables/12769 +428 -0
  179. sage_wheels/share/factory/gftables/128 +7 -0
  180. sage_wheels/share/factory/gftables/1331 +47 -0
  181. sage_wheels/share/factory/gftables/1369 +48 -0
  182. sage_wheels/share/factory/gftables/14641 +490 -0
  183. sage_wheels/share/factory/gftables/15625 +523 -0
  184. sage_wheels/share/factory/gftables/16 +3 -0
  185. sage_wheels/share/factory/gftables/16129 +540 -0
  186. sage_wheels/share/factory/gftables/16384 +549 -0
  187. sage_wheels/share/factory/gftables/16807 +563 -0
  188. sage_wheels/share/factory/gftables/1681 +58 -0
  189. sage_wheels/share/factory/gftables/169 +8 -0
  190. sage_wheels/share/factory/gftables/17161 +574 -0
  191. sage_wheels/share/factory/gftables/1849 +64 -0
  192. sage_wheels/share/factory/gftables/18769 +628 -0
  193. sage_wheels/share/factory/gftables/19321 +646 -0
  194. sage_wheels/share/factory/gftables/19683 +659 -0
  195. sage_wheels/share/factory/gftables/2048 +71 -0
  196. sage_wheels/share/factory/gftables/2187 +75 -0
  197. sage_wheels/share/factory/gftables/2197 +76 -0
  198. sage_wheels/share/factory/gftables/2209 +76 -0
  199. sage_wheels/share/factory/gftables/22201 +742 -0
  200. sage_wheels/share/factory/gftables/22801 +762 -0
  201. sage_wheels/share/factory/gftables/2401 +82 -0
  202. sage_wheels/share/factory/gftables/243 +11 -0
  203. sage_wheels/share/factory/gftables/24389 +815 -0
  204. sage_wheels/share/factory/gftables/24649 +824 -0
  205. sage_wheels/share/factory/gftables/25 +3 -0
  206. sage_wheels/share/factory/gftables/256 +11 -0
  207. sage_wheels/share/factory/gftables/26569 +888 -0
  208. sage_wheels/share/factory/gftables/27 +3 -0
  209. sage_wheels/share/factory/gftables/27889 +932 -0
  210. sage_wheels/share/factory/gftables/2809 +96 -0
  211. sage_wheels/share/factory/gftables/28561 +954 -0
  212. sage_wheels/share/factory/gftables/289 +12 -0
  213. sage_wheels/share/factory/gftables/29791 +995 -0
  214. sage_wheels/share/factory/gftables/29929 +1000 -0
  215. sage_wheels/share/factory/gftables/3125 +107 -0
  216. sage_wheels/share/factory/gftables/32 +4 -0
  217. sage_wheels/share/factory/gftables/32041 +1070 -0
  218. sage_wheels/share/factory/gftables/32761 +1094 -0
  219. sage_wheels/share/factory/gftables/32768 +1095 -0
  220. sage_wheels/share/factory/gftables/343 +14 -0
  221. sage_wheels/share/factory/gftables/3481 +118 -0
  222. sage_wheels/share/factory/gftables/361 +14 -0
  223. sage_wheels/share/factory/gftables/36481 +1218 -0
  224. sage_wheels/share/factory/gftables/3721 +126 -0
  225. sage_wheels/share/factory/gftables/37249 +1244 -0
  226. sage_wheels/share/factory/gftables/38809 +1296 -0
  227. sage_wheels/share/factory/gftables/39601 +1322 -0
  228. sage_wheels/share/factory/gftables/4 +3 -0
  229. sage_wheels/share/factory/gftables/4096 +139 -0
  230. sage_wheels/share/factory/gftables/44521 +1486 -0
  231. sage_wheels/share/factory/gftables/4489 +152 -0
  232. sage_wheels/share/factory/gftables/49 +4 -0
  233. sage_wheels/share/factory/gftables/4913 +166 -0
  234. sage_wheels/share/factory/gftables/49729 +1660 -0
  235. sage_wheels/share/factory/gftables/5041 +170 -0
  236. sage_wheels/share/factory/gftables/50653 +1691 -0
  237. sage_wheels/share/factory/gftables/512 +20 -0
  238. sage_wheels/share/factory/gftables/51529 +1720 -0
  239. sage_wheels/share/factory/gftables/52441 +1750 -0
  240. sage_wheels/share/factory/gftables/529 +20 -0
  241. sage_wheels/share/factory/gftables/5329 +180 -0
  242. sage_wheels/share/factory/gftables/54289 +1812 -0
  243. sage_wheels/share/factory/gftables/57121 +1906 -0
  244. sage_wheels/share/factory/gftables/58081 +1938 -0
  245. sage_wheels/share/factory/gftables/59049 +1971 -0
  246. sage_wheels/share/factory/gftables/6241 +210 -0
  247. sage_wheels/share/factory/gftables/625 +23 -0
  248. sage_wheels/share/factory/gftables/63001 +2102 -0
  249. sage_wheels/share/factory/gftables/64 +5 -0
  250. sage_wheels/share/factory/gftables/6561 +221 -0
  251. sage_wheels/share/factory/gftables/6859 +231 -0
  252. sage_wheels/share/factory/gftables/6889 +232 -0
  253. sage_wheels/share/factory/gftables/729 +27 -0
  254. sage_wheels/share/factory/gftables/7921 +266 -0
  255. sage_wheels/share/factory/gftables/8 +3 -0
  256. sage_wheels/share/factory/gftables/81 +5 -0
  257. sage_wheels/share/factory/gftables/8192 +276 -0
  258. sage_wheels/share/factory/gftables/841 +30 -0
  259. sage_wheels/share/factory/gftables/9 +3 -0
  260. sage_wheels/share/factory/gftables/9409 +316 -0
  261. sage_wheels/share/factory/gftables/961 +34 -0
  262. sage_wheels/share/info/singular.info +191898 -0
  263. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  264. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  265. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  266. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  267. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  268. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  269. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  270. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  271. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  272. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  273. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  274. sage_wheels/share/singular/LIB/all.lib +136 -0
  275. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  276. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  277. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  278. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  279. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  280. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  281. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  282. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  283. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  284. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  285. sage_wheels/share/singular/LIB/central.lib +2169 -0
  286. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  287. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  288. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  289. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  290. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  291. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  292. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  293. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  294. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  295. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  296. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  297. sage_wheels/share/singular/LIB/control.lib +1636 -0
  298. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  299. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  300. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  301. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  302. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  303. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  304. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  305. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  306. sage_wheels/share/singular/LIB/deform.lib +925 -0
  307. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  308. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  309. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  310. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  311. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  312. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  313. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  314. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  315. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  316. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  317. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  318. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  319. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  320. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  321. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  322. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  323. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  324. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  325. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  326. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  327. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  328. sage_wheels/share/singular/LIB/general.lib +1350 -0
  329. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  330. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  331. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  332. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  333. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  334. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  335. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  336. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  337. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  338. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  339. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  340. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  341. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  342. sage_wheels/share/singular/LIB/help.cnf +57 -0
  343. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  344. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  345. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  346. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  347. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  348. sage_wheels/share/singular/LIB/inout.lib +679 -0
  349. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  350. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  351. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  352. sage_wheels/share/singular/LIB/invar.lib +443 -0
  353. sage_wheels/share/singular/LIB/involut.lib +980 -0
  354. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  355. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  356. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  357. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  358. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  359. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  360. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  361. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  362. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  363. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  364. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  365. sage_wheels/share/singular/LIB/methods.lib +212 -0
  366. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  367. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  368. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  369. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  370. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  371. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  372. sage_wheels/share/singular/LIB/modular.lib +545 -0
  373. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  374. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  375. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  376. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  377. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  378. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  379. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  380. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  381. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  382. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  383. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  384. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  385. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  386. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  387. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  388. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  389. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  390. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  391. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  392. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  393. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  394. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  395. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  396. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  397. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  398. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  399. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  400. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  401. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  402. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  403. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  404. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  405. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  406. sage_wheels/share/singular/LIB/perron.lib +202 -0
  407. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  408. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  409. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  410. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  411. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  412. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  413. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  414. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  415. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  416. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  417. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  418. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  419. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  420. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  421. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  422. sage_wheels/share/singular/LIB/random.lib +455 -0
  423. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  424. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  425. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  426. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  427. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  428. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  429. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  430. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  431. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  432. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  433. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  434. sage_wheels/share/singular/LIB/resources.lib +170 -0
  435. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  436. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  437. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  438. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  439. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  440. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  441. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  442. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  443. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  444. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  445. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  446. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  447. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  448. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  449. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  450. sage_wheels/share/singular/LIB/sets.lib +524 -0
  451. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  452. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  453. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  454. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  455. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  456. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  457. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  458. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  459. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  460. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  461. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  462. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  463. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  464. sage_wheels/share/singular/LIB/surf.lib +506 -0
  465. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  466. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  467. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  468. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  469. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  470. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  471. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  472. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  473. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  474. sage_wheels/share/singular/LIB/template.lib +116 -0
  475. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  476. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  477. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  478. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  479. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  480. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  481. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  482. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  483. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  484. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  485. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  486. sage_wheels/share/singular/emacs/COPYING +44 -0
  487. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  488. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  489. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  490. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  491. sage_wheels/share/singular/emacs/singular.el +4273 -0
  492. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  493. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,1278 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ version="version modprimdec.lib 4.4.0.7 Jan_2014 "; //$Id: 9573497bec1b34b20ed6b267445b396a2739f9e0 $
3
+ category="Commutative Algebra";
4
+ info="
5
+ LIBRARY: modprimdec.lib Primary Decomposition via Modular Methods
6
+
7
+ AUTHOR: Andreas Steenpass
8
+
9
+ OVERVIEW:
10
+ A library offering a modular version of the primary decomposition algorithm of Gianni, Trager, and Zacharias. The procedures are implemented to be used over the rationals.
11
+
12
+ PROCEDURES:
13
+ modPrimdecGTZ(); Primary Decomposition by GTZ via Modular Methods
14
+
15
+ SEE ALSO: primdec_lib; assprimeszerodim_lib
16
+ KEYWORDS: Primary decomposition
17
+ ";
18
+
19
+ LIB "general.lib";
20
+ LIB "elim.lib";
21
+ LIB "polylib.lib";
22
+ LIB "random.lib";
23
+ LIB "inout.lib";
24
+ LIB "matrix.lib";
25
+ LIB "triang.lib";
26
+ LIB "ring.lib";
27
+ LIB "primdec.lib";
28
+ LIB "tasks.lib";
29
+ LIB "parallel.lib";
30
+ LIB "modstd.lib";
31
+ LIB "modquotient.lib";
32
+ LIB "assprimeszerodim.lib";
33
+
34
+ ///////////////////////////////////////////////////////////////////////////////
35
+ //
36
+ // modPrimdecGTZ
37
+ //
38
+ ///////////////////////////////////////////////////////////////////////////////
39
+
40
+ proc modPrimdecGTZ(ideal I, list #)
41
+ "USAGE: modPrimdecGTZ(I, #); I ideal, # an optional list which is either empty (not entered) or consists of precisely one integer which is 0 or 1.
42
+ ASSUME: The basering of I is defined over the rationals.
43
+ RETURN: A primary decomposition of I.
44
+ NOTE: - The final result will be checked for correctness if # is either empty (not entered) or if #[1] = 1. Without the check, the functions reurns a result which is correct with high probability.@*
45
+ - For local orderings, the result represents a primary decomposition in the localization
46
+ of the polynomial ring, not in the power series ring.
47
+ EXAMPLE: example modPrimdecGTZ; shows an example
48
+ "
49
+ {
50
+ /* read optional parameter */
51
+ int mod_only = 0;
52
+ if(size(#) > 0)
53
+ {
54
+ if(size(#) > 1 || typeof(#[1]) != "int")
55
+ {
56
+ ERROR("wrong optional parameter");
57
+ }
58
+ mod_only = #[1];
59
+ }
60
+
61
+ /* compute a standard basis if necessary */
62
+ if(!attrib(I, "isSB"))
63
+ {
64
+ I = modStd(I);
65
+ }
66
+
67
+ /* call wrapper and test the result */
68
+ list L = primdecGTZ_wrapper(I, 0, mod_only);
69
+ if(!test_primdec(I, L))
70
+ {
71
+ L = primdecGTZ_wrapper(I, 1, mod_only);
72
+ }
73
+ return(L);
74
+ }
75
+ example
76
+ { "EXAMPLE:"; echo = 2;
77
+ ring R = 0, (x,y), dp;
78
+ ideal I = x9y2+x10, x2y7-y8;
79
+ modPrimdecGTZ(I);
80
+ }
81
+
82
+ static proc test_primdec(ideal i_test, list L_test)
83
+ {
84
+ int i;
85
+ for(i = size(L_test); i > 0; i--)
86
+ {
87
+ if(!attrib(L_test[i][1], "isSB"))
88
+ {
89
+ L_test[i][1] = modStd(L_test[i][1]);
90
+ }
91
+ if(!attrib(L_test[i][2], "isSB"))
92
+ {
93
+ L_test[i][2] = modStd(L_test[i][2]);
94
+ }
95
+ }
96
+ exportto(Modprimdec, i_test);
97
+ exportto(Modprimdec, L_test);
98
+ list arguments;
99
+ for(i = size(L_test); i > 0; i--)
100
+ {
101
+ arguments[i] = list(i);
102
+ }
103
+ int okay = parallelTestAND("Modprimdec::test_component", arguments);
104
+ if(!okay)
105
+ {
106
+ kill i_test;
107
+ kill L_test;
108
+ return(0);
109
+ }
110
+ okay = parallelTestAND("Modprimdec::test_inclusion", arguments);
111
+ if(!okay)
112
+ {
113
+ kill i_test;
114
+ kill L_test;
115
+ return(0);
116
+ }
117
+ okay = test_intersection();
118
+ kill i_test;
119
+ kill L_test;
120
+ return(okay);
121
+ }
122
+
123
+ static proc test_component(int index)
124
+ {
125
+ /*
126
+ list L = parallelWaitFirst(list("primdecGTZ", "primdecSY",
127
+ "Modprimdec::primdecGTZ_wrapper"),
128
+ list(list(L_test[index][1]), list(L_test[index][1]),
129
+ list(L_test[index][1], 1, 0)));
130
+ int i;
131
+ for(i = 1; i <= 3; i++)
132
+ {
133
+ if(typeof(L[i]) != "none")
134
+ {
135
+ list P = L[i];
136
+ break;
137
+ }
138
+ }
139
+ if(i > 3)
140
+ {
141
+ ERROR("could not test component");
142
+ }
143
+ */
144
+ list P = primdecGTZ(L_test[index][1]);
145
+ if(size(P) > 1)
146
+ {
147
+ return(0);
148
+ }
149
+ if(size(reduce(P[1][2], L_test[index][2], 1)))
150
+ {
151
+ return(0);
152
+ }
153
+ if(!attrib(P[1][2], "isSB"))
154
+ {
155
+ P[1][2] = modStd(P[1][2]);
156
+ }
157
+ if(size(reduce(L_test[index][2], P[1][2], 1)))
158
+ {
159
+ return(0);
160
+ }
161
+ return(1);
162
+ }
163
+
164
+ static proc test_inclusion(int index)
165
+ {
166
+ return(!size(reduce(i_test, L_test[index][1], 1)));
167
+ }
168
+
169
+ static proc test_intersection()
170
+ {
171
+ int i;
172
+ int size_L = size(L_test);
173
+
174
+ def br = basering;
175
+ list rl = ringlist(br);
176
+ for(i = size(rl[3]); i > 0; i--)
177
+ {
178
+ if(rl[3][i][1] == "c" || rl[3][i][1] == "C")
179
+ {
180
+ rl[3] = delete(rl[3], i);
181
+ }
182
+ }
183
+ rl[3] = insert(rl[3], list("c", 0));
184
+ def newR = ring(rl);
185
+ setring(newR);
186
+ option(noredThrough); // these options are ring-dependent
187
+ option(noredTail);
188
+ list L = fetch(br, L_test);
189
+ ideal I = fetch(br, i_test);
190
+ attrib(I, "isSB", 1);
191
+
192
+ module M = module(matrix(1:(size_L+1)));
193
+ for(i = 1; i <= size_L; i++)
194
+ {
195
+ M = M + module(L[i][1]*gen(i));
196
+ }
197
+ M = M + module(I*gen(size_L+1));
198
+
199
+ M = modStd(M);
200
+
201
+ ideal J;
202
+ for(i = ncols(M); i > 0; i--)
203
+ {
204
+ if(M[i][1..size_L] == 0)
205
+ {
206
+ J = M[i][size_L+1], J;
207
+ }
208
+ }
209
+ J = simplify(J, 2);
210
+ int res = !size(reduce(J, I, 1));
211
+ setring(br);
212
+ return(res);
213
+ }
214
+
215
+ static proc minSat_parallel(ideal inew, ideal h, int exactness)
216
+ {
217
+ int i,k;
218
+ poly f=1;
219
+ ideal iold,fac;
220
+ list quotM,l;
221
+
222
+ for(i=1;i<=ncols(h);i++)
223
+ {
224
+ if(deg(h[i])>0)
225
+ {
226
+ fac=fac+factorize(h[i],1);
227
+ }
228
+ }
229
+ fac=simplify(fac,6);
230
+ if(size(fac)==0)
231
+ {
232
+ l=inew,1;
233
+ return(l);
234
+ }
235
+ fac=sort(fac)[1];
236
+ for(i=1;i<=size(fac);i++)
237
+ {
238
+ f=f*fac[i];
239
+ }
240
+ quotM[1]=inew;
241
+ quotM[2]=fac;
242
+ quotM[3]=f;
243
+ f=1;
244
+ intvec op = option(get);
245
+ option(returnSB);
246
+ while(Primdec::specialIdealsEqual(iold,quotM[1])==0)
247
+ {
248
+ if(k>0)
249
+ {
250
+ f=f*quotM[3];
251
+ }
252
+ iold=quotM[1];
253
+ quotM=quotMin_parallel(quotM, exactness);
254
+ k++;
255
+ }
256
+ option(set,op);
257
+ l=quotM[1],f;
258
+ return(l);
259
+ }
260
+
261
+ static proc quotMin_parallel(list tsil, int exactness)
262
+ {
263
+ int i,j,k,action;
264
+ ideal verg;
265
+ list l;
266
+ poly g;
267
+
268
+ ideal laedi=tsil[1];
269
+ ideal fac=tsil[2];
270
+ poly f=tsil[3];
271
+
272
+ ideal star = modQuotient(laedi, f, exactness);
273
+
274
+ if(Primdec::specialIdealsEqual(star,laedi))
275
+ {
276
+ l=star,fac,f;
277
+ return(l);
278
+ }
279
+
280
+ action=1;
281
+
282
+ while(action==1)
283
+ {
284
+ if(size(fac)==1)
285
+ {
286
+ action=0;
287
+ break;
288
+ }
289
+ for(i=1;i<=size(fac);i++)
290
+ {
291
+ g=1;
292
+ verg=laedi;
293
+ for(j=1;j<=size(fac);j++)
294
+ {
295
+ if(i!=j)
296
+ {
297
+ g=g*fac[j];
298
+ }
299
+ }
300
+ verg = modQuotient(laedi, g, exactness);
301
+
302
+ if(Primdec::specialIdealsEqual(verg,star)==1)
303
+ {
304
+ f=g;
305
+ fac[i]=0;
306
+ fac=simplify(fac,2);
307
+ break;
308
+ }
309
+ if(i==size(fac))
310
+ {
311
+ action=0;
312
+ }
313
+ }
314
+ }
315
+ l=star,fac,f;
316
+ return(l);
317
+ }
318
+
319
+ static proc decomp_parallel(ideal i, int exactness, int mod_only, list #)
320
+ "USAGE: decomp_parallel(i, exactness); i ideal, exactness int
321
+ RETURN: list = list of primary ideals and their associated primes
322
+ (at even positions in the list)
323
+ NOTE: Algorithm of Gianni/Trager/Zacharias. Returns a primary
324
+ decomposition of i for sure if exactness != 0, and with high
325
+ probability, otherwise.
326
+ EXAMPLE: example decomp_parallel; shows an example
327
+ "
328
+ {
329
+ intvec op,@vv;
330
+ def @P = basering;
331
+ list primary,indep,ltras;
332
+ intvec @vh,isat,@w;
333
+ int @k,@n,@m,@n1,@n2,@n3,homo,seri,keepdi,ab,nn;
334
+ ideal peek=i;
335
+ ideal ser,tras;
336
+ int isS=(attrib(i,"isSB")==1);
337
+
338
+
339
+ if(size(#)>0)
340
+ {
341
+ seri=1;
342
+ peek=#[1];
343
+ ser=#[2];
344
+ }
345
+ homo=homog(i);
346
+ if(homo==1)
347
+ {
348
+ if(attrib(i,"isSB")!=1)
349
+ {
350
+ tras=modStd(i, exactness);
351
+ ltras=tras,tras;
352
+ attrib(ltras[1],"isSB",1);
353
+ }
354
+ else
355
+ {
356
+ ltras=i,i;
357
+ attrib(ltras[1],"isSB",1);
358
+ }
359
+ tras=ltras[1];
360
+ attrib(tras,"isSB",1);
361
+ if((dim(tras)==0))
362
+ {
363
+ primary[1]=ltras[2];
364
+ primary[2]=maxideal(1);
365
+ return(primary);
366
+ }
367
+ for(@n=1;@n<=nvars(basering);@n++)
368
+ {
369
+ @w[@n]=ord(var(@n));
370
+ }
371
+ intvec @hilb=hilb(tras,1,@w);
372
+ intvec keephilb=@hilb;
373
+ }
374
+
375
+ //----------------------------------------------------------------
376
+ //i is the zero-ideal
377
+ //----------------------------------------------------------------
378
+
379
+ if(size(i)==0)
380
+ {
381
+ primary=ideal(0),ideal(0);
382
+ return(primary);
383
+ }
384
+
385
+ //----------------------------------------------------------------
386
+ //pass to the lexicographical ordering and compute a standardbasis
387
+ //----------------------------------------------------------------
388
+
389
+ int lp=Primdec::islp();
390
+
391
+ execute("ring gnir = ("+charstr(basering)+"),("+varstr(basering)+"),(C,lp);");
392
+ op=option(get);
393
+ option(redSB);
394
+
395
+ ideal ser=fetch(@P,ser);
396
+
397
+ if(homo==1)
398
+ {
399
+ if(!lp)
400
+ {
401
+ ideal @j=modStdHilb(fetch(@P,i),@hilb,@w,exactness);
402
+ }
403
+ else
404
+ {
405
+ ideal @j=fetch(@P,tras);
406
+ attrib(@j,"isSB",1);
407
+ }
408
+ }
409
+ else
410
+ {
411
+ if(lp&&isS)
412
+ {
413
+ ideal @j=fetch(@P,i);
414
+ attrib(@j,"isSB",1);
415
+ }
416
+ else
417
+ {
418
+ ideal @j=modStd(fetch(@P,i), exactness);
419
+ }
420
+ }
421
+ option(set,op);
422
+ if(seri==1)
423
+ {
424
+ ideal peek=fetch(@P,peek);
425
+ attrib(peek,"isSB",1);
426
+ }
427
+ else
428
+ {
429
+ ideal peek=@j;
430
+ }
431
+ if((size(ser)==0))
432
+ {
433
+ ideal fried;
434
+ @n=size(@j);
435
+ for(@k=1;@k<=@n;@k++)
436
+ {
437
+ if(deg(lead(@j[@k]))==1)
438
+ {
439
+ fried[size(fried)+1]=@j[@k];
440
+ @j[@k]=0;
441
+ }
442
+ }
443
+ if(size(fried)==nvars(basering))
444
+ {
445
+ setring @P;
446
+ primary[1]=i;
447
+ primary[2]=i;
448
+ return(primary);
449
+ }
450
+ if(size(fried)>0)
451
+ {
452
+ string newva;
453
+ string newma;
454
+ poly f;
455
+ for(@k=1;@k<=nvars(basering);@k++)
456
+ {
457
+ @n1=0;
458
+ for(@n=1;@n<=size(fried);@n++)
459
+ {
460
+ if(leadmonom(fried[@n])==var(@k))
461
+ {
462
+ @n1=1;
463
+ break;
464
+ }
465
+ }
466
+ if(@n1==0)
467
+ {
468
+ newva=newva+string(var(@k))+",";
469
+ newma=newma+string(var(@k))+",";
470
+ }
471
+ else
472
+ {
473
+ newma=newma+string(0)+",";
474
+ fried[@n]=fried[@n]/leadcoef(fried[@n]);
475
+ f=fried[@n]-lead(fried[@n]);
476
+ @j=subst(@j,var(@k),-f);
477
+ }
478
+ }
479
+ newva[size(newva)]=")";
480
+ newma[size(newma)]=";";
481
+ execute("ring @deirf=("+charstr(gnir)+"),("+newva+",lp;");
482
+ execute("map @kappa=gnir,"+newma);
483
+ ideal @j= @kappa(@j);
484
+ @j=modStd(@j, exactness);
485
+
486
+ list pr=decomp_parallel(@j, exactness, mod_only);
487
+ setring gnir;
488
+ list pr=imap(@deirf,pr);
489
+ for(@k=1;@k<=size(pr);@k++)
490
+ {
491
+ @j=pr[@k]+fried;
492
+ pr[@k]=@j;
493
+ }
494
+ setring @P;
495
+ primary=imap(gnir,pr);
496
+ return(primary);
497
+ }
498
+ }
499
+ //----------------------------------------------------------------
500
+ //j is the ring
501
+ //----------------------------------------------------------------
502
+
503
+ if (dim(@j)==-1)
504
+ {
505
+ setring @P;
506
+ primary=ideal(1),ideal(1);
507
+ return(primary);
508
+ }
509
+
510
+ //----------------------------------------------------------------
511
+ // the case of one variable
512
+ //----------------------------------------------------------------
513
+
514
+ if(nvars(basering)==1)
515
+ {
516
+ list fac=Primdec::factor(@j[1]);
517
+ list gprimary;
518
+ for(@k=1;@k<=size(fac[1]);@k++)
519
+ {
520
+ gprimary[2*@k-1]=ideal(fac[1][@k]^fac[2][@k]);
521
+ gprimary[2*@k]=ideal(fac[1][@k]);
522
+ }
523
+ setring @P;
524
+ primary=fetch(gnir,gprimary);
525
+ return(primary);
526
+ }
527
+
528
+ //------------------------------------------------------------------
529
+ //the zero-dimensional case
530
+ //------------------------------------------------------------------
531
+ if (dim(@j)==0)
532
+ {
533
+ op=option(get);
534
+ option(redSB);
535
+ list gprimary = zero_decomp_parallel(@j, ser, exactness, mod_only);
536
+
537
+ setring @P;
538
+ primary=fetch(gnir,gprimary);
539
+
540
+ if(size(ser)>0)
541
+ {
542
+ primary=Primdec::cleanPrimary(primary);
543
+ }
544
+ option(set,op);
545
+ return(primary);
546
+ }
547
+
548
+ poly @gs,@gh,@p;
549
+ string @va;
550
+ list quprimary,htprimary,collectprimary,lsau,lnew,allindep,restindep;
551
+ ideal @h;
552
+ int jdim=dim(@j);
553
+ list fett;
554
+ int lauf,di,newtest;
555
+ //------------------------------------------------------------------
556
+ //search for a maximal independent set indep,i.e.
557
+ //look for subring such that the intersection with the ideal is zero
558
+ //j intersected with K[var(indep[3]+1),...,var(nvar] is zero,
559
+ //indep[1] is the new varstring and indep[2] the string for block-ordering
560
+ //------------------------------------------------------------------
561
+ allindep=Primdec::independSet(@j);
562
+ for(@m=1;@m<=size(allindep);@m++)
563
+ {
564
+ if(allindep[@m][3]==jdim)
565
+ {
566
+ di++;
567
+ indep[di]=allindep[@m];
568
+ }
569
+ else
570
+ {
571
+ lauf++;
572
+ restindep[lauf]=allindep[@m];
573
+ }
574
+ }
575
+
576
+ ideal jkeep=@j;
577
+ if(ordstr(@P)[1]=="w")
578
+ {
579
+ execute("ring @Phelp=("+charstr(gnir)+"),("+varstr(gnir)+"),("+ordstr(@P)+");");
580
+ }
581
+ else
582
+ {
583
+ execute( "ring @Phelp=("+charstr(gnir)+"),("+varstr(gnir)+"),(C,dp);");
584
+ }
585
+
586
+ if(homo==1)
587
+ {
588
+ if((ordstr(@P)[3]=="d")||(ordstr(@P)[1]=="d")||(ordstr(@P)[1]=="w")
589
+ ||(ordstr(@P)[3]=="w"))
590
+ {
591
+ ideal jwork=imap(@P,tras);
592
+ attrib(jwork,"isSB",1);
593
+ }
594
+ else
595
+ {
596
+ ideal jwork=modStdHilb(imap(gnir,@j),@hilb,@w,exactness);
597
+ }
598
+ }
599
+ else
600
+ {
601
+ ideal jwork=modStd(imap(gnir,@j), exactness);
602
+ }
603
+ list hquprimary;
604
+ poly @p,@q;
605
+ ideal @h,fac,ser;
606
+ ideal @Ptest=1;
607
+ di=dim(jwork);
608
+ keepdi=di;
609
+
610
+ setring gnir;
611
+ for(@m=1;@m<=size(indep);@m++)
612
+ {
613
+ isat=0;
614
+ @n2=0;
615
+ if((indep[@m][1]==varstr(basering))&&(@m==1))
616
+ //this is the good case, nothing to do, just to have the same notations
617
+ //change the ring
618
+ {
619
+ execute("ring gnir1 = ("+charstr(basering)+"),("+varstr(basering)+"),("
620
+ +ordstr(basering)+");");
621
+ ideal @j=fetch(gnir,@j);
622
+ attrib(@j,"isSB",1);
623
+ ideal ser=fetch(gnir,ser);
624
+ }
625
+ else
626
+ {
627
+ @va=string(maxideal(1));
628
+ if(@m==1)
629
+ {
630
+ @j=fetch(@P,i);
631
+ }
632
+ execute("ring gnir1 = ("+charstr(basering)+"),("+indep[@m][1]+"),("
633
+ +indep[@m][2]+");");
634
+ execute("map phi=gnir,"+@va+";");
635
+ op=option(get);
636
+ option(redSB);
637
+ if(homo==1)
638
+ {
639
+ ideal @j=modStdHilb(phi(@j),@hilb,@w,exactness);
640
+ }
641
+ else
642
+ {
643
+ ideal @j=modStd(phi(@j), exactness);
644
+ }
645
+ ideal ser=phi(ser);
646
+
647
+ option(set,op);
648
+ }
649
+ if((deg(@j[1])==0)||(dim(@j)<jdim))
650
+ {
651
+ setring gnir;
652
+ break;
653
+ }
654
+ for (lauf=1;lauf<=size(@j);lauf++)
655
+ {
656
+ fett[lauf]=size(@j[lauf]);
657
+ }
658
+ //------------------------------------------------------------------------
659
+ //we have now the following situation:
660
+ //j intersected with K[var(nnp+1),..,var(nva)] is zero so we may pass
661
+ //to this quotientring, j is their still a standardbasis, the
662
+ //leading coefficients of the polynomials there (polynomials in
663
+ //K[var(nnp+1),..,var(nva)]) are collected in the list h,
664
+ //we need their ggt, gh, because of the following: let
665
+ //(j:gh^n)=(j:gh^infinity) then j*K(var(nnp+1),..,var(nva))[..the rest..]
666
+ //intersected with K[var(1),...,var(nva)] is (j:gh^n)
667
+ //on the other hand j=(j,gh^n) intersected with (j:gh^n)
668
+
669
+ //------------------------------------------------------------------------
670
+
671
+ //arrangement for quotientring K(var(nnp+1),..,var(nva))[..the rest..] and
672
+ //map phi:K[var(1),...,var(nva)] --->K(var(nnpr+1),..,var(nva))[..rest..]
673
+ //------------------------------------------------------------------------
674
+
675
+ def quotring=Primdec::prepareQuotientring(nvars(basering)-indep[@m][3],"lp");
676
+
677
+ //---------------------------------------------------------------------
678
+ //we pass to the quotientring K(var(nnp+1),..,var(nva))[..the rest..]
679
+ //---------------------------------------------------------------------
680
+
681
+ ideal @jj=lead(@j); //!! vorn vereinbaren
682
+ setring quotring;
683
+
684
+ ideal @jj=imap(gnir1,@jj);
685
+ @vv=Primdec::clearSBNeu(@jj,fett); //!! vorn vereinbaren
686
+ setring gnir1;
687
+ @k=size(@j);
688
+ for (lauf=1;lauf<=@k;lauf++)
689
+ {
690
+ if(@vv[lauf]==1)
691
+ {
692
+ @j[lauf]=0;
693
+ }
694
+ }
695
+ @j=simplify(@j,2);
696
+ setring quotring;
697
+ // @j considered in the quotientring
698
+ ideal @j=imap(gnir1,@j);
699
+
700
+ ideal ser=imap(gnir1,ser);
701
+
702
+ kill gnir1;
703
+
704
+ //j is a standardbasis in the quotientring but usually not minimal
705
+ //here it becomes minimal
706
+
707
+ attrib(@j,"isSB",1);
708
+
709
+ //we need later ggt(h[1],...)=gh for saturation
710
+ ideal @h;
711
+ if(deg(@j[1])>0)
712
+ {
713
+ for(@n=1;@n<=size(@j);@n++)
714
+ {
715
+ @h[@n]=leadcoef(@j[@n]);
716
+ }
717
+ //the primary decomposition of j*K(var(nnp+1),..,var(nva))[..the rest..]
718
+ op=option(get);
719
+ option(redSB);
720
+
721
+ list uprimary = zero_decomp_parallel(@j, ser, exactness, mod_only);
722
+ option(set,op);
723
+ }
724
+ else
725
+ {
726
+ list uprimary;
727
+ uprimary[1]=ideal(1);
728
+ uprimary[2]=ideal(1);
729
+ }
730
+ //we need the intersection of the ideals in the list quprimary with the
731
+ //polynomialring, i.e. let q=(f1,...,fr) in the quotientring such an ideal
732
+ //but fi polynomials, then the intersection of q with the polynomialring
733
+ //is the saturation of the ideal generated by f1,...,fr with respect to
734
+ //h which is the lcm of the leading coefficients of the fi considered in
735
+ //in the quotientring: this is coded in saturn
736
+
737
+ list saturn;
738
+ ideal hpl;
739
+
740
+ for(@n=1;@n<=size(uprimary);@n++)
741
+ {
742
+ uprimary[@n]=interred(uprimary[@n]); // temporary fix
743
+ hpl=0;
744
+ for(@n1=1;@n1<=size(uprimary[@n]);@n1++)
745
+ {
746
+ hpl=hpl,leadcoef(uprimary[@n][@n1]);
747
+ }
748
+ saturn[@n]=hpl;
749
+ }
750
+
751
+ //--------------------------------------------------------------------
752
+ //we leave the quotientring K(var(nnp+1),..,var(nva))[..the rest..]
753
+ //back to the polynomialring
754
+ //---------------------------------------------------------------------
755
+ setring gnir;
756
+
757
+ collectprimary=imap(quotring,uprimary);
758
+ lsau=imap(quotring,saturn);
759
+ @h=imap(quotring,@h);
760
+
761
+ kill quotring;
762
+
763
+ @n2=size(quprimary);
764
+ @n3=@n2;
765
+
766
+ for(@n1=1;@n1<=size(collectprimary) div 2;@n1++)
767
+ {
768
+ if(deg(collectprimary[2*@n1][1])>0)
769
+ {
770
+ @n2++;
771
+ quprimary[@n2]=collectprimary[2*@n1-1];
772
+ lnew[@n2]=lsau[2*@n1-1];
773
+ @n2++;
774
+ lnew[@n2]=lsau[2*@n1];
775
+ quprimary[@n2]=collectprimary[2*@n1];
776
+ }
777
+ }
778
+ //here the intersection with the polynomialring
779
+ //mentioned above is really computed
780
+ for(@n = @n3 div 2+1; @n <= @n2 div 2; @n++)
781
+ {
782
+ task t(@n) = "Modprimdec::sat_component",
783
+ list(quprimary[2*@n-1], quprimary[2*@n], lnew[2*@n-1], lnew[2*@n]);
784
+ }
785
+ if(@n2 > @n3)
786
+ {
787
+ startTasks(t((@n3 div 2+1)..(@n2 div 2)));
788
+ waitAllTasks(t((@n3 div 2+1)..(@n2 div 2)));
789
+ }
790
+ for(@n = @n3 div 2+1; @n <= @n2 div 2; @n++)
791
+ {
792
+ quprimary[2*@n-1] = getResult(t(@n))[1];
793
+ quprimary[2*@n] = getResult(t(@n))[2];
794
+ killTask(t(@n));
795
+ }
796
+
797
+ if(size(@h)>0)
798
+ {
799
+ //---------------------------------------------------------------
800
+ //we change to @Phelp to have the ordering dp for saturation
801
+ //---------------------------------------------------------------
802
+ setring @Phelp;
803
+ @h=imap(gnir,@h);
804
+ if(defined(@LL)){kill @LL;}
805
+ list @LL=minSat_parallel(jwork,@h,exactness);
806
+ @Ptest=intersect(@Ptest,@LL[1]);
807
+ @q=@LL[2];
808
+ jwork=jwork,@q;
809
+ jwork=modStd(jwork, exactness);
810
+ keepdi=dim(jwork);
811
+ if(keepdi<di)
812
+ {
813
+ setring gnir;
814
+ @j=imap(@Phelp,jwork);
815
+ break;
816
+ }
817
+ if(homo==1)
818
+ {
819
+ @hilb=hilb(jwork,1,@w);
820
+ }
821
+
822
+ setring gnir;
823
+ @j=imap(@Phelp,jwork);
824
+ }
825
+ }
826
+
827
+ if((size(quprimary)==0))
828
+ {
829
+ keepdi=di-1;
830
+ quprimary[1]=ideal(1);
831
+ quprimary[2]=ideal(1);
832
+ }
833
+ //---------------------------------------------------------------
834
+ //notice that j=sat(j,gh) intersected with (j,gh^n)
835
+ //we finished with sat(j,gh) and have to start with (j,gh^n)
836
+ //---------------------------------------------------------------
837
+ if((deg(@j[1])!=0))
838
+ {
839
+ if(size(quprimary)>0)
840
+ {
841
+ setring @Phelp;
842
+ ser=imap(gnir,ser);
843
+ hquprimary=imap(gnir,quprimary);
844
+ ideal htest=@Ptest;
845
+
846
+ if(size(ser)>0)
847
+ {
848
+ ser=intersect(htest,ser);
849
+ }
850
+ else
851
+ {
852
+ ser=htest;
853
+ }
854
+ setring gnir;
855
+ ser=imap(@Phelp,ser);
856
+ }
857
+ if(size(reduce(ser,peek,1))!=0)
858
+ {
859
+ for(@m=1;@m<=size(restindep);@m++)
860
+ {
861
+ isat=0;
862
+ @n2=0;
863
+
864
+ if(restindep[@m][1]==varstr(basering))
865
+ //the good case, nothing to do, just to have the same notations
866
+ //change the ring
867
+ {
868
+ execute("ring gnir1 = ("+charstr(basering)+"),("+
869
+ varstr(basering)+"),("+ordstr(basering)+");");
870
+ ideal @j=fetch(gnir,jkeep);
871
+ attrib(@j,"isSB",1);
872
+ }
873
+ else
874
+ {
875
+ @va=string(maxideal(1));
876
+ execute("ring gnir1 = ("+charstr(basering)+"),("+
877
+ restindep[@m][1]+"),(" +restindep[@m][2]+");");
878
+ execute("map phi=gnir,"+@va+";");
879
+ op=option(get);
880
+ option(redSB);
881
+ if(homo==1)
882
+ {
883
+ ideal @j=modStdHilb(phi(jkeep),keephilb,@w,exactness);
884
+ }
885
+ else
886
+ {
887
+ ideal @j=modStd(phi(jkeep), exactness);
888
+ }
889
+ ideal ser=phi(ser);
890
+ option(set,op);
891
+ }
892
+
893
+ for (lauf=1;lauf<=size(@j);lauf++)
894
+ {
895
+ fett[lauf]=size(@j[lauf]);
896
+ }
897
+ //------------------------------------------------------------------
898
+ //we have now the following situation:
899
+ //j intersected with K[var(nnp+1),..,var(nva)] is zero so we may
900
+ //pass to this quotientring, j is their still a standardbasis, the
901
+ //leading coefficients of the polynomials there (polynomials in
902
+ //K[var(nnp+1),..,var(nva)]) are collected in the list h,
903
+ //we need their ggt, gh, because of the following:
904
+ //let (j:gh^n)=(j:gh^infinity) then
905
+ //j*K(var(nnp+1),..,var(nva))[..the rest..]
906
+ //intersected with K[var(1),...,var(nva)] is (j:gh^n)
907
+ //on the other hand j=(j,gh^n) intersected with (j:gh^n)
908
+
909
+ //------------------------------------------------------------------
910
+
911
+ //the arrangement for the quotientring
912
+ // K(var(nnp+1),..,var(nva))[..the rest..]
913
+ //and the map phi:K[var(1),...,var(nva)] ---->
914
+ //--->K(var(nnpr+1),..,var(nva))[..the rest..]
915
+ //------------------------------------------------------------------
916
+
917
+ def quotring=
918
+ Primdec::prepareQuotientring(nvars(basering)-restindep[@m][3],
919
+ "lp");
920
+
921
+ //------------------------------------------------------------------
922
+ //we pass to the quotientring K(var(nnp+1),..,var(nva))[..rest..]
923
+ //------------------------------------------------------------------
924
+
925
+ setring quotring;
926
+
927
+ // @j considered in the quotientring
928
+ ideal @j=imap(gnir1,@j);
929
+ ideal ser=imap(gnir1,ser);
930
+
931
+ kill gnir1;
932
+
933
+ //j is a standardbasis in the quotientring but usually not minimal
934
+ //here it becomes minimal
935
+ @j=Primdec::clearSB(@j,fett);
936
+ attrib(@j,"isSB",1);
937
+
938
+ //we need later ggt(h[1],...)=gh for saturation
939
+ ideal @h;
940
+
941
+ for(@n=1;@n<=size(@j);@n++)
942
+ {
943
+ @h[@n]=leadcoef(@j[@n]);
944
+ }
945
+ //the primary decomposition of j*K(var(nnp+1),..,var(nva))[..rest..]
946
+
947
+ op=option(get);
948
+ option(redSB);
949
+ list uprimary = zero_decomp_parallel(@j, ser, exactness, mod_only);
950
+ option(set,op);
951
+
952
+ //we need the intersection of the ideals in the list quprimary with
953
+ //the polynomialring, i.e. let q=(f1,...,fr) in the quotientring
954
+ //such an ideal but fi polynomials, then the intersection of q with
955
+ //the polynomialring is the saturation of the ideal generated by
956
+ //f1,...,fr with respect toh which is the lcm of the leading
957
+ //coefficients of the fi considered in the quotientring:
958
+ //this is coded in saturn
959
+
960
+ list saturn;
961
+ ideal hpl;
962
+
963
+ for(@n=1;@n<=size(uprimary);@n++)
964
+ {
965
+ hpl=0;
966
+ for(@n1=1;@n1<=size(uprimary[@n]);@n1++)
967
+ {
968
+ hpl=hpl,leadcoef(uprimary[@n][@n1]);
969
+ }
970
+ saturn[@n]=hpl;
971
+ }
972
+ //------------------------------------------------------------------
973
+ //we leave the quotientring K(var(nnp+1),..,var(nva))[..rest..]
974
+ //back to the polynomialring
975
+ //------------------------------------------------------------------
976
+ setring gnir;
977
+ collectprimary=imap(quotring,uprimary);
978
+ lsau=imap(quotring,saturn);
979
+ @h=imap(quotring,@h);
980
+
981
+ kill quotring;
982
+
983
+ @n2=size(quprimary);
984
+ @n3=@n2;
985
+
986
+ for(@n1=1;@n1<=size(collectprimary) div 2;@n1++)
987
+ {
988
+ if(deg(collectprimary[2*@n1][1])>0)
989
+ {
990
+ @n2++;
991
+ quprimary[@n2]=collectprimary[2*@n1-1];
992
+ lnew[@n2]=lsau[2*@n1-1];
993
+ @n2++;
994
+ lnew[@n2]=lsau[2*@n1];
995
+ quprimary[@n2]=collectprimary[2*@n1];
996
+ }
997
+ }
998
+
999
+
1000
+ //here the intersection with the polynomialring
1001
+ //mentioned above is really computed
1002
+
1003
+ for(@n = @n3 div 2+1; @n <= @n2 div 2; @n++)
1004
+ {
1005
+ task t(@n) = "Modprimdec::sat_component",
1006
+ list(quprimary[2*@n-1], quprimary[2*@n], lnew[2*@n-1], lnew[2*@n]);
1007
+ }
1008
+ if(@n2 > @n3)
1009
+ {
1010
+ startTasks(t((@n3 div 2+1)..(@n2 div 2)));
1011
+ waitAllTasks(t((@n3 div 2+1)..(@n2 div 2)));
1012
+ }
1013
+ for(@n = @n3 div 2+1; @n <= @n2 div 2; @n++)
1014
+ {
1015
+ quprimary[2*@n-1] = getResult(t(@n))[1];
1016
+ quprimary[2*@n] = getResult(t(@n))[2];
1017
+ killTask(t(@n));
1018
+ }
1019
+ if(@n2>=@n3+2)
1020
+ {
1021
+ setring @Phelp;
1022
+ ser=imap(gnir,ser);
1023
+ hquprimary=imap(gnir,quprimary);
1024
+ for(@n=@n3 div 2+1;@n<=@n2 div 2;@n++)
1025
+ {
1026
+ ser=intersect(ser,hquprimary[2*@n-1]);
1027
+ }
1028
+ setring gnir;
1029
+ ser=imap(@Phelp,ser);
1030
+ }
1031
+ }
1032
+ if(size(reduce(ser,peek,1))!=0)
1033
+ {
1034
+ htprimary=decomp_parallel(@j, exactness, mod_only, peek, ser);
1035
+ // here we collect now both results primary(sat(j,gh))
1036
+ // and primary(j,gh^n)
1037
+ @n=size(quprimary);
1038
+ for (@k=1;@k<=size(htprimary);@k++)
1039
+ {
1040
+ quprimary[@n+@k]=htprimary[@k];
1041
+ }
1042
+ }
1043
+ }
1044
+ }
1045
+ //---------------------------------------------------------------------------
1046
+ //back to the ring we started with
1047
+ //the final result: primary
1048
+ //---------------------------------------------------------------------------
1049
+ setring @P;
1050
+ primary=imap(gnir,quprimary);
1051
+ primary=Primdec::cleanPrimary(primary);
1052
+ return(primary);
1053
+ }
1054
+
1055
+ static proc primdecGTZ_wrapper(ideal i, int exactness, int mod_only, list #)
1056
+ "USAGE: primdecGTZ_wrapper(i, exactness); i ideal, exactness int
1057
+ RETURN: a list pr of primary ideals and their associated primes:
1058
+ @format
1059
+ pr[i][1] the i-th primary component,
1060
+ pr[i][2] the i-th prime component.
1061
+ @end format
1062
+ NOTE: - Parallel version of the algorithm of Gianni/Trager/Zacharias.
1063
+ - Works in characteristic 0 only.
1064
+ - For local orderings, the result is considered in the localization
1065
+ of the polynomial ring, not in the power series ring
1066
+ - For local and mixed orderings, the decomposition in the
1067
+ corresponding global ring is returned if the string 'global'
1068
+ is specified as second argument
1069
+ - Returns a primary decomposition of i for sure if exactness != 0, and
1070
+ with high probability, otherwise.
1071
+
1072
+ EXAMPLE: example primdecGTZ_wrapper; shows an example
1073
+ "
1074
+ {
1075
+ if(char(basering) != 0)
1076
+ {
1077
+ ERROR("The characteristic must be zero.");
1078
+ }
1079
+ if(size(#)>0)
1080
+ {
1081
+ int keep_comp=1;
1082
+ }
1083
+ if(attrib(basering,"global")!=1)
1084
+ {
1085
+ // algorithms only work in global case!
1086
+ // pass to appropriate global ring
1087
+ def r=basering;
1088
+ def s=changeord(list(list("dp",1:nvars(basering))));
1089
+ setring s;
1090
+ ideal i=imap(r,i);
1091
+ // decompose and go back
1092
+ list li=primdecGTZ_wrapper(i, exactness, mod_only);
1093
+ setring r;
1094
+ def li=imap(s,li);
1095
+ // clean up
1096
+ if(!defined(keep_comp))
1097
+ {
1098
+ for(int k=size(li);k>=1;k--)
1099
+ {
1100
+ if(mindeg(std(lead(li[k][2]))[1])==0)
1101
+ {
1102
+ // 1 contained in ideal, i.e. component does not meet origin in local ordering
1103
+ li=delete(li,k);
1104
+ }
1105
+ }
1106
+ }
1107
+ return(li);
1108
+ }
1109
+
1110
+ i=simplify(i,2); // erase 0-generators
1111
+ if (ncols(i) >= 1) {
1112
+ if ((i[1]==0)||(i[1]==1))
1113
+ {
1114
+ list L = list(ideal(i[1]), ideal(i[1]) );
1115
+ return(list(L));
1116
+ }
1117
+ }
1118
+ if((ncols(i)==1)&&(attrib(basering,"ring_cf")==0)) // handle principal ideal
1119
+ {
1120
+ list @fac=factorize(i[1],2);
1121
+ list result;
1122
+ for(int @i=size(@fac[1]);@i>0;@i--)
1123
+ {
1124
+ result[@i]=list(ideal(@fac[1][@i]^@fac[2][@i]),
1125
+ ideal(@fac[1][@i]));
1126
+ }
1127
+ return(result);
1128
+ }
1129
+
1130
+ if(minpoly!=0)
1131
+ {
1132
+ return(Primdec::algeDeco(i,0));
1133
+ }
1134
+ return(Primdec::convList(decomp_parallel(i, exactness, mod_only)));
1135
+ }
1136
+
1137
+ /* mod_only == 0: try both zero_decomp() and zero_decomp_modular() in parallel
1138
+ * (default).
1139
+ * mod_only != 0: try only zero_decomp_modular().
1140
+ */
1141
+ static proc zero_decomp_parallel(ideal j, ideal ser, int exactness,
1142
+ int mod_only)
1143
+ {
1144
+ list result;
1145
+ if(mod_only)
1146
+ {
1147
+ result = zero_decomp_modular(j, ser, exactness);
1148
+ }
1149
+ else
1150
+ {
1151
+ task t_standard = "zero_decomp", list(j, ser, 0);
1152
+ task t_modular = "Modprimdec::zero_decomp_modular",
1153
+ list(j, ser, exactness);
1154
+ startTasks(t_standard, t_modular);
1155
+ list finished = waitTasks(list(t_standard, t_modular), 1);
1156
+ if(finished[1] == 1)
1157
+ {
1158
+ result = getResult(t_standard);
1159
+ }
1160
+ else
1161
+ {
1162
+ result = getResult(t_modular);
1163
+ }
1164
+ killTask(t_standard);
1165
+ killTask(t_modular);
1166
+ }
1167
+ return(result);
1168
+ }
1169
+
1170
+ static proc zero_decomp_modular(ideal j, ideal ser, int exactness)
1171
+ {
1172
+ if(size(ser) > 0 && size(reduce(ser, j, 1)) == 0)
1173
+ {
1174
+ return(list(ideal(1), ideal(1)));
1175
+ }
1176
+ list assprimes = assPrimes(j, exactness);
1177
+ int size_assprimes = size(assprimes);
1178
+ int i;
1179
+ for(i = size_assprimes; i > 0; i--)
1180
+ {
1181
+ if(!attrib(assprimes[i], "isSB"))
1182
+ {
1183
+ assprimes[i] = modStd(assprimes[i], exactness);
1184
+ }
1185
+ }
1186
+ list separators;
1187
+ for(i = size_assprimes; i > 0; i--)
1188
+ {
1189
+ separators[i] = separator(assprimes, i);
1190
+ }
1191
+ list res;
1192
+ for(i = size_assprimes; i > 0; i--)
1193
+ {
1194
+ task t(i) = "Modquotient::modSat", list(j, separators[i], exactness);
1195
+ }
1196
+ startTasks(t(1..size_assprimes));
1197
+ waitAllTasks(t(1..size_assprimes));
1198
+ for(i = size_assprimes; i > 0; i--)
1199
+ {
1200
+ res[2*i] = assprimes[i];
1201
+ res[2*i-1] = getResult(t(i))[1];
1202
+ killTask(t(i));
1203
+ }
1204
+ if(size(ser) > 0)
1205
+ {
1206
+ for(i = size_assprimes; i > 0; i--)
1207
+ {
1208
+ if(size(reduce(ser, res[2*i-1], 1)) == 0)
1209
+ {
1210
+ res[2*i] = ideal(1);
1211
+ res[2*i-1] = ideal(1);
1212
+ }
1213
+ }
1214
+ }
1215
+ return(res);
1216
+ }
1217
+
1218
+ static proc separator(list assprimes, int i)
1219
+ {
1220
+ poly m = 1;
1221
+ int j;
1222
+ int k;
1223
+ int ncols_j;
1224
+ for(j = size(assprimes); j > 0; j--)
1225
+ {
1226
+ if(i != j)
1227
+ {
1228
+ ncols_j = ncols(assprimes[j]);
1229
+ for(k = 1; k <= ncols_j; k++)
1230
+ {
1231
+ if(reduce(assprimes[j][k], assprimes[i]) != 0)
1232
+ {
1233
+ m = m*assprimes[j][k];
1234
+ break;
1235
+ }
1236
+ }
1237
+ }
1238
+ }
1239
+ return(m);
1240
+ }
1241
+
1242
+ static proc sat_component(ideal q1, ideal q2, ideal l1, ideal l2)
1243
+ {
1244
+ if(Primdec::specialIdealsEqual(q1, q2))
1245
+ {
1246
+ q1 = Primdec::sat2(q1, l1)[1];
1247
+ q2 = q1;
1248
+ }
1249
+ else
1250
+ {
1251
+ q1 = Primdec::sat2(q1, l1)[1];
1252
+ q2 = Primdec::sat2(q2, l2)[1];
1253
+ }
1254
+ return(list(q1, q2));
1255
+ }
1256
+
1257
+ static proc modStdHilb(ideal I, intvec h, intvec w, int exactness)
1258
+ {
1259
+ /* save options */
1260
+ intvec opt = option(get);
1261
+ option(redSB);
1262
+
1263
+ /* call modular() */
1264
+ if (exactness) {
1265
+ I = modular("std", list(I, h, w), Modstd::primeTest_std,
1266
+ Modstd::deleteUnluckyPrimes_std, Modstd::pTest_std,
1267
+ Modstd::finalTest_std);
1268
+ }
1269
+ else {
1270
+ I = modular("std", list(I, h, w), Modstd::primeTest_std,
1271
+ Modstd::deleteUnluckyPrimes_std, Modstd::pTest_std);
1272
+ }
1273
+
1274
+ /* return the result */
1275
+ attrib(I, "isSB", 1);
1276
+ option(set, opt);
1277
+ return(I);
1278
+ }