mathjs 10.0.2 → 10.2.0
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +37 -0
- package/NOTICE +1 -1
- package/README.md +10 -2
- package/bin/cli.js +1 -1
- package/docs/expressions/algebra.md +27 -0
- package/docs/expressions/syntax.md +1 -1
- package/docs/reference/functions/abs.md +6 -0
- package/docs/reference/functions/acos.md +6 -0
- package/docs/reference/functions/acosh.md +6 -0
- package/docs/reference/functions/acot.md +6 -0
- package/docs/reference/functions/acoth.md +6 -0
- package/docs/reference/functions/acsc.md +6 -0
- package/docs/reference/functions/acsch.md +6 -0
- package/docs/reference/functions/add.md +6 -0
- package/docs/reference/functions/and.md +6 -0
- package/docs/reference/functions/apply.md +6 -0
- package/docs/reference/functions/arg.md +6 -0
- package/docs/reference/functions/asec.md +6 -0
- package/docs/reference/functions/asech.md +6 -0
- package/docs/reference/functions/asin.md +6 -0
- package/docs/reference/functions/asinh.md +6 -0
- package/docs/reference/functions/atan.md +6 -0
- package/docs/reference/functions/atan2.md +6 -0
- package/docs/reference/functions/atanh.md +6 -0
- package/docs/reference/functions/bellNumbers.md +6 -0
- package/docs/reference/functions/bin.md +6 -0
- package/docs/reference/functions/bitAnd.md +6 -0
- package/docs/reference/functions/bitNot.md +6 -0
- package/docs/reference/functions/bitOr.md +6 -0
- package/docs/reference/functions/bitXor.md +6 -0
- package/docs/reference/functions/catalan.md +6 -0
- package/docs/reference/functions/cbrt.md +6 -0
- package/docs/reference/functions/ceil.md +6 -0
- package/docs/reference/functions/clone.md +6 -0
- package/docs/reference/functions/column.md +6 -0
- package/docs/reference/functions/combinations.md +6 -0
- package/docs/reference/functions/combinationsWithRep.md +6 -0
- package/docs/reference/functions/compare.md +6 -0
- package/docs/reference/functions/compareNatural.md +6 -0
- package/docs/reference/functions/compareText.md +6 -0
- package/docs/reference/functions/compile.md +6 -0
- package/docs/reference/functions/composition.md +6 -0
- package/docs/reference/functions/concat.md +6 -0
- package/docs/reference/functions/conj.md +6 -0
- package/docs/reference/functions/cos.md +6 -0
- package/docs/reference/functions/cosh.md +6 -0
- package/docs/reference/functions/cot.md +6 -0
- package/docs/reference/functions/coth.md +6 -0
- package/docs/reference/functions/count.md +6 -0
- package/docs/reference/functions/cross.md +6 -0
- package/docs/reference/functions/csc.md +6 -0
- package/docs/reference/functions/csch.md +6 -0
- package/docs/reference/functions/ctranspose.md +6 -0
- package/docs/reference/functions/cube.md +6 -0
- package/docs/reference/functions/deepEqual.md +6 -0
- package/docs/reference/functions/derivative.md +6 -0
- package/docs/reference/functions/det.md +6 -0
- package/docs/reference/functions/diag.md +6 -0
- package/docs/reference/functions/diff.md +6 -0
- package/docs/reference/functions/distance.md +6 -0
- package/docs/reference/functions/divide.md +6 -0
- package/docs/reference/functions/dot.md +6 -0
- package/docs/reference/functions/dotDivide.md +6 -0
- package/docs/reference/functions/dotMultiply.md +6 -0
- package/docs/reference/functions/dotPow.md +6 -0
- package/docs/reference/functions/eigs.md +6 -0
- package/docs/reference/functions/equal.md +6 -0
- package/docs/reference/functions/equalText.md +6 -0
- package/docs/reference/functions/erf.md +6 -0
- package/docs/reference/functions/evaluate.md +6 -0
- package/docs/reference/functions/exp.md +6 -0
- package/docs/reference/functions/expm.md +6 -0
- package/docs/reference/functions/expm1.md +6 -0
- package/docs/reference/functions/factorial.md +6 -0
- package/docs/reference/functions/filter.md +6 -0
- package/docs/reference/functions/fix.md +6 -0
- package/docs/reference/functions/flatten.md +6 -0
- package/docs/reference/functions/floor.md +6 -0
- package/docs/reference/functions/forEach.md +6 -0
- package/docs/reference/functions/format.md +6 -0
- package/docs/reference/functions/gamma.md +6 -0
- package/docs/reference/functions/gcd.md +6 -0
- package/docs/reference/functions/getMatrixDataType.md +6 -0
- package/docs/reference/functions/hasNumericValue.md +6 -0
- package/docs/reference/functions/help.md +6 -0
- package/docs/reference/functions/hex.md +6 -0
- package/docs/reference/functions/hypot.md +6 -0
- package/docs/reference/functions/identity.md +6 -0
- package/docs/reference/functions/im.md +6 -0
- package/docs/reference/functions/intersect.md +6 -0
- package/docs/reference/functions/inv.md +6 -0
- package/docs/reference/functions/invmod.md +47 -0
- package/docs/reference/functions/isInteger.md +6 -0
- package/docs/reference/functions/isNaN.md +6 -0
- package/docs/reference/functions/isNegative.md +6 -0
- package/docs/reference/functions/isNumeric.md +6 -0
- package/docs/reference/functions/isPositive.md +6 -0
- package/docs/reference/functions/isPrime.md +6 -0
- package/docs/reference/functions/isZero.md +6 -0
- package/docs/reference/functions/kldivergence.md +6 -0
- package/docs/reference/functions/kron.md +6 -0
- package/docs/reference/functions/larger.md +6 -0
- package/docs/reference/functions/largerEq.md +6 -0
- package/docs/reference/functions/lcm.md +6 -0
- package/docs/reference/functions/leafCount.md +52 -0
- package/docs/reference/functions/leftShift.md +6 -0
- package/docs/reference/functions/log.md +6 -0
- package/docs/reference/functions/log10.md +6 -0
- package/docs/reference/functions/log1p.md +6 -0
- package/docs/reference/functions/log2.md +6 -0
- package/docs/reference/functions/lsolve.md +6 -0
- package/docs/reference/functions/lsolveAll.md +6 -0
- package/docs/reference/functions/lup.md +6 -0
- package/docs/reference/functions/lusolve.md +6 -0
- package/docs/reference/functions/mad.md +6 -0
- package/docs/reference/functions/map.md +6 -0
- package/docs/reference/functions/matrixFromColumns.md +6 -0
- package/docs/reference/functions/matrixFromFunction.md +6 -0
- package/docs/reference/functions/matrixFromRows.md +6 -0
- package/docs/reference/functions/max.md +6 -0
- package/docs/reference/functions/mean.md +6 -0
- package/docs/reference/functions/median.md +6 -0
- package/docs/reference/functions/min.md +6 -0
- package/docs/reference/functions/mod.md +6 -0
- package/docs/reference/functions/mode.md +6 -0
- package/docs/reference/functions/multinomial.md +6 -0
- package/docs/reference/functions/multiply.md +6 -0
- package/docs/reference/functions/norm.md +6 -0
- package/docs/reference/functions/not.md +6 -0
- package/docs/reference/functions/nthRoot.md +6 -0
- package/docs/reference/functions/nthRoots.md +6 -0
- package/docs/reference/functions/numeric.md +6 -0
- package/docs/reference/functions/oct.md +6 -0
- package/docs/reference/functions/ones.md +6 -0
- package/docs/reference/functions/or.md +6 -0
- package/docs/reference/functions/parser.md +6 -0
- package/docs/reference/functions/partitionSelect.md +6 -0
- package/docs/reference/functions/permutations.md +6 -0
- package/docs/reference/functions/pickRandom.md +6 -0
- package/docs/reference/functions/pow.md +6 -0
- package/docs/reference/functions/print.md +6 -0
- package/docs/reference/functions/prod.md +6 -0
- package/docs/reference/functions/qr.md +6 -0
- package/docs/reference/functions/quantileSeq.md +6 -0
- package/docs/reference/functions/random.md +6 -0
- package/docs/reference/functions/randomInt.md +6 -0
- package/docs/reference/functions/range.md +6 -0
- package/docs/reference/functions/rationalize.md +7 -1
- package/docs/reference/functions/re.md +6 -0
- package/docs/reference/functions/reshape.md +7 -0
- package/docs/reference/functions/resize.md +6 -0
- package/docs/reference/functions/resolve.md +46 -0
- package/docs/reference/functions/rightArithShift.md +6 -0
- package/docs/reference/functions/rightLogShift.md +6 -0
- package/docs/reference/functions/rotate.md +6 -0
- package/docs/reference/functions/rotationMatrix.md +6 -0
- package/docs/reference/functions/round.md +6 -0
- package/docs/reference/functions/row.md +6 -0
- package/docs/reference/functions/sec.md +6 -0
- package/docs/reference/functions/sech.md +6 -0
- package/docs/reference/functions/setCartesian.md +6 -0
- package/docs/reference/functions/setDifference.md +6 -0
- package/docs/reference/functions/setDistinct.md +6 -0
- package/docs/reference/functions/setIntersect.md +6 -0
- package/docs/reference/functions/setIsSubset.md +6 -0
- package/docs/reference/functions/setMultiplicity.md +6 -0
- package/docs/reference/functions/setPowerset.md +6 -0
- package/docs/reference/functions/setSize.md +6 -0
- package/docs/reference/functions/setSymDifference.md +6 -0
- package/docs/reference/functions/setUnion.md +6 -0
- package/docs/reference/functions/sign.md +6 -0
- package/docs/reference/functions/simplify.md +47 -7
- package/docs/reference/functions/simplifyCore.md +50 -0
- package/docs/reference/functions/sin.md +6 -0
- package/docs/reference/functions/sinh.md +6 -0
- package/docs/reference/functions/size.md +6 -0
- package/docs/reference/functions/slu.md +6 -0
- package/docs/reference/functions/smaller.md +6 -0
- package/docs/reference/functions/smallerEq.md +6 -0
- package/docs/reference/functions/sort.md +6 -0
- package/docs/reference/functions/sqrt.md +6 -0
- package/docs/reference/functions/sqrtm.md +6 -0
- package/docs/reference/functions/square.md +6 -0
- package/docs/reference/functions/squeeze.md +6 -0
- package/docs/reference/functions/std.md +6 -0
- package/docs/reference/functions/stirlingS2.md +6 -0
- package/docs/reference/functions/subset.md +6 -0
- package/docs/reference/functions/subtract.md +6 -0
- package/docs/reference/functions/sum.md +6 -0
- package/docs/reference/functions/tan.md +6 -0
- package/docs/reference/functions/tanh.md +6 -0
- package/docs/reference/functions/to.md +6 -0
- package/docs/reference/functions/trace.md +6 -0
- package/docs/reference/functions/transpose.md +6 -0
- package/docs/reference/functions/typeOf.md +6 -0
- package/docs/reference/functions/unaryMinus.md +6 -0
- package/docs/reference/functions/unaryPlus.md +6 -0
- package/docs/reference/functions/unequal.md +6 -0
- package/docs/reference/functions/usolve.md +6 -0
- package/docs/reference/functions/usolveAll.md +6 -0
- package/docs/reference/functions/variance.md +6 -0
- package/docs/reference/functions/xgcd.md +6 -0
- package/docs/reference/functions/xor.md +6 -0
- package/docs/reference/functions/zeros.md +6 -0
- package/docs/reference/functions.md +4 -0
- package/lib/browser/math.js +7 -7
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/core/create.js +4 -4
- package/lib/cjs/core/function/import.js +3 -3
- package/lib/cjs/core/function/typed.js +2 -2
- package/lib/cjs/defaultInstance.js +3 -3
- package/lib/cjs/entry/allFactoriesAny.js +1 -1
- package/lib/cjs/entry/allFactoriesNumber.js +1 -1
- package/lib/cjs/entry/configReadonly.js +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesInvmod.generated.js +41 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesLeafCount.generated.js +23 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +18 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +32 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +21 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +65 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +32 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +18 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +32 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +21 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +65 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +16 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +78 -29
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +102 -60
- package/lib/cjs/entry/pureFunctionsAny.generated.js +65 -55
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +46 -48
- package/lib/cjs/expression/Help.js +4 -0
- package/lib/cjs/expression/Parser.js +1 -1
- package/lib/cjs/expression/embeddedDocs/core/typed.js +1 -1
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +20 -6
- package/lib/cjs/expression/embeddedDocs/function/algebra/leafCount.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/algebra/resolve.js +16 -0
- package/lib/cjs/expression/embeddedDocs/function/algebra/simplify.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/arithmetic/invmod.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/matrix/forEach.js +1 -1
- package/lib/cjs/expression/node/FunctionNode.js +7 -7
- package/lib/cjs/expression/node/IndexNode.js +1 -1
- package/lib/cjs/expression/node/Node.js +3 -3
- package/lib/cjs/expression/node/ObjectNode.js +1 -1
- package/lib/cjs/expression/node/utils/access.js +1 -1
- package/lib/cjs/expression/node/utils/assign.js +1 -1
- package/lib/cjs/expression/parse.js +13 -13
- package/lib/cjs/factoriesAny.js +32 -0
- package/lib/cjs/factoriesNumber.js +16 -0
- package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
- package/lib/cjs/function/algebra/leafCount.js +66 -0
- package/lib/cjs/function/algebra/rationalize.js +36 -39
- package/lib/cjs/function/algebra/resolve.js +106 -0
- package/lib/cjs/function/algebra/simplify/simplifyConstant.js +226 -32
- package/lib/cjs/function/algebra/simplify/util.js +171 -33
- package/lib/cjs/function/algebra/simplify.js +608 -191
- package/lib/cjs/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +83 -31
- package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
- package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
- package/lib/cjs/function/arithmetic/ceil.js +3 -3
- package/lib/cjs/function/arithmetic/floor.js +3 -3
- package/lib/cjs/function/arithmetic/invmod.js +73 -0
- package/lib/cjs/function/arithmetic/norm.js +1 -1
- package/lib/cjs/function/arithmetic/round.js +1 -1
- package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
- package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
- package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
- package/lib/cjs/function/probability/util/seededRNG.js +2 -2
- package/lib/cjs/function/relational/compareNatural.js +6 -6
- package/lib/cjs/header.js +3 -3
- package/lib/cjs/plain/bignumber/index.js +1 -1
- package/lib/cjs/plain/number/combinations.js +18 -6
- package/lib/cjs/type/bignumber/BigNumber.js +2 -2
- package/lib/cjs/type/bignumber/function/bignumber.js +1 -1
- package/lib/cjs/type/boolean.js +2 -2
- package/lib/cjs/type/complex/Complex.js +14 -14
- package/lib/cjs/type/complex/function/complex.js +1 -1
- package/lib/cjs/type/fraction/Fraction.js +6 -6
- package/lib/cjs/type/fraction/function/fraction.js +1 -1
- package/lib/cjs/type/matrix/DenseMatrix.js +5 -5
- package/lib/cjs/type/matrix/SparseMatrix.js +2 -2
- package/lib/cjs/type/number.js +1 -1
- package/lib/cjs/type/string.js +2 -2
- package/lib/cjs/type/unit/Unit.js +8 -8
- package/lib/cjs/utils/customs.js +2 -2
- package/lib/cjs/utils/emitter.js +1 -1
- package/lib/cjs/utils/function.js +2 -2
- package/lib/cjs/utils/is.js +6 -6
- package/lib/cjs/utils/latex.js +3 -3
- package/lib/cjs/utils/lruQueue.js +1 -1
- package/lib/cjs/utils/map.js +3 -3
- package/lib/cjs/utils/object.js +2 -2
- package/lib/cjs/utils/snapshot.js +7 -7
- package/lib/cjs/utils/string.js +2 -2
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesInvmod.generated.js +24 -0
- package/lib/esm/entry/dependenciesAny/dependenciesLeafCount.generated.js +12 -0
- package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +12 -0
- package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +18 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +14 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +40 -0
- package/lib/esm/entry/dependenciesAny.generated.js +4 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +12 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +18 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +14 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +40 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +2 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +68 -22
- package/lib/esm/entry/impureFunctionsNumber.generated.js +92 -52
- package/lib/esm/entry/pureFunctionsAny.generated.js +53 -42
- package/lib/esm/entry/pureFunctionsNumber.generated.js +32 -32
- package/lib/esm/expression/Help.js +4 -0
- package/lib/esm/expression/embeddedDocs/core/typed.js +1 -1
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +10 -1
- package/lib/esm/expression/embeddedDocs/function/algebra/leafCount.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/algebra/resolve.js +9 -0
- package/lib/esm/expression/embeddedDocs/function/algebra/simplify.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/arithmetic/invmod.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/matrix/forEach.js +1 -1
- package/lib/esm/factoriesAny.js +4 -0
- package/lib/esm/factoriesNumber.js +2 -0
- package/lib/esm/function/algebra/leafCount.js +59 -0
- package/lib/esm/function/algebra/rationalize.js +36 -38
- package/lib/esm/function/algebra/resolve.js +95 -0
- package/lib/esm/function/algebra/simplify/simplifyConstant.js +200 -32
- package/lib/esm/function/algebra/simplify/util.js +170 -34
- package/lib/esm/function/algebra/simplify.js +603 -186
- package/lib/esm/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +75 -31
- package/lib/esm/function/arithmetic/invmod.js +57 -0
- package/lib/esm/header.js +1 -1
- package/lib/esm/plain/number/combinations.js +18 -6
- package/lib/esm/version.js +1 -1
- package/package.json +21 -15
- package/types/index.d.ts +48 -6
- package/lib/cjs/function/algebra/simplify/resolve.js +0 -76
- package/lib/esm/function/algebra/simplify/resolve.js +0 -67
@@ -1,10 +1,14 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
4
6
|
value: true
|
5
7
|
});
|
6
8
|
exports.createSimplifyConstant = void 0;
|
7
9
|
|
10
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
11
|
+
|
8
12
|
var _is = require("../../../utils/is.js");
|
9
13
|
|
10
14
|
var _factory = require("../../../utils/factory.js");
|
@@ -13,18 +17,28 @@ var _util = require("./util.js");
|
|
13
17
|
|
14
18
|
var _noop = require("../../../utils/noop.js");
|
15
19
|
|
16
|
-
|
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
|
+
|
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
|
+
|
24
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
25
|
+
|
17
26
|
var name = 'simplifyConstant';
|
18
|
-
var dependencies = ['typed', 'config', 'mathWithTransform', '?fraction', '?bignumber', '
|
27
|
+
var dependencies = ['typed', 'config', 'mathWithTransform', 'matrix', '?fraction', '?bignumber', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode'];
|
19
28
|
var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
20
29
|
var typed = _ref.typed,
|
21
30
|
config = _ref.config,
|
22
31
|
mathWithTransform = _ref.mathWithTransform,
|
32
|
+
matrix = _ref.matrix,
|
23
33
|
fraction = _ref.fraction,
|
24
34
|
bignumber = _ref.bignumber,
|
35
|
+
AccessorNode = _ref.AccessorNode,
|
36
|
+
ArrayNode = _ref.ArrayNode,
|
25
37
|
ConstantNode = _ref.ConstantNode,
|
26
|
-
OperatorNode = _ref.OperatorNode,
|
27
38
|
FunctionNode = _ref.FunctionNode,
|
39
|
+
IndexNode = _ref.IndexNode,
|
40
|
+
ObjectNode = _ref.ObjectNode,
|
41
|
+
OperatorNode = _ref.OperatorNode,
|
28
42
|
SymbolNode = _ref.SymbolNode;
|
29
43
|
|
30
44
|
var _createUtil = (0, _util.createUtil)({
|
@@ -38,22 +52,31 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
38
52
|
createMakeNodeFunction = _createUtil.createMakeNodeFunction;
|
39
53
|
|
40
54
|
function simplifyConstant(expr, options) {
|
41
|
-
|
42
|
-
|
55
|
+
return _ensureNode(foldFraction(expr, options));
|
56
|
+
}
|
57
|
+
|
58
|
+
function _removeFractions(thing) {
|
59
|
+
if ((0, _is.isFraction)(thing)) {
|
60
|
+
return thing.valueOf();
|
61
|
+
}
|
62
|
+
|
63
|
+
if (thing instanceof Array) {
|
64
|
+
return thing.map(_removeFractions);
|
65
|
+
}
|
66
|
+
|
67
|
+
if ((0, _is.isMatrix)(thing)) {
|
68
|
+
return matrix(_removeFractions(thing.valueOf()));
|
69
|
+
}
|
70
|
+
|
71
|
+
return thing;
|
43
72
|
}
|
44
73
|
|
45
74
|
function _eval(fnname, args, options) {
|
46
75
|
try {
|
47
|
-
return
|
76
|
+
return mathWithTransform[fnname].apply(null, args);
|
48
77
|
} catch (ignore) {
|
49
78
|
// sometimes the implicit type conversion causes the evaluation to fail, so we'll try again after removing Fractions
|
50
|
-
args = args.map(
|
51
|
-
if ((0, _is.isFraction)(x)) {
|
52
|
-
return x.valueOf();
|
53
|
-
}
|
54
|
-
|
55
|
-
return x;
|
56
|
-
});
|
79
|
+
args = args.map(_removeFractions);
|
57
80
|
return _toNumber(mathWithTransform[fnname].apply(null, args), options);
|
58
81
|
}
|
59
82
|
}
|
@@ -76,8 +99,24 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
76
99
|
},
|
77
100
|
Complex: function Complex(s) {
|
78
101
|
throw new Error('Cannot convert Complex number to Node');
|
102
|
+
},
|
103
|
+
string: function string(s) {
|
104
|
+
return new ConstantNode(s);
|
105
|
+
},
|
106
|
+
Matrix: function Matrix(m) {
|
107
|
+
return new ArrayNode(m.valueOf().map(function (e) {
|
108
|
+
return _toNode(e);
|
109
|
+
}));
|
110
|
+
}
|
111
|
+
});
|
112
|
+
|
113
|
+
function _ensureNode(thing) {
|
114
|
+
if ((0, _is.isNode)(thing)) {
|
115
|
+
return thing;
|
79
116
|
}
|
80
|
-
|
117
|
+
|
118
|
+
return _toNode(thing);
|
119
|
+
} // convert a number to a fraction only if it can be expressed exactly,
|
81
120
|
// and when both numerator and denominator are small enough
|
82
121
|
|
83
122
|
|
@@ -134,6 +173,12 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
134
173
|
}
|
135
174
|
|
136
175
|
return _exactFraction(s.re, options);
|
176
|
+
},
|
177
|
+
'Matrix, Object': function MatrixObject(s, options) {
|
178
|
+
return matrix(_exactFraction(s.valueOf()));
|
179
|
+
},
|
180
|
+
'Array, Object': function ArrayObject(s, options) {
|
181
|
+
return s.map(_exactFraction);
|
137
182
|
}
|
138
183
|
});
|
139
184
|
|
@@ -157,6 +202,114 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
157
202
|
|
158
203
|
return new OperatorNode('/', 'divide', [n, new ConstantNode(f.d)]);
|
159
204
|
}
|
205
|
+
/* Handles constant indexing of ArrayNodes, matrices, and ObjectNodes */
|
206
|
+
|
207
|
+
|
208
|
+
function _foldAccessor(obj, index, options) {
|
209
|
+
if (!(0, _is.isIndexNode)(index)) {
|
210
|
+
// don't know what to do with that...
|
211
|
+
return new AccessorNode(_ensureNode(obj), _ensureNode(index));
|
212
|
+
}
|
213
|
+
|
214
|
+
if ((0, _is.isArrayNode)(obj) || (0, _is.isMatrix)(obj)) {
|
215
|
+
var remainingDims = Array.from(index.dimensions);
|
216
|
+
/* We will resolve constant indices one at a time, looking
|
217
|
+
* just in the first or second dimensions because (a) arrays
|
218
|
+
* of more than two dimensions are likely rare, and (b) pulling
|
219
|
+
* out the third or higher dimension would be pretty intricate.
|
220
|
+
* The price is that we miss simplifying [..3d array][x,y,1]
|
221
|
+
*/
|
222
|
+
|
223
|
+
while (remainingDims.length > 0) {
|
224
|
+
if ((0, _is.isConstantNode)(remainingDims[0]) && typeof remainingDims[0].value !== 'string') {
|
225
|
+
var first = _toNumber(remainingDims.shift().value, options);
|
226
|
+
|
227
|
+
if ((0, _is.isArrayNode)(obj)) {
|
228
|
+
obj = obj.items[first - 1];
|
229
|
+
} else {
|
230
|
+
// matrix
|
231
|
+
obj = obj.valueOf()[first - 1];
|
232
|
+
|
233
|
+
if (obj instanceof Array) {
|
234
|
+
obj = matrix(obj);
|
235
|
+
}
|
236
|
+
}
|
237
|
+
} else if (remainingDims.length > 1 && (0, _is.isConstantNode)(remainingDims[1]) && typeof remainingDims[1].value !== 'string') {
|
238
|
+
var second = _toNumber(remainingDims[1].value, options);
|
239
|
+
|
240
|
+
var tryItems = [];
|
241
|
+
var fromItems = (0, _is.isArrayNode)(obj) ? obj.items : obj.valueOf();
|
242
|
+
|
243
|
+
var _iterator = _createForOfIteratorHelper(fromItems),
|
244
|
+
_step;
|
245
|
+
|
246
|
+
try {
|
247
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
248
|
+
var item = _step.value;
|
249
|
+
|
250
|
+
if ((0, _is.isArrayNode)(item)) {
|
251
|
+
tryItems.push(item.items[second - 1]);
|
252
|
+
} else if ((0, _is.isMatrix)(obj)) {
|
253
|
+
tryItems.push(item[second - 1]);
|
254
|
+
} else {
|
255
|
+
break;
|
256
|
+
}
|
257
|
+
}
|
258
|
+
} catch (err) {
|
259
|
+
_iterator.e(err);
|
260
|
+
} finally {
|
261
|
+
_iterator.f();
|
262
|
+
}
|
263
|
+
|
264
|
+
if (tryItems.length === fromItems.length) {
|
265
|
+
if ((0, _is.isArrayNode)(obj)) {
|
266
|
+
obj = new ArrayNode(tryItems);
|
267
|
+
} else {
|
268
|
+
// matrix
|
269
|
+
obj = matrix(tryItems);
|
270
|
+
}
|
271
|
+
|
272
|
+
remainingDims.splice(1, 1);
|
273
|
+
} else {
|
274
|
+
// extracting slice along 2nd dimension failed, give up
|
275
|
+
break;
|
276
|
+
}
|
277
|
+
} else {
|
278
|
+
// neither 1st or 2nd dimension is constant, give up
|
279
|
+
break;
|
280
|
+
}
|
281
|
+
}
|
282
|
+
|
283
|
+
if (remainingDims.length === index.dimensions.length) {
|
284
|
+
/* No successful constant indexing */
|
285
|
+
return new AccessorNode(_ensureNode(obj), index);
|
286
|
+
}
|
287
|
+
|
288
|
+
if (remainingDims.length > 0) {
|
289
|
+
/* Indexed some but not all dimensions */
|
290
|
+
index = new IndexNode(remainingDims);
|
291
|
+
return new AccessorNode(_ensureNode(obj), index);
|
292
|
+
}
|
293
|
+
/* All dimensions were constant, access completely resolved */
|
294
|
+
|
295
|
+
|
296
|
+
return obj;
|
297
|
+
}
|
298
|
+
|
299
|
+
if ((0, _is.isObjectNode)(obj) && index.dimensions.length === 1 && (0, _is.isConstantNode)(index.dimensions[0])) {
|
300
|
+
var key = index.dimensions[0].value;
|
301
|
+
|
302
|
+
if (key in obj.properties) {
|
303
|
+
return obj.properties[key];
|
304
|
+
}
|
305
|
+
|
306
|
+
return new ConstantNode(); // undefined
|
307
|
+
}
|
308
|
+
/* Don't know how to index this sort of obj, at least not with this index */
|
309
|
+
|
310
|
+
|
311
|
+
return new AccessorNode(_ensureNode(obj), index);
|
312
|
+
}
|
160
313
|
/*
|
161
314
|
* Create a binary tree from a list of Fractions and Nodes.
|
162
315
|
* Tries to fold Fractions by evaluating them until the first Node in the list is hit, so
|
@@ -195,8 +348,15 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
195
348
|
return node;
|
196
349
|
|
197
350
|
case 'ConstantNode':
|
198
|
-
|
199
|
-
|
351
|
+
switch ((0, _typeof2.default)(node.value)) {
|
352
|
+
case 'number':
|
353
|
+
return _toNumber(node.value, options);
|
354
|
+
|
355
|
+
case 'string':
|
356
|
+
return node.value;
|
357
|
+
|
358
|
+
default:
|
359
|
+
if (!isNaN(node.value)) return _toNumber(node.value, options);
|
200
360
|
}
|
201
361
|
|
202
362
|
return node;
|
@@ -218,14 +378,24 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
218
378
|
if (!args.some(_is.isNode)) {
|
219
379
|
try {
|
220
380
|
return _eval(node.name, args, options);
|
221
|
-
} catch (
|
381
|
+
} catch (ignoreandcontinue) {}
|
382
|
+
} // Size of a matrix does not depend on entries
|
383
|
+
|
384
|
+
|
385
|
+
if (node.name === 'size' && args.length === 1 && (0, _is.isArrayNode)(args[0])) {
|
386
|
+
var sz = [];
|
387
|
+
var section = args[0];
|
388
|
+
|
389
|
+
while ((0, _is.isArrayNode)(section)) {
|
390
|
+
sz.push(section.items.length);
|
391
|
+
section = section.items[0];
|
392
|
+
}
|
393
|
+
|
394
|
+
return matrix(sz);
|
222
395
|
} // Convert all args to nodes and construct a symbolic function call
|
223
396
|
|
224
397
|
|
225
|
-
|
226
|
-
return (0, _is.isNode)(arg) ? arg : _toNode(arg);
|
227
|
-
});
|
228
|
-
return new FunctionNode(node.name, args);
|
398
|
+
return new FunctionNode(node.name, args.map(_ensureNode));
|
229
399
|
} else {// treat as operator
|
230
400
|
}
|
231
401
|
}
|
@@ -249,13 +419,13 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
249
419
|
} else {
|
250
420
|
res = makeNode(_args);
|
251
421
|
}
|
252
|
-
} else if (isAssociative(node)) {
|
253
|
-
_args = allChildren(node);
|
422
|
+
} else if (isAssociative(node, options.context)) {
|
423
|
+
_args = allChildren(node, options.context);
|
254
424
|
_args = _args.map(function (arg) {
|
255
425
|
return foldFraction(arg, options);
|
256
426
|
});
|
257
427
|
|
258
|
-
if (isCommutative(fn)) {
|
428
|
+
if (isCommutative(fn, options.context)) {
|
259
429
|
// commutative binary operator
|
260
430
|
var consts = [];
|
261
431
|
var vars = [];
|
@@ -296,10 +466,40 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
296
466
|
return foldFraction(node.content, options);
|
297
467
|
|
298
468
|
case 'AccessorNode':
|
299
|
-
|
469
|
+
return _foldAccessor(foldFraction(node.object, options), foldFraction(node.index, options), options);
|
300
470
|
|
301
471
|
case 'ArrayNode':
|
302
|
-
|
472
|
+
{
|
473
|
+
var foldItems = node.items.map(function (item) {
|
474
|
+
return foldFraction(item, options);
|
475
|
+
});
|
476
|
+
|
477
|
+
if (foldItems.some(_is.isNode)) {
|
478
|
+
return new ArrayNode(foldItems.map(_ensureNode));
|
479
|
+
}
|
480
|
+
/* All literals -- return a Matrix so we can operate on it */
|
481
|
+
|
482
|
+
|
483
|
+
return matrix(foldItems);
|
484
|
+
}
|
485
|
+
|
486
|
+
case 'IndexNode':
|
487
|
+
{
|
488
|
+
return new IndexNode(node.dimensions.map(function (n) {
|
489
|
+
return simplifyConstant(n, options);
|
490
|
+
}));
|
491
|
+
}
|
492
|
+
|
493
|
+
case 'ObjectNode':
|
494
|
+
{
|
495
|
+
var foldProps = {};
|
496
|
+
|
497
|
+
for (var prop in node.properties) {
|
498
|
+
foldProps[prop] = simplifyConstant(node.properties[prop], options);
|
499
|
+
}
|
500
|
+
|
501
|
+
return new ObjectNode(foldProps);
|
502
|
+
}
|
303
503
|
|
304
504
|
case 'AssignmentNode':
|
305
505
|
/* falls through */
|
@@ -310,12 +510,6 @@ var createSimplifyConstant = /* #__PURE__ */(0, _factory.factory)(name, dependen
|
|
310
510
|
case 'FunctionAssignmentNode':
|
311
511
|
/* falls through */
|
312
512
|
|
313
|
-
case 'IndexNode':
|
314
|
-
/* falls through */
|
315
|
-
|
316
|
-
case 'ObjectNode':
|
317
|
-
/* falls through */
|
318
|
-
|
319
513
|
case 'RangeNode':
|
320
514
|
/* falls through */
|
321
515
|
|
@@ -1,16 +1,24 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
4
6
|
value: true
|
5
7
|
});
|
6
8
|
exports.createUtil = void 0;
|
7
9
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
11
|
+
|
8
12
|
var _is = require("../../../utils/is.js");
|
9
13
|
|
10
14
|
var _factory = require("../../../utils/factory.js");
|
11
15
|
|
12
16
|
var _object = require("../../../utils/object.js");
|
13
17
|
|
18
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
19
|
+
|
20
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
21
|
+
|
14
22
|
var name = 'simplifyUtil';
|
15
23
|
var dependencies = ['FunctionNode', 'OperatorNode', 'SymbolNode'];
|
16
24
|
var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
@@ -21,41 +29,166 @@ var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
21
29
|
// e.g. multiply is not commutative for matrices
|
22
30
|
// The properties should be calculated from an argument to simplify, or possibly something in math.config
|
23
31
|
// the other option is for typed() to specify a return type so that we can evaluate the type of arguments
|
24
|
-
|
25
|
-
|
26
|
-
|
32
|
+
|
33
|
+
/* So that properties of an operator fit on one line: */
|
34
|
+
var T = true;
|
35
|
+
var F = false;
|
36
|
+
var defaultName = 'defaultF';
|
37
|
+
var defaultContext = {
|
38
|
+
/* */
|
39
|
+
add: {
|
40
|
+
trivial: T,
|
41
|
+
total: T,
|
42
|
+
commutative: T,
|
43
|
+
associative: T
|
44
|
+
},
|
45
|
+
|
46
|
+
/**/
|
47
|
+
unaryPlus: {
|
48
|
+
trivial: T,
|
49
|
+
total: T,
|
50
|
+
commutative: T,
|
51
|
+
associative: T
|
52
|
+
},
|
53
|
+
|
54
|
+
/* */
|
55
|
+
subtract: {
|
56
|
+
trivial: F,
|
57
|
+
total: T,
|
58
|
+
commutative: F,
|
59
|
+
associative: F
|
60
|
+
},
|
61
|
+
|
62
|
+
/* */
|
63
|
+
multiply: {
|
64
|
+
trivial: T,
|
65
|
+
total: T,
|
66
|
+
commutative: T,
|
67
|
+
associative: T
|
68
|
+
},
|
69
|
+
|
70
|
+
/* */
|
71
|
+
divide: {
|
72
|
+
trivial: F,
|
73
|
+
total: T,
|
74
|
+
commutative: F,
|
75
|
+
associative: F
|
76
|
+
},
|
77
|
+
|
78
|
+
/* */
|
79
|
+
paren: {
|
80
|
+
trivial: T,
|
81
|
+
total: T,
|
82
|
+
commutative: T,
|
83
|
+
associative: F
|
84
|
+
},
|
85
|
+
|
86
|
+
/* */
|
87
|
+
defaultF: {
|
88
|
+
trivial: F,
|
89
|
+
total: T,
|
90
|
+
commutative: F,
|
91
|
+
associative: F
|
92
|
+
}
|
93
|
+
};
|
94
|
+
var realContext = {
|
95
|
+
divide: {
|
96
|
+
total: F
|
97
|
+
},
|
98
|
+
log: {
|
99
|
+
total: F
|
100
|
+
}
|
27
101
|
};
|
28
|
-
var
|
29
|
-
|
30
|
-
|
102
|
+
var positiveContext = {
|
103
|
+
subtract: {
|
104
|
+
total: F
|
105
|
+
},
|
106
|
+
abs: {
|
107
|
+
trivial: T
|
108
|
+
},
|
109
|
+
log: {
|
110
|
+
total: T
|
111
|
+
}
|
31
112
|
};
|
32
113
|
|
33
|
-
function
|
34
|
-
|
35
|
-
|
114
|
+
function hasProperty(nodeOrName, property) {
|
115
|
+
var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultContext;
|
116
|
+
var name = defaultName;
|
117
|
+
|
118
|
+
if (typeof nodeOrName === 'string') {
|
119
|
+
name = nodeOrName;
|
120
|
+
} else if ((0, _is.isOperatorNode)(nodeOrName)) {
|
121
|
+
name = nodeOrName.fn.toString();
|
122
|
+
} else if ((0, _is.isFunctionNode)(nodeOrName)) {
|
123
|
+
name = nodeOrName.name;
|
124
|
+
} else if ((0, _is.isParenthesisNode)(nodeOrName)) {
|
125
|
+
name = 'paren';
|
36
126
|
}
|
37
127
|
|
38
|
-
|
128
|
+
if ((0, _object.hasOwnProperty)(context, name)) {
|
129
|
+
var properties = context[name];
|
130
|
+
|
131
|
+
if ((0, _object.hasOwnProperty)(properties, property)) {
|
132
|
+
return properties[property];
|
133
|
+
}
|
39
134
|
|
40
|
-
|
41
|
-
|
135
|
+
if ((0, _object.hasOwnProperty)(defaultContext, name)) {
|
136
|
+
return defaultContext[name][property];
|
137
|
+
}
|
42
138
|
}
|
43
139
|
|
44
|
-
|
45
|
-
|
140
|
+
if ((0, _object.hasOwnProperty)(context, defaultName)) {
|
141
|
+
var _properties = context[defaultName];
|
142
|
+
|
143
|
+
if ((0, _object.hasOwnProperty)(_properties, property)) {
|
144
|
+
return _properties[property];
|
145
|
+
}
|
46
146
|
|
47
|
-
|
48
|
-
if (!(0, _is.isOperatorNode)(node)) {
|
49
|
-
return false;
|
147
|
+
return defaultContext[defaultName][property];
|
50
148
|
}
|
149
|
+
/* name not found in context and context has no global default */
|
150
|
+
|
151
|
+
/* So use default context. */
|
51
152
|
|
52
|
-
var name = node.fn.toString();
|
53
153
|
|
54
|
-
if (
|
55
|
-
|
154
|
+
if ((0, _object.hasOwnProperty)(defaultContext, name)) {
|
155
|
+
var _properties2 = defaultContext[name];
|
156
|
+
|
157
|
+
if ((0, _object.hasOwnProperty)(_properties2, property)) {
|
158
|
+
return _properties2[property];
|
159
|
+
}
|
160
|
+
}
|
161
|
+
|
162
|
+
return defaultContext[defaultName][property];
|
163
|
+
}
|
164
|
+
|
165
|
+
function isCommutative(node) {
|
166
|
+
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultContext;
|
167
|
+
return hasProperty(node, 'commutative', context);
|
168
|
+
}
|
169
|
+
|
170
|
+
function isAssociative(node) {
|
171
|
+
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultContext;
|
172
|
+
return hasProperty(node, 'associative', context);
|
173
|
+
}
|
174
|
+
/**
|
175
|
+
* Merge the given contexts, with primary overriding secondary
|
176
|
+
* wherever they might conflict
|
177
|
+
*/
|
178
|
+
|
179
|
+
|
180
|
+
function mergeContext(primary, secondary) {
|
181
|
+
var merged = _objectSpread({}, primary);
|
182
|
+
|
183
|
+
for (var prop in secondary) {
|
184
|
+
if ((0, _object.hasOwnProperty)(primary, prop)) {
|
185
|
+
merged[prop] = _objectSpread(_objectSpread({}, secondary[prop]), primary[prop]);
|
186
|
+
} else {
|
187
|
+
merged[prop] = secondary[prop];
|
188
|
+
}
|
56
189
|
}
|
57
190
|
|
58
|
-
return
|
191
|
+
return merged;
|
59
192
|
}
|
60
193
|
/**
|
61
194
|
* Flatten all associative operators in an expression tree.
|
@@ -63,15 +196,15 @@ var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
63
196
|
*/
|
64
197
|
|
65
198
|
|
66
|
-
function flatten(node) {
|
199
|
+
function flatten(node, context) {
|
67
200
|
if (!node.args || node.args.length === 0) {
|
68
201
|
return node;
|
69
202
|
}
|
70
203
|
|
71
|
-
node.args = allChildren(node);
|
204
|
+
node.args = allChildren(node, context);
|
72
205
|
|
73
206
|
for (var i = 0; i < node.args.length; i++) {
|
74
|
-
flatten(node.args[i]);
|
207
|
+
flatten(node.args[i], context);
|
75
208
|
}
|
76
209
|
}
|
77
210
|
/**
|
@@ -80,7 +213,7 @@ var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
80
213
|
*/
|
81
214
|
|
82
215
|
|
83
|
-
function allChildren(node) {
|
216
|
+
function allChildren(node, context) {
|
84
217
|
var op;
|
85
218
|
var children = [];
|
86
219
|
|
@@ -96,7 +229,7 @@ var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
96
229
|
}
|
97
230
|
};
|
98
231
|
|
99
|
-
if (isAssociative(node)) {
|
232
|
+
if (isAssociative(node, context)) {
|
100
233
|
op = node.op;
|
101
234
|
findChildren(node);
|
102
235
|
return children;
|
@@ -109,7 +242,7 @@ var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
109
242
|
*/
|
110
243
|
|
111
244
|
|
112
|
-
function unflattenr(node) {
|
245
|
+
function unflattenr(node, context) {
|
113
246
|
if (!node.args || node.args.length === 0) {
|
114
247
|
return;
|
115
248
|
}
|
@@ -118,10 +251,10 @@ var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
118
251
|
var l = node.args.length;
|
119
252
|
|
120
253
|
for (var i = 0; i < l; i++) {
|
121
|
-
unflattenr(node.args[i]);
|
254
|
+
unflattenr(node.args[i], context);
|
122
255
|
}
|
123
256
|
|
124
|
-
if (l > 2 && isAssociative(node)) {
|
257
|
+
if (l > 2 && isAssociative(node, context)) {
|
125
258
|
var curnode = node.args.pop();
|
126
259
|
|
127
260
|
while (node.args.length > 0) {
|
@@ -136,7 +269,7 @@ var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
136
269
|
*/
|
137
270
|
|
138
271
|
|
139
|
-
function unflattenl(node) {
|
272
|
+
function unflattenl(node, context) {
|
140
273
|
if (!node.args || node.args.length === 0) {
|
141
274
|
return;
|
142
275
|
}
|
@@ -145,10 +278,10 @@ var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
145
278
|
var l = node.args.length;
|
146
279
|
|
147
280
|
for (var i = 0; i < l; i++) {
|
148
|
-
unflattenl(node.args[i]);
|
281
|
+
unflattenl(node.args[i], context);
|
149
282
|
}
|
150
283
|
|
151
|
-
if (l > 2 && isAssociative(node)) {
|
284
|
+
if (l > 2 && isAssociative(node, context)) {
|
152
285
|
var curnode = node.args.shift();
|
153
286
|
|
154
287
|
while (node.args.length > 0) {
|
@@ -178,12 +311,17 @@ var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
178
311
|
|
179
312
|
return {
|
180
313
|
createMakeNodeFunction: createMakeNodeFunction,
|
314
|
+
hasProperty: hasProperty,
|
181
315
|
isCommutative: isCommutative,
|
182
316
|
isAssociative: isAssociative,
|
317
|
+
mergeContext: mergeContext,
|
183
318
|
flatten: flatten,
|
184
319
|
allChildren: allChildren,
|
185
320
|
unflattenr: unflattenr,
|
186
|
-
unflattenl: unflattenl
|
321
|
+
unflattenl: unflattenl,
|
322
|
+
defaultContext: defaultContext,
|
323
|
+
realContext: realContext,
|
324
|
+
positiveContext: positiveContext
|
187
325
|
};
|
188
326
|
});
|
189
327
|
exports.createUtil = createUtil;
|