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,1174 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ version="version polylib.lib 4.4.0.0 Nov_2023 "; // $Id: 35d3c5db47d8165ccd2b86ecf2f2d960e1e7bca4 $
3
+ category="General purpose";
4
+ info="
5
+ LIBRARY: polylib.lib Procedures for Manipulating Polys, Ideals, Modules
6
+ AUTHORS: O. Bachmann, G.-M. Greuel, A. Fruehbis
7
+
8
+ PROCEDURES:
9
+ cyclic(int); ideal of cyclic n-roots
10
+ elemSymmId(int); ideal of elementary symmetric polynomials
11
+ katsura([i]); katsura [i] ideal
12
+ freerank(poly/...) rank of coker(input) if coker is free else -1
13
+ is_zero(poly/...); int, =1 resp. =0 if coker(input) is 0 resp. not
14
+ lcm(ideal); lcm of given generators of ideal
15
+ maxcoef(poly/...); maximal length of coefficient occurring in poly/...
16
+ maxdeg(poly/...); int/intmat = degree/s of terms of maximal order
17
+ maxdeg1(poly/...); int = [weighted] maximal degree of input
18
+ mindeg(poly/...); int/intmat = degree/s of terms of minimal order
19
+ mindeg1(poly/...); int = [weighted] minimal degree of input
20
+ normalize(poly/...); normalize poly/... such that leading coefficient is 1
21
+ rad_con(p,I); check radical containment of polynomial p in ideal I
22
+ content(f); content of polynomial/vector f
23
+ mod2id(M,iv); conversion of a module M to an ideal
24
+ id2mod(i,iv); conversion inverse to mod2id
25
+ substitute(I,...) substitute in I variables by polynomials
26
+ subrInterred(i1,i2,iv);interred w.r.t. a subset of variables
27
+ newtonDiag(f); Newton diagram of a polynomial
28
+ hilbPoly(I); Hilbert polynomial of basering/I
29
+ (parameters in square brackets [] are optional)
30
+
31
+ ";
32
+
33
+ LIB "general.lib";
34
+ LIB "ring.lib";
35
+ ///////////////////////////////////////////////////////////////////////////////
36
+ static proc bino(int a, int b)
37
+ {
38
+ //computes binomial var(1)+a over b
39
+ int i;
40
+ if(b==0){return(1);}
41
+ poly p=(var(1)+a)/b;
42
+ for(i=1;i<=b-1;i++)
43
+ {
44
+ p=p*(var(1)+a-i)/i;
45
+ }
46
+ return(p);
47
+ }
48
+
49
+ proc hilbPoly(ideal I)
50
+ "USAGE: hilbPoly(I); I a homogeneous ideal
51
+ RETURN: the Hilbert polynomial of basering/I as an intvec v=v_0,...,v_r
52
+ such that the Hilbert polynomial is (v_0+v_1*t+...v_r*t^r)/r!
53
+ EXAMPLE: example hilbPoly; shows an example
54
+ "
55
+ {
56
+ def R=basering;
57
+ if(!attrib(I,"isSB")){I=std(I);}
58
+ bigintvec v=hilb(I,2);
59
+ int s=dim(I);
60
+ intvec hp;
61
+ if(s<=0){return(hp);}
62
+ int d=size(v)-2;
63
+ ring S=0,t,dp;
64
+ poly p=v[1+d]*bino(s-1-d,s-1);
65
+ int i;
66
+ for(i=1;i<=d;i++)
67
+ {
68
+ p=p+v[d-i+1]*bino(s-1-d+i,s-1);
69
+ }
70
+ int n=1;
71
+ for(i=2;i<=s-1;i++){n=n*i;}
72
+ p=n*p;
73
+ hp[s]=int(leadcoef(p));
74
+ for(i=2;i<=size(p);i++)
75
+ {
76
+ hp[leadexp(p[i])+1]=int(leadcoef(p[i]));
77
+ }
78
+ setring R;
79
+ return(hp);
80
+ }
81
+ example
82
+ { "EXAMPLE:"; echo = 2;
83
+ ring r = 0,(b,c,t,h),dp;
84
+ ideal I=
85
+ bct-t2h+2th2+h3,
86
+ bt3-ct3-t4+b2th+c2th-2bt2h+2ct2h+2t3h-bch2-2bth2+2cth2+2th3,
87
+ b2c2+bt2h-ct2h-t3h+b2h2+2bch2+c2h2-2bth2+2cth2+t2h2-2bh3+2ch3+2th3+3h4,
88
+ c2t3+ct4-c3th-2c2t2h-2ct3h-t4h+bc2h2-2c2th2-bt2h2+4t3h2+2bth3-2cth3-t2h3
89
+ +bh4-6th4-2h5;
90
+ hilbPoly(I);
91
+ }
92
+
93
+ ///////////////////////////////////////////////////////////////////////////////
94
+ proc substitute (def I,list #)
95
+ "USAGE: - case 1: typeof(#[1])==poly:
96
+ substitute (I,v,f[,v1,f1,v2,f2,...]); I object of basering which
97
+ can be mapped, v,v1,v2,.. ring variables, f,f1,f2,... poly
98
+ @* - case 2: typeof(#[1])==ideal:
99
+ substitute (I,v,f); I object of basering which can be mapped,
100
+ v ideal of ring variables, f ideal
101
+ RETURN: object of same type as I,
102
+ @* - case 1: ring variable v,v1,v2,... substituted by polynomials
103
+ f,f1,f2,..., in this order
104
+ @* - case 2: ring variables in v substituted by polynomials in f:
105
+ v[i] is substituted by f[i], i=1,...,i=min(size(v),ncols(f))
106
+ NOTE: this procedure extends the built-in command subst via maps
107
+ EXAMPLE: example substitute; shows an example
108
+ "
109
+ {
110
+ def bas = basering;
111
+ ideal m = maxideal(1);
112
+ int i,ii;
113
+ if(typeof(#[1])=="poly")
114
+ {
115
+ poly v = #[1];
116
+ poly f = #[2];
117
+ map phi = bas,m;
118
+ def J = I;
119
+ for (ii=1; ii<=size(#) - 1; ii=ii+2)
120
+ {
121
+ m = maxideal(1);
122
+ i=rvar(#[ii]);
123
+ m[i] = #[ii+1];
124
+ phi = bas,m;
125
+ J = phi(J);
126
+ }
127
+ return(J);
128
+ }
129
+ if(typeof(#[1])=="ideal")
130
+ {
131
+ ideal v = #[1];
132
+ ideal f = #[2];
133
+ int mi = ncols(v);
134
+ if(ncols(f)<mi)
135
+ {
136
+ mi = ncols(f);
137
+ }
138
+ def J = I;
139
+ for (ii=1; ii<=mi; ii++)
140
+ {
141
+ m[rvar(v[ii])]=f[ii];
142
+ }
143
+ map phi = bas,m;
144
+ J = phi(I);
145
+ return(J);
146
+ }
147
+ }
148
+ example
149
+ { "EXAMPLE:"; echo = 2;
150
+ ring r = 0,(b,c,t),dp;
151
+ ideal I = -bc+4b2c2t,bc2t-5b2c;
152
+ substitute(I,c,b+c,t,0,b,b-1);
153
+ ideal v = c,t,b;
154
+ ideal f = b+c,0,b-1;
155
+ substitute(I,v,f);
156
+ }
157
+
158
+ ///////////////////////////////////////////////////////////////////////////////
159
+ proc cyclic (int n)
160
+ "USAGE: cyclic(n); n integer
161
+ RETURN: ideal of cyclic n-roots from 1-st n variables of basering
162
+ EXAMPLE: example cyclic; shows examples
163
+ "
164
+ {
165
+ //----------------------------- procedure body --------------------------------
166
+ ideal m = maxideal(1);
167
+ m = m[1..n],m[1..n];
168
+ int i,j;
169
+ ideal s; poly t;
170
+ for ( j=0; j<=n-2; j++ )
171
+ {
172
+ t=0;
173
+ for( i=1;i<=n;i++ ) { t=t+product(m,i..i+j); }
174
+ s=s+t;
175
+ }
176
+ s=s,product(m,1..n)-1;
177
+ return (s);
178
+ }
179
+ //-------------------------------- examples -----------------------------------
180
+ example
181
+ { "EXAMPLE:"; echo = 2;
182
+ ring r=0,(u,v,w,x,y,z),lp;
183
+ cyclic(nvars(basering));
184
+ homog(cyclic(5),z);
185
+ }
186
+
187
+ ///////////////////////////////////////////////////////////////////////////////
188
+ proc elemSymmPoly(int d, int lindex, int hindex)
189
+ "USAGE: elemSymmPoly(d,lindex,hindex); d,lindex,hindex integers
190
+ RETURN: elementary symmetric polynomial of degree d for variables
191
+ @* var(lindex),...,var(hindex) of basering
192
+ EXAMPLE: example elemSymmPoly; shows an example
193
+ "
194
+ {
195
+ if(hindex - lindex + 1 < d)
196
+ {
197
+ int i = hindex - lindex + 1;
198
+ "========================================================";
199
+ "There is no elementary symmetric polynomial of degree "+string(d);
200
+ "for just "+string(i)+" variables.";
201
+ "========================================================";
202
+ return(poly(0));
203
+ }
204
+ if(d == 0)
205
+ {
206
+ return(poly(1));
207
+ }
208
+ else
209
+ {
210
+ int i;
211
+ poly p;
212
+ for (i = lindex; i <= hindex - d + 1; i++)
213
+ {
214
+ p = p + var(i) * elemSymmPoly(d - 1, i + 1, hindex);
215
+ }
216
+ return(p);
217
+ }
218
+ }
219
+ example
220
+ { "EXAMPLE:"; echo = 2;
221
+ ring R = 0, (u,v,w,x,y,z), lp;
222
+ elemSymmPoly(3,2,5);
223
+ elemSymmPoly(6,1,6);
224
+ }
225
+
226
+ //////////////////////////////////////////////////////////////////////////
227
+ proc elemSymmId(int n)
228
+ "USAGE: elemSymmId(n); n integer
229
+ RETURN: ideal of elementary symmetric polynomials for 1-st n
230
+ @* variables of basering
231
+ EXAMPLE: example elemSymmId; shows an example
232
+ {
233
+ int i;
234
+ ideal symm;
235
+ for(i = 1; i <= n; i++)
236
+ {
237
+ symm = symm + elemSymmPoly(i, 1, n);
238
+ }
239
+ return(symm);
240
+ }
241
+ example
242
+ { "EXAMPLE:"; echo = 2;
243
+ ring R = 0, (v,w,x,y,z), lp;
244
+ elemSymmId(3);
245
+ elemSymmId(nvars(basering));
246
+ }
247
+
248
+ //////////////////////////////////////////////////////////////////////////
249
+ proc katsura
250
+ "USAGE: katsura([n]); n integer
251
+ RETURN: katsura(n) : n-th katsura ideal of
252
+ (1) newly created and set ring (32003, x(0..n), dp), if
253
+ nvars(basering) < n
254
+ (2) basering, if nvars(basering) >= n
255
+ katsura() : katsura ideal of basering
256
+ EXAMPLE: example katsura; shows examples
257
+ "
258
+ {
259
+ int n;
260
+ if ( size(#) == 1 && typeof(#[1]) == "int")
261
+ {
262
+ n = #[1] - 1;
263
+ while (1)
264
+ {
265
+ if (defined(basering))
266
+ {
267
+ if (nvars(basering) >= #[1]) {break;}
268
+ }
269
+ ring katsura_ring = 32003, x(0..#[1]), dp;
270
+ keepring katsura_ring;
271
+ break;
272
+ }
273
+ }
274
+ else
275
+ {
276
+ n = nvars(basering) -1;
277
+ }
278
+
279
+ ideal s;
280
+ int i, j;
281
+ poly p;
282
+
283
+ p = -1;
284
+ for (i = -n; i <= n; i++)
285
+ {
286
+ p = p + kat_var(i, n);
287
+ }
288
+ s[1] = p;
289
+
290
+ for (i = 0; i < n; i++)
291
+ {
292
+ p = -1 * kat_var(i,n);
293
+ for (j = -n; j <= n; j++)
294
+ {
295
+ p = p + kat_var(j,n) * kat_var(i-j, n);
296
+ }
297
+ s = s,p;
298
+ }
299
+ return (s);
300
+ }
301
+ //-------------------------------- examples -----------------------------------
302
+ example
303
+ {
304
+ "EXAMPLE:"; echo = 2;
305
+ ring r; basering;
306
+ katsura();
307
+ katsura(4); basering;
308
+ }
309
+
310
+ proc kat_var(int i, int n)
311
+ {
312
+ poly p;
313
+ if (i < 0) { i = -i;}
314
+ if (i <= n) { p = var(i+1); }
315
+ return (p);
316
+ }
317
+ ///////////////////////////////////////////////////////////////////////////////
318
+
319
+ proc freerank
320
+ "USAGE: freerank(M[,any]); M=poly/ideal/vector/module/matrix
321
+ COMPUTE: rank of module presented by M in case it is free.
322
+ By definition this is vdim(coker(M)/m*coker(M)) if coker(M)
323
+ is free, where m is the maximal ideal of the variables of the
324
+ basering and M is considered to be a matrix.
325
+ (the 0-module is free of rank 0)
326
+ RETURN: rank of coker(M) if coker(M) is free and -1 else;
327
+ in case of a second argument return a list:
328
+ L[1] = rank of coker(M) or -1
329
+ L[2] = minbase(M)
330
+ NOTE: freerank(syz(M)); computes the rank of M if M is free (and -1 else)
331
+ EXAMPLE: example freerank; shows examples
332
+ "
333
+ {
334
+ int rk;
335
+ def M = simplify(#[1],10);
336
+ resolution mre = res(M,2);
337
+ intmat B = betti(mre);
338
+ if ( ncols(B)>1 ) { rk = -1; }
339
+ else { rk = sum(B[1..nrows(B),1]); }
340
+ if (size(#) == 2) { list L=rk,mre[1]; return(L);}
341
+ return(rk);
342
+ }
343
+ example
344
+ {"EXAMPLE"; echo=2;
345
+ ring r;
346
+ ideal i=x;
347
+ module M=[x,0,1],[-x,0,-1];
348
+ freerank(M); // should be 2, coker(M) is not free
349
+ freerank(syz (M),"");
350
+ // [1] should be 1, coker(syz(M))=M is free of rank 1
351
+ // [2] should be gen(2)+gen(1) (minimal relation of M)
352
+ freerank(i);
353
+ freerank(syz(i)); // should be 1, coker(syz(i))=i is free of rank 1
354
+ }
355
+ ///////////////////////////////////////////////////////////////////////////////
356
+
357
+ proc is_zero
358
+ "USAGE: is_zero(M[,any]); M=poly/ideal/vector/module/matrix
359
+ RETURN: integer, 1 if coker(M)=0 resp. 0 if coker(M)!=0, where M is
360
+ considered as matrix.
361
+ If a second argument is given, return a list:
362
+ L[1] = 1 if coker(M)=0 resp. 0 if coker(M)!=0
363
+ L[2] = dim(M)
364
+ EXAMPLE: example is_zero; shows examples
365
+ "
366
+ {
367
+ int d=dim(std(#[1]));
368
+ int a = ( d==-1 );
369
+ if( size(#) >1 ) { return(list(a,d)); }
370
+ return(a);
371
+ }
372
+ example
373
+ { "EXAMPLE:"; echo=2;
374
+ ring r;
375
+ module m = [x],[y],[1,z];
376
+ is_zero(m,1);
377
+ qring q = std(ideal(x2+y3+z2));
378
+ ideal j = x2+y3+z2-37;
379
+ is_zero(j);
380
+ }
381
+ ///////////////////////////////////////////////////////////////////////////////
382
+
383
+ proc maxcoef (def f)
384
+ "USAGE: maxcoef(f); f poly/ideal/vector/module/matrix
385
+ RETURN: maximal length of coefficient of f of type int (by measuring the
386
+ length of the string of each coefficient)
387
+ EXAMPLE: example maxcoef; shows examples
388
+ "
389
+ {
390
+ //----------------------------- procedure body --------------------------------
391
+ int max,s,ii,jj; string t;
392
+ ideal i = ideal(matrix(f));
393
+ i = simplify(i,6); // delete 0's and keep first of equal elements
394
+ poly m = var(1); matrix C;
395
+ for (ii=2;ii<=nvars(basering);ii++) { m = m*var(ii); }
396
+ for (ii=1; ii<=size(i); ii++)
397
+ {
398
+ C = coef(i[ii],m);
399
+ for (jj=1; jj<=ncols(C); jj++)
400
+ {
401
+ t = string(C[2,jj]); s = size(t);
402
+ if ( t[1] == "-" ) { s = s - 1; }
403
+ if ( s > max ) { max = s; }
404
+ }
405
+ }
406
+ return(max);
407
+ }
408
+ //-------------------------------- examples -----------------------------------
409
+ example
410
+ { "EXAMPLE:"; echo = 2;
411
+ ring r= 0,(x,y,z),ds;
412
+ poly g = 345x2-1234567890y+7/4z;
413
+ maxcoef(g);
414
+ ideal i = g,10/1234567890;
415
+ maxcoef(i);
416
+ // since i[2]=1/123456789
417
+ }
418
+ ///////////////////////////////////////////////////////////////////////////////
419
+
420
+ proc maxdeg (def id)
421
+ "USAGE: maxdeg(id); id poly/ideal/vector/module/matrix
422
+ RETURN: int/intmat, each component equals maximal degree of monomials in the
423
+ corresponding component of id, independent of ring ordering
424
+ (maxdeg of each var is 1).
425
+ Of type int, if id is of type poly; of type intmat otherwise
426
+ SEE ALSO: maxdeg1
427
+ EXAMPLE: example maxdeg; shows examples
428
+ "
429
+ {
430
+ //-------- subprocedure to find maximal degree of given component ----------
431
+ proc findmaxdeg
432
+ {
433
+ poly c = #[1];
434
+ if (c==0) { return(-1); }
435
+ //--- guess upper 'o' and lower 'u' bound, in case of negative weights -----
436
+ int d = (deg(c)>=0)*deg(c)-(deg(c)<0)*deg(c);
437
+ int i = d;
438
+ while ( c-jet(c,i) != 0 ) { i = 2*(i+1); }
439
+ int o = i-1;
440
+ int u = (d != i)*((i div 2)-1);
441
+ //----------------------- "quick search" for maxdeg ------------------------
442
+ while ( (c-jet(c,i)==0)*(c-jet(c,i-1)!=0) == 0)
443
+ {
444
+ i = (o+1+u) div 2;
445
+ if (c-jet(c,i)!=0) { u = i+1; }
446
+ else { o = i-1; }
447
+ }
448
+ return(i);
449
+ }
450
+ //------------------------------ main program ---------------------------------
451
+ matrix M = matrix(id);
452
+ int r,c = nrows(M), ncols(M); int i,j;
453
+ intmat m[r][c];
454
+ for (i=r; i>0; i--)
455
+ {
456
+ for (j=c; j>0; j--) { m[i,j] = findmaxdeg(M[i,j]); }
457
+ }
458
+ if (typeof(id)=="poly") { return(m[1,1]); }
459
+ return(m);
460
+ }
461
+ //-------------------------------- examples -----------------------------------
462
+ example
463
+ { "EXAMPLE:"; echo = 2;
464
+ ring r = 0,(x,y,z),wp(1,2,3);
465
+ poly f = x+y2+z3;
466
+ deg(f); //deg; returns weighted degree (in case of 1 block)!
467
+ maxdeg(f);
468
+ matrix m[2][2]=f+x10,1,0,f^2;
469
+ maxdeg(m);
470
+ }
471
+ ///////////////////////////////////////////////////////////////////////////////
472
+
473
+ proc maxdeg1 (def id,list #)
474
+ "USAGE: maxdeg1(id[,v]); id=poly/ideal/vector/module/matrix, v=intvec
475
+ RETURN: integer, maximal [weighted] degree of monomials of id independent of
476
+ ring ordering, maxdeg1 of i-th variable is v[i] (default: v=1..1).
477
+ NOTE: This proc returns one integer while maxdeg returns, in general,
478
+ a matrix of integers. For one polynomial and if no intvec v is given
479
+ maxdeg is faster
480
+ EXAMPLE: example maxdeg1; shows examples
481
+ "
482
+ {
483
+ //-------- subprocedure to find maximal degree of given component ----------
484
+ proc findmaxdeg
485
+ {
486
+ poly c = #[1];
487
+ if (c==0) { return(-1); }
488
+ intvec v = #[2];
489
+ //--- guess upper 'o' and lower 'u' bound, in case of negative weights -----
490
+ int d = (deg(c)>=0)*deg(c)-(deg(c)<0)*deg(c);
491
+ int i = d;
492
+ if ( c == jet(c,-1,v)) //case: maxdeg is negative
493
+ {
494
+ i = -d;
495
+ while ( c == jet(c,i,v) ) { i = 2*(i-1); }
496
+ int o = (d != -i)*((i div 2)+2) - 1;
497
+ int u = i+1;
498
+ int e = -1;
499
+ }
500
+ else //case: maxdeg is nonnegative
501
+ {
502
+ while ( c != jet(c,i,v) ) { i = 2*(i+1); }
503
+ int o = i-1;
504
+ int u = (d != i)*((i div 2)-1);
505
+ int e = 1;
506
+ }
507
+ //----------------------- "quick search" for maxdeg ------------------------
508
+ while ( ( c==jet(c,i,v) )*( c!=jet(c,i-1,v) ) == 0 )
509
+ {
510
+ i = (o+e+u) div 2;
511
+ if ( c!=jet(c,i,v) ) { u = i+1; }
512
+ else { o = i-1; }
513
+ }
514
+ return(i);
515
+ }
516
+ //------------------------------ main program ---------------------------------
517
+ ideal M = simplify(ideal(matrix(id)),8); //delete scalar multiples from id
518
+ int c = ncols(M);
519
+ int i,n;
520
+ if( size(#)==0 )
521
+ {
522
+ int m = maxdeg(M[c]);
523
+ for (i=c-1; i>0; i--)
524
+ {
525
+ n = maxdeg(M[i]);
526
+ m = (m>=n)*m + (m<n)*n; //let m be the maximum of m and n
527
+ }
528
+ }
529
+ else
530
+ {
531
+ intvec v=#[1]; //weight vector for the variables
532
+ int m = findmaxdeg(M[c],v);
533
+ for (i=c-1; i>0; i--)
534
+ {
535
+ n = findmaxdeg(M[i],v);
536
+ if( n>m ) { m=n; }
537
+ }
538
+ }
539
+ return(m);
540
+ }
541
+ //-------------------------------- examples -----------------------------------
542
+ example
543
+ { "EXAMPLE:"; echo = 2;
544
+ ring r = 0,(x,y,z),wp(1,2,3);
545
+ poly f = x+y2+z3;
546
+ deg(f); //deg returns weighted degree (in case of 1 block)!
547
+ maxdeg1(f);
548
+ intvec v = ringweights(r);
549
+ maxdeg1(f,v); //weighted maximal degree
550
+ matrix m[2][2]=f+x10,1,0,f^2;
551
+ maxdeg1(m,v); //absolute weighted maximal degree
552
+ }
553
+ ///////////////////////////////////////////////////////////////////////////////
554
+
555
+ proc mindeg (def id)
556
+ "USAGE: mindeg(id); id poly/ideal/vector/module/matrix
557
+ RETURN: minimal degree/s of monomials of id, independent of ring ordering
558
+ (mindeg of each variable is 1) of type int if id of type poly, else
559
+ of type intmat.
560
+ SEE ALSO: mindeg1
561
+ EXAMPLE: example mindeg; shows examples
562
+ "
563
+ {
564
+ //--------- subprocedure to find minimal degree of given component ---------
565
+ proc findmindeg
566
+ {
567
+ poly c = #[1];
568
+ if (c==0) { return(-1); }
569
+ //--- guess upper 'o' and lower 'u' bound, in case of negative weights -----
570
+ int d = (ord(c)>=0)*ord(c)-(ord(c)<0)*ord(c);
571
+ int i = d;
572
+ while ( jet(c,i) == 0 ) { i = 2*(i+1); }
573
+ int o = i-1;
574
+ int u = (d != i)*((i div 2)-1);
575
+ //----------------------- "quick search" for mindeg ------------------------
576
+ while ( (jet(c,u)==0)*(jet(c,o)!=0) )
577
+ {
578
+ i = (o+u) div 2;
579
+ if (jet(c,i)==0) { u = i+1; }
580
+ else { o = i-1; }
581
+ }
582
+ if (jet(c,u)!=0) { return(u); }
583
+ else { return(o+1); }
584
+ }
585
+ //------------------------------ main program ---------------------------------
586
+ matrix M = matrix(id);
587
+ int r,c = nrows(M), ncols(M); int i,j;
588
+ intmat m[r][c];
589
+ for (i=r; i>0; i--)
590
+ {
591
+ for (j=c; j>0; j--) { m[i,j] = findmindeg(M[i,j]); }
592
+ }
593
+ if (typeof(id)=="poly") { return(m[1,1]); }
594
+ return(m);
595
+ }
596
+ //-------------------------------- examples -----------------------------------
597
+ example
598
+ { "EXAMPLE:"; echo = 2;
599
+ ring r = 0,(x,y,z),ls;
600
+ poly f = x5+y2+z3;
601
+ ord(f); // ord returns weighted order of leading term!
602
+ mindeg(f); // computes minimal degree
603
+ matrix m[2][2]=x10,1,0,f^2;
604
+ mindeg(m); // computes matrix of minimum degrees
605
+ }
606
+ ///////////////////////////////////////////////////////////////////////////////
607
+
608
+ proc mindeg1 (def id, list #)
609
+ "USAGE: mindeg1(id[,v]); id=poly/ideal/vector/module/matrix, v=intvec
610
+ RETURN: integer, minimal [weighted] degree of monomials of id independent of
611
+ ring ordering, mindeg1 of i-th variable is v[i] (default v=1..1).
612
+ NOTE: This proc returns one integer while mindeg returns, in general,
613
+ a matrix of integers. For one polynomial and if no intvec v is given
614
+ mindeg is faster.
615
+ EXAMPLE: example mindeg1; shows examples
616
+ "
617
+ {
618
+ //--------- subprocedure to find minimal degree of given component ---------
619
+ proc findmindeg
620
+ {
621
+ poly c = #[1];
622
+ intvec v = #[2];
623
+ if (c==0) { return(-1); }
624
+ //--- guess upper 'o' and lower 'u' bound, in case of negative weights -----
625
+ int d = (ord(c)>=0)*ord(c)-(ord(c)<0)*ord(c);
626
+ int i = d;
627
+ if ( jet(c,-1,v) !=0 ) //case: mindeg is negative
628
+ {
629
+ i = -d;
630
+ while ( jet(c,i,v) != 0 ) { i = 2*(i-1); }
631
+ int o = (d != -i)*((i div 2)+2) - 1;
632
+ int u = i+1;
633
+ int e = -1; i=u;
634
+ }
635
+ else //case: mindeg is nonnegative
636
+ {
637
+ while ( jet(c,i,v) == 0 ) { i = 2*(i+1); }
638
+ int o = i-1;
639
+ int u = (d != i)*((i div 2)-1);
640
+ int e = 1; i=u;
641
+ }
642
+ //----------------------- "quick search" for mindeg ------------------------
643
+ while ( (jet(c,i-1,v)==0)*(jet(c,i,v)!=0) == 0 )
644
+ {
645
+ i = (o+e+u) div 2;
646
+ if (jet(c,i,v)==0) { u = i+1; }
647
+ else { o = i-1; }
648
+ }
649
+ return(i);
650
+ }
651
+ //------------------------------ main program ---------------------------------
652
+ ideal M = simplify(ideal(matrix(id)),8); //delete scalar multiples from id
653
+ int c = ncols(M);
654
+ int i,n;
655
+ if( size(#)==0 )
656
+ {
657
+ int m = mindeg(M[c]);
658
+ for (i=c-1; i>0; i--)
659
+ {
660
+ n = mindeg(M[i]);
661
+ m = (m<=n)*m + (m>n)*n; //let m be the maximum of m and n
662
+ }
663
+ }
664
+ else
665
+ {
666
+ intvec v=#[1]; //weight vector for the variables
667
+ int m = findmindeg(M[c],v);
668
+ for (i=c-1; i>0; i--)
669
+ {
670
+ n = findmindeg(M[i],v);
671
+ m = (m<=n)*m + (m>n)*n; //let m be the maximum of m and n
672
+ }
673
+ }
674
+ return(m);
675
+ }
676
+ //-------------------------------- examples -----------------------------------
677
+ example
678
+ { "EXAMPLE:"; echo = 2;
679
+ ring r = 0,(x,y,z),ls;
680
+ poly f = x5+y2+z3;
681
+ ord(f); // ord returns weighted order of leading term!
682
+ intvec v = 1,-3,2;
683
+ mindeg1(f,v); // computes minimal weighted degree
684
+ matrix m[2][2]=x10,1,0,f^2;
685
+ mindeg1(m,1..3); // computes absolute minimum of weighted degrees
686
+ }
687
+ ///////////////////////////////////////////////////////////////////////////////
688
+
689
+ proc normalize (def id)
690
+ "USAGE: normalize(id); id=poly/vector/ideal/module
691
+ RETURN: object of same type
692
+ each element is normalized with leading coefficient equal to 1
693
+ EXAMPLE: example normalize; shows an example
694
+ "
695
+ {
696
+ return(simplify(id,1));
697
+ }
698
+ //-------------------------------- examples -----------------------------------
699
+ example
700
+ { "EXAMPLE:"; echo = 2;
701
+ ring r = 0,(x,y,z),ls;
702
+ poly f = 2x5+3y2+4z3;
703
+ normalize(f);
704
+ module m=[9xy,0,3z3],[4z,6y,2x];
705
+ normalize(m);
706
+ ring s = 0,(x,y,z),(c,ls);
707
+ module m=[9xy,0,3z3],[4z,6y,2x];
708
+ normalize(m);
709
+ }
710
+ ///////////////////////////////////////////////////////////////////////////////
711
+
712
+ ///////////////////////////////////////////////////////////////////////////////
713
+ // Input: <ideal>=<f1,f2,...,fm> and <polynomial> g
714
+ // Question: Does g lie in the radical of <ideal>?
715
+ // Solution: Compute a standard basis G for <f1,f2,...,fm,gz-1> where z is a
716
+ // new variable. Then g is contained in the radical of <ideal> <=>
717
+ // 1 is generator in G.
718
+ ///////////////////////////////////////////////////////////////////////////////
719
+ proc rad_con (poly g,ideal I)
720
+ "USAGE: rad_con(g,I); g polynomial, I ideal
721
+ RETURN: 1 (TRUE) (type int) if g is contained in the radical of I
722
+ @* 0 (FALSE) (type int) otherwise
723
+ EXAMPLE: example rad_con; shows an example
724
+ "
725
+ { def br=basering;
726
+ int n=nvars(br);
727
+ int dB=degBound;
728
+ degBound=0;
729
+ string mp=string(minpoly);
730
+ if (attrib(br,"global")==1)
731
+ {
732
+ list l2;
733
+ for (int ii = 1; ii <= n; ii++)
734
+ {
735
+ l2[ii] = "@x("+string(ii)+")";
736
+ }
737
+ l2[n+1] = "@z";
738
+ ring R = create_ring(ring_list(br)[1], l2, "dp", "no_minpoly");
739
+ }
740
+ else
741
+ {
742
+ list l2 = "@z";
743
+ for (int ii = 1; ii <= n; ii++)
744
+ {
745
+ l2[ii+1] = "@x("+string(ii)+")";
746
+ }
747
+ ring R = create_ring(ring_list(br)[1], l2, "(dp(1),"+ordstr(br)+")", "no_minpoly");
748
+ }
749
+ if (mp!="0")
750
+ {
751
+ execute("minpoly=number("+mp+");");
752
+ }
753
+ ideal irrel=@x(1..n);
754
+ map f=br,irrel;
755
+ poly p=f(g);
756
+ ideal J=f(I),ideal(p*@z-1);
757
+ J=std(J);
758
+ degBound=dB;
759
+ if (J[1]==1)
760
+ {
761
+ setring br;
762
+ return(1);
763
+ }
764
+ else
765
+ {
766
+ setring br;
767
+ return(0);
768
+ }
769
+ }
770
+ example
771
+ { "EXAMPLE:"; echo=2;
772
+ ring R=0,(x,y,z),dp;
773
+ ideal I=x2+y2,z2;
774
+ poly f=x4+y4;
775
+ rad_con(f,I);
776
+ ideal J=x2+y2,z2,x4+y4;
777
+ poly g=z;
778
+ rad_con(g,I);
779
+ }
780
+ ///////////////////////////////////////////////////////////////////////////////
781
+
782
+ proc lcm (def id, list #)
783
+ "USAGE: lcm(p[,q]); p int/intvec q a list of integers or
784
+ p poly/ideal q a list of polynomials
785
+ RETURN: the least common multiple of p and q:
786
+ @* - of type int if p is an int/intvec
787
+ @* - of type poly if p is a poly/ideal
788
+ EXAMPLE: example lcm; shows an example
789
+ "
790
+ {
791
+ int k,j;
792
+ //------------------------------ integer case --------------------------------
793
+ if( typeof(id) == "int" or typeof(id) == "intvec" )
794
+ {
795
+ intvec i = id;
796
+ if (size(#)!=0)
797
+ {
798
+ for (j = 1; j<=size(#); j++)
799
+ {
800
+ if (typeof(#[j]) !="int" and typeof(#[j]) !="intvec")
801
+ { ERROR("// ** list element must be an integer");}
802
+ else
803
+ { i = i,#[j]; }
804
+ }
805
+ }
806
+ int p,q;
807
+ if( i == 0 )
808
+ {
809
+ return(0);
810
+ }
811
+ for(j=1;j<=size(i);j++)
812
+ {
813
+ if( i[j] != 0 )
814
+ {
815
+ p=i[j];
816
+ break;
817
+ }
818
+ }
819
+ for (k=j+1;k<=size(i);k++)
820
+ {
821
+ if( i[k] !=0)
822
+ {
823
+ q=gcd(p,i[k]);
824
+ p=p div q;
825
+ p=p*i[k];
826
+ }
827
+ }
828
+ if(p <0 )
829
+ {return(-p);}
830
+ return(p);
831
+ }
832
+
833
+ //----------------------------- polynomial case ------------------------------
834
+ if( typeof(id) == "poly" or typeof(id) == "ideal" )
835
+ {
836
+ ideal i = id;
837
+ if (size(#)!=0)
838
+ {
839
+ for (j = 1; j<=size(#); j++)
840
+ {
841
+ if (typeof(#[j]) !="poly" and typeof(#[j]) !="ideal"
842
+ and typeof(#[j]) !="int" and typeof(#[j]) !="intvec")
843
+ { ERROR("// ** list element must be a polynomial");}
844
+ else
845
+ { i = i,#[j]; }
846
+ }
847
+ }
848
+ poly p,q;
849
+ i=simplify(i,10);
850
+ if(size(i) == 0)
851
+ {
852
+ return(0);
853
+ }
854
+ for(j=1;j<=size(i);j++)
855
+ {
856
+ if(maxdeg(i[j])!= 0)
857
+ {
858
+ p=i[j];
859
+ break;
860
+ }
861
+ }
862
+ if(p==0)
863
+ {
864
+ return(1);
865
+ }
866
+ for (k=j+1;k<=size(i);k++)
867
+ {
868
+ if(maxdeg(i[k])!=0)
869
+ {
870
+ q=gcd(p,i[k]);
871
+ if(maxdeg(q)==0)
872
+ {
873
+ p=p*i[k];
874
+ }
875
+ else
876
+ {
877
+ p=p/q;
878
+ p=p*i[k];
879
+ }
880
+ }
881
+ }
882
+ return(p);
883
+ }
884
+ }
885
+ example
886
+ { "EXAMPLE:"; echo = 2;
887
+ ring r = 0,(x,y,z),lp;
888
+ poly p = (x+y)*(y+z);
889
+ poly q = (z4+2)*(y+z);
890
+ lcm(p,q);
891
+ ideal i=p,q,y+z;
892
+ lcm(i,p);
893
+ lcm(2,3,6);
894
+ lcm(2..6);
895
+ }
896
+
897
+ ///////////////////////////////////////////////////////////////////////////////
898
+
899
+ proc content(def f)
900
+ "USAGE: content(f); f polynomial/vector
901
+ RETURN: number, the content (greatest common factor of coefficients)
902
+ of the polynomial/vector f
903
+ SEE ALSO: cleardenom
904
+ EXAMPLE: example content; shows an example
905
+ "
906
+ {
907
+ if (f==0) { return(number(1)); }
908
+ return(leadcoef(f)/leadcoef(system("content",f)));
909
+ }
910
+ example
911
+ { "EXAMPLE:"; echo = 2;
912
+ ring r=0,(x,y,z),(c,lp);
913
+ content(3x2+18xy-27xyz);
914
+ vector v=[3x2+18xy-27xyz,15x2+12y4,3];
915
+ content(v);
916
+ }
917
+ ///////////////////////////////////////////////////////////////////////////////
918
+
919
+ ////////////////////////////////////////////////////////////////////////
920
+ // The idea of the procedures mod2id, id2mod and subrInterred is, to
921
+ // perform standard basis computation or interreduction of a submodule
922
+ // of a free module with generators gen(1),...,gen(n) over a ring R
923
+ // in a ring R[t1,...,tn]/<ti*tj> with gen(i) mapped to ti
924
+ ////////////////////////////////////////////////////////////////////////
925
+
926
+ proc mod2id(matrix M,intvec vpos)
927
+ "USAGE: mod2id(M,vpos); M matrix, vpos intvec
928
+ ASSUME: vpos is an integer vector such that gen(i) corresponds
929
+ to var(vpos[i]).
930
+ The basering contains variables var(vpos[i]) which do not occur
931
+ in M.
932
+ RETURN: ideal I in which each gen(i) from the module is replaced by
933
+ var(vpos[i]) and all monomials var(vpos[i])*var(vpos[j]) have
934
+ been added to the generating set of I.
935
+ NOTE: This procedure should be used in the following situation:
936
+ one wants to pass to a ring with new variables, say e(1),..,e(s),
937
+ which correspond to the components gen(1),..,gen(s) of the
938
+ module M such that e(i)*e(j)=0 for all i,j.
939
+ The new ring should already exist and be the current ring
940
+ EXAMPLE: example mod2id; shows an example"
941
+ {
942
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
943
+ //----------------------------------------------------------------------
944
+ // define the ideal generated by the var(vpos[i]) and set up the matrix
945
+ // for the multiplication
946
+ //----------------------------------------------------------------------
947
+ ideal vars=var(vpos[1]);
948
+ for(int i=2;i<=size(vpos);i++)
949
+ {
950
+ vars=vars,var(vpos[i]);
951
+ }
952
+ matrix varm[1][size(vpos)]=vars;
953
+ if (size(vpos) > nrows(M))
954
+ {
955
+ matrix Mt[size(vpos)][ncols(M)];
956
+ Mt[1..nrows(M),1..ncols(M)]=M;
957
+ kill M;
958
+ matrix M=Mt;
959
+ }
960
+ //----------------------------------------------------------------------
961
+ // define the desired ideal
962
+ //----------------------------------------------------------------------
963
+ ideal ret=vars^2,varm*M;
964
+ return(ret);
965
+ }
966
+ example
967
+ { "EXAMPLE:"; echo=2;
968
+ ring r=0,(e(1),e(2),x,y,z),(dp(2),ds(3));
969
+ module mo=x*gen(1)+y*gen(2);
970
+ intvec iv=2,1;
971
+ mod2id(mo,iv);
972
+ }
973
+ ////////////////////////////////////////////////////////////////////////
974
+
975
+ proc id2mod(ideal i,intvec vpos)
976
+ "USAGE: id2mod(I,vpos); I ideal, vpos intvec
977
+ RETURN: module corresponding to the ideal by replacing var(vpos[i]) by
978
+ gen(i) and omitting all generators var(vpos[i])*var(vpos[j])
979
+ NOTE: * This procedure only makes sense if the ideal contains
980
+ all var(vpos[i])*var(vpos[j]) as monomial generators and
981
+ all other generators of I are linear combinations of the
982
+ var(vpos[i]) over the ring in the other variables.
983
+ * This is the inverse procedure to mod2id and should be applied
984
+ only to ideals created by mod2id using the same intvec vpos
985
+ (possibly after a standard basis computation)
986
+ EXAMPLE: example id2mod; shows an example"
987
+ {
988
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
989
+ //---------------------------------------------------------------------
990
+ // Initialization
991
+ //---------------------------------------------------------------------
992
+ int n=size(i);
993
+ int v=size(vpos);
994
+ matrix tempmat;
995
+ matrix mm[v][n];
996
+ //---------------------------------------------------------------------
997
+ // Conversion
998
+ //---------------------------------------------------------------------
999
+ for(int j=1;j<=v;j++)
1000
+ {
1001
+ tempmat=coeffs(i,var(vpos[j]));
1002
+ mm[j,1..n]=tempmat[2,1..n];
1003
+ }
1004
+ for(j=1;j<=v;j++)
1005
+ {
1006
+ mm=subst(mm,var(vpos[j]),0);
1007
+ }
1008
+ module ret=simplify(mm,10);
1009
+ return(ret);
1010
+ }
1011
+ example
1012
+ { "EXAMPLE:"; echo=2;
1013
+ ring r=0,(e(1),e(2),x,y,z),(dp(2),ds(3));
1014
+ ideal i=e(2)^2,e(1)*e(2),e(1)^2,e(1)*y+e(2)*x;
1015
+ intvec iv=2,1;
1016
+ id2mod(i,iv);
1017
+ }
1018
+ ///////////////////////////////////////////////////////////////////////
1019
+
1020
+ proc subrInterred(ideal mon, ideal sm, intvec iv)
1021
+ "USAGE: subrInterred(mon,sm,iv);
1022
+ sm: ideal in a ring r with n + s variables,
1023
+ e.g. x_1,..,x_n and t_1,..,t_s
1024
+ mon: ideal with monomial generators (not divisible by
1025
+ any of the t_i) such that sm is contained in the module
1026
+ k[t_1,..,t_s]*mon[1]+..+k[t_1,..,t_s]*mon[size(mon)]
1027
+ iv: intvec listing the variables which are supposed to be used
1028
+ as x_i
1029
+ RETURN: list l:
1030
+ l[1]=the monomials from mon in the order used
1031
+ l[2]=their coefficients after interreduction
1032
+ l[3]=l[1]*l[2]
1033
+ PURPOSE: Do interred only w.r.t. a subset of variables.
1034
+ The procedure returns an interreduced system of generators of
1035
+ sm considered as a k[t_1,..,t_s]-submodule of the free module
1036
+ k[t_1,..,t_s]*mon[1]+..+k[t_1,..,t_s]*mon[size(mon)]).
1037
+ EXAMPLE: example subrInterred; shows an example
1038
+ "
1039
+ {
1040
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
1041
+ //-----------------------------------------------------------------------
1042
+ // check that mon is really generated by monomials
1043
+ // and sort its generators with respect to the monomial ordering
1044
+ //-----------------------------------------------------------------------
1045
+ int err;
1046
+ for(int i=1;i<=ncols(mon);i++)
1047
+ {
1048
+ if ( size(mon[i]) > 1 )
1049
+ {
1050
+ err=1;
1051
+ }
1052
+ }
1053
+ if (err==1)
1054
+ {
1055
+ ERROR("mon has to be generated by monomials");
1056
+ }
1057
+ intvec sv=sortvec(mon);
1058
+ ideal mons;
1059
+ for(i=1;i<=size(sv);i++)
1060
+ {
1061
+ mons[i]=mon[sv[i]];
1062
+ }
1063
+ ideal itemp=maxideal(1);
1064
+ for(i=1;i<=size(iv);i++)
1065
+ {
1066
+ itemp=subst(itemp,var(iv[i]),0);
1067
+ }
1068
+ itemp=simplify(itemp,10);
1069
+ def r=basering;
1070
+ //-----------------------------------------------------------------------
1071
+ // express m in terms of the generators of mon and check whether m
1072
+ // can be considered as a submodule of k[t_1,..,t_n]*mon
1073
+ //-----------------------------------------------------------------------
1074
+ module motemp;
1075
+ motemp[ncols(sm)]=0;
1076
+ poly ptemp;
1077
+ int j;
1078
+ for(i=1;i<=ncols(mons);i++)
1079
+ {
1080
+ for(j=1;j<=ncols(sm);j++)
1081
+ {
1082
+ ptemp=sm[j]/mons[i];
1083
+ motemp[j]=motemp[j]+ptemp*gen(i);
1084
+ }
1085
+ }
1086
+ for(i=1;i<=size(iv);i++)
1087
+ {
1088
+ motemp=subst(motemp,var(iv[i]),0);
1089
+ }
1090
+ matrix monmat[1][ncols(mons)]=mons;
1091
+ ideal dummy=monmat*motemp;
1092
+ for(i=1;i<=size(sm);i++)
1093
+ {
1094
+ if(sm[i]-dummy[i]!=0)
1095
+ {
1096
+ ERROR("the second argument is not a submodule of the assumed structure");
1097
+ }
1098
+ }
1099
+ //----------------------------------------------------------------------
1100
+ // do the interreduction and convert back
1101
+ //----------------------------------------------------------------------
1102
+ ring rtemp = create_ring(ring_list(basering)[1], "(" + string(itemp)+ ")", "(C,dp)", "no_minpoly");
1103
+ def motemp=imap(r,motemp);
1104
+ intvec save=option(get);
1105
+ option(redSB);
1106
+ motemp=interred(motemp);
1107
+ option(set,save);
1108
+ setring r;
1109
+ kill motemp;
1110
+ def motemp=imap(rtemp,motemp);
1111
+ //list ret=monmat,motemp,monmat*motemp;
1112
+ module motemp2=motemp;
1113
+ for(i=1;i<=ncols(motemp2);i++)
1114
+ {
1115
+ motemp2[i]=cleardenom(motemp2[i]);
1116
+ }
1117
+ module motemp3=monmat*motemp;
1118
+ for(i=1;i<=ncols(motemp3);i++)
1119
+ {
1120
+ motemp3[i]=cleardenom(motemp3[i]);
1121
+ }
1122
+ list ret=monmat,motemp2,matrix(motemp3);
1123
+ return(ret);
1124
+ }
1125
+ example
1126
+ { "EXAMPLE:"; echo=2;
1127
+ ring r=0,(x,y,z),dp;
1128
+ ideal i=x^2+x*y^2,x*y+x^2*y,z;
1129
+ ideal j=x^2+x*y^2,x*y,z;
1130
+ ideal mon=x^2,z,x*y;
1131
+ intvec iv=1,3;
1132
+ subrInterred(mon,i,iv);
1133
+ subrInterred(mon,j,iv);
1134
+ }
1135
+
1136
+ ///////////////////////////////////////////////////////////////////////////////
1137
+ // moved here from nctools.lib
1138
+ // This procedure calculates the Newton diagram of the polynomial f
1139
+ // The output is a intmat M, each row of M is the exp of a monomial in f
1140
+ ////////////////////////////////////////////////////////////////////////
1141
+ proc newtonDiag(poly f)
1142
+ "USAGE: newtonDiag(f); f a poly
1143
+ RETURN: intmat
1144
+ PURPOSE: compute the Newton diagram of f
1145
+ NOTE: each row is the exponent of a monomial of f
1146
+ EXAMPLE: example newtonDiag; shows examples
1147
+ "{
1148
+ int n = nvars(basering);
1149
+ intvec N=0;
1150
+ if ( f != 0 )
1151
+ {
1152
+ while ( f != 0 )
1153
+ {
1154
+ N = N, leadexp(f);
1155
+ f = f-lead(f);
1156
+ }
1157
+ }
1158
+ else
1159
+ {
1160
+ N=N, leadexp(f);
1161
+ }
1162
+ N = N[2..size(N)]; // Deletes the zero added in the definition of T
1163
+ intmat M=intmat(N,(size(N) div n),n); // Conversion from vector to matrix
1164
+ return (M);
1165
+ }
1166
+ example
1167
+ {
1168
+ "EXAMPLE:";echo=2;
1169
+ ring r = 0,(x,y,z),lp;
1170
+ poly f = x2y+3xz-5y+3;
1171
+ newtonDiag(f);
1172
+ }
1173
+
1174
+ ////////////////////////////////////////////////////////////////////////