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,438 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports._ = void 0;
4
+ exports.callFunction = callFunction;
5
+ exports.distribute = distribute;
6
+ exports.setEqual = setEqual;
7
+ exports.functionAssign = functionAssign;
8
+ exports.route = route;
9
+ const math_1 = require("../../../../math/math");
10
+ const structuredEntityUtils_1 = require("../../../common/functions/structuredEntityUtils");
11
+ const dispatch_1 = require("../../../dispatch");
12
+ const errors_1 = require("../../../errors");
13
+ const setFunction_1 = require("../../../functions/setFunction");
14
+ const Settings_1 = require("../../../Settings");
15
+ const assertiveFunctions_1 = require("../../assumption/assertiveFunctions");
16
+ const Collection_1 = require("../../collection/Collection");
17
+ const Equation_1 = require("../../equation/Equation");
18
+ const Expression_1 = require("../../expression/Expression");
19
+ const utils_1 = require("../../expression/utils");
20
+ const Matrix_1 = require("../../matrix/Matrix");
21
+ const Vector_1 = require("../../vector/Vector");
22
+ const constants_1 = require("../constants");
23
+ const controlFlow_1 = require("../scripting/controlFlow");
24
+ const functions_1 = require("../scripting/functions");
25
+ const scope_1 = require("../scripting/scope");
26
+ const add_1 = require("./add");
27
+ const comma_1 = require("./comma");
28
+ const divide_1 = require("./divide");
29
+ const multiply_1 = require("./multiply");
30
+ const power_1 = require("./power");
31
+ const subtract_1 = require("./subtract");
32
+ /**
33
+ * Invokes a function selected dynamically from the dispatch table. Registered functions do
34
+ * not share one parameter signature, so the parser cannot verify the argument types after
35
+ * resolving a function name at runtime. Arity has already been validated by `callFunction`.
36
+ */
37
+ function invokeMathFunction(fn, args) {
38
+ const callable = fn;
39
+ return callable(...args);
40
+ }
41
+ /**
42
+ * The wrapper used to call functions within the parser.
43
+ *
44
+ * @param functionName The name of the function being called
45
+ * @param args
46
+ * @returns
47
+ */
48
+ function callFunction(functionName, args) {
49
+ // An empty parser argument scope currently resolves to undefined. Normalize that internal
50
+ // sentinel before arity validation so registered zero-argument functions receive no arguments.
51
+ if (args.length === 1 && args[0] === undefined) {
52
+ args = [];
53
+ }
54
+ // The details regarding the function
55
+ const attributes = dispatch_1.mathFunctionRegistry[functionName];
56
+ if (attributes === undefined) {
57
+ throw new errors_1.ParserError((0, errors_1.message)('unsupportedFunction', { function: functionName }));
58
+ }
59
+ const { fn, minArgs, maxArgs, maxPrecision, equationArgs, distElWise, deferArguments, returnBoundary, } = attributes;
60
+ // Complain if the number of arguments provided is less that what is allowed
61
+ if (minArgs > -1 && args.length < minArgs) {
62
+ throw new errors_1.ParserError((0, errors_1.message)('functionMinArgs', {
63
+ function: functionName,
64
+ min: String(minArgs),
65
+ actual: String(args.length),
66
+ }));
67
+ }
68
+ // Complain if the number of arguments provided is greater than what is allowed
69
+ if (maxArgs > -1 && args.length > maxArgs) {
70
+ throw new errors_1.ParserError((0, errors_1.message)('functionMaxArgs', {
71
+ function: functionName,
72
+ max: String(maxArgs),
73
+ actual: String(args.length),
74
+ }));
75
+ }
76
+ let result;
77
+ if (deferArguments) {
78
+ // Deferred functions own the timing and frequency of argument evaluation.
79
+ const invoke = () => invokeMathFunction(fn, args);
80
+ result = returnBoundary ? (0, controlFlow_1.parserReturnBoundary)(invoke) : invoke();
81
+ }
82
+ else {
83
+ const entityArgs = [];
84
+ for (const arg of args) {
85
+ if (typeof arg === 'function') {
86
+ throw new errors_1.ParserError((0, errors_1.message)('malformedExpression'));
87
+ }
88
+ entityArgs.push(arg);
89
+ }
90
+ // A structured entity carrying symbolic bracket access represents one unresolved
91
+ // scalar value. Normalize it before equation checks, distribution, or invocation.
92
+ const normalizedArgs = entityArgs.map(arg => Expression_1.Expression.fromSymbolicAccess(arg) ?? arg);
93
+ if (attributes.level === 'system') {
94
+ for (let i = 0; i < normalizedArgs.length; i++) {
95
+ if (Equation_1.Equation.isEquation(normalizedArgs[i]) && !equationArgs?.includes(i)) {
96
+ throw new errors_1.UnexpectedDataType((0, errors_1.message)('expressionExpected', { type: 'Equation' }));
97
+ }
98
+ }
99
+ }
100
+ const elementWiseArgs = distElWise
101
+ ? normalizedArgs.filter((arg) => Vector_1.Vector.isVector(arg) || Matrix_1.Matrix.isMatrix(arg))
102
+ : [];
103
+ if (elementWiseArgs.length > 0) {
104
+ const structure = elementWiseArgs[0];
105
+ for (const arg of elementWiseArgs) {
106
+ let dimensionsMatch;
107
+ if (Vector_1.Vector.isVector(structure)) {
108
+ dimensionsMatch = Vector_1.Vector.isVector(arg) && structure.count() === arg.count();
109
+ }
110
+ else {
111
+ dimensionsMatch = Matrix_1.Matrix.isMatrix(arg) && structure.dimensionsMatch(arg);
112
+ }
113
+ if (!dimensionsMatch) {
114
+ throw new errors_1.DimensionError((0, errors_1.message)('mismatchedDimensions', { function: functionName }));
115
+ }
116
+ }
117
+ result = distribute((_element, i, j) => {
118
+ const scalarArgs = normalizedArgs.map(arg => {
119
+ let scalarArg = arg;
120
+ if (Vector_1.Vector.isVector(arg)) {
121
+ scalarArg = arg.__get__([i]);
122
+ }
123
+ else if (Matrix_1.Matrix.isMatrix(arg)) {
124
+ scalarArg = arg.get(i, j);
125
+ }
126
+ return scalarArg;
127
+ });
128
+ return callFunction(functionName, scalarArgs);
129
+ }, structure);
130
+ }
131
+ // Call and return
132
+ else if (!fn || Settings_1.Settings.DEFER_SIMPLIFICATION) {
133
+ result = Expression_1.Expression.toFunction(functionName, normalizedArgs);
134
+ }
135
+ else {
136
+ result = invokeMathFunction(fn, normalizedArgs);
137
+ }
138
+ // Ensure that this function always returns even if it's a symbolic function. This will
139
+ // occur if the function didn't return a value.
140
+ if (!result) {
141
+ result = Expression_1.Expression.toFunction(functionName, normalizedArgs);
142
+ }
143
+ }
144
+ // Let all future calls know that an inferior precision was used.
145
+ if (maxPrecision) {
146
+ result.precision = maxPrecision;
147
+ }
148
+ return result;
149
+ }
150
+ /**
151
+ * Combines all base operations into one object for parser.
152
+ */
153
+ exports._ = {
154
+ plus: add_1.add,
155
+ minus: subtract_1.subtract,
156
+ times: multiply_1.multiply,
157
+ div: divide_1.divide,
158
+ pow: power_1.power,
159
+ mod: modulo,
160
+ percent: percentage,
161
+ // ASSERTIVE FUNCTIONS
162
+ assertEQ: assertiveFunctions_1.assertEQ,
163
+ assertGT: assertiveFunctions_1.assertGT,
164
+ assertGTE: assertiveFunctions_1.assertGTE,
165
+ assertLT: assertiveFunctions_1.assertLT,
166
+ assertLTE: assertiveFunctions_1.assertLTE,
167
+ comma: comma_1.comma,
168
+ assign: scope_1.assign,
169
+ functionAssign: functionAssign,
170
+ setEqual: setEqual,
171
+ lt: lt,
172
+ lte: lte,
173
+ eq: eq,
174
+ gt: gt,
175
+ gte: gte,
176
+ minusPrefix: subtract_1.subtractPrefix,
177
+ plusPrefix: add_1.addPrefix,
178
+ factorial: math_1.factorial,
179
+ doubleFactorial: math_1.doubleFactorial,
180
+ // dot: dot,
181
+ // IN: IN,
182
+ };
183
+ /**
184
+ * Applies a scalar function over a copied Vector or Matrix while preserving its shape.
185
+ * Matrix cells must remain Expressions because Matrix does not permit aggregate elements.
186
+ */
187
+ function distribute(fn, structure) {
188
+ let retval;
189
+ if (Vector_1.Vector.isVector(structure)) {
190
+ retval = structure.copy().each((v, i) => {
191
+ return fn(v, i);
192
+ });
193
+ }
194
+ else {
195
+ retval = structure.copy().each((v, i, j) => {
196
+ const result = fn(v, Number(i), Number(j));
197
+ if (!Expression_1.Expression.isExpression(result)) {
198
+ throw new errors_1.UnexpectedDataType((0, errors_1.message)('expressionExpected', { type: constants_1.dataTypes[result.dataType] }));
199
+ }
200
+ return result;
201
+ });
202
+ }
203
+ return retval;
204
+ }
205
+ /**
206
+ * Set's one expression equal to the other
207
+ * @param a
208
+ * @param b
209
+ * @returns
210
+ */
211
+ function setEqual(a, b) {
212
+ if (!(Expression_1.Expression.isExpression(a) || Expression_1.Expression.isExpression(b))) {
213
+ throw new errors_1.UnsupportedOperationError((0, errors_1.message)('unsupportedOperation'));
214
+ }
215
+ return new Equation_1.Equation(a, b);
216
+ }
217
+ /**
218
+ * Registers a symbolic function from a deferred declaration body.
219
+ *
220
+ * The parser preserves the declaration as the parameter expressions followed by
221
+ * the function name. Each part of the signature must remain a plain variable. The
222
+ * right-hand callback owns compiled parser RPN and is executed only when the registered
223
+ * function is called.
224
+ *
225
+ * @param a - Deferred function signature.
226
+ * @param body - Deferred symbolic function body.
227
+ * @returns The registered function signature.
228
+ */
229
+ function functionAssign(a, body) {
230
+ if (!Collection_1.Collection.isCollection(a)) {
231
+ throw new errors_1.UnexpectedInputError((0, errors_1.message)('invalidFunctionDeclaration', { declaration: a.text() }));
232
+ }
233
+ const signature = [...a.getElements()];
234
+ const functionExpression = signature.pop();
235
+ if (!Expression_1.Expression.isExpression(functionExpression)) {
236
+ throw new errors_1.UnexpectedInputError((0, errors_1.message)('invalidFunctionDeclaration', { declaration: a.text() }));
237
+ }
238
+ const name = (0, utils_1.assertPlainVariableAndGetString)(functionExpression);
239
+ const args = signature.map(argument => {
240
+ if (!Expression_1.Expression.isExpression(argument)) {
241
+ throw new errors_1.UnexpectedInputError((0, errors_1.message)('plainVariableExpected', { input: argument.text() }));
242
+ }
243
+ return (0, utils_1.assertPlainVariableAndGetString)(argument);
244
+ });
245
+ (0, setFunction_1.setFunction)({
246
+ type: 'symbolic',
247
+ name,
248
+ minArgs: args.length,
249
+ maxArgs: args.length,
250
+ fn: (0, functions_1.wrappedFunction)(body, args),
251
+ });
252
+ return Expression_1.Expression.toFunction(name, args.map(argument => Expression_1.Expression.Variable(argument)));
253
+ }
254
+ /**
255
+ * Returns 1 if two values are equal otherwise 0
256
+ * @param a
257
+ * @param b
258
+ * @returns
259
+ */
260
+ function eq(a, b) {
261
+ return Expression_1.Expression.create(Number(a.eq(b)));
262
+ }
263
+ /**
264
+ * Returns 1 if a is greater than b otherwise 0
265
+ * @param a
266
+ * @param b
267
+ * @returns
268
+ */
269
+ function gt(a, b) {
270
+ return Expression_1.Expression.create(Number(a.gt(b)));
271
+ }
272
+ /**
273
+ * Returns 1 if a is less than b otherwise 0
274
+ * @param a
275
+ * @param b
276
+ * @returns
277
+ */
278
+ function lt(a, b) {
279
+ return Expression_1.Expression.create(Number(a.lt(b)));
280
+ }
281
+ /**
282
+ * Computes the remainder for the parser's infix `%` operator.
283
+ *
284
+ * The symbolic implementation already lives on {@link Expression.mod}; this adapter keeps
285
+ * operator dispatch in the same parser layer as the other arithmetic operations.
286
+ */
287
+ function modulo(a, b) {
288
+ if (!Expression_1.Expression.isExpression(a) || !Expression_1.Expression.isExpression(b)) {
289
+ throw new errors_1.UnsupportedOperationError((0, errors_1.message)('unsupportedOperation'));
290
+ }
291
+ return a.mod(b);
292
+ }
293
+ /**
294
+ * Converts an expression from percentage notation to its exact fractional value.
295
+ */
296
+ function percentage(a) {
297
+ if (!Expression_1.Expression.isExpression(a)) {
298
+ throw new errors_1.UnsupportedOperationError((0, errors_1.message)('unsupportedOperation'));
299
+ }
300
+ const retval = a.div(100);
301
+ return retval;
302
+ }
303
+ /**
304
+ * Returns 1 if a is greater than or equal to b otherwise 0
305
+ * @param a
306
+ * @param b
307
+ * @returns
308
+ */
309
+ function gte(a, b) {
310
+ return Expression_1.Expression.create(Number(a.gte(b)));
311
+ }
312
+ /**
313
+ * Returns 1 if a is less than or equal to b otherwise 0
314
+ * @param a
315
+ * @param b
316
+ * @returns
317
+ */
318
+ function lte(a, b) {
319
+ return Expression_1.Expression.create(Number(a.lte(b)));
320
+ }
321
+ function isRoutedOperation(operation) {
322
+ return (operation === 'pow' ||
323
+ operation === 'times' ||
324
+ operation === 'div' ||
325
+ operation === 'minus' ||
326
+ operation === 'plus' ||
327
+ operation === 'eq' ||
328
+ operation === 'lt' ||
329
+ operation === 'lte' ||
330
+ operation === 'gt' ||
331
+ operation === 'gte');
332
+ }
333
+ function routeOperation(target, operand, operation) {
334
+ const retval = target[operation](operand);
335
+ return typeof retval === 'boolean' ? Expression_1.Expression.create(Number(retval)) : retval;
336
+ }
337
+ function dispatchDynamicOperation(a, b, operation) {
338
+ // Preserve the parser's historically loose dispatch for operator actions outside
339
+ // RoutedOperation. Tightening these actions may change existing runtime behavior.
340
+ const useA = a.isEnumerable || Equation_1.Equation.isEquation(a);
341
+ const target = useA ? a : b;
342
+ const operand = useA ? b : a;
343
+ const dynamicTarget = target;
344
+ const dynamicOperation = dynamicTarget[operation];
345
+ if (!dynamicOperation) {
346
+ throw new errors_1.UnsupportedOperationError((0, errors_1.message)('unsupportedOperation'));
347
+ }
348
+ const retval = dynamicOperation.call(target, operand);
349
+ // Wrap booleans since those are used both inside and outside of the parser
350
+ return typeof retval === 'boolean' ? Expression_1.Expression.create(Number(retval)) : retval;
351
+ }
352
+ function route(a, b, operation) {
353
+ let retval;
354
+ if (operation === 'assign') {
355
+ retval = (0, scope_1.assign)(a, b);
356
+ }
357
+ else if (operation === 'comma') {
358
+ retval = (0, comma_1.comma)(a, b);
359
+ }
360
+ else if (operation === 'in') {
361
+ // Membership is the infix form of contains(container, value), so reverse the operands.
362
+ retval = callFunction('contains', [b, a]);
363
+ }
364
+ else if (isRoutedOperation(operation)) {
365
+ if (Equation_1.Equation.isEquation(a) || Equation_1.Equation.isEquation(b)) {
366
+ if (Equation_1.Equation.isEquation(a) && Equation_1.Equation.isEquation(b)) {
367
+ if (['eq', 'lt', 'lte', 'gt', 'gte'].includes(operation)) {
368
+ retval = dispatchDynamicOperation(a, b, operation);
369
+ }
370
+ else {
371
+ throw new errors_1.UnsupportedOperationError((0, errors_1.message)('unsupportedOperation'));
372
+ }
373
+ }
374
+ else if (Equation_1.Equation.isEquation(a)) {
375
+ if (['plus', 'minus', 'times', 'div'].includes(operation)) {
376
+ retval = dispatchDynamicOperation(a, b, operation);
377
+ }
378
+ else {
379
+ throw new errors_1.UnsupportedOperationError((0, errors_1.message)('unsupportedOperation'));
380
+ }
381
+ }
382
+ else if (operation === 'plus' || operation === 'times') {
383
+ retval = dispatchDynamicOperation(a, b, operation);
384
+ }
385
+ else {
386
+ throw new errors_1.UnsupportedOperationError((0, errors_1.message)('unsupportedOperation'));
387
+ }
388
+ }
389
+ else if ((0, structuredEntityUtils_1.isEnumerable)(a)) {
390
+ retval = routeOperation(a, b, operation);
391
+ }
392
+ else if ((Vector_1.Vector.isVector(b) || Matrix_1.Matrix.isMatrix(b)) &&
393
+ (operation === 'minus' || operation === 'div' || operation === 'pow')) {
394
+ // Scalar-left operations are not commutative. Preserve operand order while
395
+ // distributing the operation over the structured right-hand operand.
396
+ if (!Expression_1.Expression.isExpression(a)) {
397
+ throw new errors_1.UnsupportedOperationError((0, errors_1.message)('unsupportedOperation'));
398
+ }
399
+ // A scalar base with a Matrix exponent is a matrix-function question. It must
400
+ // not be reversed into Matrix.pow() or silently treated as element-wise power.
401
+ if (Matrix_1.Matrix.isMatrix(b) && operation === 'pow') {
402
+ throw new errors_1.UnsupportedOperationError((0, errors_1.message)('unsupportedOperation'));
403
+ }
404
+ retval = distribute(element => {
405
+ let elementResult;
406
+ if (Expression_1.Expression.isExpression(element)) {
407
+ if (operation === 'minus') {
408
+ elementResult = (0, subtract_1.subtract)(a, element);
409
+ }
410
+ else if (operation === 'div') {
411
+ elementResult = (0, divide_1.divide)(a, element);
412
+ }
413
+ else {
414
+ elementResult = (0, power_1.power)(a, element);
415
+ }
416
+ }
417
+ else {
418
+ const nestedResult = route(a, element, operation);
419
+ if (Array.isArray(nestedResult)) {
420
+ throw new errors_1.UnsupportedOperationError((0, errors_1.message)('unsupportedOperation'));
421
+ }
422
+ elementResult = nestedResult;
423
+ }
424
+ return elementResult;
425
+ }, b);
426
+ }
427
+ else if ((0, structuredEntityUtils_1.isEnumerable)(b)) {
428
+ retval = routeOperation(b, a, operation);
429
+ }
430
+ else {
431
+ retval = dispatchDynamicOperation(a, b, operation);
432
+ }
433
+ }
434
+ else {
435
+ retval = dispatchDynamicOperation(a, b, operation);
436
+ }
437
+ return retval;
438
+ }
@@ -0,0 +1,11 @@
1
+ import { Expression } from '../../expression/Expression';
2
+ /**
3
+ * Multiplies two Expressions
4
+ *
5
+ * @param a
6
+ * @param b
7
+ * @returns
8
+ */
9
+ export declare function multiply(a: Expression, b: Expression): Expression;
10
+ export declare function merge(a: Expression, b: Expression): Expression;
11
+ export declare function canonicalizeRadicals(x: Expression): Expression;