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,20 +1,25 @@
|
|
|
1
1
|
// TODO this could be improved by simplifying seperated constants under associative and commutative operators
|
|
2
|
-
import { isFraction, isNode, isOperatorNode } from '../../../utils/is.js';
|
|
2
|
+
import { isFraction, isMatrix, isNode, isArrayNode, isConstantNode, isIndexNode, isObjectNode, isOperatorNode } from '../../../utils/is.js';
|
|
3
3
|
import { factory } from '../../../utils/factory.js';
|
|
4
4
|
import { createUtil } from './util.js';
|
|
5
5
|
import { noBignumber, noFraction } from '../../../utils/noop.js';
|
|
6
6
|
var name = 'simplifyConstant';
|
|
7
|
-
var dependencies = ['typed', 'config', 'mathWithTransform', '?fraction', '?bignumber', '
|
|
7
|
+
var dependencies = ['typed', 'config', 'mathWithTransform', 'matrix', '?fraction', '?bignumber', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode'];
|
|
8
8
|
export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
9
9
|
var {
|
|
10
10
|
typed,
|
|
11
11
|
config,
|
|
12
12
|
mathWithTransform,
|
|
13
|
+
matrix,
|
|
13
14
|
fraction,
|
|
14
15
|
bignumber,
|
|
16
|
+
AccessorNode,
|
|
17
|
+
ArrayNode,
|
|
15
18
|
ConstantNode,
|
|
16
|
-
OperatorNode,
|
|
17
19
|
FunctionNode,
|
|
20
|
+
IndexNode,
|
|
21
|
+
ObjectNode,
|
|
22
|
+
OperatorNode,
|
|
18
23
|
SymbolNode
|
|
19
24
|
} = _ref;
|
|
20
25
|
var {
|
|
@@ -29,22 +34,31 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
|
29
34
|
});
|
|
30
35
|
|
|
31
36
|
function simplifyConstant(expr, options) {
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
return _ensureNode(foldFraction(expr, options));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function _removeFractions(thing) {
|
|
41
|
+
if (isFraction(thing)) {
|
|
42
|
+
return thing.valueOf();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (thing instanceof Array) {
|
|
46
|
+
return thing.map(_removeFractions);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (isMatrix(thing)) {
|
|
50
|
+
return matrix(_removeFractions(thing.valueOf()));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return thing;
|
|
34
54
|
}
|
|
35
55
|
|
|
36
56
|
function _eval(fnname, args, options) {
|
|
37
57
|
try {
|
|
38
|
-
return
|
|
58
|
+
return mathWithTransform[fnname].apply(null, args);
|
|
39
59
|
} catch (ignore) {
|
|
40
60
|
// sometimes the implicit type conversion causes the evaluation to fail, so we'll try again after removing Fractions
|
|
41
|
-
args = args.map(
|
|
42
|
-
if (isFraction(x)) {
|
|
43
|
-
return x.valueOf();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return x;
|
|
47
|
-
});
|
|
61
|
+
args = args.map(_removeFractions);
|
|
48
62
|
return _toNumber(mathWithTransform[fnname].apply(null, args), options);
|
|
49
63
|
}
|
|
50
64
|
}
|
|
@@ -67,8 +81,22 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
|
67
81
|
},
|
|
68
82
|
Complex: function Complex(s) {
|
|
69
83
|
throw new Error('Cannot convert Complex number to Node');
|
|
84
|
+
},
|
|
85
|
+
string: function string(s) {
|
|
86
|
+
return new ConstantNode(s);
|
|
87
|
+
},
|
|
88
|
+
Matrix: function Matrix(m) {
|
|
89
|
+
return new ArrayNode(m.valueOf().map(e => _toNode(e)));
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
function _ensureNode(thing) {
|
|
94
|
+
if (isNode(thing)) {
|
|
95
|
+
return thing;
|
|
70
96
|
}
|
|
71
|
-
|
|
97
|
+
|
|
98
|
+
return _toNode(thing);
|
|
99
|
+
} // convert a number to a fraction only if it can be expressed exactly,
|
|
72
100
|
// and when both numerator and denominator are small enough
|
|
73
101
|
|
|
74
102
|
|
|
@@ -125,6 +153,12 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
|
125
153
|
}
|
|
126
154
|
|
|
127
155
|
return _exactFraction(s.re, options);
|
|
156
|
+
},
|
|
157
|
+
'Matrix, Object': function MatrixObject(s, options) {
|
|
158
|
+
return matrix(_exactFraction(s.valueOf()));
|
|
159
|
+
},
|
|
160
|
+
'Array, Object': function ArrayObject(s, options) {
|
|
161
|
+
return s.map(_exactFraction);
|
|
128
162
|
}
|
|
129
163
|
});
|
|
130
164
|
|
|
@@ -148,6 +182,103 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
|
148
182
|
|
|
149
183
|
return new OperatorNode('/', 'divide', [n, new ConstantNode(f.d)]);
|
|
150
184
|
}
|
|
185
|
+
/* Handles constant indexing of ArrayNodes, matrices, and ObjectNodes */
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
function _foldAccessor(obj, index, options) {
|
|
189
|
+
if (!isIndexNode(index)) {
|
|
190
|
+
// don't know what to do with that...
|
|
191
|
+
return new AccessorNode(_ensureNode(obj), _ensureNode(index));
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (isArrayNode(obj) || isMatrix(obj)) {
|
|
195
|
+
var remainingDims = Array.from(index.dimensions);
|
|
196
|
+
/* We will resolve constant indices one at a time, looking
|
|
197
|
+
* just in the first or second dimensions because (a) arrays
|
|
198
|
+
* of more than two dimensions are likely rare, and (b) pulling
|
|
199
|
+
* out the third or higher dimension would be pretty intricate.
|
|
200
|
+
* The price is that we miss simplifying [..3d array][x,y,1]
|
|
201
|
+
*/
|
|
202
|
+
|
|
203
|
+
while (remainingDims.length > 0) {
|
|
204
|
+
if (isConstantNode(remainingDims[0]) && typeof remainingDims[0].value !== 'string') {
|
|
205
|
+
var first = _toNumber(remainingDims.shift().value, options);
|
|
206
|
+
|
|
207
|
+
if (isArrayNode(obj)) {
|
|
208
|
+
obj = obj.items[first - 1];
|
|
209
|
+
} else {
|
|
210
|
+
// matrix
|
|
211
|
+
obj = obj.valueOf()[first - 1];
|
|
212
|
+
|
|
213
|
+
if (obj instanceof Array) {
|
|
214
|
+
obj = matrix(obj);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
} else if (remainingDims.length > 1 && isConstantNode(remainingDims[1]) && typeof remainingDims[1].value !== 'string') {
|
|
218
|
+
var second = _toNumber(remainingDims[1].value, options);
|
|
219
|
+
|
|
220
|
+
var tryItems = [];
|
|
221
|
+
var fromItems = isArrayNode(obj) ? obj.items : obj.valueOf();
|
|
222
|
+
|
|
223
|
+
for (var item of fromItems) {
|
|
224
|
+
if (isArrayNode(item)) {
|
|
225
|
+
tryItems.push(item.items[second - 1]);
|
|
226
|
+
} else if (isMatrix(obj)) {
|
|
227
|
+
tryItems.push(item[second - 1]);
|
|
228
|
+
} else {
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
if (tryItems.length === fromItems.length) {
|
|
234
|
+
if (isArrayNode(obj)) {
|
|
235
|
+
obj = new ArrayNode(tryItems);
|
|
236
|
+
} else {
|
|
237
|
+
// matrix
|
|
238
|
+
obj = matrix(tryItems);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
remainingDims.splice(1, 1);
|
|
242
|
+
} else {
|
|
243
|
+
// extracting slice along 2nd dimension failed, give up
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
} else {
|
|
247
|
+
// neither 1st or 2nd dimension is constant, give up
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if (remainingDims.length === index.dimensions.length) {
|
|
253
|
+
/* No successful constant indexing */
|
|
254
|
+
return new AccessorNode(_ensureNode(obj), index);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if (remainingDims.length > 0) {
|
|
258
|
+
/* Indexed some but not all dimensions */
|
|
259
|
+
index = new IndexNode(remainingDims);
|
|
260
|
+
return new AccessorNode(_ensureNode(obj), index);
|
|
261
|
+
}
|
|
262
|
+
/* All dimensions were constant, access completely resolved */
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
return obj;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
if (isObjectNode(obj) && index.dimensions.length === 1 && isConstantNode(index.dimensions[0])) {
|
|
269
|
+
var key = index.dimensions[0].value;
|
|
270
|
+
|
|
271
|
+
if (key in obj.properties) {
|
|
272
|
+
return obj.properties[key];
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return new ConstantNode(); // undefined
|
|
276
|
+
}
|
|
277
|
+
/* Don't know how to index this sort of obj, at least not with this index */
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
return new AccessorNode(_ensureNode(obj), index);
|
|
281
|
+
}
|
|
151
282
|
/*
|
|
152
283
|
* Create a binary tree from a list of Fractions and Nodes.
|
|
153
284
|
* Tries to fold Fractions by evaluating them until the first Node in the list is hit, so
|
|
@@ -186,8 +317,15 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
|
186
317
|
return node;
|
|
187
318
|
|
|
188
319
|
case 'ConstantNode':
|
|
189
|
-
|
|
190
|
-
|
|
320
|
+
switch (typeof node.value) {
|
|
321
|
+
case 'number':
|
|
322
|
+
return _toNumber(node.value, options);
|
|
323
|
+
|
|
324
|
+
case 'string':
|
|
325
|
+
return node.value;
|
|
326
|
+
|
|
327
|
+
default:
|
|
328
|
+
if (!isNaN(node.value)) return _toNumber(node.value, options);
|
|
191
329
|
}
|
|
192
330
|
|
|
193
331
|
return node;
|
|
@@ -207,14 +345,24 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
|
207
345
|
if (!args.some(isNode)) {
|
|
208
346
|
try {
|
|
209
347
|
return _eval(node.name, args, options);
|
|
210
|
-
} catch (
|
|
348
|
+
} catch (ignoreandcontinue) {}
|
|
349
|
+
} // Size of a matrix does not depend on entries
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
if (node.name === 'size' && args.length === 1 && isArrayNode(args[0])) {
|
|
353
|
+
var sz = [];
|
|
354
|
+
var section = args[0];
|
|
355
|
+
|
|
356
|
+
while (isArrayNode(section)) {
|
|
357
|
+
sz.push(section.items.length);
|
|
358
|
+
section = section.items[0];
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
return matrix(sz);
|
|
211
362
|
} // Convert all args to nodes and construct a symbolic function call
|
|
212
363
|
|
|
213
364
|
|
|
214
|
-
|
|
215
|
-
return isNode(arg) ? arg : _toNode(arg);
|
|
216
|
-
});
|
|
217
|
-
return new FunctionNode(node.name, args);
|
|
365
|
+
return new FunctionNode(node.name, args.map(_ensureNode));
|
|
218
366
|
} else {// treat as operator
|
|
219
367
|
}
|
|
220
368
|
}
|
|
@@ -238,11 +386,11 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
|
238
386
|
} else {
|
|
239
387
|
res = makeNode(_args);
|
|
240
388
|
}
|
|
241
|
-
} else if (isAssociative(node)) {
|
|
242
|
-
_args = allChildren(node);
|
|
389
|
+
} else if (isAssociative(node, options.context)) {
|
|
390
|
+
_args = allChildren(node, options.context);
|
|
243
391
|
_args = _args.map(arg => foldFraction(arg, options));
|
|
244
392
|
|
|
245
|
-
if (isCommutative(fn)) {
|
|
393
|
+
if (isCommutative(fn, options.context)) {
|
|
246
394
|
// commutative binary operator
|
|
247
395
|
var consts = [];
|
|
248
396
|
var vars = [];
|
|
@@ -281,10 +429,36 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
|
281
429
|
return foldFraction(node.content, options);
|
|
282
430
|
|
|
283
431
|
case 'AccessorNode':
|
|
284
|
-
|
|
432
|
+
return _foldAccessor(foldFraction(node.object, options), foldFraction(node.index, options), options);
|
|
285
433
|
|
|
286
434
|
case 'ArrayNode':
|
|
287
|
-
|
|
435
|
+
{
|
|
436
|
+
var foldItems = node.items.map(item => foldFraction(item, options));
|
|
437
|
+
|
|
438
|
+
if (foldItems.some(isNode)) {
|
|
439
|
+
return new ArrayNode(foldItems.map(_ensureNode));
|
|
440
|
+
}
|
|
441
|
+
/* All literals -- return a Matrix so we can operate on it */
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
return matrix(foldItems);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
case 'IndexNode':
|
|
448
|
+
{
|
|
449
|
+
return new IndexNode(node.dimensions.map(n => simplifyConstant(n, options)));
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
case 'ObjectNode':
|
|
453
|
+
{
|
|
454
|
+
var foldProps = {};
|
|
455
|
+
|
|
456
|
+
for (var prop in node.properties) {
|
|
457
|
+
foldProps[prop] = simplifyConstant(node.properties[prop], options);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
return new ObjectNode(foldProps);
|
|
461
|
+
}
|
|
288
462
|
|
|
289
463
|
case 'AssignmentNode':
|
|
290
464
|
/* falls through */
|
|
@@ -295,12 +469,6 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
|
|
|
295
469
|
case 'FunctionAssignmentNode':
|
|
296
470
|
/* falls through */
|
|
297
471
|
|
|
298
|
-
case 'IndexNode':
|
|
299
|
-
/* falls through */
|
|
300
|
-
|
|
301
|
-
case 'ObjectNode':
|
|
302
|
-
/* falls through */
|
|
303
|
-
|
|
304
472
|
case 'RangeNode':
|
|
305
473
|
/* falls through */
|
|
306
474
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
|
|
3
|
+
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; }
|
|
4
|
+
|
|
5
|
+
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) { _defineProperty(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; }
|
|
6
|
+
|
|
7
|
+
import { isFunctionNode, isOperatorNode, isParenthesisNode } from '../../../utils/is.js';
|
|
2
8
|
import { factory } from '../../../utils/factory.js';
|
|
3
9
|
import { hasOwnProperty } from '../../../utils/object.js';
|
|
4
10
|
var name = 'simplifyUtil';
|
|
@@ -13,41 +19,166 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
13
19
|
// e.g. multiply is not commutative for matrices
|
|
14
20
|
// The properties should be calculated from an argument to simplify, or possibly something in math.config
|
|
15
21
|
// the other option is for typed() to specify a return type so that we can evaluate the type of arguments
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
22
|
+
|
|
23
|
+
/* So that properties of an operator fit on one line: */
|
|
24
|
+
var T = true;
|
|
25
|
+
var F = false;
|
|
26
|
+
var defaultName = 'defaultF';
|
|
27
|
+
var defaultContext = {
|
|
28
|
+
/* */
|
|
29
|
+
add: {
|
|
30
|
+
trivial: T,
|
|
31
|
+
total: T,
|
|
32
|
+
commutative: T,
|
|
33
|
+
associative: T
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
/**/
|
|
37
|
+
unaryPlus: {
|
|
38
|
+
trivial: T,
|
|
39
|
+
total: T,
|
|
40
|
+
commutative: T,
|
|
41
|
+
associative: T
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
/* */
|
|
45
|
+
subtract: {
|
|
46
|
+
trivial: F,
|
|
47
|
+
total: T,
|
|
48
|
+
commutative: F,
|
|
49
|
+
associative: F
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
/* */
|
|
53
|
+
multiply: {
|
|
54
|
+
trivial: T,
|
|
55
|
+
total: T,
|
|
56
|
+
commutative: T,
|
|
57
|
+
associative: T
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
/* */
|
|
61
|
+
divide: {
|
|
62
|
+
trivial: F,
|
|
63
|
+
total: T,
|
|
64
|
+
commutative: F,
|
|
65
|
+
associative: F
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
/* */
|
|
69
|
+
paren: {
|
|
70
|
+
trivial: T,
|
|
71
|
+
total: T,
|
|
72
|
+
commutative: T,
|
|
73
|
+
associative: F
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
/* */
|
|
77
|
+
defaultF: {
|
|
78
|
+
trivial: F,
|
|
79
|
+
total: T,
|
|
80
|
+
commutative: F,
|
|
81
|
+
associative: F
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
var realContext = {
|
|
85
|
+
divide: {
|
|
86
|
+
total: F
|
|
87
|
+
},
|
|
88
|
+
log: {
|
|
89
|
+
total: F
|
|
90
|
+
}
|
|
19
91
|
};
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
92
|
+
var positiveContext = {
|
|
93
|
+
subtract: {
|
|
94
|
+
total: F
|
|
95
|
+
},
|
|
96
|
+
abs: {
|
|
97
|
+
trivial: T
|
|
98
|
+
},
|
|
99
|
+
log: {
|
|
100
|
+
total: T
|
|
101
|
+
}
|
|
23
102
|
};
|
|
24
103
|
|
|
25
|
-
function
|
|
26
|
-
|
|
27
|
-
|
|
104
|
+
function hasProperty(nodeOrName, property) {
|
|
105
|
+
var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultContext;
|
|
106
|
+
var name = defaultName;
|
|
107
|
+
|
|
108
|
+
if (typeof nodeOrName === 'string') {
|
|
109
|
+
name = nodeOrName;
|
|
110
|
+
} else if (isOperatorNode(nodeOrName)) {
|
|
111
|
+
name = nodeOrName.fn.toString();
|
|
112
|
+
} else if (isFunctionNode(nodeOrName)) {
|
|
113
|
+
name = nodeOrName.name;
|
|
114
|
+
} else if (isParenthesisNode(nodeOrName)) {
|
|
115
|
+
name = 'paren';
|
|
28
116
|
}
|
|
29
117
|
|
|
30
|
-
|
|
118
|
+
if (hasOwnProperty(context, name)) {
|
|
119
|
+
var properties = context[name];
|
|
31
120
|
|
|
32
|
-
|
|
33
|
-
|
|
121
|
+
if (hasOwnProperty(properties, property)) {
|
|
122
|
+
return properties[property];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (hasOwnProperty(defaultContext, name)) {
|
|
126
|
+
return defaultContext[name][property];
|
|
127
|
+
}
|
|
34
128
|
}
|
|
35
129
|
|
|
36
|
-
|
|
37
|
-
|
|
130
|
+
if (hasOwnProperty(context, defaultName)) {
|
|
131
|
+
var _properties = context[defaultName];
|
|
132
|
+
|
|
133
|
+
if (hasOwnProperty(_properties, property)) {
|
|
134
|
+
return _properties[property];
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return defaultContext[defaultName][property];
|
|
138
|
+
}
|
|
139
|
+
/* name not found in context and context has no global default */
|
|
140
|
+
|
|
141
|
+
/* So use default context. */
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
if (hasOwnProperty(defaultContext, name)) {
|
|
145
|
+
var _properties2 = defaultContext[name];
|
|
38
146
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
147
|
+
if (hasOwnProperty(_properties2, property)) {
|
|
148
|
+
return _properties2[property];
|
|
149
|
+
}
|
|
42
150
|
}
|
|
43
151
|
|
|
44
|
-
|
|
152
|
+
return defaultContext[defaultName][property];
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function isCommutative(node) {
|
|
156
|
+
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultContext;
|
|
157
|
+
return hasProperty(node, 'commutative', context);
|
|
158
|
+
}
|
|
45
159
|
|
|
46
|
-
|
|
47
|
-
|
|
160
|
+
function isAssociative(node) {
|
|
161
|
+
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultContext;
|
|
162
|
+
return hasProperty(node, 'associative', context);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Merge the given contexts, with primary overriding secondary
|
|
166
|
+
* wherever they might conflict
|
|
167
|
+
*/
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
function mergeContext(primary, secondary) {
|
|
171
|
+
var merged = _objectSpread({}, primary);
|
|
172
|
+
|
|
173
|
+
for (var prop in secondary) {
|
|
174
|
+
if (hasOwnProperty(primary, prop)) {
|
|
175
|
+
merged[prop] = _objectSpread(_objectSpread({}, secondary[prop]), primary[prop]);
|
|
176
|
+
} else {
|
|
177
|
+
merged[prop] = secondary[prop];
|
|
178
|
+
}
|
|
48
179
|
}
|
|
49
180
|
|
|
50
|
-
return
|
|
181
|
+
return merged;
|
|
51
182
|
}
|
|
52
183
|
/**
|
|
53
184
|
* Flatten all associative operators in an expression tree.
|
|
@@ -55,15 +186,15 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
55
186
|
*/
|
|
56
187
|
|
|
57
188
|
|
|
58
|
-
function flatten(node) {
|
|
189
|
+
function flatten(node, context) {
|
|
59
190
|
if (!node.args || node.args.length === 0) {
|
|
60
191
|
return node;
|
|
61
192
|
}
|
|
62
193
|
|
|
63
|
-
node.args = allChildren(node);
|
|
194
|
+
node.args = allChildren(node, context);
|
|
64
195
|
|
|
65
196
|
for (var i = 0; i < node.args.length; i++) {
|
|
66
|
-
flatten(node.args[i]);
|
|
197
|
+
flatten(node.args[i], context);
|
|
67
198
|
}
|
|
68
199
|
}
|
|
69
200
|
/**
|
|
@@ -72,7 +203,7 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
72
203
|
*/
|
|
73
204
|
|
|
74
205
|
|
|
75
|
-
function allChildren(node) {
|
|
206
|
+
function allChildren(node, context) {
|
|
76
207
|
var op;
|
|
77
208
|
var children = [];
|
|
78
209
|
|
|
@@ -88,7 +219,7 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
88
219
|
}
|
|
89
220
|
};
|
|
90
221
|
|
|
91
|
-
if (isAssociative(node)) {
|
|
222
|
+
if (isAssociative(node, context)) {
|
|
92
223
|
op = node.op;
|
|
93
224
|
findChildren(node);
|
|
94
225
|
return children;
|
|
@@ -101,7 +232,7 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
101
232
|
*/
|
|
102
233
|
|
|
103
234
|
|
|
104
|
-
function unflattenr(node) {
|
|
235
|
+
function unflattenr(node, context) {
|
|
105
236
|
if (!node.args || node.args.length === 0) {
|
|
106
237
|
return;
|
|
107
238
|
}
|
|
@@ -110,10 +241,10 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
110
241
|
var l = node.args.length;
|
|
111
242
|
|
|
112
243
|
for (var i = 0; i < l; i++) {
|
|
113
|
-
unflattenr(node.args[i]);
|
|
244
|
+
unflattenr(node.args[i], context);
|
|
114
245
|
}
|
|
115
246
|
|
|
116
|
-
if (l > 2 && isAssociative(node)) {
|
|
247
|
+
if (l > 2 && isAssociative(node, context)) {
|
|
117
248
|
var curnode = node.args.pop();
|
|
118
249
|
|
|
119
250
|
while (node.args.length > 0) {
|
|
@@ -128,7 +259,7 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
128
259
|
*/
|
|
129
260
|
|
|
130
261
|
|
|
131
|
-
function unflattenl(node) {
|
|
262
|
+
function unflattenl(node, context) {
|
|
132
263
|
if (!node.args || node.args.length === 0) {
|
|
133
264
|
return;
|
|
134
265
|
}
|
|
@@ -137,10 +268,10 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
137
268
|
var l = node.args.length;
|
|
138
269
|
|
|
139
270
|
for (var i = 0; i < l; i++) {
|
|
140
|
-
unflattenl(node.args[i]);
|
|
271
|
+
unflattenl(node.args[i], context);
|
|
141
272
|
}
|
|
142
273
|
|
|
143
|
-
if (l > 2 && isAssociative(node)) {
|
|
274
|
+
if (l > 2 && isAssociative(node, context)) {
|
|
144
275
|
var curnode = node.args.shift();
|
|
145
276
|
|
|
146
277
|
while (node.args.length > 0) {
|
|
@@ -170,11 +301,16 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
170
301
|
|
|
171
302
|
return {
|
|
172
303
|
createMakeNodeFunction,
|
|
304
|
+
hasProperty,
|
|
173
305
|
isCommutative,
|
|
174
306
|
isAssociative,
|
|
307
|
+
mergeContext,
|
|
175
308
|
flatten,
|
|
176
309
|
allChildren,
|
|
177
310
|
unflattenr,
|
|
178
|
-
unflattenl
|
|
311
|
+
unflattenl,
|
|
312
|
+
defaultContext,
|
|
313
|
+
realContext,
|
|
314
|
+
positiveContext
|
|
179
315
|
};
|
|
180
316
|
});
|