mathjs 10.0.2 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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;
|