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,328 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.multiply = multiply;
4
+ exports.merge = merge;
5
+ exports.canonicalizeRadicals = canonicalizeRadicals;
6
+ const errors_1 = require("../../../errors");
7
+ const complex_1 = require("../../../functions/complex");
8
+ const Settings_1 = require("../../../Settings");
9
+ const Expression_1 = require("../../expression/Expression");
10
+ const shortcuts_1 = require("../../expression/shortcuts");
11
+ const constants_1 = require("../constants");
12
+ const power_1 = require("./power");
13
+ /**
14
+ * Multiplies two Expressions
15
+ *
16
+ * @param a
17
+ * @param b
18
+ * @returns
19
+ */
20
+ function multiply(a, b) {
21
+ let retval;
22
+ // TODO: The DEFER_SIMPLIFICATION flag currently does not work as intended. The intent is for it
23
+ // to defer simplification and return an expression providing the user with a fully reconstructed AST.
24
+ // The mechanisms required to achieve this are currently not in place. Use Parser.parseRPN for now
25
+ // and manually construct it.
26
+ if (Settings_1.Settings.DEFER_SIMPLIFICATION) {
27
+ // The wrap function is just a function to allow us to encapsulate the value
28
+ retval = merge(Expression_1.Expression.toFunction(constants_1.WRAP, [a]), Expression_1.Expression.toFunction(constants_1.WRAP, [b]));
29
+ retval.deferred = true;
30
+ }
31
+ else {
32
+ if (a.isZero()) {
33
+ if (b.isInf()) {
34
+ throw new errors_1.UndefinedError((0, errors_1.message)('infinityTimesZero'));
35
+ }
36
+ retval = Expression_1.Expression.Number('0');
37
+ }
38
+ else if (a.isNUM() && b.isNUM()) {
39
+ retval = Expression_1.Expression.fromRational(a.getMultiplier().times(b.getMultiplier()));
40
+ }
41
+ else if (a.isComplex() && b.isComplex() && a.isSum() && b.isSum()) {
42
+ const realA = a.realPart();
43
+ const realB = b.realPart();
44
+ const imA = a.imagPart();
45
+ const imB = b.imagPart();
46
+ retval = realA
47
+ .times(realB)
48
+ .minus(imA.times(imB))
49
+ .plus(realA.times(imB).plus(imA.times(realB)).times(Expression_1.Expression.Img()));
50
+ }
51
+ else if (a.isNUM() && !b.isInf()) {
52
+ retval = b.copy();
53
+ retval.multiplier = a.getMultiplier().times(b.getMultiplier());
54
+ }
55
+ // Multiplication of infinity
56
+ else if ((a.isInf() || a.isNUM()) && b.isInf()) {
57
+ // The default value for infinity is Inf
58
+ retval = Expression_1.Expression.Inf();
59
+ // Infinity times anything including itself is infinity.
60
+ // It's just a matter of determining the sign at this point.
61
+ if (a.getMultiplier().times(b.getMultiplier()).isNegative()) {
62
+ retval = retval.neg();
63
+ }
64
+ else if (a.isZero() || b.isZero()) {
65
+ throw new errors_1.UndefinedError((0, errors_1.message)('infinityTimesZero'));
66
+ }
67
+ }
68
+ else if (a.value === b.value) {
69
+ // Define Rule: i * i = -1
70
+ retval = a.copy();
71
+ retval.multiplier = retval.getMultiplier().times(b.getMultiplier());
72
+ const power = a.getPower().plus(b.getPower());
73
+ if (power.isZero()) {
74
+ retval = Expression_1.Expression.fromRational(retval.getMultiplier());
75
+ }
76
+ else {
77
+ retval = Expression_1.Expression.setPower(retval, power);
78
+ }
79
+ const pow = retval.getPower();
80
+ // Simplify powers of i
81
+ if (retval.isI()) {
82
+ retval = (0, complex_1.simplifyImaginary)(retval);
83
+ }
84
+ // The abs is redundant for even powers for abs
85
+ else if (retval.isFunction(constants_1.ABS) && pow.isEven()) {
86
+ retval = retval.getArguments()[0].pow(pow).times(retval.getMultiplier());
87
+ }
88
+ // Else just leave it undefined
89
+ }
90
+ // We can just flip because of commutativity. Add can figure out the rest.
91
+ // ******************** RECIPROCALS ******************** //
92
+ else if (constants_1.RANK[a.type] > constants_1.RANK[b.type]) {
93
+ retval = multiply(b, a);
94
+ }
95
+ // Do not use else since this is a catchall for all unhandled cases.
96
+ retval = retval || merge(a, b);
97
+ // Check to make sure that the EXP can be unwrapped. Consider 3^(2/3)*3^(1/3)
98
+ // This started out as an EXP but since its power is now 1, (3)^1, it can be downgraded
99
+ // to a simple NUM
100
+ if (retval.isEXP() && retval.isLinear()) {
101
+ retval = retval.getBase().times(retval.getMultiplier());
102
+ }
103
+ // This ensures that imaginary numbers are properly expanded.
104
+ if (Settings_1.Settings.EVALUATE) {
105
+ retval = retval.distributeMultiplier();
106
+ }
107
+ }
108
+ return retval;
109
+ }
110
+ function transfer(a, b, but) {
111
+ let retval = a.getMultiplier(true);
112
+ const elements = a.getElements();
113
+ // Transfer over the remaining elements
114
+ for (const x in elements) {
115
+ if (x !== but) {
116
+ retval = multiply(retval, elements[x]);
117
+ }
118
+ }
119
+ // Transfer over the existing element
120
+ const result = multiply(elements[but], b);
121
+ //Exit early
122
+ return multiply(retval, result);
123
+ }
124
+ function combine(a, b, keyA, keyB) {
125
+ const retval = Expression_1.Expression.Number('1');
126
+ // We want the multiplier at the top so remove from a and b
127
+ retval.elements = {};
128
+ // Copy the elements
129
+ // TODO: This check should probably be handled by the keyValue method
130
+ retval.elements[keyA] = a.copy();
131
+ retval.elements[keyB] = b.copy();
132
+ return [retval, [a, b]];
133
+ }
134
+ function canMerge(a) {
135
+ return a.isProduct() && a.isLinear();
136
+ }
137
+ function merge(a, b) {
138
+ let retval;
139
+ let elements = [];
140
+ const expressionType = Expression_1.Expression.TYPES.PRD;
141
+ let aCanMerge = canMerge(a);
142
+ let bCanMerge = canMerge(b);
143
+ let setProperties = true;
144
+ // The multiplier is carried at the top of the expression they get moved and stripped from a and b;
145
+ const aHasMultiplier = a.multiplier !== undefined;
146
+ const bHasMultiplier = b.multiplier !== undefined;
147
+ let multiplier = aHasMultiplier || bHasMultiplier
148
+ ? a.getMultiplier().times(b.getMultiplier())
149
+ : undefined;
150
+ if (multiplier) {
151
+ if (aHasMultiplier) {
152
+ a = a.copy();
153
+ a.multiplier = undefined;
154
+ }
155
+ if (bHasMultiplier) {
156
+ b = b.copy();
157
+ b.multiplier = undefined;
158
+ }
159
+ }
160
+ if (a.elements && !b.elements) {
161
+ [b, a] = [a, b]; // Swap them
162
+ [bCanMerge, aCanMerge] = [aCanMerge, bCanMerge];
163
+ }
164
+ // Case 1: Neither has an expression object so make an empty container and append a copy of the second.
165
+ // If skipAction is true then it will just append and skip everything else. Remember, a != b
166
+ if (!bCanMerge) {
167
+ const keyA = a.type === Expression_1.Expression.TYPES.GRP ? a.value : a.keyValue();
168
+ const keyB = b.type === Expression_1.Expression.TYPES.GRP ? b.value : b.keyValue();
169
+ const aIsProductAndLinear = a.isProduct() && a.isLinear();
170
+ // Check if it has the element
171
+ if (aIsProductAndLinear && b.isProduct() && b.getPower().isMinusOne()) {
172
+ let at = a;
173
+ let bt = (0, shortcuts_1.one)();
174
+ const aElements = a.getElements();
175
+ const bElements = b.getElements();
176
+ for (const x in bElements) {
177
+ const e = bElements[x];
178
+ if (x in aElements) {
179
+ at = multiply(at, (0, power_1.power)(e, (0, shortcuts_1.minusOne)()));
180
+ }
181
+ else {
182
+ bt = multiply(bt, e);
183
+ }
184
+ }
185
+ [retval, elements] = combine(at, multiply((0, power_1.power)(bt, (0, shortcuts_1.minusOne)()), a.getMultiplier(true)), a.keyValue(), b.keyValue());
186
+ }
187
+ else if (aIsProductAndLinear && a.getElements()[keyB]) {
188
+ retval = transfer(a, b, keyB);
189
+ setProperties = false;
190
+ }
191
+ else {
192
+ const p = a.getPower();
193
+ const q = b.getPower();
194
+ if (p.sign() === -1 && q.sign() === -1) {
195
+ const _a = a.invert();
196
+ const _b = b.invert();
197
+ retval = multiply(_a, _b);
198
+ retval = retval.invert();
199
+ elements = Object.values(retval.getElements());
200
+ }
201
+ else {
202
+ [retval, elements] = combine(a, b, keyA, keyB);
203
+ }
204
+ }
205
+ }
206
+ // Case 2: The second has an expression object and the other doesn't. This has to of course be of the
207
+ // the right type. The first object gets added to the second object's expression container.
208
+ else if (!aCanMerge && bCanMerge) {
209
+ const key = a.keyValue();
210
+ retval = b.copy();
211
+ const subExpressions = retval.getElements();
212
+ let result;
213
+ // No need to move the multiplier since sub elements don't carry one
214
+ // and it has already been moved from a
215
+ if (key in subExpressions) {
216
+ result = multiply(a, subExpressions[key]);
217
+ }
218
+ else {
219
+ let existing = undefined;
220
+ // See if you can find a product since we prefer it going there before creating a new one
221
+ // This is an early simplification step that pays off.
222
+ for (const x in subExpressions) {
223
+ if (subExpressions[x].isProduct()) {
224
+ existing = subExpressions[x];
225
+ delete subExpressions[x];
226
+ break;
227
+ }
228
+ }
229
+ if (existing) {
230
+ result = multiply(a, existing);
231
+ }
232
+ else {
233
+ result = a.copy();
234
+ }
235
+ }
236
+ // remove it if it resulted in one
237
+ if (result.isNUM()) {
238
+ // If it's a number and not one then move it to the multiplier
239
+ if (!result.isOne()) {
240
+ multiplier = multiplier?.times(result.getMultiplier());
241
+ }
242
+ delete subExpressions[key];
243
+ }
244
+ else {
245
+ subExpressions[key] = result;
246
+ }
247
+ elements = Object.values(subExpressions);
248
+ }
249
+ // Case 3: They both have expression objects
250
+ else {
251
+ retval = a.copy();
252
+ retval.multiplier = a.getMultiplier().times(b.getMultiplier());
253
+ const retvalElements = retval.getElements();
254
+ const bExpressions = b.getElements();
255
+ for (const x in bExpressions) {
256
+ const e = bExpressions[x];
257
+ if (x in retvalElements) {
258
+ const result = multiply(e, retvalElements[x]);
259
+ // Don't multiply 1
260
+ if (expressionType === Expression_1.Expression.TYPES.PRD && result.isOne()) {
261
+ delete retvalElements[x];
262
+ }
263
+ else {
264
+ retvalElements[x] = result;
265
+ }
266
+ }
267
+ else {
268
+ retvalElements[x] = e.copy();
269
+ }
270
+ }
271
+ elements = Object.values(retvalElements);
272
+ }
273
+ // Don't set the properties for recursive calls since those have already been set.
274
+ if (setProperties) {
275
+ // Set the type
276
+ retval.type = expressionType;
277
+ // Update derived aggregate state after the element collection changes.
278
+ retval.updateValue(elements);
279
+ }
280
+ // Put the multiplier back
281
+ if (multiplier && !multiplier.isOne()) {
282
+ retval.multiplier = multiplier;
283
+ }
284
+ // Remove unnecessary complexity. If the type is PRD and can be made a lesser type then do so
285
+ if (retval.isProduct() && Object.keys(retval.getElements()).length === 1) {
286
+ const onlyElement = Object.values(retval.getElements())[0];
287
+ onlyElement.multiplier = onlyElement.getMultiplier().times(retval.getMultiplier());
288
+ retval = onlyElement;
289
+ }
290
+ return retval;
291
+ }
292
+ function canonicalizeRadicals(x) {
293
+ let retval;
294
+ // Direct numeric radical: e.g. 2^(-1/2)
295
+ if (x.isEXP() && x.isConstant() && x.hasRadical()) {
296
+ retval = (0, power_1.rationalizeRadical)(x, true);
297
+ }
298
+ // Function: canonicalize arguments
299
+ else if (x.isFunction()) {
300
+ const args = x.getArguments().map(arg => canonicalizeRadicals(arg));
301
+ let t = Expression_1.Expression.toFunction(x.name, args);
302
+ t.multiplier = x.multiplier;
303
+ t = Expression_1.Expression.setPower(t, x.getPower());
304
+ retval = t;
305
+ }
306
+ // Product containing radicals: walk elements
307
+ else if (x.isProduct()) {
308
+ let retval = Expression_1.Expression.fromRational(x.getMultiplier());
309
+ x.each(element => {
310
+ retval = retval.times(canonicalizeRadicals(element));
311
+ });
312
+ }
313
+ // Sum: walk terms
314
+ else if (x.isSum() && x.isLinear()) {
315
+ let retval = (0, shortcuts_1.zero)();
316
+ x.each(term => {
317
+ retval = retval.plus(canonicalizeRadicals(term));
318
+ });
319
+ }
320
+ // EXP with non-numeric base: canonicalize the base and power
321
+ else if (x.isEXP()) {
322
+ const base = canonicalizeRadicals(x.getBase());
323
+ const pow = canonicalizeRadicals(x.getPower());
324
+ const retval = base.pow(pow);
325
+ retval.multiplier = x.multiplier;
326
+ }
327
+ return retval ?? x;
328
+ }
@@ -0,0 +1,48 @@
1
+ import { Expression } from '../../expression/Expression';
2
+ import type { factorCountType } from '../../../functions/bigint/primeFactor';
3
+ /**
4
+ * IMPORTANT: Expressions of type EXP carry a sign in their value.
5
+ * @param a
6
+ * @param b
7
+ * @returns
8
+ */
9
+ export declare function power(a: Expression, b: Expression): Expression;
10
+ /**
11
+ * Sets the power of a Expression by converting it to an exponential.
12
+ * This functions assumes that no negatives roots or exponents are provided.
13
+ * If EVALUATE is set it returns the evaluate value
14
+ *
15
+ * @param a
16
+ * @param b
17
+ */
18
+ export declare function setPower(a: Expression, b: Expression): Expression;
19
+ /**
20
+ * Converts the square root to power form
21
+ *
22
+ * @param x
23
+ */
24
+ export declare function sqrtToPow(x: Expression): Expression;
25
+ /**
26
+ * Converts a function from power to sqrt form
27
+ *
28
+ * @param x
29
+ */
30
+ export declare function powToSqrt(x: Expression): Expression;
31
+ /**
32
+ * Removes factors of two.
33
+ *
34
+ * @param n
35
+ * @returns
36
+ */
37
+ export declare function nthPow(x: bigint | factorCountType, root: bigint): Expression;
38
+ /**
39
+ * Rationalizes a numeric expression with a negative fractional power.
40
+ * Rewrites a^(-p/q) as a^((kq-p)/q) * a^(-k) where k = ceil(p/q),
41
+ * removing the radical from the denominator.
42
+ *
43
+ * Example: 5^(-2/3) → 5^(1/3) * 5^(-1) = 5^(1/3) / 5
44
+ *
45
+ * @param x An EXP expression like 5^(-2/3)
46
+ * @returns The rationalized expression
47
+ */
48
+ export declare function rationalizeRadical(x: Expression, canonical?: boolean): Expression;