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

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

Potentially problematic release.


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

Files changed (490) hide show
  1. PySingular.cpython-314-aarch64-linux-gnu.so +0 -0
  2. passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
  3. passagemath_singular-10.6.31rc3.dist-info/RECORD +490 -0
  4. passagemath_singular-10.6.31rc3.dist-info/WHEEL +6 -0
  5. passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
  6. passagemath_singular.libs/libSingular-4-6a2a8666.4.1.so +0 -0
  7. passagemath_singular.libs/libcddgmp-ac579979.so.0.1.3 +0 -0
  8. passagemath_singular.libs/libfactory-4-66e33516.4.1.so +0 -0
  9. passagemath_singular.libs/libflint-81de1160.so.21.0.0 +0 -0
  10. passagemath_singular.libs/libgf2x-fbd36f80.so.3.0.0 +0 -0
  11. passagemath_singular.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  12. passagemath_singular.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  13. passagemath_singular.libs/libgsl-e3525837.so.28.0.0 +0 -0
  14. passagemath_singular.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  15. passagemath_singular.libs/libntl-0043a3a2.so.44.0.1 +0 -0
  16. passagemath_singular.libs/libomalloc-0-06512335.9.6.so +0 -0
  17. passagemath_singular.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  18. passagemath_singular.libs/libpolys-4-cb7246b5.4.1.so +0 -0
  19. passagemath_singular.libs/libreadline-28330744.so.8.2 +0 -0
  20. passagemath_singular.libs/libsingular_resources-4-8c425241.4.1.so +0 -0
  21. passagemath_singular.libs/libtinfo-f81c2d16.so.6.3 +0 -0
  22. sage/algebras/all__sagemath_singular.py +3 -0
  23. sage/algebras/fusion_rings/all.py +19 -0
  24. sage/algebras/fusion_rings/f_matrix.py +2448 -0
  25. sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-aarch64-linux-gnu.so +0 -0
  26. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
  27. sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
  28. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-aarch64-linux-gnu.so +0 -0
  29. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
  30. sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
  31. sage/algebras/fusion_rings/fusion_double.py +899 -0
  32. sage/algebras/fusion_rings/fusion_ring.py +1580 -0
  33. sage/algebras/fusion_rings/poly_tup_engine.cpython-314-aarch64-linux-gnu.so +0 -0
  34. sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
  35. sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
  36. sage/algebras/fusion_rings/shm_managers.cpython-314-aarch64-linux-gnu.so +0 -0
  37. sage/algebras/fusion_rings/shm_managers.pxd +24 -0
  38. sage/algebras/fusion_rings/shm_managers.pyx +780 -0
  39. sage/algebras/letterplace/all.py +1 -0
  40. sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-aarch64-linux-gnu.so +0 -0
  41. sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
  42. sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
  43. sage/algebras/letterplace/free_algebra_letterplace.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
  45. sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
  46. sage/algebras/letterplace/letterplace_ideal.cpython-314-aarch64-linux-gnu.so +0 -0
  47. sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
  48. sage/algebras/quatalg/all.py +2 -0
  49. sage/algebras/quatalg/quaternion_algebra.py +4778 -0
  50. sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-aarch64-linux-gnu.so +0 -0
  51. sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
  52. sage/algebras/quatalg/quaternion_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  53. sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
  54. sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
  55. sage/all__sagemath_singular.py +11 -0
  56. sage/ext_data/all__sagemath_singular.py +1 -0
  57. sage/ext_data/singular/function_field/core.lib +98 -0
  58. sage/interfaces/all__sagemath_singular.py +1 -0
  59. sage/interfaces/singular.py +2835 -0
  60. sage/libs/all__sagemath_singular.py +1 -0
  61. sage/libs/singular/__init__.py +1 -0
  62. sage/libs/singular/decl.pxd +1168 -0
  63. sage/libs/singular/function.cpython-314-aarch64-linux-gnu.so +0 -0
  64. sage/libs/singular/function.pxd +87 -0
  65. sage/libs/singular/function.pyx +1901 -0
  66. sage/libs/singular/function_factory.py +61 -0
  67. sage/libs/singular/groebner_strategy.cpython-314-aarch64-linux-gnu.so +0 -0
  68. sage/libs/singular/groebner_strategy.pxd +22 -0
  69. sage/libs/singular/groebner_strategy.pyx +582 -0
  70. sage/libs/singular/option.cpython-314-aarch64-linux-gnu.so +0 -0
  71. sage/libs/singular/option.pyx +671 -0
  72. sage/libs/singular/polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/libs/singular/polynomial.pxd +39 -0
  74. sage/libs/singular/polynomial.pyx +661 -0
  75. sage/libs/singular/ring.cpython-314-aarch64-linux-gnu.so +0 -0
  76. sage/libs/singular/ring.pxd +58 -0
  77. sage/libs/singular/ring.pyx +893 -0
  78. sage/libs/singular/singular.cpython-314-aarch64-linux-gnu.so +0 -0
  79. sage/libs/singular/singular.pxd +72 -0
  80. sage/libs/singular/singular.pyx +1944 -0
  81. sage/libs/singular/standard_options.py +145 -0
  82. sage/matrix/all__sagemath_singular.py +1 -0
  83. sage/matrix/matrix_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  84. sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
  85. sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
  86. sage/rings/all__sagemath_singular.py +1 -0
  87. sage/rings/function_field/all__sagemath_singular.py +1 -0
  88. sage/rings/function_field/derivations_polymod.py +911 -0
  89. sage/rings/function_field/element_polymod.cpython-314-aarch64-linux-gnu.so +0 -0
  90. sage/rings/function_field/element_polymod.pyx +406 -0
  91. sage/rings/function_field/function_field_polymod.py +2611 -0
  92. sage/rings/function_field/ideal_polymod.py +1775 -0
  93. sage/rings/function_field/order_polymod.py +1475 -0
  94. sage/rings/function_field/place_polymod.py +681 -0
  95. sage/rings/polynomial/all__sagemath_singular.py +1 -0
  96. sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
  98. sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
  99. sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-aarch64-linux-gnu.so +0 -0
  100. sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
  101. sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
  102. sage/rings/polynomial/plural.cpython-314-aarch64-linux-gnu.so +0 -0
  103. sage/rings/polynomial/plural.pxd +48 -0
  104. sage/rings/polynomial/plural.pyx +3171 -0
  105. sage/symbolic/all__sagemath_singular.py +1 -0
  106. sage/symbolic/comparison_impl.pxi +428 -0
  107. sage/symbolic/constants_c_impl.pxi +178 -0
  108. sage/symbolic/expression.cpython-314-aarch64-linux-gnu.so +0 -0
  109. sage/symbolic/expression.pxd +7 -0
  110. sage/symbolic/expression.pyx +14200 -0
  111. sage/symbolic/getitem_impl.pxi +202 -0
  112. sage/symbolic/pynac.pxi +572 -0
  113. sage/symbolic/pynac_constant_impl.pxi +133 -0
  114. sage/symbolic/pynac_function_impl.pxi +206 -0
  115. sage/symbolic/pynac_impl.pxi +2576 -0
  116. sage/symbolic/pynac_wrap.h +124 -0
  117. sage/symbolic/series_impl.pxi +272 -0
  118. sage/symbolic/substitution_map_impl.pxi +94 -0
  119. sage_wheels/bin/ESingular +0 -0
  120. sage_wheels/bin/Singular +0 -0
  121. sage_wheels/bin/TSingular +0 -0
  122. sage_wheels/lib/singular/MOD/cohomo.la +41 -0
  123. sage_wheels/lib/singular/MOD/cohomo.so +0 -0
  124. sage_wheels/lib/singular/MOD/customstd.la +41 -0
  125. sage_wheels/lib/singular/MOD/customstd.so +0 -0
  126. sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
  127. sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
  128. sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
  129. sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
  130. sage_wheels/lib/singular/MOD/gitfan.la +41 -0
  131. sage_wheels/lib/singular/MOD/gitfan.so +0 -0
  132. sage_wheels/lib/singular/MOD/interval.la +41 -0
  133. sage_wheels/lib/singular/MOD/interval.so +0 -0
  134. sage_wheels/lib/singular/MOD/loctriv.la +41 -0
  135. sage_wheels/lib/singular/MOD/loctriv.so +0 -0
  136. sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
  137. sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
  138. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
  139. sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
  140. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
  141. sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
  142. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
  143. sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
  144. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
  145. sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
  146. sage_wheels/lib/singular/MOD/partialgb.la +41 -0
  147. sage_wheels/lib/singular/MOD/partialgb.so +0 -0
  148. sage_wheels/lib/singular/MOD/pyobject.la +41 -0
  149. sage_wheels/lib/singular/MOD/pyobject.so +0 -0
  150. sage_wheels/lib/singular/MOD/singmathic.la +41 -0
  151. sage_wheels/lib/singular/MOD/singmathic.so +0 -0
  152. sage_wheels/lib/singular/MOD/sispasm.la +41 -0
  153. sage_wheels/lib/singular/MOD/sispasm.so +0 -0
  154. sage_wheels/lib/singular/MOD/subsets.la +41 -0
  155. sage_wheels/lib/singular/MOD/subsets.so +0 -0
  156. sage_wheels/lib/singular/MOD/systhreads.la +41 -0
  157. sage_wheels/lib/singular/MOD/systhreads.so +0 -0
  158. sage_wheels/lib/singular/MOD/syzextra.la +41 -0
  159. sage_wheels/lib/singular/MOD/syzextra.so +0 -0
  160. sage_wheels/libexec/singular/MOD/change_cost +0 -0
  161. sage_wheels/libexec/singular/MOD/singularsurf +11 -0
  162. sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
  163. sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
  164. sage_wheels/libexec/singular/MOD/solve_IP +0 -0
  165. sage_wheels/libexec/singular/MOD/surfex +16 -0
  166. sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
  167. sage_wheels/share/factory/gftables/10201 +342 -0
  168. sage_wheels/share/factory/gftables/1024 +37 -0
  169. sage_wheels/share/factory/gftables/10609 +356 -0
  170. sage_wheels/share/factory/gftables/11449 +384 -0
  171. sage_wheels/share/factory/gftables/11881 +398 -0
  172. sage_wheels/share/factory/gftables/121 +6 -0
  173. sage_wheels/share/factory/gftables/12167 +408 -0
  174. sage_wheels/share/factory/gftables/125 +7 -0
  175. sage_wheels/share/factory/gftables/12769 +428 -0
  176. sage_wheels/share/factory/gftables/128 +7 -0
  177. sage_wheels/share/factory/gftables/1331 +47 -0
  178. sage_wheels/share/factory/gftables/1369 +48 -0
  179. sage_wheels/share/factory/gftables/14641 +490 -0
  180. sage_wheels/share/factory/gftables/15625 +523 -0
  181. sage_wheels/share/factory/gftables/16 +3 -0
  182. sage_wheels/share/factory/gftables/16129 +540 -0
  183. sage_wheels/share/factory/gftables/16384 +549 -0
  184. sage_wheels/share/factory/gftables/16807 +563 -0
  185. sage_wheels/share/factory/gftables/1681 +58 -0
  186. sage_wheels/share/factory/gftables/169 +8 -0
  187. sage_wheels/share/factory/gftables/17161 +574 -0
  188. sage_wheels/share/factory/gftables/1849 +64 -0
  189. sage_wheels/share/factory/gftables/18769 +628 -0
  190. sage_wheels/share/factory/gftables/19321 +646 -0
  191. sage_wheels/share/factory/gftables/19683 +659 -0
  192. sage_wheels/share/factory/gftables/2048 +71 -0
  193. sage_wheels/share/factory/gftables/2187 +75 -0
  194. sage_wheels/share/factory/gftables/2197 +76 -0
  195. sage_wheels/share/factory/gftables/2209 +76 -0
  196. sage_wheels/share/factory/gftables/22201 +742 -0
  197. sage_wheels/share/factory/gftables/22801 +762 -0
  198. sage_wheels/share/factory/gftables/2401 +82 -0
  199. sage_wheels/share/factory/gftables/243 +11 -0
  200. sage_wheels/share/factory/gftables/24389 +815 -0
  201. sage_wheels/share/factory/gftables/24649 +824 -0
  202. sage_wheels/share/factory/gftables/25 +3 -0
  203. sage_wheels/share/factory/gftables/256 +11 -0
  204. sage_wheels/share/factory/gftables/26569 +888 -0
  205. sage_wheels/share/factory/gftables/27 +3 -0
  206. sage_wheels/share/factory/gftables/27889 +932 -0
  207. sage_wheels/share/factory/gftables/2809 +96 -0
  208. sage_wheels/share/factory/gftables/28561 +954 -0
  209. sage_wheels/share/factory/gftables/289 +12 -0
  210. sage_wheels/share/factory/gftables/29791 +995 -0
  211. sage_wheels/share/factory/gftables/29929 +1000 -0
  212. sage_wheels/share/factory/gftables/3125 +107 -0
  213. sage_wheels/share/factory/gftables/32 +4 -0
  214. sage_wheels/share/factory/gftables/32041 +1070 -0
  215. sage_wheels/share/factory/gftables/32761 +1094 -0
  216. sage_wheels/share/factory/gftables/32768 +1095 -0
  217. sage_wheels/share/factory/gftables/343 +14 -0
  218. sage_wheels/share/factory/gftables/3481 +118 -0
  219. sage_wheels/share/factory/gftables/361 +14 -0
  220. sage_wheels/share/factory/gftables/36481 +1218 -0
  221. sage_wheels/share/factory/gftables/3721 +126 -0
  222. sage_wheels/share/factory/gftables/37249 +1244 -0
  223. sage_wheels/share/factory/gftables/38809 +1296 -0
  224. sage_wheels/share/factory/gftables/39601 +1322 -0
  225. sage_wheels/share/factory/gftables/4 +3 -0
  226. sage_wheels/share/factory/gftables/4096 +139 -0
  227. sage_wheels/share/factory/gftables/44521 +1486 -0
  228. sage_wheels/share/factory/gftables/4489 +152 -0
  229. sage_wheels/share/factory/gftables/49 +4 -0
  230. sage_wheels/share/factory/gftables/4913 +166 -0
  231. sage_wheels/share/factory/gftables/49729 +1660 -0
  232. sage_wheels/share/factory/gftables/5041 +170 -0
  233. sage_wheels/share/factory/gftables/50653 +1691 -0
  234. sage_wheels/share/factory/gftables/512 +20 -0
  235. sage_wheels/share/factory/gftables/51529 +1720 -0
  236. sage_wheels/share/factory/gftables/52441 +1750 -0
  237. sage_wheels/share/factory/gftables/529 +20 -0
  238. sage_wheels/share/factory/gftables/5329 +180 -0
  239. sage_wheels/share/factory/gftables/54289 +1812 -0
  240. sage_wheels/share/factory/gftables/57121 +1906 -0
  241. sage_wheels/share/factory/gftables/58081 +1938 -0
  242. sage_wheels/share/factory/gftables/59049 +1971 -0
  243. sage_wheels/share/factory/gftables/6241 +210 -0
  244. sage_wheels/share/factory/gftables/625 +23 -0
  245. sage_wheels/share/factory/gftables/63001 +2102 -0
  246. sage_wheels/share/factory/gftables/64 +5 -0
  247. sage_wheels/share/factory/gftables/6561 +221 -0
  248. sage_wheels/share/factory/gftables/6859 +231 -0
  249. sage_wheels/share/factory/gftables/6889 +232 -0
  250. sage_wheels/share/factory/gftables/729 +27 -0
  251. sage_wheels/share/factory/gftables/7921 +266 -0
  252. sage_wheels/share/factory/gftables/8 +3 -0
  253. sage_wheels/share/factory/gftables/81 +5 -0
  254. sage_wheels/share/factory/gftables/8192 +276 -0
  255. sage_wheels/share/factory/gftables/841 +30 -0
  256. sage_wheels/share/factory/gftables/9 +3 -0
  257. sage_wheels/share/factory/gftables/9409 +316 -0
  258. sage_wheels/share/factory/gftables/961 +34 -0
  259. sage_wheels/share/info/singular.info +191898 -0
  260. sage_wheels/share/singular/LIB/GND.lib +1359 -0
  261. sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
  262. sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
  263. sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
  264. sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
  265. sage_wheels/share/singular/LIB/VecField.lib +1542 -0
  266. sage_wheels/share/singular/LIB/absfact.lib +959 -0
  267. sage_wheels/share/singular/LIB/ainvar.lib +730 -0
  268. sage_wheels/share/singular/LIB/aksaka.lib +419 -0
  269. sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
  270. sage_wheels/share/singular/LIB/algebra.lib +1193 -0
  271. sage_wheels/share/singular/LIB/all.lib +136 -0
  272. sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
  273. sage_wheels/share/singular/LIB/arnold.lib +4553 -0
  274. sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
  275. sage_wheels/share/singular/LIB/arr.lib +3486 -0
  276. sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
  277. sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
  278. sage_wheels/share/singular/LIB/bfun.lib +1964 -0
  279. sage_wheels/share/singular/LIB/bimodules.lib +774 -0
  280. sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
  281. sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
  282. sage_wheels/share/singular/LIB/central.lib +2169 -0
  283. sage_wheels/share/singular/LIB/chern.lib +4162 -0
  284. sage_wheels/share/singular/LIB/cimonom.lib +571 -0
  285. sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
  286. sage_wheels/share/singular/LIB/classify.lib +3239 -0
  287. sage_wheels/share/singular/LIB/classify2.lib +1462 -0
  288. sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
  289. sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
  290. sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
  291. sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
  292. sage_wheels/share/singular/LIB/combinat.lib +91 -0
  293. sage_wheels/share/singular/LIB/compregb.lib +276 -0
  294. sage_wheels/share/singular/LIB/control.lib +1636 -0
  295. sage_wheels/share/singular/LIB/crypto.lib +3795 -0
  296. sage_wheels/share/singular/LIB/curveInv.lib +667 -0
  297. sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
  298. sage_wheels/share/singular/LIB/customstd.lib +100 -0
  299. sage_wheels/share/singular/LIB/deRham.lib +5979 -0
  300. sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
  301. sage_wheels/share/singular/LIB/decomp.lib +1655 -0
  302. sage_wheels/share/singular/LIB/deflation.lib +872 -0
  303. sage_wheels/share/singular/LIB/deform.lib +925 -0
  304. sage_wheels/share/singular/LIB/difform.lib +3055 -0
  305. sage_wheels/share/singular/LIB/divisors.lib +750 -0
  306. sage_wheels/share/singular/LIB/dmod.lib +5817 -0
  307. sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
  308. sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
  309. sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
  310. sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
  311. sage_wheels/share/singular/LIB/dummy.lib +17 -0
  312. sage_wheels/share/singular/LIB/elim.lib +1009 -0
  313. sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
  314. sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
  315. sage_wheels/share/singular/LIB/equising.lib +2127 -0
  316. sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
  317. sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
  318. sage_wheels/share/singular/LIB/findifs.lib +778 -0
  319. sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
  320. sage_wheels/share/singular/LIB/finvar.lib +7989 -0
  321. sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
  322. sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
  323. sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
  324. sage_wheels/share/singular/LIB/freegb.lib +3853 -0
  325. sage_wheels/share/singular/LIB/general.lib +1350 -0
  326. sage_wheels/share/singular/LIB/gfan.lib +1768 -0
  327. sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
  328. sage_wheels/share/singular/LIB/gkdim.lib +99 -0
  329. sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
  330. sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
  331. sage_wheels/share/singular/LIB/goettsche.lib +909 -0
  332. sage_wheels/share/singular/LIB/graal.lib +1366 -0
  333. sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
  334. sage_wheels/share/singular/LIB/graphics.lib +360 -0
  335. sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
  336. sage_wheels/share/singular/LIB/groups.lib +1123 -0
  337. sage_wheels/share/singular/LIB/grwalk.lib +507 -0
  338. sage_wheels/share/singular/LIB/hdepth.lib +194 -0
  339. sage_wheels/share/singular/LIB/help.cnf +57 -0
  340. sage_wheels/share/singular/LIB/hess.lib +1946 -0
  341. sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
  342. sage_wheels/share/singular/LIB/hodge.lib +400 -0
  343. sage_wheels/share/singular/LIB/homolog.lib +1965 -0
  344. sage_wheels/share/singular/LIB/hyperel.lib +975 -0
  345. sage_wheels/share/singular/LIB/inout.lib +679 -0
  346. sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
  347. sage_wheels/share/singular/LIB/interval.lib +1418 -0
  348. sage_wheels/share/singular/LIB/intprog.lib +778 -0
  349. sage_wheels/share/singular/LIB/invar.lib +443 -0
  350. sage_wheels/share/singular/LIB/involut.lib +980 -0
  351. sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
  352. sage_wheels/share/singular/LIB/kskernel.lib +534 -0
  353. sage_wheels/share/singular/LIB/latex.lib +3146 -0
  354. sage_wheels/share/singular/LIB/lejeune.lib +651 -0
  355. sage_wheels/share/singular/LIB/linalg.lib +2040 -0
  356. sage_wheels/share/singular/LIB/locnormal.lib +212 -0
  357. sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
  358. sage_wheels/share/singular/LIB/makedbm.lib +294 -0
  359. sage_wheels/share/singular/LIB/mathml.lib +813 -0
  360. sage_wheels/share/singular/LIB/matrix.lib +1372 -0
  361. sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
  362. sage_wheels/share/singular/LIB/methods.lib +212 -0
  363. sage_wheels/share/singular/LIB/moddiq.lib +322 -0
  364. sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
  365. sage_wheels/share/singular/LIB/modnormal.lib +218 -0
  366. sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
  367. sage_wheels/share/singular/LIB/modquotient.lib +269 -0
  368. sage_wheels/share/singular/LIB/modstd.lib +1024 -0
  369. sage_wheels/share/singular/LIB/modular.lib +545 -0
  370. sage_wheels/share/singular/LIB/modules.lib +2561 -0
  371. sage_wheels/share/singular/LIB/modwalk.lib +609 -0
  372. sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
  373. sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
  374. sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
  375. sage_wheels/share/singular/LIB/mregular.lib +1863 -0
  376. sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
  377. sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
  378. sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
  379. sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
  380. sage_wheels/share/singular/LIB/ncall.lib +31 -0
  381. sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
  382. sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
  383. sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
  384. sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
  385. sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
  386. sage_wheels/share/singular/LIB/ncloc.lib +361 -0
  387. sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
  388. sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
  389. sage_wheels/share/singular/LIB/nctools.lib +1887 -0
  390. sage_wheels/share/singular/LIB/nets.lib +1456 -0
  391. sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
  392. sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
  393. sage_wheels/share/singular/LIB/noether.lib +1106 -0
  394. sage_wheels/share/singular/LIB/normal.lib +8700 -0
  395. sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
  396. sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
  397. sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
  398. sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
  399. sage_wheels/share/singular/LIB/olga.lib +1933 -0
  400. sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
  401. sage_wheels/share/singular/LIB/parallel.lib +319 -0
  402. sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
  403. sage_wheels/share/singular/LIB/perron.lib +202 -0
  404. sage_wheels/share/singular/LIB/pfd.lib +2223 -0
  405. sage_wheels/share/singular/LIB/phindex.lib +642 -0
  406. sage_wheels/share/singular/LIB/pointid.lib +673 -0
  407. sage_wheels/share/singular/LIB/polybori.lib +1430 -0
  408. sage_wheels/share/singular/LIB/polyclass.lib +525 -0
  409. sage_wheels/share/singular/LIB/polylib.lib +1174 -0
  410. sage_wheels/share/singular/LIB/polymake.lib +1902 -0
  411. sage_wheels/share/singular/LIB/presolve.lib +1533 -0
  412. sage_wheels/share/singular/LIB/primdec.lib +9576 -0
  413. sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
  414. sage_wheels/share/singular/LIB/primitiv.lib +401 -0
  415. sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
  416. sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
  417. sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
  418. sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
  419. sage_wheels/share/singular/LIB/random.lib +455 -0
  420. sage_wheels/share/singular/LIB/ratgb.lib +489 -0
  421. sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
  422. sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
  423. sage_wheels/share/singular/LIB/realrad.lib +1197 -0
  424. sage_wheels/share/singular/LIB/recover.lib +2628 -0
  425. sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
  426. sage_wheels/share/singular/LIB/reesclos.lib +465 -0
  427. sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
  428. sage_wheels/share/singular/LIB/resgraph.lib +789 -0
  429. sage_wheels/share/singular/LIB/resjung.lib +820 -0
  430. sage_wheels/share/singular/LIB/resolve.lib +5110 -0
  431. sage_wheels/share/singular/LIB/resources.lib +170 -0
  432. sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
  433. sage_wheels/share/singular/LIB/ring.lib +1328 -0
  434. sage_wheels/share/singular/LIB/ringgb.lib +343 -0
  435. sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
  436. sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
  437. sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
  438. sage_wheels/share/singular/LIB/rootsur.lib +886 -0
  439. sage_wheels/share/singular/LIB/rstandard.lib +607 -0
  440. sage_wheels/share/singular/LIB/rwalk.lib +336 -0
  441. sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
  442. sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
  443. sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
  444. sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
  445. sage_wheels/share/singular/LIB/schreyer.lib +321 -0
  446. sage_wheels/share/singular/LIB/schubert.lib +2551 -0
  447. sage_wheels/share/singular/LIB/sets.lib +524 -0
  448. sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
  449. sage_wheels/share/singular/LIB/signcond.lib +437 -0
  450. sage_wheels/share/singular/LIB/sing.lib +1094 -0
  451. sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
  452. sage_wheels/share/singular/LIB/solve.lib +2243 -0
  453. sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
  454. sage_wheels/share/singular/LIB/spectrum.lib +62 -0
  455. sage_wheels/share/singular/LIB/sresext.lib +757 -0
  456. sage_wheels/share/singular/LIB/ssi.lib +143 -0
  457. sage_wheels/share/singular/LIB/standard.lib +2769 -0
  458. sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
  459. sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
  460. sage_wheels/share/singular/LIB/stratify.lib +1070 -0
  461. sage_wheels/share/singular/LIB/surf.lib +506 -0
  462. sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
  463. sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
  464. sage_wheels/share/singular/LIB/surfex.lib +1462 -0
  465. sage_wheels/share/singular/LIB/swalk.lib +877 -0
  466. sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
  467. sage_wheels/share/singular/LIB/systhreads.lib +74 -0
  468. sage_wheels/share/singular/LIB/tasks.lib +1324 -0
  469. sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
  470. sage_wheels/share/singular/LIB/teachstd.lib +858 -0
  471. sage_wheels/share/singular/LIB/template.lib +116 -0
  472. sage_wheels/share/singular/LIB/toric.lib +1119 -0
  473. sage_wheels/share/singular/LIB/transformation.lib +116 -0
  474. sage_wheels/share/singular/LIB/triang.lib +1197 -0
  475. sage_wheels/share/singular/LIB/tropical.lib +8741 -0
  476. sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
  477. sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
  478. sage_wheels/share/singular/LIB/tst.lib +1108 -0
  479. sage_wheels/share/singular/LIB/weierstr.lib +241 -0
  480. sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
  481. sage_wheels/share/singular/emacs/.emacs-general +184 -0
  482. sage_wheels/share/singular/emacs/.emacs-singular +234 -0
  483. sage_wheels/share/singular/emacs/COPYING +44 -0
  484. sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
  485. sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
  486. sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
  487. sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
  488. sage_wheels/share/singular/emacs/singular.el +4273 -0
  489. sage_wheels/share/singular/emacs/singular.xpm +39 -0
  490. sage_wheels/share/singular/singular.idx +5002 -0
@@ -0,0 +1,886 @@
1
+ /////////////////////////////////////////////////////////////////////////////
2
+ version="version rootsur.lib 4.1.2.0 Feb_2019 "; // $Id: fc5e3d7bf7ab6329a411250d133a1594a94bfe19 $
3
+ category="Teaching";
4
+ info="
5
+ LIBRARY: rootsur.lib Counting number of real roots of univariate polynomial
6
+ AUTHOR: Enrique A. Tobis, etobis@dc.uba.ar
7
+
8
+ OVERVIEW: Routines for bounding and counting the number of real roots of a
9
+ univariate polynomial, by means of several different methods, namely
10
+ Descartes' rule of signs, the Budan-Fourier theorem, Sturm sequences
11
+ and Sturm-Habicht sequences. The first two give bounds on the number
12
+ of roots. The other two compute the actual number of roots of the
13
+ polynomial. There are several wrapper functions, to simplify the
14
+ application of the aforesaid theorems and some functions
15
+ to determine whether a given polynomial is univariate.
16
+ REFERENCES: Basu, Pollack, Roy, \"Algorithms in Real Algebraic
17
+ Geometry\", Springer, 2003.
18
+
19
+
20
+ PROCEDURES:
21
+ isuni(p) Checks whether a polynomial is univariate
22
+ whichvariable(p) The only variable of a univariate monomial (or 0)
23
+ varsigns(p) Number of sign changes in a list
24
+ boundBuFou(p,a,b) Bound for number of real roots of polynomial p in interval (a,b)
25
+ boundposDes(p) Bound for the number of positive real roots of polynomial p
26
+ boundDes(p) Bound for the number of real roots of polynomial p
27
+ allrealst(p) Checks whether all the roots of a polynomial are real (via Sturm)
28
+ maxabs(p) A bound for the maximum absolute value of a root of a poly
29
+ allreal(p) Checks whether all the roots of a polynomial are real (via St-Ha)
30
+ sturm(p,a,b) Number of real roots of a polynomial on an interval (via Sturm)
31
+ sturmseq(p) Sturm sequence of a polynomial
32
+ sturmha(p,a,b) Number of real roots of a polynomial in (a,b) (via Sturm-Habicht)
33
+ sturmhaseq(p) A Sturm-Habicht Sequence of a polynomial
34
+ reverse(l) Reverses a list
35
+ nrroots(p) The number of real roots of p
36
+ isparam(p) Returns 0 if and only if the polynomial has non-parametric coefficients
37
+
38
+ KEYWORDS: real roots, univariate polynomial
39
+ ";
40
+ ///////////////////////////////////////////////////////////////////////////////
41
+
42
+ static proc isparametric(poly p)
43
+ {
44
+ int ispar;
45
+ def ba = basering;
46
+
47
+ // If the basering has parameters declared
48
+ if (npars(basering) != 0) {
49
+ // If we were given just a polynomial
50
+ list lba = ringlist(ba);
51
+ lba[1]=0;
52
+ def rba = ring(lba); setring rba;
53
+ poly p1 = imap(ba,p);
54
+ setring ba;
55
+ poly p1 = imap(rba,p1);
56
+ ispar = (size(p-p1)!=0);
57
+ }
58
+ return (ispar);
59
+ }
60
+ ///////////////////////////////////////////////////////////////////////////////
61
+ proc isparam(list #)
62
+ "USAGE: isparam(ideal/module/poly/list);
63
+ RETURN: int: 0 if the argument has non-parametric coefficients and 1 if it
64
+ has parametric coefficients
65
+ EXAMPLE: example isparam; shows an example"
66
+ {
67
+ int i;
68
+ int ispar;
69
+ def ar = #[1];
70
+
71
+ // It we were given only one argument (not a list)
72
+ if (size(#) == 1) {
73
+ if (typeof(ar) == "number") {
74
+ ispar = (pardeg(ar) > 0);
75
+ } else {
76
+ if (typeof(ar) == "poly") {
77
+ ispar = isparametric(ar);
78
+ } else {
79
+ if (typeof(ar) == "ideal" || typeof(ar) == "module") {
80
+ // Ciclo que revisa cada polinomio
81
+ i = size(ar);
82
+ while (!ispar && (i >= 1)) {
83
+ ispar = ispar || (isparametric(ar[i]));
84
+ i--;
85
+ }
86
+ } else {
87
+ if (typeof(ar) == "matrix" || typeof(ar) == "intmat") {
88
+ int j;
89
+ i = nrows(ar);
90
+ while (!ispar && (i >= 1)) {
91
+ j = nrows(ar);
92
+ while (!ispar && (j >= 1)) {
93
+ ispar = ispar || (isparametric(ar[i,j]));
94
+ j--;
95
+ }
96
+ i--;
97
+ }
98
+ }
99
+ }}}} else {
100
+ if (size(#) > 1) {
101
+ i = size(#);
102
+ while (!ispar && (i >= 1)) {
103
+ if ((typeof(#[i]) != "poly") && (typeof(#[i]) != "number") &&
104
+ typeof(#[i]) != "int") {
105
+ ERROR("This procedure only works with lists of polynomials");
106
+ }
107
+ ispar = ispar || (isparametric(#[i]));
108
+ i--;
109
+ }
110
+ }}
111
+ return (ispar);
112
+ }
113
+ example
114
+ {
115
+ echo = 2;
116
+ ring r = 0,x,dp;
117
+ isparam(2x3-56x+2);
118
+ ring s = (0,a,b,c),x,dp;
119
+ isparam(2x3-56x+2);
120
+ isparam(2x3-56x+abc);
121
+ }
122
+ ///////////////////////////////////////////////////////////////////////////////
123
+ proc isuni(poly p)
124
+ "USAGE: isuni(p); poly p;
125
+ RETURN: poly: if p is a univariate polynomial, it returns the variable. If
126
+ not, zero.
127
+ SEE ALSO: whichvariable
128
+ EXAMPLE: example isuni; shows an example"
129
+ {
130
+ int v=univariate(p);
131
+ if (v== -1) { v=1; }
132
+ if (v>0) { return(var(v)); }
133
+ else { return(0); }
134
+ }
135
+ example
136
+ {
137
+ echo = 2;
138
+ ring r = 0,(x,y),dp;
139
+ poly p = 6x7-3x2+2x-15/7;
140
+ isuni(p);
141
+ isuni(p*y);
142
+ }
143
+ ///////////////////////////////////////////////////////////////////////////////
144
+ proc whichvariable(poly p)
145
+ "USAGE: whichvariable(p); poly p
146
+ RETURN: poly: if p is a univariate monomial, the variable. Otherwise 0.
147
+ ASSUME: p is a monomial
148
+ SEE ALSO: isuni
149
+ EXAMPLE: example whichvariable; shows an example"
150
+ {
151
+ if (size(p) != 1)
152
+ { ERROR("p must be a monomial"); }
153
+ int v=univariate(p);
154
+ if (v== -1) { v=1; }
155
+ if (v>0) { return(var(v)); }
156
+ else { return(0); }
157
+ }
158
+ example
159
+ {
160
+ echo = 2;
161
+ ring r = 0,(x,y),dp;
162
+ whichvariable(x5);
163
+ whichvariable(x3y);
164
+ }
165
+ ///////////////////////////////////////////////////////////////////////////////
166
+ proc varsigns(list l)
167
+ "USAGE: varsigns(l); list l.
168
+ RETURN: int: the number of sign changes in the list l
169
+ SEE ALSO: boundposDes
170
+ EXAMPLE: example varsigns; shows an example"
171
+ {
172
+ int lastsign;
173
+ int numberofchanges = 0;
174
+
175
+ if (isparam(l)) {
176
+ ERROR("This procedure cannot operate with parametric arguments");
177
+ }
178
+
179
+ lastsign = sign(l[1]);
180
+
181
+ for (int i = 1; i <= size(l); i++)
182
+ {
183
+ if (sign(l[i]) != lastsign && sign(l[i]) != 0)
184
+ {
185
+ numberofchanges++;
186
+ lastsign = sign(l[i]);
187
+ }
188
+ }
189
+ return (numberofchanges);
190
+ }
191
+ example
192
+ {
193
+ echo = 2;
194
+ ring r = 0,x,dp;
195
+ list l = 1,2,3;
196
+ varsigns(l);
197
+ l = 1,-1,2,-2,3,-3;
198
+ varsigns(l);
199
+ }
200
+ ///////////////////////////////////////////////////////////////////////////////
201
+ proc boundBuFou(poly p,number a,number b)
202
+ "USAGE: boundBuFou(p,a,b); p poly, a,b number
203
+ RETURN: int: an upper bound for the number of real roots of p in (a,b],
204
+ with the same parity as the actual number of roots (using the
205
+ Budan-Fourier Theorem)
206
+ ASSUME: - p is a univariate polynomial with rational coefficients@*
207
+ - a, b are rational numbers with a < b
208
+ SEE ALSO: boundposDes,varsigns
209
+ EXAMPLE: example boundBuFou; shows an example"
210
+ {
211
+ int i;
212
+ poly variable;
213
+ list Der;
214
+ list Dera,Derb;
215
+ int d;
216
+ number bound;
217
+
218
+ variable = isuni(p);
219
+
220
+ if (isparam(p) || isparam(a) || isparam(b)) {
221
+ ERROR("This procedure cannot operate with parametric arguments");
222
+ }
223
+
224
+ // p must be a univariate polynomial
225
+ if (variable == 0) {
226
+ ERROR("p must be a univariate polynomial");
227
+ }
228
+
229
+ if (a >= b) {
230
+ ERROR("a must be smaller than b");
231
+ }
232
+
233
+ d = deg(p);
234
+
235
+ // We calculate the list of derivatives
236
+
237
+ Der[d+1] = p;
238
+
239
+ for (i = 0;i < d;i++) {
240
+ Der[d-i] = diff(Der[d-i+1],variable);
241
+ }
242
+
243
+ // Then evaluate that list
244
+
245
+ for (i = d+1;i >= 1;i--) {
246
+ Dera [i] = leadcoef(subst(Der[i],variable,a));
247
+ Derb [i] = leadcoef(subst(Der[i],variable,b));
248
+ }
249
+
250
+ // Finally we calculate the sign variations
251
+
252
+ bound = varsigns(Dera) - varsigns(Derb);
253
+
254
+ return(bound);
255
+ }
256
+ example
257
+ {
258
+ echo = 2;
259
+ ring r = 0,x,dp;
260
+ poly p = (x+2)*(x-1)*(x-5);
261
+ boundBuFou(p,-3,5);
262
+ boundBuFou(p,-2,5);
263
+ }
264
+ ///////////////////////////////////////////////////////////////////////////////
265
+ proc boundposDes(poly p)
266
+ "USAGE: boundposDes(p); poly p
267
+ RETURN: int: an upper bound for the number of positive roots of p, with
268
+ the same parity as the actual number of positive roots of p.
269
+ ASSUME: p is a univariate polynomial with rational coefficients
270
+ SEE ALSO: boundBuFou
271
+ EXAMPLE: example boundposDes; shows an example"
272
+ {
273
+ poly g;
274
+ number nroots;
275
+ poly variable;
276
+ list coefficients;
277
+ int i;
278
+
279
+ variable = isuni(p);
280
+
281
+ if (isparam(p)) {
282
+ ERROR("This procedure cannot operate with parametric arguments");
283
+ }
284
+
285
+ // p must be a univariate polynomial
286
+ if (variable == 0) {
287
+ ERROR("p must be a univariate polynomial");
288
+ }
289
+
290
+ g = p; // We will work with g
291
+
292
+ // We check whether 0 is a root of g, and if so, remove it
293
+ if (subst(g,variable,0) == 0) {
294
+ g = g/variable^(deg(g[size[g]]));
295
+ }
296
+
297
+ // We count the number of positive roots
298
+ i = size(g);
299
+ while (i >= 1) {
300
+ coefficients[i] = leadcoef(g[i]);
301
+ i--;
302
+ }
303
+ nroots = varsigns(coefficients);
304
+
305
+ return(nroots);
306
+ }
307
+ example
308
+ {
309
+ echo = 2;
310
+ ring r = 0,x,dp;
311
+ poly p = (x+2)*(x-1)*(x-5);
312
+ boundposDes(p);
313
+
314
+ p = p*(x2+1);
315
+
316
+ boundposDes(p);
317
+ }
318
+ ///////////////////////////////////////////////////////////////////////////////
319
+ proc boundDes(poly p)
320
+ "USAGE: boundDes(p); poly p
321
+ RETURN: int: an upper bound for the number of real roots of p, with
322
+ the same parity as the actual number of real roots of p.
323
+ ASSUME: p is a univariate polynomial with rational coefficients
324
+ SEE ALSO: boundBuFou
325
+ EXAMPLE: example boundDes; shows an example"
326
+ {
327
+ poly g;
328
+ number nroots;
329
+ poly variable;
330
+ list coefficients;
331
+ int i;
332
+
333
+ variable = isuni(p);
334
+
335
+ if (isparam(p)) {
336
+ ERROR("This procedure cannot operate with parametric arguments");
337
+ }
338
+
339
+ // p must be a univariate polynomial
340
+ if (variable == 0) {
341
+ ERROR("p must be a univariate polynomial");
342
+ }
343
+
344
+ g = p; // We will work with g
345
+
346
+ nroots = 0;
347
+ // We check whether 0 is a root of g, and if so, remove it
348
+ if (subst(g,variable,0) == 0) {
349
+ g = g/variable^(deg(g[size[g]]));
350
+ nroots++;
351
+ }
352
+
353
+ // We count the number of positive roots
354
+ i = size(g);
355
+ while (i >= 1) {
356
+ coefficients[i] = leadcoef(g[i]);
357
+ i--;
358
+ }
359
+ nroots = nroots + varsigns(coefficients);
360
+
361
+ // We count the number of negative roots
362
+ g = subst(g,variable,-variable);
363
+ i = size(g);
364
+ while (i >= 1) {
365
+ coefficients[i] = leadcoef(g[i]);
366
+ i--;
367
+ }
368
+ nroots = nroots + varsigns(coefficients);
369
+
370
+ return(nroots);
371
+ }
372
+ example
373
+ {
374
+ echo = 2;
375
+ ring r = 0,x,dp;
376
+ poly p = (x+2)*(x-1)*(x-5);
377
+ boundDes(p);
378
+
379
+ p = p*(x2+1);
380
+
381
+ boundDes(p);
382
+ }
383
+ ///////////////////////////////////////////////////////////////////////////////
384
+ proc allrealst(poly p)
385
+ "USAGE: allrealst(p); poly p
386
+ RETURN: int: 1 if and only if all the roots of p are real, 0 otherwise.
387
+ Checks by using Sturm's Theorem whether all the roots of p are real
388
+ ASSUME: p is a univariate polynomial with rational coefficients
389
+ SEE ALSO: allreal,sturm,sturmha
390
+ EXAMPLE: example allrealst; shows an example"
391
+ {
392
+ number upper,lower;
393
+ poly sqfp; // The square-free part of p
394
+ poly variable;
395
+
396
+ variable = isuni(p);
397
+
398
+ if (isparam(p)) {
399
+ ERROR("This procedure cannot operate with parametric arguments");
400
+ }
401
+ if (variable == 0) {
402
+ ERROR ("p must be a univariate polynomial");
403
+ }
404
+
405
+ sqfp = p/gcd(p,diff(p,variable));
406
+
407
+ upper = maxabs(sqfp); // By adding one we ensure that sqfp(upper) != 0
408
+ lower = -upper;
409
+
410
+ return (sturm(sqfp,lower,upper) == deg(sqfp));
411
+ }
412
+ example
413
+ {
414
+ echo = 2;
415
+ ring r = 0,x,dp;
416
+ poly p = (x+2)*(x-1)*(x-5);
417
+ allrealst(p);
418
+ p = p*(x2+1);
419
+ allrealst(p);
420
+ }
421
+ ///////////////////////////////////////////////////////////////////////////////
422
+ proc maxabs(poly p)
423
+ "USAGE: maxabs(p); poly p
424
+ RETURN: number: an upper bound for the largest absolute value of a root of p
425
+ ASSUME: p is a univariate polynomial with rational coefficients
426
+ SEE ALSO: sturm
427
+ EXAMPLE: example maxabs; shows an example"
428
+ {
429
+ number maximum;
430
+ poly monic;
431
+ int i;
432
+
433
+ if (isparam(p)) {
434
+ ERROR("This procedure cannot operate with parametric arguments");
435
+ }
436
+
437
+ monic = simplify(p,1);
438
+ if (abs(leadcoef(p))>1) { monic=p;}
439
+
440
+ maximum = 0;
441
+
442
+ for (i = 1; i <= size(monic); i++)
443
+ {
444
+ maximum = max(abs(leadcoef(monic[i])),maximum);
445
+ }
446
+
447
+ return (maximum + 1);
448
+ }
449
+ example
450
+ {
451
+ echo = 2;
452
+ echo = 2;
453
+ ring r = 0,x,dp;
454
+ poly p = (x+2)*(x-1)*(x-5);
455
+ maxabs(p);
456
+ }
457
+ ///////////////////////////////////////////////////////////////////////////////
458
+ proc sturm(poly p,number a,number b)
459
+ "USAGE: sturm(p,a,b); poly p, number a,b
460
+ RETURN: int: the number of real roots of p in (a,b]
461
+ ASSUME: p is a univariate polynomial with rational coefficients,@*
462
+ a, b are rational numbers with a < b
463
+ SEE ALSO: sturmha,allrealst,allreal
464
+ EXAMPLE: example sturm; shows an example"
465
+ {
466
+ list l;
467
+ list pa;
468
+ list pb;
469
+ int signsA,signsB;
470
+ int i;
471
+ int nroots;
472
+ poly variable;
473
+
474
+ if (isparam(p)) {
475
+ ERROR("This procedure cannot operate with parametric arguments");
476
+ }
477
+
478
+ variable = isuni(p);
479
+
480
+ if (variable == 0) {
481
+ ERROR ("p must be a univariate polynomial");
482
+ }
483
+
484
+ if (a >= b) {
485
+ ERROR("a must be lower than b");
486
+ }
487
+
488
+ if (subst(p,variable,a) == 0 || subst(p,variable,b) == 0) {
489
+ ERROR ("Neither a nor b can be roots of P");
490
+ }
491
+
492
+ l = sturmseq(p);
493
+
494
+ i = size(l);
495
+
496
+ while (i >= 1) { // We build the sequences
497
+ pa[i] = leadcoef(subst(l[i],variable,a));
498
+ pb[i] = leadcoef(subst(l[i],variable,b));
499
+ i--;
500
+ }
501
+
502
+ signsA = varsigns(pa);
503
+ signsB = varsigns(pb);
504
+
505
+ nroots = signsA - signsB;
506
+
507
+ return (nroots);
508
+ }
509
+ example
510
+ {
511
+ echo = 2;
512
+ ring r = 0,x,dp;
513
+ poly p = (x+2)*(x-1)*(x-5);
514
+ sturm(p,-3,6);
515
+ p = p*(x2+1);
516
+ sturm(p,-3,6);
517
+ p = p*(x+2);
518
+ sturm(p,-3,6);
519
+ }
520
+ ///////////////////////////////////////////////////////////////////////////////
521
+ proc sturmseq(poly p)
522
+ "USAGE: sturmseq(p); p poly
523
+ RETURN: list: a Sturm sequence of p
524
+ ASSUME: p is a univariate polynomial with rational coefficients
525
+ THEORY: The Sturm sequence of p (also called remainder sequence) is the
526
+ sequence beginning with p, p' and goes on with the negative part of
527
+ the remainder of the two previous polynomials, until the remainder
528
+ is zero.
529
+ See: Basu, Pollack, Roy, Algorithms in Real Algebraic Geometry,
530
+ Springer, 2003.
531
+ SEE ALSO: sturm,sturmhaseq
532
+ EXAMPLE: example sturmseq; shows an example"
533
+ {
534
+ list stseq;
535
+ poly variable;
536
+ int i;
537
+
538
+ variable = isuni(p);
539
+
540
+ if (isparam(p)) {
541
+ ERROR("This procedure cannot operate with parametric arguments");
542
+ }
543
+
544
+ if (variable == 0) {
545
+ ERROR ("p must be a univariate polynomial");
546
+ }
547
+
548
+ // The two first polynomials in Sturm's sequence
549
+ stseq = list();
550
+ stseq[1] = p;
551
+ stseq[2] = diff(p,variable);
552
+
553
+ poly q = -reduce(stseq[1],std(stseq[2]));
554
+ i = 3;
555
+
556
+ while (q <> 0) {
557
+ stseq[i] = q;
558
+ q = -reduce(stseq[i-1],std(stseq[i]));
559
+ i++;
560
+ }
561
+
562
+ // Right now, we have gcd(P,P') in stseq[size(stseq)];
563
+
564
+ for (i = size(stseq)-1;i >= 1;i--) {
565
+ stseq[i] = stseq[i]/(sign(leadcoef(stseq[size(stseq)]))*stseq[size(stseq)]);
566
+ stseq[i] = stseq[i]/abs(leadcoef(stseq[i]));
567
+ }
568
+
569
+ // We divide the gcd by itself
570
+ stseq[size(stseq)] = sign(leadcoef(stseq[size(stseq)]));
571
+
572
+ return (stseq);
573
+ }
574
+ example
575
+ {
576
+ echo = 2;
577
+ ring r = 0,(z,x),dp;
578
+ poly p = x5-3x4+12x3+7x-153;
579
+ sturmseq(p);
580
+ }
581
+ ///////////////////////////////////////////////////////////////////////////////
582
+ proc allreal(poly p)
583
+ "USAGE: allreal(p);
584
+ RETURN: int: 1 if and only if all the roots of p are real, 0 otherwise
585
+ SEE ALSO: allrealst
586
+ EXAMPLE: example allreal; shows an example"
587
+ {
588
+ number upper,lower;
589
+ poly sqfp; // The square-free part of p
590
+ poly variable;
591
+
592
+ if (isparam(p)) {
593
+ ERROR("This procedure cannot operate with parametric arguments");
594
+ }
595
+
596
+ variable = isuni(p);
597
+
598
+ if (variable == 0) {
599
+ ERROR ("p must be a univariate polynomial");
600
+ }
601
+
602
+ sqfp = p/gcd(p,diff(p,variable));
603
+
604
+ return (sturmha(sqfp,-maxabs(p),maxabs(p)) == deg(sqfp));
605
+ }
606
+ example
607
+ {
608
+ echo = 2;
609
+ ring r = 0,x,dp;
610
+ poly p = (x+2)*(x-1)*(x-5);
611
+ allreal(p);
612
+ p = p*(x2+1);
613
+ allreal(p);
614
+ }
615
+ ///////////////////////////////////////////////////////////////////////////////
616
+ proc sturmha(poly P,number a,number b)
617
+ "USAGE: sturmha(p,a,b); poly p, number a,b
618
+ RETURN: int: the number of real roots of p in (a,b) (using a Sturm-Habicht sequence)
619
+ SEE ALSO: sturm,allreal
620
+ EXAMPLE: example sturmha; shows an example"
621
+ {
622
+ list seq;
623
+ int i;
624
+ list seqa,seqb;
625
+ poly variable;
626
+ number bound;
627
+ int result;
628
+
629
+ if (isparam(P) || isparam(a) || isparam(b))
630
+ { ERROR("This procedure cannot operate with parametric arguments"); }
631
+ if (!attrib(basering,"global"))
632
+ { ERROR("This procedure requires a global ordering"); }
633
+
634
+ variable = isuni(P);
635
+
636
+ if (variable == 0) { ERROR ("P must be a univariate polynomial"); }
637
+
638
+ if (a >= b) { ERROR("a must be lower than b"); }
639
+
640
+ if (subst(P,variable,a) == 0 || subst(P,variable,b) == 0) {
641
+ ERROR ("Neither a nor b can be roots of P");
642
+ }
643
+
644
+ seq = sturmhaseq(P);
645
+
646
+ bound = maxabs(P);
647
+
648
+ if (a < -bound) { a = -bound; }
649
+
650
+ if (b > bound) { b = bound; }
651
+
652
+ for (i = size(seq);i >= 1;i--) {
653
+ seqa[i] = leadcoef(subst(seq[i],variable,a));
654
+ seqb[i] = leadcoef(subst(seq[i],variable,b));
655
+ }
656
+ result = (W(seqa) - W(seqb));
657
+
658
+ return (result);
659
+ }
660
+ example
661
+ {
662
+ echo = 2;
663
+ ring r = 0,x,dp;
664
+ poly p = (x+2)*(x-1)*(x-5);
665
+ sturmha(p,-3,6);
666
+ p = p*(x2+1);
667
+ sturmha(p,-3,6);
668
+ }
669
+ ///////////////////////////////////////////////////////////////////////////////
670
+ proc sturmhaseq(poly P)
671
+ "USAGE: sturmhaseq(P); P poly.
672
+ RETURN: list: the non-zero polynomials of the Sturm-Habicht sequence of P
673
+ ASSUME: P is a univariate polynomial.
674
+ THEORY: The Sturm-Habicht sequence (also subresultant sequence) is closely
675
+ related to the Sturm sequence, but behaves better with respect to
676
+ the size of the coefficients. It is defined via subresultants.
677
+ See: Basu, Pollack, Roy, Algorithms in Real Algebraic Geometry,
678
+ Springer, 2003.
679
+ SEE ALSO: sturm,sturmseq,sturmha
680
+ EXAMPLE: example sturmhaseq; shows an example"
681
+ {
682
+ poly Q;
683
+ poly variable;
684
+ int p,q,i,j,k,l;
685
+ list SR;
686
+ list sr;
687
+ list srbar;
688
+ list T;
689
+
690
+ if (isparam(P)) {
691
+ ERROR("This procedure cannot operate with parametric arguments");
692
+ }
693
+
694
+ variable = isuni(P);
695
+
696
+ if (variable == 0) {
697
+ ERROR ("P must be a univariate polynomial");
698
+ }
699
+
700
+ p = deg(P);
701
+ Q = diff(P,variable);
702
+ q = deg(Q);
703
+
704
+ // Initialization
705
+ SR[p+2] = sign(leadcoef(P)^(p-q-1))*P;
706
+ // T[p+2] = SR[p+2];
707
+
708
+ srbar[p+2] = sign(leadcoef(P)^(p-q));
709
+ sr[p+2] = srbar[p+2];
710
+
711
+ SR[p-1+2] = sign(leadcoef(P)^(p-q+1))*Q;
712
+ // T[p-1+2] = SR[p-1+2];
713
+ srbar[p-1+2] = sign(leadcoef(P)^(p-q+1))*leadcoef(Q);
714
+
715
+ i = p+1;
716
+ j = p;
717
+
718
+ while (SR[j-1+2] != 0) {
719
+ k = deg(SR[j-1+2]);
720
+ if (k == j-1) {
721
+ sr[j-1+2] = srbar[j-1+2];
722
+ SR[k-1+2] = -(reduce(sr[j-1+2]^2*SR[i-1+2],
723
+ std(SR[j-1+2])))/(sr[j+2]*srbar[i-1+2]);
724
+
725
+ // T[k-1+2] = SR[k-1+2];
726
+ srbar[k-1+2] = leadcoef(SR[k-1+2]);
727
+ }
728
+ if (k < j-1) {
729
+ // Computation of sr[k+2]
730
+ for (l = 1;l <= j-k-1;l++) {
731
+ srbar[j-l-1+2] = ((-1)^l)*(srbar[j-1+2]*srbar[j-l+2])/sr[j+2];
732
+ }
733
+ sr[k+2] = srbar[k+2];
734
+
735
+ // Computation of SR[k-1+2]
736
+ SR[k-1+2] = -reduce(srbar[j-1+2]*sr[k+2]*SR[i-1+2],
737
+ std(SR[j-1+2]))/(sr[j+2]*srbar[i-1+2]);
738
+
739
+ srbar[k-1+2] = leadcoef(SR[k-1+2]);
740
+
741
+ SR[k+2] = SR[j-1+2] * ( sr[k+2] / leadcoef(SR[j-1+2]));
742
+ }
743
+ i = j;
744
+ j = k;
745
+ }
746
+
747
+ // We build a new list, discarding the undefined and zero elements
748
+ // Plus, we reverse the elements
749
+
750
+ list filtered;
751
+ i = size(SR);
752
+ while (i >= 1) {
753
+ if (typeof(SR[i]) != "none") {
754
+ if (SR[i] != 0) {
755
+ filtered = insert(filtered,SR[i]);
756
+ }
757
+ }
758
+ i--;
759
+ }
760
+
761
+ return (filtered);
762
+ }
763
+ example
764
+ {
765
+ echo = 2;
766
+ ring r = 0,x,dp;
767
+ poly p = x5-x4+x-3/2;
768
+ list l = sturmhaseq(p);
769
+ l;
770
+ }
771
+ ///////////////////////////////////////////////////////////////////////////////
772
+ proc nrroots(poly p)
773
+ "USAGE: nrroots(p); poly p
774
+ RETURN: int: the number of real roots of p
775
+ SEE ALSO: boundposDes, sturm, sturmha
776
+ EXAMPLE: example nrroots; shows an example"
777
+ {
778
+ if (isparam(p))
779
+ { ERROR("This procedure cannot operate with parametric arguments"); }
780
+
781
+ number a = maxabs(p);
782
+
783
+ return (sturmha(p,-a,a));
784
+
785
+ }
786
+ example
787
+ {
788
+ echo = 2;
789
+ ring r = 0,x,dp;
790
+ poly p = (x+2)*(x-1)*(x-5);
791
+ nrroots(p);
792
+ p = p*(x2+1);
793
+ nrroots(p);
794
+ }
795
+ ///////////////////////////////////////////////////////////////////////////////
796
+ static proc abs(number x)
797
+ // Returns the absolute value of x
798
+ {
799
+ number av;
800
+
801
+ if (x >= 0) {
802
+ av = x;
803
+ } else {
804
+ av = -x;
805
+ }
806
+
807
+ return (av);
808
+ }
809
+ ///////////////////////////////////////////////////////////////////////////////
810
+ proc sign(number x)
811
+ {
812
+ int sgn;
813
+
814
+ if (isparam(x)) {
815
+ print(x);
816
+ ERROR("This procedure cannot operate with parameters");
817
+ }
818
+
819
+ if (x > 0) {
820
+ sgn = 1;
821
+ } else { if (x < 0) {
822
+ sgn = -1;
823
+ } else {
824
+ sgn = 0;
825
+ }}
826
+
827
+ return (sgn);
828
+ }
829
+ ///////////////////////////////////////////////////////////////////////////////
830
+ proc reverse(list l)
831
+ "USAGE: reverse(l); l list
832
+ RETURN: list: l reversed.
833
+ EXAMPLE: example reverse; shows an example"
834
+ {
835
+ int i;
836
+ list result;
837
+
838
+ for (i = 1;i <= size(l);i++) {
839
+ result = list(l[i]) + result;
840
+ }
841
+ return (result);
842
+ }
843
+ example
844
+ {
845
+ echo = 2;
846
+ ring r = 0,x,dp;
847
+ list l = 1,2,3,4,5;
848
+ list rev = reverse(l);
849
+ l;
850
+ rev;
851
+ }
852
+
853
+ ///////////////////////////////////////////////////////////////////////////////
854
+ static proc W(list l)
855
+ {
856
+ int i,temp,sc,lastsign,nofzeros,n;
857
+
858
+ n = size(l);
859
+ sc = 0;
860
+ nofzeros = 0;
861
+ i = 1;
862
+ lastsign = sign(l[i]);
863
+
864
+ i++;
865
+
866
+ while (i <= n) {
867
+ if (l[i] == 0) {
868
+ nofzeros++;
869
+ } else {
870
+ temp = lastsign * sign(l[i]);
871
+
872
+ if (temp < 0) {
873
+ sc++;
874
+ } else {
875
+ if (nofzeros == 2) {
876
+ sc = sc + 2;
877
+ }
878
+ }
879
+ nofzeros = 0;
880
+ lastsign = temp div lastsign;
881
+ }
882
+ i++;
883
+ }
884
+ return (sc);
885
+ }
886
+ ///////////////////////////////////////////////////////////////////////////////