mathjs 10.6.4 → 11.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (454) hide show
  1. package/HISTORY.md +79 -1
  2. package/README.md +1 -1
  3. package/lib/browser/math.js +2 -41
  4. package/lib/browser/math.js.LICENSE.txt +43 -0
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/core/create.js +6 -5
  7. package/lib/cjs/core/function/import.js +4 -14
  8. package/lib/cjs/core/function/typed.js +54 -12
  9. package/lib/cjs/defaultInstance.js +3 -3
  10. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  11. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  12. package/lib/cjs/entry/configReadonly.js +1 -1
  13. package/lib/cjs/entry/dependenciesAny/dependenciesChainClass.generated.js +3 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesKldivergence.generated.js +3 -0
  15. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +3 -0
  17. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +3 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +56 -0
  19. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +6 -0
  20. package/lib/cjs/entry/dependenciesAny/dependenciesSqrtm.generated.js +3 -0
  21. package/lib/cjs/entry/dependenciesAny/dependenciesStd.generated.js +3 -0
  22. package/lib/cjs/entry/dependenciesAny/dependenciesStdTransform.generated.js +3 -0
  23. package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
  24. package/lib/cjs/entry/dependenciesNumber/dependenciesChainClass.generated.js +3 -0
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  26. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +3 -0
  27. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +3 -0
  28. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +50 -0
  29. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +6 -0
  30. package/lib/cjs/entry/dependenciesNumber/dependenciesStd.generated.js +3 -0
  31. package/lib/cjs/entry/dependenciesNumber/dependenciesStdTransform.generated.js +3 -0
  32. package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
  33. package/lib/cjs/entry/impureFunctionsAny.generated.js +87 -61
  34. package/lib/cjs/entry/impureFunctionsNumber.generated.js +93 -69
  35. package/lib/cjs/entry/pureFunctionsAny.generated.js +50 -45
  36. package/lib/cjs/entry/pureFunctionsNumber.generated.js +22 -19
  37. package/lib/cjs/expression/Parser.js +1 -1
  38. package/lib/cjs/expression/embeddedDocs/construction/index.js +1 -1
  39. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -5
  40. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
  41. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  42. package/lib/cjs/expression/node/AccessorNode.js +216 -173
  43. package/lib/cjs/expression/node/ArrayNode.js +206 -160
  44. package/lib/cjs/expression/node/AssignmentNode.js +321 -270
  45. package/lib/cjs/expression/node/BlockNode.js +223 -172
  46. package/lib/cjs/expression/node/ConditionalNode.js +253 -193
  47. package/lib/cjs/expression/node/ConstantNode.js +216 -171
  48. package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
  49. package/lib/cjs/expression/node/FunctionNode.js +456 -416
  50. package/lib/cjs/expression/node/IndexNode.js +256 -210
  51. package/lib/cjs/expression/node/Node.js +411 -378
  52. package/lib/cjs/expression/node/ObjectNode.js +223 -178
  53. package/lib/cjs/expression/node/OperatorNode.js +474 -397
  54. package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
  55. package/lib/cjs/expression/node/RangeNode.js +272 -224
  56. package/lib/cjs/expression/node/RelationalNode.js +246 -195
  57. package/lib/cjs/expression/node/SymbolNode.js +219 -172
  58. package/lib/cjs/expression/node/utils/access.js +1 -1
  59. package/lib/cjs/expression/node/utils/assign.js +1 -1
  60. package/lib/cjs/expression/operators.js +117 -23
  61. package/lib/cjs/expression/parse.js +37 -19
  62. package/lib/cjs/expression/transform/std.transform.js +3 -1
  63. package/lib/cjs/factoriesAny.js +8 -0
  64. package/lib/cjs/factoriesNumber.js +10 -1
  65. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  66. package/lib/cjs/function/algebra/derivative.js +25 -33
  67. package/lib/cjs/function/algebra/leafCount.js +0 -3
  68. package/lib/cjs/function/algebra/rationalize.js +78 -108
  69. package/lib/cjs/function/algebra/resolve.js +53 -16
  70. package/lib/cjs/function/algebra/simplify/util.js +1 -1
  71. package/lib/cjs/function/algebra/simplify.js +90 -115
  72. package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
  73. package/lib/cjs/function/algebra/simplifyCore.js +196 -93
  74. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  75. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  76. package/lib/cjs/function/algebra/symbolicEqual.js +14 -32
  77. package/lib/cjs/function/arithmetic/abs.js +7 -14
  78. package/lib/cjs/function/arithmetic/add.js +26 -70
  79. package/lib/cjs/function/arithmetic/addScalar.js +17 -9
  80. package/lib/cjs/function/arithmetic/cbrt.js +7 -11
  81. package/lib/cjs/function/arithmetic/ceil.js +50 -40
  82. package/lib/cjs/function/arithmetic/cube.js +5 -10
  83. package/lib/cjs/function/arithmetic/divide.js +7 -7
  84. package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
  85. package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
  86. package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
  87. package/lib/cjs/function/arithmetic/dotPow.js +30 -63
  88. package/lib/cjs/function/arithmetic/exp.js +8 -12
  89. package/lib/cjs/function/arithmetic/expm1.js +10 -10
  90. package/lib/cjs/function/arithmetic/fix.js +34 -28
  91. package/lib/cjs/function/arithmetic/floor.js +51 -41
  92. package/lib/cjs/function/arithmetic/gcd.js +27 -68
  93. package/lib/cjs/function/arithmetic/hypot.js +9 -5
  94. package/lib/cjs/function/arithmetic/invmod.js +2 -2
  95. package/lib/cjs/function/arithmetic/lcm.js +27 -68
  96. package/lib/cjs/function/arithmetic/log.js +10 -12
  97. package/lib/cjs/function/arithmetic/log10.js +5 -3
  98. package/lib/cjs/function/arithmetic/log1p.js +11 -7
  99. package/lib/cjs/function/arithmetic/log2.js +5 -3
  100. package/lib/cjs/function/arithmetic/mod.js +22 -64
  101. package/lib/cjs/function/arithmetic/multiply.js +40 -35
  102. package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
  103. package/lib/cjs/function/arithmetic/norm.js +1 -5
  104. package/lib/cjs/function/arithmetic/nthRoot.js +83 -95
  105. package/lib/cjs/function/arithmetic/nthRoots.js +2 -2
  106. package/lib/cjs/function/arithmetic/round.js +56 -42
  107. package/lib/cjs/function/arithmetic/sign.js +14 -10
  108. package/lib/cjs/function/arithmetic/sqrt.js +5 -9
  109. package/lib/cjs/function/arithmetic/square.js +6 -10
  110. package/lib/cjs/function/arithmetic/subtract.js +44 -100
  111. package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
  112. package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
  113. package/lib/cjs/function/bitwise/bitAnd.js +17 -61
  114. package/lib/cjs/function/bitwise/bitNot.js +6 -4
  115. package/lib/cjs/function/bitwise/bitOr.js +16 -60
  116. package/lib/cjs/function/bitwise/bitXor.js +17 -61
  117. package/lib/cjs/function/bitwise/leftShift.js +69 -82
  118. package/lib/cjs/function/bitwise/rightArithShift.js +69 -82
  119. package/lib/cjs/function/bitwise/rightLogShift.js +69 -82
  120. package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
  121. package/lib/cjs/function/complex/arg.js +5 -3
  122. package/lib/cjs/function/complex/conj.js +6 -7
  123. package/lib/cjs/function/complex/im.js +7 -8
  124. package/lib/cjs/function/complex/re.js +6 -10
  125. package/lib/cjs/function/geometry/distance.js +2 -2
  126. package/lib/cjs/function/logical/and.js +74 -80
  127. package/lib/cjs/function/logical/not.js +13 -6
  128. package/lib/cjs/function/logical/or.js +21 -63
  129. package/lib/cjs/function/logical/xor.js +21 -63
  130. package/lib/cjs/function/matrix/diff.js +11 -8
  131. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  132. package/lib/cjs/function/matrix/fft.js +2 -2
  133. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  134. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  135. package/lib/cjs/function/matrix/ones.js +2 -1
  136. package/lib/cjs/function/matrix/rotate.js +5 -5
  137. package/lib/cjs/function/matrix/sqrtm.js +3 -2
  138. package/lib/cjs/function/matrix/transpose.js +47 -48
  139. package/lib/cjs/function/matrix/zeros.js +2 -1
  140. package/lib/cjs/function/probability/factorial.js +5 -3
  141. package/lib/cjs/function/probability/gamma.js +38 -40
  142. package/lib/cjs/function/probability/kldivergence.js +5 -2
  143. package/lib/cjs/function/probability/lgamma.js +30 -30
  144. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  145. package/lib/cjs/function/relational/compare.js +21 -67
  146. package/lib/cjs/function/relational/compareNatural.js +59 -54
  147. package/lib/cjs/function/relational/compareText.js +10 -43
  148. package/lib/cjs/function/relational/compareUnits.js +24 -0
  149. package/lib/cjs/function/relational/equal.js +19 -80
  150. package/lib/cjs/function/relational/equalScalar.js +7 -9
  151. package/lib/cjs/function/relational/larger.js +21 -67
  152. package/lib/cjs/function/relational/largerEq.js +21 -67
  153. package/lib/cjs/function/relational/smaller.js +21 -67
  154. package/lib/cjs/function/relational/smallerEq.js +21 -67
  155. package/lib/cjs/function/relational/unequal.js +19 -80
  156. package/lib/cjs/function/special/erf.js +5 -3
  157. package/lib/cjs/function/statistics/std.js +11 -2
  158. package/lib/cjs/function/string/format.js +2 -2
  159. package/lib/cjs/function/string/hex.js +1 -2
  160. package/lib/cjs/function/trigonometry/acos.js +4 -8
  161. package/lib/cjs/function/trigonometry/acosh.js +2 -7
  162. package/lib/cjs/function/trigonometry/acot.js +6 -11
  163. package/lib/cjs/function/trigonometry/acoth.js +4 -8
  164. package/lib/cjs/function/trigonometry/acsc.js +6 -11
  165. package/lib/cjs/function/trigonometry/acsch.js +4 -8
  166. package/lib/cjs/function/trigonometry/asec.js +6 -10
  167. package/lib/cjs/function/trigonometry/asech.js +4 -8
  168. package/lib/cjs/function/trigonometry/asin.js +5 -10
  169. package/lib/cjs/function/trigonometry/asinh.js +4 -9
  170. package/lib/cjs/function/trigonometry/atan.js +5 -11
  171. package/lib/cjs/function/trigonometry/atan2.js +25 -63
  172. package/lib/cjs/function/trigonometry/atanh.js +4 -9
  173. package/lib/cjs/function/trigonometry/cos.js +11 -20
  174. package/lib/cjs/function/trigonometry/cosh.js +5 -19
  175. package/lib/cjs/function/trigonometry/cot.js +9 -15
  176. package/lib/cjs/function/trigonometry/coth.js +4 -15
  177. package/lib/cjs/function/trigonometry/csc.js +11 -17
  178. package/lib/cjs/function/trigonometry/csch.js +4 -15
  179. package/lib/cjs/function/trigonometry/sec.js +11 -17
  180. package/lib/cjs/function/trigonometry/sech.js +4 -15
  181. package/lib/cjs/function/trigonometry/sin.js +11 -21
  182. package/lib/cjs/function/trigonometry/sinh.js +5 -20
  183. package/lib/cjs/function/trigonometry/tan.js +11 -21
  184. package/lib/cjs/function/trigonometry/tanh.js +5 -20
  185. package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
  186. package/lib/cjs/function/unit/to.js +7 -41
  187. package/lib/cjs/function/utils/clone.js +1 -1
  188. package/lib/cjs/function/utils/hasNumericValue.js +5 -1
  189. package/lib/cjs/function/utils/isInteger.js +6 -4
  190. package/lib/cjs/function/utils/isNaN.js +1 -1
  191. package/lib/cjs/function/utils/isNegative.js +11 -7
  192. package/lib/cjs/function/utils/isNumeric.js +6 -4
  193. package/lib/cjs/function/utils/isPositive.js +11 -7
  194. package/lib/cjs/function/utils/isPrime.js +5 -3
  195. package/lib/cjs/function/utils/isZero.js +21 -17
  196. package/lib/cjs/function/utils/numeric.js +11 -4
  197. package/lib/cjs/function/utils/typeOf.js +38 -44
  198. package/lib/cjs/header.js +2 -2
  199. package/lib/cjs/plain/bignumber/index.js +1 -1
  200. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  201. package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
  202. package/lib/cjs/type/boolean.js +7 -5
  203. package/lib/cjs/type/chain/Chain.js +23 -3
  204. package/lib/cjs/type/complex/Complex.js +18 -14
  205. package/lib/cjs/type/complex/function/complex.js +6 -4
  206. package/lib/cjs/type/fraction/Fraction.js +10 -6
  207. package/lib/cjs/type/fraction/function/fraction.js +6 -4
  208. package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
  209. package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
  210. package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
  211. package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
  212. package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
  213. package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
  214. package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
  215. package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
  216. package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
  217. package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
  218. package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
  219. package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
  220. package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
  221. package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
  222. package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
  223. package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
  224. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
  225. package/lib/cjs/type/number.js +6 -4
  226. package/lib/cjs/type/string.js +7 -5
  227. package/lib/cjs/type/unit/Unit.js +98 -45
  228. package/lib/cjs/type/unit/function/createUnit.js +2 -1
  229. package/lib/cjs/type/unit/function/unit.js +14 -5
  230. package/lib/cjs/utils/customs.js +2 -2
  231. package/lib/cjs/utils/emitter.js +1 -1
  232. package/lib/cjs/utils/function.js +2 -2
  233. package/lib/cjs/utils/is.js +27 -25
  234. package/lib/cjs/utils/latex.js +3 -3
  235. package/lib/cjs/utils/lruQueue.js +1 -1
  236. package/lib/cjs/utils/map.js +3 -3
  237. package/lib/cjs/utils/object.js +2 -2
  238. package/lib/cjs/utils/snapshot.js +30 -57
  239. package/lib/cjs/utils/string.js +3 -3
  240. package/lib/cjs/version.js +1 -1
  241. package/lib/esm/core/create.js +2 -1
  242. package/lib/esm/core/function/import.js +2 -12
  243. package/lib/esm/core/function/typed.js +47 -11
  244. package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
  245. package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
  246. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  247. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
  248. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  249. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
  250. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
  251. package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
  252. package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
  253. package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
  254. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  255. package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
  256. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  257. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
  258. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  259. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
  260. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
  261. package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
  262. package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
  263. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  264. package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
  265. package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
  266. package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
  267. package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
  268. package/lib/esm/expression/embeddedDocs/construction/index.js +1 -1
  269. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  270. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
  271. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
  272. package/lib/esm/expression/node/AccessorNode.js +158 -153
  273. package/lib/esm/expression/node/ArrayNode.js +162 -154
  274. package/lib/esm/expression/node/AssignmentNode.js +257 -245
  275. package/lib/esm/expression/node/BlockNode.js +177 -163
  276. package/lib/esm/expression/node/ConditionalNode.js +197 -174
  277. package/lib/esm/expression/node/ConstantNode.js +171 -163
  278. package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
  279. package/lib/esm/expression/node/FunctionNode.js +407 -407
  280. package/lib/esm/expression/node/IndexNode.js +206 -198
  281. package/lib/esm/expression/node/Node.js +325 -325
  282. package/lib/esm/expression/node/ObjectNode.js +166 -157
  283. package/lib/esm/expression/node/OperatorNode.js +414 -377
  284. package/lib/esm/expression/node/ParenthesisNode.js +146 -138
  285. package/lib/esm/expression/node/RangeNode.js +221 -212
  286. package/lib/esm/expression/node/RelationalNode.js +190 -176
  287. package/lib/esm/expression/node/SymbolNode.js +161 -152
  288. package/lib/esm/expression/operators.js +96 -4
  289. package/lib/esm/expression/parse.js +25 -7
  290. package/lib/esm/expression/transform/std.transform.js +3 -1
  291. package/lib/esm/factoriesAny.js +1 -0
  292. package/lib/esm/factoriesNumber.js +1 -0
  293. package/lib/esm/function/algebra/derivative.js +25 -33
  294. package/lib/esm/function/algebra/leafCount.js +0 -3
  295. package/lib/esm/function/algebra/rationalize.js +83 -114
  296. package/lib/esm/function/algebra/resolve.js +25 -16
  297. package/lib/esm/function/algebra/simplify.js +85 -113
  298. package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
  299. package/lib/esm/function/algebra/simplifyCore.js +192 -91
  300. package/lib/esm/function/algebra/symbolicEqual.js +14 -32
  301. package/lib/esm/function/arithmetic/abs.js +3 -16
  302. package/lib/esm/function/arithmetic/add.js +21 -65
  303. package/lib/esm/function/arithmetic/addScalar.js +11 -5
  304. package/lib/esm/function/arithmetic/cbrt.js +7 -10
  305. package/lib/esm/function/arithmetic/ceil.js +25 -25
  306. package/lib/esm/function/arithmetic/cube.js +5 -9
  307. package/lib/esm/function/arithmetic/divide.js +7 -7
  308. package/lib/esm/function/arithmetic/divideScalar.js +2 -19
  309. package/lib/esm/function/arithmetic/dotDivide.js +22 -64
  310. package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
  311. package/lib/esm/function/arithmetic/dotPow.js +30 -62
  312. package/lib/esm/function/arithmetic/exp.js +8 -11
  313. package/lib/esm/function/arithmetic/expm1.js +10 -9
  314. package/lib/esm/function/arithmetic/fix.js +18 -18
  315. package/lib/esm/function/arithmetic/floor.js +26 -26
  316. package/lib/esm/function/arithmetic/gcd.js +26 -70
  317. package/lib/esm/function/arithmetic/hypot.js +7 -6
  318. package/lib/esm/function/arithmetic/invmod.js +1 -1
  319. package/lib/esm/function/arithmetic/lcm.js +26 -70
  320. package/lib/esm/function/arithmetic/log.js +7 -10
  321. package/lib/esm/function/arithmetic/log10.js +1 -3
  322. package/lib/esm/function/arithmetic/log1p.js +4 -6
  323. package/lib/esm/function/arithmetic/log2.js +1 -3
  324. package/lib/esm/function/arithmetic/mod.js +21 -62
  325. package/lib/esm/function/arithmetic/multiply.js +23 -27
  326. package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
  327. package/lib/esm/function/arithmetic/norm.js +0 -4
  328. package/lib/esm/function/arithmetic/nthRoot.js +41 -76
  329. package/lib/esm/function/arithmetic/nthRoots.js +2 -2
  330. package/lib/esm/function/arithmetic/round.js +26 -28
  331. package/lib/esm/function/arithmetic/sign.js +5 -7
  332. package/lib/esm/function/arithmetic/sqrt.js +5 -8
  333. package/lib/esm/function/arithmetic/square.js +6 -9
  334. package/lib/esm/function/arithmetic/subtract.js +31 -95
  335. package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
  336. package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
  337. package/lib/esm/function/bitwise/bitAnd.js +16 -59
  338. package/lib/esm/function/bitwise/bitNot.js +2 -4
  339. package/lib/esm/function/bitwise/bitOr.js +16 -59
  340. package/lib/esm/function/bitwise/bitXor.js +16 -59
  341. package/lib/esm/function/bitwise/leftShift.js +39 -61
  342. package/lib/esm/function/bitwise/rightArithShift.js +39 -61
  343. package/lib/esm/function/bitwise/rightLogShift.js +39 -61
  344. package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
  345. package/lib/esm/function/complex/arg.js +1 -3
  346. package/lib/esm/function/complex/conj.js +3 -12
  347. package/lib/esm/function/complex/im.js +4 -15
  348. package/lib/esm/function/complex/re.js +3 -15
  349. package/lib/esm/function/geometry/distance.js +2 -2
  350. package/lib/esm/function/logical/and.js +35 -57
  351. package/lib/esm/function/logical/not.js +3 -6
  352. package/lib/esm/function/logical/or.js +16 -61
  353. package/lib/esm/function/logical/xor.js +16 -61
  354. package/lib/esm/function/matrix/diff.js +3 -8
  355. package/lib/esm/function/matrix/ones.js +2 -1
  356. package/lib/esm/function/matrix/rotate.js +5 -5
  357. package/lib/esm/function/matrix/sqrtm.js +3 -2
  358. package/lib/esm/function/matrix/transpose.js +47 -50
  359. package/lib/esm/function/matrix/zeros.js +2 -1
  360. package/lib/esm/function/probability/factorial.js +1 -3
  361. package/lib/esm/function/probability/gamma.js +38 -39
  362. package/lib/esm/function/probability/kldivergence.js +3 -2
  363. package/lib/esm/function/probability/lgamma.js +29 -29
  364. package/lib/esm/function/relational/compare.js +21 -67
  365. package/lib/esm/function/relational/compareNatural.js +54 -49
  366. package/lib/esm/function/relational/compareText.js +10 -42
  367. package/lib/esm/function/relational/compareUnits.js +15 -0
  368. package/lib/esm/function/relational/equal.js +19 -79
  369. package/lib/esm/function/relational/equalScalar.js +6 -9
  370. package/lib/esm/function/relational/larger.js +23 -73
  371. package/lib/esm/function/relational/largerEq.js +23 -73
  372. package/lib/esm/function/relational/smaller.js +23 -73
  373. package/lib/esm/function/relational/smallerEq.js +23 -73
  374. package/lib/esm/function/relational/unequal.js +19 -79
  375. package/lib/esm/function/special/erf.js +1 -3
  376. package/lib/esm/function/statistics/std.js +10 -2
  377. package/lib/esm/function/string/format.js +2 -2
  378. package/lib/esm/function/string/hex.js +1 -2
  379. package/lib/esm/function/trigonometry/acos.js +4 -7
  380. package/lib/esm/function/trigonometry/acosh.js +2 -6
  381. package/lib/esm/function/trigonometry/acot.js +6 -10
  382. package/lib/esm/function/trigonometry/acoth.js +4 -7
  383. package/lib/esm/function/trigonometry/acsc.js +6 -10
  384. package/lib/esm/function/trigonometry/acsch.js +4 -7
  385. package/lib/esm/function/trigonometry/asec.js +6 -9
  386. package/lib/esm/function/trigonometry/asech.js +4 -7
  387. package/lib/esm/function/trigonometry/asin.js +5 -9
  388. package/lib/esm/function/trigonometry/asinh.js +4 -8
  389. package/lib/esm/function/trigonometry/atan.js +5 -10
  390. package/lib/esm/function/trigonometry/atan2.js +26 -65
  391. package/lib/esm/function/trigonometry/atanh.js +4 -8
  392. package/lib/esm/function/trigonometry/cos.js +11 -22
  393. package/lib/esm/function/trigonometry/cosh.js +5 -20
  394. package/lib/esm/function/trigonometry/cot.js +10 -20
  395. package/lib/esm/function/trigonometry/coth.js +6 -20
  396. package/lib/esm/function/trigonometry/csc.js +12 -22
  397. package/lib/esm/function/trigonometry/csch.js +6 -20
  398. package/lib/esm/function/trigonometry/sec.js +12 -22
  399. package/lib/esm/function/trigonometry/sech.js +6 -20
  400. package/lib/esm/function/trigonometry/sin.js +11 -23
  401. package/lib/esm/function/trigonometry/sinh.js +5 -21
  402. package/lib/esm/function/trigonometry/tan.js +11 -23
  403. package/lib/esm/function/trigonometry/tanh.js +5 -21
  404. package/lib/esm/function/trigonometry/trigUnit.js +15 -0
  405. package/lib/esm/function/unit/to.js +8 -43
  406. package/lib/esm/function/utils/clone.js +1 -1
  407. package/lib/esm/function/utils/hasNumericValue.js +3 -1
  408. package/lib/esm/function/utils/isInteger.js +2 -4
  409. package/lib/esm/function/utils/isNaN.js +1 -1
  410. package/lib/esm/function/utils/isNegative.js +3 -7
  411. package/lib/esm/function/utils/isNumeric.js +4 -10
  412. package/lib/esm/function/utils/isPositive.js +3 -7
  413. package/lib/esm/function/utils/isPrime.js +1 -3
  414. package/lib/esm/function/utils/isZero.js +13 -17
  415. package/lib/esm/function/utils/numeric.js +11 -4
  416. package/lib/esm/function/utils/typeOf.js +38 -44
  417. package/lib/esm/type/bignumber/function/bignumber.js +1 -3
  418. package/lib/esm/type/boolean.js +1 -3
  419. package/lib/esm/type/chain/Chain.js +23 -3
  420. package/lib/esm/type/complex/Complex.js +4 -0
  421. package/lib/esm/type/complex/function/complex.js +1 -3
  422. package/lib/esm/type/fraction/Fraction.js +4 -0
  423. package/lib/esm/type/fraction/function/fraction.js +1 -3
  424. package/lib/esm/type/matrix/DenseMatrix.js +15 -1
  425. package/lib/esm/type/matrix/SparseMatrix.js +9 -0
  426. package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
  427. package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
  428. package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
  429. package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
  430. package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
  431. package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
  432. package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
  433. package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
  434. package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
  435. package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
  436. package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
  437. package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
  438. package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
  439. package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
  440. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
  441. package/lib/esm/type/number.js +1 -3
  442. package/lib/esm/type/string.js +1 -3
  443. package/lib/esm/type/unit/Unit.js +85 -36
  444. package/lib/esm/type/unit/function/createUnit.js +2 -1
  445. package/lib/esm/type/unit/function/unit.js +10 -5
  446. package/lib/esm/utils/is.js +18 -18
  447. package/lib/esm/utils/snapshot.js +22 -48
  448. package/lib/esm/version.js +1 -1
  449. package/package.json +22 -25
  450. package/types/index.d.ts +211 -180
  451. package/types/index.ts +358 -144
  452. package/types/tsconfig.json +4 -1
  453. package/lib/cjs/utils/polyfills.js +0 -14
  454. package/lib/esm/utils/polyfills.js +0 -12
@@ -1,4 +1,5 @@
1
- import { isNode } from '../../utils/is.js';
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import { isNode, isConstantNode, isOperatorNode, isParenthesisNode } from '../../utils/is.js';
2
3
  import { map } from '../../utils/array.js';
3
4
  import { escape } from '../../utils/string.js';
4
5
  import { getSafeProperty, isSafeMethod } from '../../utils/customs.js';
@@ -13,149 +14,29 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
13
14
  } = _ref;
14
15
 
15
16
  /**
16
- * @constructor OperatorNode
17
- * @extends {Node}
18
- * An operator with two arguments, like 2+3
19
- *
20
- * @param {string} op Operator name, for example '+'
21
- * @param {string} fn Function name, for example 'add'
22
- * @param {Node[]} args Operator arguments
23
- * @param {boolean} [implicit] Is this an implicit multiplication?
24
- * @param {boolean} [isPercentage] Is this an percentage Operation?
25
- */
26
- function OperatorNode(op, fn, args, implicit, isPercentage) {
27
- if (!(this instanceof OperatorNode)) {
28
- throw new SyntaxError('Constructor must be called with the new operator');
29
- } // validate input
30
-
31
-
32
- if (typeof op !== 'string') {
33
- throw new TypeError('string expected for parameter "op"');
34
- }
35
-
36
- if (typeof fn !== 'string') {
37
- throw new TypeError('string expected for parameter "fn"');
38
- }
39
-
40
- if (!Array.isArray(args) || !args.every(isNode)) {
41
- throw new TypeError('Array containing Nodes expected for parameter "args"');
42
- }
43
-
44
- this.implicit = implicit === true;
45
- this.isPercentage = isPercentage === true;
46
- this.op = op;
47
- this.fn = fn;
48
- this.args = args || [];
49
- }
50
-
51
- OperatorNode.prototype = new Node();
52
- OperatorNode.prototype.type = 'OperatorNode';
53
- OperatorNode.prototype.isOperatorNode = true;
54
- /**
55
- * Compile a node into a JavaScript function.
56
- * This basically pre-calculates as much as possible and only leaves open
57
- * calculations which depend on a dynamic scope with variables.
58
- * @param {Object} math Math.js namespace with functions and constants.
59
- * @param {Object} argNames An object with argument names as key and `true`
60
- * as value. Used in the SymbolNode to optimize
61
- * for arguments from user assigned functions
62
- * (see FunctionAssignmentNode) or special symbols
63
- * like `end` (see IndexNode).
64
- * @return {function} Returns a function which can be called like:
65
- * evalNode(scope: Object, args: Object, context: *)
17
+ * Returns true if the expression starts with a constant, under
18
+ * the current parenthesization:
19
+ * @param {Node} expression
20
+ * @param {string} parenthesis
21
+ * @return {boolean}
66
22
  */
23
+ function startsWithConstant(expr, parenthesis) {
24
+ var curNode = expr;
67
25
 
68
- OperatorNode.prototype._compile = function (math, argNames) {
69
- // validate fn
70
- if (typeof this.fn !== 'string' || !isSafeMethod(math, this.fn)) {
71
- if (!math[this.fn]) {
72
- throw new Error('Function ' + this.fn + ' missing in provided namespace "math"');
73
- } else {
74
- throw new Error('No access to function "' + this.fn + '"');
26
+ if (parenthesis === 'auto') {
27
+ while (isParenthesisNode(curNode)) {
28
+ curNode = curNode.content;
75
29
  }
76
30
  }
77
31
 
78
- var fn = getSafeProperty(math, this.fn);
79
- var evalArgs = map(this.args, function (arg) {
80
- return arg._compile(math, argNames);
81
- });
82
-
83
- if (evalArgs.length === 1) {
84
- var evalArg0 = evalArgs[0];
85
- return function evalOperatorNode(scope, args, context) {
86
- return fn(evalArg0(scope, args, context));
87
- };
88
- } else if (evalArgs.length === 2) {
89
- var _evalArg = evalArgs[0];
90
- var evalArg1 = evalArgs[1];
91
- return function evalOperatorNode(scope, args, context) {
92
- return fn(_evalArg(scope, args, context), evalArg1(scope, args, context));
93
- };
94
- } else {
95
- return function evalOperatorNode(scope, args, context) {
96
- return fn.apply(null, map(evalArgs, function (evalArg) {
97
- return evalArg(scope, args, context);
98
- }));
99
- };
100
- }
101
- };
102
- /**
103
- * Execute a callback for each of the child nodes of this node
104
- * @param {function(child: Node, path: string, parent: Node)} callback
105
- */
106
-
107
-
108
- OperatorNode.prototype.forEach = function (callback) {
109
- for (var i = 0; i < this.args.length; i++) {
110
- callback(this.args[i], 'args[' + i + ']', this);
111
- }
112
- };
113
- /**
114
- * Create a new OperatorNode having it's childs be the results of calling
115
- * the provided callback function for each of the childs of the original node.
116
- * @param {function(child: Node, path: string, parent: Node): Node} callback
117
- * @returns {OperatorNode} Returns a transformed copy of the node
118
- */
119
-
120
-
121
- OperatorNode.prototype.map = function (callback) {
122
- var args = [];
32
+ if (isConstantNode(curNode)) return true;
123
33
 
124
- for (var i = 0; i < this.args.length; i++) {
125
- args[i] = this._ifNode(callback(this.args[i], 'args[' + i + ']', this));
34
+ if (isOperatorNode(curNode)) {
35
+ return startsWithConstant(curNode.args[0], parenthesis);
126
36
  }
127
37
 
128
- return new OperatorNode(this.op, this.fn, args, this.implicit, this.isPercentage);
129
- };
130
- /**
131
- * Create a clone of this node, a shallow copy
132
- * @return {OperatorNode}
133
- */
134
-
135
-
136
- OperatorNode.prototype.clone = function () {
137
- return new OperatorNode(this.op, this.fn, this.args.slice(0), this.implicit, this.isPercentage);
138
- };
139
- /**
140
- * Check whether this is an unary OperatorNode:
141
- * has exactly one argument, like `-a`.
142
- * @return {boolean} Returns true when an unary operator node, false otherwise.
143
- */
144
-
145
-
146
- OperatorNode.prototype.isUnary = function () {
147
- return this.args.length === 1;
148
- };
149
- /**
150
- * Check whether this is a binary OperatorNode:
151
- * has exactly two arguments, like `a + b`.
152
- * @return {boolean} Returns true when a binary operator node, false otherwise.
153
- */
154
-
155
-
156
- OperatorNode.prototype.isBinary = function () {
157
- return this.args.length === 2;
158
- };
38
+ return false;
39
+ }
159
40
  /**
160
41
  * Calculate which parentheses are necessary. Gets an OperatorNode
161
42
  * (which is the root of the tree) and an Array of Nodes
@@ -173,7 +54,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
173
54
 
174
55
  function calculateNecessaryParentheses(root, parenthesis, implicit, args, latex) {
175
56
  // precedence of the root OperatorNode
176
- var precedence = getPrecedence(root, parenthesis);
57
+ var precedence = getPrecedence(root, parenthesis, implicit);
177
58
  var associativity = getAssociativity(root, parenthesis);
178
59
 
179
60
  if (parenthesis === 'all' || args.length > 2 && root.getIdentifier() !== 'OperatorNode:add' && root.getIdentifier() !== 'OperatorNode:multiply') {
@@ -203,7 +84,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
203
84
  // unary operators
204
85
  {
205
86
  // precedence of the operand
206
- var operandPrecedence = getPrecedence(args[0], parenthesis); // handle special cases for LaTeX, where some of the parentheses aren't needed
87
+ var operandPrecedence = getPrecedence(args[0], parenthesis, implicit, root); // handle special cases for LaTeX, where some of the parentheses aren't needed
207
88
 
208
89
  if (latex && operandPrecedence !== null) {
209
90
  var operandIdentifier;
@@ -252,7 +133,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
252
133
  var lhsParens; // left hand side needs parenthesis?
253
134
  // precedence of the left hand side
254
135
 
255
- var lhsPrecedence = getPrecedence(args[0], parenthesis); // is the root node associative with the left hand side
136
+ var lhsPrecedence = getPrecedence(args[0], parenthesis, implicit, root); // is the root node associative with the left hand side
256
137
 
257
138
  var assocWithLhs = isAssociativeWith(root, args[0], parenthesis);
258
139
 
@@ -275,7 +156,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
275
156
  var rhsParens; // right hand side needs parenthesis?
276
157
  // precedence of the right hand side
277
158
 
278
- var rhsPrecedence = getPrecedence(args[1], parenthesis); // is the root node associative with the right hand side?
159
+ var rhsPrecedence = getPrecedence(args[1], parenthesis, implicit, root); // is the root node associative with the right hand side?
279
160
 
280
161
  var assocWithRhs = isAssociativeWith(root, args[1], parenthesis);
281
162
 
@@ -341,7 +222,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
341
222
  default:
342
223
  if (root.getIdentifier() === 'OperatorNode:add' || root.getIdentifier() === 'OperatorNode:multiply') {
343
224
  result = args.map(function (arg) {
344
- var argPrecedence = getPrecedence(arg, parenthesis);
225
+ var argPrecedence = getPrecedence(arg, parenthesis, implicit, root);
345
226
  var assocWithArg = isAssociativeWith(root, arg, parenthesis);
346
227
  var argAssociativity = getAssociativity(arg, parenthesis);
347
228
 
@@ -359,327 +240,483 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
359
240
  }
360
241
 
361
242
  break;
362
- } // handles an edge case of 'auto' parentheses with implicit multiplication of ConstantNode
363
- // In that case print parentheses for ParenthesisNodes even though they normally wouldn't be
364
- // printed.
365
-
243
+ } // Handles an edge case of parentheses with implicit multiplication
244
+ // of ConstantNode.
245
+ // In that case, parenthesize ConstantNodes that follow an unparenthesized
246
+ // expression, even though they normally wouldn't be printed.
366
247
 
367
- if (args.length >= 2 && root.getIdentifier() === 'OperatorNode:multiply' && root.implicit && parenthesis === 'auto' && implicit === 'hide') {
368
- result = args.map(function (arg, index) {
369
- var isParenthesisNode = arg.getIdentifier() === 'ParenthesisNode';
370
248
 
371
- if (result[index] || isParenthesisNode) {
372
- // put in parenthesis?
373
- return true;
249
+ if (args.length >= 2 && root.getIdentifier() === 'OperatorNode:multiply' && root.implicit && parenthesis !== 'all' && implicit === 'hide') {
250
+ for (var i = 1; i < result.length; ++i) {
251
+ if (startsWithConstant(args[i], parenthesis) && !result[i - 1] && (parenthesis !== 'keep' || !isParenthesisNode(args[i - 1]))) {
252
+ result[i] = true;
374
253
  }
375
-
376
- return false;
377
- });
254
+ }
378
255
  }
379
256
 
380
257
  return result;
381
258
  }
382
- /**
383
- * Get string representation.
384
- * @param {Object} options
385
- * @return {string} str
386
- */
387
259
 
260
+ class OperatorNode extends Node {
261
+ /**
262
+ * @constructor OperatorNode
263
+ * @extends {Node}
264
+ * An operator with two arguments, like 2+3
265
+ *
266
+ * @param {string} op Operator name, for example '+'
267
+ * @param {string} fn Function name, for example 'add'
268
+ * @param {Node[]} args Operator arguments
269
+ * @param {boolean} [implicit] Is this an implicit multiplication?
270
+ * @param {boolean} [isPercentage] Is this an percentage Operation?
271
+ */
272
+ constructor(op, fn, args, implicit, isPercentage) {
273
+ super(); // validate input
274
+
275
+ if (typeof op !== 'string') {
276
+ throw new TypeError('string expected for parameter "op"');
277
+ }
388
278
 
389
- OperatorNode.prototype._toString = function (options) {
390
- var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
391
- var implicit = options && options.implicit ? options.implicit : 'hide';
392
- var args = this.args;
393
- var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, false);
394
-
395
- if (args.length === 1) {
396
- // unary operators
397
- var assoc = getAssociativity(this, parenthesis);
398
- var operand = args[0].toString(options);
279
+ if (typeof fn !== 'string') {
280
+ throw new TypeError('string expected for parameter "fn"');
281
+ }
399
282
 
400
- if (parens[0]) {
401
- operand = '(' + operand + ')';
402
- } // for example for "not", we want a space between operand and argument
283
+ if (!Array.isArray(args) || !args.every(isNode)) {
284
+ throw new TypeError('Array containing Nodes expected for parameter "args"');
285
+ }
403
286
 
287
+ this.implicit = implicit === true;
288
+ this.isPercentage = isPercentage === true;
289
+ this.op = op;
290
+ this.fn = fn;
291
+ this.args = args || [];
292
+ }
404
293
 
405
- var opIsNamed = /[a-zA-Z]+/.test(this.op);
294
+ get type() {
295
+ return name;
296
+ }
406
297
 
407
- if (assoc === 'right') {
408
- // prefix operator
409
- return this.op + (opIsNamed ? ' ' : '') + operand;
410
- } else if (assoc === 'left') {
411
- // postfix
412
- return operand + (opIsNamed ? ' ' : '') + this.op;
413
- } // fall back to postfix
298
+ get isOperatorNode() {
299
+ return true;
300
+ }
301
+ /**
302
+ * Compile a node into a JavaScript function.
303
+ * This basically pre-calculates as much as possible and only leaves open
304
+ * calculations which depend on a dynamic scope with variables.
305
+ * @param {Object} math Math.js namespace with functions and constants.
306
+ * @param {Object} argNames An object with argument names as key and `true`
307
+ * as value. Used in the SymbolNode to optimize
308
+ * for arguments from user assigned functions
309
+ * (see FunctionAssignmentNode) or special symbols
310
+ * like `end` (see IndexNode).
311
+ * @return {function} Returns a function which can be called like:
312
+ * evalNode(scope: Object, args: Object, context: *)
313
+ */
314
+
315
+
316
+ _compile(math, argNames) {
317
+ // validate fn
318
+ if (typeof this.fn !== 'string' || !isSafeMethod(math, this.fn)) {
319
+ if (!math[this.fn]) {
320
+ throw new Error('Function ' + this.fn + ' missing in provided namespace "math"');
321
+ } else {
322
+ throw new Error('No access to function "' + this.fn + '"');
323
+ }
324
+ }
414
325
 
326
+ var fn = getSafeProperty(math, this.fn);
327
+ var evalArgs = map(this.args, function (arg) {
328
+ return arg._compile(math, argNames);
329
+ });
415
330
 
416
- return operand + this.op;
417
- } else if (args.length === 2) {
418
- var lhs = args[0].toString(options); // left hand side
331
+ if (evalArgs.length === 1) {
332
+ var evalArg0 = evalArgs[0];
333
+ return function evalOperatorNode(scope, args, context) {
334
+ return fn(evalArg0(scope, args, context));
335
+ };
336
+ } else if (evalArgs.length === 2) {
337
+ var _evalArg = evalArgs[0];
338
+ var evalArg1 = evalArgs[1];
339
+ return function evalOperatorNode(scope, args, context) {
340
+ return fn(_evalArg(scope, args, context), evalArg1(scope, args, context));
341
+ };
342
+ } else {
343
+ return function evalOperatorNode(scope, args, context) {
344
+ return fn.apply(null, map(evalArgs, function (evalArg) {
345
+ return evalArg(scope, args, context);
346
+ }));
347
+ };
348
+ }
349
+ }
350
+ /**
351
+ * Execute a callback for each of the child nodes of this node
352
+ * @param {function(child: Node, path: string, parent: Node)} callback
353
+ */
419
354
 
420
- var rhs = args[1].toString(options); // right hand side
421
355
 
422
- if (parens[0]) {
423
- // left hand side in parenthesis?
424
- lhs = '(' + lhs + ')';
356
+ forEach(callback) {
357
+ for (var i = 0; i < this.args.length; i++) {
358
+ callback(this.args[i], 'args[' + i + ']', this);
425
359
  }
360
+ }
361
+ /**
362
+ * Create a new OperatorNode whose children are the results of calling
363
+ * the provided callback function for each child of the original node.
364
+ * @param {function(child: Node, path: string, parent: Node): Node} callback
365
+ * @returns {OperatorNode} Returns a transformed copy of the node
366
+ */
426
367
 
427
- if (parens[1]) {
428
- // right hand side in parenthesis?
429
- rhs = '(' + rhs + ')';
430
- }
431
368
 
432
- if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
433
- return lhs + ' ' + rhs;
369
+ map(callback) {
370
+ var args = [];
371
+
372
+ for (var i = 0; i < this.args.length; i++) {
373
+ args[i] = this._ifNode(callback(this.args[i], 'args[' + i + ']', this));
434
374
  }
435
375
 
436
- return lhs + ' ' + this.op + ' ' + rhs;
437
- } else if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {
438
- var stringifiedArgs = args.map(function (arg, index) {
439
- arg = arg.toString(options);
376
+ return new OperatorNode(this.op, this.fn, args, this.implicit, this.isPercentage);
377
+ }
378
+ /**
379
+ * Create a clone of this node, a shallow copy
380
+ * @return {OperatorNode}
381
+ */
440
382
 
441
- if (parens[index]) {
442
- // put in parenthesis?
443
- arg = '(' + arg + ')';
444
- }
445
383
 
446
- return arg;
447
- });
384
+ clone() {
385
+ return new OperatorNode(this.op, this.fn, this.args.slice(0), this.implicit, this.isPercentage);
386
+ }
387
+ /**
388
+ * Check whether this is an unary OperatorNode:
389
+ * has exactly one argument, like `-a`.
390
+ * @return {boolean}
391
+ * Returns true when an unary operator node, false otherwise.
392
+ */
448
393
 
449
- if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
450
- return stringifiedArgs.join(' ');
451
- }
452
394
 
453
- return stringifiedArgs.join(' ' + this.op + ' ');
454
- } else {
455
- // fallback to formatting as a function call
456
- return this.fn + '(' + this.args.join(', ') + ')';
395
+ isUnary() {
396
+ return this.args.length === 1;
457
397
  }
458
- };
459
- /**
460
- * Get a JSON representation of the node
461
- * @returns {Object}
462
- */
398
+ /**
399
+ * Check whether this is a binary OperatorNode:
400
+ * has exactly two arguments, like `a + b`.
401
+ * @return {boolean}
402
+ * Returns true when a binary operator node, false otherwise.
403
+ */
463
404
 
464
405
 
465
- OperatorNode.prototype.toJSON = function () {
466
- return {
467
- mathjs: 'OperatorNode',
468
- op: this.op,
469
- fn: this.fn,
470
- args: this.args,
471
- implicit: this.implicit,
472
- isPercentage: this.isPercentage
473
- };
474
- };
475
- /**
476
- * Instantiate an OperatorNode from its JSON representation
477
- * @param {Object} json An object structured like
478
- * `{"mathjs": "OperatorNode", "op": "+", "fn": "add", "args": [...], "implicit": false, "isPercentage":false}`,
479
- * where mathjs is optional
480
- * @returns {OperatorNode}
481
- */
406
+ isBinary() {
407
+ return this.args.length === 2;
408
+ }
409
+ /**
410
+ * Get string representation.
411
+ * @param {Object} options
412
+ * @return {string} str
413
+ */
482
414
 
483
415
 
484
- OperatorNode.fromJSON = function (json) {
485
- return new OperatorNode(json.op, json.fn, json.args, json.implicit, json.isPercentage);
486
- };
487
- /**
488
- * Get HTML representation.
489
- * @param {Object} options
490
- * @return {string} str
491
- */
416
+ _toString(options) {
417
+ var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
418
+ var implicit = options && options.implicit ? options.implicit : 'hide';
419
+ var args = this.args;
420
+ var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, false);
492
421
 
422
+ if (args.length === 1) {
423
+ // unary operators
424
+ var assoc = getAssociativity(this, parenthesis);
425
+ var operand = args[0].toString(options);
493
426
 
494
- OperatorNode.prototype.toHTML = function (options) {
495
- var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
496
- var implicit = options && options.implicit ? options.implicit : 'hide';
497
- var args = this.args;
498
- var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, false);
427
+ if (parens[0]) {
428
+ operand = '(' + operand + ')';
429
+ } // for example for "not", we want a space between operand and argument
499
430
 
500
- if (args.length === 1) {
501
- // unary operators
502
- var assoc = getAssociativity(this, parenthesis);
503
- var operand = args[0].toHTML(options);
504
431
 
505
- if (parens[0]) {
506
- operand = '<span class="math-parenthesis math-round-parenthesis">(</span>' + operand + '<span class="math-parenthesis math-round-parenthesis">)</span>';
507
- }
432
+ var opIsNamed = /[a-zA-Z]+/.test(this.op);
508
433
 
509
- if (assoc === 'right') {
510
- // prefix operator
511
- return '<span class="math-operator math-unary-operator math-lefthand-unary-operator">' + escape(this.op) + '</span>' + operand;
512
- } else {
513
- // postfix when assoc === 'left' or undefined
514
- return operand + '<span class="math-operator math-unary-operator math-righthand-unary-operator">' + escape(this.op) + '</span>';
515
- }
516
- } else if (args.length === 2) {
517
- // binary operatoes
518
- var lhs = args[0].toHTML(options); // left hand side
434
+ if (assoc === 'right') {
435
+ // prefix operator
436
+ return this.op + (opIsNamed ? ' ' : '') + operand;
437
+ } else if (assoc === 'left') {
438
+ // postfix
439
+ return operand + (opIsNamed ? ' ' : '') + this.op;
440
+ } // fall back to postfix
519
441
 
520
- var rhs = args[1].toHTML(options); // right hand side
521
442
 
522
- if (parens[0]) {
523
- // left hand side in parenthesis?
524
- lhs = '<span class="math-parenthesis math-round-parenthesis">(</span>' + lhs + '<span class="math-parenthesis math-round-parenthesis">)</span>';
525
- }
443
+ return operand + this.op;
444
+ } else if (args.length === 2) {
445
+ var lhs = args[0].toString(options); // left hand side
526
446
 
527
- if (parens[1]) {
528
- // right hand side in parenthesis?
529
- rhs = '<span class="math-parenthesis math-round-parenthesis">(</span>' + rhs + '<span class="math-parenthesis math-round-parenthesis">)</span>';
530
- }
447
+ var rhs = args[1].toString(options); // right hand side
531
448
 
532
- if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
533
- return lhs + '<span class="math-operator math-binary-operator math-implicit-binary-operator"></span>' + rhs;
534
- }
449
+ if (parens[0]) {
450
+ // left hand side in parenthesis?
451
+ lhs = '(' + lhs + ')';
452
+ }
535
453
 
536
- return lhs + '<span class="math-operator math-binary-operator math-explicit-binary-operator">' + escape(this.op) + '</span>' + rhs;
537
- } else {
538
- var stringifiedArgs = args.map(function (arg, index) {
539
- arg = arg.toHTML(options);
454
+ if (parens[1]) {
455
+ // right hand side in parenthesis?
456
+ rhs = '(' + rhs + ')';
457
+ }
540
458
 
541
- if (parens[index]) {
542
- // put in parenthesis?
543
- arg = '<span class="math-parenthesis math-round-parenthesis">(</span>' + arg + '<span class="math-parenthesis math-round-parenthesis">)</span>';
459
+ if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
460
+ return lhs + ' ' + rhs;
544
461
  }
545
462
 
546
- return arg;
547
- });
463
+ return lhs + ' ' + this.op + ' ' + rhs;
464
+ } else if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {
465
+ var stringifiedArgs = args.map(function (arg, index) {
466
+ arg = arg.toString(options);
467
+
468
+ if (parens[index]) {
469
+ // put in parenthesis?
470
+ arg = '(' + arg + ')';
471
+ }
472
+
473
+ return arg;
474
+ });
548
475
 
549
- if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {
550
476
  if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
551
- return stringifiedArgs.join('<span class="math-operator math-binary-operator math-implicit-binary-operator"></span>');
477
+ return stringifiedArgs.join(' ');
552
478
  }
553
479
 
554
- return stringifiedArgs.join('<span class="math-operator math-binary-operator math-explicit-binary-operator">' + escape(this.op) + '</span>');
480
+ return stringifiedArgs.join(' ' + this.op + ' ');
555
481
  } else {
556
482
  // fallback to formatting as a function call
557
- return '<span class="math-function">' + escape(this.fn) + '</span><span class="math-paranthesis math-round-parenthesis">(</span>' + stringifiedArgs.join('<span class="math-separator">,</span>') + '<span class="math-paranthesis math-round-parenthesis">)</span>';
483
+ return this.fn + '(' + this.args.join(', ') + ')';
558
484
  }
559
485
  }
560
- };
561
- /**
562
- * Get LaTeX representation
563
- * @param {Object} options
564
- * @return {string} str
565
- */
486
+ /**
487
+ * Get a JSON representation of the node
488
+ * @returns {Object}
489
+ */
490
+
491
+
492
+ toJSON() {
493
+ return {
494
+ mathjs: name,
495
+ op: this.op,
496
+ fn: this.fn,
497
+ args: this.args,
498
+ implicit: this.implicit,
499
+ isPercentage: this.isPercentage
500
+ };
501
+ }
502
+ /**
503
+ * Instantiate an OperatorNode from its JSON representation
504
+ * @param {Object} json
505
+ * An object structured like
506
+ * ```
507
+ * {"mathjs": "OperatorNode",
508
+ * "op": "+", "fn": "add", "args": [...],
509
+ * "implicit": false,
510
+ * "isPercentage":false}
511
+ * ```
512
+ * where mathjs is optional
513
+ * @returns {OperatorNode}
514
+ */
515
+
516
+
517
+ static fromJSON(json) {
518
+ return new OperatorNode(json.op, json.fn, json.args, json.implicit, json.isPercentage);
519
+ }
520
+ /**
521
+ * Get HTML representation.
522
+ * @param {Object} options
523
+ * @return {string} str
524
+ */
566
525
 
567
526
 
568
- OperatorNode.prototype._toTex = function (options) {
569
- var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
570
- var implicit = options && options.implicit ? options.implicit : 'hide';
571
- var args = this.args;
572
- var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, true);
573
- var op = latexOperators[this.fn];
574
- op = typeof op === 'undefined' ? this.op : op; // fall back to using this.op
527
+ toHTML(options) {
528
+ var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
529
+ var implicit = options && options.implicit ? options.implicit : 'hide';
530
+ var args = this.args;
531
+ var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, false);
575
532
 
576
- if (args.length === 1) {
577
- // unary operators
578
- var assoc = getAssociativity(this, parenthesis);
579
- var operand = args[0].toTex(options);
533
+ if (args.length === 1) {
534
+ // unary operators
535
+ var assoc = getAssociativity(this, parenthesis);
536
+ var operand = args[0].toHTML(options);
580
537
 
581
- if (parens[0]) {
582
- operand = "\\left(".concat(operand, "\\right)");
583
- }
538
+ if (parens[0]) {
539
+ operand = '<span class="math-parenthesis math-round-parenthesis">(</span>' + operand + '<span class="math-parenthesis math-round-parenthesis">)</span>';
540
+ }
584
541
 
585
- if (assoc === 'right') {
586
- // prefix operator
587
- return op + operand;
588
- } else if (assoc === 'left') {
589
- // postfix operator
590
- return operand + op;
591
- } // fall back to postfix
542
+ if (assoc === 'right') {
543
+ // prefix operator
544
+ return '<span class="math-operator math-unary-operator ' + 'math-lefthand-unary-operator">' + escape(this.op) + '</span>' + operand;
545
+ } else {
546
+ // postfix when assoc === 'left' or undefined
547
+ return operand + '<span class="math-operator math-unary-operator ' + 'math-righthand-unary-operator">' + escape(this.op) + '</span>';
548
+ }
549
+ } else if (args.length === 2) {
550
+ // binary operatoes
551
+ var lhs = args[0].toHTML(options); // left hand side
552
+
553
+ var rhs = args[1].toHTML(options); // right hand side
554
+
555
+ if (parens[0]) {
556
+ // left hand side in parenthesis?
557
+ lhs = '<span class="math-parenthesis math-round-parenthesis">(</span>' + lhs + '<span class="math-parenthesis math-round-parenthesis">)</span>';
558
+ }
559
+
560
+ if (parens[1]) {
561
+ // right hand side in parenthesis?
562
+ rhs = '<span class="math-parenthesis math-round-parenthesis">(</span>' + rhs + '<span class="math-parenthesis math-round-parenthesis">)</span>';
563
+ }
564
+
565
+ if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
566
+ return lhs + '<span class="math-operator math-binary-operator ' + 'math-implicit-binary-operator"></span>' + rhs;
567
+ }
592
568
 
569
+ return lhs + '<span class="math-operator math-binary-operator ' + 'math-explicit-binary-operator">' + escape(this.op) + '</span>' + rhs;
570
+ } else {
571
+ var stringifiedArgs = args.map(function (arg, index) {
572
+ arg = arg.toHTML(options);
593
573
 
594
- return operand + op;
595
- } else if (args.length === 2) {
596
- // binary operators
597
- var lhs = args[0]; // left hand side
574
+ if (parens[index]) {
575
+ // put in parenthesis?
576
+ arg = '<span class="math-parenthesis math-round-parenthesis">(</span>' + arg + '<span class="math-parenthesis math-round-parenthesis">)</span>';
577
+ }
598
578
 
599
- var lhsTex = lhs.toTex(options);
579
+ return arg;
580
+ });
600
581
 
601
- if (parens[0]) {
602
- lhsTex = "\\left(".concat(lhsTex, "\\right)");
582
+ if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {
583
+ if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
584
+ return stringifiedArgs.join('<span class="math-operator math-binary-operator ' + 'math-implicit-binary-operator"></span>');
585
+ }
586
+
587
+ return stringifiedArgs.join('<span class="math-operator math-binary-operator ' + 'math-explicit-binary-operator">' + escape(this.op) + '</span>');
588
+ } else {
589
+ // fallback to formatting as a function call
590
+ return '<span class="math-function">' + escape(this.fn) + '</span><span class="math-paranthesis math-round-parenthesis">' + '(</span>' + stringifiedArgs.join('<span class="math-separator">,</span>') + '<span class="math-paranthesis math-round-parenthesis">)</span>';
591
+ }
603
592
  }
593
+ }
594
+ /**
595
+ * Get LaTeX representation
596
+ * @param {Object} options
597
+ * @return {string} str
598
+ */
599
+
600
+
601
+ _toTex(options) {
602
+ var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
603
+ var implicit = options && options.implicit ? options.implicit : 'hide';
604
+ var args = this.args;
605
+ var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, true);
606
+ var op = latexOperators[this.fn];
607
+ op = typeof op === 'undefined' ? this.op : op; // fall back to using this.op
608
+
609
+ if (args.length === 1) {
610
+ // unary operators
611
+ var assoc = getAssociativity(this, parenthesis);
612
+ var operand = args[0].toTex(options);
613
+
614
+ if (parens[0]) {
615
+ operand = "\\left(".concat(operand, "\\right)");
616
+ }
604
617
 
605
- var rhs = args[1]; // right hand side
618
+ if (assoc === 'right') {
619
+ // prefix operator
620
+ return op + operand;
621
+ } else if (assoc === 'left') {
622
+ // postfix operator
623
+ return operand + op;
624
+ } // fall back to postfix
606
625
 
607
- var rhsTex = rhs.toTex(options);
608
626
 
609
- if (parens[1]) {
610
- rhsTex = "\\left(".concat(rhsTex, "\\right)");
611
- } // handle some exceptions (due to the way LaTeX works)
627
+ return operand + op;
628
+ } else if (args.length === 2) {
629
+ // binary operators
630
+ var lhs = args[0]; // left hand side
612
631
 
632
+ var lhsTex = lhs.toTex(options);
613
633
 
614
- var lhsIdentifier;
634
+ if (parens[0]) {
635
+ lhsTex = "\\left(".concat(lhsTex, "\\right)");
636
+ }
615
637
 
616
- if (parenthesis === 'keep') {
617
- lhsIdentifier = lhs.getIdentifier();
618
- } else {
619
- // Ignore ParenthesisNodes if in 'keep' mode
620
- lhsIdentifier = lhs.getContent().getIdentifier();
621
- }
638
+ var rhs = args[1]; // right hand side
622
639
 
623
- switch (this.getIdentifier()) {
624
- case 'OperatorNode:divide':
625
- // op contains '\\frac' at this point
626
- return op + '{' + lhsTex + '}' + '{' + rhsTex + '}';
640
+ var rhsTex = rhs.toTex(options);
627
641
 
628
- case 'OperatorNode:pow':
629
- lhsTex = '{' + lhsTex + '}';
630
- rhsTex = '{' + rhsTex + '}';
642
+ if (parens[1]) {
643
+ rhsTex = "\\left(".concat(rhsTex, "\\right)");
644
+ } // handle some exceptions (due to the way LaTeX works)
631
645
 
632
- switch (lhsIdentifier) {
633
- case 'ConditionalNode': //
634
646
 
635
- case 'OperatorNode:divide':
636
- lhsTex = "\\left(".concat(lhsTex, "\\right)");
637
- }
647
+ var lhsIdentifier;
638
648
 
639
- break;
649
+ if (parenthesis === 'keep') {
650
+ lhsIdentifier = lhs.getIdentifier();
651
+ } else {
652
+ // Ignore ParenthesisNodes if in 'keep' mode
653
+ lhsIdentifier = lhs.getContent().getIdentifier();
654
+ }
640
655
 
641
- case 'OperatorNode:multiply':
642
- if (this.implicit && implicit === 'hide') {
643
- return lhsTex + '~' + rhsTex;
644
- }
656
+ switch (this.getIdentifier()) {
657
+ case 'OperatorNode:divide':
658
+ // op contains '\\frac' at this point
659
+ return op + '{' + lhsTex + '}' + '{' + rhsTex + '}';
645
660
 
646
- }
661
+ case 'OperatorNode:pow':
662
+ lhsTex = '{' + lhsTex + '}';
663
+ rhsTex = '{' + rhsTex + '}';
647
664
 
648
- return lhsTex + op + rhsTex;
649
- } else if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {
650
- var texifiedArgs = args.map(function (arg, index) {
651
- arg = arg.toTex(options);
665
+ switch (lhsIdentifier) {
666
+ case 'ConditionalNode': //
667
+
668
+ case 'OperatorNode:divide':
669
+ lhsTex = "\\left(".concat(lhsTex, "\\right)");
670
+ }
671
+
672
+ break;
673
+
674
+ case 'OperatorNode:multiply':
675
+ if (this.implicit && implicit === 'hide') {
676
+ return lhsTex + '~' + rhsTex;
677
+ }
652
678
 
653
- if (parens[index]) {
654
- arg = "\\left(".concat(arg, "\\right)");
655
679
  }
656
680
 
657
- return arg;
658
- });
681
+ return lhsTex + op + rhsTex;
682
+ } else if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {
683
+ var texifiedArgs = args.map(function (arg, index) {
684
+ arg = arg.toTex(options);
685
+
686
+ if (parens[index]) {
687
+ arg = "\\left(".concat(arg, "\\right)");
688
+ }
659
689
 
660
- if (this.getIdentifier() === 'OperatorNode:multiply' && this.implicit) {
661
- return texifiedArgs.join('~');
690
+ return arg;
691
+ });
692
+
693
+ if (this.getIdentifier() === 'OperatorNode:multiply' && this.implicit && implicit === 'hide') {
694
+ return texifiedArgs.join('~');
695
+ }
696
+
697
+ return texifiedArgs.join(op);
698
+ } else {
699
+ // fall back to formatting as a function call
700
+ // as this is a fallback, it doesn't use
701
+ // fancy function names
702
+ return '\\mathrm{' + this.fn + '}\\left(' + args.map(function (arg) {
703
+ return arg.toTex(options);
704
+ }).join(',') + '\\right)';
662
705
  }
706
+ }
707
+ /**
708
+ * Get identifier.
709
+ * @return {string}
710
+ */
663
711
 
664
- return texifiedArgs.join(op);
665
- } else {
666
- // fall back to formatting as a function call
667
- // as this is a fallback, it doesn't use
668
- // fancy function names
669
- return '\\mathrm{' + this.fn + '}\\left(' + args.map(function (arg) {
670
- return arg.toTex(options);
671
- }).join(',') + '\\right)';
712
+
713
+ getIdentifier() {
714
+ return this.type + ':' + this.fn;
672
715
  }
673
- };
674
- /**
675
- * Get identifier.
676
- * @return {string}
677
- */
678
716
 
717
+ }
679
718
 
680
- OperatorNode.prototype.getIdentifier = function () {
681
- return this.type + ':' + this.fn;
682
- };
719
+ _defineProperty(OperatorNode, "name", name);
683
720
 
684
721
  return OperatorNode;
685
722
  }, {