mathjs 10.6.2 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/HISTORY.md +74 -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/embeddedDocs.js +8 -5
  39. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
  40. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  41. package/lib/cjs/expression/node/AccessorNode.js +216 -173
  42. package/lib/cjs/expression/node/ArrayNode.js +206 -160
  43. package/lib/cjs/expression/node/AssignmentNode.js +321 -270
  44. package/lib/cjs/expression/node/BlockNode.js +223 -172
  45. package/lib/cjs/expression/node/ConditionalNode.js +253 -193
  46. package/lib/cjs/expression/node/ConstantNode.js +216 -171
  47. package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
  48. package/lib/cjs/expression/node/FunctionNode.js +456 -416
  49. package/lib/cjs/expression/node/IndexNode.js +256 -210
  50. package/lib/cjs/expression/node/Node.js +411 -378
  51. package/lib/cjs/expression/node/ObjectNode.js +223 -178
  52. package/lib/cjs/expression/node/OperatorNode.js +474 -397
  53. package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
  54. package/lib/cjs/expression/node/RangeNode.js +272 -224
  55. package/lib/cjs/expression/node/RelationalNode.js +246 -195
  56. package/lib/cjs/expression/node/SymbolNode.js +219 -172
  57. package/lib/cjs/expression/node/utils/access.js +1 -1
  58. package/lib/cjs/expression/node/utils/assign.js +1 -1
  59. package/lib/cjs/expression/operators.js +117 -23
  60. package/lib/cjs/expression/parse.js +37 -19
  61. package/lib/cjs/expression/transform/std.transform.js +3 -1
  62. package/lib/cjs/factoriesAny.js +8 -0
  63. package/lib/cjs/factoriesNumber.js +10 -1
  64. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  65. package/lib/cjs/function/algebra/derivative.js +22 -30
  66. package/lib/cjs/function/algebra/leafCount.js +0 -3
  67. package/lib/cjs/function/algebra/rationalize.js +78 -108
  68. package/lib/cjs/function/algebra/resolve.js +53 -16
  69. package/lib/cjs/function/algebra/simplify/util.js +1 -1
  70. package/lib/cjs/function/algebra/simplify.js +87 -114
  71. package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
  72. package/lib/cjs/function/algebra/simplifyCore.js +196 -93
  73. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  74. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  75. package/lib/cjs/function/algebra/symbolicEqual.js +9 -26
  76. package/lib/cjs/function/arithmetic/abs.js +7 -14
  77. package/lib/cjs/function/arithmetic/add.js +26 -70
  78. package/lib/cjs/function/arithmetic/addScalar.js +17 -9
  79. package/lib/cjs/function/arithmetic/cbrt.js +7 -11
  80. package/lib/cjs/function/arithmetic/ceil.js +56 -46
  81. package/lib/cjs/function/arithmetic/cube.js +5 -10
  82. package/lib/cjs/function/arithmetic/divide.js +7 -7
  83. package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
  84. package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
  85. package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
  86. package/lib/cjs/function/arithmetic/dotPow.js +30 -63
  87. package/lib/cjs/function/arithmetic/exp.js +8 -12
  88. package/lib/cjs/function/arithmetic/expm1.js +10 -10
  89. package/lib/cjs/function/arithmetic/fix.js +33 -27
  90. package/lib/cjs/function/arithmetic/floor.js +56 -46
  91. package/lib/cjs/function/arithmetic/gcd.js +27 -68
  92. package/lib/cjs/function/arithmetic/hypot.js +9 -5
  93. package/lib/cjs/function/arithmetic/invmod.js +1 -1
  94. package/lib/cjs/function/arithmetic/lcm.js +27 -68
  95. package/lib/cjs/function/arithmetic/log.js +10 -12
  96. package/lib/cjs/function/arithmetic/log10.js +5 -3
  97. package/lib/cjs/function/arithmetic/log1p.js +11 -7
  98. package/lib/cjs/function/arithmetic/log2.js +5 -3
  99. package/lib/cjs/function/arithmetic/mod.js +22 -64
  100. package/lib/cjs/function/arithmetic/multiply.js +40 -35
  101. package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
  102. package/lib/cjs/function/arithmetic/norm.js +1 -5
  103. package/lib/cjs/function/arithmetic/nthRoot.js +80 -92
  104. package/lib/cjs/function/arithmetic/round.js +56 -42
  105. package/lib/cjs/function/arithmetic/sign.js +14 -10
  106. package/lib/cjs/function/arithmetic/sqrt.js +5 -9
  107. package/lib/cjs/function/arithmetic/square.js +6 -10
  108. package/lib/cjs/function/arithmetic/subtract.js +44 -100
  109. package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
  110. package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
  111. package/lib/cjs/function/bitwise/bitAnd.js +17 -61
  112. package/lib/cjs/function/bitwise/bitNot.js +5 -3
  113. package/lib/cjs/function/bitwise/bitOr.js +16 -60
  114. package/lib/cjs/function/bitwise/bitXor.js +17 -61
  115. package/lib/cjs/function/bitwise/leftShift.js +68 -81
  116. package/lib/cjs/function/bitwise/rightArithShift.js +68 -81
  117. package/lib/cjs/function/bitwise/rightLogShift.js +68 -81
  118. package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
  119. package/lib/cjs/function/complex/arg.js +5 -3
  120. package/lib/cjs/function/complex/conj.js +6 -7
  121. package/lib/cjs/function/complex/im.js +7 -8
  122. package/lib/cjs/function/complex/re.js +6 -10
  123. package/lib/cjs/function/logical/and.js +74 -80
  124. package/lib/cjs/function/logical/not.js +13 -6
  125. package/lib/cjs/function/logical/or.js +21 -63
  126. package/lib/cjs/function/logical/xor.js +21 -63
  127. package/lib/cjs/function/matrix/diff.js +10 -7
  128. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  129. package/lib/cjs/function/matrix/fft.js +2 -2
  130. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  131. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  132. package/lib/cjs/function/matrix/ones.js +2 -1
  133. package/lib/cjs/function/matrix/sqrtm.js +3 -2
  134. package/lib/cjs/function/matrix/transpose.js +47 -48
  135. package/lib/cjs/function/matrix/zeros.js +2 -1
  136. package/lib/cjs/function/probability/factorial.js +5 -3
  137. package/lib/cjs/function/probability/gamma.js +38 -40
  138. package/lib/cjs/function/probability/kldivergence.js +5 -2
  139. package/lib/cjs/function/probability/lgamma.js +30 -30
  140. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  141. package/lib/cjs/function/relational/compare.js +21 -67
  142. package/lib/cjs/function/relational/compareNatural.js +59 -54
  143. package/lib/cjs/function/relational/compareText.js +10 -43
  144. package/lib/cjs/function/relational/compareUnits.js +24 -0
  145. package/lib/cjs/function/relational/equal.js +19 -80
  146. package/lib/cjs/function/relational/equalScalar.js +7 -9
  147. package/lib/cjs/function/relational/larger.js +21 -67
  148. package/lib/cjs/function/relational/largerEq.js +21 -67
  149. package/lib/cjs/function/relational/smaller.js +21 -67
  150. package/lib/cjs/function/relational/smallerEq.js +21 -67
  151. package/lib/cjs/function/relational/unequal.js +19 -80
  152. package/lib/cjs/function/special/erf.js +5 -3
  153. package/lib/cjs/function/statistics/std.js +11 -2
  154. package/lib/cjs/function/trigonometry/acos.js +4 -8
  155. package/lib/cjs/function/trigonometry/acosh.js +2 -7
  156. package/lib/cjs/function/trigonometry/acot.js +4 -8
  157. package/lib/cjs/function/trigonometry/acoth.js +4 -8
  158. package/lib/cjs/function/trigonometry/acsc.js +4 -8
  159. package/lib/cjs/function/trigonometry/acsch.js +4 -8
  160. package/lib/cjs/function/trigonometry/asec.js +4 -8
  161. package/lib/cjs/function/trigonometry/asech.js +4 -8
  162. package/lib/cjs/function/trigonometry/asin.js +4 -9
  163. package/lib/cjs/function/trigonometry/asinh.js +4 -9
  164. package/lib/cjs/function/trigonometry/atan.js +4 -9
  165. package/lib/cjs/function/trigonometry/atan2.js +24 -62
  166. package/lib/cjs/function/trigonometry/atanh.js +4 -9
  167. package/lib/cjs/function/trigonometry/cos.js +11 -20
  168. package/lib/cjs/function/trigonometry/cosh.js +5 -19
  169. package/lib/cjs/function/trigonometry/cot.js +9 -15
  170. package/lib/cjs/function/trigonometry/coth.js +4 -15
  171. package/lib/cjs/function/trigonometry/csc.js +11 -17
  172. package/lib/cjs/function/trigonometry/csch.js +4 -15
  173. package/lib/cjs/function/trigonometry/sec.js +11 -17
  174. package/lib/cjs/function/trigonometry/sech.js +4 -15
  175. package/lib/cjs/function/trigonometry/sin.js +11 -21
  176. package/lib/cjs/function/trigonometry/sinh.js +5 -20
  177. package/lib/cjs/function/trigonometry/tan.js +11 -21
  178. package/lib/cjs/function/trigonometry/tanh.js +5 -20
  179. package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
  180. package/lib/cjs/function/unit/to.js +7 -41
  181. package/lib/cjs/function/utils/hasNumericValue.js +4 -0
  182. package/lib/cjs/function/utils/isInteger.js +5 -3
  183. package/lib/cjs/function/utils/isNegative.js +10 -6
  184. package/lib/cjs/function/utils/isNumeric.js +5 -3
  185. package/lib/cjs/function/utils/isPositive.js +10 -6
  186. package/lib/cjs/function/utils/isPrime.js +5 -3
  187. package/lib/cjs/function/utils/isZero.js +10 -6
  188. package/lib/cjs/function/utils/numeric.js +11 -4
  189. package/lib/cjs/function/utils/typeOf.js +38 -44
  190. package/lib/cjs/header.js +2 -2
  191. package/lib/cjs/plain/bignumber/index.js +1 -1
  192. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  193. package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
  194. package/lib/cjs/type/boolean.js +7 -5
  195. package/lib/cjs/type/chain/Chain.js +23 -3
  196. package/lib/cjs/type/complex/Complex.js +18 -14
  197. package/lib/cjs/type/complex/function/complex.js +6 -4
  198. package/lib/cjs/type/fraction/Fraction.js +10 -6
  199. package/lib/cjs/type/fraction/function/fraction.js +6 -4
  200. package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
  201. package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
  202. package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
  203. package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
  204. package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
  205. package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
  206. package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
  207. package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
  208. package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
  209. package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
  210. package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
  211. package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
  212. package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
  213. package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
  214. package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
  215. package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
  216. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
  217. package/lib/cjs/type/number.js +6 -4
  218. package/lib/cjs/type/string.js +7 -5
  219. package/lib/cjs/type/unit/Unit.js +69 -21
  220. package/lib/cjs/type/unit/function/createUnit.js +2 -1
  221. package/lib/cjs/type/unit/function/unit.js +9 -3
  222. package/lib/cjs/utils/customs.js +2 -2
  223. package/lib/cjs/utils/emitter.js +1 -1
  224. package/lib/cjs/utils/function.js +2 -2
  225. package/lib/cjs/utils/is.js +27 -25
  226. package/lib/cjs/utils/latex.js +3 -3
  227. package/lib/cjs/utils/lruQueue.js +1 -1
  228. package/lib/cjs/utils/map.js +3 -3
  229. package/lib/cjs/utils/object.js +2 -2
  230. package/lib/cjs/utils/snapshot.js +30 -57
  231. package/lib/cjs/utils/string.js +3 -3
  232. package/lib/cjs/version.js +1 -1
  233. package/lib/esm/core/create.js +2 -1
  234. package/lib/esm/core/function/import.js +2 -12
  235. package/lib/esm/core/function/typed.js +47 -11
  236. package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
  237. package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
  238. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  239. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
  240. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  241. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
  242. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
  243. package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
  244. package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
  245. package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
  246. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  247. package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
  248. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  249. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
  250. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  251. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
  252. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
  253. package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
  254. package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
  255. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  256. package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
  257. package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
  258. package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
  259. package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
  260. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  261. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
  262. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  263. package/lib/esm/expression/node/AccessorNode.js +158 -153
  264. package/lib/esm/expression/node/ArrayNode.js +162 -154
  265. package/lib/esm/expression/node/AssignmentNode.js +257 -245
  266. package/lib/esm/expression/node/BlockNode.js +177 -163
  267. package/lib/esm/expression/node/ConditionalNode.js +197 -174
  268. package/lib/esm/expression/node/ConstantNode.js +171 -163
  269. package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
  270. package/lib/esm/expression/node/FunctionNode.js +407 -407
  271. package/lib/esm/expression/node/IndexNode.js +206 -198
  272. package/lib/esm/expression/node/Node.js +325 -325
  273. package/lib/esm/expression/node/ObjectNode.js +166 -157
  274. package/lib/esm/expression/node/OperatorNode.js +414 -377
  275. package/lib/esm/expression/node/ParenthesisNode.js +146 -138
  276. package/lib/esm/expression/node/RangeNode.js +221 -212
  277. package/lib/esm/expression/node/RelationalNode.js +190 -176
  278. package/lib/esm/expression/node/SymbolNode.js +161 -152
  279. package/lib/esm/expression/operators.js +96 -4
  280. package/lib/esm/expression/parse.js +25 -7
  281. package/lib/esm/expression/transform/std.transform.js +3 -1
  282. package/lib/esm/factoriesAny.js +1 -0
  283. package/lib/esm/factoriesNumber.js +1 -0
  284. package/lib/esm/function/algebra/derivative.js +22 -30
  285. package/lib/esm/function/algebra/leafCount.js +0 -3
  286. package/lib/esm/function/algebra/rationalize.js +83 -114
  287. package/lib/esm/function/algebra/resolve.js +25 -16
  288. package/lib/esm/function/algebra/simplify.js +82 -112
  289. package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
  290. package/lib/esm/function/algebra/simplifyCore.js +192 -91
  291. package/lib/esm/function/algebra/symbolicEqual.js +9 -26
  292. package/lib/esm/function/arithmetic/abs.js +3 -16
  293. package/lib/esm/function/arithmetic/add.js +21 -65
  294. package/lib/esm/function/arithmetic/addScalar.js +11 -5
  295. package/lib/esm/function/arithmetic/cbrt.js +7 -10
  296. package/lib/esm/function/arithmetic/ceil.js +25 -25
  297. package/lib/esm/function/arithmetic/cube.js +5 -9
  298. package/lib/esm/function/arithmetic/divide.js +7 -7
  299. package/lib/esm/function/arithmetic/divideScalar.js +2 -19
  300. package/lib/esm/function/arithmetic/dotDivide.js +22 -64
  301. package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
  302. package/lib/esm/function/arithmetic/dotPow.js +30 -62
  303. package/lib/esm/function/arithmetic/exp.js +8 -11
  304. package/lib/esm/function/arithmetic/expm1.js +10 -9
  305. package/lib/esm/function/arithmetic/fix.js +17 -17
  306. package/lib/esm/function/arithmetic/floor.js +25 -25
  307. package/lib/esm/function/arithmetic/gcd.js +26 -70
  308. package/lib/esm/function/arithmetic/hypot.js +7 -6
  309. package/lib/esm/function/arithmetic/lcm.js +26 -70
  310. package/lib/esm/function/arithmetic/log.js +7 -10
  311. package/lib/esm/function/arithmetic/log10.js +1 -3
  312. package/lib/esm/function/arithmetic/log1p.js +4 -6
  313. package/lib/esm/function/arithmetic/log2.js +1 -3
  314. package/lib/esm/function/arithmetic/mod.js +21 -62
  315. package/lib/esm/function/arithmetic/multiply.js +23 -27
  316. package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
  317. package/lib/esm/function/arithmetic/norm.js +0 -4
  318. package/lib/esm/function/arithmetic/nthRoot.js +38 -73
  319. package/lib/esm/function/arithmetic/round.js +26 -28
  320. package/lib/esm/function/arithmetic/sign.js +5 -7
  321. package/lib/esm/function/arithmetic/sqrt.js +5 -8
  322. package/lib/esm/function/arithmetic/square.js +6 -9
  323. package/lib/esm/function/arithmetic/subtract.js +31 -95
  324. package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
  325. package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
  326. package/lib/esm/function/bitwise/bitAnd.js +16 -59
  327. package/lib/esm/function/bitwise/bitNot.js +1 -3
  328. package/lib/esm/function/bitwise/bitOr.js +16 -59
  329. package/lib/esm/function/bitwise/bitXor.js +16 -59
  330. package/lib/esm/function/bitwise/leftShift.js +38 -60
  331. package/lib/esm/function/bitwise/rightArithShift.js +38 -60
  332. package/lib/esm/function/bitwise/rightLogShift.js +38 -60
  333. package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
  334. package/lib/esm/function/complex/arg.js +1 -3
  335. package/lib/esm/function/complex/conj.js +3 -12
  336. package/lib/esm/function/complex/im.js +4 -15
  337. package/lib/esm/function/complex/re.js +3 -15
  338. package/lib/esm/function/logical/and.js +35 -57
  339. package/lib/esm/function/logical/not.js +3 -6
  340. package/lib/esm/function/logical/or.js +16 -61
  341. package/lib/esm/function/logical/xor.js +16 -61
  342. package/lib/esm/function/matrix/diff.js +2 -7
  343. package/lib/esm/function/matrix/ones.js +2 -1
  344. package/lib/esm/function/matrix/sqrtm.js +3 -2
  345. package/lib/esm/function/matrix/transpose.js +47 -50
  346. package/lib/esm/function/matrix/zeros.js +2 -1
  347. package/lib/esm/function/probability/factorial.js +1 -3
  348. package/lib/esm/function/probability/gamma.js +38 -39
  349. package/lib/esm/function/probability/kldivergence.js +3 -2
  350. package/lib/esm/function/probability/lgamma.js +29 -29
  351. package/lib/esm/function/relational/compare.js +21 -67
  352. package/lib/esm/function/relational/compareNatural.js +54 -49
  353. package/lib/esm/function/relational/compareText.js +10 -42
  354. package/lib/esm/function/relational/compareUnits.js +15 -0
  355. package/lib/esm/function/relational/equal.js +19 -79
  356. package/lib/esm/function/relational/equalScalar.js +6 -9
  357. package/lib/esm/function/relational/larger.js +23 -73
  358. package/lib/esm/function/relational/largerEq.js +23 -73
  359. package/lib/esm/function/relational/smaller.js +23 -73
  360. package/lib/esm/function/relational/smallerEq.js +23 -73
  361. package/lib/esm/function/relational/unequal.js +19 -79
  362. package/lib/esm/function/special/erf.js +1 -3
  363. package/lib/esm/function/statistics/std.js +10 -2
  364. package/lib/esm/function/trigonometry/acos.js +4 -7
  365. package/lib/esm/function/trigonometry/acosh.js +2 -6
  366. package/lib/esm/function/trigonometry/acot.js +4 -7
  367. package/lib/esm/function/trigonometry/acoth.js +4 -7
  368. package/lib/esm/function/trigonometry/acsc.js +4 -7
  369. package/lib/esm/function/trigonometry/acsch.js +4 -7
  370. package/lib/esm/function/trigonometry/asec.js +4 -7
  371. package/lib/esm/function/trigonometry/asech.js +4 -7
  372. package/lib/esm/function/trigonometry/asin.js +4 -8
  373. package/lib/esm/function/trigonometry/asinh.js +4 -8
  374. package/lib/esm/function/trigonometry/atan.js +4 -8
  375. package/lib/esm/function/trigonometry/atan2.js +25 -64
  376. package/lib/esm/function/trigonometry/atanh.js +4 -8
  377. package/lib/esm/function/trigonometry/cos.js +11 -22
  378. package/lib/esm/function/trigonometry/cosh.js +5 -20
  379. package/lib/esm/function/trigonometry/cot.js +10 -20
  380. package/lib/esm/function/trigonometry/coth.js +6 -20
  381. package/lib/esm/function/trigonometry/csc.js +12 -22
  382. package/lib/esm/function/trigonometry/csch.js +6 -20
  383. package/lib/esm/function/trigonometry/sec.js +12 -22
  384. package/lib/esm/function/trigonometry/sech.js +6 -20
  385. package/lib/esm/function/trigonometry/sin.js +11 -23
  386. package/lib/esm/function/trigonometry/sinh.js +5 -21
  387. package/lib/esm/function/trigonometry/tan.js +11 -23
  388. package/lib/esm/function/trigonometry/tanh.js +5 -21
  389. package/lib/esm/function/trigonometry/trigUnit.js +15 -0
  390. package/lib/esm/function/unit/to.js +8 -43
  391. package/lib/esm/function/utils/hasNumericValue.js +2 -0
  392. package/lib/esm/function/utils/isInteger.js +1 -3
  393. package/lib/esm/function/utils/isNegative.js +2 -6
  394. package/lib/esm/function/utils/isNumeric.js +3 -9
  395. package/lib/esm/function/utils/isPositive.js +2 -6
  396. package/lib/esm/function/utils/isPrime.js +1 -3
  397. package/lib/esm/function/utils/isZero.js +2 -6
  398. package/lib/esm/function/utils/numeric.js +11 -4
  399. package/lib/esm/function/utils/typeOf.js +38 -44
  400. package/lib/esm/type/bignumber/function/bignumber.js +1 -3
  401. package/lib/esm/type/boolean.js +1 -3
  402. package/lib/esm/type/chain/Chain.js +23 -3
  403. package/lib/esm/type/complex/Complex.js +4 -0
  404. package/lib/esm/type/complex/function/complex.js +1 -3
  405. package/lib/esm/type/fraction/Fraction.js +4 -0
  406. package/lib/esm/type/fraction/function/fraction.js +1 -3
  407. package/lib/esm/type/matrix/DenseMatrix.js +15 -1
  408. package/lib/esm/type/matrix/SparseMatrix.js +9 -0
  409. package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
  410. package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
  411. package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
  412. package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
  413. package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
  414. package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
  415. package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
  416. package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
  417. package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
  418. package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
  419. package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
  420. package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
  421. package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
  422. package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
  423. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
  424. package/lib/esm/type/number.js +1 -3
  425. package/lib/esm/type/string.js +1 -3
  426. package/lib/esm/type/unit/Unit.js +61 -13
  427. package/lib/esm/type/unit/function/createUnit.js +2 -1
  428. package/lib/esm/type/unit/function/unit.js +5 -3
  429. package/lib/esm/utils/is.js +18 -18
  430. package/lib/esm/utils/snapshot.js +22 -48
  431. package/lib/esm/version.js +1 -1
  432. package/package.json +21 -24
  433. package/types/index.d.ts +202 -181
  434. package/types/index.ts +264 -57
  435. package/lib/cjs/utils/polyfills.js +0 -14
  436. 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
  }, {