mathjs 10.6.4 → 11.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (454) hide show
  1. package/HISTORY.md +79 -1
  2. package/README.md +1 -1
  3. package/lib/browser/math.js +2 -41
  4. package/lib/browser/math.js.LICENSE.txt +43 -0
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/core/create.js +6 -5
  7. package/lib/cjs/core/function/import.js +4 -14
  8. package/lib/cjs/core/function/typed.js +54 -12
  9. package/lib/cjs/defaultInstance.js +3 -3
  10. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  11. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  12. package/lib/cjs/entry/configReadonly.js +1 -1
  13. package/lib/cjs/entry/dependenciesAny/dependenciesChainClass.generated.js +3 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesKldivergence.generated.js +3 -0
  15. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +3 -0
  17. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +3 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +56 -0
  19. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +6 -0
  20. package/lib/cjs/entry/dependenciesAny/dependenciesSqrtm.generated.js +3 -0
  21. package/lib/cjs/entry/dependenciesAny/dependenciesStd.generated.js +3 -0
  22. package/lib/cjs/entry/dependenciesAny/dependenciesStdTransform.generated.js +3 -0
  23. package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
  24. package/lib/cjs/entry/dependenciesNumber/dependenciesChainClass.generated.js +3 -0
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  26. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +3 -0
  27. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +3 -0
  28. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +50 -0
  29. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +6 -0
  30. package/lib/cjs/entry/dependenciesNumber/dependenciesStd.generated.js +3 -0
  31. package/lib/cjs/entry/dependenciesNumber/dependenciesStdTransform.generated.js +3 -0
  32. package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
  33. package/lib/cjs/entry/impureFunctionsAny.generated.js +87 -61
  34. package/lib/cjs/entry/impureFunctionsNumber.generated.js +93 -69
  35. package/lib/cjs/entry/pureFunctionsAny.generated.js +50 -45
  36. package/lib/cjs/entry/pureFunctionsNumber.generated.js +22 -19
  37. package/lib/cjs/expression/Parser.js +1 -1
  38. package/lib/cjs/expression/embeddedDocs/construction/index.js +1 -1
  39. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -5
  40. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
  41. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  42. package/lib/cjs/expression/node/AccessorNode.js +216 -173
  43. package/lib/cjs/expression/node/ArrayNode.js +206 -160
  44. package/lib/cjs/expression/node/AssignmentNode.js +321 -270
  45. package/lib/cjs/expression/node/BlockNode.js +223 -172
  46. package/lib/cjs/expression/node/ConditionalNode.js +253 -193
  47. package/lib/cjs/expression/node/ConstantNode.js +216 -171
  48. package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
  49. package/lib/cjs/expression/node/FunctionNode.js +456 -416
  50. package/lib/cjs/expression/node/IndexNode.js +256 -210
  51. package/lib/cjs/expression/node/Node.js +411 -378
  52. package/lib/cjs/expression/node/ObjectNode.js +223 -178
  53. package/lib/cjs/expression/node/OperatorNode.js +474 -397
  54. package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
  55. package/lib/cjs/expression/node/RangeNode.js +272 -224
  56. package/lib/cjs/expression/node/RelationalNode.js +246 -195
  57. package/lib/cjs/expression/node/SymbolNode.js +219 -172
  58. package/lib/cjs/expression/node/utils/access.js +1 -1
  59. package/lib/cjs/expression/node/utils/assign.js +1 -1
  60. package/lib/cjs/expression/operators.js +117 -23
  61. package/lib/cjs/expression/parse.js +37 -19
  62. package/lib/cjs/expression/transform/std.transform.js +3 -1
  63. package/lib/cjs/factoriesAny.js +8 -0
  64. package/lib/cjs/factoriesNumber.js +10 -1
  65. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  66. package/lib/cjs/function/algebra/derivative.js +25 -33
  67. package/lib/cjs/function/algebra/leafCount.js +0 -3
  68. package/lib/cjs/function/algebra/rationalize.js +78 -108
  69. package/lib/cjs/function/algebra/resolve.js +53 -16
  70. package/lib/cjs/function/algebra/simplify/util.js +1 -1
  71. package/lib/cjs/function/algebra/simplify.js +90 -115
  72. package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
  73. package/lib/cjs/function/algebra/simplifyCore.js +196 -93
  74. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  75. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  76. package/lib/cjs/function/algebra/symbolicEqual.js +14 -32
  77. package/lib/cjs/function/arithmetic/abs.js +7 -14
  78. package/lib/cjs/function/arithmetic/add.js +26 -70
  79. package/lib/cjs/function/arithmetic/addScalar.js +17 -9
  80. package/lib/cjs/function/arithmetic/cbrt.js +7 -11
  81. package/lib/cjs/function/arithmetic/ceil.js +50 -40
  82. package/lib/cjs/function/arithmetic/cube.js +5 -10
  83. package/lib/cjs/function/arithmetic/divide.js +7 -7
  84. package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
  85. package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
  86. package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
  87. package/lib/cjs/function/arithmetic/dotPow.js +30 -63
  88. package/lib/cjs/function/arithmetic/exp.js +8 -12
  89. package/lib/cjs/function/arithmetic/expm1.js +10 -10
  90. package/lib/cjs/function/arithmetic/fix.js +34 -28
  91. package/lib/cjs/function/arithmetic/floor.js +51 -41
  92. package/lib/cjs/function/arithmetic/gcd.js +27 -68
  93. package/lib/cjs/function/arithmetic/hypot.js +9 -5
  94. package/lib/cjs/function/arithmetic/invmod.js +2 -2
  95. package/lib/cjs/function/arithmetic/lcm.js +27 -68
  96. package/lib/cjs/function/arithmetic/log.js +10 -12
  97. package/lib/cjs/function/arithmetic/log10.js +5 -3
  98. package/lib/cjs/function/arithmetic/log1p.js +11 -7
  99. package/lib/cjs/function/arithmetic/log2.js +5 -3
  100. package/lib/cjs/function/arithmetic/mod.js +22 -64
  101. package/lib/cjs/function/arithmetic/multiply.js +40 -35
  102. package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
  103. package/lib/cjs/function/arithmetic/norm.js +1 -5
  104. package/lib/cjs/function/arithmetic/nthRoot.js +83 -95
  105. package/lib/cjs/function/arithmetic/nthRoots.js +2 -2
  106. package/lib/cjs/function/arithmetic/round.js +56 -42
  107. package/lib/cjs/function/arithmetic/sign.js +14 -10
  108. package/lib/cjs/function/arithmetic/sqrt.js +5 -9
  109. package/lib/cjs/function/arithmetic/square.js +6 -10
  110. package/lib/cjs/function/arithmetic/subtract.js +44 -100
  111. package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
  112. package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
  113. package/lib/cjs/function/bitwise/bitAnd.js +17 -61
  114. package/lib/cjs/function/bitwise/bitNot.js +6 -4
  115. package/lib/cjs/function/bitwise/bitOr.js +16 -60
  116. package/lib/cjs/function/bitwise/bitXor.js +17 -61
  117. package/lib/cjs/function/bitwise/leftShift.js +69 -82
  118. package/lib/cjs/function/bitwise/rightArithShift.js +69 -82
  119. package/lib/cjs/function/bitwise/rightLogShift.js +69 -82
  120. package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
  121. package/lib/cjs/function/complex/arg.js +5 -3
  122. package/lib/cjs/function/complex/conj.js +6 -7
  123. package/lib/cjs/function/complex/im.js +7 -8
  124. package/lib/cjs/function/complex/re.js +6 -10
  125. package/lib/cjs/function/geometry/distance.js +2 -2
  126. package/lib/cjs/function/logical/and.js +74 -80
  127. package/lib/cjs/function/logical/not.js +13 -6
  128. package/lib/cjs/function/logical/or.js +21 -63
  129. package/lib/cjs/function/logical/xor.js +21 -63
  130. package/lib/cjs/function/matrix/diff.js +11 -8
  131. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  132. package/lib/cjs/function/matrix/fft.js +2 -2
  133. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  134. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  135. package/lib/cjs/function/matrix/ones.js +2 -1
  136. package/lib/cjs/function/matrix/rotate.js +5 -5
  137. package/lib/cjs/function/matrix/sqrtm.js +3 -2
  138. package/lib/cjs/function/matrix/transpose.js +47 -48
  139. package/lib/cjs/function/matrix/zeros.js +2 -1
  140. package/lib/cjs/function/probability/factorial.js +5 -3
  141. package/lib/cjs/function/probability/gamma.js +38 -40
  142. package/lib/cjs/function/probability/kldivergence.js +5 -2
  143. package/lib/cjs/function/probability/lgamma.js +30 -30
  144. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  145. package/lib/cjs/function/relational/compare.js +21 -67
  146. package/lib/cjs/function/relational/compareNatural.js +59 -54
  147. package/lib/cjs/function/relational/compareText.js +10 -43
  148. package/lib/cjs/function/relational/compareUnits.js +24 -0
  149. package/lib/cjs/function/relational/equal.js +19 -80
  150. package/lib/cjs/function/relational/equalScalar.js +7 -9
  151. package/lib/cjs/function/relational/larger.js +21 -67
  152. package/lib/cjs/function/relational/largerEq.js +21 -67
  153. package/lib/cjs/function/relational/smaller.js +21 -67
  154. package/lib/cjs/function/relational/smallerEq.js +21 -67
  155. package/lib/cjs/function/relational/unequal.js +19 -80
  156. package/lib/cjs/function/special/erf.js +5 -3
  157. package/lib/cjs/function/statistics/std.js +11 -2
  158. package/lib/cjs/function/string/format.js +2 -2
  159. package/lib/cjs/function/string/hex.js +1 -2
  160. package/lib/cjs/function/trigonometry/acos.js +4 -8
  161. package/lib/cjs/function/trigonometry/acosh.js +2 -7
  162. package/lib/cjs/function/trigonometry/acot.js +6 -11
  163. package/lib/cjs/function/trigonometry/acoth.js +4 -8
  164. package/lib/cjs/function/trigonometry/acsc.js +6 -11
  165. package/lib/cjs/function/trigonometry/acsch.js +4 -8
  166. package/lib/cjs/function/trigonometry/asec.js +6 -10
  167. package/lib/cjs/function/trigonometry/asech.js +4 -8
  168. package/lib/cjs/function/trigonometry/asin.js +5 -10
  169. package/lib/cjs/function/trigonometry/asinh.js +4 -9
  170. package/lib/cjs/function/trigonometry/atan.js +5 -11
  171. package/lib/cjs/function/trigonometry/atan2.js +25 -63
  172. package/lib/cjs/function/trigonometry/atanh.js +4 -9
  173. package/lib/cjs/function/trigonometry/cos.js +11 -20
  174. package/lib/cjs/function/trigonometry/cosh.js +5 -19
  175. package/lib/cjs/function/trigonometry/cot.js +9 -15
  176. package/lib/cjs/function/trigonometry/coth.js +4 -15
  177. package/lib/cjs/function/trigonometry/csc.js +11 -17
  178. package/lib/cjs/function/trigonometry/csch.js +4 -15
  179. package/lib/cjs/function/trigonometry/sec.js +11 -17
  180. package/lib/cjs/function/trigonometry/sech.js +4 -15
  181. package/lib/cjs/function/trigonometry/sin.js +11 -21
  182. package/lib/cjs/function/trigonometry/sinh.js +5 -20
  183. package/lib/cjs/function/trigonometry/tan.js +11 -21
  184. package/lib/cjs/function/trigonometry/tanh.js +5 -20
  185. package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
  186. package/lib/cjs/function/unit/to.js +7 -41
  187. package/lib/cjs/function/utils/clone.js +1 -1
  188. package/lib/cjs/function/utils/hasNumericValue.js +5 -1
  189. package/lib/cjs/function/utils/isInteger.js +6 -4
  190. package/lib/cjs/function/utils/isNaN.js +1 -1
  191. package/lib/cjs/function/utils/isNegative.js +11 -7
  192. package/lib/cjs/function/utils/isNumeric.js +6 -4
  193. package/lib/cjs/function/utils/isPositive.js +11 -7
  194. package/lib/cjs/function/utils/isPrime.js +5 -3
  195. package/lib/cjs/function/utils/isZero.js +21 -17
  196. package/lib/cjs/function/utils/numeric.js +11 -4
  197. package/lib/cjs/function/utils/typeOf.js +38 -44
  198. package/lib/cjs/header.js +2 -2
  199. package/lib/cjs/plain/bignumber/index.js +1 -1
  200. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  201. package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
  202. package/lib/cjs/type/boolean.js +7 -5
  203. package/lib/cjs/type/chain/Chain.js +23 -3
  204. package/lib/cjs/type/complex/Complex.js +18 -14
  205. package/lib/cjs/type/complex/function/complex.js +6 -4
  206. package/lib/cjs/type/fraction/Fraction.js +10 -6
  207. package/lib/cjs/type/fraction/function/fraction.js +6 -4
  208. package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
  209. package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
  210. package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
  211. package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
  212. package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
  213. package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
  214. package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
  215. package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
  216. package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
  217. package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
  218. package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
  219. package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
  220. package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
  221. package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
  222. package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
  223. package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
  224. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
  225. package/lib/cjs/type/number.js +6 -4
  226. package/lib/cjs/type/string.js +7 -5
  227. package/lib/cjs/type/unit/Unit.js +98 -45
  228. package/lib/cjs/type/unit/function/createUnit.js +2 -1
  229. package/lib/cjs/type/unit/function/unit.js +14 -5
  230. package/lib/cjs/utils/customs.js +2 -2
  231. package/lib/cjs/utils/emitter.js +1 -1
  232. package/lib/cjs/utils/function.js +2 -2
  233. package/lib/cjs/utils/is.js +27 -25
  234. package/lib/cjs/utils/latex.js +3 -3
  235. package/lib/cjs/utils/lruQueue.js +1 -1
  236. package/lib/cjs/utils/map.js +3 -3
  237. package/lib/cjs/utils/object.js +2 -2
  238. package/lib/cjs/utils/snapshot.js +30 -57
  239. package/lib/cjs/utils/string.js +3 -3
  240. package/lib/cjs/version.js +1 -1
  241. package/lib/esm/core/create.js +2 -1
  242. package/lib/esm/core/function/import.js +2 -12
  243. package/lib/esm/core/function/typed.js +47 -11
  244. package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
  245. package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
  246. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  247. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
  248. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  249. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
  250. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
  251. package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
  252. package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
  253. package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
  254. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  255. package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
  256. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  257. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
  258. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  259. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
  260. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
  261. package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
  262. package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
  263. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  264. package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
  265. package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
  266. package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
  267. package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
  268. package/lib/esm/expression/embeddedDocs/construction/index.js +1 -1
  269. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  270. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
  271. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  272. package/lib/esm/expression/node/AccessorNode.js +158 -153
  273. package/lib/esm/expression/node/ArrayNode.js +162 -154
  274. package/lib/esm/expression/node/AssignmentNode.js +257 -245
  275. package/lib/esm/expression/node/BlockNode.js +177 -163
  276. package/lib/esm/expression/node/ConditionalNode.js +197 -174
  277. package/lib/esm/expression/node/ConstantNode.js +171 -163
  278. package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
  279. package/lib/esm/expression/node/FunctionNode.js +407 -407
  280. package/lib/esm/expression/node/IndexNode.js +206 -198
  281. package/lib/esm/expression/node/Node.js +325 -325
  282. package/lib/esm/expression/node/ObjectNode.js +166 -157
  283. package/lib/esm/expression/node/OperatorNode.js +414 -377
  284. package/lib/esm/expression/node/ParenthesisNode.js +146 -138
  285. package/lib/esm/expression/node/RangeNode.js +221 -212
  286. package/lib/esm/expression/node/RelationalNode.js +190 -176
  287. package/lib/esm/expression/node/SymbolNode.js +161 -152
  288. package/lib/esm/expression/operators.js +96 -4
  289. package/lib/esm/expression/parse.js +25 -7
  290. package/lib/esm/expression/transform/std.transform.js +3 -1
  291. package/lib/esm/factoriesAny.js +1 -0
  292. package/lib/esm/factoriesNumber.js +1 -0
  293. package/lib/esm/function/algebra/derivative.js +25 -33
  294. package/lib/esm/function/algebra/leafCount.js +0 -3
  295. package/lib/esm/function/algebra/rationalize.js +83 -114
  296. package/lib/esm/function/algebra/resolve.js +25 -16
  297. package/lib/esm/function/algebra/simplify.js +85 -113
  298. package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
  299. package/lib/esm/function/algebra/simplifyCore.js +192 -91
  300. package/lib/esm/function/algebra/symbolicEqual.js +14 -32
  301. package/lib/esm/function/arithmetic/abs.js +3 -16
  302. package/lib/esm/function/arithmetic/add.js +21 -65
  303. package/lib/esm/function/arithmetic/addScalar.js +11 -5
  304. package/lib/esm/function/arithmetic/cbrt.js +7 -10
  305. package/lib/esm/function/arithmetic/ceil.js +25 -25
  306. package/lib/esm/function/arithmetic/cube.js +5 -9
  307. package/lib/esm/function/arithmetic/divide.js +7 -7
  308. package/lib/esm/function/arithmetic/divideScalar.js +2 -19
  309. package/lib/esm/function/arithmetic/dotDivide.js +22 -64
  310. package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
  311. package/lib/esm/function/arithmetic/dotPow.js +30 -62
  312. package/lib/esm/function/arithmetic/exp.js +8 -11
  313. package/lib/esm/function/arithmetic/expm1.js +10 -9
  314. package/lib/esm/function/arithmetic/fix.js +18 -18
  315. package/lib/esm/function/arithmetic/floor.js +26 -26
  316. package/lib/esm/function/arithmetic/gcd.js +26 -70
  317. package/lib/esm/function/arithmetic/hypot.js +7 -6
  318. package/lib/esm/function/arithmetic/invmod.js +1 -1
  319. package/lib/esm/function/arithmetic/lcm.js +26 -70
  320. package/lib/esm/function/arithmetic/log.js +7 -10
  321. package/lib/esm/function/arithmetic/log10.js +1 -3
  322. package/lib/esm/function/arithmetic/log1p.js +4 -6
  323. package/lib/esm/function/arithmetic/log2.js +1 -3
  324. package/lib/esm/function/arithmetic/mod.js +21 -62
  325. package/lib/esm/function/arithmetic/multiply.js +23 -27
  326. package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
  327. package/lib/esm/function/arithmetic/norm.js +0 -4
  328. package/lib/esm/function/arithmetic/nthRoot.js +41 -76
  329. package/lib/esm/function/arithmetic/nthRoots.js +2 -2
  330. package/lib/esm/function/arithmetic/round.js +26 -28
  331. package/lib/esm/function/arithmetic/sign.js +5 -7
  332. package/lib/esm/function/arithmetic/sqrt.js +5 -8
  333. package/lib/esm/function/arithmetic/square.js +6 -9
  334. package/lib/esm/function/arithmetic/subtract.js +31 -95
  335. package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
  336. package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
  337. package/lib/esm/function/bitwise/bitAnd.js +16 -59
  338. package/lib/esm/function/bitwise/bitNot.js +2 -4
  339. package/lib/esm/function/bitwise/bitOr.js +16 -59
  340. package/lib/esm/function/bitwise/bitXor.js +16 -59
  341. package/lib/esm/function/bitwise/leftShift.js +39 -61
  342. package/lib/esm/function/bitwise/rightArithShift.js +39 -61
  343. package/lib/esm/function/bitwise/rightLogShift.js +39 -61
  344. package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
  345. package/lib/esm/function/complex/arg.js +1 -3
  346. package/lib/esm/function/complex/conj.js +3 -12
  347. package/lib/esm/function/complex/im.js +4 -15
  348. package/lib/esm/function/complex/re.js +3 -15
  349. package/lib/esm/function/geometry/distance.js +2 -2
  350. package/lib/esm/function/logical/and.js +35 -57
  351. package/lib/esm/function/logical/not.js +3 -6
  352. package/lib/esm/function/logical/or.js +16 -61
  353. package/lib/esm/function/logical/xor.js +16 -61
  354. package/lib/esm/function/matrix/diff.js +3 -8
  355. package/lib/esm/function/matrix/ones.js +2 -1
  356. package/lib/esm/function/matrix/rotate.js +5 -5
  357. package/lib/esm/function/matrix/sqrtm.js +3 -2
  358. package/lib/esm/function/matrix/transpose.js +47 -50
  359. package/lib/esm/function/matrix/zeros.js +2 -1
  360. package/lib/esm/function/probability/factorial.js +1 -3
  361. package/lib/esm/function/probability/gamma.js +38 -39
  362. package/lib/esm/function/probability/kldivergence.js +3 -2
  363. package/lib/esm/function/probability/lgamma.js +29 -29
  364. package/lib/esm/function/relational/compare.js +21 -67
  365. package/lib/esm/function/relational/compareNatural.js +54 -49
  366. package/lib/esm/function/relational/compareText.js +10 -42
  367. package/lib/esm/function/relational/compareUnits.js +15 -0
  368. package/lib/esm/function/relational/equal.js +19 -79
  369. package/lib/esm/function/relational/equalScalar.js +6 -9
  370. package/lib/esm/function/relational/larger.js +23 -73
  371. package/lib/esm/function/relational/largerEq.js +23 -73
  372. package/lib/esm/function/relational/smaller.js +23 -73
  373. package/lib/esm/function/relational/smallerEq.js +23 -73
  374. package/lib/esm/function/relational/unequal.js +19 -79
  375. package/lib/esm/function/special/erf.js +1 -3
  376. package/lib/esm/function/statistics/std.js +10 -2
  377. package/lib/esm/function/string/format.js +2 -2
  378. package/lib/esm/function/string/hex.js +1 -2
  379. package/lib/esm/function/trigonometry/acos.js +4 -7
  380. package/lib/esm/function/trigonometry/acosh.js +2 -6
  381. package/lib/esm/function/trigonometry/acot.js +6 -10
  382. package/lib/esm/function/trigonometry/acoth.js +4 -7
  383. package/lib/esm/function/trigonometry/acsc.js +6 -10
  384. package/lib/esm/function/trigonometry/acsch.js +4 -7
  385. package/lib/esm/function/trigonometry/asec.js +6 -9
  386. package/lib/esm/function/trigonometry/asech.js +4 -7
  387. package/lib/esm/function/trigonometry/asin.js +5 -9
  388. package/lib/esm/function/trigonometry/asinh.js +4 -8
  389. package/lib/esm/function/trigonometry/atan.js +5 -10
  390. package/lib/esm/function/trigonometry/atan2.js +26 -65
  391. package/lib/esm/function/trigonometry/atanh.js +4 -8
  392. package/lib/esm/function/trigonometry/cos.js +11 -22
  393. package/lib/esm/function/trigonometry/cosh.js +5 -20
  394. package/lib/esm/function/trigonometry/cot.js +10 -20
  395. package/lib/esm/function/trigonometry/coth.js +6 -20
  396. package/lib/esm/function/trigonometry/csc.js +12 -22
  397. package/lib/esm/function/trigonometry/csch.js +6 -20
  398. package/lib/esm/function/trigonometry/sec.js +12 -22
  399. package/lib/esm/function/trigonometry/sech.js +6 -20
  400. package/lib/esm/function/trigonometry/sin.js +11 -23
  401. package/lib/esm/function/trigonometry/sinh.js +5 -21
  402. package/lib/esm/function/trigonometry/tan.js +11 -23
  403. package/lib/esm/function/trigonometry/tanh.js +5 -21
  404. package/lib/esm/function/trigonometry/trigUnit.js +15 -0
  405. package/lib/esm/function/unit/to.js +8 -43
  406. package/lib/esm/function/utils/clone.js +1 -1
  407. package/lib/esm/function/utils/hasNumericValue.js +3 -1
  408. package/lib/esm/function/utils/isInteger.js +2 -4
  409. package/lib/esm/function/utils/isNaN.js +1 -1
  410. package/lib/esm/function/utils/isNegative.js +3 -7
  411. package/lib/esm/function/utils/isNumeric.js +4 -10
  412. package/lib/esm/function/utils/isPositive.js +3 -7
  413. package/lib/esm/function/utils/isPrime.js +1 -3
  414. package/lib/esm/function/utils/isZero.js +13 -17
  415. package/lib/esm/function/utils/numeric.js +11 -4
  416. package/lib/esm/function/utils/typeOf.js +38 -44
  417. package/lib/esm/type/bignumber/function/bignumber.js +1 -3
  418. package/lib/esm/type/boolean.js +1 -3
  419. package/lib/esm/type/chain/Chain.js +23 -3
  420. package/lib/esm/type/complex/Complex.js +4 -0
  421. package/lib/esm/type/complex/function/complex.js +1 -3
  422. package/lib/esm/type/fraction/Fraction.js +4 -0
  423. package/lib/esm/type/fraction/function/fraction.js +1 -3
  424. package/lib/esm/type/matrix/DenseMatrix.js +15 -1
  425. package/lib/esm/type/matrix/SparseMatrix.js +9 -0
  426. package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
  427. package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
  428. package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
  429. package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
  430. package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
  431. package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
  432. package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
  433. package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
  434. package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
  435. package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
  436. package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
  437. package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
  438. package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
  439. package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
  440. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
  441. package/lib/esm/type/number.js +1 -3
  442. package/lib/esm/type/string.js +1 -3
  443. package/lib/esm/type/unit/Unit.js +85 -36
  444. package/lib/esm/type/unit/function/createUnit.js +2 -1
  445. package/lib/esm/type/unit/function/unit.js +10 -5
  446. package/lib/esm/utils/is.js +18 -18
  447. package/lib/esm/utils/snapshot.js +22 -48
  448. package/lib/esm/version.js +1 -1
  449. package/package.json +22 -25
  450. package/types/index.d.ts +211 -180
  451. package/types/index.ts +358 -144
  452. package/types/tsconfig.json +4 -1
  453. package/lib/cjs/utils/polyfills.js +0 -14
  454. package/lib/esm/utils/polyfills.js +0 -12
@@ -11,391 +11,391 @@ export var createNode = /* #__PURE__ */factory(name, dependencies, _ref => {
11
11
  } = _ref;
12
12
 
13
13
  /**
14
- * Node
14
+ * Validate the symbol names of a scope.
15
+ * Throws an error when the scope contains an illegal symbol.
16
+ * @param {Object} scope
15
17
  */
16
- function Node() {
17
- if (!(this instanceof Node)) {
18
- throw new SyntaxError('Constructor must be called with the new operator');
18
+ function _validateScope(scope) {
19
+ for (var symbol of [...keywords]) {
20
+ if (scope.has(symbol)) {
21
+ throw new Error('Scope contains an illegal symbol, "' + symbol + '" is a reserved keyword');
22
+ }
19
23
  }
20
24
  }
21
- /**
22
- * Evaluate the node
23
- * @param {Object} [scope] Scope to read/write variables
24
- * @return {*} Returns the result
25
- */
26
-
27
-
28
- Node.prototype.evaluate = function (scope) {
29
- return this.compile().evaluate(scope);
30
- };
31
-
32
- Node.prototype.type = 'Node';
33
- Node.prototype.isNode = true;
34
- Node.prototype.comment = '';
35
- /**
36
- * Compile the node into an optimized, evauatable JavaScript function
37
- * @return {{evaluate: function([Object])}} object
38
- * Returns an object with a function 'evaluate',
39
- * which can be invoked as expr.evaluate([scope: Object]),
40
- * where scope is an optional object with
41
- * variables.
42
- */
43
25
 
44
- Node.prototype.compile = function () {
45
- var expr = this._compile(mathWithTransform, {});
46
-
47
- var args = {};
48
- var context = null;
26
+ class Node {
27
+ get type() {
28
+ return 'Node';
29
+ }
49
30
 
50
- function evaluate(scope) {
51
- var s = createMap(scope);
31
+ get isNode() {
32
+ return true;
33
+ }
34
+ /**
35
+ * Evaluate the node
36
+ * @param {Object} [scope] Scope to read/write variables
37
+ * @return {*} Returns the result
38
+ */
52
39
 
53
- _validateScope(s);
54
40
 
55
- return expr(s, args, context);
41
+ evaluate(scope) {
42
+ return this.compile().evaluate(scope);
56
43
  }
44
+ /**
45
+ * Compile the node into an optimized, evauatable JavaScript function
46
+ * @return {{evaluate: function([Object])}} object
47
+ * Returns an object with a function 'evaluate',
48
+ * which can be invoked as expr.evaluate([scope: Object]),
49
+ * where scope is an optional object with
50
+ * variables.
51
+ */
57
52
 
58
- return {
59
- evaluate
60
- };
61
- };
62
- /**
63
- * Compile a node into a JavaScript function.
64
- * This basically pre-calculates as much as possible and only leaves open
65
- * calculations which depend on a dynamic scope with variables.
66
- * @param {Object} math Math.js namespace with functions and constants.
67
- * @param {Object} argNames An object with argument names as key and `true`
68
- * as value. Used in the SymbolNode to optimize
69
- * for arguments from user assigned functions
70
- * (see FunctionAssignmentNode) or special symbols
71
- * like `end` (see IndexNode).
72
- * @return {function} Returns a function which can be called like:
73
- * evalNode(scope: Object, args: Object, context: *)
74
- */
75
53
 
54
+ compile() {
55
+ var expr = this._compile(mathWithTransform, {});
76
56
 
77
- Node.prototype._compile = function (math, argNames) {
78
- throw new Error('Method _compile should be implemented by type ' + this.type);
79
- };
80
- /**
81
- * Execute a callback for each of the child nodes of this node
82
- * @param {function(child: Node, path: string, parent: Node)} callback
83
- */
57
+ var args = {};
58
+ var context = null;
84
59
 
60
+ function evaluate(scope) {
61
+ var s = createMap(scope);
85
62
 
86
- Node.prototype.forEach = function (callback) {
87
- // must be implemented by each of the Node implementations
88
- throw new Error('Cannot run forEach on a Node interface');
89
- };
90
- /**
91
- * Create a new Node having it's childs be the results of calling
92
- * the provided callback function for each of the childs of the original node.
93
- * @param {function(child: Node, path: string, parent: Node): Node} callback
94
- * @returns {OperatorNode} Returns a transformed copy of the node
95
- */
63
+ _validateScope(s);
96
64
 
65
+ return expr(s, args, context);
66
+ }
97
67
 
98
- Node.prototype.map = function (callback) {
99
- // must be implemented by each of the Node implementations
100
- throw new Error('Cannot run map on a Node interface');
101
- };
102
- /**
103
- * Validate whether an object is a Node, for use with map
104
- * @param {Node} node
105
- * @returns {Node} Returns the input if it's a node, else throws an Error
106
- * @protected
107
- */
68
+ return {
69
+ evaluate
70
+ };
71
+ }
72
+ /**
73
+ * Compile a node into a JavaScript function.
74
+ * This basically pre-calculates as much as possible and only leaves open
75
+ * calculations which depend on a dynamic scope with variables.
76
+ * @param {Object} math Math.js namespace with functions and constants.
77
+ * @param {Object} argNames An object with argument names as key and `true`
78
+ * as value. Used in the SymbolNode to optimize
79
+ * for arguments from user assigned functions
80
+ * (see FunctionAssignmentNode) or special symbols
81
+ * like `end` (see IndexNode).
82
+ * @return {function} Returns a function which can be called like:
83
+ * evalNode(scope: Object, args: Object, context: *)
84
+ */
85
+
86
+
87
+ _compile(math, argNames) {
88
+ throw new Error('Method _compile must be implemented by type ' + this.type);
89
+ }
90
+ /**
91
+ * Execute a callback for each of the child nodes of this node
92
+ * @param {function(child: Node, path: string, parent: Node)} callback
93
+ */
108
94
 
109
95
 
110
- Node.prototype._ifNode = function (node) {
111
- if (!isNode(node)) {
112
- throw new TypeError('Callback function must return a Node');
96
+ forEach(callback) {
97
+ // must be implemented by each of the Node implementations
98
+ throw new Error('Cannot run forEach on a Node interface');
113
99
  }
100
+ /**
101
+ * Create a new Node whose children are the results of calling the
102
+ * provided callback function for each child of the original node.
103
+ * @param {function(child: Node, path: string, parent: Node): Node} callback
104
+ * @returns {OperatorNode} Returns a transformed copy of the node
105
+ */
114
106
 
115
- return node;
116
- };
117
- /**
118
- * Recursively traverse all nodes in a node tree. Executes given callback for
119
- * this node and each of its child nodes.
120
- * @param {function(node: Node, path: string, parent: Node)} callback
121
- * A callback called for every node in the node tree.
122
- */
123
107
 
108
+ map(callback) {
109
+ // must be implemented by each of the Node implementations
110
+ throw new Error('Cannot run map on a Node interface');
111
+ }
112
+ /**
113
+ * Validate whether an object is a Node, for use with map
114
+ * @param {Node} node
115
+ * @returns {Node} Returns the input if it's a node, else throws an Error
116
+ * @protected
117
+ */
124
118
 
125
- Node.prototype.traverse = function (callback) {
126
- // execute callback for itself
127
- // eslint-disable-next-line
128
- callback(this, null, null); // recursively traverse over all childs of a node
129
119
 
130
- function _traverse(node, callback) {
131
- node.forEach(function (child, path, parent) {
132
- callback(child, path, parent);
120
+ _ifNode(node) {
121
+ if (!isNode(node)) {
122
+ throw new TypeError('Callback function must return a Node');
123
+ }
133
124
 
134
- _traverse(child, callback);
135
- });
125
+ return node;
136
126
  }
127
+ /**
128
+ * Recursively traverse all nodes in a node tree. Executes given callback for
129
+ * this node and each of its child nodes.
130
+ * @param {function(node: Node, path: string, parent: Node)} callback
131
+ * A callback called for every node in the node tree.
132
+ */
137
133
 
138
- _traverse(this, callback);
139
- };
140
- /**
141
- * Recursively transform a node tree via a transform function.
142
- *
143
- * For example, to replace all nodes of type SymbolNode having name 'x' with a
144
- * ConstantNode with value 2:
145
- *
146
- * const res = Node.transform(function (node, path, parent) {
147
- * if (node && node.isSymbolNode) && (node.name === 'x')) {
148
- * return new ConstantNode(2)
149
- * }
150
- * else {
151
- * return node
152
- * }
153
- * })
154
- *
155
- * @param {function(node: Node, path: string, parent: Node) : Node} callback
156
- * A mapping function accepting a node, and returning
157
- * a replacement for the node or the original node.
158
- * Signature: callback(node: Node, index: string, parent: Node) : Node
159
- * @return {Node} Returns the original node or its replacement
160
- */
161
134
 
135
+ traverse(callback) {
136
+ // execute callback for itself
137
+ // eslint-disable-next-line
138
+ callback(this, null, null); // recursively traverse over all children of a node
162
139
 
163
- Node.prototype.transform = function (callback) {
164
- function _transform(child, path, parent) {
165
- var replacement = callback(child, path, parent);
140
+ function _traverse(node, callback) {
141
+ node.forEach(function (child, path, parent) {
142
+ callback(child, path, parent);
166
143
 
167
- if (replacement !== child) {
168
- // stop iterating when the node is replaced
169
- return replacement;
144
+ _traverse(child, callback);
145
+ });
170
146
  }
171
147
 
172
- return child.map(_transform);
148
+ _traverse(this, callback);
173
149
  }
174
-
175
- return _transform(this, null, null);
176
- };
177
- /**
178
- * Find any node in the node tree matching given filter function. For example, to
179
- * find all nodes of type SymbolNode having name 'x':
180
- *
181
- * const results = Node.filter(function (node) {
182
- * return (node && node.isSymbolNode) && (node.name === 'x')
183
- * })
184
- *
185
- * @param {function(node: Node, path: string, parent: Node) : Node} callback
186
- * A test function returning true when a node matches, and false
187
- * otherwise. Function signature:
188
- * callback(node: Node, index: string, parent: Node) : boolean
189
- * @return {Node[]} nodes An array with nodes matching given filter criteria
190
- */
191
-
192
-
193
- Node.prototype.filter = function (callback) {
194
- var nodes = [];
195
- this.traverse(function (node, path, parent) {
196
- if (callback(node, path, parent)) {
197
- nodes.push(node);
150
+ /**
151
+ * Recursively transform a node tree via a transform function.
152
+ *
153
+ * For example, to replace all nodes of type SymbolNode having name 'x' with
154
+ * a ConstantNode with value 2:
155
+ *
156
+ * const res = Node.transform(function (node, path, parent) {
157
+ * if (node && node.isSymbolNode) && (node.name === 'x')) {
158
+ * return new ConstantNode(2)
159
+ * }
160
+ * else {
161
+ * return node
162
+ * }
163
+ * })
164
+ *
165
+ * @param {function(node: Node, path: string, parent: Node) : Node} callback
166
+ * A mapping function accepting a node, and returning
167
+ * a replacement for the node or the original node. The "signature"
168
+ * of the callback must be:
169
+ * callback(node: Node, index: string, parent: Node) : Node
170
+ * @return {Node} Returns the original node or its replacement
171
+ */
172
+
173
+
174
+ transform(callback) {
175
+ function _transform(child, path, parent) {
176
+ var replacement = callback(child, path, parent);
177
+
178
+ if (replacement !== child) {
179
+ // stop iterating when the node is replaced
180
+ return replacement;
181
+ }
182
+
183
+ return child.map(_transform);
198
184
  }
199
- });
200
- return nodes;
201
- };
202
- /**
203
- * Create a shallow clone of this node
204
- * @return {Node}
205
- */
206
-
207
-
208
- Node.prototype.clone = function () {
209
- // must be implemented by each of the Node implementations
210
- throw new Error('Cannot clone a Node interface');
211
- };
212
- /**
213
- * Create a deep clone of this node
214
- * @return {Node}
215
- */
216
-
217
-
218
- Node.prototype.cloneDeep = function () {
219
- return this.map(function (node) {
220
- return node.cloneDeep();
221
- });
222
- };
223
- /**
224
- * Deep compare this node with another node.
225
- * @param {Node} other
226
- * @return {boolean} Returns true when both nodes are of the same type and
227
- * contain the same values (as do their childs)
228
- */
229
185
 
230
-
231
- Node.prototype.equals = function (other) {
232
- return other ? deepStrictEqual(this, other) : false;
233
- };
234
- /**
235
- * Get string representation. (wrapper function)
236
- *
237
- * This function can get an object of the following form:
238
- * {
239
- * handler: //This can be a callback function of the form
240
- * // "function callback(node, options)"or
241
- * // a map that maps function names (used in FunctionNodes)
242
- * // to callbacks
243
- * parenthesis: "keep" //the parenthesis option (This is optional)
244
- * }
245
- *
246
- * @param {Object} [options]
247
- * @return {string}
248
- */
249
-
250
-
251
- Node.prototype.toString = function (options) {
252
- var customString = this._getCustomString(options);
253
-
254
- if (typeof customString !== 'undefined') {
255
- return customString;
186
+ return _transform(this, null, null);
256
187
  }
257
-
258
- return this._toString(options);
259
- };
260
- /**
261
- * Get a JSON representation of the node
262
- * Both .toJSON() and the static .fromJSON(json) should be implemented by all
263
- * implementations of Node
264
- * @returns {Object}
265
- */
188
+ /**
189
+ * Find any node in the node tree matching given filter function. For
190
+ * example, to find all nodes of type SymbolNode having name 'x':
191
+ *
192
+ * const results = Node.filter(function (node) {
193
+ * return (node && node.isSymbolNode) && (node.name === 'x')
194
+ * })
195
+ *
196
+ * @param {function(node: Node, path: string, parent: Node) : Node} callback
197
+ * A test function returning true when a node matches, and false
198
+ * otherwise. Function signature:
199
+ * callback(node: Node, index: string, parent: Node) : boolean
200
+ * @return {Node[]} nodes
201
+ * An array with nodes matching given filter criteria
202
+ */
203
+
204
+
205
+ filter(callback) {
206
+ var nodes = [];
207
+ this.traverse(function (node, path, parent) {
208
+ if (callback(node, path, parent)) {
209
+ nodes.push(node);
210
+ }
211
+ });
212
+ return nodes;
213
+ }
214
+ /**
215
+ * Create a shallow clone of this node
216
+ * @return {Node}
217
+ */
266
218
 
267
219
 
268
- Node.prototype.toJSON = function () {
269
- throw new Error('Cannot serialize object: toJSON not implemented by ' + this.type);
270
- };
271
- /**
272
- * Get HTML representation. (wrapper function)
273
- *
274
- * This function can get an object of the following form:
275
- * {
276
- * handler: //This can be a callback function of the form
277
- * // "function callback(node, options)" or
278
- * // a map that maps function names (used in FunctionNodes)
279
- * // to callbacks
280
- * parenthesis: "keep" //the parenthesis option (This is optional)
281
- * }
282
- *
283
- * @param {Object} [options]
284
- * @return {string}
285
- */
286
-
220
+ clone() {
221
+ // must be implemented by each of the Node implementations
222
+ throw new Error('Cannot clone a Node interface');
223
+ }
224
+ /**
225
+ * Create a deep clone of this node
226
+ * @return {Node}
227
+ */
287
228
 
288
- Node.prototype.toHTML = function (options) {
289
- var customString = this._getCustomString(options);
290
229
 
291
- if (typeof customString !== 'undefined') {
292
- return customString;
230
+ cloneDeep() {
231
+ return this.map(function (node) {
232
+ return node.cloneDeep();
233
+ });
293
234
  }
235
+ /**
236
+ * Deep compare this node with another node.
237
+ * @param {Node} other
238
+ * @return {boolean} Returns true when both nodes are of the same type and
239
+ * contain the same values (as do their childs)
240
+ */
294
241
 
295
- return this.toHTML(options);
296
- };
297
- /**
298
- * Internal function to generate the string output.
299
- * This has to be implemented by every Node
300
- *
301
- * @throws {Error}
302
- */
303
242
 
243
+ equals(other) {
244
+ return other ? this.type === other.type && deepStrictEqual(this, other) : false;
245
+ }
246
+ /**
247
+ * Get string representation. (wrapper function)
248
+ *
249
+ * This function can get an object of the following form:
250
+ * {
251
+ * handler: //This can be a callback function of the form
252
+ * // "function callback(node, options)"or
253
+ * // a map that maps function names (used in FunctionNodes)
254
+ * // to callbacks
255
+ * parenthesis: "keep" //the parenthesis option (This is optional)
256
+ * }
257
+ *
258
+ * @param {Object} [options]
259
+ * @return {string}
260
+ */
261
+
262
+
263
+ toString(options) {
264
+ var customString = this._getCustomString(options);
265
+
266
+ if (typeof customString !== 'undefined') {
267
+ return customString;
268
+ }
304
269
 
305
- Node.prototype._toString = function () {
306
- // must be implemented by each of the Node implementations
307
- throw new Error('_toString not implemented for ' + this.type);
308
- };
309
- /**
310
- * Get LaTeX representation. (wrapper function)
311
- *
312
- * This function can get an object of the following form:
313
- * {
314
- * handler: //This can be a callback function of the form
315
- * // "function callback(node, options)"or
316
- * // a map that maps function names (used in FunctionNodes)
317
- * // to callbacks
318
- * parenthesis: "keep" //the parenthesis option (This is optional)
319
- * }
320
- *
321
- * @param {Object} [options]
322
- * @return {string}
323
- */
270
+ return this._toString(options);
271
+ }
272
+ /**
273
+ * Get a JSON representation of the node
274
+ * Both .toJSON() and the static .fromJSON(json) should be implemented by all
275
+ * implementations of Node
276
+ * @returns {Object}
277
+ */
324
278
 
325
279
 
326
- Node.prototype.toTex = function (options) {
327
- var customString = this._getCustomString(options);
280
+ toJSON() {
281
+ throw new Error('Cannot serialize object: toJSON not implemented by ' + this.type);
282
+ }
283
+ /**
284
+ * Get HTML representation. (wrapper function)
285
+ *
286
+ * This function can get an object of the following form:
287
+ * {
288
+ * handler: //This can be a callback function of the form
289
+ * // "function callback(node, options)" or
290
+ * // a map that maps function names (used in FunctionNodes)
291
+ * // to callbacks
292
+ * parenthesis: "keep" //the parenthesis option (This is optional)
293
+ * }
294
+ *
295
+ * @param {Object} [options]
296
+ * @return {string}
297
+ */
298
+
299
+
300
+ toHTML(options) {
301
+ var customString = this._getCustomString(options);
302
+
303
+ if (typeof customString !== 'undefined') {
304
+ return customString;
305
+ }
328
306
 
329
- if (typeof customString !== 'undefined') {
330
- return customString;
307
+ return this.toHTML(options);
331
308
  }
309
+ /**
310
+ * Internal function to generate the string output.
311
+ * This has to be implemented by every Node
312
+ *
313
+ * @throws {Error}
314
+ */
332
315
 
333
- return this._toTex(options);
334
- };
335
- /**
336
- * Internal function to generate the LaTeX output.
337
- * This has to be implemented by every Node
338
- *
339
- * @param {Object} [options]
340
- * @throws {Error}
341
- */
342
316
 
317
+ _toString() {
318
+ // must be implemented by each of the Node implementations
319
+ throw new Error('_toString not implemented for ' + this.type);
320
+ }
321
+ /**
322
+ * Get LaTeX representation. (wrapper function)
323
+ *
324
+ * This function can get an object of the following form:
325
+ * {
326
+ * handler: //This can be a callback function of the form
327
+ * // "function callback(node, options)"or
328
+ * // a map that maps function names (used in FunctionNodes)
329
+ * // to callbacks
330
+ * parenthesis: "keep" //the parenthesis option (This is optional)
331
+ * }
332
+ *
333
+ * @param {Object} [options]
334
+ * @return {string}
335
+ */
336
+
337
+
338
+ toTex(options) {
339
+ var customString = this._getCustomString(options);
340
+
341
+ if (typeof customString !== 'undefined') {
342
+ return customString;
343
+ }
343
344
 
344
- Node.prototype._toTex = function (options) {
345
- // must be implemented by each of the Node implementations
346
- throw new Error('_toTex not implemented for ' + this.type);
347
- };
348
- /**
349
- * Helper used by `to...` functions.
350
- */
345
+ return this._toTex(options);
346
+ }
347
+ /**
348
+ * Internal function to generate the LaTeX output.
349
+ * This has to be implemented by every Node
350
+ *
351
+ * @param {Object} [options]
352
+ * @throws {Error}
353
+ */
354
+
355
+
356
+ _toTex(options) {
357
+ // must be implemented by each of the Node implementations
358
+ throw new Error('_toTex not implemented for ' + this.type);
359
+ }
360
+ /**
361
+ * Helper used by `to...` functions.
362
+ */
351
363
 
352
364
 
353
- Node.prototype._getCustomString = function (options) {
354
- if (options && typeof options === 'object') {
355
- switch (typeof options.handler) {
356
- case 'object':
357
- case 'undefined':
358
- return;
365
+ _getCustomString(options) {
366
+ if (options && typeof options === 'object') {
367
+ switch (typeof options.handler) {
368
+ case 'object':
369
+ case 'undefined':
370
+ return;
359
371
 
360
- case 'function':
361
- return options.handler(this, options);
372
+ case 'function':
373
+ return options.handler(this, options);
362
374
 
363
- default:
364
- throw new TypeError('Object or function expected as callback');
375
+ default:
376
+ throw new TypeError('Object or function expected as callback');
377
+ }
365
378
  }
366
379
  }
367
- };
368
- /**
369
- * Get identifier.
370
- * @return {string}
371
- */
372
-
373
-
374
- Node.prototype.getIdentifier = function () {
375
- return this.type;
376
- };
377
- /**
378
- * Get the content of the current Node.
379
- * @return {Node} node
380
- **/
380
+ /**
381
+ * Get identifier.
382
+ * @return {string}
383
+ */
381
384
 
382
385
 
383
- Node.prototype.getContent = function () {
384
- return this;
385
- };
386
- /**
387
- * Validate the symbol names of a scope.
388
- * Throws an error when the scope contains an illegal symbol.
389
- * @param {Object} scope
390
- */
386
+ getIdentifier() {
387
+ return this.type;
388
+ }
389
+ /**
390
+ * Get the content of the current Node.
391
+ * @return {Node} node
392
+ **/
391
393
 
392
394
 
393
- function _validateScope(scope) {
394
- for (var symbol of [...keywords]) {
395
- if (scope.has(symbol)) {
396
- throw new Error('Scope contains an illegal symbol, "' + symbol + '" is a reserved keyword');
397
- }
395
+ getContent() {
396
+ return this;
398
397
  }
398
+
399
399
  }
400
400
 
401
401
  return Node;