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,1570 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ version="version symodstd.lib 4.1.2.0 Feb_2019 "; // $Id: 199257c936a2af0db2e233ff07860b5f7bacd360 $
3
+ category = "Commutative Algebra";
4
+ info="
5
+ LIBRARY: symodstd.lib Procedures for computing Groebner basis of ideals
6
+ being invariant under certain variable permutations.
7
+
8
+ AUTHOR: Stefan Steidel, steidel@mathematik.uni-kl.de
9
+
10
+ OVERVIEW:
11
+
12
+ A library for computing the Groebner basis of an ideal in the polynomial
13
+ ring over the rational numbers, that is invariant under certain permutations
14
+ of the variables, using the symmetry and modular methods.
15
+ More precisely let I = <f1,...,fr> be an ideal in Q[x(1),...,x(n)] and
16
+ sigma a permutation of order k in Sym(n) such that sigma(I) = I.
17
+ We assume that sigma({f1,...,fr}) = {f1,...,fr}. This can always be obtained
18
+ by adding sigma(fi) to {f1,...,fr}.
19
+ To compute a standard basis of I we apply a modification of the modular
20
+ version of the standard basis algorithm (improving the calculations in
21
+ positive characteristic). Therefore we only allow primes p such that p-1 is
22
+ divisible by k. This guarantees the existence of a k-th primitive root of
23
+ unity in Z/pZ.
24
+
25
+ PROCEDURES:
26
+ genSymId(I,sigma); compute ideal J such that sigma(J) = J and J includes I
27
+ isSymmetric(I,sigma); check if I is invariant under permutation sigma
28
+ primRoot(p,k); int describing a k-th primitive root of unity in Z/pZ
29
+ eigenvalues(I,sigma); list of eigenvalues of generators of I under sigma
30
+ symmStd(I,sigma); standard basis of I using invariance of I under sigma
31
+ syModStd(I,sigma); SB of I using modular methods and sigma(I) = I
32
+ ";
33
+
34
+ LIB "brnoeth.lib";
35
+ LIB "modstd.lib";
36
+ LIB "parallel.lib";
37
+ LIB "ring.lib";
38
+
39
+ ////////////////////////////////////////////////////////////////////////////////
40
+
41
+ proc genSymId(ideal I, intvec sigma)
42
+ "USAGE: genSymId(I,sigma); I ideal, sigma intvec
43
+ ASSUME: size(sigma) = nvars(basering =: n
44
+ RETURN: ideal J such that sigma(J) = J and J includes I
45
+ NOTE: sigma is a permutation of the variables of the basering, i.e.
46
+ @* sigma: var(i) ----> var(sigma[i]), 1 <= i <= n.
47
+ EXAMPLE: example genSymId; shows an example
48
+ "
49
+ {
50
+ if(nvars(basering) != size(sigma))
51
+ {
52
+ ERROR("The input is no permutation of the ring-variables!!");
53
+ }
54
+
55
+ int i;
56
+
57
+ ideal perm;
58
+ for(i = 1; i <= size(sigma); i++)
59
+ {
60
+ perm[size(perm)+1] = var(sigma[i]);
61
+ }
62
+
63
+ map f = basering, perm;
64
+ ideal J = I;
65
+ ideal helpJ = I;
66
+ for(i = 1; i <= order(sigma) - 1; i++)
67
+ {
68
+ helpJ = f(helpJ);
69
+ J = J, helpJ;
70
+ }
71
+
72
+ return(simplify(simplify(J,4),2));
73
+ }
74
+ example
75
+ { "EXAMPLE:"; echo = 2;
76
+ ring R = 0,(u,v,w,x,y),dp;
77
+ intvec pi = 2,3,4,5,1;
78
+ ideal I = u2v + x3y - w2;
79
+ genSymId(I,pi);
80
+ }
81
+
82
+ ////////////////////////////////////////////////////////////////////////////////
83
+
84
+ proc isSymmetric(ideal I, intvec sigma)
85
+ "USAGE: isSymmetric(I,sigma); I ideal, sigma intvec
86
+ ASSUME: size(sigma) = nvars(basering) =: n
87
+ RETURN: 1, if the set of generators of I is invariant under sigma;
88
+ @* 0, if the set of generators of I is not invariant under sigma
89
+ NOTE: sigma is a permutation of the variables of the basering, i.e.
90
+ @* sigma: var(i) ----> var(sigma[i]), 1 <= i <= n.
91
+ EXAMPLE: example isSymmetric; shows an example
92
+ "
93
+ {
94
+ if(nvars(basering) != size(sigma))
95
+ {
96
+ ERROR("The input is no permutation of the ring-variables!!");
97
+ }
98
+
99
+ int i, j;
100
+
101
+ list L;
102
+ for(i = 1; i <= size(I); i++)
103
+ {
104
+ L[size(L)+1] = I[i];
105
+ }
106
+
107
+ ideal perm;
108
+ for(i = 1; i <= size(sigma); i++)
109
+ {
110
+ perm[size(perm)+1] = var(sigma[i]);
111
+ }
112
+
113
+ map f = basering, perm;
114
+ ideal J = f(I);
115
+
116
+ poly g;
117
+ while(size(L) > 0)
118
+ {
119
+ j = size(L);
120
+ g = L[1];
121
+
122
+ for(i = 1; i <= size(J); i++)
123
+ {
124
+ if(g - J[i] == 0)
125
+ {
126
+ L = delete(L, 1);
127
+ break;
128
+ }
129
+ }
130
+
131
+ if(j == size(L))
132
+ {
133
+ return(0);
134
+ }
135
+ }
136
+
137
+ return(1);
138
+ }
139
+ example
140
+ { "EXAMPLE:"; echo = 2;
141
+ ring R = 0,x(1..5),dp;
142
+ ideal I = cyclic(5);
143
+ intvec pi = 2,3,4,5,1;
144
+ isSymmetric(I,pi);
145
+ intvec tau = 2,5,1,4,3;
146
+ isSymmetric(I,tau);
147
+ }
148
+
149
+ ////////////////////////////////////////////////////////////////////////////////
150
+
151
+ static proc permute(intvec v, intvec P)
152
+ {
153
+ // permute the intvec v according to the permutation given by P
154
+
155
+ int s = size(v);
156
+ int n = size(P);
157
+ int i;
158
+ if(s < n)
159
+ {
160
+ for(i = s+1; i <= n; i = i+1)
161
+ {
162
+ v[i] = 0;
163
+ }
164
+ s = size(v);
165
+ }
166
+ intvec auxv = v;
167
+ for(i = 1; i <= n; i = i+1)
168
+ {
169
+ auxv[i] = v[P[i]];
170
+ }
171
+
172
+ return(auxv);
173
+ }
174
+
175
+ ////////////////////////////////////////////////////////////////////////////////
176
+
177
+ static proc order(intvec sigma)
178
+ {
179
+ // compute the order of sigma in Sym({1,...,n}) with n := size(sigma)
180
+
181
+ int ORD = 1;
182
+ intvec id = 1..size(sigma);
183
+ intvec tau = sigma;
184
+
185
+ while(tau != id)
186
+ {
187
+ tau = permute(tau, sigma);
188
+ ORD = ORD + 1;
189
+ }
190
+
191
+ return(ORD);
192
+ }
193
+
194
+ ////////////////////////////////////////////////////////////////////////////////
195
+
196
+ static proc modExpo(bigint x, bigint a, bigint n)
197
+ {
198
+ // compute x^a mod n
199
+
200
+ bigint z = 1;
201
+
202
+ while(a != 0)
203
+ {
204
+ while((a mod 2) == 0)
205
+ {
206
+ a = a div 2;
207
+ x = x^2 mod n;
208
+ }
209
+
210
+ a = a - 1;
211
+ z = (z*x) mod n;
212
+ }
213
+
214
+ return(z);
215
+ }
216
+
217
+ ////////////////////////////////////////////////////////////////////////////////
218
+
219
+ proc primRoot(int p, int k)
220
+ "USAGE: primRoot(p,k); p,k integers
221
+ ASSUME: p is a prime and k divides p-1.
222
+ RETURN: int: a k-th primitive root of unity in Z/pZ
223
+ EXAMPLE: example primRoot; shows an example
224
+ "
225
+ {
226
+ if(k == 2)
227
+ {
228
+ return(-1);
229
+ }
230
+
231
+ if(p == 0)
232
+ {
233
+ return(0);
234
+ }
235
+
236
+ int i, j;
237
+
238
+ if(((p-1) mod k) != 0)
239
+ {
240
+ ERROR("There is no "+string(k)+"-th primitive root of unity "
241
+ +"in Z/"+string(p)+"Z.");
242
+ return(0);
243
+ }
244
+
245
+ list PF = primefactors(p-1)[1];
246
+
247
+ bigint a;
248
+
249
+ for(i = 2; i <= p-1; i++)
250
+ {
251
+ a = i;
252
+
253
+ for(j = 1; j <= size(PF); j++)
254
+ {
255
+ if(modExpo(a, (p-1) div PF[j], p) == 1)
256
+ {
257
+ break;
258
+ }
259
+ }
260
+
261
+ if(j == size(PF)+1)
262
+ {
263
+ a = modExpo(a, (p-1) div k, p);
264
+
265
+ int xi = int(a);
266
+
267
+ return(xi);
268
+ }
269
+ }
270
+ }
271
+ example
272
+ { "EXAMPLE:"; echo = 2;
273
+ primRoot(181,10);
274
+ ring R = 2147482801, x, lp;
275
+ number a = primRoot(2147482801,5);
276
+ a;
277
+ a^2;
278
+ a^3;
279
+ a^4;
280
+ a^5;
281
+ }
282
+
283
+ ////////////////////////////////////////////////////////////////////////////////
284
+
285
+ static proc permMat(intvec sigma, list #)
286
+ {
287
+ // compute an intmat such that i-th row describes sigma^i
288
+
289
+ int i;
290
+ int n = size(sigma);
291
+
292
+ if(size(#) == 0)
293
+ {
294
+ int ORD = order(sigma);
295
+ }
296
+ else
297
+ {
298
+ int ORD = #[1];
299
+ }
300
+
301
+ intmat P[ORD][n];
302
+ intvec sigmai = sigma;
303
+ for(i = 1; i <= ORD; i++)
304
+ {
305
+ P[i,1..n] = sigmai;
306
+ sigmai = permute(sigmai, sigma);
307
+ }
308
+
309
+ return(P);
310
+ }
311
+
312
+ ////////////////////////////////////////////////////////////////////////////////
313
+
314
+ static proc genTransId(intvec sigma, list #)
315
+ {
316
+ // list L of two ideals such that
317
+ // - L[1] describes the transformation and
318
+ // - L[2] describes the retransformation (inverse mapping).
319
+ // ORD is the order of sigma in Sym({1,...,n}) with n := size(sigma) and
320
+ // sigma: {1,...,n} ---> {1,...,n}: sigma(j) = sigma[j]. Since sigma is a
321
+ // permutation of variables it induces an automorphism phi of the
322
+ // basering, more precisely a linear variable transformation which is
323
+ // generated by this procedure. In terms it holds:
324
+ //
325
+ // phi : basering ---------> basering
326
+ // var(i) |----> L[1][i]
327
+ // L[2][i] <----| var(i)
328
+
329
+ int n = nvars(basering);
330
+
331
+ if(n != size(sigma))
332
+ {
333
+ ERROR("The input is no permutation of the ring-variables!!");
334
+ }
335
+
336
+ int i, j, k;
337
+
338
+ if(size(#) == 0)
339
+ {
340
+ int CHAR = char(basering);
341
+ int ORD = order(sigma);
342
+
343
+ if((((CHAR - 1) mod ORD) != 0) && (CHAR > 0))
344
+ {
345
+ ERROR("Basering of characteristic "+string(CHAR)+" has no "
346
+ +string(ORD)+"-th primitive root of unity!!");
347
+ }
348
+
349
+ if((CHAR == 0) && (ORD > 2))
350
+ {
351
+ "========================================
352
+ ========================================";
353
+ "If basering really has a "+string(ORD)+"-th "
354
+ +"primitive root of unity then insert it as input!!";
355
+ "========================================
356
+ ========================================";
357
+ return(list());
358
+ }
359
+ else
360
+ {
361
+ int xi = primRoot(CHAR, ORD);
362
+ number a = xi;
363
+ }
364
+ }
365
+ else
366
+ {
367
+ int ORD = #[1];
368
+ number a = #[2];
369
+ }
370
+
371
+ intmat PERM = permMat(sigma,ORD);
372
+
373
+ ideal TR, RETR;
374
+ poly s_trans;
375
+ matrix C;
376
+
377
+ //-------------- retransformation ideal RETR is generated here -----------------
378
+ for(i = 1; i <= n; i++)
379
+ {
380
+ for(j = 0; j < ORD; j++)
381
+ {
382
+ for(k = 1; k <= ORD; k++)
383
+ {
384
+ // for each variable var(i):
385
+ // s_trans^(j) = sum_{k=1}^{ORD} a^(k*j)*sigma^k(var(i))
386
+ // for j = 0,...,ORD-1
387
+ s_trans = s_trans + a^(k*j)*var(PERM[k,i]);
388
+ }
389
+ RETR = RETR + simplify(s_trans, 1);
390
+ s_trans = 0;
391
+ }
392
+ }
393
+
394
+ //---------------- transformation ideal TR is generated here -------------------
395
+ for(i = 1; i <= n; i++)
396
+ {
397
+ for(j = 1; j <= size(RETR); j++)
398
+ {
399
+ C = coeffs(RETR[j], var(i));
400
+ if(nrows(C) > 1)
401
+ {
402
+ // var(j) = RETR[j] = sum_{i in J} c_ij*var(i), J subset {1,...,n},
403
+ // and therefore var(i) = (sum_{j} s(j)/c_ij)/#(summands)
404
+ s_trans = s_trans + var(j)/(C[nrows(C),1]);
405
+ }
406
+ }
407
+
408
+ TR = TR + s_trans/number(size(s_trans));
409
+ s_trans = 0;
410
+ }
411
+
412
+ return(list(TR,RETR));
413
+ }
414
+
415
+ ////////////////////////////////////////////////////////////////////////////////
416
+
417
+ proc eigenvalues(ideal I, intvec sigma)
418
+ "USAGE: eigenvalues(I,sigma); I ideal, sigma intvec
419
+ ASSUME: size(sigma) = nvars(basering) =: n
420
+ RETURN: list of eigenvalues of generators of I under permutation sigma
421
+ NOTE: sigma is a permutation of the variables of the basering, i.e.
422
+ sigma: var(i) ----> var(sigma[i]), 1 <= i <= n.
423
+ EXAMPLE: example eigenvalues; shows an example
424
+ "
425
+ {
426
+ int i, j;
427
+
428
+ def A = basering;
429
+ int n = nvars(A);
430
+
431
+ poly ev;
432
+ list EV;
433
+ poly s, help_var;
434
+ matrix C1, C2;
435
+
436
+ ideal perm;
437
+ for(i = 1; i <= n; i++)
438
+ {
439
+ perm[size(perm)+1] = var(sigma[i]);
440
+ }
441
+
442
+ map f = A, perm;
443
+
444
+ for(i = 1; i <= size(I); i++)
445
+ {
446
+ //-------------- s is the image of I[i] under permutation sigma ----------------
447
+ s = I[i];
448
+ s = f(s);
449
+
450
+ for(j = 1; j <= n; j++)
451
+ {
452
+ C1 = coeffs(I[i], var(j));
453
+ C2 = coeffs(s, var(j));
454
+ if(nrows(C1) > 1)
455
+ {
456
+ ev = C2[nrows(C2),1]/C1[nrows(C1),1];
457
+
458
+ //------ Furthermore check that I[i] is eigenvector of permutation sigma. ------
459
+ if(s == ev*I[i])
460
+ {
461
+ break;
462
+ }
463
+ else
464
+ {
465
+ ERROR("I["+string(i)+"] is no eigenvector "
466
+ +"of permutation sigma!!");
467
+ }
468
+ }
469
+ }
470
+
471
+ EV[size(EV)+1] = ev;
472
+ }
473
+
474
+ return(EV);
475
+ }
476
+ example
477
+ { "EXAMPLE:"; echo = 2;
478
+ ring R = 11, x(1..5), dp;
479
+ poly p1 = x(1)+x(2)+x(3)+x(4)+x(5);
480
+ poly p2 = x(1)+4*x(2)+5*x(3)-2*x(4)+3*x(5);
481
+ poly p3 = x(1)+5*x(2)+3*x(3)+4*x(4)-2*x(5);
482
+ poly p4 = x(1)-2*x(2)+4*x(3)+3*x(4)+5*x(5);
483
+ poly p5 = x(1)+3*x(2)-2*x(3)+5*x(4)+4*x(5);
484
+ ideal I = p1,p2,p3,p4,p5;
485
+ intvec tau = 2,3,4,5,1;
486
+ eigenvalues(I,tau);
487
+ }
488
+
489
+ ////////////////////////////////////////////////////////////////////////////////
490
+
491
+ proc symmStd(ideal I, intvec sigma, list #)
492
+ "USAGE: symmStd(I,sigma,#); I ideal, sigma intvec
493
+ ASSUME: size(sigma) = nvars(basering) =: n, basering has an order(sigma)-th
494
+ primitive root of unity a (if char(basering) > 0) and sigma(I) = I
495
+ RETURN: ideal, a standard basis of I
496
+ NOTE: Assuming that the ideal I is invariant under the variable permutation
497
+ sigma and the basering has an order(sigma)-th primitive root of unity
498
+ the procedure uses linear transformation of variables in order to
499
+ improve standard basis computation.
500
+ If char(basering) = 0 all computations are done in the polynomial ring
501
+ over the smallest field extension that has an order(sigma)-th primitive
502
+ root of unity.
503
+ EXAMPLE: example symmStd; shows an example
504
+ "
505
+ {
506
+ if((nvars(basering) != size(sigma)) || (!isSymmetric(I,sigma)))
507
+ {
508
+ ERROR("The input is no permutation of the ring-variables!!");
509
+ }
510
+
511
+ option(redSB);
512
+
513
+ def R = basering;
514
+ int CHAR = char(R);
515
+ int n = nvars(R);
516
+
517
+ int t;
518
+
519
+ //-------- (1) Compute the order of variable permutation sigma. ----------------
520
+ int ORD = order(sigma);
521
+ if((((CHAR - 1) mod ORD) != 0) && (CHAR > 0))
522
+ {
523
+ ERROR("Basering of characteristic "+string(CHAR)+" has no "
524
+ +string(ORD)+"-th primitive root of unity!!");
525
+ }
526
+
527
+ //-------- (2) Compute the order(sigma)-th primitive root of unity -------------
528
+ //-------- in basering or move to ring extension. -------------
529
+ if((CHAR == 0) && (ORD > 2))
530
+ {
531
+ def save_ring=basering;
532
+ ring ext_ring=0,p,lp;
533
+ def S = changechar(ringlist(ext_ring),save_ring);
534
+ setring S;
535
+ kill ext_ring;
536
+ kill save_ring;
537
+ minpoly = rootofUnity(ORD);
538
+ ideal I = imap(R, I);
539
+ number a = p;
540
+ }
541
+ else
542
+ {
543
+ int xi = primRoot(CHAR, ORD);
544
+ number a = xi;
545
+ }
546
+
547
+ //--------- (3) Define the linear transformation of variables with -------------
548
+ //--------- respect to sigma. -------------
549
+ list L = genTransId(sigma,ORD,a);
550
+ ideal TR = L[1];
551
+ ideal RETR = L[2];
552
+
553
+ //--------- (4) Compute the eigenvalues of the "new" variables of --------------
554
+ //--------- sigma after transformation. --------------
555
+ list EV = eigenvalues(RETR, sigma);
556
+
557
+ //--------- (5) Transformation of the input-ideal is done here. ----------------
558
+ map f = basering, TR;
559
+ t = timer;
560
+ ideal I_trans = f(I);
561
+ if(printlevel >= 11) { "Transformation: "+string(timer - t)+" seconds"; }
562
+
563
+ //--------- (6) Compute a standard basis of the transformed ideal. -------------
564
+ t = timer;
565
+ if(size(#) > 0) { ideal sI_trans = std(I_trans, #[1]); }
566
+ else { ideal sI_trans = std(I_trans); }
567
+ if(printlevel >= 11) { "1st Groebner basis: "+string(timer - t)+" seconds"; }
568
+
569
+ //--------- (7) Retransformation is done here. ---------------------------------
570
+ map g = basering, RETR;
571
+ t = timer;
572
+ ideal I_retrans = g(sI_trans);
573
+ if(printlevel >= 11) { "Reverse Transformation: "+string(timer - t)
574
+ +" seconds"; }
575
+
576
+ //--------- (8) Compute a standard basis of the retransformaed ideal -----------
577
+ //--------- which is then a standard basis of the input-ideal. -----------
578
+ t = timer;
579
+ ideal sI_retrans = std(I_retrans);
580
+ if(printlevel >= 11) { "2nd Groebner basis: "+string(timer - t)+" seconds"; }
581
+
582
+ if((CHAR == 0) && (ORD > 2))
583
+ {
584
+ setring R;
585
+ ideal sI_retrans = fetch(S, sI_retrans);
586
+ return(sI_retrans);
587
+ }
588
+ else
589
+ {
590
+ return(sI_retrans);
591
+ }
592
+ }
593
+ example
594
+ { "EXAMPLE:"; echo = 2;
595
+ ring R = 0, x(1..4), dp;
596
+ ideal I = cyclic(4);
597
+ I;
598
+ intvec pi = 2,3,4,1;
599
+ ideal sI = symmStd(I,pi);
600
+ sI;
601
+
602
+ ring S = 31, (x,y,z), dp;
603
+ ideal J;
604
+ J[1] = xy-y2+xz;
605
+ J[2] = xy+yz-z2;
606
+ J[3] = -x2+xz+yz;
607
+ intvec tau = 3,1,2;
608
+ ideal sJ = symmStd(J,tau);
609
+ sJ;
610
+ }
611
+
612
+ ////////////////////////////////////////////////////////////////////////////////
613
+
614
+ proc divPrimeTest(ideal I, bigint p, int k)
615
+ {
616
+ if((p - 1) mod k != 0) { return(0); }
617
+
618
+ int i,j;
619
+ poly f;
620
+ number cnt;
621
+ for(i = 1; i <= size(I); i++)
622
+ {
623
+ f = cleardenom(I[i]);
624
+ if(f == 0) { return(0); }
625
+ cnt = leadcoef(I[i])/leadcoef(f);
626
+ if((bigint(numerator(cnt)) mod p) == 0) { return(0); }
627
+ if((bigint(denominator(cnt)) mod p) == 0) { return(0); }
628
+ for(j = size(f); j > 0; j--)
629
+ {
630
+ if((bigint(leadcoef(f[j])) mod p) == 0) { return(0); }
631
+ }
632
+ }
633
+ return(1);
634
+ }
635
+
636
+ ////////////////////////////////////////////////////////////////////////////////
637
+
638
+ proc divPrimeList(int k, ideal I, int n, list #)
639
+ {
640
+ // the intvec of n greatest primes p <= 2147483647 (resp. n greatest primes
641
+ // < L[size(L)] union with L) such that each (p-1) is divisible by k, and none
642
+ // of these primes divides any coefficient occurring in I
643
+ // --> similar to procedure primeList in modstd.lib
644
+
645
+ intvec L;
646
+ int i,p;
647
+ int ncores = 1;
648
+
649
+ //----------------- Initialize optional parameter ncores ---------------------
650
+ if(size(#) > 0)
651
+ {
652
+ if(size(#) == 1)
653
+ {
654
+ if(typeof(#[1]) == "int")
655
+ {
656
+ ncores = #[1];
657
+ # = list();
658
+ }
659
+ }
660
+ else
661
+ {
662
+ ncores = #[2];
663
+ }
664
+ }
665
+
666
+ if(size(#) == 0)
667
+ {
668
+ p = 2147483647;
669
+ while(!divPrimeTest(I,p,k))
670
+ {
671
+ p = prime(p-1);
672
+ if(p == 2) { ERROR("No more primes."); }
673
+ }
674
+ L[1] = p;
675
+ }
676
+ else
677
+ {
678
+ L = #[1];
679
+ p = prime(L[size(L)]-1);
680
+ while(!divPrimeTest(I,p,k))
681
+ {
682
+ p = prime(p-1);
683
+ if(p == 2) { ERROR("No more primes."); }
684
+ }
685
+ L[size(L)+1] = p;
686
+ }
687
+ if(p == 2) { ERROR("No more primes."); }
688
+ if(ncores == 1)
689
+ {
690
+ for(i = 2; i <= n; i++)
691
+ {
692
+ p = prime(p-1);
693
+ while(!divPrimeTest(I,p,k))
694
+ {
695
+ p = prime(p-1);
696
+ if(p == 2) { ERROR("no more primes"); }
697
+ }
698
+ L[size(L)+1] = p;
699
+ }
700
+ }
701
+ else
702
+ {
703
+ int neededSize = size(L)+n-1;;
704
+ list parallelResults;
705
+ list arguments;
706
+ int neededPrimes = neededSize-size(L);
707
+ while(neededPrimes > 0)
708
+ {
709
+ arguments = list();
710
+ for(i = ((neededPrimes div ncores)+1-(neededPrimes%ncores == 0))
711
+ *ncores; i > 0; i--)
712
+ {
713
+ p = prime(p-1);
714
+ if(p == 2) { ERROR("no more primes"); }
715
+ arguments[i] = list("I", p, k);
716
+ }
717
+ parallelResults = parallelWaitAll("divPrimeTest", arguments, 0,
718
+ ncores);
719
+ for(i = size(arguments); i > 0; i--)
720
+ {
721
+ if(parallelResults[i])
722
+ {
723
+ L[size(L)+1] = arguments[i][2];
724
+ }
725
+ }
726
+ neededPrimes = neededSize-size(L);
727
+ }
728
+ if(size(L) > neededSize)
729
+ {
730
+ L = L[1..neededSize];
731
+ }
732
+ }
733
+ return(L);
734
+ }
735
+ example
736
+ { "EXAMPLE:"; echo = 2;
737
+ ring r = 0,(x,y,z),dp;
738
+ ideal I = 2147483647x+y, z-181;
739
+ intvec L = divPrimeList(4,I,10,10);
740
+ size(L);
741
+ L[1];
742
+ L[size(L)];
743
+ L = divPrimeList(4,I,5,L,5);
744
+ size(L);
745
+ L[size(L)];
746
+ }
747
+
748
+ ////////////////////////////////////////////////////////////////////////////////
749
+
750
+ proc spTestSB(ideal I, ideal J, list L, intvec sigma, int variant, list #)
751
+ "USAGE: spTestSB(I,J,L,sigma,variant,#); I,J ideals, L intvec of primes,
752
+ sigma intvec, variant integer
753
+ RETURN: 1 (resp. 0) if for a randomly chosen prime p, that is not in L and
754
+ divisible by the order of sigma, J mod p is (resp. is not) a standard
755
+ basis of I mod p
756
+ EXAMPLE: example spTestSB; shows an example
757
+ "
758
+ {
759
+ int i,j,k,p;
760
+ int ORD = order(sigma);
761
+ def R = basering;
762
+ list r = ringlist(R);
763
+
764
+ while(!j)
765
+ {
766
+ j = 1;
767
+ while(((p - 1) mod ORD) != 0)
768
+ {
769
+ p = prime(random(1000000000,2134567879));
770
+ if(p == 2){ ERROR("no more primes"); }
771
+ }
772
+ for(i = 1; i <= size(L); i++)
773
+ {
774
+ if(p == L[i]){ j = 0; break }
775
+ }
776
+ if(j)
777
+ {
778
+ for(i = 1; i <= ncols(I); i++)
779
+ {
780
+ for(k = 2; k <= size(I[i]); k++)
781
+ {
782
+ if((bigint(denominator(leadcoef(I[i][k]))) mod p) == 0){ j = 0; break; }
783
+ }
784
+ if(!j){ break; }
785
+ }
786
+ }
787
+ if(j)
788
+ {
789
+ if(!primeTest(I,p)) { j = 0; }
790
+ }
791
+ }
792
+ r[1] = p;
793
+ def @R = ring(r);
794
+ setring @R;
795
+ ideal I = imap(R,I);
796
+ ideal J = imap(R,J);
797
+ attrib(J,"isSB",1);
798
+
799
+ int t = timer;
800
+ j = 1;
801
+ if(isIncluded(I,J) == 0){ j = 0; }
802
+
803
+ if(printlevel >= 11)
804
+ {
805
+ "isIncluded(I,J) takes "+string(timer - t)+" seconds";
806
+ "j = "+string(j);
807
+ }
808
+
809
+ t = timer;
810
+ if(j)
811
+ {
812
+ if(size(#) > 0)
813
+ {
814
+ ideal K = smpStd(I,sigma,p,variant,#[1])[1];
815
+ }
816
+ else
817
+ {
818
+ ideal K = smpStd(I,sigma,p,variant)[1];
819
+ }
820
+ t = timer;
821
+ if(isIncluded(J,K) == 0){ j = 0; }
822
+
823
+ if(printlevel >= 11)
824
+ {
825
+ "isIncluded(J,K) takes "+string(timer - t)+" seconds";
826
+ "j = "+string(j);
827
+ }
828
+ }
829
+ setring R;
830
+ return(j);
831
+ }
832
+ example
833
+ { "EXAMPLE:"; echo = 2;
834
+ intvec L = 2,3,5;
835
+ ring r = 0,(x,y,z),dp;
836
+ ideal I = x+1,y+1;
837
+ intvec sigma = 2,1,3;
838
+ ideal J = x+1,y;
839
+ spTestSB(I,J,L,sigma,2);
840
+ spTestSB(J,I,L,sigma,2);
841
+ }
842
+
843
+ ////////////////////////////////////////////////////////////////////////////////
844
+
845
+ proc smpStd(ideal I, intvec sigma, int p, int variant, list #)
846
+ "USAGE: smpStd(I,sigma,p,#); I ideal, sigma intvec, p integer, variant integer
847
+ ASSUME: If size(#) > 0, then #[1] is an intvec describing the Hilbert series.
848
+ RETURN: ideal - a standard basis of I mod p, integer - p
849
+ NOTE: The procedure computes a standard basis of the ideal I modulo p and
850
+ fetches the result to the basering. If size(#) > 0 the Hilbert driven
851
+ standard basis computation symmStd(.,.,#[1]) is used in symmStd.
852
+ The standard basis computation modulo p does also vary depending on the
853
+ integer variant, namely
854
+ @* - variant = 1: symmStd(.,.,#[1]) resp. symmStd,
855
+ @* - variant = 2: symmStd,
856
+ @* - variant = 3: homog. - symmStd(.,.,#[1]) resp. symmStd - dehomog.,
857
+ @* - variant = 4: fglm.
858
+ EXAMPLE: example smpStd; shows an example
859
+ "
860
+ {
861
+ def R0 = basering;
862
+ list rl = ringlist(R0);
863
+ rl[1] = p;
864
+ def @r = ring(rl);
865
+ setring @r;
866
+ ideal i = fetch(R0,I);
867
+
868
+ option(redSB);
869
+
870
+ if(variant == 1)
871
+ {
872
+ if(size(#) > 0)
873
+ {
874
+ i = symmStd(i, sigma, #[1]);
875
+ }
876
+ else
877
+ {
878
+ i = symmStd(i, sigma);
879
+ }
880
+ }
881
+
882
+ if(variant == 2)
883
+ {
884
+ i = symmStd(i, sigma);
885
+ }
886
+
887
+ if(variant == 3)
888
+ {
889
+ list rl = ringlist(@r);
890
+ int nvar@r = nvars(@r);
891
+
892
+ int k;
893
+ intvec w;
894
+ for(k = 1; k <= nvar@r; k++)
895
+ {
896
+ w[k] = deg(var(k));
897
+ }
898
+ w[nvar@r + 1] = 1;
899
+
900
+ rl[2][nvar@r + 1] = "homvar";
901
+ rl[3][2][2] = w;
902
+
903
+ def HomR = ring(rl);
904
+ setring HomR;
905
+ ideal i = imap(@r, i);
906
+ i = homog(i, homvar);
907
+ intvec tau = sigma, size(sigma)+1;
908
+
909
+ if(size(#) > 0)
910
+ {
911
+ if(w == 1)
912
+ {
913
+ i = symmStd(i, tau, #[1]);
914
+ }
915
+ else
916
+ {
917
+ i = symmStd(i, tau, #[1], w);
918
+ }
919
+ }
920
+ else
921
+ {
922
+ i = symmStd(i, tau);
923
+ }
924
+
925
+ i = subst(i, homvar, 1);
926
+ i = simplify(i, 34);
927
+
928
+ setring @r;
929
+ i = imap(HomR, i);
930
+ i = interred(i);
931
+ kill HomR;
932
+ }
933
+
934
+ if(variant == 4)
935
+ {
936
+ def R1 = changeord(list(list("dp",1:nvars(basering))));
937
+ setring R1;
938
+ ideal i = fetch(@r,i);
939
+ i = symmStd(i, sigma);
940
+ setring @r;
941
+ i = fglm(R1,i);
942
+ }
943
+
944
+ setring R0;
945
+ return(list(fetch(@r,i),p));
946
+ }
947
+ example
948
+ { "EXAMPLE:"; echo = 2;
949
+ ring r1 = 0, x(1..4), dp;
950
+ ideal I = cyclic(4);
951
+ intvec sigma = 2,3,4,1;
952
+ int p = 181;
953
+ list P = smpStd(I,sigma,p,2);
954
+ P;
955
+
956
+ ring r2 = 0, x(1..5), lp;
957
+ ideal I = cyclic(5);
958
+ intvec tau = 2,3,4,5,1;
959
+ int q = 31981;
960
+ list Q = smpStd(I,tau,q,4);
961
+ Q;
962
+ }
963
+
964
+ ////////////////////////////////////////////////////////////////////////////////
965
+
966
+ proc syModStd(ideal I, intvec sigma, list #)
967
+ "USAGE: syModStd(I,sigma); I ideal, sigma intvec
968
+ ASSUME: size(sigma) = nvars(basering) and sigma(I) = I. If size(#) > 0, then
969
+ # contains either 1, 2 or 4 integers such that
970
+ @* - #[1] is the number of available processors for the computation,
971
+ @* - #[2] is an optional parameter for the exactness of the computation,
972
+ if #[2] = 1, the procedure computes a standard basis for sure,
973
+ @* - #[3] is the number of primes until the first lifting,
974
+ @* - #[4] is the constant number of primes between two liftings until
975
+ the computation stops.
976
+ RETURN: ideal, a standard basis of I if no warning appears;
977
+ NOTE: The procedure computes a standard basis of the ideal I (over the
978
+ rational numbers) by using modular methods and the fact that I is
979
+ invariant under the variable permutation sigma.
980
+ By default the procedure computes a standard basis of I for sure, but
981
+ if the optional parameter #[2] = 0, it computes a standard basis of I
982
+ with high probability.
983
+ The procedure distinguishes between different variants for the standard
984
+ basis computation in positive characteristic depending on the ordering
985
+ of the basering, the parameter #[2] and if the ideal I is homogeneous.
986
+ @* - variant = 1, if I is homogeneous,
987
+ @* - variant = 2, if I is not homogeneous, 1-block-ordering,
988
+ @* - variant = 3, if I is not homogeneous, complicated ordering (lp or
989
+ > 1 block),
990
+ @* - variant = 4, if I is not homogeneous, ordering lp, dim(I) = 0.
991
+ EXAMPLE: example syModStd; shows an example
992
+ "
993
+ {
994
+ if((nvars(basering) != size(sigma)) || (!isSymmetric(I,sigma)))
995
+ {
996
+ ERROR("The input is no permutation of the ring-variables!!");
997
+ }
998
+
999
+ int TT = timer;
1000
+ int RT = rtimer;
1001
+
1002
+ def R0 = basering;
1003
+ list rl = ringlist(R0);
1004
+ if((npars(R0) > 0) || (rl[1] > 0))
1005
+ {
1006
+ ERROR("Characteristic of basering should be zero, basering should
1007
+ have no parameters.");
1008
+ }
1009
+
1010
+ int index = 1;
1011
+ int i,k,c;
1012
+ int j = 1;
1013
+ int pTest, sizeTest;
1014
+ int en = 2134567879;
1015
+ int an = 1000000000;
1016
+ bigint N;
1017
+ int ORD = order(sigma);
1018
+
1019
+ //-------------------- Initialize optional parameters ------------------------
1020
+ if(size(#) > 0)
1021
+ {
1022
+ if(size(#) == 1)
1023
+ {
1024
+ int n1 = #[1];
1025
+ int exactness = 1;
1026
+ if(n1 >= 10)
1027
+ {
1028
+ int n2 = n1 + 1;
1029
+ int n3 = n1;
1030
+ }
1031
+ else
1032
+ {
1033
+ int n2 = 10;
1034
+ int n3 = 10;
1035
+ }
1036
+ }
1037
+ if(size(#) == 2)
1038
+ {
1039
+ int n1 = #[1];
1040
+ int exactness = #[2];
1041
+ if(n1 >= 10)
1042
+ {
1043
+ int n2 = n1 + 1;
1044
+ int n3 = n1;
1045
+ }
1046
+ else
1047
+ {
1048
+ int n2 = 10;
1049
+ int n3 = 10;
1050
+ }
1051
+ }
1052
+ if(size(#) == 4)
1053
+ {
1054
+ int n1 = #[1];
1055
+ int exactness = #[2];
1056
+ if(n1 >= #[3])
1057
+ {
1058
+ int n2 = n1 + 1;
1059
+ }
1060
+ else
1061
+ {
1062
+ int n2 = #[3];
1063
+ }
1064
+ if(n1 >= #[4])
1065
+ {
1066
+ int n3 = n1;
1067
+ }
1068
+ else
1069
+ {
1070
+ int n3 = #[4];
1071
+ }
1072
+ }
1073
+ }
1074
+ else
1075
+ {
1076
+ int n1 = 1;
1077
+ int exactness = 1;
1078
+ int n2 = 10;
1079
+ int n3 = 10;
1080
+ }
1081
+
1082
+ if(printlevel >= 10)
1083
+ {
1084
+ "n1 = "+string(n1)+", n2 = "+string(n2)+", n3 = "+string(n3)
1085
+ +", exactness = "+string(exactness);
1086
+ }
1087
+
1088
+ //-------------------------- Save current options ------------------------------
1089
+ intvec opt = option(get);
1090
+
1091
+ option(redSB);
1092
+
1093
+ //-------------------- Initialize the list of primes -------------------------
1094
+ int tt = timer;
1095
+ int rt = rtimer;
1096
+ intvec L = divPrimeList(ORD,I,n2,n1);
1097
+ if(printlevel >= 10)
1098
+ {
1099
+ "CPU-time for divPrimeList: "+string(timer-tt)+" seconds.";
1100
+ "Real-time for divPrimeList: "+string(rtimer-rt)+" seconds.";
1101
+ }
1102
+
1103
+ //--------------------- Decide which variant to take -------------------------
1104
+ int variant;
1105
+ int h = homog(I);
1106
+
1107
+ tt = timer;
1108
+ rt = rtimer;
1109
+
1110
+ if(!hasMixedOrdering())
1111
+ {
1112
+ if(h)
1113
+ {
1114
+ variant = 1;
1115
+ if(printlevel >= 10) { "variant = 1"; }
1116
+
1117
+ rl[1] = L[5];
1118
+ def @r = ring(rl);
1119
+ setring @r;
1120
+ def @s = changeord(list(list("dp",1:nvars(basering))));
1121
+ setring @s;
1122
+ ideal I = std(fetch(R0,I));
1123
+ intvec hi = hilb(I,1);
1124
+ setring R0;
1125
+ kill @r,@s;
1126
+ }
1127
+ else
1128
+ {
1129
+ string ordstr_R0 = ordstr(R0);
1130
+ int neg = 1 - attrib(R0,"global");
1131
+
1132
+ if((find(ordstr_R0, "M") > 0) || (find(ordstr_R0, "a") > 0) || neg)
1133
+ {
1134
+ variant = 2;
1135
+ if(printlevel >= 10) { "variant = 2"; }
1136
+ }
1137
+ else
1138
+ {
1139
+ string order;
1140
+ if(system("nblocks") <= 2)
1141
+ {
1142
+ if(find(ordstr_R0, "M") + find(ordstr_R0, "lp")
1143
+ + find(ordstr_R0, "rp") <= 0)
1144
+ {
1145
+ order = "simple";
1146
+ }
1147
+ }
1148
+
1149
+ if((order == "simple") || (size(rl) > 4))
1150
+ {
1151
+ variant = 2;
1152
+ if(printlevel >= 10) { "variant = 2"; }
1153
+ }
1154
+ else
1155
+ {
1156
+ rl[1] = L[5];
1157
+ def @r = ring(rl);
1158
+ setring @r;
1159
+
1160
+ def @s = changeord(list(list("dp",1:nvars(basering))));
1161
+ setring @s;
1162
+ ideal I = std(fetch(R0,I));
1163
+ if(dim(I) == 0)
1164
+ {
1165
+ variant = 4;
1166
+ if(printlevel >= 10) { "variant = 4"; }
1167
+ }
1168
+ else
1169
+ {
1170
+ variant = 3;
1171
+ if(printlevel >= 10) { "variant = 3"; }
1172
+
1173
+ int nvar@r = nvars(@r);
1174
+ intvec w;
1175
+ for(i = 1; i <= nvar@r; i++)
1176
+ {
1177
+ w[i] = deg(var(i));
1178
+ }
1179
+ w[nvar@r + 1] = 1;
1180
+
1181
+ list hiRi = hilbRing(fetch(R0,I),w);
1182
+ intvec W = hiRi[2];
1183
+ @s = hiRi[1];
1184
+ setring @s;
1185
+ intvec tau = sigma, size(sigma)+1;
1186
+
1187
+ Id(1) = symmStd(Id(1),tau);
1188
+ intvec hi = hilb(Id(1), 1, W);
1189
+ }
1190
+
1191
+ setring R0;
1192
+ kill @r,@s;
1193
+ }
1194
+ }
1195
+ }
1196
+ }
1197
+ else
1198
+ {
1199
+ if(exactness == 1) { return(groebner(I)); }
1200
+ if(h)
1201
+ {
1202
+ variant = 1;
1203
+ if(printlevel >= 10) { "variant = 1"; }
1204
+ rl[1] = L[5];
1205
+ def @r = ring(rl);
1206
+ setring @r;
1207
+ def @s = changeord(list(list("dp",1:nvars(basering))));
1208
+ setring @s;
1209
+ ideal I = std(fetch(R0,I));
1210
+ intvec hi = hilb(I,1);
1211
+ setring R0;
1212
+ kill @r,@s;
1213
+ }
1214
+ else
1215
+ {
1216
+ string ordstr_R0 = ordstr(R0);
1217
+ int neg = 1 - attrib(R0,"global");
1218
+
1219
+ if((find(ordstr_R0, "M") > 0) || (find(ordstr_R0, "a") > 0) || neg)
1220
+ {
1221
+ variant = 2;
1222
+ if(printlevel >= 10) { "variant = 2"; }
1223
+ }
1224
+ else
1225
+ {
1226
+ string order;
1227
+ if(system("nblocks") <= 2)
1228
+ {
1229
+ if(find(ordstr_R0, "M") + find(ordstr_R0, "lp")
1230
+ + find(ordstr_R0, "rp") <= 0)
1231
+ {
1232
+ order = "simple";
1233
+ }
1234
+ }
1235
+
1236
+ if((order == "simple") || (size(rl) > 4))
1237
+ {
1238
+ variant = 2;
1239
+ if(printlevel >= 10) { "variant = 2"; }
1240
+ }
1241
+ else
1242
+ {
1243
+ variant = 3;
1244
+ if(printlevel >= 10) { "variant = 3"; }
1245
+
1246
+ rl[1] = L[5];
1247
+ def @r = ring(rl);
1248
+ setring @r;
1249
+ int nvar@r = nvars(@r);
1250
+ intvec w;
1251
+ for(i = 1; i <= nvar@r; i++)
1252
+ {
1253
+ w[i] = deg(var(i));
1254
+ }
1255
+ w[nvar@r + 1] = 1;
1256
+
1257
+ list hiRi = hilbRing(fetch(R0,I),w);
1258
+ intvec W = hiRi[2];
1259
+ def @s = hiRi[1];
1260
+ setring @s;
1261
+ intvec tau = sigma, size(sigma)+1;
1262
+
1263
+ Id(1) = symmStd(Id(1),tau);
1264
+ intvec hi = hilb(Id(1), 1, W);
1265
+
1266
+ setring R0;
1267
+ kill @r,@s;
1268
+ }
1269
+ }
1270
+ }
1271
+ }
1272
+
1273
+ list P,T1,T2,T3,LL;
1274
+
1275
+ ideal J,K,H;
1276
+
1277
+ //----- If there is more than one processor available, we parallelize the ----
1278
+ //----- main standard basis computations in positive characteristic ----
1279
+
1280
+ if(n1 > 1)
1281
+ {
1282
+ ideal I_for_fork = I;
1283
+ export(I_for_fork); // I available for each link
1284
+
1285
+ //----- Create n1 links l(1),...,l(n1), open all of them and compute ---------
1286
+ //----- standard basis for the primes L[2],...,L[n1 + 1]. ---------
1287
+
1288
+ for(i = 1; i <= n1; i++)
1289
+ {
1290
+ //link l(i) = "MPtcp:fork";
1291
+ link l(i) = "ssi:fork";
1292
+ open(l(i));
1293
+ if((variant == 1) || (variant == 3))
1294
+ {
1295
+ write(l(i), quote(smpStd(I_for_fork, eval(sigma), eval(L[i + 1]),
1296
+ eval(variant), eval(hi))));
1297
+ }
1298
+ if((variant == 2) || (variant == 4))
1299
+ {
1300
+ write(l(i), quote(smpStd(I_for_fork, eval(sigma), eval(L[i + 1]),
1301
+ eval(variant))));
1302
+ }
1303
+ }
1304
+
1305
+ int t = timer;
1306
+ if((variant == 1) || (variant == 3))
1307
+ {
1308
+ P = smpStd(I_for_fork, sigma, L[1], variant, hi);
1309
+ }
1310
+ if((variant == 2) || (variant == 4))
1311
+ {
1312
+ P = smpStd(I_for_fork, sigma, L[1], variant);
1313
+ }
1314
+ t = timer - t;
1315
+ if(t > 60) { t = 60; }
1316
+ int i_sleep = system("sh", "sleep "+string(t));
1317
+ T1[1] = P[1];
1318
+ T2[1] = bigint(P[2]);
1319
+ index++;
1320
+
1321
+ j = j + n1 + 1;
1322
+ }
1323
+
1324
+ //-------------- Main standard basis computations in positive ----------------
1325
+ //---------------------- characteristic start here ---------------------------
1326
+
1327
+ list arguments_farey, results_farey;
1328
+
1329
+ while(1)
1330
+ {
1331
+ tt = timer; rt = rtimer;
1332
+
1333
+ if(printlevel >= 10) { "size(L) = "+string(size(L)); }
1334
+
1335
+ if(n1 > 1)
1336
+ {
1337
+ while(j <= size(L) + 1)
1338
+ {
1339
+ for(i = 1; i <= n1; i++)
1340
+ {
1341
+ //--- ask if link l(i) is ready otherwise sleep for t seconds ---
1342
+ if(status(l(i), "read", "ready"))
1343
+ {
1344
+ //--- read the result from l(i) ---
1345
+ P = read(l(i));
1346
+ T1[index] = P[1];
1347
+ T2[index] = bigint(P[2]);
1348
+ index++;
1349
+
1350
+ if(j <= size(L))
1351
+ {
1352
+ if((variant == 1) || (variant == 3))
1353
+ {
1354
+ write(l(i), quote(smpStd(I_for_fork, eval(sigma),
1355
+ eval(L[j]), eval(variant), eval(hi))));
1356
+ j++;
1357
+ }
1358
+ if((variant == 2) || (variant == 4))
1359
+ {
1360
+ write(l(i), quote(smpStd(I_for_fork, eval(sigma),
1361
+ eval(L[j]), eval(variant))));
1362
+ j++;
1363
+ }
1364
+ }
1365
+ else
1366
+ {
1367
+ k++;
1368
+ close(l(i));
1369
+ }
1370
+ }
1371
+ }
1372
+ //--- k describes the number of closed links ---
1373
+ if(k == n1)
1374
+ {
1375
+ j++;
1376
+ }
1377
+ i_sleep = system("sh", "sleep "+string(t));
1378
+ }
1379
+ }
1380
+ else
1381
+ {
1382
+ while(j <= size(L))
1383
+ {
1384
+ if((variant == 1) || (variant == 3))
1385
+ {
1386
+ P = smpStd(I, sigma, L[j], variant, hi);
1387
+ }
1388
+ if((variant == 2) || (variant == 4))
1389
+ {
1390
+ P = smpStd(I, sigma, L[j], variant);
1391
+ }
1392
+
1393
+ T1[index] = P[1];
1394
+ T2[index] = bigint(P[2]);
1395
+ index++;
1396
+ j++;
1397
+ }
1398
+ }
1399
+
1400
+ if(printlevel >= 10)
1401
+ {
1402
+ "CPU-time for computing list is "+string(timer - tt)+" seconds.";
1403
+ "Real-time for computing list is "+string(rtimer - rt)+" seconds.";
1404
+ }
1405
+
1406
+ //------------------------ Delete unlucky primes -----------------------------
1407
+ //------------- unlucky if and only if the leading ideal is wrong ------------
1408
+
1409
+ LL = deleteUnluckyPrimes(T1,T2,h);
1410
+ T1 = LL[1];
1411
+ T2 = LL[2];
1412
+
1413
+ //------------------- Now all leading ideals are the same --------------------
1414
+ //------------------- Lift results to basering via farey ---------------------
1415
+
1416
+ tt = timer; rt = rtimer;
1417
+ N = T2[1];
1418
+ for(i = 2; i <= size(T2); i++) { N = N*T2[i]; }
1419
+ H = chinrem(T1,T2);
1420
+ if(n1 == 1)
1421
+ {
1422
+ J = farey(H,N);
1423
+ }
1424
+ else
1425
+ {
1426
+ for(i = ncols(H); i > 0; i--)
1427
+ {
1428
+ arguments_farey[i] = list(ideal(H[i]), N);
1429
+ }
1430
+ results_farey = parallelWaitAll("farey", arguments_farey, 0, n1);
1431
+ for(i = ncols(H); i > 0; i--)
1432
+ {
1433
+ J[i] = results_farey[i][1];
1434
+ }
1435
+ }
1436
+ if(printlevel >= 10)
1437
+ {
1438
+ "CPU-time for lifting-process is "+string(timer - tt)+" seconds.";
1439
+ "Real-time for lifting-process is "+string(rtimer - rt)+" seconds.";
1440
+ }
1441
+
1442
+ //---------------- Test if we already have a standard basis of I --------------
1443
+
1444
+ tt = timer; rt = rtimer;
1445
+ if((variant == 1) || (variant == 3))
1446
+ {
1447
+ pTest = spTestSB(I,J,L,sigma,variant,hi);
1448
+ }
1449
+ if((variant == 2) || (variant == 4))
1450
+ {
1451
+ pTest = spTestSB(I,J,L,sigma,variant);
1452
+ }
1453
+
1454
+ if(printlevel >= 10)
1455
+ {
1456
+ "CPU-time for pTest is "+string(timer - tt)+" seconds.";
1457
+ "Real-time for pTest is "+string(rtimer - rt)+" seconds.";
1458
+ }
1459
+
1460
+ if(pTest)
1461
+ {
1462
+ if(printlevel >= 10)
1463
+ {
1464
+ "CPU-time for computation without final tests is "
1465
+ +string(timer - TT)+" seconds.";
1466
+ "Real-time for computation without final tests is "
1467
+ +string(rtimer - RT)+" seconds.";
1468
+ }
1469
+
1470
+ attrib(J,"isSB",1);
1471
+
1472
+ if(exactness == 0)
1473
+ {
1474
+ option(set, opt);
1475
+ if(n1 > 1) { kill I_for_fork; }
1476
+ return(J);
1477
+ }
1478
+
1479
+ if(exactness == 1)
1480
+ {
1481
+ tt = timer; rt = rtimer;
1482
+ sizeTest = 1 - isIncluded(I,J,n1);
1483
+
1484
+ if(printlevel >= 10)
1485
+ {
1486
+ "CPU-time for checking if I subset <G> is "
1487
+ +string(timer - tt)+" seconds.";
1488
+ "Real-time for checking if I subset <G> is "
1489
+ +string(rtimer - rt)+" seconds.";
1490
+ }
1491
+
1492
+ if(sizeTest == 0)
1493
+ {
1494
+ tt = timer; rt = rtimer;
1495
+ K = std(J);
1496
+
1497
+ if(printlevel >= 10)
1498
+ {
1499
+ "CPU-time for last std-computation is "
1500
+ +string(timer - tt)+" seconds.";
1501
+ "Real-time for last std-computation is "
1502
+ +string(rtimer - rt)+" seconds.";
1503
+ }
1504
+
1505
+ if(size(reduce(K,J,5)) == 0)
1506
+ {
1507
+ option(set, opt);
1508
+ if(n1 > 1) { kill I_for_fork; }
1509
+ return(J);
1510
+ }
1511
+ }
1512
+ }
1513
+ }
1514
+
1515
+ //-------------- We do not already have a standard basis of I ----------------
1516
+ //----------- Therefore do the main computation for more primes --------------
1517
+
1518
+ T1 = H;
1519
+ T2 = N;
1520
+ index = 2;
1521
+
1522
+ j = size(L) + 1;
1523
+ tt = timer; rt = rtimer;
1524
+ L = divPrimeList(ORD,I,n3,L,n1);
1525
+ if(printlevel >= 10)
1526
+ {
1527
+ "CPU-time for divPrimeList: "+string(timer-tt)+" seconds.";
1528
+ "Real-time for divPrimeList: "+string(rtimer-rt)+" seconds.";
1529
+ }
1530
+
1531
+ if(n1 > 1)
1532
+ {
1533
+ for(i = 1; i <= n1; i++)
1534
+ {
1535
+ open(l(i));
1536
+ if((variant == 1) || (variant == 3))
1537
+ {
1538
+ write(l(i), quote(smpStd(I_for_fork, eval(sigma), eval(L[j+i-1]),
1539
+ eval(variant), eval(hi))));
1540
+ }
1541
+ if((variant == 2) || (variant == 4))
1542
+ {
1543
+ write(l(i), quote(smpStd(I_for_fork, eval(sigma), eval(L[j+i-1]),
1544
+ eval(variant))));
1545
+ }
1546
+ }
1547
+ j = j + n1;
1548
+ k = 0;
1549
+ }
1550
+ }
1551
+ }
1552
+ example
1553
+ { "EXAMPLE:"; echo = 2;
1554
+ ring R1 = 0, (x,y,z), dp;
1555
+ ideal I;
1556
+ I[1] = -2xyz4+xz5+xz;
1557
+ I[2] = -2xyz4+yz5+yz;
1558
+ intvec sigma = 2,1,3;
1559
+ ideal sI = syModStd(I,sigma);
1560
+ sI;
1561
+
1562
+ ring R2 = 0, x(1..4), dp;
1563
+ ideal I = cyclic(4);
1564
+ I;
1565
+ intvec pi = 2,3,4,1;
1566
+ ideal sJ1 = syModStd(I,pi,1);
1567
+ ideal sJ2 = syModStd(I,pi,1,0);
1568
+ size(reduce(sJ1,sJ2));
1569
+ size(reduce(sJ2,sJ1));
1570
+ }