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,1023 @@
1
+ //////////////////////////////////////////////////////////////////////
2
+ version="version ncfrac.lib 4.1.2.0 Feb_2019 "; // $Id: c669cdf8284f2933030148cc3a020817850b2ab4 $
3
+ category="Noncommutative";
4
+ info="
5
+ LIBRARY: ncfrac.lib object-oriented interface for olga.lib
6
+ AUTHOR: Johannes Hoffmann, email: johannes.hoffmann at math.rwth-aachen.de
7
+
8
+ OVERVIEW:
9
+ This library introduces a new type: ncfrac.
10
+ This type wraps the data defining a (non-commutative) fraction in an Ore
11
+ localization of a G-algebra as in olga.lib.
12
+ An element of type ncfrac has five members:
13
+ - polys lnum, lden, rnum, rden
14
+ - ncloc loc
15
+
16
+ OPERATIONS:
17
+ string(ncfrac);
18
+ give a string representation of the data describing the fraction
19
+ print(ncfrac);
20
+ prints the string representation of the fraction
21
+ status(ncfrac);
22
+ report on the status/validity of the fraction
23
+ test(ncfrac);
24
+ check if the fraction is valid
25
+
26
+ INFIX OPERATIONS:
27
+ ncfrac == ncfrac;
28
+ compare two fractions
29
+ ncfrac != ncfrac;
30
+ compare two fractions
31
+ ncfrac + ncfrac;
32
+ add two fractions
33
+ ncfrac - ncfrac
34
+ subtract two fractions
35
+ ncfrac * ncfrac
36
+ multiply two fractions
37
+ ncfrac / ncfrac
38
+ divide two fractions
39
+ ncfrac = int/number/poly
40
+ create a fraction with:
41
+ - left and right denominator equal to 1
42
+ - left and right numerator determined by the input
43
+ - localization data describing the trivial monoidal localization at 1
44
+ ncfrac = vector
45
+ create a fraction from a vector v with unspecified localization such that
46
+ lden,lnum,rnum,rden = v[1],v[2],v[3],v[4]
47
+ (note: without specifying a localization afterwards this results is an
48
+ invalid fraction)
49
+ ncfrac = list
50
+ create a fraction from a list L as follows:
51
+ - try to create a fraction from L[1] as above
52
+ - if L[2] is of type ncloc set the localization of the fraction to L[2]
53
+
54
+ PROCEDURES:
55
+ hasLeftDenom(ncfrac); check if the given fraction has a left representation
56
+ hasRightDenom(ncfrac); check if the given fraction has a right representation
57
+ isZeroNcfrac(ncfrac); check if the given fraction is equal to zero
58
+ isOneNcfrac(ncfrac); check if the given fraction is equal to one
59
+ zeroNcfrac(ncloc loc); create the fraction equal to zero in the given localization
60
+ oneNcfrac(ncloc loc); create the fraction equal to one in the given localization
61
+ ensureLeftNcfrac(ncfrac); compute a left representation of the given fraction if it does not have one
62
+ ensureRightNcfrac(ncfrac); compute a right representation of the given fraction if it does not have one
63
+ negateNcfrac(ncfrac); compute the additive inverse of the given fraction
64
+ isInvertibleNcfrac(ncfrac); check if the given fraction is invertible (note: see the description of
65
+ isInvertibleLeftFraction from olga.lib for specific behaviour)
66
+ invertNcfrac(ncfrac); compute the multiplicative inverse of the given fraction (note: see the
67
+ description of invertLeftFraction from olga.lib for specific behaviour)
68
+ testNcfrac(); execute a series of internal testing procedures
69
+ testNcfracExamples(); execute the examples of all procedures in this library
70
+ ";
71
+ //////////////////////////////////////////////////////////////////////
72
+ proc testNcfracExamples()
73
+ "USAGE: testNcfracExamples()
74
+ PURPOSE: execute the examples of all procedures in this library
75
+ RETURN: nothing
76
+ NOTE:
77
+ EXAMPLE: "
78
+ {
79
+ example hasLeftDenom;
80
+ example hasRightDenom;
81
+ example isZeroNcfrac;
82
+ example isOneNcfrac;
83
+ example zeroNcfrac;
84
+ example oneNcfrac;
85
+ example ensureLeftNcfrac;
86
+ example ensureRightNcfrac;
87
+ }
88
+ //////////////////////////////////////////////////////////////////////
89
+ proc testNcfrac()
90
+ "USAGE: testNcfrac()
91
+ PURPOSE: execute a series of internal testing procedures
92
+ RETURN: nothing
93
+ NOTE:
94
+ EXAMPLE: "
95
+ {
96
+ print("testing ncfrac.lib...");
97
+ testHasLeftHasRight();
98
+ testIsZeroIsOne();
99
+ testNcFracCreation();
100
+ testNcfracComparison();
101
+ testNcfracAddition();
102
+ testNcfracSubtraction();
103
+ testNcfracMultiplication();
104
+ testNcfracDivision();
105
+ testNcfracInversion();
106
+ testEnsureRightNcfrac();
107
+ testEnsureLeftNcfrac();
108
+ print("testing complete - ncfrac.lib OK");
109
+ }
110
+ //////////////////////////////////////////////////////////////////////
111
+ static proc mod_init() {
112
+ LIB "ncloc.lib";
113
+ /* new type: ncfrac (non-commutative fraction) */
114
+ newstruct("ncfrac", "ncloc loc, poly rden, poly rnum, poly lden, poly lnum");
115
+ system("install", "ncfrac", "print", printNcfrac, 1);
116
+ system("install", "ncfrac", "string", ncfracToString, 1);
117
+ system("install", "ncfrac", "=", createNcfrac, 1);
118
+ system("install", "ncfrac", "==", compareNcfracs, 2);
119
+ system("install", "ncfrac", "!=", invertedCompareNcfracs, 2);
120
+ system("install", "ncfrac", "+", addNcfracs, 2);
121
+ system("install", "ncfrac", "-", subtractNcfracs, 2);
122
+ system("install", "ncfrac", "*", multiplyNcfracs, 2);
123
+ system("install", "ncfrac", "/", divideNcfracs, 2);
124
+ system("install", "ncfrac", "test", testNcfrac, 4);
125
+ system("install", "ncfrac", "status", statusNcfrac, 4);
126
+ }
127
+ //////////////////////////////////////////////////////////////////////
128
+ proc hasLeftDenom(ncfrac frac)
129
+ "USAGE: hasLeftDenom(frac), ncfrac frac
130
+ PURPOSE: checks if frac has a left representation
131
+ RETURN: int, 1 if frac has a left representation, 0 otherwise
132
+ EXAMPLE: example hasLeftDenom; shows example"
133
+ {
134
+ return(frac.lden != 0);
135
+ }
136
+ example
137
+ {
138
+ "EXAMPLE:"; echo = 2;
139
+ ring R = 0,(x,y,Dx,Dy),dp;
140
+ def S = Weyl();
141
+ setring S;
142
+ ncloc loc = ideal(x-3,y+7);
143
+ ncfrac noLeft = list([0,0,3*y*Dx,x+2], loc);
144
+ hasLeftDenom(noLeft);
145
+ ncfrac left = list([1,Dx,Dx,1], loc);
146
+ hasLeftDenom(left);
147
+ }
148
+ //////////////////////////////////////////////////////////////////////
149
+ proc hasRightDenom(ncfrac frac)
150
+ "USAGE: hasRightDenom(frac), ncfrac frac
151
+ PURPOSE: checks if frac has a right representation
152
+ RETURN: int, 1 if frac has a right representation, 0 otherwise
153
+ EXAMPLE: example hasRightDenom; shows example"
154
+ {
155
+ return(frac.rden != 0);
156
+ }
157
+ example
158
+ {
159
+ "EXAMPLE:"; echo = 2;
160
+ ring R = 0,(x,y,Dx,Dy),dp;
161
+ def S = Weyl();
162
+ setring S;
163
+ ncloc loc = ideal(x-3,y+7);
164
+ ncfrac noRight = list([x+2,3*y*Dx,0,0], loc);
165
+ hasRightDenom(noRight);
166
+ ncfrac right = list([1,Dx,Dx,1], loc);
167
+ hasRightDenom(right);
168
+ }
169
+ ////////// status and printing ///////////////////////////////////////
170
+ static proc toVector(ncfrac frac) {
171
+ return([frac.lden, frac.lnum, frac.rnum, frac.rden]);
172
+ }
173
+ //////////////////////////////////////////////////////////////////////
174
+ static proc statusNcfrac(ncfrac frac) {
175
+ return(fracStatus(toVector(frac), frac.loc.locType, frac.loc.locData));
176
+ // fracStatus from olga.lib
177
+ }
178
+ //////////////////////////////////////////////////////////////////////
179
+ static proc testNcfrac(ncfrac frac) {
180
+ list stat = status(frac);
181
+ if(!stat[1]) {
182
+ ERROR(stat[2]);
183
+ } else {
184
+ return();
185
+ }
186
+ }
187
+ //////////////////////////////////////////////////////////////////////
188
+ static proc ncfracToString(ncfrac frac) {
189
+ list stat = status(frac);
190
+ if (!stat[1]) {
191
+ return(stat[2]);
192
+ } else {
193
+ return("left repr.: (" + string(frac.lden) + "," + string(frac.lnum)
194
+ + ")" + newline + "right repr.: (" + string(frac.rnum) + ","
195
+ + string(frac.rden) + ")");
196
+ }
197
+ }
198
+ //////////////////////////////////////////////////////////////////////
199
+ static proc printNcfrac(ncfrac frac) {
200
+ string(frac);
201
+ }
202
+ //////////////////////////////////////////////////////////////////////
203
+ proc isZeroNcfrac(ncfrac frac)
204
+ "USAGE: isZeroNcfrac(frac), ncfrac frac
205
+ PURPOSE: checks if frac is zero
206
+ RETURN: int, 1 if frac is zero, 0 otherwise
207
+ EXAMPLE: example isZeroNcfrac; shows example"
208
+ {
209
+ testNcfrac(frac);
210
+ if (hasLeftDenom(frac)) { // frac has left representation
211
+ return(frac.lnum == 0);
212
+ } else { // frac has right representation, but no left representation
213
+ return(frac.rnum == 0);
214
+ }
215
+ }
216
+ example
217
+ {
218
+ "EXAMPLE:"; echo = 2;
219
+ ring Q = (0,q),(x,y,Qx,Qy),dp;
220
+ matrix C[4][4] = UpOneMatrix(4);
221
+ C[1,3] = q;
222
+ C[2,4] = q;
223
+ def ncQ = nc_algebra(C,0);
224
+ setring ncQ;
225
+ ncloc loc = intvec(2);
226
+ ncfrac frac = list([y^2+7*y+1,0,0,0], loc);
227
+ isZeroNcfrac(frac);
228
+ frac.lnum = 42*y*Qy+7*Qx+3*x+7;
229
+ isZeroNcfrac(frac);
230
+ }
231
+ //////////////////////////////////////////////////////////////////////
232
+ proc isOneNcfrac(ncfrac frac)
233
+ "USAGE: isOneNcfrac(frac), ncfrac frac
234
+ PURPOSE: checks if frac is one
235
+ RETURN: int, 1 if frac is one, 0 otherwise
236
+ EXAMPLE: example isOneNcfrac; shows example"
237
+ {
238
+ testNcfrac(frac);
239
+ if (hasLeftDenom(frac)) { // frac has left representation
240
+ return(frac.lden == frac.lnum);
241
+ } else { // frac has right representation, but no left representation
242
+ return(frac.rden == frac.rnum);
243
+ }
244
+ }
245
+ example
246
+ {
247
+ "EXAMPLE:"; echo = 2;
248
+ ring Q = (0,q),(x,y,Qx,Qy),dp;
249
+ matrix C[4][4] = UpOneMatrix(4);
250
+ C[1,3] = q;
251
+ C[2,4] = q;
252
+ def ncQ = nc_algebra(C,0);
253
+ setring ncQ;
254
+ ncloc loc = intvec(2);
255
+ ncfrac frac = list([y^2+7*y+1,y^2+7*y+1,0,0], loc);
256
+ isOneNcfrac(frac);
257
+ frac.lnum = 42*y*Qy+7*Qx+3*x+7;
258
+ isOneNcfrac(frac);
259
+ }
260
+ ////////// initialization, comparison and declaration ////////////////
261
+ static proc createNcfrac(def input) {
262
+ string inputType = typeof(input);
263
+ ncfrac result;
264
+ if (inputType == "list") {
265
+ if (size(input) >= 2) {
266
+ result = createNcfrac(input[1]);
267
+ if (typeof(input[2]) == "ncloc") {
268
+ result.loc = input[2];
269
+ }
270
+ }
271
+ }
272
+ if (inputType == "int" || inputType == "number" || inputType == "poly") {
273
+ result.lden = poly(1);
274
+ result.lnum = poly(input);
275
+ result.rden = poly(1);
276
+ result.rnum = poly(input);
277
+ result.loc = ncloc(list(1));
278
+ }
279
+ if (inputType == "vector") {
280
+ result.lden = input[1];
281
+ result.lnum = input[2];
282
+ result.rnum = input[3];
283
+ result.rden = input[4];
284
+ }
285
+ return(result);
286
+ }
287
+ //////////////////////////////////////////////////////////////////////
288
+ proc zeroNcfrac(ncloc loc)
289
+ "USAGE: zeroNcfrac(loc), ncloc loc
290
+ PURPOSE: returns the zero fraction in the localization loc
291
+ RETURN: ncfrac
292
+ EXAMPLE: example zeroNcfrac; shows example"
293
+ {
294
+ return(ncfrac(list([1,0,0,1], loc)));
295
+ }
296
+ example
297
+ {
298
+ "EXAMPLE:"; echo = 2;
299
+ ring R = 0,(x,y,Dx,Dy),dp;
300
+ def S = Weyl();
301
+ setring S;
302
+ ncloc loc = ideal(x-53,y-7);
303
+ zeroNcfrac(loc);
304
+ }
305
+ //////////////////////////////////////////////////////////////////////
306
+ proc oneNcfrac(ncloc loc)
307
+ "USAGE: oneNcfrac(loc), ncloc loc
308
+ PURPOSE: returns the one fraction in the localization loc
309
+ RETURN: ncfrac
310
+ EXAMPLE: "
311
+ {
312
+ return(ncfrac(list([1,1,1,1], loc)));
313
+ }
314
+ example
315
+ {
316
+ "EXAMPLE:"; echo = 2;
317
+ ring R = 0,(x,y,Dx,Dy),dp;
318
+ def S = Weyl();
319
+ setring S;
320
+ ncloc loc = ideal(x-42,y-17);
321
+ oneNcfrac(loc);
322
+ }
323
+ //////////////////////////////////////////////////////////////////////
324
+ static proc trimNcfrac(ncfrac frac)
325
+ "USAGE: trimNcfrac(frac), ncfrac frac
326
+ PURPOSE: simplifies complicated representations of zero and one
327
+ RETURN: ncfrac
328
+ NOTE: - if frac is zero, returns the default representation of zero
329
+ - if frac is one, returns the default representation of one
330
+ - otherwise returns frac
331
+ EXAMPLE: example trimNcfrac; shows example"
332
+ {
333
+ testNcfrac(frac);
334
+ if (isZeroNcfrac(frac)) {
335
+ return(zeroNcfrac(frac.loc));
336
+ }
337
+ if (isOneNcfrac(frac)) {
338
+ return(oneNcfrac(frac.loc));
339
+ }
340
+ return(frac);
341
+ } example {
342
+ "EXAMPLE:"; echo = 2;
343
+ ring R = 0,(x,y,Dx,Dy),dp;
344
+ def S = Weyl();
345
+ setring S;
346
+ ncloc loc = poly(x);
347
+ loc;
348
+ ncfrac frac1 = list([x^2,x*x,0,0], loc);
349
+ trimNcfrac(frac1);
350
+ ncfrac frac2 = list([0,0,0,x], loc);
351
+ trimNcfrac(frac2);
352
+ }
353
+ //////////////////////////////////////////////////////////////////////
354
+ static proc compareNcfracs(ncfrac frac1, ncfrac frac2) {
355
+ testNcfrac(frac1);
356
+ testNcfrac(frac2);
357
+ if (isZeroNcfrac(frac1)) {
358
+ return(isZeroNcfrac(frac2));
359
+ }
360
+ if (isOneNcfrac(frac1)) {
361
+ return(isOneNcfrac(frac2));
362
+ }
363
+ if (isZeroNcfrac(frac1 - frac2)) {
364
+ // frac1 and frac2 are equal iff their difference is zero
365
+ return (1);
366
+ } else {
367
+ return (0);
368
+ }
369
+ }
370
+ //////////////////////////////////////////////////////////////////////
371
+ static proc invertedCompareNcfracs(ncfrac frac1, ncfrac frac2) {
372
+ return(!compareNcfracs(frac1, frac2));
373
+ }
374
+ ////////// compute left resp. right representations //////////////////
375
+ proc ensureLeftNcfrac(ncfrac frac)
376
+ "USAGE: ensureLeftNcfrac(frac), ncfrac frac
377
+ PURPOSE: ensures that frac has a left representation (by computing it if not
378
+ alreaDy known)
379
+ RETURN: ncfrac, a representation of frac which has a left representation
380
+ EXAMPLE: "
381
+ {
382
+ testNcfrac(frac);
383
+ if (hasLeftDenom(frac)) {
384
+ return(frac);
385
+ }
386
+ ncloc loc = frac.loc;
387
+ vector f = toVector(frac);
388
+ vector result = convertRightToLeftFraction(f, loc.locType, loc.locData);
389
+ return(ncfrac(list(result, loc)));
390
+ }
391
+ example
392
+ {
393
+ "EXAMPLE:"; echo = 2;
394
+ ring R = 0,(x,y,Dx,Dy),dp;
395
+ def S = Weyl();
396
+ setring S; S;
397
+ // monoidal localization
398
+ poly g1 = x+3;
399
+ poly g2 = x*y;
400
+ list L = g1,g2;
401
+ ncloc loc0 = L;
402
+ poly g = g1^2*g2;
403
+ poly f = Dx;
404
+ ncfrac frac0 = [0,0,f,g];
405
+ frac0.loc = loc0;
406
+ ncfrac rm = ensureLeftNcfrac(frac0);
407
+ print(rm);
408
+ rm.lnum*g-rm.lden*f;
409
+ // geometric localization
410
+ ncloc loc1 = ideal(x-1,y-3);
411
+ f = Dx;
412
+ g = x^2+y;
413
+ ncfrac frac1 = [0,0,f,g];
414
+ frac1.loc = loc1;
415
+ ncfrac rg = ensureLeftNcfrac(frac1);
416
+ print(rg);
417
+ rg.lnum*g-rg.lden*f;
418
+ // rational localization
419
+ intvec rat = 1;
420
+ ncloc loc2 = rat;
421
+ f = Dx+Dy;
422
+ g = x;
423
+ ncfrac frac2 = [0,0,f,g];
424
+ frac2.loc = loc2;
425
+ ncfrac rr = ensureLeftNcfrac(frac2);
426
+ print(rr);
427
+ rr.lnum*g-rr.lden*f;
428
+ }
429
+ //////////////////////////////////////////////////////////////////////
430
+ proc ensureRightNcfrac(ncfrac frac)
431
+ "USAGE: ensureLeftNcfrac(frac), ncfrac frac
432
+ PURPOSE: ensures that frac has a right representation (by computing it if not
433
+ alreaDy known)
434
+ RETURN: ncfrac, a representation of frac which has a right representation
435
+ EXAMPLE: "
436
+ {
437
+ testNcfrac(frac);
438
+ if (hasRightDenom(frac)) {
439
+ return (frac);
440
+ }
441
+ ncloc loc = frac.loc;
442
+ vector f = toVector(frac);
443
+ vector result = convertLeftToRightFraction(f, loc.locType, loc.locData);
444
+ return(ncfrac(list(result, loc)));
445
+ }
446
+ example
447
+ {
448
+ "EXAMPLE:"; echo = 2;
449
+ ring R = 0,(x,y,Dx,Dy),dp;
450
+ def S = Weyl();
451
+ setring S; S;
452
+ // monoidal localization
453
+ poly g = x;
454
+ poly f = Dx;
455
+ ncloc loc0 = g;
456
+ ncfrac frac0 = [g,f,0,0];
457
+ frac0.loc = loc0;
458
+ ncfrac rm = ensureRightNcfrac(frac0);
459
+ print(rm);
460
+ f*rm.rden-g*rm.rnum;
461
+ // geometric localization
462
+ g = x+y;
463
+ f = Dx+Dy;
464
+ ncloc loc1 = ideal(x-1,y-3);
465
+ ncfrac frac1 = [g,f,0,0];
466
+ frac1.loc = loc1;
467
+ ncfrac rg = ensureRightNcfrac(frac1);
468
+ print(rg);
469
+ f*rg.rden-g*rg.rnum;
470
+ // rational localization
471
+ intvec rat = 1;
472
+ f = Dx+Dy;
473
+ g = x;
474
+ ncloc loc2 = rat;
475
+ ncfrac frac2 = [g,f,0,0];
476
+ frac2.loc = loc2;
477
+ ncfrac rr = ensureRightNcfrac(frac2);
478
+ print(rr);
479
+ f*rr.rden-g*rr.rnum;
480
+ }
481
+ ////////// arithmetic ////////////////////////////////////////////////
482
+ static proc addNcfracs(ncfrac frac1, ncfrac frac2) {
483
+ testNcfrac(frac1);
484
+ testNcfrac(frac2);
485
+ ncloc loc = frac1.loc;
486
+ if (loc != frac2.loc) {
487
+ ERROR("cannot add fractions: incompatible localizations");
488
+ }
489
+ vector f1 = toVector(frac1);
490
+ vector f2 = toVector(frac2);
491
+ vector result = addLeftFractions(f1, f2, loc.locType, loc.locData, 1);
492
+ return(ncfrac(list(result, loc)));
493
+ }
494
+ //////////////////////////////////////////////////////////////////////
495
+ proc negateNcfrac(ncfrac frac)
496
+ "USAGE: negateNcfrac(frac), ncfrac frac
497
+ PURPOSE: compute the negative (i.e. additive inverse) of frac
498
+ RETURN: ncfrac
499
+ NOTE: returns (-1)*frac
500
+ EXAMPLE: example negateNcfrac; shows example"
501
+ {
502
+ ncfrac result = frac;
503
+ result.lnum = result.lnum * (-1);
504
+ result.rnum = result.rnum * (-1);
505
+ return(result);
506
+ }
507
+ example
508
+ {
509
+ "EXAMPLE:"; echo = 2;
510
+ ring R = 0,(x,y,Dx,Dy),dp;
511
+ def S = Weyl();
512
+ setring S;
513
+ poly g = x*y^2+4*x+7*y-98;
514
+ ncloc loc = g;
515
+ ncfrac frac = list([g, 13*x^2], loc);
516
+ frac;
517
+ ncfrac negFrac = negateNcfrac(frac);
518
+ negFrac;
519
+ frac + negFrac;
520
+ }
521
+ //////////////////////////////////////////////////////////////////////
522
+ static proc subtractNcfracs(ncfrac frac1, ncfrac frac2) {
523
+ testNcfrac(frac1);
524
+ testNcfrac(frac2);
525
+ if (frac1.loc != frac2.loc) {
526
+ ERROR("cannot subtract fractions: incompatible localizations");
527
+ }
528
+ return(frac1 + negateNcfrac(frac2));
529
+ }
530
+ //////////////////////////////////////////////////////////////////////
531
+ static proc multiplyNcfracs(ncfrac frac1, ncfrac frac2) {
532
+ testNcfrac(frac1);
533
+ testNcfrac(frac2);
534
+ ncloc loc = frac1.loc;
535
+ if (loc != frac2.loc) {
536
+ ERROR("cannot multiply fractions: incompatible localizations");
537
+ }
538
+ vector f1 = toVector(frac1);
539
+ vector f2 = toVector(frac2);
540
+ vector result = multiplyLeftFractions(f1, f2, loc.locType, loc.locData, 1);
541
+ return(ncfrac(list(result, loc)));
542
+ }
543
+ //////////////////////////////////////////////////////////////////////
544
+ proc isInvertibleNcfrac(ncfrac frac)
545
+ "USAGE: isInvertibleNcfrac(frac), ncfrac frac
546
+ PURPOSE: checks if frac is invertible
547
+ RETURN: int, 1 if frac is invertible, 0 otherwise
548
+ EXAMPLE: example isInvertibleNcfrac; shows example"
549
+ {
550
+ testNcfrac(frac);
551
+ poly num;
552
+ if (hasLeftDenom(frac)) { // frac has left representation
553
+ num = frac.lnum;
554
+ } else { // frac has right representation, but no left representation
555
+ num = frac.rnum;
556
+ }
557
+ return(isDenom(num, frac.loc));
558
+ }
559
+ example
560
+ {
561
+ "EXAMPLE:"; echo = 2;
562
+ ring R = 0,(x,y,Dx,Dy),dp;
563
+ def S = Weyl();
564
+ setring S;
565
+ ncloc loc = intvec(2);
566
+ ncfrac frac = list([y,y+1,0,0], loc);
567
+ isInvertibleNcfrac(frac);
568
+ frac = list([y,x+1,0,0], loc);
569
+ isInvertibleNcfrac(frac);
570
+ }
571
+ //////////////////////////////////////////////////////////////////////
572
+ proc invertNcfrac(ncfrac frac)
573
+ "USAGE: invertNcfrac(frac), ncfrac frac
574
+ PURPOSE: compute the inverse of frac
575
+ RETURN: ncfrac
576
+ NOTE: returns the zero fraction if frac is not invertible
577
+ EXAMPLE: example invertNcfrac; shows example"
578
+ {
579
+ ncfrac result;
580
+ if (!isInvertibleNcfrac(frac)) {
581
+ result = zeroNcfrac(frac.loc);
582
+ } else {
583
+ result = list([frac.lnum, frac.lden, frac.rden, frac.rnum], frac.loc);
584
+ }
585
+ return(result);
586
+ }
587
+ example
588
+ {
589
+ "EXAMPLE:"; echo = 2;
590
+ ring R = 0,(x,y,Dx,Dy),dp;
591
+ def S = Weyl();
592
+ setring S;
593
+ ncloc loc = intvec(2);
594
+ ncfrac frac1 = list([y,y+1,0,0], loc);
595
+ // frac1 is invertible
596
+ ncfrac inv = invertNcfrac(frac1);
597
+ inv;
598
+ ncfrac frac2 = list([y,x+1,0,0], loc);
599
+ // frac2 is not invertible
600
+ inv = invertNcfrac(frac2);
601
+ inv;
602
+ }
603
+ //////////////////////////////////////////////////////////////////////
604
+ static proc divideNcfracs(ncfrac frac1, ncfrac frac2) {
605
+ testNcfrac(frac1);
606
+ testNcfrac(frac2);
607
+ if (frac1.loc != frac2.loc) {
608
+ ERROR("cannot multiply fractions: incompatible localizations");
609
+ }
610
+ if(!isInvertibleNcfrac(frac2)) {
611
+ ERROR("division by non-invertible fraction");
612
+ } else {
613
+ return(frac1 * invertNcfrac(frac2));
614
+ }
615
+ }
616
+ //////////////////////////////////////////////////////////////////////
617
+ ////////// internal testing procedures ///////////////////////////////
618
+ static proc testHasLeftHasRight()
619
+ {
620
+ print(" testing ncfrac hasLeftDenom/hasRightDenom...");
621
+ ring r = 0,(x,y,Dx,Dy),dp;
622
+ def R = Weyl();
623
+ setring R;
624
+ ncloc loc = ideal(x-3,y+7);
625
+ ncfrac noLeft = list([0,0,3*y*Dx,x+2], loc);
626
+ if (hasLeftDenom(noLeft)) {
627
+ ERROR("hasLeftDenom noLeft failed");
628
+ }
629
+ ncfrac left = list([1,Dx,Dx,1], loc);
630
+ if (!hasLeftDenom(left)) {
631
+ ERROR("hasLeftDenom left failed");
632
+ }
633
+ ncfrac noRight = list([x+2,3*y*Dx,0,0], loc);
634
+ if (hasRightDenom(noRight)) {
635
+ ERROR("hasRightDenom noRight failed");
636
+ }
637
+ ncfrac right = list([1,Dx,Dx,1], loc);
638
+ if (!hasRightDenom(right)) {
639
+ ERROR("hasRightDenom right failed");
640
+ }
641
+ print(" ncloc hasLeftDenom/hasRightDenom OK");
642
+ }
643
+ //////////////////////////////////////////////////////////////////////
644
+ static proc testIsZeroIsOne()
645
+ {
646
+ print(" testing ncfrac isZeroNcfrac/isOneNcfrac...");
647
+ ring Q = (0,q),(x,y,Qx,Qy),dp;
648
+ matrix C[4][4] = UpOneMatrix(4);
649
+ C[1,3] = q;
650
+ C[2,4] = q;
651
+ def ncQ = nc_algebra(C,0);
652
+ setring ncQ;
653
+ ncloc loc = intvec(2);
654
+ ncfrac frac = list([y^2+7*y+1,0,0,0], loc);
655
+ if (!isZeroNcfrac(frac)) {
656
+ ERROR("isZeroNcfrac zero failed");
657
+ }
658
+ frac.lnum = 42*y*Qy+7*Qx+3*x+7;
659
+ if (isZeroNcfrac(frac)) {
660
+ ERROR("isZeroNcfrac non-zero failed");
661
+ }
662
+ frac.lnum = frac.lden;
663
+ //frac = list([y^2+7*y+1,y^2+7*y+1,0,0], loc);
664
+ if (!isOneNcfrac(frac)) {
665
+ ERROR("isOneNcfrac one failed");
666
+ }
667
+ frac.lnum = 42*y*Qy+7*Qx+3*x+7;
668
+ if (isOneNcfrac(frac)) {
669
+ ERROR("isOneNcfrac non-one failed");
670
+ }
671
+ print(" ncloc isZeroNcfrac/isOneNcfrac OK");
672
+ }
673
+ //////////////////////////////////////////////////////////////////////
674
+ static proc testNcFracCreation() {
675
+ print(" testing ncfrac creation...");
676
+ ring r = 0,(x,y,Dx,Dy),dp;
677
+ def R = Weyl();
678
+ setring R;
679
+ ncloc loc = list(x);
680
+ ncfrac frac1 = [x,Dx,0,0]; // create from vector
681
+ frac1.loc = loc;
682
+ test(frac1);
683
+ ncfrac frac2 = 7; // create from interface
684
+ frac2.loc = loc;
685
+ test(frac2);
686
+ ncfrac frac3 = 4*x*Dx*Dy*Dy; // create from poly
687
+ frac3.loc = loc;
688
+ test(frac3);
689
+ ncfrac frac4 = list([x^2,Dx], loc); // create from list with vector
690
+ test(frac4);
691
+ ncfrac frac5 = list(42, loc); // create from list with int
692
+ test(frac5);
693
+ print(" ncfrac creation OK");
694
+ }
695
+ //////////////////////////////////////////////////////////////////////
696
+ static proc testNcfracComparison() {
697
+ print(" testing ncfrac comparison...");
698
+ ring r = 0,(x,y,Dx,Dy),dp;
699
+ def R = Weyl();
700
+ setring R;
701
+ // monoidal
702
+ poly g1 = x*y+3;
703
+ poly g2 = y^3;
704
+ ncloc locm = list(g1, g2);
705
+ ncfrac fracm1 = list([g1,Dx,0,0], locm);
706
+ ncfrac fracm2 = list([g1*g2,g2*Dx,0,0], locm);
707
+ ncfrac fracm3 = list([g1*g2,g1*Dx+3,0,0], locm);
708
+ if (!(fracm1 == fracm2)) {
709
+ ERROR("Weyl monoidal positive basic comparison error");
710
+ }
711
+ if (fracm1 == fracm3) {
712
+ ERROR("Weyl monoidal first negative basic comparison error");
713
+ }
714
+ if (fracm2 == fracm3) {
715
+ ERROR("Weyl monoidal second negative basic comparison error");
716
+ }
717
+ // geometric
718
+ ideal p = x+5, y-2;
719
+ ncloc locg = p;
720
+ ncfrac fracg1 = list([g1,Dx,0,0], locg);
721
+ ncfrac fracg2 = list([g1*g2,g2*Dx,0,0], locg);
722
+ ncfrac fracg3 = list([g1*g2,g1*Dx+3,0,0], locg);
723
+ if (!(fracg1 == fracg2)) {
724
+ ERROR("Weyl geometric positive basic comparison error");
725
+ }
726
+ if (fracg1 == fracg3) {
727
+ ERROR("Weyl geometric first negative basic comparison error");
728
+ }
729
+ if (fracg2 == fracg3) {
730
+ ERROR("Weyl geometric second negative basic comparison error");
731
+ }
732
+ // rational
733
+ intvec rat = 1,4;
734
+ ncloc locr = rat;
735
+ ncfrac fracr1 = list([x+Dy,Dx,0,0], locr);
736
+ ncfrac fracr2 = list([x*Dy*(x+Dy),x*Dx*Dy,0,0], locr);
737
+ ncfrac fracr3 = list([Dy*x*(x+Dy),x*Dx*Dy+1,0,0], locr);
738
+ if (!(fracr1 == fracr2)) {
739
+ ERROR("Weyl rational positive basic comparison error");
740
+ }
741
+ if (fracr1 == fracr3) {
742
+ ERROR("Weyl rational first negative basic comparison error");
743
+ }
744
+ if (fracr2 == fracr3) {
745
+ ERROR("Weyl rational second negative basic comparison error");
746
+ }
747
+ print(" ncfrac comparison OK");
748
+ }
749
+ //////////////////////////////////////////////////////////////////////
750
+ static proc testNcfracAddition() {
751
+ print(" testing ncfrac addition...");
752
+ ring R = 0,(x,y,Dx,Dy),dp;
753
+ def S = Weyl();
754
+ setring S;
755
+ poly g1 = x+3;
756
+ poly g2 = x*y+y;
757
+ ncloc loc = list(g1,g2);
758
+ ncfrac frac1 = list([g1,Dx,0,0], loc);
759
+ ncfrac frac2 = list([g2,Dy,0,0], loc);
760
+ ncfrac resu = frac1 + frac2;
761
+ if (resu.lden != g1*g2 || resu.lnum != g2*Dx+g1*Dy) {
762
+ ERROR("Weyl monoidal addition error");
763
+ }
764
+ loc = ideal(x-1,y-3);
765
+ frac1.loc = loc;
766
+ frac2.loc = loc;
767
+ resu = frac1 + frac2;
768
+ if (resu.lden != g1*g2 || resu.lnum != g2*Dx+g1*Dy) {
769
+ ERROR("Weyl geometric maximal addition error");
770
+ }
771
+ loc = ideal(y+3);
772
+ frac1.loc = loc;
773
+ frac2.loc = loc;
774
+ resu = frac1 + frac2;
775
+ if (resu.lden != g1*g2 || resu.lnum != g2*Dx+g1*Dy) {
776
+ ERROR("Weyl geometric prime addition error");
777
+ }
778
+ loc = intvec(2);
779
+ frac1 = list([y^2+y+1,Dx,0,0], loc);
780
+ frac2 = list([y-2,Dy,0,0], loc);
781
+ resu = frac1 + frac2;
782
+ if (resu.lden != (y^2+y+1)*(y-2) || resu.lnum != (y-2)*Dx+(y^2+y+1)*Dy) {
783
+ ERROR("Weyl rational addition error");
784
+ }
785
+ print(" ncfrac addition OK");
786
+ }
787
+ //////////////////////////////////////////////////////////////////////
788
+ static proc testNcfracSubtraction() {
789
+ print(" testing ncfrac subtraction...");
790
+ ring R = 0,(x,y,Dx,Dy),dp;
791
+ def S = Weyl();
792
+ setring S;
793
+ poly g1 = x+3;
794
+ poly g2 = x*y+y;
795
+ ncloc loc = list(g1,g2);
796
+ ncfrac frac1 = list([g1,Dx,0,0], loc);
797
+ ncfrac frac2 = list([g2,-Dy,0,0], loc);
798
+ ncfrac resu = frac1 - frac2;
799
+ if (resu.lden != g1*g2 || resu.lnum != g2*Dx+g1*Dy) {
800
+ ERROR("Weyl monoidal subtraction error");
801
+ }
802
+ loc = ideal(x-1,y-3);
803
+ frac1.loc = loc;
804
+ frac2.loc = loc;
805
+ resu = frac1 - frac2;
806
+ if (resu.lden != g1*g2 || resu.lnum != g2*Dx+g1*Dy) {
807
+ ERROR("Weyl geometric subtraction error");
808
+ }
809
+ loc = intvec(2);
810
+ frac1 = list([y^2+y+1,Dx,0,0], loc);
811
+ frac2 = list([y-2,-Dy,0,0], loc);
812
+ resu = frac1 - frac2;
813
+ if (resu.lden != (y^2+y+1)*(y-2) || resu.lnum != (y-2)*Dx+(y^2+y+1)*Dy) {
814
+ ERROR("Weyl rational subtraction error");
815
+ }
816
+ print(" ncfrac subtraction OK");
817
+ }
818
+ //////////////////////////////////////////////////////////////////////
819
+ static proc testNcfracMultiplication() {
820
+ print(" testing ncfrac multiplication...");
821
+ ring R = 0,(x,y,Dx,Dy),dp;
822
+ def S = Weyl();
823
+ setring S;
824
+ // monoidal localization
825
+ poly g1 = x+3;
826
+ poly g2 = x*y+y;
827
+ ncloc loc = list(g1,g2);
828
+ ncfrac frac1 = list([g1,Dx,0,0], loc);
829
+ ncfrac frac2 = list([g2,Dy,0,0], loc);
830
+ ncfrac resu = frac1 * frac2;
831
+ if (resu.lden != g1*g2^2 || resu.lnum != x*y*Dx*Dy+y*Dx*Dy-y*Dy) {
832
+ ERROR("Weyl monoidal multiplication error");
833
+ }
834
+ // geometric localization
835
+ loc = ideal(x-1,y-3);
836
+ frac1.loc = loc;
837
+ frac2.loc = loc;
838
+ resu = frac1 * frac2;
839
+ if (resu.lden != g1*g2*(x+1) || resu.lnum != x*Dx*Dy+Dx*Dy-Dy) {
840
+ ERROR("Weyl geometric multiplication error");
841
+ }
842
+ // rational localization
843
+ loc = intvec(2);
844
+ frac1 = list([y^2+y+1,Dx,0,0], loc);
845
+ frac2 = list([y-2,Dy,0,0], loc);
846
+ resu = frac1 * frac2;
847
+ if (resu.lden != (y^2+y+1)*(y-2) || resu.lnum != Dx*Dy) {
848
+ ERROR("Weyl rational multiplication (1*2) error");
849
+ }
850
+ resu = frac2 * frac1;
851
+ if (resu.lden != (y^2+y+1)^2*(y-2) || resu.lnum != y^2*Dx*Dy+y*Dx*Dy-2*y*Dx+Dx*Dy-Dx) {
852
+ ERROR("Weyl rational multiplication (2*1) error");
853
+ }
854
+ print(" ncfrac multiplication OK");
855
+ }
856
+ //////////////////////////////////////////////////////////////////////
857
+ static proc testNcfracDivision() {
858
+ print(" testing ncfrac division...");
859
+ ring R = 0,(x,y,Dx,Dy),dp;
860
+ def S = Weyl();
861
+ setring S;
862
+ // monoidal localization
863
+ poly g1 = x+3;
864
+ poly g2 = x*y+y;
865
+ ncloc loc = list(g1,g2);
866
+ ncfrac frac1 = list([g1,Dx,0,0], loc);
867
+ ncfrac frac2 = list([g2,g1,0,0], loc);
868
+ ncfrac resu = frac1 / frac2;
869
+ if (resu.lden != g1^3 || resu.lnum != x^2*y*Dx+4*x*y*Dx+3*y*Dx+2*y) {
870
+ ERROR("Weyl monoidal division error");
871
+ }
872
+ // geometric localization
873
+ loc = ideal(x-1,y-3);
874
+ frac1.loc = loc;
875
+ frac2.loc = loc;
876
+ resu = frac1 / frac2;
877
+ if (resu.lden != g1^3 || resu.lnum != x^2*y*Dx+4*x*y*Dx+3*y*Dx+2*y) {
878
+ ERROR("Weyl geometric division error");
879
+ }
880
+ // rational localization
881
+ loc = intvec(2);
882
+ frac1 = list([y^2+y+1,Dx,0,0], loc);
883
+ frac2 = list([y-2,3*y^2-21y+2,0,0], loc);
884
+ resu = frac1 / frac2;
885
+ if (resu.lden != 3*y^4-18*y^3-16*y^2-19*y+2 || resu.lnum != (y-2)*Dx) {
886
+ ERROR("Weyl geometric division error");
887
+ }
888
+ print(" ncfrac division OK");
889
+ }
890
+ //////////////////////////////////////////////////////////////////////
891
+ static proc testNcfracInversion() {
892
+ print(" testing ncfrac invertNcfrac...");
893
+ ring R = 0,(x,y,Dx,Dy),dp;
894
+ def S = Weyl();
895
+ setring S;
896
+ poly g1 = x+3;
897
+ poly g2 = x*y;
898
+ ncfrac frac = list([g1*g2, 17, 0, 0], ncloc(list(g1,g2)));
899
+ frac = invertNcfrac(frac);
900
+ if (frac.lden != 17 || frac.lnum != g1*g2) {
901
+ ERROR("Weyl monoidal inversion error");
902
+ }
903
+ frac = list([g1, 3*x, 0, 0], ncloc(ideal(x-1,y)));
904
+ frac = invertNcfrac(frac);
905
+ if (frac.lden != 3*x || frac.lnum != x+3) {
906
+ ERROR("Weyl geometric inversion error");
907
+ }
908
+ frac = list([g1*g2, y, 0, 0], ncloc(intvec(1,2)));
909
+ frac = invertNcfrac(frac);
910
+ if (frac.lden != y || frac.lnum != g1*g2) {
911
+ ERROR("Weyl rational inversion error");
912
+ }
913
+ print(" ncfrac invertNcfrac OK");
914
+ }
915
+ //////////////////////////////////////////////////////////////////////
916
+ static proc testEnsureRightNcfrac() {
917
+ print(" testing ncfrac ensureRightNcfrac...");
918
+ // Weyl
919
+ ring W = 0,(x,y,Dx,Dy),dp;
920
+ def ncW = Weyl();
921
+ setring ncW;
922
+ //// monoidal localization
923
+ ncloc monloc = list(x);
924
+ ncfrac monfrac = list([x,Dx,0,0], monloc);
925
+ ncfrac monresult = ensureRightNcfrac(monfrac);
926
+ if (!status(monresult)[1]) {
927
+ ERROR("Weyl monoidal ensureRightNcfrac failed");
928
+ }
929
+ //// geometrical localization
930
+ ncloc geoloc = ideal(x-1,y-3);
931
+ ncfrac geofrac = list([x+y,Dx+Dy,0,0], geoloc);
932
+ ncfrac georesult = ensureRightNcfrac(geofrac);
933
+ if (!status(georesult)[1]) {
934
+ ERROR("Weyl geometric ensureRightNcfrac failed");
935
+ }
936
+ //// rational localization
937
+ ncloc ratloc = intvec(1);
938
+ ncfrac ratfrac = list([x,Dx+Dy], ratloc);
939
+ ncfrac ratresult = ensureRightNcfrac(ratfrac);
940
+ if (!status(ratresult)[1]) {
941
+ ERROR("Weyl rational ensureRightNcfrac failed");
942
+ }
943
+ // shift rational localization
944
+ ring S = 0,(x,y,Sx,Sy),dp;
945
+ matrix D[4][4];
946
+ D[1,3] = Sx;
947
+ D[2,4] = Sy;
948
+ def ncS = nc_algebra(1, D);
949
+ setring ncS;
950
+ ncfrac shiftfrac = list([x,Sx+Sy], ratloc);
951
+ ncfrac shiftresult = ensureRightNcfrac(shiftfrac);
952
+ if (!status(shiftresult)[1]) {
953
+ ERROR("Shift rational ensureRightNcfrac failed");
954
+ }
955
+ // q-shift rational localization
956
+ ring Q = (0,q),(x,y,Qx,Qy),dp;
957
+ matrix C[4][4] = UpOneMatrix(4);
958
+ C[1,3] = q;
959
+ C[2,4] = q;
960
+ def ncQ = nc_algebra(C, 0);
961
+ setring ncQ;
962
+ ncfrac qshiftfrac = list([x,Qx+Qy], ratloc);
963
+ ncfrac qshiftresult = ensureRightNcfrac(qshiftfrac);
964
+ if (!status(qshiftresult)[1]) {
965
+ ERROR("q-shift rational ensureRightNcfrac failed");
966
+ }
967
+ print(" ncfrac ensureRightNcfrac OK");
968
+ }
969
+ //////////////////////////////////////////////////////////////////////
970
+ static proc testEnsureLeftNcfrac() {
971
+ print(" testing ncfrac ensureLeftNcfrac...");
972
+ // Weyl
973
+ ring W = 0,(x,y,Dx,Dy),dp;
974
+ def ncW = Weyl();
975
+ setring ncW;
976
+ //// monoidal localization
977
+ ncloc monloc = list(x+3, x*y);
978
+ ncfrac monfrac = list([0,0,Dx,(x+3)^2*x], monloc);
979
+ ncfrac monresult = ensureLeftNcfrac(monfrac);
980
+ if (!status(monresult)[1]) {
981
+ ERROR("Weyl monoidal ensureLeftNcfrac failed");
982
+ }
983
+ //// geometric localization
984
+ ncloc geoloc = ideal(x-1,y-3);
985
+ ncfrac geofrac = list([0,0,Dx,x^2+y], geoloc);
986
+ ncfrac georesult = ensureLeftNcfrac(geofrac);
987
+ if (!status(georesult)[1]) {
988
+ ERROR("Weyl monoidal ensureLeftNcfrac failed");
989
+ }
990
+ //// rational localization
991
+ ncloc ratloc = intvec(1);
992
+ ncfrac ratfrac = list([0,0,Dx+Dy,x], ratloc);
993
+ ncfrac ratresult = ensureLeftNcfrac(ratfrac);
994
+ if (!status(ratresult)[1]) {
995
+ ERROR("Weyl monoidal ensureLeftNcfrac failed");
996
+ }
997
+ // shift rational localization
998
+ ring S = 0,(x,y,Sx,Sy),dp;
999
+ matrix D[4][4];
1000
+ D[1,3] = Sx;
1001
+ D[2,4] = Sy;
1002
+ def ncS = nc_algebra(1, D);
1003
+ setring ncS;
1004
+ ncfrac shiftfrac = list([0,0,Sx+Sy,x], ratloc);
1005
+ ncfrac shiftresult = ensureLeftNcfrac(shiftfrac);
1006
+ if (!status(shiftresult)[1]) {
1007
+ ERROR("Shift rational ensureLeftNcfrac failed");
1008
+ }
1009
+ // q-shift rational localization
1010
+ ring Q = (0,q),(x,y,Qx,Qy),dp;
1011
+ matrix C[4][4] = UpOneMatrix(4);
1012
+ C[1,3] = q;
1013
+ C[2,4] = q;
1014
+ def ncQ = nc_algebra(C, 0);
1015
+ setring ncQ;
1016
+ ncfrac qshiftfrac = list([0,0,Qx+Qy,x], ratloc);
1017
+ ncfrac qshiftresult = ensureLeftNcfrac(qshiftfrac);
1018
+ if (!status(qshiftresult)[1]) {
1019
+ ERROR("q-shift rational ensureLeftNcfrac failed");
1020
+ }
1021
+ print(" ncfrac ensureLeftNcfrac OK");
1022
+ }
1023
+ //////////////////////////////////////////////////////////////////////