passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_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 (491) hide show
  1. PySingular.cpython-314-x86_64-linux-gnu.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +491 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +6 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-20aec911.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-21acf0c6.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-fcee31da.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-66e12231.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgf2x-a4cdec90.so.3.0.0 +0 -0
  11. passagemath_singular.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
  12. passagemath_singular.libs/libgmp-6e109695.so.10.5.0 +0 -0
  13. passagemath_singular.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  14. passagemath_singular.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  15. passagemath_singular.libs/libntl-e6f0d543.so.44.0.1 +0 -0
  16. passagemath_singular.libs/libomalloc-0-5c9e866e.9.6.so +0 -0
  17. passagemath_singular.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  18. passagemath_singular.libs/libpolys-4-5c0a87e0.4.1.so +0 -0
  19. passagemath_singular.libs/libquadmath-2284e583.so.0.0.0 +0 -0
  20. passagemath_singular.libs/libreadline-ea270e21.so.8.2 +0 -0
  21. passagemath_singular.libs/libsingular_resources-4-a1aafc6d.4.1.so +0 -0
  22. passagemath_singular.libs/libtinfo-ceb117d9.so.6.3 +0 -0
  23. sage/algebras/all__sagemath_singular.py +3 -0
  24. sage/algebras/fusion_rings/all.py +19 -0
  25. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  26. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-x86_64-linux-gnu.so +0 -0
  27. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  28. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  29. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-x86_64-linux-gnu.so +0 -0
  30. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  31. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  32. sage/algebras/fusion_rings/fusion_double.py +899 -0
  33. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  34. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-x86_64-linux-gnu.so +0 -0
  35. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  36. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  37. sage/algebras/fusion_rings/shm_managers.cpython-314-x86_64-linux-gnu.so +0 -0
  38. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  39. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  40. sage/algebras/letterplace/all.py +1 -0
  41. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-x86_64-linux-gnu.so +0 -0
  42. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  43. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  44. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-x86_64-linux-gnu.so +0 -0
  45. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  46. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  47. sage/algebras/letterplace/letterplace_ideal.cpython-314-x86_64-linux-gnu.so +0 -0
  48. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  49. sage/algebras/quatalg/all.py +2 -0
  50. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  51. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-x86_64-linux-gnu.so +0 -0
  52. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  53. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  54. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  55. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  56. sage/all__sagemath_singular.py +11 -0
  57. sage/ext_data/all__sagemath_singular.py +1 -0
  58. sage/ext_data/singular/function_field/core.lib +98 -0
  59. sage/interfaces/all__sagemath_singular.py +1 -0
  60. sage/interfaces/singular.py +2835 -0
  61. sage/libs/all__sagemath_singular.py +1 -0
  62. sage/libs/singular/__init__.py +1 -0
  63. sage/libs/singular/decl.pxd +1168 -0
  64. sage/libs/singular/function.cpython-314-x86_64-linux-gnu.so +0 -0
  65. sage/libs/singular/function.pxd +87 -0
  66. sage/libs/singular/function.pyx +1901 -0
  67. sage/libs/singular/function_factory.py +61 -0
  68. sage/libs/singular/groebner_strategy.cpython-314-x86_64-linux-gnu.so +0 -0
  69. sage/libs/singular/groebner_strategy.pxd +22 -0
  70. sage/libs/singular/groebner_strategy.pyx +582 -0
  71. sage/libs/singular/option.cpython-314-x86_64-linux-gnu.so +0 -0
  72. sage/libs/singular/option.pyx +671 -0
  73. sage/libs/singular/polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
  74. sage/libs/singular/polynomial.pxd +39 -0
  75. sage/libs/singular/polynomial.pyx +661 -0
  76. sage/libs/singular/ring.cpython-314-x86_64-linux-gnu.so +0 -0
  77. sage/libs/singular/ring.pxd +58 -0
  78. sage/libs/singular/ring.pyx +893 -0
  79. sage/libs/singular/singular.cpython-314-x86_64-linux-gnu.so +0 -0
  80. sage/libs/singular/singular.pxd +72 -0
  81. sage/libs/singular/singular.pyx +1944 -0
  82. sage/libs/singular/standard_options.py +145 -0
  83. sage/matrix/all__sagemath_singular.py +1 -0
  84. sage/matrix/matrix_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  85. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  86. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  87. sage/rings/all__sagemath_singular.py +1 -0
  88. sage/rings/function_field/all__sagemath_singular.py +1 -0
  89. sage/rings/function_field/derivations_polymod.py +911 -0
  90. sage/rings/function_field/element_polymod.cpython-314-x86_64-linux-gnu.so +0 -0
  91. sage/rings/function_field/element_polymod.pyx +406 -0
  92. sage/rings/function_field/function_field_polymod.py +2611 -0
  93. sage/rings/function_field/ideal_polymod.py +1775 -0
  94. sage/rings/function_field/order_polymod.py +1475 -0
  95. sage/rings/function_field/place_polymod.py +681 -0
  96. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  97. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-x86_64-linux-gnu.so +0 -0
  98. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  99. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  100. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-x86_64-linux-gnu.so +0 -0
  101. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  102. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  103. sage/rings/polynomial/plural.cpython-314-x86_64-linux-gnu.so +0 -0
  104. sage/rings/polynomial/plural.pxd +48 -0
  105. sage/rings/polynomial/plural.pyx +3171 -0
  106. sage/symbolic/all__sagemath_singular.py +1 -0
  107. sage/symbolic/comparison_impl.pxi +428 -0
  108. sage/symbolic/constants_c_impl.pxi +178 -0
  109. sage/symbolic/expression.cpython-314-x86_64-linux-gnu.so +0 -0
  110. sage/symbolic/expression.pxd +7 -0
  111. sage/symbolic/expression.pyx +14200 -0
  112. sage/symbolic/getitem_impl.pxi +202 -0
  113. sage/symbolic/pynac.pxi +572 -0
  114. sage/symbolic/pynac_constant_impl.pxi +133 -0
  115. sage/symbolic/pynac_function_impl.pxi +206 -0
  116. sage/symbolic/pynac_impl.pxi +2576 -0
  117. sage/symbolic/pynac_wrap.h +124 -0
  118. sage/symbolic/series_impl.pxi +272 -0
  119. sage/symbolic/substitution_map_impl.pxi +94 -0
  120. sage_wheels/bin/ESingular +0 -0
  121. sage_wheels/bin/Singular +0 -0
  122. sage_wheels/bin/TSingular +0 -0
  123. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  124. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  125. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  126. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  127. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  128. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  129. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  130. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  131. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  132. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  133. sage_wheels/lib/singular/MOD/interval.la +41 -0
  134. sage_wheels/lib/singular/MOD/interval.so +0 -0
  135. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  136. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  137. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  138. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  139. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  140. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  146. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  147. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  148. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  149. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  150. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  151. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  152. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  153. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  154. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  155. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  156. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  157. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  158. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  159. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  160. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  161. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  162. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  163. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  164. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  165. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  166. sage_wheels/libexec/singular/MOD/surfex +16 -0
  167. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  168. sage_wheels/share/factory/gftables/10201 +342 -0
  169. sage_wheels/share/factory/gftables/1024 +37 -0
  170. sage_wheels/share/factory/gftables/10609 +356 -0
  171. sage_wheels/share/factory/gftables/11449 +384 -0
  172. sage_wheels/share/factory/gftables/11881 +398 -0
  173. sage_wheels/share/factory/gftables/121 +6 -0
  174. sage_wheels/share/factory/gftables/12167 +408 -0
  175. sage_wheels/share/factory/gftables/125 +7 -0
  176. sage_wheels/share/factory/gftables/12769 +428 -0
  177. sage_wheels/share/factory/gftables/128 +7 -0
  178. sage_wheels/share/factory/gftables/1331 +47 -0
  179. sage_wheels/share/factory/gftables/1369 +48 -0
  180. sage_wheels/share/factory/gftables/14641 +490 -0
  181. sage_wheels/share/factory/gftables/15625 +523 -0
  182. sage_wheels/share/factory/gftables/16 +3 -0
  183. sage_wheels/share/factory/gftables/16129 +540 -0
  184. sage_wheels/share/factory/gftables/16384 +549 -0
  185. sage_wheels/share/factory/gftables/16807 +563 -0
  186. sage_wheels/share/factory/gftables/1681 +58 -0
  187. sage_wheels/share/factory/gftables/169 +8 -0
  188. sage_wheels/share/factory/gftables/17161 +574 -0
  189. sage_wheels/share/factory/gftables/1849 +64 -0
  190. sage_wheels/share/factory/gftables/18769 +628 -0
  191. sage_wheels/share/factory/gftables/19321 +646 -0
  192. sage_wheels/share/factory/gftables/19683 +659 -0
  193. sage_wheels/share/factory/gftables/2048 +71 -0
  194. sage_wheels/share/factory/gftables/2187 +75 -0
  195. sage_wheels/share/factory/gftables/2197 +76 -0
  196. sage_wheels/share/factory/gftables/2209 +76 -0
  197. sage_wheels/share/factory/gftables/22201 +742 -0
  198. sage_wheels/share/factory/gftables/22801 +762 -0
  199. sage_wheels/share/factory/gftables/2401 +82 -0
  200. sage_wheels/share/factory/gftables/243 +11 -0
  201. sage_wheels/share/factory/gftables/24389 +815 -0
  202. sage_wheels/share/factory/gftables/24649 +824 -0
  203. sage_wheels/share/factory/gftables/25 +3 -0
  204. sage_wheels/share/factory/gftables/256 +11 -0
  205. sage_wheels/share/factory/gftables/26569 +888 -0
  206. sage_wheels/share/factory/gftables/27 +3 -0
  207. sage_wheels/share/factory/gftables/27889 +932 -0
  208. sage_wheels/share/factory/gftables/2809 +96 -0
  209. sage_wheels/share/factory/gftables/28561 +954 -0
  210. sage_wheels/share/factory/gftables/289 +12 -0
  211. sage_wheels/share/factory/gftables/29791 +995 -0
  212. sage_wheels/share/factory/gftables/29929 +1000 -0
  213. sage_wheels/share/factory/gftables/3125 +107 -0
  214. sage_wheels/share/factory/gftables/32 +4 -0
  215. sage_wheels/share/factory/gftables/32041 +1070 -0
  216. sage_wheels/share/factory/gftables/32761 +1094 -0
  217. sage_wheels/share/factory/gftables/32768 +1095 -0
  218. sage_wheels/share/factory/gftables/343 +14 -0
  219. sage_wheels/share/factory/gftables/3481 +118 -0
  220. sage_wheels/share/factory/gftables/361 +14 -0
  221. sage_wheels/share/factory/gftables/36481 +1218 -0
  222. sage_wheels/share/factory/gftables/3721 +126 -0
  223. sage_wheels/share/factory/gftables/37249 +1244 -0
  224. sage_wheels/share/factory/gftables/38809 +1296 -0
  225. sage_wheels/share/factory/gftables/39601 +1322 -0
  226. sage_wheels/share/factory/gftables/4 +3 -0
  227. sage_wheels/share/factory/gftables/4096 +139 -0
  228. sage_wheels/share/factory/gftables/44521 +1486 -0
  229. sage_wheels/share/factory/gftables/4489 +152 -0
  230. sage_wheels/share/factory/gftables/49 +4 -0
  231. sage_wheels/share/factory/gftables/4913 +166 -0
  232. sage_wheels/share/factory/gftables/49729 +1660 -0
  233. sage_wheels/share/factory/gftables/5041 +170 -0
  234. sage_wheels/share/factory/gftables/50653 +1691 -0
  235. sage_wheels/share/factory/gftables/512 +20 -0
  236. sage_wheels/share/factory/gftables/51529 +1720 -0
  237. sage_wheels/share/factory/gftables/52441 +1750 -0
  238. sage_wheels/share/factory/gftables/529 +20 -0
  239. sage_wheels/share/factory/gftables/5329 +180 -0
  240. sage_wheels/share/factory/gftables/54289 +1812 -0
  241. sage_wheels/share/factory/gftables/57121 +1906 -0
  242. sage_wheels/share/factory/gftables/58081 +1938 -0
  243. sage_wheels/share/factory/gftables/59049 +1971 -0
  244. sage_wheels/share/factory/gftables/6241 +210 -0
  245. sage_wheels/share/factory/gftables/625 +23 -0
  246. sage_wheels/share/factory/gftables/63001 +2102 -0
  247. sage_wheels/share/factory/gftables/64 +5 -0
  248. sage_wheels/share/factory/gftables/6561 +221 -0
  249. sage_wheels/share/factory/gftables/6859 +231 -0
  250. sage_wheels/share/factory/gftables/6889 +232 -0
  251. sage_wheels/share/factory/gftables/729 +27 -0
  252. sage_wheels/share/factory/gftables/7921 +266 -0
  253. sage_wheels/share/factory/gftables/8 +3 -0
  254. sage_wheels/share/factory/gftables/81 +5 -0
  255. sage_wheels/share/factory/gftables/8192 +276 -0
  256. sage_wheels/share/factory/gftables/841 +30 -0
  257. sage_wheels/share/factory/gftables/9 +3 -0
  258. sage_wheels/share/factory/gftables/9409 +316 -0
  259. sage_wheels/share/factory/gftables/961 +34 -0
  260. sage_wheels/share/info/singular.info +191898 -0
  261. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  262. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  263. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  264. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  265. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  266. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  267. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  268. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  269. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  270. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  271. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  272. sage_wheels/share/singular/LIB/all.lib +136 -0
  273. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  274. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  275. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  276. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  277. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  278. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  279. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  280. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  281. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  282. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  283. sage_wheels/share/singular/LIB/central.lib +2169 -0
  284. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  285. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  286. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  287. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  288. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  289. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  290. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  291. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  292. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  293. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  294. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  295. sage_wheels/share/singular/LIB/control.lib +1636 -0
  296. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  297. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  298. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  299. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  300. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  301. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  302. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  303. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  304. sage_wheels/share/singular/LIB/deform.lib +925 -0
  305. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  306. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  307. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  308. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  309. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  310. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  311. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  312. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  313. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  314. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  315. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  316. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  317. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  318. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  319. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  320. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  321. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  322. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  323. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  324. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  325. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  326. sage_wheels/share/singular/LIB/general.lib +1350 -0
  327. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  328. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  329. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  330. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  331. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  332. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  333. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  334. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  335. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  336. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  337. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  338. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  339. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  340. sage_wheels/share/singular/LIB/help.cnf +57 -0
  341. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  342. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  343. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  344. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  345. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  346. sage_wheels/share/singular/LIB/inout.lib +679 -0
  347. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  348. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  349. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  350. sage_wheels/share/singular/LIB/invar.lib +443 -0
  351. sage_wheels/share/singular/LIB/involut.lib +980 -0
  352. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  353. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  354. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  355. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  356. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  357. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  358. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  359. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  360. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  361. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  362. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  363. sage_wheels/share/singular/LIB/methods.lib +212 -0
  364. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  365. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  366. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  367. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  368. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  369. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  370. sage_wheels/share/singular/LIB/modular.lib +545 -0
  371. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  372. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  373. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  374. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  375. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  376. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  377. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  378. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  379. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  380. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  381. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  382. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  383. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  384. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  385. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  386. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  387. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  388. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  389. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  390. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  391. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  392. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  393. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  394. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  395. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  396. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  397. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  398. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  399. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  400. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  401. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  402. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  403. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  404. sage_wheels/share/singular/LIB/perron.lib +202 -0
  405. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  406. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  407. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  408. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  409. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  410. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  411. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  412. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  413. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  414. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  415. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  416. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  417. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  418. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  419. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  420. sage_wheels/share/singular/LIB/random.lib +455 -0
  421. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  422. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  423. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  424. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  425. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  426. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  427. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  428. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  429. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  430. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  431. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  432. sage_wheels/share/singular/LIB/resources.lib +170 -0
  433. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  434. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  435. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  436. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  437. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  438. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  439. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  440. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  441. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  442. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  443. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  444. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  445. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  446. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  447. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  448. sage_wheels/share/singular/LIB/sets.lib +524 -0
  449. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  450. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  451. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  452. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  453. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  454. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  455. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  456. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  457. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  458. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  459. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  460. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  461. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  462. sage_wheels/share/singular/LIB/surf.lib +506 -0
  463. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  464. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  465. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  466. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  467. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  468. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  469. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  470. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  471. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  472. sage_wheels/share/singular/LIB/template.lib +116 -0
  473. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  474. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  475. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  476. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  477. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  478. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  479. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  480. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  481. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  482. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  483. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  484. sage_wheels/share/singular/emacs/COPYING +44 -0
  485. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  486. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  487. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  488. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  489. sage_wheels/share/singular/emacs/singular.el +4273 -0
  490. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  491. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,1211 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ version="iversion dmodideal.lib 4.1.2.0 Feb_2019 "; // $Id: 635e88d50668a6d4e42149f5c51a7d95fa729447 $
3
+ category="Noncommutative";
4
+ info="
5
+ LIBRARY: dmodideal.lib Algorithms for Bernstein-Sato ideals of morphisms
6
+ AUTHORS: Robert Loew, robert.loew at rwth-aachen.de
7
+ Viktor Levandovskyy, levandov at math.rwth-aachen.de
8
+ Jorge Martin Morales, jorge at unizar.es
9
+
10
+ OVERVIEW:
11
+ Let K be a field of characteristic 0. Given a polynomial ring
12
+ R = K[x_1,...,x_n] and a map, given by polynomials F_1,...,F_r from R,
13
+ one is interested in the R[1/(F_1*...*F_r)]-module of rank one, generated by
14
+ the symbol F^s=F_1^(s_1)*...*F_r^(s_r) for symbolic discrete variables s_1,...,s_r.
15
+ This module R[1/(F_1*...*F_r)]*F^s has a structure of a D(R)[s_1,...,s_r]-module, where D(R)
16
+ is an n-th Weyl algebra K<x_1,...,x_n,d_1,...,d_n | d_j x_j = x_j d_j +1> and
17
+ D(R)[s] := D(R) tensored with K[s]:=K[s_1,...,s_r] over K.
18
+ We often write just D for D(R) and D[s] for D(R)[s].
19
+
20
+ One is interested in the computation of the following data:
21
+ @*- Ann_{D[s]} F^s, the annihilator of F^s in D[s]; see annihilatorMultiFs
22
+ @*- Ann^{1}_{D[s]} F^s, the logarithmic annihilator of F^s in D[s]; see annfsLogIdeal
23
+ @*- several kinds of global Bernstein-Sato ideals in K[s],
24
+ cf. (CU) and (Bud12); see BernsteinSatoIdeal and BSidealFromAnn
25
+ @*- Ann_{D} F^alpha for alpha from K^r, the annihilator of F^alpha in D; see annfalphaI
26
+ @*- sub- and over-ideals, bounding the Bernstein-Sato ideal; see BFBoundsBudur
27
+
28
+ REFERENCES:
29
+ (BM) the Ann F^s algorithm by Briancon and Maisonobe (Remarques sur
30
+ l'ideal de Bernstein associe a des polynomes, preprint, 2002)@*
31
+ (LM08) V. Levandovskyy and J. Martin-Morales, ISSAC 2008@*
32
+ (CU) Castro and Ucha, On the computation of Bernstein-Sato ideals, JSC 2005@*
33
+ (SST) Saito, Sturmfels, Takayama 'Groebner Deformations of Hypergeometric
34
+ Differential Equations', Springer, 2000@*
35
+ (Bud12) N. Budur, Bernstein-Sato ideals and local systems, Annales de
36
+ l'Institut Fourier, Volume 65 (2015) no. 2@*
37
+ (OT99) T. Oaku and N. Takayama, An algorithm for de Rham cohomology groups of
38
+ the complement of an affine variety via D-module computation,
39
+ Journal of Pure and Applied Algebra, 1999
40
+
41
+ PROCEDURES:
42
+ annfsLogIdeal(F); compute the logarithmic annihilator Ann^(1) F^s in D
43
+ annihilatorMultiFs(F[,eng,us,ord]); compute the annihilator Ann F^s in D
44
+ BSidealFromAnn(F, @R [,eng,met]); compute several kinds of Bernstein-Sato ideals, given Ann F^s
45
+ BernsteinSatoIdeal(F [,eng,met,us]); compute several kinds of Bernstein-Sato ideals, given only F
46
+ BFBoundsBudur(F,m); compute upper and lower bounds of several kinds of Bernstein-Sato ideals with the method of (Bud12)
47
+ annfalphaI(f,alpha); compute Ann F^alpha in D, where alpha is an ideal from the ground field
48
+ extractS(I,r); give I as ideal in the commutative polynomial ring in the first r variables
49
+
50
+ SEE ALSO: dmod_lib, dmodapp_lib, dmodloc_lib, gmssing_lib, bfun_lib
51
+
52
+ KEYWORDS: D-module; Bernstein-Sato ideal; global Bernstein-Sato ideal;
53
+ D-module structure; left annihilator ideal; Weyl algebra; logarithmic annihilator ideal
54
+ ";
55
+
56
+ LIB "dmod.lib";
57
+ LIB "dmodloc.lib";
58
+ LIB "ncpreim.lib"; //for eliminateNC
59
+
60
+ /* older text by Robert: now merged with the description
61
+ Guide:
62
+ @* - Ann F^s=Ann F_1^(s_1)*...*F_r^(s_r) can be computed by annihilatorMultiFs
63
+ @* - the global Bernstein-Sato ideal can be computed by BernsteinSatoIdeal
64
+ @* - Ann F^alpha for alpha from K^r can be computed by annfalphaI
65
+ @* - if several Bernstein-Sato ideals of the same ideal need to be computed,
66
+ @* it may be useful to apply annihilatorMultiFs once and afterwards use the
67
+ @* result for several calls of BSidealFromAnn
68
+ @* - if the exact computation of the Bernstein-Sato ideal does not terminate,
69
+ @* the use of BFBoundsBudur may be successful
70
+ */
71
+
72
+ /* from dmodloc.lib */
73
+ static proc safeVarName (string s)
74
+ "
75
+ USAGE: safeVarName(s); s string
76
+ RETURN: string, returns s if s is not the name of a par/var of basering
77
+ and `@' + s otherwise
78
+ EXAMPLE: example safeVarName; shows examples
79
+ "
80
+ {
81
+ string S = "," + charstr(basering) + "," + varstr(basering) + ",";
82
+ s = "," + s + ",";
83
+ while (find(S,s) <> 0)
84
+ {
85
+ s[1] = "@";
86
+ s = "," + s;
87
+ }
88
+ s = s[2..size(s)-1];
89
+ return(s);
90
+ }
91
+ example
92
+ {
93
+ "EXAMPLE:"; echo = 2;
94
+ ring r = (0,a),(w,@w,x,y),dp;
95
+ safeVarName("a");
96
+ safeVarName("x");
97
+ safeVarName("z");
98
+ safeVarName("w");
99
+ }
100
+
101
+
102
+ static proc ksxD(ideal F)
103
+ "USAGE: ksxD(F); F an ideal, call from a polynomial ring
104
+ ASSUME: basering is a commutative polynomial ring in characteristic 0
105
+ RETURN: ring
106
+ PURPOSE: returns the ring k[_s,_x,_D] needed for annfs etc.
107
+ "
108
+ {
109
+ int ppl = printlevel-voice+2;
110
+ def save = basering;
111
+ int N = nvars(basering);
112
+ //if F has some generators which are zero, int P = ncols(F);
113
+ int P = size(F);
114
+ if (P == 0)
115
+ {
116
+ ERROR("zero ideal in the input");
117
+ }
118
+ P = ncols(F);
119
+ int Nnew = 2*N+P;
120
+ int i,j;
121
+ string s;
122
+ list RL = ringlist(basering);
123
+ list L, Lord;
124
+ list tmp;
125
+ intvec iv;
126
+ L[1] = RL[1]; //char
127
+ L[4] = RL[4]; //char, minpoly
128
+ // construct list of varnames
129
+ list Name = RL[2];
130
+ list RName;
131
+ for (j=1; j<=P; j++)
132
+ {
133
+ RName[j] = safeVarName("s("+string(j)+")");
134
+ }
135
+ // now, create the names for new vars
136
+ list DName;
137
+ for(i=1; i<=N; i++)
138
+ {
139
+ DName[i] = safeVarName("D"+Name[i]);
140
+ }
141
+ list NName = RName + Name + DName;
142
+ L[2] = NName;
143
+ // Name, Dname will be used further
144
+ kill NName;
145
+ // block ord (lp(P),dp);
146
+ tmp[1] = "lp"; //string
147
+ tmp[2] = intvec(1:P); //intvec
148
+ Lord[1] = tmp;
149
+ // continue with dp 1,1,1,1...
150
+ tmp[1] = "dp"; //string
151
+ tmp[2] = intvec(1:Nnew);
152
+ Lord[2] = tmp;
153
+ tmp[1] = "C";
154
+ tmp[2] = intvec(0);
155
+ Lord[3] = tmp;
156
+ tmp = 0;
157
+ L[3] = Lord;
158
+ // we are done with the list
159
+ def @R@ = ring(L);
160
+ setring @R@;
161
+ // add non-commutative relations
162
+ matrix @D[Nnew][Nnew];
163
+ for(i=1; i<=N; i++)
164
+ {
165
+ @D[P+i,P+N+i] = 1;
166
+ }
167
+ def @R = nc_algebra(1,@D);
168
+ return(@R);
169
+ }
170
+ example
171
+ {
172
+ "EXAMPLE:"; echo = 2;
173
+ ring R = 0,(x,y),dp;
174
+ ideal F = x,y,0,1;
175
+ ksxD(F);
176
+ }
177
+
178
+
179
+ proc annfsLogIdeal(ideal F)
180
+ "USAGE: annfsLogIdeal(F); F an ideal
181
+ RETURN: ring
182
+ PURPOSE: compute the logarithmic annihilator of F[1]^s(1)*...*F[P]^s(P)
183
+ ASSUME: basering is a commutative polynomial ring in characteristic 0
184
+ NOTE: activate the output ring with the @code{setring} command. In this ring,
185
+ annfsLog is the logarithmic annihilator of F^s (no Groebner basis).
186
+ If printlevel=1, progress debug messages will be printed,
187
+ if printlevel>=2, all the debug messages will be printed.
188
+ EXAMPLE: example annfsLogIdeal; shows examples
189
+ "
190
+ {
191
+ int ppl = printlevel-voice+2;
192
+ dbprint(ppl,"// enter annfsLogIdeal");
193
+ dbprint(ppl-1, F);
194
+ if(!isCommutative()){
195
+ ERROR("Expected commutative polynomial ring.");
196
+ }
197
+ def @R = ksxD(F);
198
+ def save = basering;
199
+ int N = nvars(basering);
200
+ //if F has some generators which are zero, int P = ncols(I);
201
+ int P = size(F);
202
+ if (P < ncols(F))
203
+ {
204
+ ERROR("//One factor is 0.");
205
+ }
206
+ P = size(F);
207
+ dbprint(ppl,"// adding syzygy-driven elements to the ideal");
208
+ // -- form the extended Jacobian matrix; do the comps over K[x]
209
+ module JC = module(transpose(jacob(F))); // NxP
210
+ for (int j=1; j<=P; j++)
211
+ {
212
+ JC[j] = JC[j] + F[j]*gen(N+j);
213
+ }
214
+ dbprint(ppl,"// computing syzygies of the extended Jacobian matrix over K[_x]");
215
+ dbprint(ppl-1, matrix(JC));
216
+ matrix SJ = transpose(syz(transpose(JC)));
217
+ dbprint(ppl,"// finished computing syzygies of the ext Jacobian matrix over K[_x]");
218
+ dbprint(ppl-1, matrix(SJ));
219
+ setring @R;
220
+ // add generators: first N comps d_i, then P comps s_j
221
+ matrix SJ = imap(save, SJ);
222
+ poly pi;
223
+ ideal annfsLog;
224
+ for (int i=1; i<=nrows(SJ); i++)
225
+ {
226
+ pi = 0;
227
+ for (j=1; j<=N; j++)
228
+ {
229
+ pi = pi + SJ[i,j]*var(P+N+j);
230
+ }
231
+ for (j=1; j<=P; j++)
232
+ {
233
+ pi = pi + SJ[i,N+j]*var(j);//=s(j)
234
+ }
235
+ dbprint(ppl-1, "// adding element:" + string(pi));
236
+ annfsLog = annfsLog, pi;
237
+ }
238
+ annfsLog = simplify(annfsLog,2);
239
+ // decision: GB is the wish of a user
240
+ //annfsLog = std(annfsLog);
241
+ export annfsLog;
242
+ dbprint(ppl,"// exit annfsLogIdeal");
243
+ return(@R);
244
+ }
245
+ example
246
+ {
247
+ "EXAMPLE:"; echo = 2;
248
+ ring R = 0,(x,y),dp;
249
+ ideal F = x^3+y^4+x*y^3, x;
250
+ def S1 = annfsLogIdeal(F);
251
+ setring S1;
252
+ annfsLog;
253
+ setring R; // now compare with the full annihilator
254
+ def S = annihilatorMultiFs(F);
255
+ setring S;
256
+ annFs;
257
+ lead(groebner(imap(S1,annfsLog)));
258
+ lead(groebner(annFs)); // and we see the difference
259
+ }
260
+
261
+
262
+ static proc annFsOrder(int order, int n, int r)
263
+ "USAGE: annFsOrder(ord,n,r); ord,n,r ints
264
+ RETURN: list
265
+ PURPOSE: static procedure for annihilatorMultiFs
266
+ computes the order used for the ring in annihilatorMultiFs
267
+ NOTE: ord describes the desired order from the following choices:
268
+ 0 - 'dp'
269
+ 1 - elimination order for x, 'dp' in the parts
270
+ 2 - elimination order for s, 'dp' in the parts
271
+ 3 - elimination order for x and s, 'dp' in the parts
272
+ 4 - elimination order for x and D, 'dp' in the parts
273
+ (used for the further work in the Bernstein-Sato ideal)
274
+ n and r describe the number of components x_i/Dx_i and s_j
275
+ "
276
+ {
277
+ list tmp = 0;
278
+ list Lord = 0;
279
+ int i;
280
+
281
+ if(order == 0){
282
+ Lord = list(list("dp",2*n+r));
283
+ }
284
+
285
+ if(order == 1){
286
+ // block ord (dp(n),dp);
287
+ tmp[1] = "dp"; //string
288
+ tmp[2] = intvec(1:n); //intvec
289
+ Lord[1] = tmp;
290
+ // continue with dp 1,1,1,1...
291
+ tmp[1] = "dp"; //string
292
+ tmp[2] = intvec(1:(n+r));
293
+ Lord[2] = tmp;
294
+ tmp[1] = "C";
295
+ tmp[2] = intvec(0);
296
+ Lord[3] = tmp;
297
+ }
298
+
299
+ if(order == 2){
300
+ // "block" order ((0,0,dp),
301
+ // (dp,0,0),
302
+ // (0,dp,0))
303
+ tmp[1] = "M"; //string
304
+
305
+ //first r lines of the matrix
306
+ tmp[2] = intvec((0:2*n),(1:r)); //intvec
307
+ for(i=1; i<r; i++){
308
+ tmp[2] = intvec(tmp[2],(0:(2*n+r-i)),intvec(-1));
309
+ if(i>1){
310
+ tmp[2] = intvec(tmp[2],(0:(i-1)));
311
+ }
312
+ }
313
+ //next n lines of the matrix
314
+ tmp[2] = intvec(tmp[2],(1:n),(0:(n+r))); //intvec
315
+ for(i=1; i<n; i++){
316
+ tmp[2] = intvec(tmp[2],(0:(n-i)),intvec(-1), intvec(0:(n+r+i-1)));
317
+ }
318
+ //last n lines of the matrix
319
+ tmp[2] = intvec(tmp[2],(0:n),(1:n),(0:r)); //intvec
320
+ for(i=1; i<n; i++){
321
+ tmp[2] = intvec(tmp[2],(0:(2*n-i)),intvec(-1), intvec(0:(r+i-1)));
322
+ }
323
+
324
+ Lord[1] = tmp;
325
+ tmp[1] = "C";
326
+ tmp[2] = intvec(0);
327
+ Lord[2] = tmp;
328
+ }
329
+
330
+ if(order == 3){
331
+ // "block" order ((dp,0,0),
332
+ // (0,0,dp),
333
+ // (0,dp,0))
334
+ tmp[1] = "M"; //string
335
+
336
+ //first r lines of the matrix
337
+ tmp[2] = intvec((1:n),(0:(n+r))); //intvec
338
+ for(i=1; i<n; i++){
339
+ tmp[2] = intvec(tmp[2],(0:(n-i)),intvec(-1), intvec(0:(n+r+i-1)));
340
+ }
341
+ //next n lines of the matrix
342
+ tmp[2] = intvec(tmp[2],(0:2*n),(1:r)); //intvec
343
+ for(i=1; i<r; i++){
344
+ tmp[2] = intvec(tmp[2],(0:(2*n+r-i)),intvec(-1));
345
+ if(i>1){
346
+ tmp[2] = intvec(tmp[2],(0:(i-1)));
347
+ }
348
+ }
349
+ //last n lines of the matrix
350
+ tmp[2] = intvec(tmp[2],(0:n),(1:n),(0:r)); //intvec
351
+ for(i=1; i<n; i++){
352
+ tmp[2] = intvec(tmp[2],(0:(2*n-i)),intvec(-1), intvec(0:(r+i-1)));
353
+ }
354
+
355
+ Lord[1] = tmp;
356
+ tmp[1] = "C";
357
+ tmp[2] = intvec(0);
358
+ Lord[2] = tmp;
359
+ }
360
+
361
+ if(order == 4){
362
+ // block ord (dp(2*n),dp);
363
+ tmp[1] = "dp"; //string
364
+ tmp[2] = intvec(1:(2*n)); //intvec
365
+ Lord[1] = tmp;
366
+ // continue with dp 1,1,1,1...
367
+ tmp[1] = "dp"; //string
368
+ tmp[2] = intvec(1:r);
369
+ Lord[2] = tmp;
370
+ tmp[1] = "C";
371
+ tmp[2] = intvec(0);
372
+ Lord[3] = tmp;
373
+ }
374
+
375
+ return(Lord);
376
+ }
377
+
378
+
379
+ proc annihilatorMultiFs(ideal F, list #)
380
+ "USAGE: annihilatorMultiFs(F [,eng,us,ord]); F an ideal, eng, us, ord optional ints
381
+ RETURN: ring
382
+ PURPOSE: compute Ann(F[1]^s(1)*...*F[P]^s(P))
383
+ with the multivariate algorithm by Briancon and Maisonobe.
384
+ ASSUME: basering is a commutative polynomial ring in characteristic 0
385
+ NOTE: activate the output ring with the @code{setring} command. In this ring,
386
+ the ideal annFs is the annihilator of F[1]^s_1*..*F[P]^s_p.
387
+ If eng <>0, @code{std} is used for Groebner basis computations,
388
+ otherwise, and by default @code{slimgb} is used.
389
+ If us<>0, then syzygies-driven method is used additionally.
390
+ If specified, ord describes the desired order from the following choices:
391
+ 0 - 'dp'
392
+ 1 - elimination order for x, 'dp' in the parts
393
+ 2 - elimination order for s, 'dp' in the parts
394
+ 3 - elimination order for x and s, 'dp' in the parts
395
+ 4 - elimination order for x and D, 'dp' in the parts
396
+ (used for the further work in the Bernstein-Sato ideal)
397
+ If printlevel=1, progress debug messages will be printed,
398
+ if printlevel>=2, all the debug messages will be printed.
399
+ EXAMPLE: example annihilatorMultiFs; shows examples
400
+ "
401
+ {
402
+ int ppl = printlevel - voice + 2;
403
+ dbprint(ppl,"// enter annihilatorMultiFs");
404
+ dbprint(ppl-1, F);
405
+ dbprint(ppl-1, #);
406
+ if(!isCommutative()){
407
+ ERROR("Expected commutative polynomial ring.");
408
+ }
409
+ int eng = 0;
410
+ int usesyz = 0;
411
+ if ( size(#)>0 )
412
+ {
413
+ if ( typeof(#[1]) == "int" )
414
+ {
415
+ eng = int(#[1]);
416
+ }
417
+ if ( size(#)>1 )
418
+ {
419
+ if ( typeof(#[2]) == "int" )
420
+ {
421
+ usesyz = int(#[2]);
422
+ }
423
+ }
424
+ }
425
+ // printf("plevel :%s, voice: %s",printlevel,voice);
426
+ def save = basering;
427
+ int N = nvars(basering);
428
+ //if F has some generators which are zero, int P = ncols(I);
429
+ int P = size(F);
430
+ if (P < ncols(F))
431
+ {
432
+ ERROR("//One factor is 0.");
433
+ }
434
+ P = size(F);
435
+ if (P == 0)
436
+ {
437
+ ERROR("zero ideal in the input");
438
+ }
439
+ int Nnew = 2*N+2*P;
440
+ int i,j;
441
+ string s;
442
+ list RL = ringlist(basering);
443
+ list L, Lord;
444
+ list tmp;
445
+ intvec iv;
446
+ L[1] = RL[1]; //char
447
+ L[4] = RL[4]; //char, minpoly
448
+ // find new varnames
449
+ list Name = RL[2];
450
+ list RName;
451
+ for (j=1; j<=P; j++)
452
+ {
453
+ RName[j] = safeVarName("t("+string(j)+")");
454
+ RName[j+P] = safeVarName("s("+string(j)+")");
455
+ }
456
+ list DName;
457
+ for(i=1; i<=N; i++)
458
+ {
459
+ DName[i] = safeVarName("D"+Name[i]); //concat
460
+ }
461
+ list NName = RName + Name + DName;
462
+ L[2] = NName;
463
+ // Name, Dname will be used further
464
+ kill NName;
465
+ // block ord (lp(P),dp);
466
+ tmp[1] = "lp"; //string
467
+ tmp[2] = intvec(1:(2*P)); //intvec
468
+ Lord[1] = tmp;
469
+ // continue with dp 1,1,1,1...
470
+ tmp[1] = "dp"; //string
471
+ tmp[2] = intvec(1:Nnew);
472
+ Lord[2] = tmp;
473
+ tmp[1] = "C";
474
+ tmp[2] = intvec(0);
475
+ Lord[3] = tmp;
476
+ tmp = 0;
477
+ L[3] = Lord;
478
+ // we are done with the list
479
+ def @R@ = ring(L);
480
+ setring @R@;
481
+ matrix @D[Nnew][Nnew];
482
+ for (i=1; i<=P; i++)
483
+ {
484
+ @D[i,i+P] = var(i);//=t(i)
485
+ }
486
+ for(i=1; i<=N; i++)
487
+ {
488
+ @D[2*P+i,2*P+N+i] = 1;
489
+ }
490
+ // L[5] = matrix(UpOneMatrix(Nnew));
491
+ // L[6] = @D;
492
+ // @R is the non-commutative ring k<_t,_s,_x,_Dx>
493
+ def @R = nc_algebra(1,@D);
494
+ setring @R;
495
+ kill @R@;
496
+ dbprint(ppl,"// the ring @R(_t,_s,_x,_Dx) is ready");
497
+ dbprint(ppl-1, @R);
498
+ // create the ideal I which will become ann(F^s)
499
+ ideal F = imap(save,F);
500
+ ideal I = var(1)*F[1]+var(P+1);//=t(1)*F[1]+s(1)
501
+ for (j=2; j<=P; j++)
502
+ {
503
+ I = I, var(j)*F[j]+var(P+j);//=t(j)*F[j]+s(j)
504
+ }
505
+ poly p,q;
506
+ for (i=1; i<=N; i++)
507
+ {
508
+ p=0;
509
+ for (j=1; j<=P; j++)
510
+ {
511
+ q = var(j);//=t(j)
512
+ q = diff(F[j],var(2*P+i))*q;
513
+ p = p + q;
514
+ }
515
+ I = I, var(2*P+N+i) + p;
516
+ }
517
+ // -------- the ideal I is ready ----------
518
+ if (usesyz)
519
+ {
520
+ //add Ann^1(F^s) to I
521
+ setring save;
522
+ def @R@ = annfsLogIdeal(F);
523
+ setring @R;
524
+ I = I, imap(@R@, annfsLog);
525
+ kill @R@;
526
+ }
527
+ dbprint(ppl,"// starting the elimination of "+string(t(1..P))+" in @R");
528
+ dbprint(ppl-1, I);
529
+ ideal J = engine(I,eng);
530
+ // K is already ann(F^s)
531
+ ideal K = nselect(J,1..P);
532
+ kill I,J;
533
+ dbprint(ppl,"// all t(i) are eliminated");
534
+ dbprint(ppl-1, K); //K is without t(i)
535
+ // ----------- the ring @R2 ------------
536
+ // _x, _Dx,s; elim.ord for _x,_Dx.
537
+ // keep: N, i,j,s, tmp, RL
538
+ setring save;
539
+ Nnew = 2*N+P;
540
+ kill Lord, tmp, iv, RName;
541
+ list Lord, tmp;
542
+ intvec iv;
543
+ L[1] = RL[1]; //char
544
+ L[4] = RL[4]; //char, minpoly
545
+ // now, create the names for new var
546
+ for (j=1; j<=P; j++)
547
+ {
548
+ tmp[j] = safeVarName("s("+string(j)+")");
549
+ }
550
+ list safeSName = tmp; //for later use
551
+ // DName is defined earlier
552
+ list NName = Name + DName + tmp;
553
+ L[2] = NName;
554
+ tmp = 0;
555
+ if ( size(#)>2 ){
556
+ L[3] = annFsOrder(#[3],(Nnew-P) div 2,P);
557
+ }
558
+ else
559
+ {
560
+ L[3] = annFsOrder(0,(Nnew-P) div 2,P);
561
+ }
562
+ // we are done with the list. Now add a Plural part
563
+ def @R2@ = ring(L);
564
+ setring @R2@;
565
+ matrix @D[Nnew][Nnew];
566
+ for (i=1; i<=N; i++)
567
+ {
568
+ @D[i,N+i]=1;
569
+ }
570
+ def @R2 = nc_algebra(1,@D);
571
+ setring @R2;
572
+ kill @R2@;
573
+ dbprint(ppl,"// the ring @R2(_x,_Dx,_s) is ready");
574
+ dbprint(ppl-1, @R2);
575
+ ideal F = imap(save,F);
576
+ ideal annFs = imap(@R,K);
577
+ export annFs;
578
+
579
+ dbprint(ppl,"// exit annihilatorMultiFs");
580
+ return(@R2);
581
+ }
582
+ example
583
+ {
584
+ "EXAMPLE:"; echo = 2;
585
+ ring R = 0,(x,y),dp;
586
+ ideal F = x^2-y,y;
587
+ def S = annihilatorMultiFs(F,0,0,0);
588
+ setring S;
589
+ annFs;
590
+ groebner(annFs);
591
+ }
592
+
593
+ proc BSidealFromAnn(ideal F, @R, list #)
594
+ "USAGE: BSidealFromAnn(F, @R [,eng,met]); F an ideal, @R a ring, eng, met optional ints
595
+ RETURN: ring
596
+ PURPOSE: compute several kinds of Bernstein-Sato ideals, associated to
597
+ f = F[1]*..*F[P], with the multivariate algorithm by Briancon and Maisonobe
598
+ from ann(F^s) as input.
599
+ ASSUME: basering is a commutative polynomial ring in characteristic 0
600
+ @R is a ring as returned from annihilatorMultiFs.
601
+ NOTE: activate the output ring with the @code{setring} command. In this ring,
602
+ the ideal BS is a Bernstein-Sato ideal of a polynomial f = F[1]*..*F[P].
603
+ If eng <>0, @code{std} is used for Groebner basis computations,
604
+ otherwise, and by default @code{slimgb} is used.
605
+ If met is of type int:
606
+ if met <0, the B-Sigma ideal (cf. (CU)) is computed.
607
+ If 0 < met < P, then the ideal B_met (cf. (CU)) is computed.
608
+ If met is an intvec or a list of intvecs, Budurs generalized Bernstein-Sato ideal
609
+ associated to met is computed.
610
+ Otherwise, and by default, the ideal B (cf. (CU)) is computed.
611
+ If met is of type intvec:
612
+ Budurs generalized Bernstein-Sato ideal B^met_F is computed.
613
+ If printlevel=1, progress debug messages will be printed,
614
+ if printlevel>=2, all the debug messages will be printed.
615
+ EXAMPLE: example BSIdealFromAnn; shows examples
616
+ "
617
+ {
618
+ int ppl = printlevel-voice+2;
619
+ dbprint(ppl,"// enter BSidealFromAnn");
620
+ dbprint(ppl-1, F);
621
+ dbprint(ppl-1, @R);
622
+ dbprint(ppl-1, #);
623
+ if(!isCommutative()){
624
+ ERROR("Expected commutative polynomial ring.");
625
+ }
626
+ if( typeof(@R) != "ring" )
627
+ {
628
+ ERROR("The second parameter should be of type ring.");
629
+ }
630
+
631
+ int met = 0;
632
+ list metVecs;
633
+ int eng = 0;
634
+ if ( size(#) > 0 )
635
+ {
636
+ if ( typeof(#[1]) == "int" )
637
+ {
638
+ eng = int(#[1]);
639
+ }
640
+ if ( size(#) > 1 )
641
+ {
642
+ if ( typeof(#[2]) == "int" )
643
+ {
644
+ met = int(#[2]);
645
+ }
646
+ else{ if ( typeof(#[2]) == "intvec" )
647
+ {
648
+ metVecs = list(intvec(#[2]));
649
+ }
650
+ else{ if ( typeof(#[2]) == "list" )
651
+ {
652
+ metVecs = #[2];
653
+ }
654
+ else
655
+ {
656
+ ERROR("met does not have one of the allowed types.");
657
+ }}}
658
+ }
659
+ else
660
+ {
661
+ met = 0;
662
+ }
663
+ }
664
+ else
665
+ {
666
+ met = 0;
667
+ }
668
+
669
+ def save = basering;
670
+ int N = nvars(basering);
671
+ //if F has some generators which are zero, int P = ncols(I);
672
+ int P = size(F);
673
+ if (P < ncols(F))
674
+ {
675
+ ERROR("//One factor is 0.");
676
+ }
677
+ P = size(F);
678
+ if (P == 0)
679
+ {
680
+ ERROR("zero ideal in the input");
681
+ }
682
+
683
+ int i,j;
684
+ if(size(metVecs) != 0)
685
+ {
686
+ for(j=1; j<=size(metVecs); j++){
687
+ if(ncols(F) != size(metVecs[j]))
688
+ {
689
+ ERROR("F and met do not have the same size.");
690
+ }
691
+ for(i=1; i<=size(metVecs[j]); i++){
692
+ if(metVecs[j][i] < 0){
693
+ ERROR("met has a negative entry.");
694
+ }
695
+ }
696
+ }
697
+ }
698
+
699
+ list tmp;
700
+ for (j=1; j<=P; j++)
701
+ {
702
+ tmp[j] = safeVarName("s("+string(j)+")");
703
+ }
704
+ list safeSName = tmp;
705
+
706
+ setring @R;
707
+ ideal K = annFs;
708
+ ideal F = imap(save, F);
709
+
710
+ // add the generator given by met to K=ann(F^s)
711
+ if (met <0)
712
+ {
713
+ //K = K,F; // to compute Bsigma (see "On the computation of Bernstein-Sato ideals"; Castro, Ucha)
714
+ K = K,F;
715
+ dbprint(ppl,"// computing the ideal B-Sigma from Castro-Ucha");
716
+ }
717
+ if( met > 0 && met <= ncols(F))
718
+ {
719
+ dbprint(ppl,"// computing the ideal B_" + string(met) + " from Castro-Ucha");
720
+ K = K, F[met];
721
+ }
722
+ if ( ( met == 0 && size(metVecs) == 0) || (met > ncols(F) ) )
723
+ {
724
+ poly f=1;
725
+ for (j=1; j<=P; j++)
726
+ {
727
+ f = f*F[j];
728
+ }
729
+ K = K,f; // to compute B (Bernstein-Sato ideal)
730
+ dbprint(ppl,"// computing the ideal B from Castro-Ucha");
731
+ }
732
+
733
+ if(size(metVecs) != 0)
734
+ {
735
+ poly f;
736
+ for(j=1; j<=size(metVecs); j++){
737
+ f = 1;
738
+ for (i=1; i<=size(metVecs[j]); i++)
739
+ {
740
+ f = f*F[i]^metVecs[j][i];
741
+ }
742
+ K = K,f;
743
+ }
744
+ dbprint(ppl,"// computing the ideal B^(" + string(metVecs) + ") from Budur");
745
+ }
746
+
747
+ // eliminate everything except for the s(i)
748
+ ideal K2 = eliminateNC(K,1..(nvars(basering)-P));
749
+ kill K;
750
+ dbprint(ppl-1, K2);
751
+ // the ring @R3 and factorize
752
+ ring @R3 = 0,s(1..P),dp;
753
+ list RL = ringlist(@R3);
754
+ RL[2] = safeSName;
755
+ @R3 = ring(RL);
756
+ setring(@R3);
757
+
758
+ dbprint(ppl,"// the ring @R3(_s) is ready");
759
+ ideal K3 = imap(@R,K2);
760
+ ideal BS = K3;
761
+ // create the ring @R4(_x,_Dx,_s) and put the result into it,
762
+ setring save;
763
+ ring @R4 = ksxD(F);
764
+ setring @R4;
765
+
766
+ dbprint(ppl,"// the ring @R4i(_x,_Dx,_s) is ready");
767
+ dbprint(ppl-1, @R4);
768
+ ideal K4 = imap(@R,K2);
769
+ intvec saveopt=option(get);
770
+ option(redSB);
771
+ dbprint(ppl,"// -4-2- the final cosmetic std");
772
+ K4 = engine(K4,eng); //std does the job too
773
+ // total cleanup
774
+ kill @R;
775
+ def BS = imap(@R3,BS);
776
+ export BS;
777
+ kill @R3;
778
+ ideal LD = K4;
779
+ export LD;
780
+ option(set,saveopt);
781
+ dbprint(ppl,"// exit BSidealFromAnn");
782
+ return(@R4);
783
+ }
784
+ example
785
+ {
786
+ "EXAMPLE:"; echo = 2;
787
+ ring R = 0,(x,y),dp;
788
+ ideal F = x+y,x-y,x;
789
+ def @R = annihilatorMultiFs(F, 0, 0, 4);
790
+ // first we compute the ideal B
791
+ def @R2 = BSidealFromAnn(F, @R, 0, 0);
792
+ setring @R2;
793
+ BS;
794
+ setring R;
795
+ // secondly we compute the ideal B_1
796
+ @R2 = BSidealFromAnn(F, @R, 0, 1);
797
+ setring @R2;
798
+ BS;
799
+ }
800
+
801
+ proc BernsteinSatoIdeal(ideal F, list #)
802
+ "USAGE: BernsteinSatoIdeal(F [,eng,met,us]); F an ideal, eng, us optional ints,
803
+ met optional int or intvec
804
+ RETURN: ring
805
+ PURPOSE: compute two kinds of Bernstein-Sato ideals, associated to
806
+ f = F[1]*..*F[P], with the multivariate algorithm by Briancon and Maisonobe.
807
+ ASSUME: basering is a commutative polynomial ring in characteristic 0
808
+ NOTE: activate the output ring with the @code{setring} command. In this ring,@*
809
+ - the ideal LD is the annihilator of F[1]^s_1*..*F[P]^s_p,@*
810
+ - the list or ideal BS is a Bernstein-Sato ideal of a polynomial
811
+ f = F[1]*..*F[P].
812
+ If eng <>0, @code{std} is used for Groebner basis computations,
813
+ otherwise, and by default @code{slimgb} is used.
814
+ If met <0, the B-Sigma ideal (cf. Castro and Ucha, 'On the computation of Bernstein-Sato ideals', 2005) is computed.
815
+ If 0 < met < P, then the ideal B_P (cf. the paper) is computed.
816
+ If met is an intvec, Budurs generalized Bernstein-Sato ideal
817
+ associated to met is computed.
818
+ Otherwise, and by default, the ideal B (cf. the paper) is computed.
819
+ If us<>0, then syzygies-driven method is used.
820
+ If printlevel=1, progress debug messages will be printed,
821
+ if printlevel>=2, all the debug messages will be printed.
822
+ EXAMPLE: example BernsteinSatoIdeal; shows examples
823
+ "
824
+ {
825
+ int ppl = printlevel-voice+2;
826
+ dbprint(ppl,"// enter BernsteinSatoIdeal");
827
+ dbprint(ppl-1, F);
828
+ dbprint(ppl-1, #);
829
+ int eng = 0;
830
+ int met = 0;
831
+ int usesyz = 0;
832
+ if ( size(#)>0 )
833
+ {
834
+ if ( typeof(#[1]) == "int" )
835
+ {
836
+ eng = int(#[1]);
837
+ }
838
+ if ( size(#)>1 )
839
+ {
840
+ if ( typeof(#[2]) == "int" )
841
+ {
842
+ met = int(#[2]);
843
+ }
844
+ }
845
+ if ( size(#)>2 )
846
+ {
847
+ if ( typeof(#[3]) == "int" )
848
+ {
849
+ usesyz = int(#[3]);
850
+ }
851
+ }
852
+
853
+ }
854
+ def @R = annihilatorMultiFs(F,eng,usesyz,4);
855
+ //If B_Sigma and trivial ideal
856
+ if ((met < 0) && (NF(1,std(F)) == 0)){
857
+ F = 1;
858
+ }
859
+ if ( size(#)>1 )
860
+ {
861
+ def @R2 = BSidealFromAnn(F, @R, eng, #[2]);
862
+ }
863
+ else
864
+ {
865
+ def @R2 = BSidealFromAnn(F, @R, eng, 0);
866
+ }
867
+ setring @R2;
868
+
869
+ LD = imap(@R,annFs);
870
+
871
+ dbprint(ppl,"// exit BernsteinSatoIdeal");
872
+
873
+ return(@R2);
874
+
875
+ }
876
+ example
877
+ {
878
+ "EXAMPLE:"; echo = 2;
879
+ ring R = 0,(x,y),dp;
880
+ ideal F = x^2-y,y;
881
+ // first we compute the ideal B:
882
+ def S = BernsteinSatoIdeal(F);
883
+ setring S;
884
+ BS;
885
+ // secondly we compute the ideal B_1:
886
+ setring R;
887
+ def S = BernsteinSatoIdeal(F,0,1);
888
+ setring S;
889
+ BS;
890
+ // thirdly we compute the ideal B_sigma:
891
+ setring R;
892
+ def S = BernsteinSatoIdeal(F,0,-1);
893
+ setring S;
894
+ BS;
895
+ }
896
+
897
+ proc BFBoundsBudur(ideal F,intvec m)
898
+ "USAGE: BFBoundsBudur(F,m); F an ideal, m an intvec
899
+ RETURN: ring
900
+ ASSUME: basering is a commutative polynomial ring in characteristic 0
901
+ PURPOSE: determine upper and lower bounds of the Bernstein-Sato ideal associated to m with
902
+ the method of (Bud12)
903
+ NOTE: The returned ring contains lists Bj, containing the Bernstein-Sato ideals
904
+ associated to e_j,
905
+ shiftedIdeals, containing the shifted ideals from (Bud12) 4.7,
906
+ and ideals upperBound, lowerBound which give upper bound and lower bound
907
+ for the Bernstein-Sato-Ideal associated to m respectively.
908
+ EXAMPLE: example BFBoundsBudur; shows example
909
+ "
910
+ {
911
+ if (!isCommutative())
912
+ {
913
+ ERROR("Basering is not commutative.");
914
+ }
915
+ if(ncols(F) != size(m))
916
+ {
917
+ ERROR("F and m do not have the same size.");
918
+ }
919
+
920
+ int ppl = printlevel - voice + 2;
921
+
922
+ ring backup = basering;
923
+
924
+ int r = ncols(F);
925
+ int n = nvars(basering);
926
+ int k;
927
+ int i;
928
+
929
+ //construct k[_s] and prepare map from k<_x,_d,_s> to k[_s]
930
+ ring ks = 0,(s(1..r)),dp;
931
+ setring ks;
932
+ //SGen will be used to map only the s(i)
933
+ ideal SGen;
934
+ SGen[2*n] = 0;
935
+ SGen = maxideal(1),SGen;
936
+ map fetchS;
937
+
938
+ ring R; //<--order of the commands important!!!
939
+ setring backup;
940
+ list Bj;
941
+
942
+ //compute the B_j
943
+ ring AR = annihilatorMultiFs(F);
944
+ dbprint(ppl,"//starting computation of Bj...");
945
+ for(int j=1; j<=r; j++){
946
+ setring backup;
947
+ R = BSidealFromAnn(F,AR,0,j);
948
+ setring ks;
949
+ fetchS = R,SGen;
950
+ Bj[j] = fetchS(BS);
951
+ }
952
+
953
+ //compute the products and intersections
954
+ dbprint(ppl,"//computing upper bounds and lower bounds...");
955
+ ideal upperBound = 1;
956
+ ideal lowerBound = 1;
957
+ ideal tempIdeal;
958
+ //map to shift (now identity map)
959
+ ideal mShifted = s(1);
960
+ for(i=2; i<=r; i++){
961
+ mShifted = mShifted, s(i);
962
+ }
963
+ map shift = ks, mShifted;
964
+
965
+ list shiftedIdeals;
966
+ for(j=1; j<=r; j++){
967
+ if(m[j]>0){
968
+ for(k=0; k<m[j]; k++){
969
+ //construct tempIdeal as shift of Bj[j]
970
+ tempIdeal = Bj[j];
971
+ tempIdeal = shift(tempIdeal);
972
+ mShifted[j] = mShifted[j]+1;
973
+ shift = ks, mShifted;
974
+ shiftedIdeals[j] = tempIdeal;
975
+ upperBound = intersect(upperBound, tempIdeal);
976
+ lowerBound = lowerBound*tempIdeal;
977
+ }
978
+ }
979
+ }
980
+
981
+ dbprint(ppl,"B_j:");
982
+ dbprint(ppl,string(Bj));
983
+ dbprint(ppl,"upper bound (intersection):");
984
+ dbprint(ppl,string(upperBound));
985
+ dbprint(ppl,"lower bound (product):");
986
+ dbprint(ppl,string(lowerBound));
987
+
988
+ export Bj;
989
+ export shiftedIdeals;
990
+ export upperBound;
991
+ export lowerBound;
992
+ return(ks);
993
+ }
994
+ example
995
+ {
996
+ "EXAMPLE:"; echo = 2;
997
+ ring r = 0,(x,y,z),dp;
998
+ setring r;
999
+ ideal F = x*z,2*x^2*y^2*z+x^4+y^4;
1000
+ def A = BFBoundsBudur(F,intvec(1,1));
1001
+ setring A;
1002
+ lead(upperBound);
1003
+ lead(lowerBound);
1004
+ }
1005
+
1006
+ proc annfalphaI(ideal f, ideal alpha)
1007
+ "USAGE: annfalphaI(f,alpha); f,alpha ideals
1008
+ RETURN: ring
1009
+ ASSUME: basering is a commutative polynomial ring in characteristic 0
1010
+ PURPOSE: determine annihilator of f^alpha with the method of (OT99)
1011
+ NOTE: The returned ring contains the annihilator of f^alpha over D as annfalpha.
1012
+ alpha should contain the desired rational exponents.
1013
+ The procedure may also be applied to the univariate case, i.e. for r=1.
1014
+ EXAMPLE: example annfalphaI; shows example
1015
+ "
1016
+ {
1017
+ if (!isCommutative())
1018
+ {
1019
+ ERROR("Basering is not commutative.");
1020
+ }
1021
+ if(ncols(f) != ncols(alpha))
1022
+ {
1023
+ ERROR("Parameters f and alpha do not have the same size.")
1024
+ }
1025
+
1026
+ int ppl = printlevel-voice+2;
1027
+ intvec saveopt=option(get);
1028
+ option(redSB);
1029
+
1030
+
1031
+ ring backup = basering;
1032
+ int r = ncols(f);
1033
+ int n = nvars(basering);
1034
+ int k;
1035
+
1036
+ //construct k[_s] and prepare map from k<_x,_d,_s> to k[_s]
1037
+ ring kS = 0,(s(1..r)),dp;
1038
+ setring kS;
1039
+ ideal SGen;
1040
+ SGen[2*n] = 0;
1041
+ SGen = SGen,maxideal(1);
1042
+ map fetchS;
1043
+
1044
+ setring backup;
1045
+ dbprint(ppl,"//starting computation of B and ann(f^s)...");
1046
+ def A = annfsBMI(f);
1047
+ dbprint(ppl,"//finished computation of B and ann(f^s)...");
1048
+
1049
+ setring kS;
1050
+ //identity map on the s(i)
1051
+ fetchS = A, SGen;
1052
+ def B = fetchS(BS);
1053
+ //push numbers through rings
1054
+ ideal alpha = imap(backup,alpha);
1055
+
1056
+ dbprint(ppl,"B=");
1057
+ dbprint(ppl,B);
1058
+ dbprint(ppl,"alpha=");
1059
+ dbprint(ppl,alpha);
1060
+
1061
+ //map that shifts alpha to the origin
1062
+ map alphaShift;
1063
+ ideal shiftedS;
1064
+ for(int i=1; i<=r; i++){
1065
+ shiftedS[i] = s(i)+alpha[i];
1066
+ }
1067
+ alphaShift = kS, shiftedS;
1068
+ //B is shifted such that alpha is the origin
1069
+ def shiftedB = alphaShift(B);
1070
+ dbprint(ppl,"shiftedB with alpha<->0 =");
1071
+ dbprint(ppl,shiftedB);
1072
+
1073
+ ring ks = 0,(s),dp;
1074
+ setring ks;
1075
+ //projection from kS to ks with s(i)->s
1076
+ ideal sCopies = s;
1077
+ for(i=1; i<r; i++){
1078
+ sCopies = sCopies, s;
1079
+ }
1080
+ map projS = kS,sCopies;
1081
+ //intersection of B with the line p*(1,...,1)
1082
+ def projB = projS(shiftedB);
1083
+ dbprint(ppl,"intersection of B with p*(1,...,1) projB=");
1084
+ dbprint(ppl,projB);
1085
+
1086
+ ideal factorsB;
1087
+ //get projB to one format
1088
+ if(typeof(projB) == "ideal"){
1089
+ projB = std(projB);
1090
+ factorsB = factorize(projB[1])[1];
1091
+ } else {
1092
+ factorsB = projB[1];
1093
+ }
1094
+ dbprint(ppl,"factors that give the intersection points factorsB=");
1095
+ dbprint(ppl,factorsB);
1096
+
1097
+ int c0 = 0;
1098
+ number c;
1099
+
1100
+ //find the minimal integer of B in alpha-c(1,...,1), alpha-c0(1,...,1)
1101
+ for(i=1; i<=ncols(factorsB); i++){
1102
+ c = number(subst(factorsB[i],s,0));
1103
+ if ( isInt(c) && (c > c0) ){
1104
+ c0 = int(c);
1105
+ }
1106
+ }
1107
+ dbprint(ppl,"necessary bishop's steps to the minimal important root c0=");
1108
+ dbprint(ppl,c0);
1109
+
1110
+ setring A;
1111
+ //alpha0 is the minimal integer root of B in alpha-c(1,...,1)
1112
+ ideal alpha0 = imap(backup,alpha);
1113
+ for(i=1; i<=r; i++){
1114
+ alpha0[i] = alpha0[i] - c0;
1115
+ }
1116
+ dbprint(ppl,"minimal integer root of B in alpha-c(1,...,1) alpha0=");
1117
+ dbprint(ppl,alpha0);
1118
+
1119
+ //compute ann_D(f^alpha0)
1120
+ ideal annfalpha0 = LD;
1121
+ for(i=1; i<=r; i++){
1122
+ annfalpha0 = subst(annfalpha0, var(2*n+i), alpha0[i]);
1123
+ }
1124
+ dbprint(ppl,"annfalpha0=");
1125
+ dbprint(ppl, annfalpha0);
1126
+
1127
+ ideal annfalpha;
1128
+ if(c0 == 0){
1129
+ annfalpha = annfalpha0;
1130
+ dbprint(ppl,"no syzygies needed");
1131
+ } else {
1132
+ //c0 is non-trivial, we need to compute syzygies
1133
+ dbprint(ppl,"computing syzygies");
1134
+ poly F = product(imap(backup, f));
1135
+ matrix J[1][1] = F^c0;
1136
+ matrix K[1][size(annfalpha0)] = annfalpha0;
1137
+ module M = modulo(J,K);
1138
+ annfalpha = ideal(M);
1139
+ }
1140
+
1141
+ annfalpha = std(annfalpha);
1142
+
1143
+ dbprint(ppl,"annfalpha=");
1144
+ dbprint(ppl,annfalpha);
1145
+
1146
+ export annfalpha;
1147
+ option(set,saveopt);
1148
+ return(A);
1149
+ }
1150
+ example
1151
+ {
1152
+ "EXAMPLE:"; echo = 2;
1153
+ ring R = 0,(x,y,z),dp;
1154
+ ideal f = x,y,z;
1155
+ ideal alpha = 1/4, 2/3, 1;
1156
+ def A = annfalphaI(f,alpha);
1157
+ setring A;
1158
+ annfalpha;
1159
+ }
1160
+
1161
+ proc extractS(ideal I, int r)
1162
+ "USAGE: extractS(I,r); I ideal, r int
1163
+ RETURN: ring
1164
+ ASSUME: I is an ideal in the first r variables of the basering and these r variables generate a commutative subring
1165
+ PURPOSE: give the ideal generated by I in the commutative subring generated by the first r variables, ordering dp
1166
+ NOTE: The returned ring contains I.
1167
+ EXAMPLE: example extractS; shows example
1168
+ "
1169
+ {
1170
+ int ppl = printlevel-voice+2;
1171
+ def save = basering;
1172
+ int N = nvars(basering);
1173
+ if (r > N)
1174
+ {
1175
+ ERROR("Argument r not consistent with basering");
1176
+ }
1177
+
1178
+ list RL = ringlist(basering);
1179
+ list L, Lord;
1180
+ L[1] = RL[1]; //char
1181
+ L[4] = RL[4]; //char, minpoly
1182
+ // construct list of varnames
1183
+ list Name = RL[2];
1184
+ list RName;
1185
+ int j;
1186
+ for (j=1; j<=r; j++)
1187
+ {
1188
+ RName[j] = Name[j];
1189
+ }
1190
+ L[2] = RName;
1191
+ L[3] = list(list("dp",intvec(1:r)));
1192
+ // we are done with the list
1193
+ def @R = ring(L);
1194
+ setring @R;
1195
+ ideal I = imap(save,I);
1196
+ export I;
1197
+ return(@R);
1198
+ }
1199
+ example
1200
+ {
1201
+ "EXAMPLE:"; echo = 2;
1202
+ ring R = 0,(x,y),dp;
1203
+ ideal f = x^2-y^2,y;
1204
+ def S = BernsteinSatoIdeal(f);
1205
+ setring S;
1206
+ BS;
1207
+ def T = extractS(BS,2);
1208
+ setring T;
1209
+ I;
1210
+ factorize(I[1]);
1211
+ }