passagemath-singular 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.whl

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

Potentially problematic release.


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

Files changed (493) hide show
  1. PySingular.cpython-314-x86_64-linux-musl.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +493 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +5 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-67059f19.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-30166d29.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-9d37bcf4.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-fd6f12fc.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgcc_s-0cd532bd.so.1 +0 -0
  11. passagemath_singular.libs/libgf2x-9e30c3e3.so.3.0.0 +0 -0
  12. passagemath_singular.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  13. passagemath_singular.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  14. passagemath_singular.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  15. passagemath_singular.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  16. passagemath_singular.libs/libncursesw-9c9e32c3.so.6.5 +0 -0
  17. passagemath_singular.libs/libntl-26885ca2.so.44.0.1 +0 -0
  18. passagemath_singular.libs/libomalloc-0-e9ff96db.9.6.so +0 -0
  19. passagemath_singular.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  20. passagemath_singular.libs/libpolys-4-8bcf8e7d.4.1.so +0 -0
  21. passagemath_singular.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  22. passagemath_singular.libs/libreadline-06542304.so.8.2 +0 -0
  23. passagemath_singular.libs/libsingular_resources-4-73bf7623.4.1.so +0 -0
  24. passagemath_singular.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
  25. sage/algebras/all__sagemath_singular.py +3 -0
  26. sage/algebras/fusion_rings/all.py +19 -0
  27. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  28. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-x86_64-linux-musl.so +0 -0
  29. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  30. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  31. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-x86_64-linux-musl.so +0 -0
  32. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  33. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  34. sage/algebras/fusion_rings/fusion_double.py +899 -0
  35. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  36. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-x86_64-linux-musl.so +0 -0
  37. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  38. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  39. sage/algebras/fusion_rings/shm_managers.cpython-314-x86_64-linux-musl.so +0 -0
  40. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  41. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  42. sage/algebras/letterplace/all.py +1 -0
  43. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-x86_64-linux-musl.so +0 -0
  44. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  45. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  46. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-x86_64-linux-musl.so +0 -0
  47. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  48. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  49. sage/algebras/letterplace/letterplace_ideal.cpython-314-x86_64-linux-musl.so +0 -0
  50. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  51. sage/algebras/quatalg/all.py +2 -0
  52. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  53. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-x86_64-linux-musl.so +0 -0
  54. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  55. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  56. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  57. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  58. sage/all__sagemath_singular.py +11 -0
  59. sage/ext_data/all__sagemath_singular.py +1 -0
  60. sage/ext_data/singular/function_field/core.lib +98 -0
  61. sage/interfaces/all__sagemath_singular.py +1 -0
  62. sage/interfaces/singular.py +2835 -0
  63. sage/libs/all__sagemath_singular.py +1 -0
  64. sage/libs/singular/__init__.py +1 -0
  65. sage/libs/singular/decl.pxd +1168 -0
  66. sage/libs/singular/function.cpython-314-x86_64-linux-musl.so +0 -0
  67. sage/libs/singular/function.pxd +87 -0
  68. sage/libs/singular/function.pyx +1901 -0
  69. sage/libs/singular/function_factory.py +61 -0
  70. sage/libs/singular/groebner_strategy.cpython-314-x86_64-linux-musl.so +0 -0
  71. sage/libs/singular/groebner_strategy.pxd +22 -0
  72. sage/libs/singular/groebner_strategy.pyx +582 -0
  73. sage/libs/singular/option.cpython-314-x86_64-linux-musl.so +0 -0
  74. sage/libs/singular/option.pyx +671 -0
  75. sage/libs/singular/polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  76. sage/libs/singular/polynomial.pxd +39 -0
  77. sage/libs/singular/polynomial.pyx +661 -0
  78. sage/libs/singular/ring.cpython-314-x86_64-linux-musl.so +0 -0
  79. sage/libs/singular/ring.pxd +58 -0
  80. sage/libs/singular/ring.pyx +893 -0
  81. sage/libs/singular/singular.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/libs/singular/singular.pxd +72 -0
  83. sage/libs/singular/singular.pyx +1944 -0
  84. sage/libs/singular/standard_options.py +145 -0
  85. sage/matrix/all__sagemath_singular.py +1 -0
  86. sage/matrix/matrix_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  87. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  88. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  89. sage/rings/all__sagemath_singular.py +1 -0
  90. sage/rings/function_field/all__sagemath_singular.py +1 -0
  91. sage/rings/function_field/derivations_polymod.py +911 -0
  92. sage/rings/function_field/element_polymod.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/rings/function_field/element_polymod.pyx +406 -0
  94. sage/rings/function_field/function_field_polymod.py +2611 -0
  95. sage/rings/function_field/ideal_polymod.py +1775 -0
  96. sage/rings/function_field/order_polymod.py +1475 -0
  97. sage/rings/function_field/place_polymod.py +681 -0
  98. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  99. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-x86_64-linux-musl.so +0 -0
  100. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  101. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  102. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  104. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  105. sage/rings/polynomial/plural.cpython-314-x86_64-linux-musl.so +0 -0
  106. sage/rings/polynomial/plural.pxd +48 -0
  107. sage/rings/polynomial/plural.pyx +3171 -0
  108. sage/symbolic/all__sagemath_singular.py +1 -0
  109. sage/symbolic/comparison_impl.pxi +428 -0
  110. sage/symbolic/constants_c_impl.pxi +178 -0
  111. sage/symbolic/expression.cpython-314-x86_64-linux-musl.so +0 -0
  112. sage/symbolic/expression.pxd +7 -0
  113. sage/symbolic/expression.pyx +14200 -0
  114. sage/symbolic/getitem_impl.pxi +202 -0
  115. sage/symbolic/pynac.pxi +572 -0
  116. sage/symbolic/pynac_constant_impl.pxi +133 -0
  117. sage/symbolic/pynac_function_impl.pxi +206 -0
  118. sage/symbolic/pynac_impl.pxi +2576 -0
  119. sage/symbolic/pynac_wrap.h +124 -0
  120. sage/symbolic/series_impl.pxi +272 -0
  121. sage/symbolic/substitution_map_impl.pxi +94 -0
  122. sage_wheels/bin/ESingular +0 -0
  123. sage_wheels/bin/Singular +0 -0
  124. sage_wheels/bin/TSingular +0 -0
  125. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  126. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  127. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  128. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  129. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  130. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  131. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  132. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  133. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  134. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  135. sage_wheels/lib/singular/MOD/interval.la +41 -0
  136. sage_wheels/lib/singular/MOD/interval.so +0 -0
  137. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  138. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  139. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  140. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  146. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  147. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  148. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  149. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  150. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  151. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  152. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  153. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  154. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  155. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  156. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  157. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  158. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  159. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  160. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  161. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  162. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  163. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  164. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  165. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  166. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  167. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  168. sage_wheels/libexec/singular/MOD/surfex +16 -0
  169. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  170. sage_wheels/share/factory/gftables/10201 +342 -0
  171. sage_wheels/share/factory/gftables/1024 +37 -0
  172. sage_wheels/share/factory/gftables/10609 +356 -0
  173. sage_wheels/share/factory/gftables/11449 +384 -0
  174. sage_wheels/share/factory/gftables/11881 +398 -0
  175. sage_wheels/share/factory/gftables/121 +6 -0
  176. sage_wheels/share/factory/gftables/12167 +408 -0
  177. sage_wheels/share/factory/gftables/125 +7 -0
  178. sage_wheels/share/factory/gftables/12769 +428 -0
  179. sage_wheels/share/factory/gftables/128 +7 -0
  180. sage_wheels/share/factory/gftables/1331 +47 -0
  181. sage_wheels/share/factory/gftables/1369 +48 -0
  182. sage_wheels/share/factory/gftables/14641 +490 -0
  183. sage_wheels/share/factory/gftables/15625 +523 -0
  184. sage_wheels/share/factory/gftables/16 +3 -0
  185. sage_wheels/share/factory/gftables/16129 +540 -0
  186. sage_wheels/share/factory/gftables/16384 +549 -0
  187. sage_wheels/share/factory/gftables/16807 +563 -0
  188. sage_wheels/share/factory/gftables/1681 +58 -0
  189. sage_wheels/share/factory/gftables/169 +8 -0
  190. sage_wheels/share/factory/gftables/17161 +574 -0
  191. sage_wheels/share/factory/gftables/1849 +64 -0
  192. sage_wheels/share/factory/gftables/18769 +628 -0
  193. sage_wheels/share/factory/gftables/19321 +646 -0
  194. sage_wheels/share/factory/gftables/19683 +659 -0
  195. sage_wheels/share/factory/gftables/2048 +71 -0
  196. sage_wheels/share/factory/gftables/2187 +75 -0
  197. sage_wheels/share/factory/gftables/2197 +76 -0
  198. sage_wheels/share/factory/gftables/2209 +76 -0
  199. sage_wheels/share/factory/gftables/22201 +742 -0
  200. sage_wheels/share/factory/gftables/22801 +762 -0
  201. sage_wheels/share/factory/gftables/2401 +82 -0
  202. sage_wheels/share/factory/gftables/243 +11 -0
  203. sage_wheels/share/factory/gftables/24389 +815 -0
  204. sage_wheels/share/factory/gftables/24649 +824 -0
  205. sage_wheels/share/factory/gftables/25 +3 -0
  206. sage_wheels/share/factory/gftables/256 +11 -0
  207. sage_wheels/share/factory/gftables/26569 +888 -0
  208. sage_wheels/share/factory/gftables/27 +3 -0
  209. sage_wheels/share/factory/gftables/27889 +932 -0
  210. sage_wheels/share/factory/gftables/2809 +96 -0
  211. sage_wheels/share/factory/gftables/28561 +954 -0
  212. sage_wheels/share/factory/gftables/289 +12 -0
  213. sage_wheels/share/factory/gftables/29791 +995 -0
  214. sage_wheels/share/factory/gftables/29929 +1000 -0
  215. sage_wheels/share/factory/gftables/3125 +107 -0
  216. sage_wheels/share/factory/gftables/32 +4 -0
  217. sage_wheels/share/factory/gftables/32041 +1070 -0
  218. sage_wheels/share/factory/gftables/32761 +1094 -0
  219. sage_wheels/share/factory/gftables/32768 +1095 -0
  220. sage_wheels/share/factory/gftables/343 +14 -0
  221. sage_wheels/share/factory/gftables/3481 +118 -0
  222. sage_wheels/share/factory/gftables/361 +14 -0
  223. sage_wheels/share/factory/gftables/36481 +1218 -0
  224. sage_wheels/share/factory/gftables/3721 +126 -0
  225. sage_wheels/share/factory/gftables/37249 +1244 -0
  226. sage_wheels/share/factory/gftables/38809 +1296 -0
  227. sage_wheels/share/factory/gftables/39601 +1322 -0
  228. sage_wheels/share/factory/gftables/4 +3 -0
  229. sage_wheels/share/factory/gftables/4096 +139 -0
  230. sage_wheels/share/factory/gftables/44521 +1486 -0
  231. sage_wheels/share/factory/gftables/4489 +152 -0
  232. sage_wheels/share/factory/gftables/49 +4 -0
  233. sage_wheels/share/factory/gftables/4913 +166 -0
  234. sage_wheels/share/factory/gftables/49729 +1660 -0
  235. sage_wheels/share/factory/gftables/5041 +170 -0
  236. sage_wheels/share/factory/gftables/50653 +1691 -0
  237. sage_wheels/share/factory/gftables/512 +20 -0
  238. sage_wheels/share/factory/gftables/51529 +1720 -0
  239. sage_wheels/share/factory/gftables/52441 +1750 -0
  240. sage_wheels/share/factory/gftables/529 +20 -0
  241. sage_wheels/share/factory/gftables/5329 +180 -0
  242. sage_wheels/share/factory/gftables/54289 +1812 -0
  243. sage_wheels/share/factory/gftables/57121 +1906 -0
  244. sage_wheels/share/factory/gftables/58081 +1938 -0
  245. sage_wheels/share/factory/gftables/59049 +1971 -0
  246. sage_wheels/share/factory/gftables/6241 +210 -0
  247. sage_wheels/share/factory/gftables/625 +23 -0
  248. sage_wheels/share/factory/gftables/63001 +2102 -0
  249. sage_wheels/share/factory/gftables/64 +5 -0
  250. sage_wheels/share/factory/gftables/6561 +221 -0
  251. sage_wheels/share/factory/gftables/6859 +231 -0
  252. sage_wheels/share/factory/gftables/6889 +232 -0
  253. sage_wheels/share/factory/gftables/729 +27 -0
  254. sage_wheels/share/factory/gftables/7921 +266 -0
  255. sage_wheels/share/factory/gftables/8 +3 -0
  256. sage_wheels/share/factory/gftables/81 +5 -0
  257. sage_wheels/share/factory/gftables/8192 +276 -0
  258. sage_wheels/share/factory/gftables/841 +30 -0
  259. sage_wheels/share/factory/gftables/9 +3 -0
  260. sage_wheels/share/factory/gftables/9409 +316 -0
  261. sage_wheels/share/factory/gftables/961 +34 -0
  262. sage_wheels/share/info/singular.info +191898 -0
  263. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  264. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  265. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  266. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  267. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  268. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  269. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  270. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  271. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  272. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  273. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  274. sage_wheels/share/singular/LIB/all.lib +136 -0
  275. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  276. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  277. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  278. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  279. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  280. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  281. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  282. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  283. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  284. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  285. sage_wheels/share/singular/LIB/central.lib +2169 -0
  286. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  287. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  288. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  289. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  290. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  291. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  292. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  293. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  294. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  295. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  296. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  297. sage_wheels/share/singular/LIB/control.lib +1636 -0
  298. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  299. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  300. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  301. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  302. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  303. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  304. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  305. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  306. sage_wheels/share/singular/LIB/deform.lib +925 -0
  307. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  308. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  309. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  310. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  311. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  312. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  313. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  314. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  315. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  316. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  317. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  318. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  319. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  320. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  321. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  322. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  323. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  324. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  325. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  326. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  327. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  328. sage_wheels/share/singular/LIB/general.lib +1350 -0
  329. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  330. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  331. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  332. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  333. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  334. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  335. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  336. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  337. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  338. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  339. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  340. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  341. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  342. sage_wheels/share/singular/LIB/help.cnf +57 -0
  343. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  344. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  345. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  346. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  347. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  348. sage_wheels/share/singular/LIB/inout.lib +679 -0
  349. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  350. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  351. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  352. sage_wheels/share/singular/LIB/invar.lib +443 -0
  353. sage_wheels/share/singular/LIB/involut.lib +980 -0
  354. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  355. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  356. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  357. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  358. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  359. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  360. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  361. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  362. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  363. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  364. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  365. sage_wheels/share/singular/LIB/methods.lib +212 -0
  366. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  367. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  368. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  369. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  370. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  371. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  372. sage_wheels/share/singular/LIB/modular.lib +545 -0
  373. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  374. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  375. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  376. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  377. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  378. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  379. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  380. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  381. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  382. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  383. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  384. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  385. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  386. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  387. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  388. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  389. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  390. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  391. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  392. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  393. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  394. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  395. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  396. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  397. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  398. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  399. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  400. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  401. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  402. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  403. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  404. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  405. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  406. sage_wheels/share/singular/LIB/perron.lib +202 -0
  407. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  408. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  409. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  410. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  411. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  412. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  413. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  414. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  415. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  416. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  417. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  418. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  419. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  420. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  421. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  422. sage_wheels/share/singular/LIB/random.lib +455 -0
  423. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  424. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  425. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  426. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  427. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  428. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  429. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  430. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  431. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  432. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  433. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  434. sage_wheels/share/singular/LIB/resources.lib +170 -0
  435. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  436. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  437. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  438. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  439. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  440. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  441. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  442. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  443. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  444. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  445. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  446. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  447. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  448. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  449. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  450. sage_wheels/share/singular/LIB/sets.lib +524 -0
  451. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  452. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  453. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  454. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  455. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  456. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  457. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  458. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  459. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  460. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  461. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  462. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  463. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  464. sage_wheels/share/singular/LIB/surf.lib +506 -0
  465. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  466. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  467. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  468. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  469. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  470. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  471. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  472. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  473. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  474. sage_wheels/share/singular/LIB/template.lib +116 -0
  475. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  476. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  477. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  478. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  479. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  480. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  481. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  482. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  483. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  484. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  485. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  486. sage_wheels/share/singular/emacs/COPYING +44 -0
  487. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  488. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  489. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  490. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  491. sage_wheels/share/singular/emacs/singular.el +4273 -0
  492. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  493. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,1077 @@
1
+ //////////////////////////////////////////////////////////////////////////
2
+ version="version spcurve.lib 4.3.1.3 Jan_2023 "; // $Id: 0e1ca7c86ed4b5cc9da73dbbc811f1dd98933289 $
3
+ category="Singularities";
4
+ info="
5
+ LIBRARY: spcurve.lib Deformations and Invariants of CM-codim 2 Singularities
6
+ AUTHOR: Anne Fruehbis-Krueger, anne@mathematik.uni-kl.de
7
+
8
+ PROCEDURES:
9
+ isCMcod2(i); presentation matrix of the ideal i, if i is CM
10
+ CMtype(i); Cohen-Macaulay type of the ideal i
11
+ matrixT1(M,n); 1st order deformation T1 in matrix description
12
+ semiCMcod2(M,T1); semiuniversal deformation of maximal minors of M
13
+ discr(sem,n); discriminant of semiuniversal deformation
14
+ qhmatrix(M); weights if M is quasihomogeneous
15
+ relweight(N,W,a); relative matrix weight of N w.r.t. weights (W,a)
16
+ posweight(M,T1,i); deformation of coker(M) of non-negative weight
17
+ KSpencerKernel(M); kernel of the Kodaira-Spencer map
18
+ ";
19
+
20
+ LIB "elim.lib";
21
+ LIB "homolog.lib";
22
+ LIB "inout.lib";
23
+ LIB "polylib.lib";
24
+ /////////////////////////////////////////////////////////////////////////////
25
+
26
+ proc isCMcod2(ideal kurve)
27
+ "USAGE: isCMcod2(i); i an ideal
28
+ RETURN: presentation matrix of i, if i is Cohen-Macaulay of codimension 2 @*
29
+ a zero matrix otherwise
30
+ EXAMPLE: example isCMcod2; shows an example"
31
+ {
32
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
33
+ //---------------------------------------------------------------------------
34
+ // Compute a minimal free resolution of the ideal and check if the
35
+ // resolution has the expected structure
36
+ //---------------------------------------------------------------------------
37
+ list kurveres=mres(kurve,0);
38
+ matrix M=kurveres[2];
39
+ if ((size(kurveres)>3) &&
40
+ ((size(kurveres[3])>1) ||
41
+ ((size(kurveres[3])<=1) && (kurveres[3][1,1]!=0))))
42
+ {
43
+ dbprint(p,"//not Cohen-Macaulay, codim 2");
44
+ matrix ret=0;
45
+ return(ret);
46
+ }
47
+ return(M);
48
+ }
49
+ example
50
+ { "EXAMPLE:"; echo=2;
51
+ ring r=32003,(x,y,z),ds;
52
+ ideal i=xz,yz,x^3-y^4;
53
+ print(isCMcod2(i));
54
+ }
55
+ /////////////////////////////////////////////////////////////////////////////
56
+
57
+ proc CMtype(ideal kurve)
58
+ "USAGE: CMtype(i); i an ideal, CM of codimension 2
59
+ RETURN: Cohen-Macaulay type of i (integer)
60
+ (-1, if i is not Cohen-Macaulay of codimension 2)
61
+ EXAMPLE: example CMtype; shows an example"
62
+ {
63
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
64
+ int gt = -1;
65
+ //---------------------------------------------------------------------------
66
+ // Compute a minimal free resolution of the ideal and check if the
67
+ // resolution has the expected structure
68
+ //---------------------------------------------------------------------------
69
+ list kurveres;
70
+ kurveres=mres(kurve,0);
71
+ if ((size(kurveres)>3) &&
72
+ ((size(kurveres[3])>1) ||
73
+ ((size(kurveres[3])<=1) && (kurveres[3][1,1]!=0))))
74
+ {
75
+ dbprint(p,"//not Cohen-Macaulay, codim 2");
76
+ return(gt);
77
+ }
78
+ //---------------------------------------------------------------------------
79
+ // Return the Cohen-Macaulay type of i
80
+ //---------------------------------------------------------------------------
81
+ matrix M = matrix(kurveres[2]);
82
+ gt = ncols(M);
83
+ return(gt);
84
+ }
85
+ example
86
+ { "EXAMPLE:"; echo=2;
87
+ ring r=32003,(x,y,z),ds;
88
+ ideal i=xy,xz,yz;
89
+ CMtype(i);
90
+ }
91
+ /////////////////////////////////////////////////////////////////////////////
92
+
93
+ proc matrixT1(matrix M ,int n)
94
+ "USAGE: matrixT1(M,n); M matrix, n integer
95
+ ASSUME: M is a presentation matrix of an ideal i, CM of codimension 2;
96
+ consider i as a family of ideals in a ring in the first n
97
+ variables where the remaining variables are considered as
98
+ parameters
99
+ RETURN: list consisting of the k x (k+1) matrix M and a module K_M such that
100
+ T1=Mat(k,k+1;R)/K_M is the space of first order deformations of i
101
+ EXAMPLE: example matrixT1; shows an example"
102
+ {
103
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
104
+ //--------------------------------------------------------------------------
105
+ // Initialization and sanity checks
106
+ //--------------------------------------------------------------------------
107
+ int nr=nrows(M);
108
+ int nc=ncols(M);
109
+ if ( nr < nc )
110
+ {
111
+ M=transpose(M);
112
+ int temp=nc;
113
+ nc=nr;
114
+ nr=temp;
115
+ int tra=1;
116
+ }
117
+ if ( nr != (nc+1) )
118
+ {
119
+ ERROR("not a k x (k+1) matrix");
120
+ }
121
+ //---------------------------------------------------------------------------
122
+ // Construct the denominator - step by step
123
+ // step 1: initialization
124
+ //---------------------------------------------------------------------------
125
+ int gt=nc;
126
+ int i,j;
127
+ ideal m = M;
128
+ ideal dx;
129
+ ideal rv;
130
+ ideal lv;
131
+ matrix R[gt][gt]=0;
132
+ matrix L[gt+1][gt+1]=0;
133
+ matrix T1[n+gt*gt+(gt+1)*(gt+1)][gt*(gt+1)] = 0;
134
+ //---------------------------------------------------------------------------
135
+ // step 2: the derivatives of the matrix are generators of the denominator
136
+ //---------------------------------------------------------------------------
137
+ for( i=1; i<= n; i++ )
138
+ {
139
+ dx=diff(m,var(i));
140
+ T1[i,1..gt*(gt+1)] = dx;
141
+ }
142
+ //---------------------------------------------------------------------------
143
+ // step 3: M*R is a generator as well
144
+ //---------------------------------------------------------------------------
145
+ for( i=1; i <= gt; i++ )
146
+ {
147
+ for ( j=1 ; j <= gt ; j++ )
148
+ {
149
+ R[i,j]=1;
150
+ rv = M * R;
151
+ T1[n+(i-1)*gt+j,1..gt*(gt+1)] = rv;
152
+ R[i,j]=0;
153
+ }
154
+ }
155
+ //---------------------------------------------------------------------------
156
+ // step 4: so is L*M
157
+ //---------------------------------------------------------------------------
158
+ for( i=1; i <= (gt+1); i++)
159
+ {
160
+ for( j=1 ; j <= (gt+1);j++ )
161
+ {
162
+ L[i,j]=1;
163
+ lv = L * M;
164
+ T1[n+gt*gt+(i-1)*(gt+1)+j,1..gt*(gt+1)] = lv;
165
+ L[i,j]=0;
166
+ }
167
+ }
168
+ //---------------------------------------------------------------------------
169
+ // Compute the vectorspace basis of T1
170
+ //---------------------------------------------------------------------------
171
+ module t1 = module(transpose(T1));
172
+ list result=M,t1;
173
+ return(result);
174
+ }
175
+ example
176
+ { "EXAMPLE:"; echo = 2;
177
+ ring r=32003,(x(1),x(2),x(3)),ds;
178
+ ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
179
+ matrix M=isCMcod2(curve);
180
+ matrixT1(M,3);
181
+ }
182
+ /////////////////////////////////////////////////////////////////////////////
183
+
184
+ proc semiCMcod2(matrix M, module t1,list #)
185
+ "USAGE: semiCMcod2(M,t1[,s]); M matrix, t1 module, s any
186
+ ASSUME: M is a presentation matrix of an ideal i, CM of codimension 2,
187
+ and t1 is a presentation of the space of first order deformations
188
+ of i ((M,t1) as returned by the procedure matrixT1)
189
+ RETURN: new ring in which the ideal semi describing the semiuniversal
190
+ deformation of i;
191
+ if the optional third argument is given, the perturbation matrix
192
+ of the semiuniversal deformation is returned instead of the ideal.
193
+ NOTE: The current basering should not contain any variables named
194
+ A(j) where j is some integer!
195
+ EXAMPLE: example semiCMcod2; shows an example"
196
+ {
197
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
198
+ //---------------------------------------------------------------------------
199
+ // Initialization
200
+ //---------------------------------------------------------------------------
201
+ if(!attrib(t1,"isSB")) { t1=std(t1); }
202
+ module t1erz=kbase(t1);
203
+ int tau=vdim(t1);
204
+ int gt=ncols(M);
205
+ int i;
206
+ def r=basering;
207
+ if(size(M)!=gt*(gt+1))
208
+ {
209
+ gt=gt-1;
210
+ }
211
+ for(i=1; i<=size(t1erz); i++)
212
+ {
213
+ if(rvar(A(i)))
214
+ {
215
+ int jj=-1;
216
+ break;
217
+ }
218
+ }
219
+ if (defined(jj)>1)
220
+ {
221
+ if (jj==-1)
222
+ {
223
+ ERROR("Your ring contains a variable T(i)!");
224
+ }
225
+ }
226
+ //---------------------------------------------------------------------------
227
+ // Definition of the new ring and the image of M and t1 in the new ring
228
+ //---------------------------------------------------------------------------
229
+ ring rtemp=0,(A(1..tau)),dp;
230
+ def rneu=r+rtemp;
231
+ setring rneu;
232
+ matrix M=imap(r,M);
233
+ ideal m=M;
234
+ module t1erz=imap(r,t1erz);
235
+ //---------------------------------------------------------------------------
236
+ // Construction of the presentation matrix of the versal deformation
237
+ //---------------------------------------------------------------------------
238
+ matrix N=matrix(m);
239
+ matrix Mtemp[gt*(gt+1)][1];
240
+ for( i=1; i<=tau; i++)
241
+ {
242
+ Mtemp=t1erz[i];
243
+ N=N+A(i)*transpose(Mtemp);
244
+ }
245
+ ideal n=N;
246
+ matrix O[gt+1][gt]=n;
247
+ //---------------------------------------------------------------------------
248
+ // Construction of the return value
249
+ //---------------------------------------------------------------------------
250
+ if(size(#)>0)
251
+ {
252
+ matrix semi=O;
253
+ }
254
+ else
255
+ {
256
+ ideal semi=minor(O,gt);
257
+ }
258
+ export semi;
259
+ return(rneu);
260
+ }
261
+ example
262
+ { "EXAMPLE:"; echo=2;
263
+ ring r=32003,(x(1),x(2),x(3)),ds;
264
+ ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
265
+ matrix M=isCMcod2(curve);
266
+ list l=matrixT1(M,3);
267
+ def rneu=semiCMcod2(l[1],std(l[2]));
268
+ setring rneu;
269
+ semi;
270
+ }
271
+ /////////////////////////////////////////////////////////////////////////////
272
+
273
+ proc discr(ideal kurve, int n)
274
+ "USAGE: discr(sem,n); sem ideal, n integer
275
+ ASSUME: sem is the versal deformation of an ideal of codimension 2. @*
276
+ The first n variables of the ring are treated as variables
277
+ all the others as parameters.
278
+ RETURN: ideal describing the discriminant
279
+ NOTE: This is not a powerful algorithm!
280
+ EXAMPLE: example discr; shows an example"
281
+ {
282
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
283
+ //---------------------------------------------------------------------------
284
+ // some sanity checks and initialization
285
+ //---------------------------------------------------------------------------
286
+ int i;
287
+ ideal sem=std(kurve);
288
+ ideal semdiff;
289
+ ideal J2;
290
+ int ncol=ncols(matrix(sem));
291
+ matrix Jacob[n][ncol];
292
+ //---------------------------------------------------------------------------
293
+ // compute the Jacobian matrix
294
+ //---------------------------------------------------------------------------
295
+ for (i=1; i<=n; i++)
296
+ {
297
+ semdiff=diff(sem,var(i));
298
+ Jacob[i,1..ncol]=semdiff;
299
+ }
300
+ //---------------------------------------------------------------------------
301
+ // eliminate the first n variables in the ideal generated by
302
+ // the versal deformation and the 2x2 minors of the Jacobian
303
+ //---------------------------------------------------------------------------
304
+ semdiff=minor(Jacob,2);
305
+ J2=sem,semdiff;
306
+ J2=std(J2);
307
+ poly eli=1;
308
+ for(i=1; i<=n; i++)
309
+ {
310
+ eli=eli*var(i);
311
+ }
312
+ ideal dis=eliminate(J2,eli);
313
+ return(dis);
314
+ }
315
+ example
316
+ { "EXAMPLE:"; echo=2;
317
+ ring r=32003,(x(1),x(2),x(3)),ds;
318
+ ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
319
+ matrix M=isCMcod2(curve);
320
+ list l=matrixT1(M,3);
321
+ def rneu=semiCMcod2(l[1],std(l[2]));
322
+ setring rneu;
323
+ discr(semi,3);
324
+ }
325
+ /////////////////////////////////////////////////////////////////////////////
326
+
327
+ proc qhmatrix(matrix M)
328
+ "USAGE: qhmatrix(M); M a k x (k+1) matrix
329
+ RETURN: list, consisting of an integer vector containing the weights of
330
+ the variables of the basering and an integer matrix giving the
331
+ weights of the entries of M, if M is quasihomogeneous;
332
+ zero integer vector and zero integer matrix, if M is not
333
+ quasihomogeneous, i.e. does not allow row and column weights
334
+ EXAMPLE: example qhmatrix; shows an example"
335
+ {
336
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
337
+ //---------------------------------------------------------------------------
338
+ // Initialization and sanity checks
339
+ //---------------------------------------------------------------------------
340
+ def r=basering;
341
+ int i,j,temp;
342
+ int tra=0;
343
+ int nr=nrows(M);
344
+ int nc=ncols(M);
345
+ if ( nr > nc )
346
+ {
347
+ M=transpose(M);
348
+ temp=nc;
349
+ nc=nr;
350
+ nr=temp;
351
+ tra=1;
352
+ }
353
+ if ( nc != (nr+1) )
354
+ {
355
+ ERROR("not a k x (k+1) matrix");
356
+ }
357
+ ideal m=minor(M,nr);
358
+ //---------------------------------------------------------------------------
359
+ // get the weight using the fact that the matrix is quasihomogeneous, if
360
+ // its maximal minors are, and check, whether M is really quasihomogeneous
361
+ //---------------------------------------------------------------------------
362
+ intvec a=weight(m);
363
+ list l1 = ring_list(r)[2];
364
+ ring rneu = create_ring(ring_list(r)[1], l1, "Ws(" + string(a) + ")", "no_minpoly");
365
+ def M=imap(r,M);
366
+ int difset=0;
367
+ list l;
368
+ int dif;
369
+ int donttest=0;
370
+ int comprow=0;
371
+ intmat W[nr][nc];
372
+ //---------------------------------------------------------------------------
373
+ // find a row not containing a 0
374
+ //---------------------------------------------------------------------------
375
+ for(i=1; i<=nr; i++)
376
+ {
377
+ if(comprow==0)
378
+ {
379
+ comprow=i;
380
+ for(j=1; j<=nc; j++)
381
+ {
382
+ if(M[i,j]==0)
383
+ {
384
+ comprow=0;
385
+ break;
386
+ }
387
+ }
388
+ }
389
+ }
390
+ //---------------------------------------------------------------------------
391
+ // get the weights of the comprow'th row or use emergency exit
392
+ //---------------------------------------------------------------------------
393
+ if(comprow==0)
394
+ {
395
+ intvec v=0;
396
+ intmat V=0
397
+ list ret=v,V;
398
+ return(ret);
399
+ }
400
+ else
401
+ {
402
+ for(j=1; j<=nc; j++)
403
+ {
404
+ l[j]=deg(lead(M[comprow,j]));
405
+ }
406
+ }
407
+ //---------------------------------------------------------------------------
408
+ // do the checks
409
+ //---------------------------------------------------------------------------
410
+ for(i=1; i<=nr; i++)
411
+ {
412
+ if ( i==comprow )
413
+ {
414
+ // this row should not be tested against itself
415
+ donttest=1;
416
+ }
417
+ else
418
+ {
419
+ // initialize the difference of the rows, but ignore 0-entries
420
+ if (M[i,1]!=0)
421
+ {
422
+ dif=deg(lead(M[i,1]))-l[1];
423
+ difset=1;
424
+ }
425
+ else
426
+ {
427
+ list memo;
428
+ memo[1]=1;
429
+ }
430
+ }
431
+ // check column by column
432
+ for(j=1; j<=nc; j++)
433
+ {
434
+ if(M[i,j]==0)
435
+ {
436
+ if(defined(memo)!=0)
437
+ {
438
+ memo[size(memo)+1]=j;
439
+ }
440
+ else
441
+ {
442
+ list memo;
443
+ memo[1]=j;
444
+ }
445
+ }
446
+ temp=deg(lead(M[i,j]));
447
+ if((difset!=1) && (donttest!=1) && (M[i,j]!=0))
448
+ {
449
+ // initialize the difference of the rows, if necessary - still ignore 0s
450
+ dif=deg(lead(M[i,j]))-l[j];
451
+ difset=1;
452
+ }
453
+ // is M[i,j] quasihomogeneous - else emergency exit
454
+ if(M[i,j]!=jet(M[i,j],temp,a)-jet(M[i,j],temp-1,a))
455
+ {
456
+ intvec v=0;
457
+ intmat V=0;
458
+ list ret=v,V;
459
+ return(ret);
460
+ }
461
+ if(donttest!=1)
462
+ {
463
+ // check row and column weights - else emergency exit
464
+ if(((temp-l[j])!=dif) && (M[i,j]!=0) && (difset==1))
465
+ {
466
+ intvec v=0;
467
+ intmat V=0;
468
+ list ret=v,V;
469
+ return(ret);
470
+ }
471
+ }
472
+ // set the weight matrix entry
473
+ W[i,j]=temp;
474
+ }
475
+ // clean up the 0's we left out
476
+ if((difset==1) && (defined(memo)!=0))
477
+ {
478
+ for(j=1; j<=size(memo); j++)
479
+ {
480
+ W[i,memo[j]]=dif+l[memo[j]];
481
+ }
482
+ kill memo;
483
+ }
484
+ donttest=0;
485
+ }
486
+ //---------------------------------------------------------------------------
487
+ // transpose, if M was transposed during initialization, and return the list
488
+ //---------------------------------------------------------------------------
489
+ if ( tra==1 )
490
+ {
491
+ W=transpose(W);
492
+ }
493
+ setring r;
494
+ list ret=a,W;
495
+ return(ret);
496
+ }
497
+ example
498
+ { "EXAMPLE:"; echo=2;
499
+ ring r=0,(x,y,z),ds;
500
+ matrix M[3][2]=z,0,y,x,x^3,y;
501
+ qhmatrix(M);
502
+ pmat(M);
503
+ }
504
+ /////////////////////////////////////////////////////////////////////////////
505
+
506
+ proc relweight(matrix N, intmat W, intvec a)
507
+ "USAGE: relweight(N,W,a); N matrix, W intmat, a intvec
508
+ ASSUME: N is a non-zero matrix
509
+ W is an integer matrix of the same size as N
510
+ a is an integer vector giving the weights of the variables
511
+ RETURN: integer, max(a-weighted order(N_ij) - W_ij | all entries ij) @*
512
+ string \"ERROR\" if sizes do not match
513
+ EXAMPLE: example relweight; shows an example
514
+ "
515
+ {
516
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
517
+ //---------------------------------------------------------------------------
518
+ // Initialization and sanity checks
519
+ //---------------------------------------------------------------------------
520
+ if ((size(N)!=size(W)) || (ncols(N)!=ncols(W)))
521
+ {
522
+ ERROR("matrix size does not match");
523
+ }
524
+ if (size(a)!=nvars(basering))
525
+ {
526
+ ERROR("length of weight vector != number of variables");
527
+ }
528
+ int i,j,temp;
529
+ def r=basering;
530
+ //---------------------------------------------------------------------------
531
+ // Comparison entry by entry
532
+ //---------------------------------------------------------------------------
533
+ for(i=1; i<=nrows(N); i++)
534
+ {
535
+ for(j=1; j<=ncols(N); j++)
536
+ {
537
+ if (N[i,j]!=0)
538
+ {
539
+ temp=mindeg1(N[i,j],a)-W[i,j];
540
+ if (defined(ret))
541
+ {
542
+ if(temp > ret)
543
+ {
544
+ ret=temp;
545
+ }
546
+ }
547
+ else
548
+ {
549
+ int ret=temp;
550
+ }
551
+ }
552
+ }
553
+ }
554
+ return(ret);
555
+ }
556
+ example
557
+ { "EXAMPLE:"; echo=2;
558
+ ring r=32003,(x,y,z),ds;
559
+ matrix N[2][3]=z,0,y,x,x^3,y;
560
+ intmat W[2][3]=1,1,1,1,1,1;
561
+ intvec a=1,1,1;
562
+ relweight(N,W,a);
563
+ }
564
+ /////////////////////////////////////////////////////////////////////////////
565
+
566
+ proc posweight(matrix M, module t1, int choose, list #)
567
+ "USAGE: posweight(M,t1,n[,s]); M matrix, t1 module, n int, s string @*
568
+ n=0 : all deformations of non-negative weight @*
569
+ n=1 : only non-constant deformations of non-negative weight @*
570
+ n=2 : all deformations of positive weight @*
571
+ ASSUME: M is a presentation matrix of a Cohen-Macaulay codimension 2
572
+ ideal and t1 is its T1 space in matrix notation
573
+ RETURN: new ring containing a list posw, consisting of a presentation
574
+ matrix describing the deformation given by the generators of T1
575
+ of non-negative/positive weight and the weight vector for the new
576
+ variables
577
+ NOTE: The current basering should not contain any variables named
578
+ T(i) where i is some integer!
579
+ EXAMPLE: example posweight; shows an example"
580
+ {
581
+ //---------------------------------------------------------------------------
582
+ // Initialization and sanity checks
583
+ //---------------------------------------------------------------------------
584
+ if (size(#)>0)
585
+ {
586
+ if (typeof(#[1])=="string")
587
+ {
588
+ string newname=#[1];
589
+ }
590
+ }
591
+ if (attrib(t1,"isSB"))
592
+ {
593
+ module t1erz=kbase(t1);
594
+ int tau=vdim(t1);
595
+ }
596
+ else
597
+ { module t1erz=kbase(std(t1));
598
+ int tau=vdim(std(t1));
599
+ }
600
+ for(int i=1; i<=size(t1erz); i++)
601
+ {
602
+ if(rvar(T(i)))
603
+ {
604
+ int jj=-1;
605
+ break;
606
+ }
607
+ }
608
+ kill i;
609
+ if (defined(jj))
610
+ {
611
+ if (jj==-1)
612
+ {
613
+ ERROR("Your ring contains a variable T(i)!");
614
+ }
615
+ }
616
+ int pw=0;
617
+ int i;
618
+ def r=basering;
619
+ list l=qhmatrix(M);
620
+ int gt=ncols(M);
621
+ if(size(M)!=gt*(gt+1))
622
+ {
623
+ gt=gt-1;
624
+ }
625
+ matrix erzmat[gt+1][gt];
626
+ list erz;
627
+ if ((size(l[1])==1) && (l[1][1]==0) && (size(l[2])==1) && (l[2][1,1]==0))
628
+ {
629
+ ERROR("Internal Error: Problem determining the weights.");
630
+ }
631
+ //---------------------------------------------------------------------------
632
+ // Find the generators of T1 of non-negative weight
633
+ //---------------------------------------------------------------------------
634
+ int relw;
635
+ list rlw;
636
+ for(i=1; i<=tau; i++)
637
+ {
638
+ erzmat=t1erz[i];
639
+ kill relw;
640
+ def relw=relweight(erzmat,l[2],l[1]);
641
+ if(typeof(relw)=="int")
642
+ {
643
+ if (((choose==0) && (relw>=0))
644
+ || ((choose==1) && (relw>=0) && (CMtype(minor(M+erzmat,gt))==gt))
645
+ || ((choose==2) && (relw > 0)))
646
+ {
647
+ pw++;
648
+ rlw[pw]=relw;
649
+ erz[pw]=erzmat;
650
+ }
651
+ }
652
+ else
653
+ {
654
+ ERROR("Internal Error: Problem determining relative weight.");
655
+ }
656
+ }
657
+ //---------------------------------------------------------------------------
658
+ // Definition of the new ring and the image of M and erz in the new ring
659
+ //---------------------------------------------------------------------------
660
+ if(size(rlw)==0)
661
+ {
662
+ ERROR("Internal Error: Problem determining relative weight.");
663
+ }
664
+ intvec iv=rlw[1..size(rlw)];
665
+ ring rtemp=0,(T(1..pw)),dp;
666
+ def rneu=r+rtemp;
667
+ setring rneu;
668
+ matrix M=imap(r,M);
669
+ ideal m=M;
670
+ // we cannot imap erz, if its size=0
671
+ if(pw==0)
672
+ {
673
+ list erz1;
674
+ }
675
+ else
676
+ {
677
+ list erz1=imap(r,erz);
678
+ }
679
+ //---------------------------------------------------------------------------
680
+ // Construction of the presentation matrix of the deformation
681
+ //---------------------------------------------------------------------------
682
+ matrix N=matrix(m);
683
+ ideal mtemp;
684
+ matrix Mtemp[gt*(gt+1)][1];
685
+ for( i=1; i<=pw; i++)
686
+ {
687
+ mtemp=erz1[i];
688
+ Mtemp=mtemp;
689
+ N=N+T(i)*transpose(Mtemp);
690
+ }
691
+ ideal n=N;
692
+ matrix O[gt+1][gt]=n;
693
+ //---------------------------------------------------------------------------
694
+ // Keep the matrix and return the ring in which it lives
695
+ //---------------------------------------------------------------------------
696
+ list posw=O,iv;
697
+ export posw;
698
+ return(rneu);
699
+ }
700
+ example
701
+ { "EXAMPLE:"; echo=2;
702
+ ring r=32003,(x(1),x(2),x(3)),ds;
703
+ ideal curve=(x(3)-x(1)^2)*x(3),(x(3)-x(1)^2)*x(2),x(2)^2-x(1)^7*x(3);
704
+ matrix M=isCMcod2(curve);
705
+ list l=matrixT1(M,3);
706
+ def rneu=posweight(l[1],std(l[2]),0);
707
+ setring rneu;
708
+ pmat(posw[1]);
709
+ posw[2];
710
+ }
711
+ /////////////////////////////////////////////////////////////////////////////
712
+
713
+ proc KSpencerKernel(matrix M,list #)
714
+ "USAGE: KSpencerKernel(M[,s][,v]); M matrix, s string, v intvec @*
715
+ optional parameters (please specify in this order, if both are
716
+ present):
717
+ * s = first of the names of the new rings
718
+ e.g. \"R\" leads to ring names R and R1
719
+ * v of size n(n+1) leads to the following module ordering @*
720
+ gen(v[1]) > gen(v[2]) > ... > gen(v[n(n+1)]) where the matrix
721
+ entry ij corresponds to gen((i-1)*n+j)
722
+ ASSUME: M is a quasihomogeneous n x (n+1) matrix where the n minors define
723
+ an isolated space curve singularity
724
+ RETURN: new ring containing the coefficient matrix KS representing
725
+ the kernel of the Kodaira-Spencer map of the family of
726
+ non-negative deformations having the given singularity as
727
+ special fibre
728
+ NOTE: * the initial basering should not contain variables with name
729
+ e(i) or T(i), since those variable names will internally be
730
+ used by the script
731
+ * setting an intvec with 5 entries and name watchProgress
732
+ shows the progress of the computations: @*
733
+ watchProgress[1]>0 => option(prot) in groebner commands @*
734
+ watchProgress[2]>0 => trace output for highcorner @*
735
+ watchProgress[3]>0 => output of deformed matrix @*
736
+ watchProgress[4]>0 => result of elimination step @*
737
+ watchProgress[4]>1 => trace output of multiplications with xyz
738
+ and subsequent reductions @*
739
+ watchProgress[5]>0 => matrix representing the kernel using print
740
+ EXAMPLE: example KSpencerKernel; shows an example"
741
+ {
742
+ int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
743
+ //---------------------------------------------------------------------------
744
+ // Initialization and sanity checks
745
+ //---------------------------------------------------------------------------
746
+ intvec optvec=option(get);
747
+ if (size(#)>0)
748
+ {
749
+ if (typeof(#[1])=="string")
750
+ {
751
+ string newname=#[1];
752
+ }
753
+ if (typeof(#[1])=="intvec")
754
+ {
755
+ intvec desiredorder=#[1];
756
+ }
757
+ if (size(#)>1)
758
+ {
759
+ if (typeof(#[2])=="intvec")
760
+ {
761
+ intvec desiredorder=#[2];
762
+ }
763
+ }
764
+ }
765
+ if (defined(watchProgress))
766
+ {
767
+ if ((typeof(watchProgress)!="intvec") || (size(watchProgress)<5))
768
+ {
769
+ "watchProgress should be an intvec with at least 5 entries";
770
+ "ignoring watchProgress";
771
+ def kksave=watchProgress;
772
+ kill watchProgress;
773
+ }
774
+ }
775
+ option(redTail);
776
+ if (nvars(basering) != 3 )
777
+ {
778
+ ERROR("It should be a curve in 3 space");
779
+ }
780
+ //---------------------------------------------------------------------------
781
+ // change to a basering with the correct weihted order
782
+ //---------------------------------------------------------------------------
783
+ def rt=basering;
784
+ list wl=qhmatrix(M);
785
+ if ((size(wl)!=2) || ((wl[1]==0) && (wl[2]==0)))
786
+ {
787
+ ERROR("The matrix was not n x (n+1) or not quasihomogenous");
788
+ }
789
+ string orderKSK;
790
+ ring r = create_ring(ring_list(rt)[1], "(x,y,z)", "Ws(" + string(wl[1]) + ")", "no_minpoly");
791
+ matrix M=imap(rt,M);
792
+ int ne=size(M);
793
+ if (defined(desiredorder)>1)
794
+ {
795
+ intvec iv;
796
+ for(int i=1;i<=size(desiredorder);i++)
797
+ {
798
+ iv[desiredorder[i]]=i;
799
+ }
800
+ }
801
+ else
802
+ {
803
+ intvec iv=1..ne;
804
+ }
805
+ list l=matrixT1(M,3);
806
+ if (dim(std(l[2])) != 0)
807
+ {
808
+ ERROR("The matrix does not define an isolated space curve singularity");
809
+ }
810
+ module t1qh=l[2];
811
+ //--------------------------------------------------------------------------
812
+ // Passing to a new ring with extra variables e(i) corresponding to
813
+ // the module generators gen(i) for weighted standard basis computation
814
+ // accepting weights for the gen(i)
815
+ //--------------------------------------------------------------------------
816
+ int jj=0;
817
+ for(int i=1; i<=ne; i++)
818
+ {
819
+ if(rvar(e(i)))
820
+ {
821
+ jj=-1;
822
+ }
823
+ }
824
+ if (jj==-1)
825
+ {
826
+ ERROR("Your ring contains a variable e(i)!");
827
+ }
828
+ if(defined(desiredorder)>1)
829
+ {
830
+ orderKSK ="Ws(";
831
+ intvec tempiv=intvec(wl[2]);
832
+ for(i=1;i<=ne;i++)
833
+ {
834
+ orderKSK = orderKSK + string((-1)*tempiv[desiredorder[i]]) + ",";
835
+ }
836
+ orderKSK = orderKSK + string(wl[1]) + ");";
837
+ list l2;
838
+ for (int zz = 1; zz <= ne; zz++)
839
+ {
840
+ l2[zz] = "e("+string(zz)+")";
841
+ }
842
+ list l3 = ring_list(basering)[2];
843
+ l2 = l2+l3;
844
+ ring re = create_ring(ring_list(r)[1], l2, orderKSK, "no_minpoly");
845
+ }
846
+ else
847
+ {
848
+ list l4;
849
+ for (int zz = 1; zz <= ne; zz++)
850
+ {
851
+ l4[zz] = "e("+string(zz)+")";
852
+ }
853
+ list l5 = ring_list(basering)[2];
854
+ l4 = l4+l5;
855
+ ring re = create_ring(ring_list(r)[1], l4, "Ws(" + string((-1)*intvec(wl[2])) + ","+ string(wl[1]) + ")", "no_minpoly");
856
+ }
857
+ module temp=imap(r,t1qh);
858
+ ideal t1qh=mod2id(temp,iv);
859
+ if (defined(watchProgress))
860
+ {
861
+ if (watchProgress[1]!=0)
862
+ {
863
+ option(prot);
864
+ "Protocol output of the groebner computation (quasihomogenous case)";
865
+ }
866
+ }
867
+ ideal t1qhs=std(t1qh);
868
+ if (defined(watchProgress))
869
+ {
870
+ if (watchProgress[1]!=0)
871
+ {
872
+ "groebner computation finished";
873
+ option(noprot);
874
+ }
875
+ }
876
+ ideal t1qhsl=lead(t1qhs);
877
+ module mo=id2mod(t1qhsl,iv);
878
+ //--------------------------------------------------------------------------
879
+ // Return to the initial ring to compute the kbase and noether there
880
+ // (in the new ring t1qh is of course not of dimension 0 but of dimension 3
881
+ // so we have to go back)
882
+ //--------------------------------------------------------------------------
883
+ setring r;
884
+ module mo=imap(re,mo);
885
+ attrib(mo,"isSB",1); // mo is monomial ==> SB
886
+ attrib(mo,"isHomog",intvec(wl[2])); // highcorner has to respect the weights
887
+ vector noe=highcorner(mo);
888
+ if (defined(watchProgress))
889
+ {
890
+ if (watchProgress[2]!=0)
891
+ {
892
+ "weights corresponding to the entries of the matrix:";
893
+ wl;
894
+ "leading term of the groebner basis (quasihomogeneous case)";
895
+ mo;
896
+ "noether";
897
+ noe;
898
+ }
899
+ }
900
+ //--------------------------------------------------------------------------
901
+ // Define the family of curves with the same quasihomogeneous initial
902
+ // matrix M, compute T1 and pass again to the ring with the variables e(i)
903
+ //--------------------------------------------------------------------------
904
+ def rneu=posweight(M,mo,2);
905
+ setring rneu;
906
+ list li=posw;
907
+ if (size(li)<=1)
908
+ {
909
+ ERROR("Internal Error: Problem determining perturbations of weight > 0.")
910
+ }
911
+ if (defined(watchProgress))
912
+ {
913
+ if(watchProgress[3]!=0)
914
+ {
915
+ "perturbed matrix and weights of the perturbations:";
916
+ li;
917
+ }
918
+ }
919
+ list li2=matrixT1(li[1],3);
920
+ module Mpert=transpose(matrix(ideal(li2[1])));
921
+ module t1pert=li2[2];
922
+ int nv=nvars(rneu)-nvars(r);
923
+ ring rtemp=0,(T(1..nv)),wp(li[2]);
924
+ def reneu=re+rtemp;
925
+ setring reneu;
926
+ module noe=matrix(imap(r,noe));
927
+ ideal noet=mod2id(noe,iv);
928
+ module temp=imap(rneu,t1pert);
929
+ ideal t1pert=mod2id(temp,iv);
930
+ //--------------------------------------------------------------------------
931
+ // Compute the standard basis and select those generators with leading term
932
+ // divisible by some T(i)
933
+ //--------------------------------------------------------------------------
934
+ noether=noet[size(noet)];
935
+ if (defined(watchProgress))
936
+ {
937
+ if (watchProgress[1]!=0)
938
+ {
939
+ "protocol output of the groebner command (perturbed case)";
940
+ option(prot);
941
+ }
942
+ }
943
+ ideal t1perts=std(t1pert);
944
+ noether=noet[size(noet)];
945
+ t1perts=interred(t1perts);
946
+ if (defined(Debug))
947
+ {
948
+ if (watchProgress[1]!=0)
949
+ {
950
+ "groebner computation finished (perturbed case)";
951
+ option(noprot);
952
+ }
953
+ }
954
+ ideal templ=lead(t1perts);
955
+ for(int j=1;j<=nv;j++)
956
+ {
957
+ templ=subst(templ,T(j),0);
958
+ }
959
+ ideal mx;
960
+ ideal mt;
961
+ for(j=1;j<=size(t1perts);j++)
962
+ {
963
+ if(templ[j]!=0)
964
+ {
965
+ mx=mx,t1perts[j];
966
+ }
967
+ else
968
+ {
969
+ mt=mt,t1perts[j];
970
+ }
971
+ }
972
+ //--------------------------------------------------------------------------
973
+ // multiply by the initial ring variables to shift the generators with
974
+ // leading term divisible by some T(i) and reduce afterwards
975
+ //--------------------------------------------------------------------------
976
+ // This is obviously no SB, but we have to reduce by
977
+ attrib(mx,"isSB",1); // it and setting isSB suppresses error messages
978
+ noether=noet[size(noet)];
979
+ ideal ker_gen=reduce(mt,mx);
980
+ ideal ovar=var(ne+1),var(ne+2),var(ne+3);
981
+ j=1;
982
+ noether=noet[size(noet)];
983
+ if (defined(watchProgress))
984
+ {
985
+ if (watchProgress[4]!=0)
986
+ {
987
+ "generators of the kernel as a C[T]{x} module:";
988
+ mt;
989
+ "noether:";
990
+ noether;
991
+ }
992
+ }
993
+ int zeros;
994
+ templ=ker_gen;
995
+ while(zeros==0)
996
+ {
997
+ zeros=1;
998
+ templ=templ*ovar;
999
+ templ=reduce(templ,mx);
1000
+ if(defined(watchProgress))
1001
+ {
1002
+ if(watchProgress[4]>1)
1003
+ {
1004
+ templ;
1005
+ }
1006
+ }
1007
+ if (size(templ)!= 0)
1008
+ {
1009
+ zeros=0;
1010
+ ker_gen=ker_gen,templ;
1011
+ }
1012
+ }
1013
+ //-------------------------------------------------------------------------
1014
+ // kill zero entries, keep only one of identical entries
1015
+ //-------------------------------------------------------------------------
1016
+ ovar=var(1);
1017
+ for(i=2;i<=ne;i++)
1018
+ {
1019
+ ovar=ovar,var(i);
1020
+ }
1021
+ ker_gen=ker_gen,ovar^2;
1022
+ noether=noet[size(noet)];
1023
+ ker_gen=simplify(ker_gen,10);
1024
+ //-------------------------------------------------------------------------
1025
+ // interreduce ker_gen as a k[T]-module
1026
+ //-------------------------------------------------------------------------
1027
+ intvec mgen=1..(ne+3);
1028
+ ideal Mpert=mod2id(imap(rneu,Mpert),iv);
1029
+ templ=0;
1030
+ for(i=1;i<=nv;i++)
1031
+ {
1032
+ templ[i]=diff(Mpert[size(Mpert)],T(i));
1033
+ }
1034
+ templ=templ,ovar^2;
1035
+ list retl=subrInterred(templ,ker_gen,mgen);
1036
+ // Build up the matrix representing L
1037
+ module retlm=transpose(retl[2]);
1038
+ for(i=1;i<=size(retl[1]);i++)
1039
+ {
1040
+ if(reduce(retl[1][1,i],std(ovar^2))==0)
1041
+ {
1042
+ retlm[i]=0;
1043
+ }
1044
+ }
1045
+ retlm=simplify(transpose(simplify(transpose(retlm),10)),10);
1046
+ if(defined(watchProgress))
1047
+ {
1048
+ if(watchProgress[5]>0)
1049
+ {
1050
+ print(retlm);
1051
+ }
1052
+ }
1053
+ ker_gen=retl[3];
1054
+ // we define ret=i(L),(delta_j(t_k))_jk
1055
+ list ret=id2mod(ker_gen,iv),matrix(retlm);
1056
+ // cleanups - define what we previously killed
1057
+ if(defined(kksave)>1)
1058
+ {
1059
+ def watchProgress=kksave;
1060
+ export watch Progress;
1061
+ }
1062
+ option(set,optvec);
1063
+ def KS=ret[2];
1064
+ export KS;
1065
+ return(reneu);
1066
+ }
1067
+ example
1068
+ { "EXAMPLE:"; echo=2;
1069
+ ring r=0,(x,y,z),ds;
1070
+ matrix M[3][2]=z-x^7,0,y^2,z,x^9,y;
1071
+ def rneu=KSpencerKernel(M,"ar");
1072
+ setring rneu;
1073
+ basering;
1074
+ print(KS);
1075
+ }
1076
+ ///////////////////////////////////////////////////////////////////////////
1077
+