passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

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

Potentially problematic release.


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

Files changed (491) hide show
  1. PySingular.cpython-314-x86_64-linux-gnu.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +491 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +6 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-20aec911.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-21acf0c6.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-fcee31da.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-66e12231.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgf2x-a4cdec90.so.3.0.0 +0 -0
  11. passagemath_singular.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
  12. passagemath_singular.libs/libgmp-6e109695.so.10.5.0 +0 -0
  13. passagemath_singular.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  14. passagemath_singular.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  15. passagemath_singular.libs/libntl-e6f0d543.so.44.0.1 +0 -0
  16. passagemath_singular.libs/libomalloc-0-5c9e866e.9.6.so +0 -0
  17. passagemath_singular.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  18. passagemath_singular.libs/libpolys-4-5c0a87e0.4.1.so +0 -0
  19. passagemath_singular.libs/libquadmath-2284e583.so.0.0.0 +0 -0
  20. passagemath_singular.libs/libreadline-ea270e21.so.8.2 +0 -0
  21. passagemath_singular.libs/libsingular_resources-4-a1aafc6d.4.1.so +0 -0
  22. passagemath_singular.libs/libtinfo-ceb117d9.so.6.3 +0 -0
  23. sage/algebras/all__sagemath_singular.py +3 -0
  24. sage/algebras/fusion_rings/all.py +19 -0
  25. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  26. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-x86_64-linux-gnu.so +0 -0
  27. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  28. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  29. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-x86_64-linux-gnu.so +0 -0
  30. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  31. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  32. sage/algebras/fusion_rings/fusion_double.py +899 -0
  33. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  34. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-x86_64-linux-gnu.so +0 -0
  35. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  36. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  37. sage/algebras/fusion_rings/shm_managers.cpython-314-x86_64-linux-gnu.so +0 -0
  38. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  39. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  40. sage/algebras/letterplace/all.py +1 -0
  41. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-x86_64-linux-gnu.so +0 -0
  42. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  43. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  44. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-x86_64-linux-gnu.so +0 -0
  45. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  46. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  47. sage/algebras/letterplace/letterplace_ideal.cpython-314-x86_64-linux-gnu.so +0 -0
  48. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  49. sage/algebras/quatalg/all.py +2 -0
  50. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  51. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-x86_64-linux-gnu.so +0 -0
  52. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  53. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  54. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  55. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  56. sage/all__sagemath_singular.py +11 -0
  57. sage/ext_data/all__sagemath_singular.py +1 -0
  58. sage/ext_data/singular/function_field/core.lib +98 -0
  59. sage/interfaces/all__sagemath_singular.py +1 -0
  60. sage/interfaces/singular.py +2835 -0
  61. sage/libs/all__sagemath_singular.py +1 -0
  62. sage/libs/singular/__init__.py +1 -0
  63. sage/libs/singular/decl.pxd +1168 -0
  64. sage/libs/singular/function.cpython-314-x86_64-linux-gnu.so +0 -0
  65. sage/libs/singular/function.pxd +87 -0
  66. sage/libs/singular/function.pyx +1901 -0
  67. sage/libs/singular/function_factory.py +61 -0
  68. sage/libs/singular/groebner_strategy.cpython-314-x86_64-linux-gnu.so +0 -0
  69. sage/libs/singular/groebner_strategy.pxd +22 -0
  70. sage/libs/singular/groebner_strategy.pyx +582 -0
  71. sage/libs/singular/option.cpython-314-x86_64-linux-gnu.so +0 -0
  72. sage/libs/singular/option.pyx +671 -0
  73. sage/libs/singular/polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
  74. sage/libs/singular/polynomial.pxd +39 -0
  75. sage/libs/singular/polynomial.pyx +661 -0
  76. sage/libs/singular/ring.cpython-314-x86_64-linux-gnu.so +0 -0
  77. sage/libs/singular/ring.pxd +58 -0
  78. sage/libs/singular/ring.pyx +893 -0
  79. sage/libs/singular/singular.cpython-314-x86_64-linux-gnu.so +0 -0
  80. sage/libs/singular/singular.pxd +72 -0
  81. sage/libs/singular/singular.pyx +1944 -0
  82. sage/libs/singular/standard_options.py +145 -0
  83. sage/matrix/all__sagemath_singular.py +1 -0
  84. sage/matrix/matrix_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  85. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  86. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  87. sage/rings/all__sagemath_singular.py +1 -0
  88. sage/rings/function_field/all__sagemath_singular.py +1 -0
  89. sage/rings/function_field/derivations_polymod.py +911 -0
  90. sage/rings/function_field/element_polymod.cpython-314-x86_64-linux-gnu.so +0 -0
  91. sage/rings/function_field/element_polymod.pyx +406 -0
  92. sage/rings/function_field/function_field_polymod.py +2611 -0
  93. sage/rings/function_field/ideal_polymod.py +1775 -0
  94. sage/rings/function_field/order_polymod.py +1475 -0
  95. sage/rings/function_field/place_polymod.py +681 -0
  96. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  97. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-x86_64-linux-gnu.so +0 -0
  98. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  99. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  100. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-x86_64-linux-gnu.so +0 -0
  101. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  102. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  103. sage/rings/polynomial/plural.cpython-314-x86_64-linux-gnu.so +0 -0
  104. sage/rings/polynomial/plural.pxd +48 -0
  105. sage/rings/polynomial/plural.pyx +3171 -0
  106. sage/symbolic/all__sagemath_singular.py +1 -0
  107. sage/symbolic/comparison_impl.pxi +428 -0
  108. sage/symbolic/constants_c_impl.pxi +178 -0
  109. sage/symbolic/expression.cpython-314-x86_64-linux-gnu.so +0 -0
  110. sage/symbolic/expression.pxd +7 -0
  111. sage/symbolic/expression.pyx +14200 -0
  112. sage/symbolic/getitem_impl.pxi +202 -0
  113. sage/symbolic/pynac.pxi +572 -0
  114. sage/symbolic/pynac_constant_impl.pxi +133 -0
  115. sage/symbolic/pynac_function_impl.pxi +206 -0
  116. sage/symbolic/pynac_impl.pxi +2576 -0
  117. sage/symbolic/pynac_wrap.h +124 -0
  118. sage/symbolic/series_impl.pxi +272 -0
  119. sage/symbolic/substitution_map_impl.pxi +94 -0
  120. sage_wheels/bin/ESingular +0 -0
  121. sage_wheels/bin/Singular +0 -0
  122. sage_wheels/bin/TSingular +0 -0
  123. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  124. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  125. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  126. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  127. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  128. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  129. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  130. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  131. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  132. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  133. sage_wheels/lib/singular/MOD/interval.la +41 -0
  134. sage_wheels/lib/singular/MOD/interval.so +0 -0
  135. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  136. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  137. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  138. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  139. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  140. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  146. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  147. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  148. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  149. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  150. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  151. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  152. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  153. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  154. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  155. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  156. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  157. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  158. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  159. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  160. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  161. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  162. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  163. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  164. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  165. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  166. sage_wheels/libexec/singular/MOD/surfex +16 -0
  167. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  168. sage_wheels/share/factory/gftables/10201 +342 -0
  169. sage_wheels/share/factory/gftables/1024 +37 -0
  170. sage_wheels/share/factory/gftables/10609 +356 -0
  171. sage_wheels/share/factory/gftables/11449 +384 -0
  172. sage_wheels/share/factory/gftables/11881 +398 -0
  173. sage_wheels/share/factory/gftables/121 +6 -0
  174. sage_wheels/share/factory/gftables/12167 +408 -0
  175. sage_wheels/share/factory/gftables/125 +7 -0
  176. sage_wheels/share/factory/gftables/12769 +428 -0
  177. sage_wheels/share/factory/gftables/128 +7 -0
  178. sage_wheels/share/factory/gftables/1331 +47 -0
  179. sage_wheels/share/factory/gftables/1369 +48 -0
  180. sage_wheels/share/factory/gftables/14641 +490 -0
  181. sage_wheels/share/factory/gftables/15625 +523 -0
  182. sage_wheels/share/factory/gftables/16 +3 -0
  183. sage_wheels/share/factory/gftables/16129 +540 -0
  184. sage_wheels/share/factory/gftables/16384 +549 -0
  185. sage_wheels/share/factory/gftables/16807 +563 -0
  186. sage_wheels/share/factory/gftables/1681 +58 -0
  187. sage_wheels/share/factory/gftables/169 +8 -0
  188. sage_wheels/share/factory/gftables/17161 +574 -0
  189. sage_wheels/share/factory/gftables/1849 +64 -0
  190. sage_wheels/share/factory/gftables/18769 +628 -0
  191. sage_wheels/share/factory/gftables/19321 +646 -0
  192. sage_wheels/share/factory/gftables/19683 +659 -0
  193. sage_wheels/share/factory/gftables/2048 +71 -0
  194. sage_wheels/share/factory/gftables/2187 +75 -0
  195. sage_wheels/share/factory/gftables/2197 +76 -0
  196. sage_wheels/share/factory/gftables/2209 +76 -0
  197. sage_wheels/share/factory/gftables/22201 +742 -0
  198. sage_wheels/share/factory/gftables/22801 +762 -0
  199. sage_wheels/share/factory/gftables/2401 +82 -0
  200. sage_wheels/share/factory/gftables/243 +11 -0
  201. sage_wheels/share/factory/gftables/24389 +815 -0
  202. sage_wheels/share/factory/gftables/24649 +824 -0
  203. sage_wheels/share/factory/gftables/25 +3 -0
  204. sage_wheels/share/factory/gftables/256 +11 -0
  205. sage_wheels/share/factory/gftables/26569 +888 -0
  206. sage_wheels/share/factory/gftables/27 +3 -0
  207. sage_wheels/share/factory/gftables/27889 +932 -0
  208. sage_wheels/share/factory/gftables/2809 +96 -0
  209. sage_wheels/share/factory/gftables/28561 +954 -0
  210. sage_wheels/share/factory/gftables/289 +12 -0
  211. sage_wheels/share/factory/gftables/29791 +995 -0
  212. sage_wheels/share/factory/gftables/29929 +1000 -0
  213. sage_wheels/share/factory/gftables/3125 +107 -0
  214. sage_wheels/share/factory/gftables/32 +4 -0
  215. sage_wheels/share/factory/gftables/32041 +1070 -0
  216. sage_wheels/share/factory/gftables/32761 +1094 -0
  217. sage_wheels/share/factory/gftables/32768 +1095 -0
  218. sage_wheels/share/factory/gftables/343 +14 -0
  219. sage_wheels/share/factory/gftables/3481 +118 -0
  220. sage_wheels/share/factory/gftables/361 +14 -0
  221. sage_wheels/share/factory/gftables/36481 +1218 -0
  222. sage_wheels/share/factory/gftables/3721 +126 -0
  223. sage_wheels/share/factory/gftables/37249 +1244 -0
  224. sage_wheels/share/factory/gftables/38809 +1296 -0
  225. sage_wheels/share/factory/gftables/39601 +1322 -0
  226. sage_wheels/share/factory/gftables/4 +3 -0
  227. sage_wheels/share/factory/gftables/4096 +139 -0
  228. sage_wheels/share/factory/gftables/44521 +1486 -0
  229. sage_wheels/share/factory/gftables/4489 +152 -0
  230. sage_wheels/share/factory/gftables/49 +4 -0
  231. sage_wheels/share/factory/gftables/4913 +166 -0
  232. sage_wheels/share/factory/gftables/49729 +1660 -0
  233. sage_wheels/share/factory/gftables/5041 +170 -0
  234. sage_wheels/share/factory/gftables/50653 +1691 -0
  235. sage_wheels/share/factory/gftables/512 +20 -0
  236. sage_wheels/share/factory/gftables/51529 +1720 -0
  237. sage_wheels/share/factory/gftables/52441 +1750 -0
  238. sage_wheels/share/factory/gftables/529 +20 -0
  239. sage_wheels/share/factory/gftables/5329 +180 -0
  240. sage_wheels/share/factory/gftables/54289 +1812 -0
  241. sage_wheels/share/factory/gftables/57121 +1906 -0
  242. sage_wheels/share/factory/gftables/58081 +1938 -0
  243. sage_wheels/share/factory/gftables/59049 +1971 -0
  244. sage_wheels/share/factory/gftables/6241 +210 -0
  245. sage_wheels/share/factory/gftables/625 +23 -0
  246. sage_wheels/share/factory/gftables/63001 +2102 -0
  247. sage_wheels/share/factory/gftables/64 +5 -0
  248. sage_wheels/share/factory/gftables/6561 +221 -0
  249. sage_wheels/share/factory/gftables/6859 +231 -0
  250. sage_wheels/share/factory/gftables/6889 +232 -0
  251. sage_wheels/share/factory/gftables/729 +27 -0
  252. sage_wheels/share/factory/gftables/7921 +266 -0
  253. sage_wheels/share/factory/gftables/8 +3 -0
  254. sage_wheels/share/factory/gftables/81 +5 -0
  255. sage_wheels/share/factory/gftables/8192 +276 -0
  256. sage_wheels/share/factory/gftables/841 +30 -0
  257. sage_wheels/share/factory/gftables/9 +3 -0
  258. sage_wheels/share/factory/gftables/9409 +316 -0
  259. sage_wheels/share/factory/gftables/961 +34 -0
  260. sage_wheels/share/info/singular.info +191898 -0
  261. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  262. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  263. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  264. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  265. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  266. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  267. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  268. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  269. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  270. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  271. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  272. sage_wheels/share/singular/LIB/all.lib +136 -0
  273. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  274. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  275. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  276. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  277. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  278. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  279. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  280. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  281. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  282. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  283. sage_wheels/share/singular/LIB/central.lib +2169 -0
  284. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  285. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  286. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  287. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  288. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  289. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  290. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  291. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  292. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  293. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  294. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  295. sage_wheels/share/singular/LIB/control.lib +1636 -0
  296. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  297. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  298. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  299. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  300. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  301. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  302. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  303. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  304. sage_wheels/share/singular/LIB/deform.lib +925 -0
  305. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  306. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  307. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  308. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  309. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  310. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  311. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  312. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  313. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  314. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  315. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  316. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  317. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  318. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  319. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  320. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  321. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  322. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  323. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  324. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  325. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  326. sage_wheels/share/singular/LIB/general.lib +1350 -0
  327. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  328. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  329. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  330. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  331. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  332. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  333. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  334. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  335. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  336. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  337. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  338. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  339. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  340. sage_wheels/share/singular/LIB/help.cnf +57 -0
  341. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  342. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  343. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  344. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  345. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  346. sage_wheels/share/singular/LIB/inout.lib +679 -0
  347. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  348. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  349. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  350. sage_wheels/share/singular/LIB/invar.lib +443 -0
  351. sage_wheels/share/singular/LIB/involut.lib +980 -0
  352. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  353. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  354. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  355. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  356. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  357. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  358. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  359. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  360. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  361. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  362. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  363. sage_wheels/share/singular/LIB/methods.lib +212 -0
  364. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  365. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  366. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  367. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  368. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  369. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  370. sage_wheels/share/singular/LIB/modular.lib +545 -0
  371. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  372. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  373. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  374. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  375. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  376. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  377. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  378. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  379. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  380. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  381. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  382. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  383. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  384. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  385. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  386. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  387. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  388. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  389. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  390. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  391. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  392. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  393. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  394. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  395. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  396. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  397. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  398. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  399. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  400. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  401. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  402. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  403. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  404. sage_wheels/share/singular/LIB/perron.lib +202 -0
  405. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  406. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  407. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  408. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  409. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  410. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  411. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  412. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  413. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  414. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  415. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  416. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  417. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  418. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  419. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  420. sage_wheels/share/singular/LIB/random.lib +455 -0
  421. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  422. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  423. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  424. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  425. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  426. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  427. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  428. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  429. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  430. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  431. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  432. sage_wheels/share/singular/LIB/resources.lib +170 -0
  433. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  434. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  435. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  436. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  437. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  438. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  439. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  440. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  441. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  442. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  443. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  444. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  445. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  446. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  447. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  448. sage_wheels/share/singular/LIB/sets.lib +524 -0
  449. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  450. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  451. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  452. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  453. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  454. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  455. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  456. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  457. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  458. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  459. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  460. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  461. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  462. sage_wheels/share/singular/LIB/surf.lib +506 -0
  463. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  464. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  465. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  466. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  467. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  468. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  469. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  470. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  471. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  472. sage_wheels/share/singular/LIB/template.lib +116 -0
  473. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  474. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  475. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  476. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  477. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  478. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  479. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  480. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  481. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  482. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  483. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  484. sage_wheels/share/singular/emacs/COPYING +44 -0
  485. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  486. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  487. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  488. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  489. sage_wheels/share/singular/emacs/singular.el +4273 -0
  490. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  491. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,615 @@
1
+ # sage_setup: distribution = sagemath-singular
2
+ """
3
+ Dense matrices over multivariate polynomials over fields
4
+
5
+ This implementation inherits from Matrix_generic_dense, i.e. it is not
6
+ optimized for speed only some methods were added.
7
+
8
+ AUTHOR:
9
+
10
+ * Martin Albrecht <malb@informatik.uni-bremen.de>
11
+ """
12
+
13
+ # ****************************************************************************
14
+ # Copyright (C) 2013 Martin Albrecht <malb@informatik.uni-bremen.de>
15
+ #
16
+ # Distributed under the terms of the GNU General Public License (GPL)
17
+ # as published by the Free Software Foundation; either version 2 of
18
+ # the License, or (at your option) any later version.
19
+ # https://www.gnu.org/licenses/
20
+ # ****************************************************************************
21
+ from sage.categories.fields import Fields
22
+ from sage.matrix.matrix_generic_dense cimport Matrix_generic_dense
23
+ from sage.matrix.matrix2 cimport Matrix
24
+
25
+ from sage.rings.polynomial.multi_polynomial_libsingular cimport MPolynomialRing_libsingular
26
+ from sage.rings.polynomial.polynomial_singular_interface import can_convert_to_singular
27
+
28
+ from sage.libs.singular.function import singular_function
29
+
30
+
31
+ cdef class Matrix_mpolynomial_dense(Matrix_generic_dense):
32
+ """
33
+ Dense matrix over a multivariate polynomial ring over a field.
34
+ """
35
+ def echelon_form(self, algorithm='row_reduction', **kwds):
36
+ """
37
+ Return an echelon form of ``self`` using chosen algorithm.
38
+
39
+ By default only a usual row reduction with no divisions or column swaps
40
+ is returned.
41
+
42
+ If Gauss-Bareiss algorithm is chosen, column swaps are recorded and can
43
+ be retrieved via :meth:`swapped_columns`.
44
+
45
+ INPUT:
46
+
47
+ - ``algorithm`` -- string, which algorithm to use (default:
48
+ 'row_reduction'). Valid options are:
49
+
50
+ - ``'row_reduction'`` (default) -- reduce as far as
51
+ possible, only divide by constant entries
52
+
53
+ - ``'frac'`` -- reduced echelon form over fraction field
54
+
55
+ - ``'bareiss'`` -- fraction free Gauss-Bareiss algorithm
56
+ with column swaps
57
+
58
+ OUTPUT:
59
+
60
+ The row echelon form of A depending on the chosen algorithm,
61
+ as an immutable matrix. Note that ``self`` is *not* changed
62
+ by this command. Use ``A.echelonize()`` to change `A` in
63
+ place.
64
+
65
+ EXAMPLES::
66
+
67
+ sage: P.<x,y> = PolynomialRing(GF(127), 2)
68
+ sage: A = matrix(P, 2, 2, [1, x, 1, y])
69
+ sage: A
70
+ [1 x]
71
+ [1 y]
72
+ sage: A.echelon_form()
73
+ [ 1 x]
74
+ [ 0 -x + y]
75
+
76
+
77
+ The reduced row echelon form over the fraction field is as follows::
78
+
79
+ sage: A.echelon_form('frac') # over fraction field
80
+ [1 0]
81
+ [0 1]
82
+
83
+ Alternatively, the Gauss-Bareiss algorithm may be chosen::
84
+
85
+ sage: E = A.echelon_form('bareiss'); E
86
+ [ 1 y]
87
+ [ 0 x - y]
88
+
89
+ After the application of the Gauss-Bareiss algorithm the swapped columns
90
+ may inspected::
91
+
92
+ sage: E.swapped_columns(), E.pivots()
93
+ ((0, 1), (0, 1))
94
+ sage: A.swapped_columns(), A.pivots()
95
+ (None, (0, 1))
96
+
97
+ Another approach is to row reduce as far as possible::
98
+
99
+ sage: A.echelon_form('row_reduction')
100
+ [ 1 x]
101
+ [ 0 -x + y]
102
+ """
103
+ x = self.fetch('echelon_form_'+algorithm)
104
+ if x is not None: return x
105
+
106
+ if algorithm == "frac":
107
+ E = self.matrix_over_field()
108
+ E.echelonize(**kwds)
109
+ else:
110
+ E = self.__copy__()
111
+ E.echelonize(algorithm=algorithm, **kwds)
112
+
113
+ E.set_immutable() # so we can cache the echelon form.
114
+ self.cache('echelon_form_'+algorithm, E)
115
+
116
+ if algorithm == "frac":
117
+ self.cache('pivots', E.pivots())
118
+ elif algorithm == "bareiss":
119
+ l = E.swapped_columns()
120
+ self.cache('pivots', tuple(sorted(l)))
121
+ elif algorithm == "row_reduction":
122
+ pass
123
+
124
+ return E
125
+
126
+ def pivots(self):
127
+ """
128
+ Return the pivot column positions of this matrix as a list of integers.
129
+
130
+ This returns a list, of the position of the first nonzero entry in each
131
+ row of the echelon form.
132
+
133
+ OUTPUT: list of Python ints
134
+
135
+ EXAMPLES::
136
+
137
+ sage: matrix([PolynomialRing(GF(2), 2, 'x').gen()]).pivots()
138
+ (0,)
139
+ sage: K = QQ['x,y']
140
+ sage: x, y = K.gens()
141
+ sage: m = matrix(K, [(-x, 1, y, x - y), (-x*y, y, y^2 - 1, x*y - y^2 + x), (-x*y + x, y - 1, y^2 - y - 2, x*y - y^2 + x + y)])
142
+ sage: m.pivots()
143
+ (0, 2)
144
+ sage: m.rank()
145
+ 2
146
+ """
147
+ x = self.fetch('pivots')
148
+ if x is not None:
149
+ return x
150
+
151
+ self.echelon_form('frac')
152
+ x = self.fetch('pivots')
153
+
154
+ if x is None:
155
+ raise RuntimeError("BUG: matrix pivots should have been set but weren't, matrix parent = '%s'" % self.parent())
156
+ return x
157
+
158
+ def echelonize(self, algorithm='row_reduction', **kwds):
159
+ """
160
+ Transform ``self`` into a matrix in echelon form over the same base ring as
161
+ ``self``.
162
+
163
+ If Gauss-Bareiss algorithm is chosen, column swaps are recorded and can
164
+ be retrieved via :meth:`swapped_columns`.
165
+
166
+ INPUT:
167
+
168
+ - ``algorithm`` -- string, which algorithm to use. Valid options are:
169
+
170
+ - ``'row_reduction'`` -- reduce as far as possible, only
171
+ divide by constant entries
172
+
173
+ - ``'bareiss'`` -- fraction free Gauss-Bareiss algorithm
174
+ with column swaps
175
+
176
+ EXAMPLES::
177
+
178
+ sage: P.<x,y> = PolynomialRing(QQ, 2)
179
+ sage: A = matrix(P, 2, 2, [1/2, x, 1, 3/4*y+1])
180
+ sage: A
181
+ [ 1/2 x]
182
+ [ 1 3/4*y + 1]
183
+
184
+ sage: B = copy(A)
185
+ sage: B.echelonize('bareiss'); B
186
+ [ 1 3/4*y + 1]
187
+ [ 0 x - 3/8*y - 1/2]
188
+
189
+ sage: B = copy(A)
190
+ sage: B.echelonize('row_reduction'); B
191
+ [ 1 2*x]
192
+ [ 0 -2*x + 3/4*y + 1]
193
+
194
+ sage: P.<x,y> = PolynomialRing(QQ, 2)
195
+ sage: A = matrix(P,2,3,[2,x,0,3,y,1]); A
196
+ [2 x 0]
197
+ [3 y 1]
198
+
199
+ sage: E = A.echelon_form('bareiss'); E
200
+ [1 3 y]
201
+ [0 2 x]
202
+ sage: E.swapped_columns()
203
+ (2, 0, 1)
204
+ sage: A.pivots()
205
+ (0, 1, 2)
206
+ """
207
+ self.check_mutability()
208
+
209
+ if self._nrows == 0 or self._ncols == 0:
210
+ self.cache('in_echelon_form_'+algorithm, True)
211
+ self.cache('rank', 0)
212
+ self.cache('pivots', tuple())
213
+ return
214
+
215
+ x = self.fetch('in_echelon_form_'+algorithm)
216
+ if x is not None:
217
+ return # already known to be in echelon form
218
+
219
+ if algorithm == 'bareiss':
220
+ self._echelonize_gauss_bareiss()
221
+ elif algorithm == 'row_reduction':
222
+ self._echelonize_row_reduction()
223
+ else:
224
+ raise ValueError("Unknown algorithm '%s'" % algorithm)
225
+
226
+ def _echelonize_gauss_bareiss(self):
227
+ """
228
+ Transform this matrix into a matrix in upper triangular form over the
229
+ same base ring as ``self`` using the fraction free Gauss-Bareiss
230
+ algorithm with column swaps.
231
+
232
+ The performed column swaps can be accessed via
233
+ :meth:`swapped_columns`.
234
+
235
+ EXAMPLES::
236
+
237
+ sage: R.<x,y> = QQ[]
238
+ sage: C = matrix(R, [[-6/5*x*y - y^2, -6*y^2 - 1/4*y],
239
+ ....: [ -1/3*x*y - 3, x*y - x]])
240
+ sage: E = C.echelon_form('bareiss') # indirect doctest
241
+ sage: E
242
+ [ -1/3*x*y - 3 x*y - x]
243
+ [ 0 6/5*x^2*y^2 + 3*x*y^3 - 6/5*x^2*y - 11/12*x*y^2 + 18*y^2 + 3/4*y]
244
+ sage: E.swapped_columns()
245
+ (0, 1)
246
+
247
+ ALGORITHM:
248
+
249
+ Uses libSINGULAR or SINGULAR
250
+ """
251
+ cdef R = self.base_ring()
252
+
253
+ x = self.fetch('in_echelon_form_bareiss')
254
+ if x is not None:
255
+ return # already known to be in echelon form
256
+
257
+ if isinstance(self.base_ring(), MPolynomialRing_libsingular):
258
+
259
+ self.check_mutability()
260
+ self.clear_cache()
261
+
262
+ singular_bareiss = singular_function("bareiss")
263
+ E, l = singular_bareiss(self.T)
264
+
265
+ m = len(E)
266
+ n = len(E[0])
267
+
268
+ for r in range(m):
269
+ for c in range(n):
270
+ self.set_unsafe(r, c, E[r][c])
271
+ for c in range(n, self.ncols()):
272
+ self.set_unsafe(r, c, R._zero_element)
273
+ for r in range(m, self.nrows()):
274
+ for c in range(self.ncols()):
275
+ self.set_unsafe(r, c, R._zero_element)
276
+
277
+ from sage.rings.integer_ring import ZZ
278
+ l = [ZZ(e-1) for e in l]
279
+
280
+ self.cache('in_echelon_form_bareiss',True)
281
+ self.cache('rank', len(E))
282
+ self.cache('pivots', tuple(range(len(E))))
283
+ self.cache('swapped_columns', tuple(l))
284
+
285
+ elif can_convert_to_singular(self.base_ring()):
286
+
287
+ self.check_mutability()
288
+ self.clear_cache()
289
+
290
+ E,l = self.T._singular_().bareiss()._sage_(self.base_ring())
291
+
292
+ # clear matrix
293
+ for r from 0 <= r < self._nrows:
294
+ for c from 0 <= c < self._ncols:
295
+ self.set_unsafe(r,c,R._zero_element)
296
+
297
+ for r from 0 <= r < E.nrows():
298
+ for c from 0 <= c < E.ncols():
299
+ self.set_unsafe(c,r, E[r,c])
300
+
301
+ self.cache('in_echelon_form_bareiss',True)
302
+ self.cache('rank', E.nrows())
303
+ self.cache('pivots', tuple(range(E.nrows())))
304
+ self.cache('swapped_columns', l)
305
+
306
+ else:
307
+
308
+ raise NotImplementedError("cannot apply Gauss-Bareiss algorithm over this base ring")
309
+
310
+ def _echelonize_row_reduction(self):
311
+ """
312
+ Transform this matrix to a matrix in row reduced form as far as this is
313
+ possible, i.e., only perform division by constant elements.
314
+
315
+ EXAMPLES:
316
+
317
+ If all entries are constant, then this method performs the same
318
+ operations as ``echelon_form('default')`` ::
319
+
320
+ sage: P.<x0,x1,y0,y1> = PolynomialRing(GF(127), 4)
321
+ sage: A = Matrix(P, 4, 4, [-14,0,45,-55,-61,-16,0,0,0,0,25,-62,-22,0,52,0]); A
322
+ [-14 0 45 -55]
323
+ [-61 -16 0 0]
324
+ [ 0 0 25 -62]
325
+ [-22 0 52 0]
326
+ sage: E1 = A.echelon_form()
327
+ sage: E2 = A.echelon_form('row_reduction') # indirect doctest
328
+ sage: E1 == E2
329
+ True
330
+
331
+ If no entries are constant, nothing happens::
332
+
333
+ sage: P.<x0,x1,y0,y1> = PolynomialRing(GF(2), 4)
334
+ sage: A = Matrix(P, 2, 2, [x0, y0, x0, y0]); A
335
+ [x0 y0]
336
+ [x0 y0]
337
+
338
+ sage: B = copy(A)
339
+ sage: A.echelonize('row_reduction') # modifies self
340
+ sage: B == A
341
+ True
342
+
343
+ A more interesting example::
344
+
345
+ sage: P.<x0,x1,y0,y1> = PolynomialRing(GF(2), 4)
346
+ sage: l = [1, 1, 1, 1, 1,
347
+ ....: 0, 1, 0, 1, x0,
348
+ ....: 0, 0, 1, 1, x1,
349
+ ....: 1, 1, 0, 0, y0,
350
+ ....: 0, 1, 0, 1, y1,
351
+ ....: 0, 1, 0, 0, x0*y0,
352
+ ....: 0, 1, 0, 1, x0*y1,
353
+ ....: 0, 0, 0, 0, x1*y0,
354
+ ....: 0, 0, 0, 1, x1*y1]
355
+ sage: A = Matrix(P, 9, 5, l)
356
+ sage: B = A.__copy__()
357
+ sage: B.echelonize('row_reduction'); B
358
+ [ 1 0 0 0 x0*y0 + x1 + 1]
359
+ [ 0 1 0 0 x0*y0]
360
+ [ 0 0 1 0 x0*y0 + x0 + x1]
361
+ [ 0 0 0 1 x0*y0 + x0]
362
+ [ 0 0 0 0 x0 + y1]
363
+ [ 0 0 0 0 x1 + y0 + 1]
364
+ [ 0 0 0 0 x0*y1 + x0]
365
+ [ 0 0 0 0 x1*y0]
366
+ [ 0 0 0 0 x0*y0 + x1*y1 + x0]
367
+
368
+ This is the same result as SINGULAR's ``rowred`` command which
369
+ returns::
370
+
371
+ sage: E = A._singular_().rowred()._sage_(P)
372
+ sage: E == B
373
+ True
374
+
375
+ ALGORITHM:
376
+
377
+ Gaussian elimination with division limited to constant
378
+ entries. Based on SINGULAR's rowred command.
379
+ """
380
+ from sage.matrix.constructor import matrix
381
+
382
+ cdef Py_ssize_t c, r, i, j, rc, start_row, nr, nc
383
+
384
+ x = self.fetch('in_echelon_form_row_reduction')
385
+ if x is not None:
386
+ return # already known to be in echelon form
387
+
388
+ nr,nc = self.nrows(),self.ncols()
389
+ F = self.base_ring().base_ring()
390
+ cdef Matrix d = matrix(F, nr, nc)
391
+ start_row = 0
392
+
393
+ for r from 0 <= r < nr:
394
+ for c from 0 <= c < nc:
395
+ p = self.get_unsafe(r, c)
396
+ if p.is_constant():
397
+ d.set_unsafe(r, c, p.constant_coefficient())
398
+
399
+ for c from 0 <= c < nc:
400
+ r = -1
401
+ for rc from start_row <= rc < nr:
402
+ if d.get_unsafe(rc, c):
403
+ r = rc
404
+ break
405
+ if r!=-1:
406
+ a_inverse = ~self.get_unsafe(r, c)
407
+ self.rescale_row_c(r, a_inverse, c)
408
+ self.swap_rows_c(r, start_row)
409
+
410
+ for i from 0 <= i < nr:
411
+ if i != start_row:
412
+ minus_b = -self.get_unsafe(i, c)
413
+ self.add_multiple_of_row(i, start_row, minus_b, 0)
414
+
415
+ start_row +=1
416
+
417
+ d = d._parent(0)
418
+ for i from start_row <= i < nr:
419
+ for j from c+1 <= j < nc:
420
+ if self.get_unsafe(i, j).is_constant():
421
+ d.set_unsafe(i, j, self.get_unsafe(i, j).constant_coefficient())
422
+
423
+ self.cache('in_echelon_form_row_reduction', True)
424
+
425
+ def swapped_columns(self):
426
+ """
427
+ Return which columns were swapped during the Gauss-Bareiss reduction.
428
+
429
+ OUTPUT:
430
+
431
+ Return a tuple representing the column swaps during the last application
432
+ of the Gauss-Bareiss algorithm (see :meth:`echelon_form` for details).
433
+
434
+ The tuple as length equal to the rank of ``self`` and the value at the
435
+ `i`-th position indicates the source column which was put as the `i`-th
436
+ column.
437
+
438
+ If no Gauss-Bareiss reduction was performed yet, None is
439
+ returned.
440
+
441
+ EXAMPLES::
442
+
443
+ sage: R.<x,y> = QQ[]
444
+ sage: C = random_matrix(R, 2, 2, terms=2)
445
+ sage: while C.rank() != 2:
446
+ ....: C = random_matrix(R, 2, 2, terms=2)
447
+ sage: C.swapped_columns()
448
+ sage: E = C.echelon_form('bareiss')
449
+ sage: sorted(E.swapped_columns())
450
+ [0, 1]
451
+ """
452
+ return self.fetch('swapped_columns')
453
+
454
+ def _fitting_ideal(self, i):
455
+ r"""
456
+ Return the `i`-th Fitting ideal of the matrix. This is the ideal generated
457
+ by the `n - i` minors, where `n` is the number of columns.
458
+
459
+ INPUT:
460
+
461
+ - ``i`` -- integer
462
+
463
+ OUTPUT: an ideal on the base ring
464
+
465
+ EXAMPLES::
466
+
467
+ sage: R.<x,y,z> = QQ[]
468
+ sage: M = matrix(R, [[2*x-z, 0, y-z^2, 0], [0, z - y, z - x, 0],[z - y, x^2 - y, 0, z]])
469
+ sage: M
470
+ [ 2*x - z 0 -z^2 + y 0]
471
+ [ 0 -y + z -x + z 0]
472
+ [ -y + z x^2 - y 0 z]
473
+ sage: M.fitting_ideal(0)
474
+ Ideal (0) of Multivariate Polynomial Ring in x, y, z over Rational Field
475
+ sage: M.fitting_ideal(1)
476
+ Ideal (2*x^4 - 3*x^3*z + x^2*z^2 + y^2*z^2 - 2*y*z^3 + z^4 - 2*x^2*y - y^3 + 3*x*y*z + 2*y^2*z - 2*y*z^2, y*z^3 - z^4 - y^2*z + y*z^2, -2*x*y*z + 2*x*z^2 + y*z^2 - z^3, -2*x^2*z + 3*x*z^2 - z^3) of Multivariate Polynomial Ring in x, y, z over Rational Field
477
+ sage: M.fitting_ideal(2)
478
+ Ideal (-x^3 + x^2*z + x*y - y*z, -y^2 + 2*y*z - z^2, -x^2*z^2 + x^2*y + y*z^2 - y^2, 2*x^3 - x^2*z - 2*x*y + y*z, -x*y + x*z + y*z - z^2, -y*z^2 + z^3 + y^2 - y*z, -2*x*y + 2*x*z + y*z - z^2, y*z^2 - z^3 - y^2 + y*z, 2*x^2 - 3*x*z + z^2, 2*x*z - z^2, -z^3 + y*z, -y*z + z^2, -x*z + z^2) of Multivariate Polynomial Ring in x, y, z over Rational Field
479
+ sage: M.fitting_ideal(3)
480
+ Ideal (2*x - z, -z^2 + y, -y + z, -x + z, -y + z, x^2 - y, z) of Multivariate Polynomial Ring in x, y, z over Rational Field
481
+ sage: M.fitting_ideal(4)
482
+ Ideal (1) of Multivariate Polynomial Ring in x, y, z over Rational Field
483
+ sage: [R.ideal(M.minors(i)) == M._fitting_ideal(4 - i) for i in range(5)]
484
+ [True, True, True, True, True]
485
+ """
486
+ minor = singular_function("minor")
487
+ R = self.base_ring()
488
+ for (nrow, row) in enumerate(self.rows()):
489
+ if not row:
490
+ N = self.delete_rows([nrow])
491
+ return N._fitting_ideal(i)
492
+ for (ncoef, coef) in enumerate(row):
493
+ if all(coef.divides(f) for f in row):
494
+ N = self.__copy__()
495
+ for j in range(self.ncols()):
496
+ if j != ncoef:
497
+ N.add_multiple_of_column(j, ncoef, -R(self[nrow,j] / coef))
498
+ return N.fitting_ideal(i)
499
+ for (ncolumn, column) in enumerate(self.columns()):
500
+ if not column:
501
+ N = self.delete_columns([ncolumn])
502
+ return N._fitting_ideal(i-1)
503
+ for (ncoef, coef) in enumerate(column):
504
+ if all(coef.divides(f) for f in column):
505
+ N = self.__copy__()
506
+ for j in range(self.nrows()):
507
+ if j != ncoef:
508
+ N.add_multiple_of_row(j, ncoef, -R(self[j, ncolumn] / coef))
509
+ return N.fitting_ideal(i)
510
+ rank = self.ncols() - i
511
+ return R.ideal(minor(self, rank))
512
+
513
+ def determinant(self, algorithm=None):
514
+ """
515
+ Return the determinant of this matrix.
516
+
517
+ INPUT:
518
+
519
+ - ``algorithm`` -- ignored
520
+
521
+ EXAMPLES:
522
+
523
+ We compute the determinant of the arbitrary `3x3` matrix::
524
+
525
+ sage: R = PolynomialRing(QQ, 9, 'x')
526
+ sage: A = matrix(R, 3, R.gens())
527
+ sage: A
528
+ [x0 x1 x2]
529
+ [x3 x4 x5]
530
+ [x6 x7 x8]
531
+ sage: A.determinant()
532
+ -x2*x4*x6 + x1*x5*x6 + x2*x3*x7 - x0*x5*x7 - x1*x3*x8 + x0*x4*x8
533
+
534
+ We check if two implementations agree on the result::
535
+
536
+ sage: R.<x,y> = QQ[]
537
+ sage: C = matrix(R, [[-6/5*x*y - y^2, -6*y^2 - 1/4*y],
538
+ ....: [ -1/3*x*y - 3, x*y - x]])
539
+ sage: C.determinant()
540
+ -6/5*x^2*y^2 - 3*x*y^3 + 6/5*x^2*y + 11/12*x*y^2 - 18*y^2 - 3/4*y
541
+
542
+ sage: C.change_ring(R.change_ring(QQbar)).det()
543
+ (-6/5)*x^2*y^2 + (-3)*x*y^3 + 6/5*x^2*y + 11/12*x*y^2 + (-18)*y^2 + (-3/4)*y
544
+
545
+ Finally, we check whether the Singular interface is working::
546
+
547
+ sage: R.<x,y> = RR[]
548
+ sage: C = matrix(R, [[0.368965517352886*y^2 + 0.425700773972636*x, -0.800362171389760*y^2 - 0.807635502485287],
549
+ ....: [0.706173539423122*y^2 - 0.915986060298440, 0.897165181570476*y + 0.107903328188376]])
550
+ sage: C.determinant()
551
+ 0.565194587390682*y^4 + 0.33102301536914...*y^3 + 0.381923912175852*x*y - 0.122977163520282*y^2 + 0.0459345303240150*x - 0.739782862078649
552
+
553
+ ALGORITHM: Calls Singular, libSingular or native implementation.
554
+
555
+ TESTS::
556
+
557
+ sage: R = PolynomialRing(QQ, 9, 'x')
558
+ sage: matrix(R, 0, 0).det()
559
+ 1
560
+
561
+ sage: R.<h,y> = QQ[]
562
+ sage: m = matrix([[y,y,y,y]] * 4) # larger than 3x3
563
+ sage: m.charpoly() # put charpoly in the cache
564
+ x^4 - 4*y*x^3
565
+ sage: m.det()
566
+ 0
567
+
568
+ Check :issue:`23535` is fixed::
569
+
570
+ sage: x = polygen(QQ)
571
+ sage: K.<a,b> = NumberField([x^2 - 2, x^2 - 5])
572
+ sage: R.<s,t> = K[]
573
+ sage: m = matrix(R, 4, [y^i for i in range(4) for y in [a,b,s,t]])
574
+ sage: m.det()
575
+ (a - b)*s^3*t^2 + (-a + b)*s^2*t^3 + 3*s^3*t + (-3)*s*t^3 + (-5*a + 2*b)*s^3 + (2*a - 5*b)*s^2*t +
576
+ (-2*a + 5*b)*s*t^2 + (5*a - 2*b)*t^3 + 3*b*a*s^2 + (-3*b*a)*t^2 + (10*a - 10*b)*s + (-10*a + 10*b)*t
577
+ """
578
+ if self._nrows != self._ncols:
579
+ raise ValueError("self must be a square matrix")
580
+
581
+ d = self.fetch('det')
582
+
583
+ if d is not None:
584
+ return d
585
+
586
+ if self._nrows == 0:
587
+ d = self._coerce_element(1)
588
+ elif self._nrows <= 3:
589
+ from sage.matrix.matrix2 import Matrix
590
+ d = Matrix.determinant(self)
591
+
592
+ elif self.fetch('charpoly') is not None:
593
+ # if charpoly known, then det is easy.
594
+ D = self.fetch('charpoly')
595
+ if D is not None:
596
+ c = D[0]
597
+ if self._nrows % 2:
598
+ c = -c
599
+ d = self._coerce_element(c)
600
+ else:
601
+ R = self._base_ring
602
+
603
+ if isinstance(R, MPolynomialRing_libsingular) and R.base_ring() in Fields():
604
+ singular_det = singular_function("det")
605
+ d = singular_det(self)
606
+
607
+ elif can_convert_to_singular(self.base_ring()):
608
+ d = R(self._singular_().det())
609
+
610
+ else:
611
+ from sage.matrix.matrix2 import Matrix
612
+ d = Matrix.determinant(self)
613
+
614
+ self.cache('det', d)
615
+ return d
@@ -0,0 +1 @@
1
+ # sage_setup: distribution = sagemath-singular
@@ -0,0 +1 @@
1
+ # sage_setup: distribution = sagemath-singular