mathjs 10.1.0 → 10.3.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 +38 -0
- package/docs/expressions/algebra.md +27 -0
- package/docs/expressions/syntax.md +31 -2
- 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 +6 -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 +28 -5
- 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 +16 -2
- package/docs/reference/functions/subtract.md +6 -0
- package/docs/reference/functions/sum.md +6 -0
- package/docs/reference/functions/symbolicEqual.md +62 -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 +5 -1
- package/lib/browser/math.js +6 -6
- 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/dependenciesLeafCount.generated.js +23 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +32 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +6 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +65 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +29 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +32 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +32 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +6 -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 +80 -34
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +96 -64
- package/lib/cjs/entry/pureFunctionsAny.generated.js +62 -64
- 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 +247 -235
- 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/algebra/symbolicEqual.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/matrix/subset.js +2 -2
- package/lib/cjs/expression/node/FunctionNode.js +80 -61
- 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 +24 -41
- package/lib/cjs/function/algebra/resolve.js +106 -0
- package/lib/cjs/function/algebra/simplify/simplifyConstant.js +5 -5
- package/lib/cjs/function/algebra/simplify/util.js +171 -33
- package/lib/cjs/function/algebra/simplify.js +588 -211
- package/lib/cjs/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +67 -43
- package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
- package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
- package/lib/cjs/function/algebra/symbolicEqual.js +88 -0
- 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 +1 -1
- 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 +13 -11
- package/lib/cjs/function/matrix/map.js +53 -15
- package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
- package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
- package/lib/cjs/function/matrix/subset.js +15 -5
- package/lib/cjs/function/probability/util/seededRNG.js +2 -2
- package/lib/cjs/function/relational/compareNatural.js +6 -6
- package/lib/cjs/header.js +2 -2
- 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/dependenciesLeafCount.generated.js +12 -0
- package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +18 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +40 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +16 -0
- package/lib/esm/entry/dependenciesAny.generated.js +4 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +18 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +4 -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 +69 -27
- package/lib/esm/entry/impureFunctionsNumber.generated.js +83 -53
- package/lib/esm/entry/pureFunctionsAny.generated.js +49 -49
- 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 +220 -212
- 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/algebra/symbolicEqual.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/matrix/subset.js +2 -2
- package/lib/esm/expression/node/FunctionNode.js +70 -53
- 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 +24 -40
- package/lib/esm/function/algebra/resolve.js +95 -0
- package/lib/esm/function/algebra/simplify/simplifyConstant.js +3 -3
- package/lib/esm/function/algebra/simplify/util.js +170 -34
- package/lib/esm/function/algebra/simplify.js +583 -206
- package/lib/esm/function/algebra/{simplify/simplifyCore.js → simplifyCore.js} +60 -44
- package/lib/esm/function/algebra/symbolicEqual.js +80 -0
- package/lib/esm/function/matrix/eigs/complexEigs.js +8 -6
- package/lib/esm/function/matrix/map.js +53 -15
- package/lib/esm/function/matrix/subset.js +15 -5
- package/lib/esm/plain/number/combinations.js +18 -6
- package/lib/esm/version.js +1 -1
- package/package.json +20 -15
- package/types/index.d.ts +52 -10
- package/lib/cjs/function/algebra/simplify/resolve.js +0 -76
- package/lib/esm/function/algebra/simplify/resolve.js +0 -67
|
@@ -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
|
|
120
|
-
* {
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
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
|
-
//
|
|
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);
|
|
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
|
-
|
|
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
|
|
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
|
|
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 = [];
|
|
@@ -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;
|