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,240 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MultivariateSolver = void 0;
7
+ const decimal_js_1 = __importDefault(require("decimal.js"));
8
+ const Expression_1 = require("../../core/classes/expression/Expression");
9
+ const DecimalMatrix_1 = require("./DecimalMatrix");
10
+ const DEFAULT_LOWER_BOUND = -10;
11
+ const DEFAULT_UPPER_BOUND = 10;
12
+ const DEFAULT_GRID_POINTS = 5;
13
+ const DEFAULT_MAX_ITERATIONS = 100;
14
+ const DEFAULT_TOLERANCE = 1e-12;
15
+ const DEFAULT_DERIVATIVE_STEP = 1e-8;
16
+ const DEFAULT_DEDUPLICATION_TOLERANCE = 1e-8;
17
+ /**
18
+ * Searches numerically for isolated real solutions of a multivariate system.
19
+ *
20
+ * Each equation is interpreted as `equation = 0`. The solver starts
21
+ * Newton-Raphson at every point in a Cartesian grid, approximates the Jacobian
22
+ * with central differences, and merges nearby converged solutions.
23
+ *
24
+ * @remarks
25
+ * This is a finite-range heuristic rather than a completeness proof. The number
26
+ * of starts is `gridPoints` raised to the number of variables, so cost grows
27
+ * rapidly with dimension. Singular Jacobians, failed evaluations, and starts
28
+ * that do not converge are discarded. Calculations use the ambient
29
+ * `decimal.js` precision, and the supplied equation and variable arrays are
30
+ * retained by the solver.
31
+ *
32
+ * The numerical linear solve requires a square Jacobian in ordinary use; this
33
+ * class is intended for isolated solutions of systems with as many equations
34
+ * as variables.
35
+ */
36
+ class MultivariateSolver {
37
+ dedupTol;
38
+ equations;
39
+ gridPoints;
40
+ h;
41
+ lowerBound;
42
+ maxIterations;
43
+ tolerance;
44
+ upperBound;
45
+ variables;
46
+ /**
47
+ * Creates a multi-start solver over the configured limits.
48
+ *
49
+ * @param equations - Expressions interpreted as equations equal to zero.
50
+ * @param variables - Ordered variables corresponding to solution coordinates.
51
+ * @param options - Grid, iteration, differentiation, and deduplication settings.
52
+ */
53
+ constructor(equations, variables, options = {}) {
54
+ this.equations = equations;
55
+ this.variables = variables;
56
+ this.lowerBound = options.lowerBound ?? DEFAULT_LOWER_BOUND;
57
+ this.upperBound = options.upperBound ?? DEFAULT_UPPER_BOUND;
58
+ this.gridPoints = options.gridPoints ?? DEFAULT_GRID_POINTS;
59
+ this.maxIterations = options.maxIterations ?? DEFAULT_MAX_ITERATIONS;
60
+ this.tolerance = new decimal_js_1.default(options.tolerance ?? DEFAULT_TOLERANCE);
61
+ this.h = new decimal_js_1.default(options.derivativeStep ?? DEFAULT_DERIVATIVE_STEP);
62
+ this.dedupTol = new decimal_js_1.default(options.deduplicationTolerance ?? DEFAULT_DEDUPLICATION_TOLERANCE);
63
+ }
64
+ /**
65
+ * Evaluate all equations at a point, returning a vector of Decimal values.
66
+ */
67
+ evaluateSystem(point) {
68
+ const values = {};
69
+ for (let i = 0; i < this.variables.length; i++) {
70
+ const value = point[i];
71
+ // Preserve the parser's existing handling for non-finite values while keeping
72
+ // ordinary Newton coordinates native.
73
+ values[this.variables[i]] = value.isFinite() ? Expression_1.Expression.Number(value) : value;
74
+ }
75
+ const result = [];
76
+ for (const eq of this.equations) {
77
+ try {
78
+ const evaluated = eq.evaluate(values);
79
+ if (!Expression_1.Expression.isExpression(evaluated)) {
80
+ return null;
81
+ }
82
+ result.push(evaluated.getMultiplier().toDecimal());
83
+ }
84
+ catch {
85
+ return null;
86
+ }
87
+ }
88
+ return result;
89
+ }
90
+ /**
91
+ * Generate grid starting points.
92
+ */
93
+ generateStartingPoints() {
94
+ const n = this.variables.length;
95
+ const points = [];
96
+ const step = (this.upperBound - this.lowerBound) / (this.gridPoints - 1);
97
+ // Generate all combinations of grid points
98
+ const indices = new Array(n).fill(0);
99
+ while (true) {
100
+ const point = [];
101
+ for (let i = 0; i < n; i++) {
102
+ point.push(new decimal_js_1.default(this.lowerBound + indices[i] * step));
103
+ }
104
+ points.push(point);
105
+ // Increment indices
106
+ let carry = true;
107
+ for (let i = n - 1; i >= 0 && carry; i--) {
108
+ indices[i]++;
109
+ if (indices[i] < this.gridPoints) {
110
+ carry = false;
111
+ }
112
+ else {
113
+ indices[i] = 0;
114
+ }
115
+ }
116
+ if (carry) {
117
+ break;
118
+ }
119
+ }
120
+ return points;
121
+ }
122
+ /**
123
+ * Check if a root is a duplicate of an existing one.
124
+ */
125
+ isDuplicate(root, existing) {
126
+ for (const prev of existing) {
127
+ let maxDiff = new decimal_js_1.default(0);
128
+ for (let i = 0; i < root.length; i++) {
129
+ const diff = root[i].minus(prev[i]).abs();
130
+ if (diff.greaterThan(maxDiff)) {
131
+ maxDiff = diff;
132
+ }
133
+ }
134
+ if (maxDiff.lessThan(this.dedupTol)) {
135
+ return true;
136
+ }
137
+ }
138
+ return false;
139
+ }
140
+ /**
141
+ * Compute the Jacobian matrix numerically using central differences.
142
+ */
143
+ jacobian(point) {
144
+ const n = this.variables.length;
145
+ const m = this.equations.length;
146
+ const data = new Array(m).fill(null).map(() => []);
147
+ const twoH = this.h.times(2);
148
+ // A forward/backward system evaluation contains every Jacobian row for one
149
+ // variable. Evaluate once per variable instead of once per equation-variable pair.
150
+ for (let j = 0; j < n; j++) {
151
+ const forward = point.map(v => new decimal_js_1.default(v));
152
+ const backward = point.map(v => new decimal_js_1.default(v));
153
+ forward[j] = forward[j].plus(this.h);
154
+ backward[j] = backward[j].minus(this.h);
155
+ const fPlus = this.evaluateSystem(forward);
156
+ const fMinus = this.evaluateSystem(backward);
157
+ if (!fPlus || !fMinus) {
158
+ return null;
159
+ }
160
+ for (let i = 0; i < m; i++) {
161
+ data[i].push(fPlus[i].minus(fMinus[i]).div(twoH));
162
+ }
163
+ }
164
+ return new DecimalMatrix_1.DecimalMatrix(data);
165
+ }
166
+ /**
167
+ * Run Newton-Raphson from a single starting point.
168
+ * Returns the converged root or null if it didn't converge.
169
+ */
170
+ newtonRaphson(start) {
171
+ const x = start.map(v => new decimal_js_1.default(v));
172
+ for (let iter = 0; iter < this.maxIterations; iter++) {
173
+ const F = this.evaluateSystem(x);
174
+ if (!F) {
175
+ return null;
176
+ }
177
+ // Check convergence: ||F(x)|| < tolerance
178
+ let norm = new decimal_js_1.default(0);
179
+ for (const fi of F) {
180
+ norm = norm.plus(fi.times(fi));
181
+ }
182
+ norm = norm.sqrt();
183
+ if (norm.lessThan(this.tolerance)) {
184
+ return x;
185
+ }
186
+ const J = this.jacobian(x);
187
+ if (!J) {
188
+ return null;
189
+ }
190
+ // Solve J * delta = -F
191
+ const negF = F.map(fi => fi.neg());
192
+ const delta = DecimalMatrix_1.DecimalMatrix.solve(J, negF);
193
+ if (!delta) {
194
+ return null; // Singular Jacobian
195
+ }
196
+ // Update: x = x + delta
197
+ for (let i = 0; i < x.length; i++) {
198
+ x[i] = x[i].plus(delta[i]);
199
+ }
200
+ }
201
+ // Check if we're close enough after max iterations
202
+ const F = this.evaluateSystem(x);
203
+ if (F) {
204
+ let norm = new decimal_js_1.default(0);
205
+ for (const fi of F) {
206
+ norm = norm.plus(fi.times(fi));
207
+ }
208
+ if (norm.sqrt().lessThan(this.tolerance)) {
209
+ return x;
210
+ }
211
+ }
212
+ return null;
213
+ }
214
+ /**
215
+ * Searches for roots from every configured grid point.
216
+ *
217
+ * @returns Deduplicated solutions as maps keyed in `variables` order. An empty
218
+ * array means that no start converged; it does not prove that no root exists.
219
+ */
220
+ roots() {
221
+ const convergedRoots = [];
222
+ const startingPoints = this.generateStartingPoints();
223
+ for (const start of startingPoints) {
224
+ const root = this.newtonRaphson(start);
225
+ if (root && !this.isDuplicate(root, convergedRoots)) {
226
+ convergedRoots.push(root);
227
+ }
228
+ }
229
+ // Convert to Maps of Expressions
230
+ return convergedRoots.map(root => {
231
+ const solution = new Map();
232
+ for (let i = 0; i < this.variables.length; i++) {
233
+ const value = root[i];
234
+ solution.set(this.variables[i], value.isFinite() ? Expression_1.Expression.Number(value) : Expression_1.Expression.create(value));
235
+ }
236
+ return solution;
237
+ });
238
+ }
239
+ }
240
+ exports.MultivariateSolver = MultivariateSolver;
@@ -0,0 +1,104 @@
1
+ import Decimal from 'decimal.js';
2
+ import { Complex } from '../../core/classes/complex/Complex';
3
+ import { Expression } from '../../core/classes/expression/Expression';
4
+ import { Polynomial } from '../../core/classes/polynomial/Polynomial';
5
+ /**
6
+ * Finds all complex roots of a univariate polynomial numerically.
7
+ *
8
+ * Coefficient arrays use ascending powers: the element at index `k` is the
9
+ * coefficient of `x^k`. Expression, Polynomial, and string inputs are converted directly
10
+ * to numerical complex coefficients before solving. Linear and quadratic inputs are handled
11
+ * directly; higher degrees use simultaneous Aberth iteration followed by
12
+ * Newton refinement.
13
+ *
14
+ * @remarks
15
+ * The solver temporarily changes the global `decimal.js` precision while
16
+ * {@link roots} runs and restores the previous precision before returning.
17
+ * The requested precision controls the numerical work, while `epsilon`
18
+ * controls convergence and cleanup of numerical noise. Roots are returned
19
+ * once per polynomial degree, so repeated roots can appear as repeated nearby
20
+ * approximations.
21
+ *
22
+ * This class finds numerical roots; it does not certify completeness or exact
23
+ * multiplicities for ill-conditioned polynomials.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const solver = new PolynomialSolver('x^2+1', 'x');
28
+ * const roots = solver.roots();
29
+ * ```
30
+ */
31
+ export declare class PolynomialSolver {
32
+ private degree;
33
+ private eps;
34
+ private p;
35
+ private precision;
36
+ /**
37
+ * Creates a polynomial root solver.
38
+ *
39
+ * @param input - A polynomial expression, Polynomial, polynomial string, or ascending-power
40
+ * Decimal coefficients.
41
+ * @param variable - Variable expected in polynomial or string input. It is used to reject
42
+ * a conflicting variable or multivariate polynomial.
43
+ * @param precision - Working `decimal.js` precision used while finding roots.
44
+ * @param epsilon - Numerical convergence tolerance. Defaults to `1e-14`.
45
+ * @throws {@link core!UnexpectedInputError} If symbolic input is multivariate, uses a
46
+ * variable different from `variable`, or has nonnumeric coefficients.
47
+ */
48
+ constructor(input: Decimal[] | Polynomial | Expression | string, variable?: string, precision?: number, epsilon?: Decimal);
49
+ /**
50
+ * Aberth method: simultaneous approximation of all roots
51
+ * More stable than deflation for high-degree polynomials
52
+ */
53
+ private aberthMethod;
54
+ private complexSqrt;
55
+ /**
56
+ * Evaluates a polynomial and its derivative together using Horner's method.
57
+ */
58
+ private evaluateWithDerivative;
59
+ private finalize;
60
+ private isNumericalRoot;
61
+ /**
62
+ * Uses native double-precision arithmetic to locate starting points for Decimal refinement.
63
+ *
64
+ * Returning `null` leaves the existing Decimal Aberth implementation responsible for the
65
+ * complete solve.
66
+ */
67
+ private nativeAberthSeeds;
68
+ /**
69
+ * Refine a single root using Newton's method
70
+ */
71
+ private newtonRefine;
72
+ /**
73
+ * Computes a Lagrange-Fujiwara upper bound for root magnitudes.
74
+ *
75
+ * For a polynomial with leading coefficient a_n, every root lies within
76
+ * 2 * max(|a_(n-i) / a_n|^(1/i)). This is substantially tighter than the
77
+ * simple Cauchy bound for polynomials with large middle coefficients.
78
+ *
79
+ * @see https://doi.org/10.1016/S0377-0427(03)00381-9
80
+ */
81
+ private rootMagnitudeBound;
82
+ private solveQuadratic;
83
+ /**
84
+ * Computes the roots of the configured polynomial.
85
+ *
86
+ * Leading zero coefficients are ignored. A constant or zero coefficient
87
+ * array produces an empty result. Passing `false` returns the numeric
88
+ * {@link Complex} values directly; otherwise each root is converted to an
89
+ * {@link Expression} after restoring the caller's Decimal precision.
90
+ *
91
+ * @param asExpressions - Whether to convert roots to symbolic expressions.
92
+ * Defaults to `true`.
93
+ * @returns One root value per effective polynomial degree, including repeated
94
+ * numerical approximations for repeated roots.
95
+ */
96
+ roots(asExpressions?: true): Expression[];
97
+ roots(asExpressions?: false): Complex[];
98
+ /**
99
+ * Computes roots numerically, rejects candidates with an excessive polynomial residual,
100
+ * and converts accepted values only after numerical validation is complete.
101
+ */
102
+ validatedRoots(asExpressions?: true): Expression[];
103
+ validatedRoots(asExpressions?: false): Complex[];
104
+ }