mathjs 10.1.1 → 10.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (325) hide show
  1. package/HISTORY.md +17 -0
  2. package/docs/expressions/algebra.md +27 -0
  3. package/docs/reference/functions/abs.md +6 -0
  4. package/docs/reference/functions/acos.md +6 -0
  5. package/docs/reference/functions/acosh.md +6 -0
  6. package/docs/reference/functions/acot.md +6 -0
  7. package/docs/reference/functions/acoth.md +6 -0
  8. package/docs/reference/functions/acsc.md +6 -0
  9. package/docs/reference/functions/acsch.md +6 -0
  10. package/docs/reference/functions/add.md +6 -0
  11. package/docs/reference/functions/and.md +6 -0
  12. package/docs/reference/functions/apply.md +6 -0
  13. package/docs/reference/functions/arg.md +6 -0
  14. package/docs/reference/functions/asec.md +6 -0
  15. package/docs/reference/functions/asech.md +6 -0
  16. package/docs/reference/functions/asin.md +6 -0
  17. package/docs/reference/functions/asinh.md +6 -0
  18. package/docs/reference/functions/atan.md +6 -0
  19. package/docs/reference/functions/atan2.md +6 -0
  20. package/docs/reference/functions/atanh.md +6 -0
  21. package/docs/reference/functions/bellNumbers.md +6 -0
  22. package/docs/reference/functions/bin.md +6 -0
  23. package/docs/reference/functions/bitAnd.md +6 -0
  24. package/docs/reference/functions/bitNot.md +6 -0
  25. package/docs/reference/functions/bitOr.md +6 -0
  26. package/docs/reference/functions/bitXor.md +6 -0
  27. package/docs/reference/functions/catalan.md +6 -0
  28. package/docs/reference/functions/cbrt.md +6 -0
  29. package/docs/reference/functions/ceil.md +6 -0
  30. package/docs/reference/functions/clone.md +6 -0
  31. package/docs/reference/functions/column.md +6 -0
  32. package/docs/reference/functions/combinations.md +6 -0
  33. package/docs/reference/functions/combinationsWithRep.md +6 -0
  34. package/docs/reference/functions/compare.md +6 -0
  35. package/docs/reference/functions/compareNatural.md +6 -0
  36. package/docs/reference/functions/compareText.md +6 -0
  37. package/docs/reference/functions/compile.md +6 -0
  38. package/docs/reference/functions/composition.md +6 -0
  39. package/docs/reference/functions/concat.md +6 -0
  40. package/docs/reference/functions/conj.md +6 -0
  41. package/docs/reference/functions/cos.md +6 -0
  42. package/docs/reference/functions/cosh.md +6 -0
  43. package/docs/reference/functions/cot.md +6 -0
  44. package/docs/reference/functions/coth.md +6 -0
  45. package/docs/reference/functions/count.md +6 -0
  46. package/docs/reference/functions/cross.md +6 -0
  47. package/docs/reference/functions/csc.md +6 -0
  48. package/docs/reference/functions/csch.md +6 -0
  49. package/docs/reference/functions/ctranspose.md +6 -0
  50. package/docs/reference/functions/cube.md +6 -0
  51. package/docs/reference/functions/deepEqual.md +6 -0
  52. package/docs/reference/functions/derivative.md +6 -0
  53. package/docs/reference/functions/det.md +6 -0
  54. package/docs/reference/functions/diag.md +6 -0
  55. package/docs/reference/functions/diff.md +6 -0
  56. package/docs/reference/functions/distance.md +6 -0
  57. package/docs/reference/functions/divide.md +6 -0
  58. package/docs/reference/functions/dot.md +6 -0
  59. package/docs/reference/functions/dotDivide.md +6 -0
  60. package/docs/reference/functions/dotMultiply.md +6 -0
  61. package/docs/reference/functions/dotPow.md +6 -0
  62. package/docs/reference/functions/eigs.md +6 -0
  63. package/docs/reference/functions/equal.md +6 -0
  64. package/docs/reference/functions/equalText.md +6 -0
  65. package/docs/reference/functions/erf.md +6 -0
  66. package/docs/reference/functions/evaluate.md +6 -0
  67. package/docs/reference/functions/exp.md +6 -0
  68. package/docs/reference/functions/expm.md +6 -0
  69. package/docs/reference/functions/expm1.md +6 -0
  70. package/docs/reference/functions/factorial.md +6 -0
  71. package/docs/reference/functions/filter.md +6 -0
  72. package/docs/reference/functions/fix.md +6 -0
  73. package/docs/reference/functions/flatten.md +6 -0
  74. package/docs/reference/functions/floor.md +6 -0
  75. package/docs/reference/functions/forEach.md +6 -0
  76. package/docs/reference/functions/format.md +6 -0
  77. package/docs/reference/functions/gamma.md +6 -0
  78. package/docs/reference/functions/gcd.md +6 -0
  79. package/docs/reference/functions/getMatrixDataType.md +6 -0
  80. package/docs/reference/functions/hasNumericValue.md +6 -0
  81. package/docs/reference/functions/help.md +6 -0
  82. package/docs/reference/functions/hex.md +6 -0
  83. package/docs/reference/functions/hypot.md +6 -0
  84. package/docs/reference/functions/identity.md +6 -0
  85. package/docs/reference/functions/im.md +6 -0
  86. package/docs/reference/functions/intersect.md +6 -0
  87. package/docs/reference/functions/inv.md +6 -0
  88. package/docs/reference/functions/invmod.md +6 -0
  89. package/docs/reference/functions/isInteger.md +6 -0
  90. package/docs/reference/functions/isNaN.md +6 -0
  91. package/docs/reference/functions/isNegative.md +6 -0
  92. package/docs/reference/functions/isNumeric.md +6 -0
  93. package/docs/reference/functions/isPositive.md +6 -0
  94. package/docs/reference/functions/isPrime.md +6 -0
  95. package/docs/reference/functions/isZero.md +6 -0
  96. package/docs/reference/functions/kldivergence.md +6 -0
  97. package/docs/reference/functions/kron.md +6 -0
  98. package/docs/reference/functions/larger.md +6 -0
  99. package/docs/reference/functions/largerEq.md +6 -0
  100. package/docs/reference/functions/lcm.md +6 -0
  101. package/docs/reference/functions/leafCount.md +52 -0
  102. package/docs/reference/functions/leftShift.md +6 -0
  103. package/docs/reference/functions/log.md +6 -0
  104. package/docs/reference/functions/log10.md +6 -0
  105. package/docs/reference/functions/log1p.md +6 -0
  106. package/docs/reference/functions/log2.md +6 -0
  107. package/docs/reference/functions/lsolve.md +6 -0
  108. package/docs/reference/functions/lsolveAll.md +6 -0
  109. package/docs/reference/functions/lup.md +6 -0
  110. package/docs/reference/functions/lusolve.md +6 -0
  111. package/docs/reference/functions/mad.md +6 -0
  112. package/docs/reference/functions/map.md +6 -0
  113. package/docs/reference/functions/matrixFromColumns.md +6 -0
  114. package/docs/reference/functions/matrixFromFunction.md +6 -0
  115. package/docs/reference/functions/matrixFromRows.md +6 -0
  116. package/docs/reference/functions/max.md +6 -0
  117. package/docs/reference/functions/mean.md +6 -0
  118. package/docs/reference/functions/median.md +6 -0
  119. package/docs/reference/functions/min.md +6 -0
  120. package/docs/reference/functions/mod.md +6 -0
  121. package/docs/reference/functions/mode.md +6 -0
  122. package/docs/reference/functions/multinomial.md +6 -0
  123. package/docs/reference/functions/multiply.md +6 -0
  124. package/docs/reference/functions/norm.md +6 -0
  125. package/docs/reference/functions/not.md +6 -0
  126. package/docs/reference/functions/nthRoot.md +6 -0
  127. package/docs/reference/functions/nthRoots.md +6 -0
  128. package/docs/reference/functions/numeric.md +6 -0
  129. package/docs/reference/functions/oct.md +6 -0
  130. package/docs/reference/functions/ones.md +6 -0
  131. package/docs/reference/functions/or.md +6 -0
  132. package/docs/reference/functions/parser.md +6 -0
  133. package/docs/reference/functions/partitionSelect.md +6 -0
  134. package/docs/reference/functions/permutations.md +6 -0
  135. package/docs/reference/functions/pickRandom.md +6 -0
  136. package/docs/reference/functions/pow.md +6 -0
  137. package/docs/reference/functions/print.md +6 -0
  138. package/docs/reference/functions/prod.md +6 -0
  139. package/docs/reference/functions/qr.md +6 -0
  140. package/docs/reference/functions/quantileSeq.md +6 -0
  141. package/docs/reference/functions/random.md +6 -0
  142. package/docs/reference/functions/randomInt.md +6 -0
  143. package/docs/reference/functions/range.md +6 -0
  144. package/docs/reference/functions/rationalize.md +7 -1
  145. package/docs/reference/functions/re.md +6 -0
  146. package/docs/reference/functions/reshape.md +7 -0
  147. package/docs/reference/functions/resize.md +6 -0
  148. package/docs/reference/functions/resolve.md +46 -0
  149. package/docs/reference/functions/rightArithShift.md +6 -0
  150. package/docs/reference/functions/rightLogShift.md +6 -0
  151. package/docs/reference/functions/rotate.md +6 -0
  152. package/docs/reference/functions/rotationMatrix.md +6 -0
  153. package/docs/reference/functions/round.md +6 -0
  154. package/docs/reference/functions/row.md +6 -0
  155. package/docs/reference/functions/sec.md +6 -0
  156. package/docs/reference/functions/sech.md +6 -0
  157. package/docs/reference/functions/setCartesian.md +6 -0
  158. package/docs/reference/functions/setDifference.md +6 -0
  159. package/docs/reference/functions/setDistinct.md +6 -0
  160. package/docs/reference/functions/setIntersect.md +6 -0
  161. package/docs/reference/functions/setIsSubset.md +6 -0
  162. package/docs/reference/functions/setMultiplicity.md +6 -0
  163. package/docs/reference/functions/setPowerset.md +6 -0
  164. package/docs/reference/functions/setSize.md +6 -0
  165. package/docs/reference/functions/setSymDifference.md +6 -0
  166. package/docs/reference/functions/setUnion.md +6 -0
  167. package/docs/reference/functions/sign.md +6 -0
  168. package/docs/reference/functions/simplify.md +43 -6
  169. package/docs/reference/functions/simplifyCore.md +50 -0
  170. package/docs/reference/functions/sin.md +6 -0
  171. package/docs/reference/functions/sinh.md +6 -0
  172. package/docs/reference/functions/size.md +6 -0
  173. package/docs/reference/functions/slu.md +6 -0
  174. package/docs/reference/functions/smaller.md +6 -0
  175. package/docs/reference/functions/smallerEq.md +6 -0
  176. package/docs/reference/functions/sort.md +6 -0
  177. package/docs/reference/functions/sqrt.md +6 -0
  178. package/docs/reference/functions/sqrtm.md +6 -0
  179. package/docs/reference/functions/square.md +6 -0
  180. package/docs/reference/functions/squeeze.md +6 -0
  181. package/docs/reference/functions/std.md +6 -0
  182. package/docs/reference/functions/stirlingS2.md +6 -0
  183. package/docs/reference/functions/subset.md +6 -0
  184. package/docs/reference/functions/subtract.md +6 -0
  185. package/docs/reference/functions/sum.md +6 -0
  186. package/docs/reference/functions/tan.md +6 -0
  187. package/docs/reference/functions/tanh.md +6 -0
  188. package/docs/reference/functions/to.md +6 -0
  189. package/docs/reference/functions/trace.md +6 -0
  190. package/docs/reference/functions/transpose.md +6 -0
  191. package/docs/reference/functions/typeOf.md +6 -0
  192. package/docs/reference/functions/unaryMinus.md +6 -0
  193. package/docs/reference/functions/unaryPlus.md +6 -0
  194. package/docs/reference/functions/unequal.md +6 -0
  195. package/docs/reference/functions/usolve.md +6 -0
  196. package/docs/reference/functions/usolveAll.md +6 -0
  197. package/docs/reference/functions/variance.md +6 -0
  198. package/docs/reference/functions/xgcd.md +6 -0
  199. package/docs/reference/functions/xor.md +6 -0
  200. package/docs/reference/functions/zeros.md +6 -0
  201. package/docs/reference/functions.md +3 -0
  202. package/lib/browser/math.js +6 -6
  203. package/lib/browser/math.js.map +1 -1
  204. package/lib/cjs/core/create.js +4 -4
  205. package/lib/cjs/core/function/import.js +3 -3
  206. package/lib/cjs/core/function/typed.js +2 -2
  207. package/lib/cjs/defaultInstance.js +3 -3
  208. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  209. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  210. package/lib/cjs/entry/configReadonly.js +1 -1
  211. package/lib/cjs/entry/dependenciesAny/dependenciesLeafCount.generated.js +23 -0
  212. package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
  213. package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +32 -0
  214. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +6 -0
  215. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +65 -0
  216. package/lib/cjs/entry/dependenciesAny.generated.js +24 -0
  217. package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
  218. package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +32 -0
  219. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +6 -0
  220. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +65 -0
  221. package/lib/cjs/entry/dependenciesNumber.generated.js +16 -0
  222. package/lib/cjs/entry/impureFunctionsAny.generated.js +67 -29
  223. package/lib/cjs/entry/impureFunctionsNumber.generated.js +96 -64
  224. package/lib/cjs/entry/pureFunctionsAny.generated.js +53 -55
  225. package/lib/cjs/entry/pureFunctionsNumber.generated.js +46 -48
  226. package/lib/cjs/expression/Help.js +4 -0
  227. package/lib/cjs/expression/Parser.js +1 -1
  228. package/lib/cjs/expression/embeddedDocs/core/typed.js +1 -1
  229. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +14 -5
  230. package/lib/cjs/expression/embeddedDocs/function/algebra/leafCount.js +15 -0
  231. package/lib/cjs/expression/embeddedDocs/function/algebra/resolve.js +16 -0
  232. package/lib/cjs/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  233. package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +15 -0
  234. package/lib/cjs/expression/node/FunctionNode.js +7 -7
  235. package/lib/cjs/expression/node/IndexNode.js +1 -1
  236. package/lib/cjs/expression/node/Node.js +3 -3
  237. package/lib/cjs/expression/node/ObjectNode.js +1 -1
  238. package/lib/cjs/expression/node/utils/access.js +1 -1
  239. package/lib/cjs/expression/node/utils/assign.js +1 -1
  240. package/lib/cjs/expression/parse.js +13 -13
  241. package/lib/cjs/factoriesAny.js +24 -0
  242. package/lib/cjs/factoriesNumber.js +16 -0
  243. package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
  244. package/lib/cjs/function/algebra/leafCount.js +66 -0
  245. package/lib/cjs/function/algebra/rationalize.js +24 -41
  246. package/lib/cjs/function/algebra/resolve.js +106 -0
  247. package/lib/cjs/function/algebra/simplify/simplifyConstant.js +5 -5
  248. package/lib/cjs/function/algebra/simplify/util.js +171 -33
  249. package/lib/cjs/function/algebra/simplify.js +554 -207
  250. package/lib/cjs/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +67 -43
  251. package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
  252. package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
  253. package/lib/cjs/function/arithmetic/ceil.js +3 -3
  254. package/lib/cjs/function/arithmetic/floor.js +3 -3
  255. package/lib/cjs/function/arithmetic/invmod.js +1 -1
  256. package/lib/cjs/function/arithmetic/norm.js +1 -1
  257. package/lib/cjs/function/arithmetic/round.js +1 -1
  258. package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
  259. package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
  260. package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
  261. package/lib/cjs/function/probability/util/seededRNG.js +2 -2
  262. package/lib/cjs/function/relational/compareNatural.js +6 -6
  263. package/lib/cjs/header.js +2 -2
  264. package/lib/cjs/plain/bignumber/index.js +1 -1
  265. package/lib/cjs/plain/number/combinations.js +18 -6
  266. package/lib/cjs/type/bignumber/BigNumber.js +2 -2
  267. package/lib/cjs/type/bignumber/function/bignumber.js +1 -1
  268. package/lib/cjs/type/boolean.js +2 -2
  269. package/lib/cjs/type/complex/Complex.js +14 -14
  270. package/lib/cjs/type/complex/function/complex.js +1 -1
  271. package/lib/cjs/type/fraction/Fraction.js +6 -6
  272. package/lib/cjs/type/fraction/function/fraction.js +1 -1
  273. package/lib/cjs/type/matrix/DenseMatrix.js +5 -5
  274. package/lib/cjs/type/matrix/SparseMatrix.js +2 -2
  275. package/lib/cjs/type/number.js +1 -1
  276. package/lib/cjs/type/string.js +2 -2
  277. package/lib/cjs/type/unit/Unit.js +8 -8
  278. package/lib/cjs/utils/customs.js +2 -2
  279. package/lib/cjs/utils/emitter.js +1 -1
  280. package/lib/cjs/utils/function.js +2 -2
  281. package/lib/cjs/utils/is.js +6 -6
  282. package/lib/cjs/utils/latex.js +3 -3
  283. package/lib/cjs/utils/lruQueue.js +1 -1
  284. package/lib/cjs/utils/map.js +3 -3
  285. package/lib/cjs/utils/object.js +2 -2
  286. package/lib/cjs/utils/snapshot.js +7 -7
  287. package/lib/cjs/utils/string.js +2 -2
  288. package/lib/cjs/version.js +1 -1
  289. package/lib/esm/entry/dependenciesAny/dependenciesLeafCount.generated.js +12 -0
  290. package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
  291. package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +18 -0
  292. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +4 -0
  293. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +40 -0
  294. package/lib/esm/entry/dependenciesAny.generated.js +3 -0
  295. package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
  296. package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +18 -0
  297. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +4 -0
  298. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +40 -0
  299. package/lib/esm/entry/dependenciesNumber.generated.js +2 -0
  300. package/lib/esm/entry/impureFunctionsAny.generated.js +57 -22
  301. package/lib/esm/entry/impureFunctionsNumber.generated.js +83 -53
  302. package/lib/esm/entry/pureFunctionsAny.generated.js +42 -42
  303. package/lib/esm/entry/pureFunctionsNumber.generated.js +32 -32
  304. package/lib/esm/expression/Help.js +4 -0
  305. package/lib/esm/expression/embeddedDocs/core/typed.js +1 -1
  306. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +6 -0
  307. package/lib/esm/expression/embeddedDocs/function/algebra/leafCount.js +8 -0
  308. package/lib/esm/expression/embeddedDocs/function/algebra/resolve.js +9 -0
  309. package/lib/esm/expression/embeddedDocs/function/algebra/simplify.js +1 -1
  310. package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +8 -0
  311. package/lib/esm/factoriesAny.js +3 -0
  312. package/lib/esm/factoriesNumber.js +2 -0
  313. package/lib/esm/function/algebra/leafCount.js +59 -0
  314. package/lib/esm/function/algebra/rationalize.js +24 -40
  315. package/lib/esm/function/algebra/resolve.js +95 -0
  316. package/lib/esm/function/algebra/simplify/simplifyConstant.js +3 -3
  317. package/lib/esm/function/algebra/simplify/util.js +170 -34
  318. package/lib/esm/function/algebra/simplify.js +549 -202
  319. package/lib/esm/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +60 -44
  320. package/lib/esm/plain/number/combinations.js +18 -6
  321. package/lib/esm/version.js +1 -1
  322. package/package.json +15 -10
  323. package/types/index.d.ts +44 -2
  324. package/lib/cjs/function/algebra/simplify/resolve.js +0 -76
  325. package/lib/esm/function/algebra/simplify/resolve.js +0 -67
@@ -152,7 +152,7 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
152
152
  var values = evalArgs.map(function (evalArg) {
153
153
  return evalArg(scope, args, context);
154
154
  });
155
- return fn.apply(void 0, (0, _toConsumableArray2["default"])(values));
155
+ return fn.apply(void 0, (0, _toConsumableArray2.default)(values));
156
156
  };
157
157
  }
158
158
  }
@@ -270,7 +270,7 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
270
270
  var customString;
271
271
  var name = this.fn.toString(options);
272
272
 
273
- if (options && (0, _typeof2["default"])(options.handler) === 'object' && (0, _object.hasOwnProperty)(options.handler, name)) {
273
+ if (options && (0, _typeof2.default)(options.handler) === 'object' && (0, _object.hasOwnProperty)(options.handler, name)) {
274
274
  // callback is a map of callback functions
275
275
  customString = options.handler[name](this, options);
276
276
  }
@@ -376,7 +376,7 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
376
376
 
377
377
  if (match[2] === undefined) {
378
378
  // no square brackets
379
- switch ((0, _typeof2["default"])(property)) {
379
+ switch ((0, _typeof2.default)(property)) {
380
380
  case 'string':
381
381
  latex += property;
382
382
  break;
@@ -436,7 +436,7 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
436
436
  FunctionNode.prototype.toTex = function (options) {
437
437
  var customTex;
438
438
 
439
- if (options && (0, _typeof2["default"])(options.handler) === 'object' && (0, _object.hasOwnProperty)(options.handler, this.name)) {
439
+ if (options && (0, _typeof2.default)(options.handler) === 'object' && (0, _object.hasOwnProperty)(options.handler, this.name)) {
440
440
  // callback is a map of callback functions
441
441
  customTex = options.handler[this.name](this, options);
442
442
  }
@@ -467,14 +467,14 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
467
467
  } // toTex property on the function itself
468
468
 
469
469
 
470
- if (math[this.name] && (typeof math[this.name].toTex === 'function' || (0, _typeof2["default"])(math[this.name].toTex) === 'object' || typeof math[this.name].toTex === 'string')) {
470
+ if (math[this.name] && (typeof math[this.name].toTex === 'function' || (0, _typeof2.default)(math[this.name].toTex) === 'object' || typeof math[this.name].toTex === 'string')) {
471
471
  // .toTex is a callback function
472
472
  latexConverter = math[this.name].toTex;
473
473
  }
474
474
 
475
475
  var customToTex;
476
476
 
477
- switch ((0, _typeof2["default"])(latexConverter)) {
477
+ switch ((0, _typeof2.default)(latexConverter)) {
478
478
  case 'function':
479
479
  // a callback function
480
480
  customToTex = latexConverter(this, options);
@@ -487,7 +487,7 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
487
487
 
488
488
  case 'object':
489
489
  // an object with different "converters" for different numbers of arguments
490
- switch ((0, _typeof2["default"])(latexConverter[args.length])) {
490
+ switch ((0, _typeof2.default)(latexConverter[args.length])) {
491
491
  case 'function':
492
492
  customToTex = latexConverter[args.length](this, options);
493
493
  break;
@@ -143,7 +143,7 @@ var createIndexNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
143
143
  var dimensions = (0, _array.map)(evalDimensions, function (evalDimension) {
144
144
  return evalDimension(scope, args, context);
145
145
  });
146
- return index.apply(void 0, (0, _toConsumableArray2["default"])(dimensions));
146
+ return index.apply(void 0, (0, _toConsumableArray2.default)(dimensions));
147
147
  };
148
148
  };
149
149
  /**
@@ -367,8 +367,8 @@ var createNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
367
367
 
368
368
 
369
369
  Node.prototype._getCustomString = function (options) {
370
- if (options && (0, _typeof2["default"])(options) === 'object') {
371
- switch ((0, _typeof2["default"])(options.handler)) {
370
+ if (options && (0, _typeof2.default)(options) === 'object') {
371
+ switch ((0, _typeof2.default)(options.handler)) {
372
372
  case 'object':
373
373
  case 'undefined':
374
374
  return;
@@ -407,7 +407,7 @@ var createNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
407
407
 
408
408
 
409
409
  function _validateScope(scope) {
410
- for (var _i = 0, _arr = (0, _toConsumableArray2["default"])(_keywords.keywords); _i < _arr.length; _i++) {
410
+ for (var _i = 0, _arr = (0, _toConsumableArray2.default)(_keywords.keywords); _i < _arr.length; _i++) {
411
411
  var symbol = _arr[_i];
412
412
 
413
413
  if (scope.has(symbol)) {
@@ -38,7 +38,7 @@ var createObjectNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
38
38
  this.properties = properties || {}; // validate input
39
39
 
40
40
  if (properties) {
41
- if (!((0, _typeof2["default"])(properties) === 'object') || !Object.keys(properties).every(function (key) {
41
+ if (!((0, _typeof2.default)(properties) === 'object') || !Object.keys(properties).every(function (key) {
42
42
  return (0, _is.isNode)(properties[key]);
43
43
  })) {
44
44
  throw new TypeError('Object containing Nodes expected');
@@ -37,7 +37,7 @@ function accessFactory(_ref) {
37
37
  } else if (typeof object === 'string') {
38
38
  // TODO: move getStringSubset into a separate util file, use that
39
39
  return subset(object, index);
40
- } else if ((0, _typeof2["default"])(object) === 'object') {
40
+ } else if ((0, _typeof2.default)(object) === 'object') {
41
41
  if (!index.isObjectProperty()) {
42
42
  throw new TypeError('Cannot apply a numeric index as object property');
43
43
  }
@@ -42,7 +42,7 @@ function assignFactory(_ref) {
42
42
  } else if (typeof object === 'string') {
43
43
  // TODO: move setStringSubset into a separate util file, use that
44
44
  return subset(object, index, value);
45
- } else if ((0, _typeof2["default"])(object) === 'object') {
45
+ } else if ((0, _typeof2.default)(object) === 'object') {
46
46
  if (!index.isObjectProperty()) {
47
47
  throw TypeError('Cannot apply a numeric index as object property');
48
48
  }
@@ -153,16 +153,16 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
153
153
  var NAMED_DELIMITERS = {
154
154
  mod: true,
155
155
  to: true,
156
- "in": true,
156
+ in: true,
157
157
  and: true,
158
158
  xor: true,
159
159
  or: true,
160
160
  not: true
161
161
  };
162
162
  var CONSTANTS = {
163
- "true": true,
164
- "false": false,
165
- "null": null,
163
+ true: true,
164
+ false: false,
165
+ null: null,
166
166
  undefined: undefined
167
167
  };
168
168
  var NUMERIC_CONSTANTS = ['NaN', 'Infinity'];
@@ -584,7 +584,7 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
584
584
 
585
585
  function parseStart(expression, extraNodes) {
586
586
  var state = initialState();
587
- (0, _extends2["default"])(state, {
587
+ (0, _extends2.default)(state, {
588
588
  expression: expression,
589
589
  extraNodes: extraNodes
590
590
  });
@@ -930,7 +930,7 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
930
930
  node = parseRange(state);
931
931
  var operators = {
932
932
  to: 'to',
933
- "in": 'to' // alias of 'to'
933
+ in: 'to' // alias of 'to'
934
934
 
935
935
  };
936
936
 
@@ -1112,30 +1112,30 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
1112
1112
  // Match the "number /" part of the pattern "number / number symbol"
1113
1113
  if (state.token === '/' && (0, _is.isConstantNode)(last)) {
1114
1114
  // Look ahead to see if the next token is a number
1115
- tokenStates.push((0, _extends2["default"])({}, state));
1115
+ tokenStates.push((0, _extends2.default)({}, state));
1116
1116
  getTokenSkipNewline(state); // Match the "number / number" part of the pattern
1117
1117
 
1118
1118
  if (state.tokenType === TOKENTYPE.NUMBER) {
1119
1119
  // Look ahead again
1120
- tokenStates.push((0, _extends2["default"])({}, state));
1120
+ tokenStates.push((0, _extends2.default)({}, state));
1121
1121
  getTokenSkipNewline(state); // Match the "symbol" part of the pattern, or a left parenthesis
1122
1122
 
1123
1123
  if (state.tokenType === TOKENTYPE.SYMBOL || state.token === '(') {
1124
1124
  // We've matched the pattern "number / number symbol".
1125
1125
  // Rewind once and build the "number / number" node; the symbol will be consumed later
1126
- (0, _extends2["default"])(state, tokenStates.pop());
1126
+ (0, _extends2.default)(state, tokenStates.pop());
1127
1127
  tokenStates.pop();
1128
1128
  last = parsePercentage(state);
1129
1129
  node = new OperatorNode('/', 'divide', [node, last]);
1130
1130
  } else {
1131
1131
  // Not a match, so rewind
1132
1132
  tokenStates.pop();
1133
- (0, _extends2["default"])(state, tokenStates.pop());
1133
+ (0, _extends2.default)(state, tokenStates.pop());
1134
1134
  break;
1135
1135
  }
1136
1136
  } else {
1137
1137
  // Not a match, so rewind
1138
- (0, _extends2["default"])(state, tokenStates.pop());
1138
+ (0, _extends2.default)(state, tokenStates.pop());
1139
1139
  break;
1140
1140
  }
1141
1141
  } else {
@@ -1783,7 +1783,7 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
1783
1783
  function createSyntaxError(state, message) {
1784
1784
  var c = col(state);
1785
1785
  var error = new SyntaxError(message + ' (char ' + c + ')');
1786
- error["char"] = c;
1786
+ error.char = c;
1787
1787
  return error;
1788
1788
  }
1789
1789
  /**
@@ -1798,7 +1798,7 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
1798
1798
  function createError(state, message) {
1799
1799
  var c = col(state);
1800
1800
  var error = new SyntaxError(message + ' (char ' + c + ')');
1801
- error["char"] = c;
1801
+ error.char = c;
1802
1802
  return error;
1803
1803
  }
1804
1804
 
@@ -987,6 +987,12 @@ Object.defineProperty(exports, "createLcm", {
987
987
  return _lcm.createLcm;
988
988
  }
989
989
  });
990
+ Object.defineProperty(exports, "createLeafCount", {
991
+ enumerable: true,
992
+ get: function get() {
993
+ return _leafCount.createLeafCount;
994
+ }
995
+ });
990
996
  Object.defineProperty(exports, "createLeftShift", {
991
997
  enumerable: true,
992
998
  get: function get() {
@@ -1509,6 +1515,12 @@ Object.defineProperty(exports, "createResize", {
1509
1515
  return _resize.createResize;
1510
1516
  }
1511
1517
  });
1518
+ Object.defineProperty(exports, "createResolve", {
1519
+ enumerable: true,
1520
+ get: function get() {
1521
+ return _resolve.createResolve;
1522
+ }
1523
+ });
1512
1524
  Object.defineProperty(exports, "createResultSet", {
1513
1525
  enumerable: true,
1514
1526
  get: function get() {
@@ -1677,6 +1689,12 @@ Object.defineProperty(exports, "createSimplify", {
1677
1689
  return _simplify.createSimplify;
1678
1690
  }
1679
1691
  });
1692
+ Object.defineProperty(exports, "createSimplifyCore", {
1693
+ enumerable: true,
1694
+ get: function get() {
1695
+ return _simplifyCore.createSimplifyCore;
1696
+ }
1697
+ });
1680
1698
  Object.defineProperty(exports, "createSin", {
1681
1699
  enumerable: true,
1682
1700
  get: function get() {
@@ -2494,8 +2512,14 @@ var _catalan = require("./function/combinatorics/catalan.js");
2494
2512
 
2495
2513
  var _composition = require("./function/combinatorics/composition.js");
2496
2514
 
2515
+ var _leafCount = require("./function/algebra/leafCount.js");
2516
+
2497
2517
  var _simplify = require("./function/algebra/simplify.js");
2498
2518
 
2519
+ var _simplifyCore = require("./function/algebra/simplifyCore.js");
2520
+
2521
+ var _resolve = require("./function/algebra/resolve.js");
2522
+
2499
2523
  var _derivative = require("./function/algebra/derivative.js");
2500
2524
 
2501
2525
  var _rationalize = require("./function/algebra/rationalize.js");
@@ -579,6 +579,12 @@ Object.defineProperty(exports, "createReplacer", {
579
579
  return _replacer.createReplacer;
580
580
  }
581
581
  });
582
+ Object.defineProperty(exports, "createResolve", {
583
+ enumerable: true,
584
+ get: function get() {
585
+ return _resolve.createResolve;
586
+ }
587
+ });
582
588
  Object.defineProperty(exports, "createResultSet", {
583
589
  enumerable: true,
584
590
  get: function get() {
@@ -617,6 +623,12 @@ Object.defineProperty(exports, "createSimplify", {
617
623
  return _simplify.createSimplify;
618
624
  }
619
625
  });
626
+ Object.defineProperty(exports, "createSimplifyCore", {
627
+ enumerable: true,
628
+ get: function get() {
629
+ return _simplifyCore.createSimplifyCore;
630
+ }
631
+ });
620
632
  exports.createSinh = exports.createSin = void 0;
621
633
  Object.defineProperty(exports, "createSize", {
622
634
  enumerable: true,
@@ -764,8 +776,12 @@ var _help = require("./expression/function/help.js");
764
776
 
765
777
  var _chain = require("./type/chain/function/chain.js");
766
778
 
779
+ var _resolve = require("./function/algebra/resolve.js");
780
+
767
781
  var _simplify = require("./function/algebra/simplify.js");
768
782
 
783
+ var _simplifyCore = require("./function/algebra/simplifyCore.js");
784
+
769
785
  var _derivative = require("./function/algebra/derivative.js");
770
786
 
771
787
  var _rationalize = require("./function/algebra/rationalize.js");
@@ -73,7 +73,7 @@ var createQr = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function
73
73
  * @return {{Q: Array | Matrix, R: Array | Matrix}} Q: the orthogonal
74
74
  * matrix and R: the upper triangular matrix
75
75
  */
76
- return (0, _extends2["default"])(typed(name, {
76
+ return (0, _extends2.default)(typed(name, {
77
77
  DenseMatrix: function DenseMatrix(m) {
78
78
  return _denseQR(m);
79
79
  },
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createLeafCount = void 0;
7
+
8
+ var _factory = require("../../utils/factory.js");
9
+
10
+ var name = 'leafCount';
11
+ var dependencies = ['parse', 'typed'];
12
+ var createLeafCount = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
13
+ var parse = _ref.parse,
14
+ typed = _ref.typed;
15
+
16
+ // This does the real work, but we don't have to recurse through
17
+ // a typed call if we separate it out
18
+ function countLeaves(node) {
19
+ var count = 0;
20
+ node.forEach(function (n) {
21
+ count += countLeaves(n);
22
+ });
23
+ return count || 1;
24
+ }
25
+ /**
26
+ * Gives the number of "leaf nodes" in the parse tree of the given expression
27
+ * A leaf node is one that has no subexpressions, essentially either a
28
+ * symbol or a constant. Note that `5!` has just one leaf, the '5'; the
29
+ * unary factorial operator does not add a leaf. On the other hand,
30
+ * function symbols do add leaves, so `sin(x)/cos(x)` has four leaves.
31
+ *
32
+ * The `simplify()` function should generally not increase the `leafCount()`
33
+ * of an expression, although currently there is no guarantee that it never
34
+ * does so. In many cases, `simplify()` reduces the leaf count.
35
+ *
36
+ * Syntax:
37
+ *
38
+ * leafCount(expr)
39
+ *
40
+ * Examples:
41
+ *
42
+ * math.leafCount('x') // 1
43
+ * math.leafCount(math.parse('a*d-b*c')) // 4
44
+ * math.leafCount('[a,b;c,d][0,1]') // 6
45
+ *
46
+ * See also:
47
+ *
48
+ * simplify
49
+ *
50
+ * @param {Node|string} expr The expression to count the leaves of
51
+ *
52
+ * @return {number} The number of leaves of `expr`
53
+ *
54
+ */
55
+
56
+
57
+ return typed(name, {
58
+ string: function string(expr) {
59
+ return this(parse(expr));
60
+ },
61
+ Node: function Node(expr) {
62
+ return countLeaves(expr);
63
+ }
64
+ });
65
+ });
66
+ exports.createLeafCount = createLeafCount;
@@ -11,10 +11,8 @@ var _factory = require("../../utils/factory.js");
11
11
 
12
12
  var _simplifyConstant = require("./simplify/simplifyConstant.js");
13
13
 
14
- var _simplifyCore = require("./simplify/simplifyCore.js");
15
-
16
14
  var name = 'rationalize';
17
- var dependencies = ['config', 'typed', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'parse', 'simplify', '?bignumber', '?fraction', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode', 'ParenthesisNode'];
15
+ var dependencies = ['config', 'typed', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'parse', 'simplifyCore', 'simplify', '?bignumber', '?fraction', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode', 'ParenthesisNode'];
18
16
  var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
19
17
  var config = _ref.config,
20
18
  typed = _ref.typed,
@@ -26,6 +24,7 @@ var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
26
24
  divide = _ref.divide,
27
25
  pow = _ref.pow,
28
26
  parse = _ref.parse,
27
+ simplifyCore = _ref.simplifyCore,
29
28
  simplify = _ref.simplify,
30
29
  fraction = _ref.fraction,
31
30
  bignumber = _ref.bignumber,
@@ -56,23 +55,6 @@ var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
56
55
  OperatorNode: OperatorNode,
57
56
  SymbolNode: SymbolNode
58
57
  });
59
- var simplifyCore = (0, _simplifyCore.createSimplifyCore)({
60
- equal: equal,
61
- isZero: isZero,
62
- add: add,
63
- subtract: subtract,
64
- multiply: multiply,
65
- divide: divide,
66
- pow: pow,
67
- AccessorNode: AccessorNode,
68
- ArrayNode: ArrayNode,
69
- ConstantNode: ConstantNode,
70
- FunctionNode: FunctionNode,
71
- IndexNode: IndexNode,
72
- ObjectNode: ObjectNode,
73
- OperatorNode: OperatorNode,
74
- ParenthesisNode: ParenthesisNode
75
- });
76
58
  /**
77
59
  * Transform a rationalizable expression in a rational fraction.
78
60
  * If rational fraction is one variable polynomial then converts
@@ -116,13 +98,13 @@ var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
116
98
  * @param {Object|boolean} optional scope of expression or true for already evaluated rational expression at input
117
99
  * @param {Boolean} detailed optional True if return an object, false if return expression node (default)
118
100
  *
119
- * @return {Object | Node} The rational polynomial of `expr` or na object
120
- * {Object}
121
- * {Expression Node} expression: node simplified expression
122
- * {Expression Node} numerator: simplified numerator of expression
123
- * {Expression Node | boolean} denominator: simplified denominator or false (if there is no denominator)
124
- * {Array} variables: variable names
125
- * {Array} coefficients: coefficients of numerator sorted by increased exponent
101
+ * @return {Object | Node} The rational polynomial of `expr` or an object
102
+ * `{expression, numerator, denominator, variables, coefficients}`, where
103
+ * `expression` is a `Node` with the node simplified expression,
104
+ * `numerator` is a `Node` with the simplified numerator of expression,
105
+ * `denominator` is a `Node` or `boolean` with the simplified denominator or `false` (if there is no denominator),
106
+ * `variables` is an array with variable names,
107
+ * and `coefficients` is an array with coefficients of numerator sorted by increased exponent
126
108
  * {Expression Node} node simplified expression
127
109
  *
128
110
  */
@@ -155,6 +137,12 @@ var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
155
137
  var polyRet = polynomial(expr, scope, true, setRules.firstRules); // Check if expression is a rationalizable polynomial
156
138
 
157
139
  var nVars = polyRet.variables.length;
140
+ var noExactFractions = {
141
+ exactFractions: false
142
+ };
143
+ var withExactFractions = {
144
+ exactFractions: true
145
+ };
158
146
  expr = polyRet.expression;
159
147
 
160
148
  if (nVars >= 1) {
@@ -165,18 +153,16 @@ var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
165
153
 
166
154
  var rules;
167
155
  var eDistrDiv = true;
168
- var redoInic = false;
169
- expr = simplify(expr, setRules.firstRules, {}, {
170
- exactFractions: false
171
- }); // Apply the initial rules, including succ div rules
156
+ var redoInic = false; // Apply the initial rules, including succ div rules:
172
157
 
158
+ expr = simplify(expr, setRules.firstRules, {}, noExactFractions);
173
159
  var s;
174
160
 
175
161
  while (true) {
176
- // Apply alternately successive division rules and distr.div.rules
162
+ // Alternate applying successive division rules and distr.div.rules
163
+ // until there are no more changes:
177
164
  rules = eDistrDiv ? setRules.distrDivRules : setRules.sucDivRules;
178
- expr = simplify(expr, rules); // until no more changes
179
-
165
+ expr = simplify(expr, rules, {}, withExactFractions);
180
166
  eDistrDiv = !eDistrDiv; // Swap between Distr.Div and Succ. Div. Rules
181
167
 
182
168
  s = expr.toString();
@@ -191,14 +177,11 @@ var createRationalize = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
191
177
 
192
178
  if (redoInic) {
193
179
  // Apply first rules again without succ div rules (if there are changes)
194
- expr = simplify(expr, setRules.firstRulesAgain, {}, {
195
- exactFractions: false
196
- });
197
- }
180
+ expr = simplify(expr, setRules.firstRulesAgain, {}, noExactFractions);
181
+ } // Apply final rules:
182
+
198
183
 
199
- expr = simplify(expr, setRules.finalRules, {}, {
200
- exactFractions: false
201
- }); // Apply final rules
184
+ expr = simplify(expr, setRules.finalRules, {}, noExactFractions);
202
185
  } // NVars >= 1
203
186
 
204
187
 
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createResolve = void 0;
7
+
8
+ var _map = require("../../utils/map.js");
9
+
10
+ var _is = require("../../utils/is.js");
11
+
12
+ var _factory = require("../../utils/factory.js");
13
+
14
+ var name = 'resolve';
15
+ var dependencies = ['parse', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];
16
+ var createResolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
+ var parse = _ref.parse,
18
+ ConstantNode = _ref.ConstantNode,
19
+ FunctionNode = _ref.FunctionNode,
20
+ OperatorNode = _ref.OperatorNode,
21
+ ParenthesisNode = _ref.ParenthesisNode;
22
+
23
+ /**
24
+ * resolve(expr, scope) replaces variable nodes with their scoped values
25
+ *
26
+ * Syntax:
27
+ *
28
+ * resolve(expr, scope)
29
+ *
30
+ * Examples:
31
+ *
32
+ * math.resolve('x + y', {x:1, y:2}) // Node {1 + 2}
33
+ * math.resolve(math.parse('x+y'), {x:1, y:2}) // Node {1 + 2}
34
+ * math.simplify('x+y', {x:2, y:'x+x'}).toString() // "6"
35
+ *
36
+ * See also:
37
+ *
38
+ * simplify, evaluate
39
+ *
40
+ * @param {Node} node
41
+ * The expression tree to be simplified
42
+ * @param {Object} scope
43
+ * Scope specifying variables to be resolved
44
+ * @return {Node} Returns `node` with variables recursively substituted.
45
+ * @throws {ReferenceError}
46
+ * If there is a cyclic dependency among the variables in `scope`,
47
+ * resolution is impossible and a ReferenceError is thrown.
48
+ */
49
+ function resolve(node, scope) {
50
+ var within = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Set();
51
+
52
+ // note `within`:
53
+ // `within` is not documented, since it is for internal cycle
54
+ // detection only
55
+ if (!scope) {
56
+ return node;
57
+ }
58
+
59
+ if (!(0, _map.isMap)(scope)) {
60
+ scope = (0, _map.createMap)(scope);
61
+ }
62
+
63
+ if ((0, _is.isSymbolNode)(node)) {
64
+ if (within.has(node.name)) {
65
+ var variables = Array.from(within).join(', ');
66
+ throw new ReferenceError("recursive loop of variable definitions among {".concat(variables, "}"));
67
+ }
68
+
69
+ var value = scope.get(node.name);
70
+
71
+ if ((0, _is.isNode)(value)) {
72
+ var nextWithin = new Set(within);
73
+ nextWithin.add(node.name);
74
+ return resolve(value, scope, nextWithin);
75
+ } else if (typeof value === 'number') {
76
+ return parse(String(value));
77
+ } else if (value !== undefined) {
78
+ return new ConstantNode(value);
79
+ } else {
80
+ return node;
81
+ }
82
+ } else if ((0, _is.isOperatorNode)(node)) {
83
+ var args = node.args.map(function (arg) {
84
+ return resolve(arg, scope, within);
85
+ });
86
+ return new OperatorNode(node.op, node.fn, args, node.implicit);
87
+ } else if ((0, _is.isParenthesisNode)(node)) {
88
+ return new ParenthesisNode(resolve(node.content, scope, within));
89
+ } else if ((0, _is.isFunctionNode)(node)) {
90
+ var _args = node.args.map(function (arg) {
91
+ return resolve(arg, scope, within);
92
+ });
93
+
94
+ return new FunctionNode(node.name, _args);
95
+ } // Otherwise just recursively resolve any children (might also work
96
+ // for some of the above special cases)
97
+
98
+
99
+ return node.map(function (child) {
100
+ return resolve(child, scope, within);
101
+ });
102
+ }
103
+
104
+ return resolve;
105
+ });
106
+ exports.createResolve = createResolve;
@@ -17,7 +17,7 @@ var _util = require("./util.js");
17
17
 
18
18
  var _noop = require("../../../utils/noop.js");
19
19
 
20
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
20
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
21
21
 
22
22
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
23
23
 
@@ -348,7 +348,7 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
348
348
  return node;
349
349
 
350
350
  case 'ConstantNode':
351
- switch ((0, _typeof2["default"])(node.value)) {
351
+ switch ((0, _typeof2.default)(node.value)) {
352
352
  case 'number':
353
353
  return _toNumber(node.value, options);
354
354
 
@@ -419,13 +419,13 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
419
419
  } else {
420
420
  res = makeNode(_args);
421
421
  }
422
- } else if (isAssociative(node)) {
423
- _args = allChildren(node);
422
+ } else if (isAssociative(node, options.context)) {
423
+ _args = allChildren(node, options.context);
424
424
  _args = _args.map(function (arg) {
425
425
  return foldFraction(arg, options);
426
426
  });
427
427
 
428
- if (isCommutative(fn)) {
428
+ if (isCommutative(fn, options.context)) {
429
429
  // commutative binary operator
430
430
  var consts = [];
431
431
  var vars = [];