nerdamer 1.1.13 → 2.0.0-rc.2

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.
Files changed (387) hide show
  1. package/BREAKING_CHANGES.md +244 -5
  2. package/LICENSE.md +184 -0
  3. package/README.md +232 -318
  4. package/dist/bundle.js +2 -0
  5. package/dist/bundle.js.LICENSE.txt +7 -0
  6. package/dist/parser.js +2 -0
  7. package/dist/parser.js.LICENSE.txt +7 -0
  8. package/docs-data/parser-functions.json +2248 -0
  9. package/index.d.ts +10 -426
  10. package/output/algebra/adapters.d.ts +3 -0
  11. package/output/algebra/adapters.js +11 -0
  12. package/output/algebra/algorithms/arith.d.ts +84 -0
  13. package/output/algebra/algorithms/arith.js +324 -0
  14. package/output/algebra/algorithms/groebnerBase.d.ts +161 -0
  15. package/output/algebra/algorithms/groebnerBase.js +929 -0
  16. package/output/algebra/dispatch.d.ts +1 -0
  17. package/output/algebra/dispatch.js +25 -0
  18. package/output/algebra/factor/factor.d.ts +77 -0
  19. package/output/algebra/factor/factor.js +245 -0
  20. package/output/algebra/gcd/gcd.d.ts +30 -0
  21. package/output/algebra/gcd/gcd.js +95 -0
  22. package/output/algebra/groebner.d.ts +21 -0
  23. package/output/algebra/groebner.js +36 -0
  24. package/output/algebra/partfrac.d.ts +19 -0
  25. package/output/algebra/partfrac.js +365 -0
  26. package/output/algebra/polynomial/ModularSparsePolynomial.d.ts +131 -0
  27. package/output/algebra/polynomial/ModularSparsePolynomial.js +378 -0
  28. package/output/algebra/polynomial/ModularSparsePolynomialFactor.d.ts +40 -0
  29. package/output/algebra/polynomial/ModularSparsePolynomialFactor.js +661 -0
  30. package/output/algebra/polynomial/SparsePolynomialFactor.d.ts +64 -0
  31. package/output/algebra/polynomial/SparsePolynomialFactor.js +492 -0
  32. package/output/algebra/polynomial/SparsePolynomialGcd.d.ts +29 -0
  33. package/output/algebra/polynomial/SparsePolynomialGcd.js +259 -0
  34. package/output/algebra/polynomial/SparsePolynomialMultivariateFactor.d.ts +82 -0
  35. package/output/algebra/polynomial/SparsePolynomialMultivariateFactor.js +604 -0
  36. package/output/algebra/polynomial/modularGcd.d.ts +40 -0
  37. package/output/algebra/polynomial/modularGcd.js +365 -0
  38. package/output/algebra/polynomialize.d.ts +20 -0
  39. package/output/algebra/polynomialize.js +26 -0
  40. package/output/algebra/simplify/complexsimp.d.ts +7 -0
  41. package/output/algebra/simplify/complexsimp.js +24 -0
  42. package/output/algebra/simplify/factorCommon.d.ts +13 -0
  43. package/output/algebra/simplify/factorCommon.js +136 -0
  44. package/output/algebra/simplify/funcsimp.d.ts +26 -0
  45. package/output/algebra/simplify/funcsimp.js +633 -0
  46. package/output/algebra/simplify/invtrigrewrite.d.ts +10 -0
  47. package/output/algebra/simplify/invtrigrewrite.js +96 -0
  48. package/output/algebra/simplify/ratsimp.d.ts +21 -0
  49. package/output/algebra/simplify/ratsimp.js +140 -0
  50. package/output/algebra/simplify/simplify.d.ts +25 -0
  51. package/output/algebra/simplify/simplify.js +237 -0
  52. package/output/algebra/simplify/trigreduce.d.ts +38 -0
  53. package/output/algebra/simplify/trigreduce.js +424 -0
  54. package/output/algebra/simplify/trigrewrite.d.ts +17 -0
  55. package/output/algebra/simplify/trigrewrite.js +156 -0
  56. package/output/algebra/simplify/trigsimp.d.ts +11 -0
  57. package/output/algebra/simplify/trigsimp.js +369 -0
  58. package/output/algebra/simplify/utils.d.ts +32 -0
  59. package/output/algebra/simplify/utils.js +56 -0
  60. package/output/algebra/utils.d.ts +32 -0
  61. package/output/algebra/utils.js +48 -0
  62. package/output/api/advanced.d.ts +8 -0
  63. package/output/api/advanced.js +18 -0
  64. package/output/api/algebra.d.ts +17 -0
  65. package/output/api/algebra.js +35 -0
  66. package/output/api/assumptions.d.ts +4 -0
  67. package/output/api/assumptions.js +11 -0
  68. package/output/api/calculus.d.ts +10 -0
  69. package/output/api/calculus.js +22 -0
  70. package/output/api/core.d.ts +17 -0
  71. package/output/api/core.js +41 -0
  72. package/output/api/debug.d.ts +16 -0
  73. package/output/api/debug.js +23 -0
  74. package/output/api/languages/deu.d.ts +3 -0
  75. package/output/api/languages/deu.js +266 -0
  76. package/output/api/languages/fra.d.ts +3 -0
  77. package/output/api/languages/fra.js +266 -0
  78. package/output/api/languages/ita.d.ts +3 -0
  79. package/output/api/languages/ita.js +266 -0
  80. package/output/api/languages/nld.d.ts +3 -0
  81. package/output/api/languages/nld.js +266 -0
  82. package/output/api/languages/por.d.ts +3 -0
  83. package/output/api/languages/por.js +266 -0
  84. package/output/api/languages/spa.d.ts +3 -0
  85. package/output/api/languages/spa.js +266 -0
  86. package/output/api/parser.d.ts +93 -0
  87. package/output/api/parser.js +18 -0
  88. package/output/api/solve.d.ts +10 -0
  89. package/output/api/solve.js +17 -0
  90. package/output/api/structures.d.ts +10 -0
  91. package/output/api/structures.js +23 -0
  92. package/output/calculus/adapters.d.ts +8 -0
  93. package/output/calculus/adapters.js +41 -0
  94. package/output/calculus/derivative/diff.d.ts +30 -0
  95. package/output/calculus/derivative/diff.js +241 -0
  96. package/output/calculus/dispatch.d.ts +1 -0
  97. package/output/calculus/dispatch.js +25 -0
  98. package/output/calculus/fresnel.d.ts +16 -0
  99. package/output/calculus/fresnel.js +39 -0
  100. package/output/calculus/integrate/byParts.d.ts +18 -0
  101. package/output/calculus/integrate/byParts.js +339 -0
  102. package/output/calculus/integrate/bySubstitution.d.ts +135 -0
  103. package/output/calculus/integrate/bySubstitution.js +411 -0
  104. package/output/calculus/integrate/integrate.d.ts +38 -0
  105. package/output/calculus/integrate/integrate.js +652 -0
  106. package/output/calculus/integrate/integrationTable.d.ts +2 -0
  107. package/output/calculus/integrate/integrationTable.js +914 -0
  108. package/output/calculus/integrate/utils.d.ts +28 -0
  109. package/output/calculus/integrate/utils.js +96 -0
  110. package/output/calculus/laplace/ilaplace.d.ts +31 -0
  111. package/output/calculus/laplace/ilaplace.js +192 -0
  112. package/output/calculus/laplace/ilaplaceTable.d.ts +2 -0
  113. package/output/calculus/laplace/ilaplaceTable.js +200 -0
  114. package/output/calculus/laplace/laplace.d.ts +22 -0
  115. package/output/calculus/laplace/laplace.js +109 -0
  116. package/output/calculus/laplace/laplaceTable.d.ts +2 -0
  117. package/output/calculus/laplace/laplaceTable.js +187 -0
  118. package/output/calculus/limit/limit.d.ts +35 -0
  119. package/output/calculus/limit/limit.js +1183 -0
  120. package/output/calculus/limit/limitsTable.d.ts +2 -0
  121. package/output/calculus/limit/limitsTable.js +7 -0
  122. package/output/core/Settings.d.ts +32 -0
  123. package/output/core/Settings.js +68 -0
  124. package/output/core/classes/assumption/Assumption.d.ts +218 -0
  125. package/output/core/classes/assumption/Assumption.js +609 -0
  126. package/output/core/classes/assumption/assertiveFunctions.d.ts +6 -0
  127. package/output/core/classes/assumption/assertiveFunctions.js +64 -0
  128. package/output/core/classes/assumption/assume.d.ts +90 -0
  129. package/output/core/classes/assumption/assume.js +145 -0
  130. package/output/core/classes/assumption/dispatch.d.ts +1 -0
  131. package/output/core/classes/assumption/dispatch.js +11 -0
  132. package/output/core/classes/collection/Collection.d.ts +107 -0
  133. package/output/core/classes/collection/Collection.js +240 -0
  134. package/output/core/classes/complex/Complex.d.ts +109 -0
  135. package/output/core/classes/complex/Complex.js +153 -0
  136. package/output/core/classes/decimalSet/DecimalSet.d.ts +226 -0
  137. package/output/core/classes/decimalSet/DecimalSet.js +454 -0
  138. package/output/core/classes/dictionary/Dictionary.d.ts +102 -0
  139. package/output/core/classes/dictionary/Dictionary.js +216 -0
  140. package/output/core/classes/equation/Equation.d.ts +256 -0
  141. package/output/core/classes/equation/Equation.js +350 -0
  142. package/output/core/classes/expression/CoeffObject.d.ts +100 -0
  143. package/output/core/classes/expression/CoeffObject.js +197 -0
  144. package/output/core/classes/expression/Expression.d.ts +1691 -0
  145. package/output/core/classes/expression/Expression.js +2381 -0
  146. package/output/core/classes/expression/analysis.d.ts +25 -0
  147. package/output/core/classes/expression/analysis.js +218 -0
  148. package/output/core/classes/expression/collect.d.ts +9 -0
  149. package/output/core/classes/expression/collect.js +49 -0
  150. package/output/core/classes/expression/format.d.ts +54 -0
  151. package/output/core/classes/expression/format.js +340 -0
  152. package/output/core/classes/expression/products.d.ts +23 -0
  153. package/output/core/classes/expression/products.js +115 -0
  154. package/output/core/classes/expression/shortcuts.d.ts +35 -0
  155. package/output/core/classes/expression/shortcuts.js +129 -0
  156. package/output/core/classes/expression/traversal.d.ts +31 -0
  157. package/output/core/classes/expression/traversal.js +216 -0
  158. package/output/core/classes/expression/trig.d.ts +25 -0
  159. package/output/core/classes/expression/trig.js +40 -0
  160. package/output/core/classes/expression/utils.d.ts +61 -0
  161. package/output/core/classes/expression/utils.js +235 -0
  162. package/output/core/classes/lookupTable/LookupTable.d.ts +12 -0
  163. package/output/core/classes/lookupTable/LookupTable.js +55 -0
  164. package/output/core/classes/matrix/Matrix.d.ts +227 -0
  165. package/output/core/classes/matrix/Matrix.js +901 -0
  166. package/output/core/classes/matrix/Sylvester.d.ts +11 -0
  167. package/output/core/classes/matrix/Sylvester.js +54 -0
  168. package/output/core/classes/matrix/dispatch.d.ts +1 -0
  169. package/output/core/classes/matrix/dispatch.js +19 -0
  170. package/output/core/classes/matrix/functions.d.ts +28 -0
  171. package/output/core/classes/matrix/functions.js +57 -0
  172. package/output/core/classes/matrix/utils.d.ts +9 -0
  173. package/output/core/classes/matrix/utils.js +22 -0
  174. package/output/core/classes/parser/Parser.d.ts +493 -0
  175. package/output/core/classes/parser/Parser.js +1863 -0
  176. package/output/core/classes/parser/Token.d.ts +58 -0
  177. package/output/core/classes/parser/Token.js +137 -0
  178. package/output/core/classes/parser/constants.d.ts +162 -0
  179. package/output/core/classes/parser/constants.js +229 -0
  180. package/output/core/classes/parser/controlFlowSignals.d.ts +38 -0
  181. package/output/core/classes/parser/controlFlowSignals.js +60 -0
  182. package/output/core/classes/parser/helpers.d.ts +21 -0
  183. package/output/core/classes/parser/helpers.js +42 -0
  184. package/output/core/classes/parser/operations/add.d.ts +15 -0
  185. package/output/core/classes/parser/operations/add.js +236 -0
  186. package/output/core/classes/parser/operations/comma.d.ts +7 -0
  187. package/output/core/classes/parser/operations/comma.js +11 -0
  188. package/output/core/classes/parser/operations/compare.d.ts +21 -0
  189. package/output/core/classes/parser/operations/compare.js +474 -0
  190. package/output/core/classes/parser/operations/divide.d.ts +2 -0
  191. package/output/core/classes/parser/operations/divide.js +72 -0
  192. package/output/core/classes/parser/operations/functions.d.ts +46 -0
  193. package/output/core/classes/parser/operations/functions.js +438 -0
  194. package/output/core/classes/parser/operations/multiply.d.ts +11 -0
  195. package/output/core/classes/parser/operations/multiply.js +328 -0
  196. package/output/core/classes/parser/operations/power.d.ts +48 -0
  197. package/output/core/classes/parser/operations/power.js +673 -0
  198. package/output/core/classes/parser/operations/subtract.d.ts +3 -0
  199. package/output/core/classes/parser/operations/subtract.js +36 -0
  200. package/output/core/classes/parser/preprocess.d.ts +7 -0
  201. package/output/core/classes/parser/preprocess.js +246 -0
  202. package/output/core/classes/parser/scripting/controlFlow.d.ts +23 -0
  203. package/output/core/classes/parser/scripting/controlFlow.js +279 -0
  204. package/output/core/classes/parser/scripting/deferred.d.ts +4 -0
  205. package/output/core/classes/parser/scripting/deferred.js +65 -0
  206. package/output/core/classes/parser/scripting/dispatch.d.ts +1 -0
  207. package/output/core/classes/parser/scripting/dispatch.js +62 -0
  208. package/output/core/classes/parser/scripting/evaluate.d.ts +23 -0
  209. package/output/core/classes/parser/scripting/evaluate.js +128 -0
  210. package/output/core/classes/parser/scripting/functions.d.ts +14 -0
  211. package/output/core/classes/parser/scripting/functions.js +59 -0
  212. package/output/core/classes/parser/scripting/scope.d.ts +8 -0
  213. package/output/core/classes/parser/scripting/scope.js +132 -0
  214. package/output/core/classes/parser/types.d.ts +130 -0
  215. package/output/core/classes/parser/types.js +2 -0
  216. package/output/core/classes/parser/wrappers/IndexedReference.d.ts +31 -0
  217. package/output/core/classes/parser/wrappers/IndexedReference.js +68 -0
  218. package/output/core/classes/parser/wrappers/KeyValuePair.d.ts +24 -0
  219. package/output/core/classes/parser/wrappers/KeyValuePair.js +51 -0
  220. package/output/core/classes/polynomial/Polynomial.d.ts +504 -0
  221. package/output/core/classes/polynomial/Polynomial.js +1195 -0
  222. package/output/core/classes/polynomial/SparsePolynomial.d.ts +221 -0
  223. package/output/core/classes/polynomial/SparsePolynomial.js +824 -0
  224. package/output/core/classes/polynomial/SparsePolynomialAdapter.d.ts +56 -0
  225. package/output/core/classes/polynomial/SparsePolynomialAdapter.js +241 -0
  226. package/output/core/classes/polynomial/Term.d.ts +222 -0
  227. package/output/core/classes/polynomial/Term.js +430 -0
  228. package/output/core/classes/polynomial/adapters.d.ts +18 -0
  229. package/output/core/classes/polynomial/adapters.js +33 -0
  230. package/output/core/classes/polynomial/dispatch.d.ts +1 -0
  231. package/output/core/classes/polynomial/dispatch.js +14 -0
  232. package/output/core/classes/polynomial/functions.d.ts +77 -0
  233. package/output/core/classes/polynomial/functions.js +189 -0
  234. package/output/core/classes/polynomial/utils.d.ts +62 -0
  235. package/output/core/classes/polynomial/utils.js +207 -0
  236. package/output/core/classes/rational/Rational.d.ts +501 -0
  237. package/output/core/classes/rational/Rational.js +829 -0
  238. package/output/core/classes/seq/SEQ.d.ts +13 -0
  239. package/output/core/classes/seq/SEQ.js +137 -0
  240. package/output/core/classes/valuesSet/ValuesSet.d.ts +187 -0
  241. package/output/core/classes/valuesSet/ValuesSet.js +399 -0
  242. package/output/core/classes/vector/Vector.d.ts +222 -0
  243. package/output/core/classes/vector/Vector.js +501 -0
  244. package/output/core/classes/vector/dispatch.d.ts +1 -0
  245. package/output/core/classes/vector/dispatch.js +11 -0
  246. package/output/core/classes/vector/functions.d.ts +28 -0
  247. package/output/core/classes/vector/functions.js +47 -0
  248. package/output/core/common/classes/MathematicalAggregate.d.ts +53 -0
  249. package/output/core/common/classes/MathematicalAggregate.js +149 -0
  250. package/output/core/common/classes/Scope.d.ts +62 -0
  251. package/output/core/common/classes/Scope.js +122 -0
  252. package/output/core/common/classes/StructuredEntity.d.ts +55 -0
  253. package/output/core/common/classes/StructuredEntity.js +151 -0
  254. package/output/core/common/common.d.ts +62 -0
  255. package/output/core/common/common.js +74 -0
  256. package/output/core/common/functions/functions.d.ts +14 -0
  257. package/output/core/common/functions/functions.js +33 -0
  258. package/output/core/common/functions/structuredEntityUtils.d.ts +27 -0
  259. package/output/core/common/functions/structuredEntityUtils.js +40 -0
  260. package/output/core/converters/BaseConverter.d.ts +97 -0
  261. package/output/core/converters/BaseConverter.js +405 -0
  262. package/output/core/converters/Converter.d.ts +111 -0
  263. package/output/core/converters/Converter.js +806 -0
  264. package/output/core/converters/Pattern.d.ts +71 -0
  265. package/output/core/converters/Pattern.js +302 -0
  266. package/output/core/dispatch.d.ts +52 -0
  267. package/output/core/dispatch.js +26 -0
  268. package/output/core/errors.d.ts +316 -0
  269. package/output/core/errors.js +349 -0
  270. package/output/core/fullFunctions.d.ts +7 -0
  271. package/output/core/fullFunctions.js +31 -0
  272. package/output/core/functions/bigint/bigint.d.ts +133 -0
  273. package/output/core/functions/bigint/bigint.js +444 -0
  274. package/output/core/functions/bigint/primeFactor.d.ts +51 -0
  275. package/output/core/functions/bigint/primeFactor.js +267 -0
  276. package/output/core/functions/bigint/primes.d.ts +1 -0
  277. package/output/core/functions/bigint/primes.js +11 -0
  278. package/output/core/functions/build/definitions.d.ts +12 -0
  279. package/output/core/functions/build/definitions.js +139 -0
  280. package/output/core/functions/build/index.d.ts +32 -0
  281. package/output/core/functions/build/index.js +136 -0
  282. package/output/core/functions/complex.d.ts +90 -0
  283. package/output/core/functions/complex.dispatch.d.ts +1 -0
  284. package/output/core/functions/complex.dispatch.js +16 -0
  285. package/output/core/functions/complex.js +482 -0
  286. package/output/core/functions/decimal.d.ts +24 -0
  287. package/output/core/functions/decimal.js +665 -0
  288. package/output/core/functions/expand/expand.d.ts +42 -0
  289. package/output/core/functions/expand/expand.js +376 -0
  290. package/output/core/functions/fresnelNumeric.d.ts +12 -0
  291. package/output/core/functions/fresnelNumeric.js +123 -0
  292. package/output/core/functions/numeric.d.ts +140 -0
  293. package/output/core/functions/numeric.js +790 -0
  294. package/output/core/functions/rationalNormalization.d.ts +11 -0
  295. package/output/core/functions/rationalNormalization.js +117 -0
  296. package/output/core/functions/setFunction.d.ts +19 -0
  297. package/output/core/functions/setFunction.js +75 -0
  298. package/output/core/functions/string.d.ts +26 -0
  299. package/output/core/functions/string.js +102 -0
  300. package/output/core/functions/subst.d.ts +90 -0
  301. package/output/core/functions/subst.js +506 -0
  302. package/output/core/functions/utils.d.ts +24 -0
  303. package/output/core/functions/utils.js +51 -0
  304. package/output/core/parserFunctions.d.ts +7 -0
  305. package/output/core/parserFunctions.js +25 -0
  306. package/output/core/types.d.ts +48 -0
  307. package/output/core/types.js +2 -0
  308. package/output/index.d.ts +359 -0
  309. package/output/index.js +739 -0
  310. package/output/math/defint/defint.d.ts +18 -0
  311. package/output/math/defint/defint.js +60 -0
  312. package/output/math/defint/defintDecimal.d.ts +37 -0
  313. package/output/math/defint/defintDecimal.js +321 -0
  314. package/output/math/defint/defintNative.d.ts +57 -0
  315. package/output/math/defint/defintNative.js +281 -0
  316. package/output/math/dispatch.d.ts +1 -0
  317. package/output/math/dispatch.js +101 -0
  318. package/output/math/geometry.d.ts +12 -0
  319. package/output/math/geometry.js +55 -0
  320. package/output/math/math.d.ts +695 -0
  321. package/output/math/math.js +1955 -0
  322. package/output/math/trig.d.ts +518 -0
  323. package/output/math/trig.js +1444 -0
  324. package/output/math/trunc.d.ts +19 -0
  325. package/output/math/trunc.js +36 -0
  326. package/output/math/utils.d.ts +66 -0
  327. package/output/math/utils.js +219 -0
  328. package/output/solve/classes/DecimalMatrix.d.ts +17 -0
  329. package/output/solve/classes/DecimalMatrix.js +86 -0
  330. package/output/solve/classes/FunctionSolver.d.ts +135 -0
  331. package/output/solve/classes/FunctionSolver.js +433 -0
  332. package/output/solve/classes/MultivariateSolver.d.ts +84 -0
  333. package/output/solve/classes/MultivariateSolver.js +240 -0
  334. package/output/solve/classes/PolynomialSolver.d.ts +104 -0
  335. package/output/solve/classes/PolynomialSolver.js +492 -0
  336. package/output/solve/classes/SolutionSet.d.ts +172 -0
  337. package/output/solve/classes/SolutionSet.js +434 -0
  338. package/output/solve/classes/Solver.d.ts +17 -0
  339. package/output/solve/classes/Solver.js +132 -0
  340. package/output/solve/classes/SymbolicSolver.d.ts +74 -0
  341. package/output/solve/classes/SymbolicSolver.js +601 -0
  342. package/output/solve/dispatch.d.ts +1 -0
  343. package/output/solve/dispatch.js +13 -0
  344. package/output/solve/linsolve.d.ts +53 -0
  345. package/output/solve/linsolve.js +233 -0
  346. package/output/solve/solve.d.ts +44 -0
  347. package/output/solve/solve.js +368 -0
  348. package/output/solve/solveSystem.d.ts +31 -0
  349. package/output/solve/solveSystem.js +266 -0
  350. package/output/solve/utils.d.ts +10 -0
  351. package/output/solve/utils.js +58 -0
  352. package/output/utils/array.d.ts +42 -0
  353. package/output/utils/array.js +98 -0
  354. package/output/utils/debug.d.ts +131 -0
  355. package/output/utils/debug.js +296 -0
  356. package/output/utils/decimal.d.ts +3 -0
  357. package/output/utils/decimal.js +16 -0
  358. package/output/utils/numeric.d.ts +14 -0
  359. package/output/utils/numeric.js +51 -0
  360. package/output/utils/object.d.ts +26 -0
  361. package/output/utils/object.js +56 -0
  362. package/package.json +178 -57
  363. package/.travis.yml +0 -3
  364. package/Algebra.js +0 -4568
  365. package/CODE_OF_CONDUCT.md +0 -46
  366. package/CONTRIBUTING.md +0 -14
  367. package/Calculus.js +0 -2675
  368. package/Extra.js +0 -622
  369. package/Solve.js +0 -1783
  370. package/all.js +0 -16
  371. package/all.min.js +0 -1
  372. package/gulpfile.js +0 -16
  373. package/index.html +0 -158
  374. package/license.txt +0 -19
  375. package/nerdamer.core.js +0 -12510
  376. package/spec/LaTeX.spec.js +0 -302
  377. package/spec/TeXConvert.spec.js +0 -8
  378. package/spec/algebra.spec.js +0 -287
  379. package/spec/basic_parser.spec.js +0 -134
  380. package/spec/build.spec.js +0 -131
  381. package/spec/calculus.spec.js +0 -183
  382. package/spec/core.spec.js +0 -2970
  383. package/spec/extra.spec.js +0 -54
  384. package/spec/solve.spec.js +0 -126
  385. package/spec/support/jasmine.json +0 -11
  386. package/spec/support/utils.js +0 -42
  387. package/spec/text.spec.js +0 -132
@@ -0,0 +1 @@
1
+ export declare function loadAlgebraFunctions(): void;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadAlgebraFunctions = loadAlgebraFunctions;
4
+ const dispatch_1 = require("../core/dispatch");
5
+ const constants_1 = require("../core/classes/parser/constants");
6
+ const adapters_1 = require("./adapters");
7
+ const factor_1 = require("./factor/factor");
8
+ const gcd_1 = require("./gcd/gcd");
9
+ const groebner_1 = require("./groebner");
10
+ const partfrac_1 = require("./partfrac");
11
+ const simplify_1 = require("./simplify/simplify");
12
+ function loadAlgebraFunctions() {
13
+ Object.assign(dispatch_1.mathFunctionRegistry, {
14
+ polyfactors: (0, dispatch_1.systemFunction)({ fn: factor_1.polyFactors, minArgs: 1, maxArgs: 1, distElWise: false }),
15
+ factor: (0, dispatch_1.systemFunction)({ fn: factor_1.factor, minArgs: 1, maxArgs: 1, distElWise: true }),
16
+ [constants_1.PFACTOR]: (0, dispatch_1.systemFunction)({ fn: factor_1.pfactor, minArgs: 1, maxArgs: 1, distElWise: false }),
17
+ [constants_1.PFACTORD]: (0, dispatch_1.systemFunction)({ fn: factor_1.pfactord, minArgs: 1, maxArgs: 1, distElWise: false }),
18
+ simplify: (0, dispatch_1.systemFunction)({ fn: simplify_1.simplify, minArgs: 1, maxArgs: 1, distElWise: true }),
19
+ partfrac: (0, dispatch_1.systemFunction)({ fn: partfrac_1.partfrac, minArgs: 1, maxArgs: 2, distElWise: true }),
20
+ gcd: (0, dispatch_1.systemFunction)({ fn: gcd_1.gcd, minArgs: 2, maxArgs: 2, distElWise: true }),
21
+ lcm: (0, dispatch_1.systemFunction)({ fn: gcd_1.lcm, minArgs: 2, maxArgs: 2, distElWise: true }),
22
+ groebner: (0, dispatch_1.systemFunction)({ fn: groebner_1.groebner, minArgs: 1, maxArgs: 2, distElWise: false }),
23
+ sqcomp: (0, dispatch_1.systemFunction)({ fn: adapters_1.completeSquare, minArgs: 1, maxArgs: 2, distElWise: true }),
24
+ });
25
+ }
@@ -0,0 +1,77 @@
1
+ import { Dictionary } from '../../core/classes/dictionary/Dictionary';
2
+ import { Expression } from '../../core/classes/expression/Expression';
3
+ import { Vector } from '../../core/classes/vector/Vector';
4
+ import type { ExpressionInput } from '../../core/types';
5
+ /**
6
+ * Factors polynomial-like numerator and denominator components of an expression.
7
+ *
8
+ * @remarks
9
+ * The implementation converts polynomial structure to the exact integer-coefficient
10
+ * factorization layer. Irrational constants and function-valued components may be
11
+ * temporarily represented by substitution variables. If the input cannot be handled
12
+ * by that finite polynomial path, the function returns an unevaluated symbolic
13
+ * `factor(input)` expression rather than exposing the internal failure.
14
+ *
15
+ * @param x - Expression-compatible value to factor.
16
+ * @returns A factored expression or an unevaluated symbolic `factor` call.
17
+ */
18
+ export declare function factor(x: ExpressionInput): Expression;
19
+ /**
20
+ * Returns the prime factors of a positive integer in ascending order.
21
+ *
22
+ * Repeated factors are retained, so `pfactor(100)` returns `[2, 2, 5, 5]`.
23
+ * The value 1 has no prime factors and returns an empty Vector.
24
+ */
25
+ export declare function pfactor(x: ExpressionInput): Vector;
26
+ /**
27
+ * Returns the prime-factor multiplicities of a positive integer.
28
+ *
29
+ * Dictionary keys are prime numbers in ascending order and values are their occurrence
30
+ * counts. For example, `pfactord(100)` returns `{2 => 2, 5 => 2}`.
31
+ */
32
+ export declare function pfactord(x: ExpressionInput): Dictionary;
33
+ /**
34
+ * Factors the numerator of polynomial-like input into Expression factors.
35
+ *
36
+ * @param x - Input whose numerator should be factored.
37
+ * @returns New factor expressions; unsupported input is returned as a one-element array.
38
+ */
39
+ export declare function polyFactorExpressions(x: ExpressionInput): Expression[];
40
+ /**
41
+ * Wraps the polynomial factor expressions in an ordered {@link Vector}.
42
+ *
43
+ * @param x - Polynomial-like input.
44
+ * @returns A new Vector containing the factor expressions.
45
+ */
46
+ export declare function polyFactors(x: ExpressionInput): Vector;
47
+ /**
48
+ * Factors the polynomialized numerator and denominator separately.
49
+ *
50
+ * @param x - Rational expression to polynomialize and factor.
51
+ * @returns New numerator and denominator factor arrays after reversing temporary substitutions.
52
+ */
53
+ export declare function factorExpressionParts(x: ExpressionInput): {
54
+ numerator: Expression[];
55
+ denominator: Expression[];
56
+ };
57
+ /**
58
+ * Factors the numerator and denominator separately and returns each factor list as a Vector.
59
+ *
60
+ * @param x - Expression-compatible value to factor.
61
+ * @returns New Vectors for the numerator and denominator factors.
62
+ */
63
+ export declare function factors(x: ExpressionInput): {
64
+ numerator: Vector;
65
+ denominator: Vector;
66
+ };
67
+ /**
68
+ * Returns prime-power factors for the numeric parts of a numerator and denominator.
69
+ *
70
+ * @param x - Numeric or expression-compatible value.
71
+ * @returns Numerator and denominator Vectors. Non-numeric components are kept as single
72
+ * factors instead of being recursively factored.
73
+ */
74
+ export declare function numberFactors(x: ExpressionInput): {
75
+ numerator: Vector;
76
+ denominator: Vector;
77
+ };
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.factor = factor;
4
+ exports.pfactor = pfactor;
5
+ exports.pfactord = pfactord;
6
+ exports.polyFactorExpressions = polyFactorExpressions;
7
+ exports.polyFactors = polyFactors;
8
+ exports.factorExpressionParts = factorExpressionParts;
9
+ exports.factors = factors;
10
+ exports.numberFactors = numberFactors;
11
+ const Dictionary_1 = require("../../core/classes/dictionary/Dictionary");
12
+ const analysis_1 = require("../../core/classes/expression/analysis");
13
+ const Expression_1 = require("../../core/classes/expression/Expression");
14
+ const shortcuts_1 = require("../../core/classes/expression/shortcuts");
15
+ const constants_1 = require("../../core/classes/parser/constants");
16
+ const multiply_1 = require("../../core/classes/parser/operations/multiply");
17
+ const SparsePolynomialAdapter_1 = require("../../core/classes/polynomial/SparsePolynomialAdapter");
18
+ const Vector_1 = require("../../core/classes/vector/Vector");
19
+ const errors_1 = require("../../core/errors");
20
+ const primeFactor_1 = require("../../core/functions/bigint/primeFactor");
21
+ const subst_1 = require("../../core/functions/subst");
22
+ const SparsePolynomialFactor_1 = require("../polynomial/SparsePolynomialFactor");
23
+ const SparsePolynomialMultivariateFactor_1 = require("../polynomial/SparsePolynomialMultivariateFactor");
24
+ const polynomialize_1 = require("../polynomialize");
25
+ /**
26
+ * Factors polynomial-like numerator and denominator components of an expression.
27
+ *
28
+ * @remarks
29
+ * The implementation converts polynomial structure to the exact integer-coefficient
30
+ * factorization layer. Irrational constants and function-valued components may be
31
+ * temporarily represented by substitution variables. If the input cannot be handled
32
+ * by that finite polynomial path, the function returns an unevaluated symbolic
33
+ * `factor(input)` expression rather than exposing the internal failure.
34
+ *
35
+ * @param x - Expression-compatible value to factor.
36
+ * @returns A factored expression or an unevaluated symbolic `factor` call.
37
+ */
38
+ function factor(x) {
39
+ let retval;
40
+ try {
41
+ x = Expression_1.Expression.create(x);
42
+ if (x.isZero()) {
43
+ retval = x;
44
+ }
45
+ else if (x.isNUM() && x.isInteger()) {
46
+ let factoredInteger;
47
+ const factorCounts = (0, primeFactor_1.primeFactorCounts)(x.getMultiplier().numerator);
48
+ for (const prime in factorCounts) {
49
+ const primePower = Expression_1.Expression.toEXP(prime, factorCounts[prime]);
50
+ factoredInteger = factoredInteger
51
+ ? (0, multiply_1.merge)(factoredInteger, primePower)
52
+ : primePower;
53
+ }
54
+ retval = factoredInteger ?? Expression_1.Expression.Number('1');
55
+ if (x.sign() === -1) {
56
+ retval = retval.neg();
57
+ }
58
+ }
59
+ // A variable is already fully factored.
60
+ else if (x.isVAR()) {
61
+ retval = x;
62
+ }
63
+ else if (x.isFunction()) {
64
+ const multiplier = x.getMultiplier();
65
+ const power = x.getPower();
66
+ retval = Expression_1.Expression.toFunction(x.name, x.getArguments().map(argument => factor(argument)));
67
+ retval = retval.pow(power).times(multiplier);
68
+ }
69
+ else if (x.isPolynomialLike()) {
70
+ retval = polyFactors(x).prod();
71
+ }
72
+ else {
73
+ const factored = factors(x);
74
+ retval = factored.numerator.prod().div(factored.denominator.prod());
75
+ }
76
+ }
77
+ catch {
78
+ retval = Expression_1.Expression.toFunction(constants_1.FACTOR, [x]);
79
+ }
80
+ return retval;
81
+ }
82
+ /**
83
+ * Returns the prime factors of a positive integer in ascending order.
84
+ *
85
+ * Repeated factors are retained, so `pfactor(100)` returns `[2, 2, 5, 5]`.
86
+ * The value 1 has no prime factors and returns an empty Vector.
87
+ */
88
+ function pfactor(x) {
89
+ const input = Expression_1.Expression.create(x);
90
+ if (!input.isNUM() || !input.isInteger() || input.lte((0, shortcuts_1.zero)())) {
91
+ throw new errors_1.UnexpectedInputError((0, errors_1.message)('wrongInput', {
92
+ expected: 'a positive integer',
93
+ received: input.text(),
94
+ }));
95
+ }
96
+ const value = input.getMultiplier().numerator;
97
+ if (value === 1n) {
98
+ return new Vector_1.Vector();
99
+ }
100
+ const factors = (0, primeFactor_1.primeFactorsBig)(value).factors.map(factor => Expression_1.Expression.Number(factor));
101
+ return new Vector_1.Vector(factors);
102
+ }
103
+ /**
104
+ * Returns the prime-factor multiplicities of a positive integer.
105
+ *
106
+ * Dictionary keys are prime numbers in ascending order and values are their occurrence
107
+ * counts. For example, `pfactord(100)` returns `{2 => 2, 5 => 2}`.
108
+ */
109
+ function pfactord(x) {
110
+ const input = Expression_1.Expression.create(x);
111
+ if (!input.isNUM() || !input.isInteger() || input.lte((0, shortcuts_1.zero)())) {
112
+ throw new errors_1.UnexpectedInputError((0, errors_1.message)('wrongInput', {
113
+ expected: 'a positive integer',
114
+ received: input.text(),
115
+ }));
116
+ }
117
+ const value = input.getMultiplier().numerator;
118
+ if (value === 1n) {
119
+ return new Dictionary_1.Dictionary();
120
+ }
121
+ const counts = (0, primeFactor_1.primeFactorCounts)(value);
122
+ const retval = new Dictionary_1.Dictionary();
123
+ for (const prime of Object.keys(counts).sort((a, b) => {
124
+ const left = BigInt(a);
125
+ const right = BigInt(b);
126
+ return left < right ? -1 : left > right ? 1 : 0;
127
+ })) {
128
+ retval.set(prime, Expression_1.Expression.Number(counts[prime]));
129
+ }
130
+ return retval;
131
+ }
132
+ /**
133
+ * Factors the numerator of polynomial-like input into Expression factors.
134
+ *
135
+ * @param x - Input whose numerator should be factored.
136
+ * @returns New factor expressions; unsupported input is returned as a one-element array.
137
+ */
138
+ function polyFactorExpressions(x) {
139
+ let retval;
140
+ try {
141
+ const expr = (0, analysis_1.normalizeMultiplierDenominators)(Expression_1.Expression.create(x));
142
+ const num = expr.getNumerator();
143
+ const den = expr.getDenominator();
144
+ // Irrational coefficients must first be promoted to variables.
145
+ const [subbed, map] = (0, subst_1.uSubConstants)(num);
146
+ const converted = (0, SparsePolynomialAdapter_1.expressionToSparsePolynomial)(subbed);
147
+ const variables = converted.variables;
148
+ const sparse = converted.polynomial;
149
+ if (variables.length === 0) {
150
+ retval = [Expression_1.Expression.Number(sparse.constantTerm())];
151
+ }
152
+ else {
153
+ const variableIndices = variables.map((_variable, index) => index);
154
+ const factorization = variables.length === 1
155
+ ? (0, SparsePolynomialFactor_1.factorUnivariateInteger)(sparse, 0)
156
+ : (0, SparsePolynomialMultivariateFactor_1.factorMultivariateInteger)(sparse, variableIndices);
157
+ retval = [];
158
+ if (factorization.content !== 1n) {
159
+ retval.push(Expression_1.Expression.Number(factorization.content));
160
+ }
161
+ for (const entry of factorization.factors) {
162
+ let factor = (0, SparsePolynomialAdapter_1.sparsePolynomialToExpression)(entry.factor, variables);
163
+ if (entry.multiplicity > 1n) {
164
+ factor = factor.pow(Expression_1.Expression.Number(entry.multiplicity));
165
+ }
166
+ retval.push(factor);
167
+ }
168
+ if (retval.length === 0) {
169
+ throw new Error((0, errors_1.message)('factorizationNoFactors'));
170
+ }
171
+ }
172
+ // Remove the u-substitution and restore the cleared denominator once.
173
+ retval = retval.map(factor => (0, subst_1.uUnSub)(factor, map));
174
+ if (!den.isOne()) {
175
+ retval[0] = retval[0].div(den);
176
+ }
177
+ }
178
+ catch {
179
+ retval = [Expression_1.Expression.create(x)];
180
+ }
181
+ return retval;
182
+ }
183
+ /**
184
+ * Wraps the polynomial factor expressions in an ordered {@link Vector}.
185
+ *
186
+ * @param x - Polynomial-like input.
187
+ * @returns A new Vector containing the factor expressions.
188
+ */
189
+ function polyFactors(x) {
190
+ const retval = new Vector_1.Vector(polyFactorExpressions(x));
191
+ return retval;
192
+ }
193
+ /**
194
+ * Factors the polynomialized numerator and denominator separately.
195
+ *
196
+ * @param x - Rational expression to polynomialize and factor.
197
+ * @returns New numerator and denominator factor arrays after reversing temporary substitutions.
198
+ */
199
+ function factorExpressionParts(x) {
200
+ const { numerator, denominator, map } = (0, polynomialize_1.polynomialize)(Expression_1.Expression.create(x));
201
+ return {
202
+ numerator: polyFactorExpressions(numerator).map(f => (0, subst_1.uUnSub)(f, map)),
203
+ denominator: polyFactorExpressions(denominator).map(f => (0, subst_1.uUnSub)(f, map)),
204
+ };
205
+ }
206
+ /**
207
+ * Factors the numerator and denominator separately and returns each factor list as a Vector.
208
+ *
209
+ * @param x - Expression-compatible value to factor.
210
+ * @returns New Vectors for the numerator and denominator factors.
211
+ */
212
+ function factors(x) {
213
+ const { numerator, denominator } = factorExpressionParts(x);
214
+ return {
215
+ numerator: new Vector_1.Vector(numerator),
216
+ denominator: new Vector_1.Vector(denominator),
217
+ };
218
+ }
219
+ /**
220
+ * Returns prime-power factors for the numeric parts of a numerator and denominator.
221
+ *
222
+ * @param x - Numeric or expression-compatible value.
223
+ * @returns Numerator and denominator Vectors. Non-numeric components are kept as single
224
+ * factors instead of being recursively factored.
225
+ */
226
+ function numberFactors(x) {
227
+ x = Expression_1.Expression.create(x);
228
+ const numerator = x.getNumerator();
229
+ const denominator = x.getDenominator();
230
+ function factorNumber(num) {
231
+ if (!num.isNUM()) {
232
+ return new Vector_1.Vector([num]);
233
+ }
234
+ const factors = new Vector_1.Vector();
235
+ const factorCounts = (0, primeFactor_1.primeFactorCounts)(num.getMultiplier().numerator);
236
+ for (const prime in factorCounts) {
237
+ factors.append(Expression_1.Expression.toEXP(prime, factorCounts[prime]));
238
+ }
239
+ return factors;
240
+ }
241
+ return {
242
+ numerator: factorNumber(numerator),
243
+ denominator: factorNumber(denominator),
244
+ };
245
+ }
@@ -0,0 +1,30 @@
1
+ import { Expression } from '../../core/classes/expression/Expression';
2
+ import type { ExpressionInput } from '../../core/types';
3
+ /**
4
+ * Computes a symbolic greatest common divisor over rational polynomial structure.
5
+ *
6
+ * @remarks
7
+ * Numerators and denominators are polynomialized before exact sparse integer GCD
8
+ * reconstruction. Rational polynomial coefficients are cleared to integers and
9
+ * their shared clearing denominator is restored afterward. Function-valued,
10
+ * exponential, and irrational constants use the existing polynomialization
11
+ * substitutions and are restored after the numerator and denominator GCDs are
12
+ * combined. Unsupported inputs remain symbolic as `gcd(x, y)`.
13
+ *
14
+ * @param x - First expression-compatible operand.
15
+ * @param y - Second expression-compatible operand.
16
+ * @returns The exact symbolic GCD or an unevaluated `gcd` expression.
17
+ */
18
+ export declare function gcd(x: ExpressionInput, y: ExpressionInput): Expression;
19
+ /**
20
+ * Returns the least common multiple of two expressions.
21
+ *
22
+ * Numeric inputs reuse exact Rational arithmetic. Polynomial expressions use
23
+ * the polynomial GCD so shared symbolic factors are retained.
24
+ *
25
+ * @param x - First expression-compatible operand.
26
+ * @param y - Second expression-compatible operand.
27
+ * @returns Zero when either operand is zero; otherwise a non-negative numeric LCM or
28
+ * the symbolic product divided by {@link gcd}.
29
+ */
30
+ export declare function lcm(x: ExpressionInput, y: ExpressionInput): Expression;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gcd = gcd;
4
+ exports.lcm = lcm;
5
+ const collect_1 = require("../../core/classes/expression/collect");
6
+ const Expression_1 = require("../../core/classes/expression/Expression");
7
+ const shortcuts_1 = require("../../core/classes/expression/shortcuts");
8
+ const constants_1 = require("../../core/classes/parser/constants");
9
+ const SparsePolynomialAdapter_1 = require("../../core/classes/polynomial/SparsePolynomialAdapter");
10
+ const bigint_1 = require("../../core/functions/bigint/bigint");
11
+ const subst_1 = require("../../core/functions/subst");
12
+ const SparsePolynomialGcd_1 = require("../polynomial/SparsePolynomialGcd");
13
+ const polynomialize_1 = require("../polynomialize");
14
+ /**
15
+ * Computes a symbolic greatest common divisor over rational polynomial structure.
16
+ *
17
+ * @remarks
18
+ * Numerators and denominators are polynomialized before exact sparse integer GCD
19
+ * reconstruction. Rational polynomial coefficients are cleared to integers and
20
+ * their shared clearing denominator is restored afterward. Function-valued,
21
+ * exponential, and irrational constants use the existing polynomialization
22
+ * substitutions and are restored after the numerator and denominator GCDs are
23
+ * combined. Unsupported inputs remain symbolic as `gcd(x, y)`.
24
+ *
25
+ * @param x - First expression-compatible operand.
26
+ * @param y - Second expression-compatible operand.
27
+ * @returns The exact symbolic GCD or an unevaluated `gcd` expression.
28
+ */
29
+ function gcd(x, y) {
30
+ try {
31
+ x = Expression_1.Expression.create(x);
32
+ y = Expression_1.Expression.create(y);
33
+ const asDecimal = x.hasDecimal() || y.hasDecimal();
34
+ const { numerator: ax, denominator: bx, map } = (0, polynomialize_1.polynomialize)(x);
35
+ const { numerator: px, denominator: qx, map: finalMap } = (0, polynomialize_1.polynomialize)(y, map);
36
+ const variables = (0, collect_1.collectVariablesSet)([ax, bx, px, qx]);
37
+ const numeratorGcd = expressionGCD(ax, px, variables);
38
+ const denominatorGcd = expressionGCD(bx, qx, variables);
39
+ const retval = (0, subst_1.uUnSub)(numeratorGcd.div(denominatorGcd), finalMap);
40
+ retval.getMultiplier().asDecimal = asDecimal;
41
+ return retval;
42
+ }
43
+ catch { }
44
+ return Expression_1.Expression.toFunction(constants_1.GCD, [x, y]);
45
+ }
46
+ /**
47
+ * Returns the least common multiple of two expressions.
48
+ *
49
+ * Numeric inputs reuse exact Rational arithmetic. Polynomial expressions use
50
+ * the polynomial GCD so shared symbolic factors are retained.
51
+ *
52
+ * @param x - First expression-compatible operand.
53
+ * @param y - Second expression-compatible operand.
54
+ * @returns Zero when either operand is zero; otherwise a non-negative numeric LCM or
55
+ * the symbolic product divided by {@link gcd}.
56
+ */
57
+ function lcm(x, y) {
58
+ const a = Expression_1.Expression.create(x);
59
+ const b = Expression_1.Expression.create(y);
60
+ let retval;
61
+ if (a.isZero() || b.isZero()) {
62
+ retval = (0, shortcuts_1.zero)();
63
+ }
64
+ else if (a.isNUM() && b.isNUM()) {
65
+ retval = Expression_1.Expression.fromRational(a.getMultiplier().LCM(b.getMultiplier()).abs());
66
+ }
67
+ else {
68
+ retval = a.times(b).div(gcd(a, b));
69
+ }
70
+ return retval;
71
+ }
72
+ function expressionGCD(x, y, variables) {
73
+ if (x.isNUM() && y.isNUM()) {
74
+ return Expression_1.Expression.create(x.getMultiplier().GCD(y.getMultiplier()));
75
+ }
76
+ if (x.isZero() && y.isZero()) {
77
+ return (0, shortcuts_1.zero)();
78
+ }
79
+ if (x.isZero()) {
80
+ return Expression_1.Expression.create(y);
81
+ }
82
+ if (y.isZero()) {
83
+ return Expression_1.Expression.create(x);
84
+ }
85
+ variables ??= (0, collect_1.collectVariablesSet)([x, y]);
86
+ const left = (0, SparsePolynomialAdapter_1.expressionToIntegerSparsePolynomial)(x, variables);
87
+ const right = (0, SparsePolynomialAdapter_1.expressionToIntegerSparsePolynomial)(y, variables);
88
+ const variableIndices = variables.map((_variable, index) => index);
89
+ const sparseGcd = (0, SparsePolynomialGcd_1.sparsePolynomialGcd)(left.polynomial, right.polynomial, variableIndices);
90
+ const clearingDenominator = (0, bigint_1.GCD)(left.denominator, right.denominator);
91
+ const retval = (0, SparsePolynomialAdapter_1.sparsePolynomialToExpression)(sparseGcd, variables);
92
+ return clearingDenominator === 1n
93
+ ? retval
94
+ : retval.div(Expression_1.Expression.Number(clearingDenominator));
95
+ }
@@ -0,0 +1,21 @@
1
+ import { Vector } from '../core/classes/vector/Vector';
2
+ import type { ExpressionInput } from '../core/types';
3
+ /**
4
+ * Computes an expression-facing Groebner basis for polynomial generators.
5
+ *
6
+ * @remarks
7
+ * All generators are converted using one variable order so exponent indices remain
8
+ * consistent. Rational coefficient denominators are cleared per generator before the
9
+ * exact integer-coefficient sparse engine runs; multiplying a generator by a nonzero
10
+ * scalar preserves the generated ideal. When `vars` is omitted, variables are
11
+ * collected across every generator.
12
+ *
13
+ * This convenience wrapper uses lexicographic order and a reduced, deterministically
14
+ * sorted basis. Use the advanced Groebner APIs for another monomial order, resource
15
+ * budgets, elimination, or ideal membership.
16
+ *
17
+ * @param expressionArray - Polynomial-like generators of the ideal.
18
+ * @param vars - Variable order, from highest to lowest lexicographic priority.
19
+ * @returns A new vector containing expression representations of the basis.
20
+ */
21
+ export declare function groebner(expressionArray: ExpressionInput[] | Vector, vars?: string[]): Vector;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.groebner = groebner;
4
+ const collect_1 = require("../core/classes/expression/collect");
5
+ const Expression_1 = require("../core/classes/expression/Expression");
6
+ const SparsePolynomialAdapter_1 = require("../core/classes/polynomial/SparsePolynomialAdapter");
7
+ const Vector_1 = require("../core/classes/vector/Vector");
8
+ const groebnerBase_1 = require("./algorithms/groebnerBase");
9
+ /**
10
+ * Computes an expression-facing Groebner basis for polynomial generators.
11
+ *
12
+ * @remarks
13
+ * All generators are converted using one variable order so exponent indices remain
14
+ * consistent. Rational coefficient denominators are cleared per generator before the
15
+ * exact integer-coefficient sparse engine runs; multiplying a generator by a nonzero
16
+ * scalar preserves the generated ideal. When `vars` is omitted, variables are
17
+ * collected across every generator.
18
+ *
19
+ * This convenience wrapper uses lexicographic order and a reduced, deterministically
20
+ * sorted basis. Use the advanced Groebner APIs for another monomial order, resource
21
+ * budgets, elimination, or ideal membership.
22
+ *
23
+ * @param expressionArray - Polynomial-like generators of the ideal.
24
+ * @param vars - Variable order, from highest to lowest lexicographic priority.
25
+ * @returns A new vector containing expression representations of the basis.
26
+ */
27
+ function groebner(expressionArray, vars) {
28
+ const inputs = Vector_1.Vector.isVector(expressionArray) ? expressionArray.elements : expressionArray;
29
+ const expressions = inputs.map(e => Expression_1.Expression.create(e));
30
+ // Get the unified variable list across ALL generators
31
+ vars ??= (0, collect_1.collectVariablesSet)(expressions);
32
+ // Convert each polynomial using the unified variable list so indices are consistent.
33
+ // Rational denominators are cleared exactly while converting into the sparse ring.
34
+ const polys = expressions.map(e => (0, SparsePolynomialAdapter_1.expressionToIntegerSparsePolynomial)(e, vars).polynomial);
35
+ return new Vector_1.Vector((0, groebnerBase_1.Groebner)(polys).map(polynomial => (0, SparsePolynomialAdapter_1.sparsePolynomialToExpression)(polynomial, vars)));
36
+ }
@@ -0,0 +1,19 @@
1
+ import { Expression } from '../core/classes/expression/Expression';
2
+ import type { ExpressionInput } from '../core/types';
3
+ /**
4
+ * Decomposes a rational expression P(x)/Q(x) into partial fractions.
5
+ *
6
+ * @remarks
7
+ * The routine extracts `P(x)/Q(x)`, performs polynomial long division for an improper
8
+ * fraction, factors `Q` over the supported exact polynomial domain, and solves the
9
+ * undetermined coefficients by exact evaluation and row reduction. Each denominator
10
+ * factor of degree d receives a numerator polynomial of degree less than d, including
11
+ * repeated factors. A singular coefficient system, a denominator independent of the
12
+ * selected variable, or a factorization that does not expose a useful decomposition
13
+ * leaves the original expression unchanged.
14
+ *
15
+ * @param x - Rational expression to decompose.
16
+ * @param variable - Main variable; defaults to the first variable reported by the expression.
17
+ * @returns A new decomposition when one is found, otherwise the original parsed expression.
18
+ */
19
+ export declare function partfrac(x: ExpressionInput, variable?: ExpressionInput): Expression;