passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

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

Potentially problematic release.


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

Files changed (490) hide show
  1. PySingular.cpython-314-aarch64-linux-gnu.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +490 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +6 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-6a2a8666.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-ac579979.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-66e33516.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-81de1160.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgf2x-fbd36f80.so.3.0.0 +0 -0
  11. passagemath_singular.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  12. passagemath_singular.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  13. passagemath_singular.libs/libgsl-e3525837.so.28.0.0 +0 -0
  14. passagemath_singular.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  15. passagemath_singular.libs/libntl-0043a3a2.so.44.0.1 +0 -0
  16. passagemath_singular.libs/libomalloc-0-06512335.9.6.so +0 -0
  17. passagemath_singular.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  18. passagemath_singular.libs/libpolys-4-cb7246b5.4.1.so +0 -0
  19. passagemath_singular.libs/libreadline-28330744.so.8.2 +0 -0
  20. passagemath_singular.libs/libsingular_resources-4-8c425241.4.1.so +0 -0
  21. passagemath_singular.libs/libtinfo-f81c2d16.so.6.3 +0 -0
  22. sage/algebras/all__sagemath_singular.py +3 -0
  23. sage/algebras/fusion_rings/all.py +19 -0
  24. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  25. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-aarch64-linux-gnu.so +0 -0
  26. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  27. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  28. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-aarch64-linux-gnu.so +0 -0
  29. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  30. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  31. sage/algebras/fusion_rings/fusion_double.py +899 -0
  32. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  33. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-aarch64-linux-gnu.so +0 -0
  34. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  35. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  36. sage/algebras/fusion_rings/shm_managers.cpython-314-aarch64-linux-gnu.so +0 -0
  37. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  38. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  39. sage/algebras/letterplace/all.py +1 -0
  40. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-aarch64-linux-gnu.so +0 -0
  41. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  42. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  43. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  45. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  46. sage/algebras/letterplace/letterplace_ideal.cpython-314-aarch64-linux-gnu.so +0 -0
  47. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  48. sage/algebras/quatalg/all.py +2 -0
  49. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  50. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-aarch64-linux-gnu.so +0 -0
  51. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  52. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  53. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  54. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  55. sage/all__sagemath_singular.py +11 -0
  56. sage/ext_data/all__sagemath_singular.py +1 -0
  57. sage/ext_data/singular/function_field/core.lib +98 -0
  58. sage/interfaces/all__sagemath_singular.py +1 -0
  59. sage/interfaces/singular.py +2835 -0
  60. sage/libs/all__sagemath_singular.py +1 -0
  61. sage/libs/singular/__init__.py +1 -0
  62. sage/libs/singular/decl.pxd +1168 -0
  63. sage/libs/singular/function.cpython-314-aarch64-linux-gnu.so +0 -0
  64. sage/libs/singular/function.pxd +87 -0
  65. sage/libs/singular/function.pyx +1901 -0
  66. sage/libs/singular/function_factory.py +61 -0
  67. sage/libs/singular/groebner_strategy.cpython-314-aarch64-linux-gnu.so +0 -0
  68. sage/libs/singular/groebner_strategy.pxd +22 -0
  69. sage/libs/singular/groebner_strategy.pyx +582 -0
  70. sage/libs/singular/option.cpython-314-aarch64-linux-gnu.so +0 -0
  71. sage/libs/singular/option.pyx +671 -0
  72. sage/libs/singular/polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/libs/singular/polynomial.pxd +39 -0
  74. sage/libs/singular/polynomial.pyx +661 -0
  75. sage/libs/singular/ring.cpython-314-aarch64-linux-gnu.so +0 -0
  76. sage/libs/singular/ring.pxd +58 -0
  77. sage/libs/singular/ring.pyx +893 -0
  78. sage/libs/singular/singular.cpython-314-aarch64-linux-gnu.so +0 -0
  79. sage/libs/singular/singular.pxd +72 -0
  80. sage/libs/singular/singular.pyx +1944 -0
  81. sage/libs/singular/standard_options.py +145 -0
  82. sage/matrix/all__sagemath_singular.py +1 -0
  83. sage/matrix/matrix_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  84. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  85. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  86. sage/rings/all__sagemath_singular.py +1 -0
  87. sage/rings/function_field/all__sagemath_singular.py +1 -0
  88. sage/rings/function_field/derivations_polymod.py +911 -0
  89. sage/rings/function_field/element_polymod.cpython-314-aarch64-linux-gnu.so +0 -0
  90. sage/rings/function_field/element_polymod.pyx +406 -0
  91. sage/rings/function_field/function_field_polymod.py +2611 -0
  92. sage/rings/function_field/ideal_polymod.py +1775 -0
  93. sage/rings/function_field/order_polymod.py +1475 -0
  94. sage/rings/function_field/place_polymod.py +681 -0
  95. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  96. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  98. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  99. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-aarch64-linux-gnu.so +0 -0
  100. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  101. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  102. sage/rings/polynomial/plural.cpython-314-aarch64-linux-gnu.so +0 -0
  103. sage/rings/polynomial/plural.pxd +48 -0
  104. sage/rings/polynomial/plural.pyx +3171 -0
  105. sage/symbolic/all__sagemath_singular.py +1 -0
  106. sage/symbolic/comparison_impl.pxi +428 -0
  107. sage/symbolic/constants_c_impl.pxi +178 -0
  108. sage/symbolic/expression.cpython-314-aarch64-linux-gnu.so +0 -0
  109. sage/symbolic/expression.pxd +7 -0
  110. sage/symbolic/expression.pyx +14200 -0
  111. sage/symbolic/getitem_impl.pxi +202 -0
  112. sage/symbolic/pynac.pxi +572 -0
  113. sage/symbolic/pynac_constant_impl.pxi +133 -0
  114. sage/symbolic/pynac_function_impl.pxi +206 -0
  115. sage/symbolic/pynac_impl.pxi +2576 -0
  116. sage/symbolic/pynac_wrap.h +124 -0
  117. sage/symbolic/series_impl.pxi +272 -0
  118. sage/symbolic/substitution_map_impl.pxi +94 -0
  119. sage_wheels/bin/ESingular +0 -0
  120. sage_wheels/bin/Singular +0 -0
  121. sage_wheels/bin/TSingular +0 -0
  122. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  123. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  124. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  125. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  126. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  127. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  128. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  129. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  130. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  131. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  132. sage_wheels/lib/singular/MOD/interval.la +41 -0
  133. sage_wheels/lib/singular/MOD/interval.so +0 -0
  134. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  135. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  136. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  137. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  138. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  139. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  140. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  146. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  147. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  148. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  149. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  150. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  151. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  152. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  153. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  154. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  155. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  156. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  157. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  158. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  159. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  160. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  161. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  162. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  163. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  164. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  165. sage_wheels/libexec/singular/MOD/surfex +16 -0
  166. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  167. sage_wheels/share/factory/gftables/10201 +342 -0
  168. sage_wheels/share/factory/gftables/1024 +37 -0
  169. sage_wheels/share/factory/gftables/10609 +356 -0
  170. sage_wheels/share/factory/gftables/11449 +384 -0
  171. sage_wheels/share/factory/gftables/11881 +398 -0
  172. sage_wheels/share/factory/gftables/121 +6 -0
  173. sage_wheels/share/factory/gftables/12167 +408 -0
  174. sage_wheels/share/factory/gftables/125 +7 -0
  175. sage_wheels/share/factory/gftables/12769 +428 -0
  176. sage_wheels/share/factory/gftables/128 +7 -0
  177. sage_wheels/share/factory/gftables/1331 +47 -0
  178. sage_wheels/share/factory/gftables/1369 +48 -0
  179. sage_wheels/share/factory/gftables/14641 +490 -0
  180. sage_wheels/share/factory/gftables/15625 +523 -0
  181. sage_wheels/share/factory/gftables/16 +3 -0
  182. sage_wheels/share/factory/gftables/16129 +540 -0
  183. sage_wheels/share/factory/gftables/16384 +549 -0
  184. sage_wheels/share/factory/gftables/16807 +563 -0
  185. sage_wheels/share/factory/gftables/1681 +58 -0
  186. sage_wheels/share/factory/gftables/169 +8 -0
  187. sage_wheels/share/factory/gftables/17161 +574 -0
  188. sage_wheels/share/factory/gftables/1849 +64 -0
  189. sage_wheels/share/factory/gftables/18769 +628 -0
  190. sage_wheels/share/factory/gftables/19321 +646 -0
  191. sage_wheels/share/factory/gftables/19683 +659 -0
  192. sage_wheels/share/factory/gftables/2048 +71 -0
  193. sage_wheels/share/factory/gftables/2187 +75 -0
  194. sage_wheels/share/factory/gftables/2197 +76 -0
  195. sage_wheels/share/factory/gftables/2209 +76 -0
  196. sage_wheels/share/factory/gftables/22201 +742 -0
  197. sage_wheels/share/factory/gftables/22801 +762 -0
  198. sage_wheels/share/factory/gftables/2401 +82 -0
  199. sage_wheels/share/factory/gftables/243 +11 -0
  200. sage_wheels/share/factory/gftables/24389 +815 -0
  201. sage_wheels/share/factory/gftables/24649 +824 -0
  202. sage_wheels/share/factory/gftables/25 +3 -0
  203. sage_wheels/share/factory/gftables/256 +11 -0
  204. sage_wheels/share/factory/gftables/26569 +888 -0
  205. sage_wheels/share/factory/gftables/27 +3 -0
  206. sage_wheels/share/factory/gftables/27889 +932 -0
  207. sage_wheels/share/factory/gftables/2809 +96 -0
  208. sage_wheels/share/factory/gftables/28561 +954 -0
  209. sage_wheels/share/factory/gftables/289 +12 -0
  210. sage_wheels/share/factory/gftables/29791 +995 -0
  211. sage_wheels/share/factory/gftables/29929 +1000 -0
  212. sage_wheels/share/factory/gftables/3125 +107 -0
  213. sage_wheels/share/factory/gftables/32 +4 -0
  214. sage_wheels/share/factory/gftables/32041 +1070 -0
  215. sage_wheels/share/factory/gftables/32761 +1094 -0
  216. sage_wheels/share/factory/gftables/32768 +1095 -0
  217. sage_wheels/share/factory/gftables/343 +14 -0
  218. sage_wheels/share/factory/gftables/3481 +118 -0
  219. sage_wheels/share/factory/gftables/361 +14 -0
  220. sage_wheels/share/factory/gftables/36481 +1218 -0
  221. sage_wheels/share/factory/gftables/3721 +126 -0
  222. sage_wheels/share/factory/gftables/37249 +1244 -0
  223. sage_wheels/share/factory/gftables/38809 +1296 -0
  224. sage_wheels/share/factory/gftables/39601 +1322 -0
  225. sage_wheels/share/factory/gftables/4 +3 -0
  226. sage_wheels/share/factory/gftables/4096 +139 -0
  227. sage_wheels/share/factory/gftables/44521 +1486 -0
  228. sage_wheels/share/factory/gftables/4489 +152 -0
  229. sage_wheels/share/factory/gftables/49 +4 -0
  230. sage_wheels/share/factory/gftables/4913 +166 -0
  231. sage_wheels/share/factory/gftables/49729 +1660 -0
  232. sage_wheels/share/factory/gftables/5041 +170 -0
  233. sage_wheels/share/factory/gftables/50653 +1691 -0
  234. sage_wheels/share/factory/gftables/512 +20 -0
  235. sage_wheels/share/factory/gftables/51529 +1720 -0
  236. sage_wheels/share/factory/gftables/52441 +1750 -0
  237. sage_wheels/share/factory/gftables/529 +20 -0
  238. sage_wheels/share/factory/gftables/5329 +180 -0
  239. sage_wheels/share/factory/gftables/54289 +1812 -0
  240. sage_wheels/share/factory/gftables/57121 +1906 -0
  241. sage_wheels/share/factory/gftables/58081 +1938 -0
  242. sage_wheels/share/factory/gftables/59049 +1971 -0
  243. sage_wheels/share/factory/gftables/6241 +210 -0
  244. sage_wheels/share/factory/gftables/625 +23 -0
  245. sage_wheels/share/factory/gftables/63001 +2102 -0
  246. sage_wheels/share/factory/gftables/64 +5 -0
  247. sage_wheels/share/factory/gftables/6561 +221 -0
  248. sage_wheels/share/factory/gftables/6859 +231 -0
  249. sage_wheels/share/factory/gftables/6889 +232 -0
  250. sage_wheels/share/factory/gftables/729 +27 -0
  251. sage_wheels/share/factory/gftables/7921 +266 -0
  252. sage_wheels/share/factory/gftables/8 +3 -0
  253. sage_wheels/share/factory/gftables/81 +5 -0
  254. sage_wheels/share/factory/gftables/8192 +276 -0
  255. sage_wheels/share/factory/gftables/841 +30 -0
  256. sage_wheels/share/factory/gftables/9 +3 -0
  257. sage_wheels/share/factory/gftables/9409 +316 -0
  258. sage_wheels/share/factory/gftables/961 +34 -0
  259. sage_wheels/share/info/singular.info +191898 -0
  260. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  261. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  262. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  263. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  264. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  265. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  266. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  267. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  268. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  269. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  270. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  271. sage_wheels/share/singular/LIB/all.lib +136 -0
  272. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  273. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  274. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  275. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  276. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  277. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  278. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  279. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  280. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  281. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  282. sage_wheels/share/singular/LIB/central.lib +2169 -0
  283. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  284. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  285. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  286. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  287. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  288. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  289. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  290. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  291. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  292. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  293. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  294. sage_wheels/share/singular/LIB/control.lib +1636 -0
  295. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  296. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  297. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  298. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  299. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  300. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  301. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  302. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  303. sage_wheels/share/singular/LIB/deform.lib +925 -0
  304. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  305. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  306. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  307. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  308. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  309. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  310. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  311. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  312. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  313. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  314. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  315. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  316. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  317. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  318. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  319. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  320. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  321. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  322. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  323. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  324. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  325. sage_wheels/share/singular/LIB/general.lib +1350 -0
  326. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  327. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  328. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  329. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  330. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  331. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  332. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  333. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  334. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  335. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  336. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  337. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  338. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  339. sage_wheels/share/singular/LIB/help.cnf +57 -0
  340. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  341. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  342. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  343. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  344. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  345. sage_wheels/share/singular/LIB/inout.lib +679 -0
  346. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  347. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  348. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  349. sage_wheels/share/singular/LIB/invar.lib +443 -0
  350. sage_wheels/share/singular/LIB/involut.lib +980 -0
  351. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  352. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  353. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  354. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  355. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  356. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  357. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  358. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  359. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  360. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  361. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  362. sage_wheels/share/singular/LIB/methods.lib +212 -0
  363. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  364. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  365. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  366. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  367. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  368. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  369. sage_wheels/share/singular/LIB/modular.lib +545 -0
  370. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  371. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  372. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  373. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  374. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  375. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  376. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  377. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  378. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  379. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  380. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  381. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  382. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  383. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  384. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  385. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  386. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  387. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  388. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  389. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  390. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  391. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  392. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  393. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  394. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  395. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  396. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  397. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  398. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  399. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  400. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  401. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  402. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  403. sage_wheels/share/singular/LIB/perron.lib +202 -0
  404. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  405. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  406. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  407. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  408. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  409. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  410. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  411. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  412. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  413. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  414. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  415. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  416. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  417. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  418. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  419. sage_wheels/share/singular/LIB/random.lib +455 -0
  420. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  421. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  422. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  423. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  424. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  425. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  426. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  427. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  428. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  429. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  430. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  431. sage_wheels/share/singular/LIB/resources.lib +170 -0
  432. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  433. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  434. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  435. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  436. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  437. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  438. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  439. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  440. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  441. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  442. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  443. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  444. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  445. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  446. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  447. sage_wheels/share/singular/LIB/sets.lib +524 -0
  448. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  449. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  450. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  451. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  452. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  453. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  454. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  455. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  456. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  457. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  458. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  459. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  460. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  461. sage_wheels/share/singular/LIB/surf.lib +506 -0
  462. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  463. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  464. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  465. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  466. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  467. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  468. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  469. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  470. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  471. sage_wheels/share/singular/LIB/template.lib +116 -0
  472. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  473. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  474. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  475. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  476. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  477. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  478. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  479. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  480. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  481. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  482. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  483. sage_wheels/share/singular/emacs/COPYING +44 -0
  484. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  485. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  486. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  487. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  488. sage_wheels/share/singular/emacs/singular.el +4273 -0
  489. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  490. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,1119 @@
1
+ ///////////////////////////////////////////////////////////////////////////
2
+ version="version toric.lib 4.3.1.3 Feb_2023 "; // $Id: 624e30fed8d8dbb3e6a5c8c0ff0da33c492ae28f $
3
+ category="Commutative Algebra";
4
+ info="
5
+ LIBRARY: toric.lib Standard Basis of Toric Ideals
6
+ AUTHOR: Christine Theis, email: ctheis@math.uni-sb.de
7
+
8
+ PROCEDURES:
9
+ toric_ideal(A,..); computes the toric ideal of A
10
+ toric_std(ideal I); standard basis of I by a specialized Buchberger algorithm
11
+ ";
12
+
13
+ ///////////////////////////////////////////////////////////////////////////////
14
+
15
+ static proc toric_ideal_1(intmat A, string alg)
16
+ {
17
+ ideal I;
18
+ // to be returned
19
+
20
+ // check suitability of actual basering
21
+ if(nvars(basering)<ncols(A))
22
+ {
23
+ ERROR("The number of matrix columns is smaller than the number of ring variables.");
24
+ }
25
+
26
+ // check suitability of actual term ordering
27
+ // the "module ordering" c or C is ignored
28
+ string singular_ord=ordstr(basering);
29
+ string test_ord;
30
+ string external_ord="";
31
+ int i,j;
32
+ intvec weightvec;
33
+
34
+ if(find(singular_ord,"lp")==1)
35
+ {
36
+ external_ord="W_LEX";
37
+ for(i=1;i<=nvars(basering);i++)
38
+ {
39
+ weightvec[i]=0;
40
+ }
41
+ test_ord="lp("+string(nvars(basering))+"),";
42
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
43
+ {
44
+ "Warning: Block orderings are not supported; lp used for computation.";
45
+ }
46
+ }
47
+ if(external_ord=="" && find(singular_ord,"lp")==3)
48
+ {
49
+ external_ord="W_LEX";
50
+ for(i=1;i<=nvars(basering);i++)
51
+ {
52
+ weightvec[i]=0;
53
+ }
54
+ test_ord="lp("+string(nvars(basering))+"),";
55
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
56
+ {
57
+ "Warning: Block orderings are not supported; lp used for computation.";
58
+ }
59
+ }
60
+
61
+ if(external_ord=="" && find(singular_ord,"dp")==1)
62
+ {
63
+ external_ord="W_REV_LEX";
64
+ for(i=1;i<=nvars(basering);i++)
65
+ {
66
+ weightvec[i]=1;
67
+ }
68
+ test_ord="dp("+string(nvars(basering))+"),";
69
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
70
+ {
71
+ "Warning: Block orderings are not supported; dp used for computation.";
72
+ }
73
+ }
74
+ if(external_ord=="" && find(singular_ord,"dp")==3)
75
+ {
76
+ external_ord="W_REV_LEX";
77
+ for(i=1;i<=nvars(basering);i++)
78
+ {
79
+ weightvec[i]=1;
80
+ }
81
+ test_ord="dp("+string(nvars(basering))+"),";
82
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
83
+ {
84
+ "Warning: Block orderings are not supported; dp used for computation.";
85
+ }
86
+ }
87
+
88
+ if(external_ord=="" && find(singular_ord,"Dp")==1)
89
+ {
90
+ external_ord="W_LEX";
91
+ for(i=1;i<=nvars(basering);i++)
92
+ {
93
+ weightvec[i]=1;
94
+ }
95
+ test_ord="Dp("+string(nvars(basering))+"),";
96
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
97
+ {
98
+ "Warning: Block orderings are not supported; Dp used for computation.";
99
+ }
100
+ }
101
+ if(external_ord=="" && find(singular_ord,"Dp")==3)
102
+ {
103
+ external_ord="W_LEX";
104
+ for(i=1;i<=nvars(basering);i++)
105
+ {
106
+ weightvec[i]=1;
107
+ }
108
+ test_ord="Dp("+string(nvars(basering))+"),";
109
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
110
+ {
111
+ "Warning: Block orderings are not supported; Dp used for computation.";
112
+ }
113
+ }
114
+
115
+ int pos;
116
+ string number_string;
117
+
118
+ if(external_ord=="" && find(singular_ord,"wp")==1)
119
+ {
120
+ external_ord="W_REV_LEX";
121
+ pos=3;
122
+ for(i=1;i<=nvars(basering);i++)
123
+ {
124
+ pos++;
125
+ number_string="";
126
+ while(singular_ord[pos]!=",")
127
+ {
128
+ number_string=number_string+singular_ord[pos];
129
+ pos++;
130
+ }
131
+ weightvec[i]=`number_string`;
132
+ }
133
+ test_ord="wp("+string(weightvec)+"),";
134
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
135
+ {
136
+ "Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
137
+ }
138
+ }
139
+ if(external_ord=="" && find(singular_ord,"wp")==3)
140
+ {
141
+ external_ord="W_REV_LEX";
142
+ pos=5;
143
+ for(i=1;i<=nvars(basering);i++)
144
+ {
145
+ pos++;
146
+ number_string="";
147
+ while(singular_ord[pos]!=",")
148
+ {
149
+ number_string=number_string+singular_ord[pos];
150
+ pos++;
151
+ }
152
+ weightvec[i]=`number_string`;
153
+ }
154
+ test_ord="wp("+string(weightvec)+"),";
155
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
156
+ {
157
+ "Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
158
+ }
159
+ }
160
+
161
+ if(external_ord=="" && find(singular_ord,"Wp")==1)
162
+ {
163
+ external_ord="W_LEX";
164
+ pos=3;
165
+ for(i=1;i<=nvars(basering);i++)
166
+ {
167
+ pos++;
168
+ number_string="";
169
+ while(singular_ord[pos]!=",")
170
+ {
171
+ number_string=number_string+singular_ord[pos];
172
+ pos++;
173
+ }
174
+ weightvec[i]=`number_string`;
175
+ }
176
+ test_ord="Wp("+string(weightvec)+"),";
177
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
178
+ {
179
+ "Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
180
+ }
181
+ }
182
+ if(external_ord=="" && find(singular_ord,"Wp")==3)
183
+ {
184
+ external_ord="W_LEX";
185
+ pos=5;
186
+ for(i=1;i<=nvars(basering);i++)
187
+ {
188
+ pos++;
189
+ number_string="";
190
+ while(singular_ord[pos]!=",")
191
+ {
192
+ number_string=number_string+singular_ord[pos];
193
+ pos++;
194
+ }
195
+ weightvec[i]=`number_string`;
196
+ }
197
+ test_ord="Wp("+string(weightvec)+"),";
198
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
199
+ {
200
+ "Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
201
+ }
202
+ }
203
+
204
+ if(external_ord=="")
205
+ {
206
+ ERROR("The term ordering of the actual basering is not supported.");
207
+ }
208
+
209
+ // check algorithm
210
+ if(alg=="ct" || alg=="pct")
211
+ // these algorithms will not cause an error in the external program;
212
+ // however, they do not compute the toric ideal of A, but of an
213
+ // extended matrix
214
+ {
215
+ ERROR("The chosen algorithm is not suitable.");
216
+ }
217
+
218
+ // create temporary file with which the external program is called
219
+
220
+ int dummy;
221
+ int process=system("pid");
222
+ string matrixfile="temp_MATRIX"+string(process);
223
+ link MATRIX=":w "+matrixfile;
224
+ open(MATRIX);
225
+
226
+ write(MATRIX,"MATRIX","columns:",ncols(A),"cost vector:");
227
+ for(j=1;j<=ncols(A);j++)
228
+ {
229
+ write(MATRIX,weightvec[j]);
230
+ }
231
+ write(MATRIX,"rows:",nrows(A),"matrix:");
232
+ for(i=1;i<=nrows(A);i++)
233
+ {
234
+ for(j=1;j<=ncols(A);j++)
235
+ {
236
+ write(MATRIX,A[i,j]);
237
+ }
238
+ }
239
+
240
+ // search for positive row space vector, if required by the
241
+ // algorithm
242
+ int found=0;
243
+ if((alg=="blr") || (alg=="hs"))
244
+ {
245
+ for(i=1;i<=nrows(A);i++)
246
+ {
247
+ found=i;
248
+ for(j=1;j<=ncols(A);j++)
249
+ {
250
+ if(A[i,j]<=0)
251
+ {
252
+ found=0;
253
+ }
254
+ }
255
+ if(found>0)
256
+ {
257
+ break;
258
+ }
259
+ }
260
+ if(found==0)
261
+ {
262
+ close(MATRIX);
263
+ dummy=system("sh","rm -f "+matrixfile);
264
+ ERROR("The chosen algorithm needs a positive vector in the row space of the matrix.");
265
+ }
266
+ write(MATRIX,"positive row space vector:");
267
+ for(j=1;j<=ncols(A);j++)
268
+ {
269
+ write(MATRIX,A[found,j]);
270
+ }
271
+ }
272
+ close(MATRIX);
273
+
274
+
275
+ // call external program
276
+ if (status(system("SingularBin")+"toric_ideal","exists")=="yes")
277
+ {
278
+ dummy=system("sh",system("SingularBin")+"toric_ideal -alg "+alg+" "+matrixfile);
279
+ }
280
+ else
281
+ {
282
+ dummy=system("sh","toric_ideal -alg "+alg+" "+matrixfile);
283
+ }
284
+ if (dummy!=0) { ERROR("toric_ideal failed with error code "+string(dummy)); }
285
+
286
+ // read toric ideal from created file
287
+ link TORIC_IDEAL=":r "+matrixfile+".GB."+alg;
288
+ string toric_id=read(TORIC_IDEAL);
289
+
290
+ int generators;
291
+ pos=find(toric_id,"size");
292
+ pos=find(toric_id,":",pos);
293
+ pos++;
294
+
295
+ while(toric_id[pos]==" " || toric_id[pos]==newline)
296
+ {
297
+ pos++;
298
+ }
299
+ number_string="";
300
+ while(toric_id[pos]!=" " && toric_id[pos]!=newline)
301
+ {
302
+ number_string=number_string+toric_id[pos];
303
+ pos++;
304
+ }
305
+ generators=`number_string`;
306
+
307
+ intvec v;
308
+ poly head;
309
+ poly tail;
310
+
311
+ pos=find(toric_id,"basis");
312
+ pos=find(toric_id,":",pos);
313
+ pos++;
314
+
315
+ for(i=1;i<=generators;i++)
316
+ {
317
+ head=1;
318
+ tail=1;
319
+
320
+ for(j=1;j<=ncols(A);j++)
321
+ {
322
+ while(toric_id[pos]==" " || toric_id[pos]==newline)
323
+ {
324
+ pos++;
325
+ }
326
+ number_string="";
327
+ while(toric_id[pos]!=" " && toric_id[pos]!=newline)
328
+ {
329
+ number_string=number_string+toric_id[pos];
330
+ pos++;
331
+ }
332
+ v[j]=`number_string`;
333
+ if(v[j]<0)
334
+ {
335
+ tail=tail*var(j)^(-v[j]);
336
+ }
337
+ if(v[j]>0)
338
+ {
339
+ head=head*var(j)^v[j];
340
+ }
341
+ }
342
+ I[i]=head-tail;
343
+ }
344
+
345
+ // delete all created files
346
+ dummy=system("sh","rm -f "+matrixfile);
347
+ dummy=system("sh","rm -f "+matrixfile+".GB."+alg);
348
+
349
+ return(I);
350
+ }
351
+ ///////////////////////////////////////////////////////////////////////////////
352
+
353
+ static proc toric_ideal_2(intmat A, string alg, intvec prsv)
354
+ {
355
+ ideal I;
356
+ // to be returned
357
+
358
+ // check arguments
359
+ if(size(prsv)<ncols(A))
360
+ {
361
+ ERROR("The number of matrix columns does not equal the size of the positive row space vector.");
362
+ }
363
+
364
+ // check suitability of actual basering
365
+ if(nvars(basering)!=ncols(A))
366
+ {
367
+ ERROR("The number of matrix columns is smaller than the number of ring variables.");
368
+ }
369
+
370
+ // check suitability of actual term ordering
371
+ // the "module ordering" c or C is ignored
372
+ string singular_ord=ordstr(basering);
373
+ string test_ord;
374
+ string external_ord="";
375
+ int i,j;
376
+ intvec weightvec;
377
+
378
+ if(find(singular_ord,"lp")==1)
379
+ {
380
+ external_ord="W_LEX";
381
+ for(i=1;i<=nvars(basering);i++)
382
+ {
383
+ weightvec[i]=0;
384
+ }
385
+ test_ord="lp("+string(nvars(basering))+"),";
386
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
387
+ {
388
+ "Warning: Block orderings are not supported; lp used for computation.";
389
+ }
390
+ }
391
+ if(external_ord=="" && find(singular_ord,"lp")==3)
392
+ {
393
+ external_ord="W_LEX";
394
+ for(i=1;i<=nvars(basering);i++)
395
+ {
396
+ weightvec[i]=0;
397
+ }
398
+ test_ord="lp("+string(nvars(basering))+"),";
399
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
400
+ {
401
+ "Warning: Block orderings are not supported; lp used for computation.";
402
+ }
403
+ }
404
+
405
+ if(external_ord=="" && find(singular_ord,"dp")==1)
406
+ {
407
+ external_ord="W_REV_LEX";
408
+ for(i=1;i<=nvars(basering);i++)
409
+ {
410
+ weightvec[i]=1;
411
+ }
412
+ test_ord="dp("+string(nvars(basering))+"),";
413
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
414
+ {
415
+ "Warning: Block orderings are not supported; dp used for computation.";
416
+ }
417
+ }
418
+ if(external_ord=="" && find(singular_ord,"dp")==3)
419
+ {
420
+ external_ord="W_REV_LEX";
421
+ for(i=1;i<=nvars(basering);i++)
422
+ {
423
+ weightvec[i]=1;
424
+ }
425
+ test_ord="dp("+string(nvars(basering))+"),";
426
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
427
+ {
428
+ "Warning: Block orderings are not supported; dp used for computation.";
429
+ }
430
+ }
431
+
432
+ if(external_ord=="" && find(singular_ord,"Dp")==1)
433
+ {
434
+ external_ord="W_LEX";
435
+ for(i=1;i<=nvars(basering);i++)
436
+ {
437
+ weightvec[i]=1;
438
+ }
439
+ test_ord="Dp("+string(nvars(basering))+"),";
440
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
441
+ {
442
+ "Warning: Block orderings are not supported; Dp used for computation.";
443
+ }
444
+ }
445
+ if(external_ord=="" && find(singular_ord,"Dp")==3)
446
+ {
447
+ external_ord="W_LEX";
448
+ for(i=1;i<=nvars(basering);i++)
449
+ {
450
+ weightvec[i]=1;
451
+ }
452
+ test_ord="Dp("+string(nvars(basering))+"),";
453
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
454
+ {
455
+ "Warning: Block orderings are not supported; Dp used for computation.";
456
+ }
457
+ }
458
+
459
+ int pos;
460
+ string number_string;
461
+
462
+ if(external_ord=="" && find(singular_ord,"wp")==1)
463
+ {
464
+ external_ord="W_REV_LEX";
465
+ pos=3;
466
+ for(i=1;i<=nvars(basering);i++)
467
+ {
468
+ pos++;
469
+ number_string="";
470
+ while(singular_ord[pos]!=",")
471
+ {
472
+ number_string=number_string+singular_ord[pos];
473
+ pos++;
474
+ }
475
+ weightvec[i]=`number_string`;
476
+ }
477
+ test_ord="wp("+string(weightvec)+"),";
478
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
479
+ {
480
+ "Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
481
+ }
482
+ }
483
+ if(external_ord=="" && find(singular_ord,"wp")==3)
484
+ {
485
+ external_ord="W_REV_LEX";
486
+ pos=5;
487
+ for(i=1;i<=nvars(basering);i++)
488
+ {
489
+ pos++;
490
+ number_string="";
491
+ while(singular_ord[pos]!=",")
492
+ {
493
+ number_string=number_string+singular_ord[pos];
494
+ pos++;
495
+ }
496
+ weightvec[i]=`number_string`;
497
+ }
498
+ test_ord="wp("+string(weightvec)+"),";
499
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
500
+ {
501
+ "Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
502
+ }
503
+ }
504
+
505
+ if(external_ord=="" && find(singular_ord,"Wp")==1)
506
+ {
507
+ external_ord="W_LEX";
508
+ pos=3;
509
+ for(i=1;i<=nvars(basering);i++)
510
+ {
511
+ pos++;
512
+ number_string="";
513
+ while(singular_ord[pos]!=",")
514
+ {
515
+ number_string=number_string+singular_ord[pos];
516
+ pos++;
517
+ }
518
+ weightvec[i]=`number_string`;
519
+ }
520
+ test_ord="Wp("+string(weightvec)+"),";
521
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
522
+ {
523
+ "Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
524
+ }
525
+ }
526
+ if(external_ord=="" && find(singular_ord,"Wp")==3)
527
+ {
528
+ external_ord="W_LEX";
529
+ pos=5;
530
+ for(i=1;i<=nvars(basering);i++)
531
+ {
532
+ pos++;
533
+ number_string="";
534
+ while(singular_ord[pos]!=",")
535
+ {
536
+ number_string=number_string+singular_ord[pos];
537
+ pos++;
538
+ }
539
+ weightvec[i]=`number_string`;
540
+ }
541
+ test_ord="Wp("+string(weightvec)+"),";
542
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
543
+ {
544
+ "Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
545
+ }
546
+ }
547
+
548
+ if(external_ord=="")
549
+ {
550
+ ERROR("The term ordering of the actual basering is not supported.");
551
+ }
552
+
553
+ // check algorithm
554
+ if(alg=="ct" || alg=="pct")
555
+ // these algorithms will not cause an error in the external program;
556
+ // however, they do not compute the toric ideal of A, but of an
557
+ // extended matrix
558
+ {
559
+ ERROR("The chosen algorithm is not suitable.");
560
+ }
561
+
562
+ // create temporary file with that the external program is called
563
+
564
+ int dummy;
565
+ int process=system("pid");
566
+ string matrixfile="temp_MATRIX"+string(process);
567
+ link MATRIX=":w "+matrixfile;
568
+ open(MATRIX);
569
+
570
+ write(MATRIX,"MATRIX","columns:",ncols(A),"cost vector:");
571
+ for(j=1;j<=ncols(A);j++)
572
+ {
573
+ write(MATRIX,weightvec[j]);
574
+ }
575
+ write(MATRIX,"rows:",nrows(A),"matrix:");
576
+ for(i=1;i<=nrows(A);i++)
577
+ {
578
+ for(j=1;j<=ncols(A);j++)
579
+ {
580
+ write(MATRIX,A[i,j]);
581
+ }
582
+ }
583
+
584
+ // enter positive row space vector, if required by the algorithm
585
+ if((alg=="blr") || (alg=="hs"))
586
+ {
587
+ write(MATRIX,"positive row space vector:");
588
+ for(j=1;j<=ncols(A);j++)
589
+ {
590
+ write(MATRIX,prsv[j]);
591
+ }
592
+ }
593
+ close(MATRIX);
594
+
595
+ // call external program
596
+ if (status(system("SingularBin")+"toric_ideal","exists")=="yes")
597
+ {
598
+ dummy=system("sh",system("SingularBin")+"toric_ideal -alg "+alg+" "+matrixfile);
599
+ }
600
+ else
601
+ {
602
+ dummy=system("sh","toric_ideal -alg "+alg+" "+matrixfile);
603
+ }
604
+ if (dummy!=0) { ERROR("toric_ideal failed with error code "+string(dummy)); }
605
+
606
+ // read toric ideal from created file
607
+ link TORIC_IDEAL=":r "+matrixfile+".GB."+alg;
608
+ string toric_id=read(TORIC_IDEAL);
609
+
610
+ int generators;
611
+ pos=find(toric_id,"size");
612
+ pos=find(toric_id,":",pos);
613
+ pos++;
614
+
615
+ while(toric_id[pos]==" " || toric_id[pos]==newline)
616
+ {
617
+ pos++;
618
+ }
619
+ number_string="";
620
+ while(toric_id[pos]!=" " && toric_id[pos]!=newline)
621
+ {
622
+ number_string=number_string+toric_id[pos];
623
+ pos++;
624
+ }
625
+ generators=`number_string`;
626
+
627
+ intvec v;
628
+ poly head;
629
+ poly tail;
630
+
631
+ pos=find(toric_id,"basis");
632
+ pos=find(toric_id,":",pos);
633
+ pos++;
634
+
635
+ for(i=1;i<=generators;i++)
636
+ {
637
+ head=1;
638
+ tail=1;
639
+
640
+ for(j=1;j<=ncols(A);j++)
641
+ {
642
+ while(toric_id[pos]==" " || toric_id[pos]==newline)
643
+ {
644
+ pos++;
645
+ }
646
+ number_string="";
647
+ while(toric_id[pos]!=" " && toric_id[pos]!=newline)
648
+ {
649
+ number_string=number_string+toric_id[pos];
650
+ pos++;
651
+ }
652
+ v[j]=`number_string`;
653
+ if(v[j]<0)
654
+ {
655
+ tail=tail*var(j)^(-v[j]);
656
+ }
657
+ if(v[j]>0)
658
+ {
659
+ head=head*var(j)^v[j];
660
+ }
661
+ }
662
+ I[i]=head-tail;
663
+ }
664
+
665
+ // delete all created files
666
+ dummy=system("sh","rm -f "+matrixfile);
667
+ dummy=system("sh","rm -f "+matrixfile+".GB."+alg);
668
+
669
+ return(I);
670
+ }
671
+ ///////////////////////////////////////////////////////////////////////////////
672
+
673
+ proc toric_ideal
674
+ "USAGE: toric_ideal(A,alg); A intmat, alg string
675
+ toric_ideal(A,alg,prsv); A intmat, alg string, prsv intvec
676
+ RETURN: ideal: standard basis of the toric ideal of A
677
+ NOTE: These procedures return the standard basis of the toric ideal of A
678
+ with respect to the term ordering in the current basering. Not all
679
+ term orderings are supported: The usual global term orderings may be
680
+ used, but no block orderings combining them.
681
+ One may call the procedure with several different algorithms: @*
682
+ - the algorithm of Conti/Traverso using elimination (ect), @*
683
+ - the algorithm of Pottier (pt),
684
+ - an algorithm of Bigatti/La Scala/Robbiano (blr),
685
+ - the algorithm of Hosten/Sturmfels (hs),
686
+ - the algorithm of DiBiase/Urbanke (du).
687
+ The argument `alg' should be the abbreviation for an algorithm as
688
+ above: ect, pt, blr, hs or du.
689
+
690
+ If `alg' is chosen to be `blr' or `hs', the algorithm needs a vector
691
+ with positive coefficients in the row space of A.
692
+ If no row of A contains only positive entries, one has to use the
693
+ second version of toric_ideal which takes such a vector as its third
694
+ argument.
695
+ For the mathematical background, see
696
+ @texinfo
697
+ @ref{Toric ideals and integer programming}.
698
+ @end texinfo
699
+ EXAMPLE: example toric_ideal; shows an example
700
+ SEE ALSO: toric_std, intprog_lib, Toric ideals
701
+ "
702
+ {
703
+ if(size(#)==2)
704
+ {
705
+ return(toric_ideal_1(#[1],#[2]));
706
+ }
707
+ else
708
+ {
709
+ return(toric_ideal_2(#[1],#[2],#[3]));
710
+ }
711
+ }
712
+
713
+
714
+
715
+ example
716
+ {
717
+ "EXAMPLE"; echo=2;
718
+
719
+ ring r=0,(x,y,z),dp;
720
+
721
+ // call with two arguments
722
+ intmat A[2][3]=1,1,0,0,1,1;
723
+ A;
724
+
725
+ ideal I=toric_ideal(A,"du");
726
+ I;
727
+
728
+ I=toric_ideal(A,"blr");
729
+ I;
730
+
731
+ // call with three arguments
732
+ intvec prsv=1,2,1;
733
+ I=toric_ideal(A,"blr",prsv);
734
+ I;
735
+
736
+ }
737
+ ///////////////////////////////////////////////////////////////////////////////
738
+
739
+ proc toric_std(ideal I)
740
+ "USAGE: toric_std(I); I ideal
741
+ RETURN: ideal: standard basis of I
742
+ NOTE: This procedure computes the standard basis of I using a specialized
743
+ Buchberger algorithm. The generating system by which I is given has
744
+ to consist of binomials of the form x^u-x^v. There is no real check
745
+ if I is toric. If I is generated by binomials of the above form,
746
+ but not toric, toric_std computes an ideal `between' I and its
747
+ saturation with respect to all variables.
748
+ For the mathematical background, see
749
+ @texinfo
750
+ @ref{Toric ideals and integer programming}.
751
+ @end texinfo
752
+ EXAMPLE: example toric_std; shows an example
753
+ SEE ALSO: toric_ideal, toric_lib, intprog_lib, Toric ideals
754
+ "
755
+ {
756
+ ideal J;
757
+ // to be returned
758
+
759
+ // check suitability of actual term ordering
760
+ // the "module ordering" c or C is ignored
761
+ string singular_ord=ordstr(basering);
762
+ string test_ord;
763
+ string external_ord="";
764
+ int i,j;
765
+ intvec weightvec;
766
+
767
+ if(find(singular_ord,"lp")==1)
768
+ {
769
+ external_ord="W_LEX";
770
+ for(i=1;i<=nvars(basering);i++)
771
+ {
772
+ weightvec[i]=0;
773
+ }
774
+ test_ord="lp("+string(nvars(basering))+"),";
775
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
776
+ {
777
+ "Warning: Block orderings are not supported; lp used for computation.";
778
+ }
779
+ }
780
+ if(external_ord=="" && find(singular_ord,"lp")==3)
781
+ {
782
+ external_ord="W_LEX";
783
+ for(i=1;i<=nvars(basering);i++)
784
+ {
785
+ weightvec[i]=0;
786
+ }
787
+ test_ord="lp("+string(nvars(basering))+"),";
788
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
789
+ {
790
+ "Warning: Block orderings are not supported; lp used for computation.";
791
+ }
792
+ }
793
+
794
+ if(external_ord=="" && find(singular_ord,"dp")==1)
795
+ {
796
+ external_ord="W_REV_LEX";
797
+ for(i=1;i<=nvars(basering);i++)
798
+ {
799
+ weightvec[i]=1;
800
+ }
801
+ test_ord="dp("+string(nvars(basering))+"),";
802
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
803
+ {
804
+ "Warning: Block orderings are not supported; dp used for computation.";
805
+ }
806
+ }
807
+ if(external_ord=="" && find(singular_ord,"dp")==3)
808
+ {
809
+ external_ord="W_REV_LEX";
810
+ for(i=1;i<=nvars(basering);i++)
811
+ {
812
+ weightvec[i]=1;
813
+ }
814
+ test_ord="dp("+string(nvars(basering))+"),";
815
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
816
+ {
817
+ "Warning: Block orderings are not supported; dp used for computation.";
818
+ }
819
+ }
820
+
821
+ if(external_ord=="" && find(singular_ord,"Dp")==1)
822
+ {
823
+ external_ord="W_LEX";
824
+ for(i=1;i<=nvars(basering);i++)
825
+ {
826
+ weightvec[i]=1;
827
+ }
828
+ test_ord="Dp("+string(nvars(basering))+"),";
829
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
830
+ {
831
+ "Warning: Block orderings are not supported; Dp used for computation.";
832
+ }
833
+ }
834
+ if(external_ord=="" && find(singular_ord,"Dp")==3)
835
+ {
836
+ external_ord="W_LEX";
837
+ for(i=1;i<=nvars(basering);i++)
838
+ {
839
+ weightvec[i]=1;
840
+ }
841
+ test_ord="Dp("+string(nvars(basering))+"),";
842
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
843
+ {
844
+ "Warning: Block orderings are not supported; Dp used for computation.";
845
+ }
846
+ }
847
+
848
+ int pos;
849
+ string number_string;
850
+
851
+ if(external_ord=="" && find(singular_ord,"wp")==1)
852
+ {
853
+ external_ord="W_REV_LEX";
854
+ pos=3;
855
+ for(i=1;i<=nvars(basering);i++)
856
+ {
857
+ pos++;
858
+ number_string="";
859
+ while(singular_ord[pos]!="," && singular_ord[pos]!=")")
860
+ {
861
+ number_string=number_string+singular_ord[pos];
862
+ pos++;
863
+ }
864
+ weightvec[i]=`number_string`;
865
+ }
866
+ test_ord="wp("+string(weightvec)+"),";
867
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
868
+ {
869
+ "Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
870
+ }
871
+ }
872
+
873
+ if(external_ord=="" && find(singular_ord,"wp")==3)
874
+ {
875
+ external_ord="W_REV_LEX";
876
+ pos=5;
877
+ for(i=1;i<=nvars(basering);i++)
878
+ {
879
+ pos++;
880
+ number_string="";
881
+ while(singular_ord[pos]!=",")
882
+ {
883
+ number_string=number_string+singular_ord[pos];
884
+ pos++;
885
+ }
886
+ weightvec[i]=`number_string`;
887
+ }
888
+ test_ord="wp("+string(weightvec)+"),";
889
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
890
+ {
891
+ "Warning: Block orderings are not supported; wp("+string(weightvec)+") used for computation.";
892
+ }
893
+ }
894
+
895
+ if(external_ord=="" && find(singular_ord,"Wp")==1)
896
+ {
897
+ external_ord="W_LEX";
898
+ pos=3;
899
+ for(i=1;i<=nvars(basering);i++)
900
+ {
901
+ pos++;
902
+ number_string="";
903
+ while(singular_ord[pos]!=",")
904
+ {
905
+ number_string=number_string+singular_ord[pos];
906
+ pos++;
907
+ }
908
+ weightvec[i]=`number_string`;
909
+ }
910
+ test_ord="Wp("+string(weightvec)+"),";
911
+ if(singular_ord!=(test_ord+"C") && singular_ord!=(test_ord+"c"))
912
+ {
913
+ "Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
914
+ }
915
+ }
916
+ if(external_ord=="" && find(singular_ord,"Wp")==3)
917
+ {
918
+ external_ord="W_LEX";
919
+ pos=5;
920
+ for(i=1;i<=nvars(basering);i++)
921
+ {
922
+ pos++;
923
+ number_string="";
924
+ while(singular_ord[pos]!=",")
925
+ {
926
+ number_string=number_string+singular_ord[pos];
927
+ pos++;
928
+ }
929
+ weightvec[i]=`number_string`;
930
+ }
931
+ test_ord="Wp("+string(weightvec)+"),";
932
+ if(singular_ord!=("C"+test_ord) && singular_ord!=("c"+test_ord))
933
+ {
934
+ "Warning: Block orderings are not supported; Wp("+string(weightvec)+") used for computation.";
935
+ }
936
+ }
937
+
938
+ if(external_ord=="")
939
+ {
940
+ ERROR("The term ordering of the actual basering is not supported.");
941
+ }
942
+
943
+ // create first temporary file with which the external program is called
944
+
945
+ int dummy;
946
+ int process=system("pid");
947
+ string groebnerfile="temp_GROEBNER"+string(process);
948
+ link GROEBNER=":w "+groebnerfile;
949
+ open(GROEBNER);
950
+
951
+ write(GROEBNER,"GROEBNER","computed with algorithm:","pt","term ordering:","elimination block",0,"weighted block",nvars(basering),external_ord);
952
+ // algorithm is totally unimportant, only required by the external program
953
+
954
+ for(i=1;i<=nvars(basering);i++)
955
+ {
956
+ write(GROEBNER,weightvec[i]);
957
+ }
958
+
959
+ write(GROEBNER,"size:",size(I),"Groebner basis:");
960
+ poly head;
961
+ poly tail;
962
+ poly rest;
963
+ intvec v;
964
+
965
+ for(j=1;j<=size(I);j++)
966
+ {
967
+ // test suitability of generator j
968
+ rest=I[j];
969
+ head=lead(rest);
970
+ rest=rest-head;
971
+ tail=lead(rest);
972
+ rest=rest-tail;
973
+
974
+ if(head==0 && tail==0 && rest!=0)
975
+ {
976
+ close(GROEBNER);
977
+ dummy=system("sh","rm -f "+groebnerfile);
978
+ ERROR("Generator "+string(j)+" of the input ideal is no binomial.");
979
+ }
980
+
981
+ if(leadcoef(tail)!=-leadcoef(head))
982
+ // generator is no difference of monomials (or a constant multiple)
983
+ {
984
+ close(GROEBNER);
985
+ dummy=system("sh","rm -f "+groebnerfile);
986
+ ERROR("Generator "+string(j)+" of the input ideal is no difference of monomials.");
987
+ }
988
+
989
+ if(gcd(head,tail)!=1)
990
+ {
991
+ "Warning: The monomials of generator "+string(j)+" of the input ideal are not relatively prime.";
992
+ }
993
+
994
+ // write vector representation of generator j into the file
995
+ v=leadexp(head)-leadexp(tail);
996
+ for(i=1;i<=nvars(basering);i++)
997
+ {
998
+ write(GROEBNER,v[i]);
999
+ }
1000
+ }
1001
+ close(GROEBNER);
1002
+
1003
+ // create second temporary file
1004
+
1005
+ string newcostfile="temp_NEW_COST"+string(process);
1006
+ link NEW_COST=":w "+newcostfile;
1007
+ open(NEW_COST);
1008
+
1009
+ write(NEW_COST,"NEW_COST","variables:",nvars(basering),"cost vector:");
1010
+ for(i=1;i<=nvars(basering);i++)
1011
+ {
1012
+ write(NEW_COST,weightvec[i]);
1013
+ }
1014
+
1015
+ // call external program
1016
+ if (status(system("SingularBin")+"change_cost","exists")=="yes")
1017
+ {
1018
+ dummy=system("sh",system("SingularBin")+"change_cost "+groebnerfile+" "+newcostfile);
1019
+ }
1020
+ else
1021
+ {
1022
+ dummy=system("sh","change_cost "+groebnerfile+" "+newcostfile);
1023
+ }
1024
+ if (dummy!=0) { ERROR("change_cost failed with error code "+string(dummy)); }
1025
+
1026
+ // read toric standard basis from created file
1027
+ link TORIC_IDEAL=":r "+newcostfile+".GB.pt";
1028
+ string toric_id=read(TORIC_IDEAL);
1029
+
1030
+ int generators;
1031
+ pos=find(toric_id,"size");
1032
+ pos=find(toric_id,":",pos);
1033
+ pos++;
1034
+
1035
+ while(toric_id[pos]==" " || toric_id[pos]==newline)
1036
+ {
1037
+ pos++;
1038
+ }
1039
+ number_string="";
1040
+ while(toric_id[pos]!=" " && toric_id[pos]!=newline)
1041
+ {
1042
+ number_string=number_string+toric_id[pos];
1043
+ pos++;
1044
+ }
1045
+ generators=`number_string`;
1046
+
1047
+ pos=find(toric_id,"basis");
1048
+ pos=find(toric_id,":",pos);
1049
+ pos++;
1050
+
1051
+ for(j=1;j<=generators;j++)
1052
+ {
1053
+ head=1;
1054
+ tail=1;
1055
+
1056
+ for(i=1;i<=nvars(basering);i++)
1057
+ {
1058
+ while(toric_id[pos]==" " || toric_id[pos]==newline)
1059
+ {
1060
+ pos++;
1061
+ }
1062
+ number_string="";
1063
+ while(toric_id[pos]!=" " && toric_id[pos]!=newline)
1064
+ {
1065
+ number_string=number_string+toric_id[pos];
1066
+ pos++;
1067
+ }
1068
+ v[i]=`number_string`;
1069
+ if(v[i]<0)
1070
+ {
1071
+ tail=tail*var(i)^(-v[i]);
1072
+ }
1073
+ if(v[i]>0)
1074
+ {
1075
+ head=head*var(i)^v[i];
1076
+ }
1077
+ }
1078
+ J[j]=head-tail;
1079
+ }
1080
+
1081
+ // delete all created files
1082
+ dummy=system("sh","rm -f "+groebnerfile);
1083
+ dummy=system("sh","rm -f "+groebnerfile+".GB.pt");
1084
+ dummy=system("sh","rm -f "+newcostfile);
1085
+
1086
+ return(J);
1087
+ }
1088
+
1089
+ example
1090
+ {
1091
+ "EXAMPLE"; echo=2;
1092
+
1093
+ ring r=0,(x,y,z),wp(3,2,1);
1094
+
1095
+ // call with toric ideal (of the matrix A=(1,1,1))
1096
+ ideal I=x-y,x-z;
1097
+ ideal J=toric_std(I);
1098
+ J;
1099
+
1100
+ // call with the same ideal, but badly chosen generators:
1101
+ // 1) not only binomials
1102
+ I=x-y,2x-y-z;
1103
+ J=toric_std(I);
1104
+ // 2) binomials whose monomials are not relatively prime
1105
+ I=x-y,xy-yz,y-z;
1106
+ J=toric_std(I);
1107
+ J;
1108
+
1109
+ // call with a non-toric ideal that seems to be toric
1110
+ I=x-yz,xy-z;
1111
+ J=toric_std(I);
1112
+ J;
1113
+ // comparison with real standard basis and saturation
1114
+ ideal H=std(I);
1115
+ H;
1116
+ LIB "elim.lib";
1117
+ sat_with_exp(H,xyz);
1118
+ }
1119
+ ///////////////////////////////////////////////////////////////////////////////