nerdamer 1.1.13 → 2.0.0-rc.1

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 (341) hide show
  1. package/LICENSE.md +184 -0
  2. package/README.md +293 -312
  3. package/dist/bundle.js +2 -0
  4. package/dist/bundle.js.LICENSE.txt +7 -0
  5. package/dist/parser.js +2 -0
  6. package/dist/parser.js.LICENSE.txt +7 -0
  7. package/docs-data/parser-functions.json +1960 -0
  8. package/index.d.ts +10 -426
  9. package/output/algebra/adapters.d.ts +33 -0
  10. package/output/algebra/adapters.js +109 -0
  11. package/output/algebra/algorithms/arith.d.ts +84 -0
  12. package/output/algebra/algorithms/arith.js +323 -0
  13. package/output/algebra/algorithms/factor.d.ts +3 -0
  14. package/output/algebra/algorithms/factor.js +5 -0
  15. package/output/algebra/algorithms/factorMultivariate.d.ts +23 -0
  16. package/output/algebra/algorithms/factorMultivariate.js +2393 -0
  17. package/output/algebra/algorithms/factorUnivariate.d.ts +72 -0
  18. package/output/algebra/algorithms/factorUnivariate.js +1072 -0
  19. package/output/algebra/algorithms/gcd.d.ts +22 -0
  20. package/output/algebra/algorithms/gcd.js +690 -0
  21. package/output/algebra/algorithms/groebnerBase.d.ts +157 -0
  22. package/output/algebra/algorithms/groebnerBase.js +1166 -0
  23. package/output/algebra/algorithms/multiPoly/MultiPoly.d.ts +137 -0
  24. package/output/algebra/algorithms/multiPoly/MultiPoly.js +346 -0
  25. package/output/algebra/algorithms/poly.d.ts +228 -0
  26. package/output/algebra/algorithms/poly.js +1299 -0
  27. package/output/algebra/algorithms/rational.d.ts +17 -0
  28. package/output/algebra/algorithms/rational.js +115 -0
  29. package/output/algebra/factor/factor.d.ts +62 -0
  30. package/output/algebra/factor/factor.js +158 -0
  31. package/output/algebra/gcd/gcd.d.ts +29 -0
  32. package/output/algebra/gcd/gcd.js +141 -0
  33. package/output/algebra/groebner.d.ts +21 -0
  34. package/output/algebra/groebner.js +42 -0
  35. package/output/algebra/partfrac.d.ts +19 -0
  36. package/output/algebra/partfrac.js +398 -0
  37. package/output/algebra/polynomialize.d.ts +20 -0
  38. package/output/algebra/polynomialize.js +24 -0
  39. package/output/algebra/simplify/complexsimp.d.ts +7 -0
  40. package/output/algebra/simplify/complexsimp.js +24 -0
  41. package/output/algebra/simplify/factorCommon.d.ts +13 -0
  42. package/output/algebra/simplify/factorCommon.js +136 -0
  43. package/output/algebra/simplify/funcsimp.d.ts +26 -0
  44. package/output/algebra/simplify/funcsimp.js +633 -0
  45. package/output/algebra/simplify/invtrigrewrite.d.ts +10 -0
  46. package/output/algebra/simplify/invtrigrewrite.js +96 -0
  47. package/output/algebra/simplify/ratsimp.d.ts +21 -0
  48. package/output/algebra/simplify/ratsimp.js +140 -0
  49. package/output/algebra/simplify/simplify.d.ts +25 -0
  50. package/output/algebra/simplify/simplify.js +228 -0
  51. package/output/algebra/simplify/trigreduce.d.ts +38 -0
  52. package/output/algebra/simplify/trigreduce.js +424 -0
  53. package/output/algebra/simplify/trigrewrite.d.ts +17 -0
  54. package/output/algebra/simplify/trigrewrite.js +156 -0
  55. package/output/algebra/simplify/trigsimp.d.ts +11 -0
  56. package/output/algebra/simplify/trigsimp.js +369 -0
  57. package/output/algebra/simplify/utils.d.ts +32 -0
  58. package/output/algebra/simplify/utils.js +56 -0
  59. package/output/algebra/utils.d.ts +32 -0
  60. package/output/algebra/utils.js +48 -0
  61. package/output/api/advanced.d.ts +7 -0
  62. package/output/api/advanced.js +18 -0
  63. package/output/api/algebra.d.ts +17 -0
  64. package/output/api/algebra.js +32 -0
  65. package/output/api/assumptions.d.ts +4 -0
  66. package/output/api/assumptions.js +11 -0
  67. package/output/api/calculus.d.ts +9 -0
  68. package/output/api/calculus.js +21 -0
  69. package/output/api/core.d.ts +17 -0
  70. package/output/api/core.js +41 -0
  71. package/output/api/debug.d.ts +16 -0
  72. package/output/api/debug.js +23 -0
  73. package/output/api/parser.d.ts +85 -0
  74. package/output/api/parser.js +16 -0
  75. package/output/api/solve.d.ts +10 -0
  76. package/output/api/solve.js +16 -0
  77. package/output/api/structures.d.ts +10 -0
  78. package/output/api/structures.js +22 -0
  79. package/output/calculus/derivative/diff.d.ts +30 -0
  80. package/output/calculus/derivative/diff.js +238 -0
  81. package/output/calculus/fresnel.d.ts +16 -0
  82. package/output/calculus/fresnel.js +39 -0
  83. package/output/calculus/integrate/byParts.d.ts +18 -0
  84. package/output/calculus/integrate/byParts.js +339 -0
  85. package/output/calculus/integrate/bySubstitution.d.ts +135 -0
  86. package/output/calculus/integrate/bySubstitution.js +411 -0
  87. package/output/calculus/integrate/integrate.d.ts +38 -0
  88. package/output/calculus/integrate/integrate.js +652 -0
  89. package/output/calculus/integrate/integrationTable.d.ts +2 -0
  90. package/output/calculus/integrate/integrationTable.js +914 -0
  91. package/output/calculus/integrate/utils.d.ts +28 -0
  92. package/output/calculus/integrate/utils.js +96 -0
  93. package/output/calculus/laplace/ilaplace.d.ts +31 -0
  94. package/output/calculus/laplace/ilaplace.js +192 -0
  95. package/output/calculus/laplace/ilaplaceTable.d.ts +2 -0
  96. package/output/calculus/laplace/ilaplaceTable.js +200 -0
  97. package/output/calculus/laplace/laplace.d.ts +22 -0
  98. package/output/calculus/laplace/laplace.js +109 -0
  99. package/output/calculus/laplace/laplaceTable.d.ts +2 -0
  100. package/output/calculus/laplace/laplaceTable.js +187 -0
  101. package/output/calculus/limit/limit.d.ts +35 -0
  102. package/output/calculus/limit/limit.js +1183 -0
  103. package/output/calculus/limit/limitsTable.d.ts +2 -0
  104. package/output/calculus/limit/limitsTable.js +7 -0
  105. package/output/core/Settings.d.ts +32 -0
  106. package/output/core/Settings.js +68 -0
  107. package/output/core/adapters.d.ts +18 -0
  108. package/output/core/adapters.js +40 -0
  109. package/output/core/classes/assumption/Assumption.d.ts +218 -0
  110. package/output/core/classes/assumption/Assumption.js +605 -0
  111. package/output/core/classes/assumption/assertiveFunctions.d.ts +6 -0
  112. package/output/core/classes/assumption/assertiveFunctions.js +64 -0
  113. package/output/core/classes/assumption/assume.d.ts +90 -0
  114. package/output/core/classes/assumption/assume.js +145 -0
  115. package/output/core/classes/collection/Collection.d.ts +107 -0
  116. package/output/core/classes/collection/Collection.js +231 -0
  117. package/output/core/classes/complex/Complex.d.ts +99 -0
  118. package/output/core/classes/complex/Complex.js +135 -0
  119. package/output/core/classes/decimalSet/DecimalSet.d.ts +226 -0
  120. package/output/core/classes/decimalSet/DecimalSet.js +453 -0
  121. package/output/core/classes/dictionary/Dictionary.d.ts +102 -0
  122. package/output/core/classes/dictionary/Dictionary.js +213 -0
  123. package/output/core/classes/equation/Equation.d.ts +256 -0
  124. package/output/core/classes/equation/Equation.js +350 -0
  125. package/output/core/classes/expression/CoeffObject.d.ts +100 -0
  126. package/output/core/classes/expression/CoeffObject.js +198 -0
  127. package/output/core/classes/expression/Expression.d.ts +1674 -0
  128. package/output/core/classes/expression/Expression.js +2332 -0
  129. package/output/core/classes/expression/analysis.d.ts +25 -0
  130. package/output/core/classes/expression/analysis.js +218 -0
  131. package/output/core/classes/expression/collect.d.ts +9 -0
  132. package/output/core/classes/expression/collect.js +49 -0
  133. package/output/core/classes/expression/format.d.ts +45 -0
  134. package/output/core/classes/expression/format.js +217 -0
  135. package/output/core/classes/expression/products.d.ts +23 -0
  136. package/output/core/classes/expression/products.js +115 -0
  137. package/output/core/classes/expression/shortcuts.d.ts +35 -0
  138. package/output/core/classes/expression/shortcuts.js +129 -0
  139. package/output/core/classes/expression/traversal.d.ts +31 -0
  140. package/output/core/classes/expression/traversal.js +216 -0
  141. package/output/core/classes/expression/trig.d.ts +25 -0
  142. package/output/core/classes/expression/trig.js +40 -0
  143. package/output/core/classes/expression/utils.d.ts +52 -0
  144. package/output/core/classes/expression/utils.js +189 -0
  145. package/output/core/classes/lookupTable/LookupTable.d.ts +12 -0
  146. package/output/core/classes/lookupTable/LookupTable.js +55 -0
  147. package/output/core/classes/matrix/Matrix.d.ts +227 -0
  148. package/output/core/classes/matrix/Matrix.js +889 -0
  149. package/output/core/classes/matrix/Sylvester.d.ts +11 -0
  150. package/output/core/classes/matrix/Sylvester.js +54 -0
  151. package/output/core/classes/matrix/functions.d.ts +26 -0
  152. package/output/core/classes/matrix/functions.js +52 -0
  153. package/output/core/classes/matrix/utils.d.ts +9 -0
  154. package/output/core/classes/matrix/utils.js +22 -0
  155. package/output/core/classes/parser/Parser.d.ts +480 -0
  156. package/output/core/classes/parser/Parser.js +1812 -0
  157. package/output/core/classes/parser/Token.d.ts +58 -0
  158. package/output/core/classes/parser/Token.js +137 -0
  159. package/output/core/classes/parser/constants.d.ts +160 -0
  160. package/output/core/classes/parser/constants.js +227 -0
  161. package/output/core/classes/parser/helpers.d.ts +21 -0
  162. package/output/core/classes/parser/helpers.js +42 -0
  163. package/output/core/classes/parser/operations/add.d.ts +15 -0
  164. package/output/core/classes/parser/operations/add.js +238 -0
  165. package/output/core/classes/parser/operations/comma.d.ts +7 -0
  166. package/output/core/classes/parser/operations/comma.js +11 -0
  167. package/output/core/classes/parser/operations/compare.d.ts +21 -0
  168. package/output/core/classes/parser/operations/compare.js +461 -0
  169. package/output/core/classes/parser/operations/divide.d.ts +2 -0
  170. package/output/core/classes/parser/operations/divide.js +72 -0
  171. package/output/core/classes/parser/operations/functions.d.ts +46 -0
  172. package/output/core/classes/parser/operations/functions.js +430 -0
  173. package/output/core/classes/parser/operations/multiply.d.ts +11 -0
  174. package/output/core/classes/parser/operations/multiply.js +321 -0
  175. package/output/core/classes/parser/operations/power.d.ts +48 -0
  176. package/output/core/classes/parser/operations/power.js +673 -0
  177. package/output/core/classes/parser/operations/subtract.d.ts +3 -0
  178. package/output/core/classes/parser/operations/subtract.js +35 -0
  179. package/output/core/classes/parser/preprocess.d.ts +14 -0
  180. package/output/core/classes/parser/preprocess.js +259 -0
  181. package/output/core/classes/parser/scripting/controlFlow.d.ts +121 -0
  182. package/output/core/classes/parser/scripting/controlFlow.js +355 -0
  183. package/output/core/classes/parser/scripting/evaluate.d.ts +10 -0
  184. package/output/core/classes/parser/scripting/evaluate.js +112 -0
  185. package/output/core/classes/parser/scripting/functions.d.ts +14 -0
  186. package/output/core/classes/parser/scripting/functions.js +59 -0
  187. package/output/core/classes/parser/scripting/scope.d.ts +35 -0
  188. package/output/core/classes/parser/scripting/scope.js +155 -0
  189. package/output/core/classes/parser/types.d.ts +125 -0
  190. package/output/core/classes/parser/types.js +2 -0
  191. package/output/core/classes/parser/wrappers/IndexedReference.d.ts +31 -0
  192. package/output/core/classes/parser/wrappers/IndexedReference.js +68 -0
  193. package/output/core/classes/parser/wrappers/KeyValuePair.d.ts +24 -0
  194. package/output/core/classes/parser/wrappers/KeyValuePair.js +51 -0
  195. package/output/core/classes/polynomial/Polynomial.d.ts +500 -0
  196. package/output/core/classes/polynomial/Polynomial.js +1149 -0
  197. package/output/core/classes/polynomial/Term.d.ts +222 -0
  198. package/output/core/classes/polynomial/Term.js +430 -0
  199. package/output/core/classes/polynomial/functions.d.ts +69 -0
  200. package/output/core/classes/polynomial/functions.js +126 -0
  201. package/output/core/classes/polynomial/utils.d.ts +62 -0
  202. package/output/core/classes/polynomial/utils.js +206 -0
  203. package/output/core/classes/rational/Rational.d.ts +504 -0
  204. package/output/core/classes/rational/Rational.js +779 -0
  205. package/output/core/classes/seq/SEQ.d.ts +13 -0
  206. package/output/core/classes/seq/SEQ.js +137 -0
  207. package/output/core/classes/valuesSet/ValuesSet.d.ts +179 -0
  208. package/output/core/classes/valuesSet/ValuesSet.js +381 -0
  209. package/output/core/classes/vector/Vector.d.ts +222 -0
  210. package/output/core/classes/vector/Vector.js +497 -0
  211. package/output/core/classes/vector/functions.d.ts +28 -0
  212. package/output/core/classes/vector/functions.js +47 -0
  213. package/output/core/common/classes/MathematicalAggregate.d.ts +53 -0
  214. package/output/core/common/classes/MathematicalAggregate.js +140 -0
  215. package/output/core/common/classes/Scope.d.ts +62 -0
  216. package/output/core/common/classes/Scope.js +122 -0
  217. package/output/core/common/classes/StructuredEntity.d.ts +55 -0
  218. package/output/core/common/classes/StructuredEntity.js +151 -0
  219. package/output/core/common/common.d.ts +63 -0
  220. package/output/core/common/common.js +279 -0
  221. package/output/core/common/functions/functions.d.ts +14 -0
  222. package/output/core/common/functions/functions.js +33 -0
  223. package/output/core/common/functions/structuredEntityUtils.d.ts +27 -0
  224. package/output/core/common/functions/structuredEntityUtils.js +40 -0
  225. package/output/core/converters/BaseConverter.d.ts +97 -0
  226. package/output/core/converters/BaseConverter.js +405 -0
  227. package/output/core/converters/Converter.d.ts +111 -0
  228. package/output/core/converters/Converter.js +802 -0
  229. package/output/core/converters/Pattern.d.ts +71 -0
  230. package/output/core/converters/Pattern.js +302 -0
  231. package/output/core/dispatch.d.ts +34 -0
  232. package/output/core/dispatch.js +304 -0
  233. package/output/core/errors.d.ts +531 -0
  234. package/output/core/errors.js +621 -0
  235. package/output/core/functions/bigint/bigint.d.ts +121 -0
  236. package/output/core/functions/bigint/bigint.js +392 -0
  237. package/output/core/functions/bigint/primeFactor.d.ts +49 -0
  238. package/output/core/functions/bigint/primeFactor.js +267 -0
  239. package/output/core/functions/bigint/primes.d.ts +1 -0
  240. package/output/core/functions/bigint/primes.js +11 -0
  241. package/output/core/functions/build/definitions.d.ts +12 -0
  242. package/output/core/functions/build/definitions.js +133 -0
  243. package/output/core/functions/build/index.d.ts +32 -0
  244. package/output/core/functions/build/index.js +136 -0
  245. package/output/core/functions/complex.d.ts +90 -0
  246. package/output/core/functions/complex.js +482 -0
  247. package/output/core/functions/decimal.d.ts +24 -0
  248. package/output/core/functions/decimal.js +664 -0
  249. package/output/core/functions/expand/expand.d.ts +42 -0
  250. package/output/core/functions/expand/expand.js +376 -0
  251. package/output/core/functions/fresnelNumeric.d.ts +12 -0
  252. package/output/core/functions/fresnelNumeric.js +123 -0
  253. package/output/core/functions/numeric.d.ts +140 -0
  254. package/output/core/functions/numeric.js +790 -0
  255. package/output/core/functions/rationalNormalization.d.ts +11 -0
  256. package/output/core/functions/rationalNormalization.js +117 -0
  257. package/output/core/functions/setFunction.d.ts +19 -0
  258. package/output/core/functions/setFunction.js +75 -0
  259. package/output/core/functions/string.d.ts +26 -0
  260. package/output/core/functions/string.js +101 -0
  261. package/output/core/functions/subst.d.ts +90 -0
  262. package/output/core/functions/subst.js +498 -0
  263. package/output/core/functions/utils.d.ts +24 -0
  264. package/output/core/functions/utils.js +51 -0
  265. package/output/core/types.d.ts +48 -0
  266. package/output/core/types.js +2 -0
  267. package/output/index.d.ts +339 -0
  268. package/output/index.js +715 -0
  269. package/output/math/defint/defintDecimal.d.ts +37 -0
  270. package/output/math/defint/defintDecimal.js +320 -0
  271. package/output/math/defint/defintNative.d.ts +57 -0
  272. package/output/math/defint/defintNative.js +292 -0
  273. package/output/math/geometry.d.ts +8 -0
  274. package/output/math/geometry.js +32 -0
  275. package/output/math/math.d.ts +655 -0
  276. package/output/math/math.js +1811 -0
  277. package/output/math/trig.d.ts +518 -0
  278. package/output/math/trig.js +1444 -0
  279. package/output/math/trunc.d.ts +19 -0
  280. package/output/math/trunc.js +36 -0
  281. package/output/math/utils.d.ts +60 -0
  282. package/output/math/utils.js +180 -0
  283. package/output/solve/classes/DecimalMatrix.d.ts +17 -0
  284. package/output/solve/classes/DecimalMatrix.js +86 -0
  285. package/output/solve/classes/FunctionSolver.d.ts +135 -0
  286. package/output/solve/classes/FunctionSolver.js +433 -0
  287. package/output/solve/classes/MultivariateSolver.d.ts +84 -0
  288. package/output/solve/classes/MultivariateSolver.js +240 -0
  289. package/output/solve/classes/PolynomialSolver.d.ts +85 -0
  290. package/output/solve/classes/PolynomialSolver.js +292 -0
  291. package/output/solve/classes/SolutionSet.d.ts +153 -0
  292. package/output/solve/classes/SolutionSet.js +357 -0
  293. package/output/solve/classes/Solver.d.ts +17 -0
  294. package/output/solve/classes/Solver.js +132 -0
  295. package/output/solve/classes/SymbolicSolver.d.ts +74 -0
  296. package/output/solve/classes/SymbolicSolver.js +601 -0
  297. package/output/solve/linsolve.d.ts +51 -0
  298. package/output/solve/linsolve.js +225 -0
  299. package/output/solve/solve.d.ts +34 -0
  300. package/output/solve/solve.js +260 -0
  301. package/output/solve/solveSystem.d.ts +31 -0
  302. package/output/solve/solveSystem.js +290 -0
  303. package/output/solve/utils.d.ts +9 -0
  304. package/output/solve/utils.js +62 -0
  305. package/output/utils/array.d.ts +42 -0
  306. package/output/utils/array.js +98 -0
  307. package/output/utils/debug.d.ts +131 -0
  308. package/output/utils/debug.js +295 -0
  309. package/output/utils/decimal.d.ts +3 -0
  310. package/output/utils/decimal.js +16 -0
  311. package/output/utils/numeric.d.ts +14 -0
  312. package/output/utils/numeric.js +51 -0
  313. package/output/utils/object.d.ts +26 -0
  314. package/output/utils/object.js +56 -0
  315. package/package.json +213 -57
  316. package/.travis.yml +0 -3
  317. package/Algebra.js +0 -4568
  318. package/BREAKING_CHANGES.md +0 -5
  319. package/CODE_OF_CONDUCT.md +0 -46
  320. package/CONTRIBUTING.md +0 -14
  321. package/Calculus.js +0 -2675
  322. package/Extra.js +0 -622
  323. package/Solve.js +0 -1783
  324. package/all.js +0 -16
  325. package/all.min.js +0 -1
  326. package/gulpfile.js +0 -16
  327. package/index.html +0 -158
  328. package/license.txt +0 -19
  329. package/nerdamer.core.js +0 -12510
  330. package/spec/LaTeX.spec.js +0 -302
  331. package/spec/TeXConvert.spec.js +0 -8
  332. package/spec/algebra.spec.js +0 -287
  333. package/spec/basic_parser.spec.js +0 -134
  334. package/spec/build.spec.js +0 -131
  335. package/spec/calculus.spec.js +0 -183
  336. package/spec/core.spec.js +0 -2970
  337. package/spec/extra.spec.js +0 -54
  338. package/spec/solve.spec.js +0 -126
  339. package/spec/support/jasmine.json +0 -11
  340. package/spec/support/utils.js +0 -42
  341. package/spec/text.spec.js +0 -132
@@ -0,0 +1,17 @@
1
+ export type Rat = {
2
+ n: bigint;
3
+ d: bigint;
4
+ };
5
+ export declare function ratNorm(r: Rat): Rat;
6
+ export declare function rat(n: bigint, d?: bigint): Rat;
7
+ export declare function ratAdd(a: Rat, b: Rat): Rat;
8
+ export declare function ratSub(a: Rat, b: Rat): Rat;
9
+ export declare function ratMul(a: Rat, b: Rat): Rat;
10
+ export declare function ratDiv(a: Rat, b: Rat): Rat;
11
+ export declare function ratToInt(r: Rat): bigint | null;
12
+ export declare function uniAddRat(a: Rat[], b: Rat[]): Rat[];
13
+ export declare function uniMulRat(a: Rat[], b: Rat[]): Rat[];
14
+ export declare function interpolateUnivariateRat(points: Array<{
15
+ x: bigint;
16
+ y: Rat;
17
+ }>): Rat[];
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ratNorm = ratNorm;
4
+ exports.rat = rat;
5
+ exports.ratAdd = ratAdd;
6
+ exports.ratSub = ratSub;
7
+ exports.ratMul = ratMul;
8
+ exports.ratDiv = ratDiv;
9
+ exports.ratToInt = ratToInt;
10
+ exports.uniAddRat = uniAddRat;
11
+ exports.uniMulRat = uniMulRat;
12
+ exports.interpolateUnivariateRat = interpolateUnivariateRat;
13
+ const arith_1 = require("./arith");
14
+ function ratNorm(r) {
15
+ if (r.d === 0n) {
16
+ throw new Error('Rat: division by zero');
17
+ }
18
+ if (r.n === 0n) {
19
+ return { n: 0n, d: 1n };
20
+ }
21
+ let n = r.n;
22
+ let d = r.d;
23
+ if (d < 0n) {
24
+ n = -n;
25
+ d = -d;
26
+ }
27
+ const g0 = (0, arith_1.gcd)(n, d);
28
+ return { n: n / g0, d: d / g0 };
29
+ }
30
+ function rat(n, d = 1n) {
31
+ return ratNorm({ n, d });
32
+ }
33
+ function ratAdd(a, b) {
34
+ return ratNorm({ n: a.n * b.d + b.n * a.d, d: a.d * b.d });
35
+ }
36
+ function ratSub(a, b) {
37
+ return ratNorm({ n: a.n * b.d - b.n * a.d, d: a.d * b.d });
38
+ }
39
+ function ratMul(a, b) {
40
+ return ratNorm({ n: a.n * b.n, d: a.d * b.d });
41
+ }
42
+ function ratDiv(a, b) {
43
+ if (b.n === 0n) {
44
+ throw new Error('Rat: divide by zero');
45
+ }
46
+ return ratNorm({ n: a.n * b.d, d: a.d * b.n });
47
+ }
48
+ function ratToInt(r) {
49
+ return r.d === 1n ? r.n : null;
50
+ }
51
+ function uniAddRat(a, b) {
52
+ const len = Math.max(a.length, b.length);
53
+ const out = new Array(len).fill(0).map(() => rat(0n));
54
+ for (let i = 0; i < len; i++) {
55
+ out[i] = ratAdd(a[i] ?? rat(0n), b[i] ?? rat(0n));
56
+ }
57
+ while (out.length > 1 && out[out.length - 1].n === 0n) {
58
+ out.pop();
59
+ }
60
+ return out;
61
+ }
62
+ function uniMulRat(a, b) {
63
+ const out = new Array(a.length + b.length - 1).fill(0).map(() => rat(0n));
64
+ for (let i = 0; i < a.length; i++) {
65
+ for (let j = 0; j < b.length; j++) {
66
+ out[i + j] = ratAdd(out[i + j], ratMul(a[i], b[j]));
67
+ }
68
+ }
69
+ while (out.length > 1 && out[out.length - 1].n === 0n) {
70
+ out.pop();
71
+ }
72
+ return out;
73
+ }
74
+ function interpolateUnivariateRat(points) {
75
+ if (points.length === 0) {
76
+ return [rat(0n)];
77
+ }
78
+ const byX = new Map();
79
+ for (const p of points) {
80
+ const prev = byX.get(p.x);
81
+ if (!prev) {
82
+ byX.set(p.x, p.y);
83
+ continue;
84
+ }
85
+ if (ratSub(prev, p.y).n !== 0n) {
86
+ throw new Error('interpolateUnivariateRat: duplicate x with conflicting y');
87
+ }
88
+ }
89
+ const uniq = [...byX.entries()]
90
+ .map(([x, y]) => ({ x, y }))
91
+ .sort((a, b) => (a.x < b.x ? -1 : a.x > b.x ? 1 : 0));
92
+ const n = uniq.length;
93
+ if (n === 1) {
94
+ return [uniq[0].y];
95
+ }
96
+ let poly = [rat(0n)];
97
+ for (let i = 0; i < n; i++) {
98
+ let basis = [rat(1n)];
99
+ let denom = rat(1n);
100
+ for (let j = 0; j < n; j++) {
101
+ if (j === i) {
102
+ continue;
103
+ }
104
+ basis = uniMulRat(basis, [rat(-uniq[j].x), rat(1n)]);
105
+ denom = ratMul(denom, rat(uniq[i].x - uniq[j].x));
106
+ }
107
+ const scale = ratDiv(uniq[i].y, denom);
108
+ const scaled = basis.map(c => ratMul(c, scale));
109
+ poly = uniAddRat(poly, scaled);
110
+ }
111
+ while (poly.length > 1 && poly[poly.length - 1].n === 0n) {
112
+ poly.pop();
113
+ }
114
+ return poly;
115
+ }
@@ -0,0 +1,62 @@
1
+ import { Expression } from '../../core/classes/expression/Expression';
2
+ import { Vector } from '../../core/classes/vector/Vector';
3
+ import type { ExpressionInput } from '../../core/types';
4
+ /**
5
+ * Factors polynomial-like numerator and denominator components of an expression.
6
+ *
7
+ * @remarks
8
+ * The implementation converts polynomial structure to the exact integer-coefficient
9
+ * factorization layer. Irrational constants and function-valued components may be
10
+ * temporarily represented by substitution variables. If the input cannot be handled
11
+ * by that finite polynomial path, the function returns an unevaluated symbolic
12
+ * `factor(input)` expression rather than exposing the internal failure.
13
+ *
14
+ * @param x - Expression-compatible value to factor.
15
+ * @returns A factored expression or an unevaluated symbolic `factor` call.
16
+ */
17
+ export declare function factor(x: ExpressionInput): Expression;
18
+ /**
19
+ * Factors the numerator of polynomial-like input into Expression factors.
20
+ *
21
+ * @param x - Input whose numerator should be factored.
22
+ * @returns New factor expressions; unsupported input is returned as a one-element array.
23
+ */
24
+ export declare function polyFactorExpressions(x: ExpressionInput): Expression[];
25
+ /**
26
+ * Wraps the polynomial factor expressions in an ordered {@link Vector}.
27
+ *
28
+ * @param x - Polynomial-like input.
29
+ * @returns A new Vector containing the factor expressions.
30
+ */
31
+ export declare function polyFactors(x: ExpressionInput): Vector;
32
+ /**
33
+ * Factors the polynomialized numerator and denominator separately.
34
+ *
35
+ * @param x - Rational expression to polynomialize and factor.
36
+ * @returns New numerator and denominator factor arrays after reversing temporary substitutions.
37
+ */
38
+ export declare function factorExpressionParts(x: ExpressionInput): {
39
+ numerator: Expression[];
40
+ denominator: Expression[];
41
+ };
42
+ /**
43
+ * Factors the numerator and denominator separately and returns each factor list as a Vector.
44
+ *
45
+ * @param x - Expression-compatible value to factor.
46
+ * @returns New Vectors for the numerator and denominator factors.
47
+ */
48
+ export declare function factors(x: ExpressionInput): {
49
+ numerator: Vector;
50
+ denominator: Vector;
51
+ };
52
+ /**
53
+ * Returns prime-power factors for the numeric parts of a numerator and denominator.
54
+ *
55
+ * @param x - Numeric or expression-compatible value.
56
+ * @returns Numerator and denominator Vectors. Non-numeric components are kept as single
57
+ * factors instead of being recursively factored.
58
+ */
59
+ export declare function numberFactors(x: ExpressionInput): {
60
+ numerator: Vector;
61
+ denominator: Vector;
62
+ };
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.factor = factor;
4
+ exports.polyFactorExpressions = polyFactorExpressions;
5
+ exports.polyFactors = polyFactors;
6
+ exports.factorExpressionParts = factorExpressionParts;
7
+ exports.factors = factors;
8
+ exports.numberFactors = numberFactors;
9
+ const analysis_1 = require("../../core/classes/expression/analysis");
10
+ const Expression_1 = require("../../core/classes/expression/Expression");
11
+ const constants_1 = require("../../core/classes/parser/constants");
12
+ const multiply_1 = require("../../core/classes/parser/operations/multiply");
13
+ const Polynomial_1 = require("../../core/classes/polynomial/Polynomial");
14
+ const Vector_1 = require("../../core/classes/vector/Vector");
15
+ const primeFactor_1 = require("../../core/functions/bigint/primeFactor");
16
+ const subst_1 = require("../../core/functions/subst");
17
+ const adapters_1 = require("../adapters");
18
+ const factor_1 = require("../algorithms/factor");
19
+ const polynomialize_1 = require("../polynomialize");
20
+ /**
21
+ * Factors polynomial-like numerator and denominator components of an expression.
22
+ *
23
+ * @remarks
24
+ * The implementation converts polynomial structure to the exact integer-coefficient
25
+ * factorization layer. Irrational constants and function-valued components may be
26
+ * temporarily represented by substitution variables. If the input cannot be handled
27
+ * by that finite polynomial path, the function returns an unevaluated symbolic
28
+ * `factor(input)` expression rather than exposing the internal failure.
29
+ *
30
+ * @param x - Expression-compatible value to factor.
31
+ * @returns A factored expression or an unevaluated symbolic `factor` call.
32
+ */
33
+ function factor(x) {
34
+ let retval;
35
+ try {
36
+ x = Expression_1.Expression.create(x);
37
+ if (x.isZero()) {
38
+ retval = x;
39
+ }
40
+ else if (x.isNUM() && x.isInteger()) {
41
+ let factoredInteger;
42
+ const factorCounts = (0, primeFactor_1.primeFactorCounts)(x.getMultiplier().numerator);
43
+ for (const prime in factorCounts) {
44
+ const primePower = Expression_1.Expression.toEXP(prime, factorCounts[prime]);
45
+ factoredInteger = factoredInteger
46
+ ? (0, multiply_1.merge)(factoredInteger, primePower)
47
+ : primePower;
48
+ }
49
+ retval = factoredInteger ?? Expression_1.Expression.Number('1');
50
+ if (x.sign() === -1) {
51
+ retval = retval.neg();
52
+ }
53
+ }
54
+ // A variable is already fully factored.
55
+ else if (x.isVAR()) {
56
+ retval = x;
57
+ }
58
+ else {
59
+ const factored = factors(x);
60
+ retval = factored.numerator.prod().div(factored.denominator.prod());
61
+ }
62
+ }
63
+ catch {
64
+ retval = Expression_1.Expression.toFunction(constants_1.FACTOR, [x]);
65
+ }
66
+ return retval;
67
+ }
68
+ /**
69
+ * Factors the numerator of polynomial-like input into Expression factors.
70
+ *
71
+ * @param x - Input whose numerator should be factored.
72
+ * @returns New factor expressions; unsupported input is returned as a one-element array.
73
+ */
74
+ function polyFactorExpressions(x) {
75
+ let retval;
76
+ try {
77
+ const expr = (0, analysis_1.normalizeMultiplierDenominators)(Expression_1.Expression.create(x));
78
+ const num = expr.getNumerator();
79
+ const den = expr.getDenominator();
80
+ // MultiPoly strictly works in Z. Irrational coefficients
81
+ // must first be promoted to variables.
82
+ const [subbed, map] = (0, subst_1.uSubConstants)(num);
83
+ const p = new Polynomial_1.Polynomial(subbed);
84
+ const variables = p.variables;
85
+ const { poly } = (0, adapters_1.polynomialToMultiPoly)(p);
86
+ // Factor it
87
+ const factors = (0, factor_1.factorPoly)(poly, variables);
88
+ // Remove the u-substitution
89
+ retval = (0, adapters_1.factorsToExpressions)(factors, variables).map(f => (0, subst_1.uUnSub)(f, map).div(den));
90
+ }
91
+ catch {
92
+ retval = [Expression_1.Expression.create(x)];
93
+ }
94
+ return retval;
95
+ }
96
+ /**
97
+ * Wraps the polynomial factor expressions in an ordered {@link Vector}.
98
+ *
99
+ * @param x - Polynomial-like input.
100
+ * @returns A new Vector containing the factor expressions.
101
+ */
102
+ function polyFactors(x) {
103
+ const retval = new Vector_1.Vector(polyFactorExpressions(x));
104
+ return retval;
105
+ }
106
+ /**
107
+ * Factors the polynomialized numerator and denominator separately.
108
+ *
109
+ * @param x - Rational expression to polynomialize and factor.
110
+ * @returns New numerator and denominator factor arrays after reversing temporary substitutions.
111
+ */
112
+ function factorExpressionParts(x) {
113
+ const { numerator, denominator, map } = (0, polynomialize_1.polynomialize)(Expression_1.Expression.create(x));
114
+ return {
115
+ numerator: polyFactorExpressions(numerator).map(f => (0, subst_1.uUnSub)(f, map)),
116
+ denominator: polyFactorExpressions(denominator).map(f => (0, subst_1.uUnSub)(f, map)),
117
+ };
118
+ }
119
+ /**
120
+ * Factors the numerator and denominator separately and returns each factor list as a Vector.
121
+ *
122
+ * @param x - Expression-compatible value to factor.
123
+ * @returns New Vectors for the numerator and denominator factors.
124
+ */
125
+ function factors(x) {
126
+ const { numerator, denominator } = factorExpressionParts(x);
127
+ return {
128
+ numerator: new Vector_1.Vector(numerator),
129
+ denominator: new Vector_1.Vector(denominator),
130
+ };
131
+ }
132
+ /**
133
+ * Returns prime-power factors for the numeric parts of a numerator and denominator.
134
+ *
135
+ * @param x - Numeric or expression-compatible value.
136
+ * @returns Numerator and denominator Vectors. Non-numeric components are kept as single
137
+ * factors instead of being recursively factored.
138
+ */
139
+ function numberFactors(x) {
140
+ x = Expression_1.Expression.create(x);
141
+ const numerator = x.getNumerator();
142
+ const denominator = x.getDenominator();
143
+ function factorNumber(num) {
144
+ if (!num.isNUM()) {
145
+ return new Vector_1.Vector([num]);
146
+ }
147
+ const factors = new Vector_1.Vector();
148
+ const factorCounts = (0, primeFactor_1.primeFactorCounts)(num.getMultiplier().numerator);
149
+ for (const prime in factorCounts) {
150
+ factors.append(Expression_1.Expression.toEXP(prime, factorCounts[prime]));
151
+ }
152
+ return factors;
153
+ }
154
+ return {
155
+ numerator: factorNumber(numerator),
156
+ denominator: factorNumber(denominator),
157
+ };
158
+ }
@@ -0,0 +1,29 @@
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, function-valued or irrational
8
+ * constants may be temporarily substituted, and the multivariate Zippel GCD is
9
+ * verified by exact polynomial division. Factoring supplies an expensive final
10
+ * fallback. When conversion or the supported polynomial algorithms fail, the
11
+ * result remains symbolic as `gcd(x, y)`.
12
+ *
13
+ * @param x - First expression-compatible operand.
14
+ * @param y - Second expression-compatible operand.
15
+ * @returns The exact symbolic GCD or an unevaluated `gcd` expression.
16
+ */
17
+ export declare function gcd(x: ExpressionInput, y: ExpressionInput): Expression;
18
+ /**
19
+ * Returns the least common multiple of two expressions.
20
+ *
21
+ * Numeric inputs reuse exact `Rational` arithmetic. Polynomial expressions use
22
+ * the existing GCD normalization so shared symbolic factors are retained.
23
+ *
24
+ * @param x - First expression-compatible operand.
25
+ * @param y - Second expression-compatible operand.
26
+ * @returns Zero when either operand is zero; otherwise a non-negative numeric LCM or
27
+ * the symbolic product divided by {@link gcd}.
28
+ */
29
+ export declare function lcm(x: ExpressionInput, y: ExpressionInput): Expression;
@@ -0,0 +1,141 @@
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 Polynomial_1 = require("../../core/classes/polynomial/Polynomial");
10
+ const utils_1 = require("../../core/classes/polynomial/utils");
11
+ const subst_1 = require("../../core/functions/subst");
12
+ const adapters_1 = require("../adapters");
13
+ const gcd_1 = require("../algorithms/gcd");
14
+ const factor_1 = require("../factor/factor");
15
+ const polynomialize_1 = require("../polynomialize");
16
+ /**
17
+ * Computes a symbolic greatest common divisor over rational polynomial structure.
18
+ *
19
+ * @remarks
20
+ * Numerators and denominators are polynomialized, function-valued or irrational
21
+ * constants may be temporarily substituted, and the multivariate Zippel GCD is
22
+ * verified by exact polynomial division. Factoring supplies an expensive final
23
+ * fallback. When conversion or the supported polynomial algorithms fail, the
24
+ * result remains symbolic as `gcd(x, y)`.
25
+ *
26
+ * @param x - First expression-compatible operand.
27
+ * @param y - Second expression-compatible operand.
28
+ * @returns The exact symbolic GCD or an unevaluated `gcd` expression.
29
+ */
30
+ function gcd(x, y) {
31
+ try {
32
+ x = Expression_1.Expression.create(x);
33
+ y = Expression_1.Expression.create(y);
34
+ const asDecimal = x.hasDecimal() || y.hasDecimal();
35
+ const { numerator: ax, denominator: bx, map } = (0, polynomialize_1.polynomialize)(x);
36
+ const { numerator: px, denominator: qx, map: finalMap } = (0, polynomialize_1.polynomialize)(y, map);
37
+ const vars = (0, collect_1.collectVariablesSet)([ax, bx, px, qx]);
38
+ const g0 = expressionGCD(ax, px, vars);
39
+ const g1 = expressionGCD(bx, qx, vars);
40
+ const retval = (0, subst_1.uUnSub)(g0.div(g1), finalMap);
41
+ retval.getMultiplier().asDecimal = asDecimal;
42
+ return retval;
43
+ }
44
+ catch { }
45
+ return Expression_1.Expression.toFunction(constants_1.GCD, [x, y]);
46
+ }
47
+ /**
48
+ * Returns the least common multiple of two expressions.
49
+ *
50
+ * Numeric inputs reuse exact `Rational` arithmetic. Polynomial expressions use
51
+ * the existing GCD normalization so shared symbolic factors are retained.
52
+ *
53
+ * @param x - First expression-compatible operand.
54
+ * @param y - Second expression-compatible operand.
55
+ * @returns Zero when either operand is zero; otherwise a non-negative numeric LCM or
56
+ * the symbolic product divided by {@link gcd}.
57
+ */
58
+ function lcm(x, y) {
59
+ const a = Expression_1.Expression.create(x);
60
+ const b = Expression_1.Expression.create(y);
61
+ let retval;
62
+ if (a.isZero() || b.isZero()) {
63
+ retval = (0, shortcuts_1.zero)();
64
+ }
65
+ else if (a.isNUM() && b.isNUM()) {
66
+ retval = Expression_1.Expression.fromRational(a.getMultiplier().LCM(b.getMultiplier()).abs());
67
+ }
68
+ else {
69
+ retval = a.times(b).div(gcd(a, b));
70
+ }
71
+ return retval;
72
+ }
73
+ function expressionGCD(x, y, variables) {
74
+ let retval;
75
+ if (x.isNUM() && y.isNUM()) {
76
+ retval = Expression_1.Expression.create(x.getMultiplier().GCD(y.getMultiplier()));
77
+ }
78
+ else {
79
+ const f = new Polynomial_1.Polynomial(x);
80
+ const g = new Polynomial_1.Polynomial(y);
81
+ if (f.isZero() && g.isZero()) {
82
+ return (0, shortcuts_1.zero)();
83
+ }
84
+ if (f.isZero()) {
85
+ return Expression_1.Expression.create(y);
86
+ }
87
+ if (g.isZero()) {
88
+ return Expression_1.Expression.create(x);
89
+ }
90
+ const { mGCD, p, q } = f.stripMonomialGCD(g);
91
+ variables ??= [...new Set(p.variables.concat(q.variables))].sort();
92
+ const { poly: poly1 } = (0, adapters_1.polynomialToMultiPoly)(p, variables);
93
+ const { poly: poly2 } = (0, adapters_1.polynomialToMultiPoly)(q, variables);
94
+ const g0 = (0, gcd_1.zippelGCDMulti)(poly1, poly2, variables);
95
+ retval = (0, adapters_1.multiPolyToExpression)(g0, variables);
96
+ // Verify
97
+ if (!(0, utils_1.divide)(p, retval)[1].isZero()) {
98
+ retval = (0, shortcuts_1.one)();
99
+ }
100
+ // Don't give up just yet. Try by factor
101
+ if (retval.isOne()) {
102
+ retval = gcdByCommonFactors(p.getExpression(), q.getExpression());
103
+ }
104
+ // Put back the monomial gcd
105
+ retval = retval.times(mGCD.getExpression());
106
+ }
107
+ return retval;
108
+ }
109
+ /**
110
+ * Factors both expressions and compares their factors as a last-resort GCD strategy.
111
+ *
112
+ * Factoring is expensive, so this path runs only after exact polynomial reduction fails
113
+ * to find a nontrivial divisor.
114
+ */
115
+ function gcdByCommonFactors(f, g) {
116
+ let retval = (0, shortcuts_1.one)();
117
+ if (!f.isProduct()) {
118
+ f = (0, factor_1.factor)(f);
119
+ }
120
+ if (!g.isProduct()) {
121
+ g = (0, factor_1.factor)(g);
122
+ }
123
+ // Only proceed if both are products
124
+ if (f.isProduct() && g.isProduct()) {
125
+ const fArray = f.elementsArray();
126
+ const gArray = g.elementsArray();
127
+ // Compare them
128
+ for (const a of fArray) {
129
+ for (const b of gArray) {
130
+ // If they're equal then they're a common factor
131
+ if (a.eq(b)) {
132
+ retval = retval.times(a);
133
+ }
134
+ else if (a.isProduct() && b.isProduct()) {
135
+ return gcd(a, b);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ return retval;
141
+ }
@@ -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 `MultiPoly` engine runs; multiplying a generator by a
10
+ * nonzero 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,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.groebner = groebner;
4
+ const analysis_1 = require("../core/classes/expression/analysis");
5
+ const collect_1 = require("../core/classes/expression/collect");
6
+ const Expression_1 = require("../core/classes/expression/Expression");
7
+ const Polynomial_1 = require("../core/classes/polynomial/Polynomial");
8
+ const Vector_1 = require("../core/classes/vector/Vector");
9
+ const adapters_1 = require("./adapters");
10
+ const groebnerBase_1 = require("./algorithms/groebnerBase");
11
+ /**
12
+ * Computes an expression-facing Groebner basis for polynomial generators.
13
+ *
14
+ * @remarks
15
+ * All generators are converted using one variable order so exponent indices remain
16
+ * consistent. Rational coefficient denominators are cleared per generator before the
17
+ * exact integer-coefficient `MultiPoly` engine runs; multiplying a generator by a
18
+ * nonzero scalar preserves the generated ideal. When `vars` is omitted, variables are
19
+ * collected across every generator.
20
+ *
21
+ * This convenience wrapper uses lexicographic order and a reduced, deterministically
22
+ * sorted basis. Use the advanced Groebner APIs for another monomial order, resource
23
+ * budgets, elimination, or ideal membership.
24
+ *
25
+ * @param expressionArray - Polynomial-like generators of the ideal.
26
+ * @param vars - Variable order, from highest to lowest lexicographic priority.
27
+ * @returns A new vector containing expression representations of the basis.
28
+ */
29
+ function groebner(expressionArray, vars) {
30
+ const inputs = Vector_1.Vector.isVector(expressionArray) ? expressionArray.elements : expressionArray;
31
+ const expressions = inputs.map(e => Expression_1.Expression.create(e));
32
+ // Get the unified variable list across ALL generators
33
+ vars ??= (0, collect_1.collectVariablesSet)(expressions);
34
+ // Convert each polynomial using the unified variable list so indices are consistent.
35
+ // Since the Groebner core operates on MultiPoly over Z, clear denominators per generator
36
+ // before converting so rational-coefficient inputs are lifted into equivalent integer ones.
37
+ const polys = expressions.map(e => {
38
+ const cleared = (0, analysis_1.normalizeMultiplierDenominators)(e);
39
+ return (0, adapters_1.polynomialToMultiPoly)(new Polynomial_1.Polynomial(cleared, vars), vars).poly;
40
+ });
41
+ return new Vector_1.Vector((0, groebnerBase_1.Groebner)(polys, vars).map(gb => (0, adapters_1.multiPolyToExpression)(gb, vars)));
42
+ }
@@ -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. Repeated linear
10
+ * factors and irreducible quadratic factors are supported. An irreducible factor of
11
+ * higher degree, 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;