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