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
@@ -1,3 +1,4 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  import { isAccessorNode, isIndexNode, isNode, isSymbolNode } from '../../utils/is.js';
2
3
  import { getSafeProperty, setSafeProperty } from '../../utils/customs.js';
3
4
  import { factory } from '../../utils/factory.js';
@@ -20,305 +21,316 @@ export var createAssignmentNode = /* #__PURE__ */factory(name, dependencies, _re
20
21
  subset,
21
22
  matrix
22
23
  });
23
- /**
24
- * @constructor AssignmentNode
25
- * @extends {Node}
26
- *
27
- * Define a symbol, like `a=3.2`, update a property like `a.b=3.2`, or
28
- * replace a subset of a matrix like `A[2,2]=42`.
29
- *
30
- * Syntax:
31
- *
32
- * new AssignmentNode(symbol, value)
33
- * new AssignmentNode(object, index, value)
34
- *
35
- * Usage:
36
- *
37
- * new AssignmentNode(new SymbolNode('a'), new ConstantNode(2)) // a=2
38
- * new AssignmentNode(new SymbolNode('a'), new IndexNode('b'), new ConstantNode(2)) // a.b=2
39
- * new AssignmentNode(new SymbolNode('a'), new IndexNode(1, 2), new ConstantNode(3)) // a[1,2]=3
40
- *
41
- * @param {SymbolNode | AccessorNode} object Object on which to assign a value
42
- * @param {IndexNode} [index=null] Index, property name or matrix
43
- * index. Optional. If not provided
44
- * and `object` is a SymbolNode,
45
- * the property is assigned to the
46
- * global scope.
47
- * @param {Node} value The value to be assigned
24
+ /*
25
+ * Is parenthesis needed?
26
+ * @param {node} node
27
+ * @param {string} [parenthesis='keep']
28
+ * @param {string} implicit
29
+ * @private
48
30
  */
49
31
 
50
- function AssignmentNode(object, index, value) {
51
- if (!(this instanceof AssignmentNode)) {
52
- throw new SyntaxError('Constructor must be called with the new operator');
53
- }
54
-
55
- this.object = object;
56
- this.index = value ? index : null;
57
- this.value = value || index; // validate input
58
-
59
- if (!isSymbolNode(object) && !isAccessorNode(object)) {
60
- throw new TypeError('SymbolNode or AccessorNode expected as "object"');
61
- }
62
-
63
- if (isSymbolNode(object) && object.name === 'end') {
64
- throw new Error('Cannot assign to symbol "end"');
65
- }
66
-
67
- if (this.index && !isIndexNode(this.index)) {
68
- // index is optional
69
- throw new TypeError('IndexNode expected as "index"');
32
+ function needParenthesis(node, parenthesis, implicit) {
33
+ if (!parenthesis) {
34
+ parenthesis = 'keep';
70
35
  }
71
36
 
72
- if (!isNode(this.value)) {
73
- throw new TypeError('Node expected as "value"');
74
- } // readonly property name
37
+ var precedence = getPrecedence(node, parenthesis, implicit);
38
+ var exprPrecedence = getPrecedence(node.value, parenthesis, implicit);
39
+ return parenthesis === 'all' || exprPrecedence !== null && exprPrecedence <= precedence;
40
+ }
75
41
 
42
+ class AssignmentNode extends Node {
43
+ /**
44
+ * @constructor AssignmentNode
45
+ * @extends {Node}
46
+ *
47
+ * Define a symbol, like `a=3.2`, update a property like `a.b=3.2`, or
48
+ * replace a subset of a matrix like `A[2,2]=42`.
49
+ *
50
+ * Syntax:
51
+ *
52
+ * new AssignmentNode(symbol, value)
53
+ * new AssignmentNode(object, index, value)
54
+ *
55
+ * Usage:
56
+ *
57
+ * new AssignmentNode(new SymbolNode('a'), new ConstantNode(2)) // a=2
58
+ * new AssignmentNode(new SymbolNode('a'),
59
+ * new IndexNode('b'),
60
+ * new ConstantNode(2)) // a.b=2
61
+ * new AssignmentNode(new SymbolNode('a'),
62
+ * new IndexNode(1, 2),
63
+ * new ConstantNode(3)) // a[1,2]=3
64
+ *
65
+ * @param {SymbolNode | AccessorNode} object
66
+ * Object on which to assign a value
67
+ * @param {IndexNode} [index=null]
68
+ * Index, property name or matrix index. Optional. If not provided
69
+ * and `object` is a SymbolNode, the property is assigned to the
70
+ * global scope.
71
+ * @param {Node} value
72
+ * The value to be assigned
73
+ */
74
+ constructor(object, index, value) {
75
+ super();
76
+ this.object = object;
77
+ this.index = value ? index : null;
78
+ this.value = value || index; // validate input
79
+
80
+ if (!isSymbolNode(object) && !isAccessorNode(object)) {
81
+ throw new TypeError('SymbolNode or AccessorNode expected as "object"');
82
+ }
76
83
 
77
- Object.defineProperty(this, 'name', {
78
- get: function () {
79
- if (this.index) {
80
- return this.index.isObjectProperty() ? this.index.getObjectProperty() : '';
81
- } else {
82
- return this.object.name || '';
83
- }
84
- }.bind(this),
85
- set: function set() {
86
- throw new Error('Cannot assign a new name, name is read-only');
84
+ if (isSymbolNode(object) && object.name === 'end') {
85
+ throw new Error('Cannot assign to symbol "end"');
87
86
  }
88
- });
89
- }
90
87
 
91
- AssignmentNode.prototype = new Node();
92
- AssignmentNode.prototype.type = 'AssignmentNode';
93
- AssignmentNode.prototype.isAssignmentNode = true;
94
- /**
95
- * Compile a node into a JavaScript function.
96
- * This basically pre-calculates as much as possible and only leaves open
97
- * calculations which depend on a dynamic scope with variables.
98
- * @param {Object} math Math.js namespace with functions and constants.
99
- * @param {Object} argNames An object with argument names as key and `true`
100
- * as value. Used in the SymbolNode to optimize
101
- * for arguments from user assigned functions
102
- * (see FunctionAssignmentNode) or special symbols
103
- * like `end` (see IndexNode).
104
- * @return {function} Returns a function which can be called like:
105
- * evalNode(scope: Object, args: Object, context: *)
106
- */
88
+ if (this.index && !isIndexNode(this.index)) {
89
+ // index is optional
90
+ throw new TypeError('IndexNode expected as "index"');
91
+ }
107
92
 
108
- AssignmentNode.prototype._compile = function (math, argNames) {
109
- var evalObject = this.object._compile(math, argNames);
93
+ if (!isNode(this.value)) {
94
+ throw new TypeError('Node expected as "value"');
95
+ }
96
+ } // class name for typing purposes:
110
97
 
111
- var evalIndex = this.index ? this.index._compile(math, argNames) : null;
112
98
 
113
- var evalValue = this.value._compile(math, argNames);
99
+ // readonly property name
100
+ get name() {
101
+ if (this.index) {
102
+ return this.index.isObjectProperty() ? this.index.getObjectProperty() : '';
103
+ } else {
104
+ return this.object.name || '';
105
+ }
106
+ }
114
107
 
115
- var name = this.object.name;
108
+ get type() {
109
+ return name;
110
+ }
116
111
 
117
- if (!this.index) {
118
- // apply a variable to the scope, for example `a=2`
119
- if (!isSymbolNode(this.object)) {
120
- throw new TypeError('SymbolNode expected as object');
121
- }
112
+ get isAssignmentNode() {
113
+ return true;
114
+ }
115
+ /**
116
+ * Compile a node into a JavaScript function.
117
+ * This basically pre-calculates as much as possible and only leaves open
118
+ * calculations which depend on a dynamic scope with variables.
119
+ * @param {Object} math Math.js namespace with functions and constants.
120
+ * @param {Object} argNames An object with argument names as key and `true`
121
+ * as value. Used in the SymbolNode to optimize
122
+ * for arguments from user assigned functions
123
+ * (see FunctionAssignmentNode) or special symbols
124
+ * like `end` (see IndexNode).
125
+ * @return {function} Returns a function which can be called like:
126
+ * evalNode(scope: Object, args: Object, context: *)
127
+ */
128
+
129
+
130
+ _compile(math, argNames) {
131
+ var evalObject = this.object._compile(math, argNames);
132
+
133
+ var evalIndex = this.index ? this.index._compile(math, argNames) : null;
134
+
135
+ var evalValue = this.value._compile(math, argNames);
136
+
137
+ var name = this.object.name;
138
+
139
+ if (!this.index) {
140
+ // apply a variable to the scope, for example `a=2`
141
+ if (!isSymbolNode(this.object)) {
142
+ throw new TypeError('SymbolNode expected as object');
143
+ }
122
144
 
123
- return function evalAssignmentNode(scope, args, context) {
124
- var value = evalValue(scope, args, context);
125
- scope.set(name, value);
126
- return value;
127
- };
128
- } else if (this.index.isObjectProperty()) {
129
- // apply an object property for example `a.b=2`
130
- var prop = this.index.getObjectProperty();
131
- return function evalAssignmentNode(scope, args, context) {
132
- var object = evalObject(scope, args, context);
133
- var value = evalValue(scope, args, context);
134
- setSafeProperty(object, prop, value);
135
- return value;
136
- };
137
- } else if (isSymbolNode(this.object)) {
138
- // update a matrix subset, for example `a[2]=3`
139
- return function evalAssignmentNode(scope, args, context) {
140
- var childObject = evalObject(scope, args, context);
141
- var value = evalValue(scope, args, context);
142
- var index = evalIndex(scope, args, childObject); // Important: we pass childObject instead of context
143
-
144
- scope.set(name, assign(childObject, index, value));
145
- return value;
146
- };
147
- } else {
148
- // isAccessorNode(node.object) === true
149
- // update a matrix subset, for example `a.b[2]=3`
150
- // we will not use the compile function of the AccessorNode, but compile it
151
- // ourselves here as we need the parent object of the AccessorNode:
152
- // wee need to apply the updated object to parent object
153
- var evalParentObject = this.object.object._compile(math, argNames);
154
-
155
- if (this.object.index.isObjectProperty()) {
156
- var parentProp = this.object.index.getObjectProperty();
157
145
  return function evalAssignmentNode(scope, args, context) {
158
- var parent = evalParentObject(scope, args, context);
159
- var childObject = getSafeProperty(parent, parentProp);
160
- var index = evalIndex(scope, args, childObject); // Important: we pass childObject instead of context
161
-
162
146
  var value = evalValue(scope, args, context);
163
- setSafeProperty(parent, parentProp, assign(childObject, index, value));
147
+ scope.set(name, value);
164
148
  return value;
165
149
  };
166
- } else {
167
- // if some parameters use the 'end' parameter, we need to calculate the size
168
- var evalParentIndex = this.object.index._compile(math, argNames);
169
-
150
+ } else if (this.index.isObjectProperty()) {
151
+ // apply an object property for example `a.b=2`
152
+ var prop = this.index.getObjectProperty();
170
153
  return function evalAssignmentNode(scope, args, context) {
171
- var parent = evalParentObject(scope, args, context);
172
- var parentIndex = evalParentIndex(scope, args, parent); // Important: we pass parent instead of context
173
-
174
- var childObject = access(parent, parentIndex);
175
- var index = evalIndex(scope, args, childObject); // Important: we pass childObject instead of context
176
-
154
+ var object = evalObject(scope, args, context);
177
155
  var value = evalValue(scope, args, context);
178
- assign(parent, parentIndex, assign(childObject, index, value));
156
+ setSafeProperty(object, prop, value);
179
157
  return value;
180
158
  };
181
- }
182
- }
183
- };
184
- /**
185
- * Execute a callback for each of the child nodes of this node
186
- * @param {function(child: Node, path: string, parent: Node)} callback
187
- */
159
+ } else if (isSymbolNode(this.object)) {
160
+ // update a matrix subset, for example `a[2]=3`
161
+ return function evalAssignmentNode(scope, args, context) {
162
+ var childObject = evalObject(scope, args, context);
163
+ var value = evalValue(scope, args, context); // Important: we pass childObject instead of context:
188
164
 
165
+ var index = evalIndex(scope, args, childObject);
166
+ scope.set(name, assign(childObject, index, value));
167
+ return value;
168
+ };
169
+ } else {
170
+ // isAccessorNode(node.object) === true
171
+ // update a matrix subset, for example `a.b[2]=3`
172
+ // we will not use the compile function of the AccessorNode, but
173
+ // compile it ourselves here as we need the parent object of the
174
+ // AccessorNode:
175
+ // wee need to apply the updated object to parent object
176
+ var evalParentObject = this.object.object._compile(math, argNames);
177
+
178
+ if (this.object.index.isObjectProperty()) {
179
+ var parentProp = this.object.index.getObjectProperty();
180
+ return function evalAssignmentNode(scope, args, context) {
181
+ var parent = evalParentObject(scope, args, context);
182
+ var childObject = getSafeProperty(parent, parentProp); // Important: we pass childObject instead of context:
183
+
184
+ var index = evalIndex(scope, args, childObject);
185
+ var value = evalValue(scope, args, context);
186
+ setSafeProperty(parent, parentProp, assign(childObject, index, value));
187
+ return value;
188
+ };
189
+ } else {
190
+ // if some parameters use the 'end' parameter, we need to calculate
191
+ // the size
192
+ var evalParentIndex = this.object.index._compile(math, argNames);
189
193
 
190
- AssignmentNode.prototype.forEach = function (callback) {
191
- callback(this.object, 'object', this);
194
+ return function evalAssignmentNode(scope, args, context) {
195
+ var parent = evalParentObject(scope, args, context); // Important: we pass parent instead of context:
192
196
 
193
- if (this.index) {
194
- callback(this.index, 'index', this);
195
- }
197
+ var parentIndex = evalParentIndex(scope, args, parent);
198
+ var childObject = access(parent, parentIndex); // Important: we pass childObject instead of context
196
199
 
197
- callback(this.value, 'value', this);
198
- };
199
- /**
200
- * Create a new AssignmentNode having it's childs be the results of calling
201
- * the provided callback function for each of the childs of the original node.
202
- * @param {function(child: Node, path: string, parent: Node): Node} callback
203
- * @returns {AssignmentNode} Returns a transformed copy of the node
204
- */
200
+ var index = evalIndex(scope, args, childObject);
201
+ var value = evalValue(scope, args, context);
202
+ assign(parent, parentIndex, assign(childObject, index, value));
203
+ return value;
204
+ };
205
+ }
206
+ }
207
+ }
208
+ /**
209
+ * Execute a callback for each of the child nodes of this node
210
+ * @param {function(child: Node, path: string, parent: Node)} callback
211
+ */
205
212
 
206
213
 
207
- AssignmentNode.prototype.map = function (callback) {
208
- var object = this._ifNode(callback(this.object, 'object', this));
214
+ forEach(callback) {
215
+ callback(this.object, 'object', this);
209
216
 
210
- var index = this.index ? this._ifNode(callback(this.index, 'index', this)) : null;
217
+ if (this.index) {
218
+ callback(this.index, 'index', this);
219
+ }
211
220
 
212
- var value = this._ifNode(callback(this.value, 'value', this));
221
+ callback(this.value, 'value', this);
222
+ }
223
+ /**
224
+ * Create a new AssignmentNode whose children are the results of calling
225
+ * the provided callback function for each child of the original node.
226
+ * @param {function(child: Node, path: string, parent: Node): Node} callback
227
+ * @returns {AssignmentNode} Returns a transformed copy of the node
228
+ */
213
229
 
214
- return new AssignmentNode(object, index, value);
215
- };
216
- /**
217
- * Create a clone of this node, a shallow copy
218
- * @return {AssignmentNode}
219
- */
220
230
 
231
+ map(callback) {
232
+ var object = this._ifNode(callback(this.object, 'object', this));
221
233
 
222
- AssignmentNode.prototype.clone = function () {
223
- return new AssignmentNode(this.object, this.index, this.value);
224
- };
225
- /*
226
- * Is parenthesis needed?
227
- * @param {node} node
228
- * @param {string} [parenthesis='keep']
229
- * @private
230
- */
234
+ var index = this.index ? this._ifNode(callback(this.index, 'index', this)) : null;
231
235
 
236
+ var value = this._ifNode(callback(this.value, 'value', this));
232
237
 
233
- function needParenthesis(node, parenthesis) {
234
- if (!parenthesis) {
235
- parenthesis = 'keep';
238
+ return new AssignmentNode(object, index, value);
236
239
  }
240
+ /**
241
+ * Create a clone of this node, a shallow copy
242
+ * @return {AssignmentNode}
243
+ */
237
244
 
238
- var precedence = getPrecedence(node, parenthesis);
239
- var exprPrecedence = getPrecedence(node.value, parenthesis);
240
- return parenthesis === 'all' || exprPrecedence !== null && exprPrecedence <= precedence;
241
- }
242
- /**
243
- * Get string representation
244
- * @param {Object} options
245
- * @return {string}
246
- */
247
-
248
-
249
- AssignmentNode.prototype._toString = function (options) {
250
- var object = this.object.toString(options);
251
- var index = this.index ? this.index.toString(options) : '';
252
- var value = this.value.toString(options);
253
245
 
254
- if (needParenthesis(this, options && options.parenthesis)) {
255
- value = '(' + value + ')';
246
+ clone() {
247
+ return new AssignmentNode(this.object, this.index, this.value);
256
248
  }
249
+ /**
250
+ * Get string representation
251
+ * @param {Object} options
252
+ * @return {string}
253
+ */
257
254
 
258
- return object + index + ' = ' + value;
259
- };
260
- /**
261
- * Get a JSON representation of the node
262
- * @returns {Object}
263
- */
264
255
 
256
+ _toString(options) {
257
+ var object = this.object.toString(options);
258
+ var index = this.index ? this.index.toString(options) : '';
259
+ var value = this.value.toString(options);
265
260
 
266
- AssignmentNode.prototype.toJSON = function () {
267
- return {
268
- mathjs: 'AssignmentNode',
269
- object: this.object,
270
- index: this.index,
271
- value: this.value
272
- };
273
- };
274
- /**
275
- * Instantiate an AssignmentNode from its JSON representation
276
- * @param {Object} json An object structured like
277
- * `{"mathjs": "AssignmentNode", object: ..., index: ..., value: ...}`,
278
- * where mathjs is optional
279
- * @returns {AssignmentNode}
280
- */
261
+ if (needParenthesis(this, options && options.parenthesis, options && options.implicit)) {
262
+ value = '(' + value + ')';
263
+ }
281
264
 
265
+ return object + index + ' = ' + value;
266
+ }
267
+ /**
268
+ * Get a JSON representation of the node
269
+ * @returns {Object}
270
+ */
271
+
272
+
273
+ toJSON() {
274
+ return {
275
+ mathjs: name,
276
+ object: this.object,
277
+ index: this.index,
278
+ value: this.value
279
+ };
280
+ }
281
+ /**
282
+ * Instantiate an AssignmentNode from its JSON representation
283
+ * @param {Object} json
284
+ * An object structured like
285
+ * `{"mathjs": "AssignmentNode", object: ..., index: ..., value: ...}`,
286
+ * where mathjs is optional
287
+ * @returns {AssignmentNode}
288
+ */
289
+
290
+
291
+ static fromJSON(json) {
292
+ return new AssignmentNode(json.object, json.index, json.value);
293
+ }
294
+ /**
295
+ * Get HTML representation
296
+ * @param {Object} options
297
+ * @return {string}
298
+ */
282
299
 
283
- AssignmentNode.fromJSON = function (json) {
284
- return new AssignmentNode(json.object, json.index, json.value);
285
- };
286
- /**
287
- * Get HTML representation
288
- * @param {Object} options
289
- * @return {string}
290
- */
291
300
 
301
+ toHTML(options) {
302
+ var object = this.object.toHTML(options);
303
+ var index = this.index ? this.index.toHTML(options) : '';
304
+ var value = this.value.toHTML(options);
292
305
 
293
- AssignmentNode.prototype.toHTML = function (options) {
294
- var object = this.object.toHTML(options);
295
- var index = this.index ? this.index.toHTML(options) : '';
296
- var value = this.value.toHTML(options);
306
+ if (needParenthesis(this, options && options.parenthesis, options && options.implicit)) {
307
+ value = '<span class="math-paranthesis math-round-parenthesis">(</span>' + value + '<span class="math-paranthesis math-round-parenthesis">)</span>';
308
+ }
297
309
 
298
- if (needParenthesis(this, options && options.parenthesis)) {
299
- value = '<span class="math-paranthesis math-round-parenthesis">(</span>' + value + '<span class="math-paranthesis math-round-parenthesis">)</span>';
310
+ return object + index + '<span class="math-operator math-assignment-operator ' + 'math-variable-assignment-operator math-binary-operator">=</span>' + value;
300
311
  }
312
+ /**
313
+ * Get LaTeX representation
314
+ * @param {Object} options
315
+ * @return {string}
316
+ */
301
317
 
302
- return object + index + '<span class="math-operator math-assignment-operator math-variable-assignment-operator math-binary-operator">=</span>' + value;
303
- };
304
- /**
305
- * Get LaTeX representation
306
- * @param {Object} options
307
- * @return {string}
308
- */
309
318
 
319
+ _toTex(options) {
320
+ var object = this.object.toTex(options);
321
+ var index = this.index ? this.index.toTex(options) : '';
322
+ var value = this.value.toTex(options);
310
323
 
311
- AssignmentNode.prototype._toTex = function (options) {
312
- var object = this.object.toTex(options);
313
- var index = this.index ? this.index.toTex(options) : '';
314
- var value = this.value.toTex(options);
324
+ if (needParenthesis(this, options && options.parenthesis, options && options.implicit)) {
325
+ value = "\\left(".concat(value, "\\right)");
326
+ }
315
327
 
316
- if (needParenthesis(this, options && options.parenthesis)) {
317
- value = "\\left(".concat(value, "\\right)");
328
+ return object + index + ':=' + value;
318
329
  }
319
330
 
320
- return object + index + ':=' + value;
321
- };
331
+ }
332
+
333
+ _defineProperty(AssignmentNode, "name", name);
322
334
 
323
335
  return AssignmentNode;
324
336
  }, {