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
|
@@ -5,12 +5,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.createSimplifyCore = void 0;
|
|
7
7
|
|
|
8
|
-
var _is = require("
|
|
8
|
+
var _is = require("../../utils/is.js");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _util = require("./simplify/util.js");
|
|
11
|
+
|
|
12
|
+
var _factory = require("../../utils/factory.js");
|
|
11
13
|
|
|
12
14
|
var name = 'simplifyCore';
|
|
13
|
-
var dependencies = ['equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode'];
|
|
15
|
+
var dependencies = ['equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
|
|
14
16
|
var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
15
17
|
var equal = _ref.equal,
|
|
16
18
|
isZero = _ref.isZero,
|
|
@@ -26,15 +28,18 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
|
26
28
|
IndexNode = _ref.IndexNode,
|
|
27
29
|
ObjectNode = _ref.ObjectNode,
|
|
28
30
|
OperatorNode = _ref.OperatorNode,
|
|
29
|
-
ParenthesisNode = _ref.ParenthesisNode
|
|
31
|
+
ParenthesisNode = _ref.ParenthesisNode,
|
|
32
|
+
SymbolNode = _ref.SymbolNode;
|
|
30
33
|
var node0 = new ConstantNode(0);
|
|
31
34
|
var node1 = new ConstantNode(1);
|
|
32
35
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
36
|
+
var _createUtil = (0, _util.createUtil)({
|
|
37
|
+
FunctionNode: FunctionNode,
|
|
38
|
+
OperatorNode: OperatorNode,
|
|
39
|
+
SymbolNode: SymbolNode
|
|
40
|
+
}),
|
|
41
|
+
hasProperty = _createUtil.hasProperty,
|
|
42
|
+
isCommutative = _createUtil.isCommutative;
|
|
38
43
|
/**
|
|
39
44
|
* simplifyCore() performs single pass simplification suitable for
|
|
40
45
|
* applications requiring ultimate performance. In contrast, simplify()
|
|
@@ -43,31 +48,54 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
|
43
48
|
*
|
|
44
49
|
* Syntax:
|
|
45
50
|
*
|
|
46
|
-
*
|
|
51
|
+
* simplifyCore(expr)
|
|
47
52
|
*
|
|
48
53
|
* Examples:
|
|
49
54
|
*
|
|
50
55
|
* const f = math.parse('2 * 1 * x ^ (2 - 1)')
|
|
51
|
-
* math.
|
|
52
|
-
* math.simplify('2 * 1 * x ^ (2 - 1)', [math.
|
|
56
|
+
* math.simpifyCore(f) // Node {2 * x}
|
|
57
|
+
* math.simplify('2 * 1 * x ^ (2 - 1)', [math.simplifyCore]) // Node {2 * x}
|
|
53
58
|
*
|
|
54
59
|
* See also:
|
|
55
60
|
*
|
|
56
|
-
* derivative
|
|
61
|
+
* simplify, resolve, derivative
|
|
57
62
|
*
|
|
58
63
|
* @param {Node} node
|
|
59
64
|
* The expression to be simplified
|
|
65
|
+
* @param {Object} options
|
|
66
|
+
* Simplification options, as per simplify()
|
|
67
|
+
* @return {Node} Returns expression with basic simplifications applied
|
|
60
68
|
*/
|
|
61
69
|
|
|
62
70
|
|
|
63
|
-
function simplifyCore(node) {
|
|
64
|
-
|
|
65
|
-
var a0 = simplifyCore(node.args[0]);
|
|
71
|
+
function simplifyCore(node, options) {
|
|
72
|
+
var context = options ? options.context : undefined;
|
|
66
73
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
74
|
+
if (hasProperty(node, 'trivial', context)) {
|
|
75
|
+
// This node does nothing if it has only one argument, so if so,
|
|
76
|
+
// return that argument simplified
|
|
77
|
+
if ((0, _is.isFunctionNode)(node) && node.args.length === 1) {
|
|
78
|
+
return simplifyCore(node.args[0], options);
|
|
79
|
+
} // For other node types, we try the generic methods
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
var simpChild = false;
|
|
83
|
+
var childCount = 0;
|
|
84
|
+
node.forEach(function (c) {
|
|
85
|
+
++childCount;
|
|
86
|
+
|
|
87
|
+
if (childCount === 1) {
|
|
88
|
+
simpChild = simplifyCore(c, options);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
if (childCount === 1) {
|
|
93
|
+
return simpChild;
|
|
70
94
|
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if ((0, _is.isOperatorNode)(node) && node.isUnary()) {
|
|
98
|
+
var a0 = simplifyCore(node.args[0], options);
|
|
71
99
|
|
|
72
100
|
if (node.op === '-') {
|
|
73
101
|
// unary minus
|
|
@@ -82,9 +110,9 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
|
82
110
|
return new OperatorNode(node.op, node.fn, [a0]);
|
|
83
111
|
}
|
|
84
112
|
} else if ((0, _is.isOperatorNode)(node) && node.isBinary()) {
|
|
85
|
-
var _a = simplifyCore(node.args[0]);
|
|
113
|
+
var _a = simplifyCore(node.args[0], options);
|
|
86
114
|
|
|
87
|
-
var a1 = simplifyCore(node.args[1]);
|
|
115
|
+
var a1 = simplifyCore(node.args[1], options);
|
|
88
116
|
|
|
89
117
|
if (node.op === '+') {
|
|
90
118
|
if ((0, _is.isConstantNode)(_a)) {
|
|
@@ -120,7 +148,7 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
|
120
148
|
}
|
|
121
149
|
|
|
122
150
|
if ((0, _is.isOperatorNode)(a1) && a1.isUnary() && a1.op === '-') {
|
|
123
|
-
return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]));
|
|
151
|
+
return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]), options);
|
|
124
152
|
}
|
|
125
153
|
|
|
126
154
|
return new OperatorNode(node.op, node.fn, [_a, a1]);
|
|
@@ -141,7 +169,7 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
|
141
169
|
return node0;
|
|
142
170
|
} else if (equal(a1.value, 1)) {
|
|
143
171
|
return _a;
|
|
144
|
-
} else if ((0, _is.isOperatorNode)(_a) && _a.isBinary() && _a.op === node.op) {
|
|
172
|
+
} else if ((0, _is.isOperatorNode)(_a) && _a.isBinary() && _a.op === node.op && isCommutative(node, context)) {
|
|
145
173
|
var a00 = _a.args[0];
|
|
146
174
|
|
|
147
175
|
if ((0, _is.isConstantNode)(a00)) {
|
|
@@ -150,7 +178,11 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
|
150
178
|
}
|
|
151
179
|
}
|
|
152
180
|
|
|
153
|
-
|
|
181
|
+
if (isCommutative(node, context)) {
|
|
182
|
+
return new OperatorNode(node.op, node.fn, [a1, _a], node.implicit); // constants on left
|
|
183
|
+
} else {
|
|
184
|
+
return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
|
|
185
|
+
}
|
|
154
186
|
}
|
|
155
187
|
|
|
156
188
|
return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
|
|
@@ -186,33 +218,25 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
|
186
218
|
|
|
187
219
|
return new OperatorNode(node.op, node.fn, [_a, a1]);
|
|
188
220
|
}
|
|
189
|
-
} else if ((0, _is.isParenthesisNode)(node)) {
|
|
190
|
-
var c = simplifyCore(node.content);
|
|
191
|
-
|
|
192
|
-
if ((0, _is.isParenthesisNode)(c) || (0, _is.isSymbolNode)(c) || (0, _is.isConstantNode)(c)) {
|
|
193
|
-
return c;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return new ParenthesisNode(c);
|
|
197
221
|
} else if ((0, _is.isFunctionNode)(node)) {
|
|
198
|
-
return new FunctionNode(simplifyCore(node.fn),
|
|
222
|
+
return new FunctionNode(simplifyCore(node.fn), node.args.map(function (n) {
|
|
223
|
+
return simplifyCore(n, options);
|
|
224
|
+
}));
|
|
199
225
|
} else if ((0, _is.isArrayNode)(node)) {
|
|
200
|
-
return new ArrayNode(
|
|
226
|
+
return new ArrayNode(node.items.map(function (n) {
|
|
227
|
+
return simplifyCore(n, options);
|
|
228
|
+
}));
|
|
201
229
|
} else if ((0, _is.isAccessorNode)(node)) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if ((0, _is.isParenthesisNode)(obj)) {
|
|
205
|
-
obj = obj.content;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
return new AccessorNode(obj, simplifyCore(node.index));
|
|
230
|
+
return new AccessorNode(simplifyCore(node.object, options), simplifyCore(node.index, options));
|
|
209
231
|
} else if ((0, _is.isIndexNode)(node)) {
|
|
210
|
-
return new IndexNode(
|
|
232
|
+
return new IndexNode(node.dimensions.map(function (n) {
|
|
233
|
+
return simplifyCore(n, options);
|
|
234
|
+
}));
|
|
211
235
|
} else if ((0, _is.isObjectNode)(node)) {
|
|
212
236
|
var newProps = {};
|
|
213
237
|
|
|
214
238
|
for (var prop in node.properties) {
|
|
215
|
-
newProps[prop] = simplifyCore(node.properties[prop]);
|
|
239
|
+
newProps[prop] = simplifyCore(node.properties[prop], options);
|
|
216
240
|
}
|
|
217
241
|
|
|
218
242
|
return new ObjectNode(newProps);
|
|
@@ -107,7 +107,7 @@ var createLsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
|
|
|
107
107
|
}
|
|
108
108
|
} else if (k === 0) {
|
|
109
109
|
// singular row, RHS is zero
|
|
110
|
-
var bNew = (0, _toConsumableArray2
|
|
110
|
+
var bNew = (0, _toConsumableArray2.default)(b);
|
|
111
111
|
bNew[i] = 1;
|
|
112
112
|
|
|
113
113
|
for (var _j = i + 1; _j < columns; _j++) {
|
|
@@ -187,7 +187,7 @@ var createLsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
|
|
|
187
187
|
}
|
|
188
188
|
} else if (k === 0) {
|
|
189
189
|
// singular row, RHS is zero
|
|
190
|
-
var bNew = (0, _toConsumableArray2
|
|
190
|
+
var bNew = (0, _toConsumableArray2.default)(b);
|
|
191
191
|
bNew[i] = 1;
|
|
192
192
|
|
|
193
193
|
for (var _j3 = 0, _lastIndex2 = iIndices.length; _j3 < _lastIndex2; _j3++) {
|
|
@@ -107,7 +107,7 @@ var createUsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
|
|
|
107
107
|
}
|
|
108
108
|
} else if (k === 0) {
|
|
109
109
|
// singular row, RHS is zero
|
|
110
|
-
var bNew = (0, _toConsumableArray2
|
|
110
|
+
var bNew = (0, _toConsumableArray2.default)(b);
|
|
111
111
|
bNew[i] = 1;
|
|
112
112
|
|
|
113
113
|
for (var _j = i - 1; _j >= 0; _j--) {
|
|
@@ -187,7 +187,7 @@ var createUsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
|
|
|
187
187
|
}
|
|
188
188
|
} else if (k === 0) {
|
|
189
189
|
// singular row, RHS is zero
|
|
190
|
-
var bNew = (0, _toConsumableArray2
|
|
190
|
+
var bNew = (0, _toConsumableArray2.default)(b);
|
|
191
191
|
bNew[i] = 1; // loop upper triangular
|
|
192
192
|
|
|
193
193
|
for (var _j3 = 0, _lastIndex2 = iIndices.length; _j3 < _lastIndex2; _j3++) {
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createSymbolicEqual = void 0;
|
|
7
|
+
|
|
8
|
+
var _is = require("../../utils/is.js");
|
|
9
|
+
|
|
10
|
+
var _factory = require("../../utils/factory.js");
|
|
11
|
+
|
|
12
|
+
var name = 'symbolicEqual';
|
|
13
|
+
var dependencies = ['parse', 'simplify', 'typed', 'OperatorNode'];
|
|
14
|
+
var createSymbolicEqual = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
15
|
+
var parse = _ref.parse,
|
|
16
|
+
simplify = _ref.simplify,
|
|
17
|
+
typed = _ref.typed,
|
|
18
|
+
OperatorNode = _ref.OperatorNode;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Attempts to determine if two expressions are symbolically equal, i.e.
|
|
22
|
+
* one is the result of valid algebraic manipulations on the other.
|
|
23
|
+
* Currently, this simply checks if the difference of the two expressions
|
|
24
|
+
* simplifies down to 0. So there are two important caveats:
|
|
25
|
+
* 1. whether two expressions are symbolically equal depends on the
|
|
26
|
+
* manipulations allowed. Therefore, this function takes an optional
|
|
27
|
+
* third argument, which are the options that control the behavior
|
|
28
|
+
* as documented for the `simplify()` function.
|
|
29
|
+
* 2. it is in general intractable to find the minimal simplification of
|
|
30
|
+
* an arbitrarily complicated expression. So while a `true` value
|
|
31
|
+
* of `symbolicEqual` ensures that the two expressions can be manipulated
|
|
32
|
+
* to match each other, a `false` value does not absolutely rule this out.
|
|
33
|
+
*
|
|
34
|
+
* Syntax:
|
|
35
|
+
*
|
|
36
|
+
* symbolicEqual(expr1, expr2)
|
|
37
|
+
* symbolicEqual(expr1, expr2, options)
|
|
38
|
+
*
|
|
39
|
+
* Examples:
|
|
40
|
+
*
|
|
41
|
+
* symbolicEqual('x*y', 'y*x') // true
|
|
42
|
+
* symbolicEqual('x*y', 'y*x', {context: {multiply: {commutative: false}}})
|
|
43
|
+
* //false
|
|
44
|
+
* symbolicEqual('x/y', '(y*x^(-1))^(-1)') // true
|
|
45
|
+
* symbolicEqual('abs(x)','x') // false
|
|
46
|
+
* symbolicEqual('abs(x)','x', simplify.positiveContext) // true
|
|
47
|
+
*
|
|
48
|
+
* See also:
|
|
49
|
+
*
|
|
50
|
+
* simplify, evaluate
|
|
51
|
+
*
|
|
52
|
+
* @param {Node|string} expr1 The first expression to compare
|
|
53
|
+
* @param {Node|string} expr2 The second expression to compare
|
|
54
|
+
* @param {Object} [options] Optional option object, passed to simplify
|
|
55
|
+
* @returns {boolean}
|
|
56
|
+
* Returns true if a valid manipulation making the expressions equal
|
|
57
|
+
* is found.
|
|
58
|
+
*/
|
|
59
|
+
return typed(name, {
|
|
60
|
+
'string, string': function stringString(s1, s2) {
|
|
61
|
+
return this(parse(s1), parse(s2), {});
|
|
62
|
+
},
|
|
63
|
+
'string, string, Object': function stringStringObject(s1, s2, options) {
|
|
64
|
+
return this(parse(s1), parse(s2), options);
|
|
65
|
+
},
|
|
66
|
+
'Node, string': function NodeString(e1, s2) {
|
|
67
|
+
return this(e1, parse(s2), {});
|
|
68
|
+
},
|
|
69
|
+
'Node, string, Object': function NodeStringObject(e1, s2, options) {
|
|
70
|
+
return this(e1, parse(s2), options);
|
|
71
|
+
},
|
|
72
|
+
'string, Node': function stringNode(s1, e2) {
|
|
73
|
+
return this(parse(s1), e2, {});
|
|
74
|
+
},
|
|
75
|
+
'string, Node, Object': function stringNodeObject(s1, e2, options) {
|
|
76
|
+
return this(parse(s1), e2, options);
|
|
77
|
+
},
|
|
78
|
+
'Node, Node': function NodeNode(e1, e2) {
|
|
79
|
+
return this(e1, e2, {});
|
|
80
|
+
},
|
|
81
|
+
'Node, Node, Object': function NodeNodeObject(e1, e2, options) {
|
|
82
|
+
var diff = new OperatorNode('-', 'subtract', [e1, e2]);
|
|
83
|
+
var simplified = simplify(diff, {}, options);
|
|
84
|
+
return (0, _is.isConstantNode)(simplified) && !simplified.value;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
exports.createSymbolicEqual = createSymbolicEqual;
|
|
@@ -91,7 +91,7 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
|
91
91
|
return round(x, n);
|
|
92
92
|
} else {
|
|
93
93
|
var _$split = "".concat(x, "e").split('e'),
|
|
94
|
-
_$split2 = (0, _slicedToArray2
|
|
94
|
+
_$split2 = (0, _slicedToArray2.default)(_$split, 2),
|
|
95
95
|
number = _$split2[0],
|
|
96
96
|
exponent = _$split2[1];
|
|
97
97
|
|
|
@@ -99,7 +99,7 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
|
99
99
|
|
|
100
100
|
var _$split3 = "".concat(result, "e").split('e');
|
|
101
101
|
|
|
102
|
-
var _$split4 = (0, _slicedToArray2
|
|
102
|
+
var _$split4 = (0, _slicedToArray2.default)(_$split3, 2);
|
|
103
103
|
|
|
104
104
|
number = _$split4[0];
|
|
105
105
|
exponent = _$split4[1];
|
|
@@ -123,7 +123,7 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
|
|
|
123
123
|
if ((0, _nearlyEqual.nearlyEqual)(x, round(x, n), config.epsilon)) {
|
|
124
124
|
return round(x, n);
|
|
125
125
|
} else {
|
|
126
|
-
return x.toDecimalPlaces(n.toNumber(), _decimal
|
|
126
|
+
return x.toDecimalPlaces(n.toNumber(), _decimal.default.ROUND_CEIL);
|
|
127
127
|
}
|
|
128
128
|
},
|
|
129
129
|
Fraction: function Fraction(x) {
|
|
@@ -88,7 +88,7 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
|
|
|
88
88
|
return round(x, n);
|
|
89
89
|
} else {
|
|
90
90
|
var _$split = "".concat(x, "e").split('e'),
|
|
91
|
-
_$split2 = (0, _slicedToArray2
|
|
91
|
+
_$split2 = (0, _slicedToArray2.default)(_$split, 2),
|
|
92
92
|
number = _$split2[0],
|
|
93
93
|
exponent = _$split2[1];
|
|
94
94
|
|
|
@@ -96,7 +96,7 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
|
|
|
96
96
|
|
|
97
97
|
var _$split3 = "".concat(result, "e").split('e');
|
|
98
98
|
|
|
99
|
-
var _$split4 = (0, _slicedToArray2
|
|
99
|
+
var _$split4 = (0, _slicedToArray2.default)(_$split3, 2);
|
|
100
100
|
|
|
101
101
|
number = _$split4[0];
|
|
102
102
|
exponent = _$split4[1];
|
|
@@ -120,7 +120,7 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
|
|
|
120
120
|
if ((0, _nearlyEqual.nearlyEqual)(x, round(x, n), config.epsilon)) {
|
|
121
121
|
return round(x, n);
|
|
122
122
|
} else {
|
|
123
|
-
return x.toDecimalPlaces(n.toNumber(), _decimal
|
|
123
|
+
return x.toDecimalPlaces(n.toNumber(), _decimal.default.ROUND_FLOOR);
|
|
124
124
|
}
|
|
125
125
|
},
|
|
126
126
|
Fraction: function Fraction(x) {
|
|
@@ -60,7 +60,7 @@ var createInvmod = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
|
|
|
60
60
|
res = res.valueOf();
|
|
61
61
|
|
|
62
62
|
var _res = res,
|
|
63
|
-
_res2 = (0, _slicedToArray2
|
|
63
|
+
_res2 = (0, _slicedToArray2.default)(_res, 2),
|
|
64
64
|
gcd = _res2[0],
|
|
65
65
|
inv = _res2[1];
|
|
66
66
|
|
|
@@ -25,7 +25,7 @@ var _index = require("../../plain/number/index.js");
|
|
|
25
25
|
|
|
26
26
|
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; }
|
|
27
27
|
|
|
28
|
-
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
|
|
28
|
+
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; }
|
|
29
29
|
|
|
30
30
|
var NO_INT = 'Number of decimals in function round must be an integer';
|
|
31
31
|
var name = 'round';
|
|
@@ -11,7 +11,7 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
|
|
|
11
11
|
|
|
12
12
|
var _object = require("../../../utils/object.js");
|
|
13
13
|
|
|
14
|
-
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
|
|
14
|
+
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; } } }; }
|
|
15
15
|
|
|
16
16
|
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); }
|
|
17
17
|
|
|
@@ -80,7 +80,7 @@ function createComplexEigs(_ref) {
|
|
|
80
80
|
|
|
81
81
|
if (findVectors) {
|
|
82
82
|
vectors = findEigenvectors(arr, N, C, values, prec, type);
|
|
83
|
-
vectors = matrixFromColumns.apply(void 0, (0, _toConsumableArray2
|
|
83
|
+
vectors = matrixFromColumns.apply(void 0, (0, _toConsumableArray2.default)(vectors));
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
return {
|
|
@@ -100,8 +100,9 @@ function createComplexEigs(_ref) {
|
|
|
100
100
|
function balance(arr, N, prec, type, findVectors) {
|
|
101
101
|
var big = type === 'BigNumber';
|
|
102
102
|
var cplx = type === 'Complex';
|
|
103
|
-
var
|
|
104
|
-
var one = big ? bignumber(1) : cplx ? complex(1) : 1;
|
|
103
|
+
var realzero = big ? bignumber(0) : 0;
|
|
104
|
+
var one = big ? bignumber(1) : cplx ? complex(1) : 1;
|
|
105
|
+
var realone = big ? bignumber(1) : 1; // base of the floating-point arithmetic
|
|
105
106
|
|
|
106
107
|
var radix = big ? bignumber(10) : 2;
|
|
107
108
|
var radixSq = multiplyScalar(radix, radix); // the diagonal transformation matrix R
|
|
@@ -122,12 +123,13 @@ function createComplexEigs(_ref) {
|
|
|
122
123
|
for (var i = 0; i < N; i++) {
|
|
123
124
|
// compute the taxicab norm of i-th column and row
|
|
124
125
|
// TODO optimize for complex numbers
|
|
125
|
-
var colNorm =
|
|
126
|
-
var rowNorm =
|
|
126
|
+
var colNorm = realzero;
|
|
127
|
+
var rowNorm = realzero;
|
|
127
128
|
|
|
128
129
|
for (var j = 0; j < N; j++) {
|
|
129
130
|
if (i === j) continue;
|
|
130
|
-
var c = abs(arr[i][j]);
|
|
131
|
+
var c = abs(arr[i][j]); // should be real
|
|
132
|
+
|
|
131
133
|
colNorm = addScalar(colNorm, c);
|
|
132
134
|
rowNorm = addScalar(rowNorm, c);
|
|
133
135
|
}
|
|
@@ -136,7 +138,7 @@ function createComplexEigs(_ref) {
|
|
|
136
138
|
// find integer power closest to balancing the matrix
|
|
137
139
|
// (we want to scale only by integer powers of radix,
|
|
138
140
|
// so that we don't lose any precision due to round-off)
|
|
139
|
-
var f =
|
|
141
|
+
var f = realone;
|
|
140
142
|
var _c = colNorm;
|
|
141
143
|
var rowDivRadix = divideScalar(rowNorm, radix);
|
|
142
144
|
var rowMulRadix = multiplyScalar(rowNorm, radix);
|
|
@@ -360,7 +362,7 @@ function createComplexEigs(_ref) {
|
|
|
360
362
|
} else if (n === 2 || smaller(abs(arr[n - 2][n - 3]), prec)) {
|
|
361
363
|
lastConvergenceBefore = 0;
|
|
362
364
|
var ll = eigenvalues2x2(arr[n - 2][n - 2], arr[n - 2][n - 1], arr[n - 1][n - 2], arr[n - 1][n - 1]);
|
|
363
|
-
lambdas.push.apply(lambdas, (0, _toConsumableArray2
|
|
365
|
+
lambdas.push.apply(lambdas, (0, _toConsumableArray2.default)(ll)); // keep track of transformations
|
|
364
366
|
|
|
365
367
|
if (findVectors) {
|
|
366
368
|
Sdiag.unshift(jordanBase2x2(arr[n - 2][n - 2], arr[n - 2][n - 1], arr[n - 1][n - 2], arr[n - 1][n - 1], ll[0], ll[1], prec, type));
|
|
@@ -488,7 +490,7 @@ function createComplexEigs(_ref) {
|
|
|
488
490
|
solutions.push(approxVec);
|
|
489
491
|
}
|
|
490
492
|
|
|
491
|
-
vectors.push.apply(vectors, (0, _toConsumableArray2
|
|
493
|
+
vectors.push.apply(vectors, (0, _toConsumableArray2.default)(solutions.map(function (v) {
|
|
492
494
|
return flatten(v);
|
|
493
495
|
})));
|
|
494
496
|
}
|
|
@@ -568,7 +570,7 @@ function createComplexEigs(_ref) {
|
|
|
568
570
|
for (var i = 0; i < arr.length; i++) {
|
|
569
571
|
var _arr$i;
|
|
570
572
|
|
|
571
|
-
(_arr$i = arr[i]).push.apply(_arr$i, (0, _toConsumableArray2
|
|
573
|
+
(_arr$i = arr[i]).push.apply(_arr$i, (0, _toConsumableArray2.default)(Array(N - arr[i].length).fill(0)));
|
|
572
574
|
} // add rows
|
|
573
575
|
|
|
574
576
|
|
|
@@ -15,8 +15,15 @@ var createMap = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
|
|
|
15
15
|
var typed = _ref.typed;
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
* Create a new matrix or array with the results of
|
|
19
|
-
* each entry of
|
|
18
|
+
* Create a new matrix or array with the results of a callback function executed on
|
|
19
|
+
* each entry of a given matrix/array.
|
|
20
|
+
*
|
|
21
|
+
* For each entry of the input, the callback is invoked with three arguments:
|
|
22
|
+
* the value of the entry, the index at which that entry occurs, and the full
|
|
23
|
+
* matrix/array being traversed. Note that because the matrix/array might be
|
|
24
|
+
* multidimensional, the "index" argument is always an array of numbers giving
|
|
25
|
+
* the index in each dimension. This is true even for vectors: the "index"
|
|
26
|
+
* argument is an array of length 1, rather than simply a number.
|
|
20
27
|
*
|
|
21
28
|
* Syntax:
|
|
22
29
|
*
|
|
@@ -28,15 +35,25 @@ var createMap = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
|
|
|
28
35
|
* return value * value
|
|
29
36
|
* }) // returns [1, 4, 9]
|
|
30
37
|
*
|
|
38
|
+
* // The calling convention for the callback can cause subtleties:
|
|
39
|
+
* math.map([1, 2, 3], math.format)
|
|
40
|
+
* // throws TypeError: map attempted to call 'format(1,[0])' but argument 2 of type Array does not match expected type number or function or Object or string or boolean
|
|
41
|
+
* // [This happens because `format` _can_ take a second argument,
|
|
42
|
+
* // but its semantics don't match that of the 2nd argument `map` provides]
|
|
43
|
+
*
|
|
44
|
+
* // To avoid this error, use a function that takes exactly the
|
|
45
|
+
* // desired arguments:
|
|
46
|
+
* math.map([1, 2, 3], x => math.format(x)) // returns ['1', '2', '3']
|
|
47
|
+
*
|
|
31
48
|
* See also:
|
|
32
49
|
*
|
|
33
50
|
* filter, forEach, sort
|
|
34
51
|
*
|
|
35
|
-
* @param {Matrix | Array} x The
|
|
36
|
-
* @param {Function} callback
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
52
|
+
* @param {Matrix | Array} x The input to iterate on.
|
|
53
|
+
* @param {Function} callback
|
|
54
|
+
* The function to call (as described above) on each entry of the input
|
|
55
|
+
* @return {Matrix | array}
|
|
56
|
+
* Transformed map of x; always has the same type and shape as x
|
|
40
57
|
*/
|
|
41
58
|
return typed(name, {
|
|
42
59
|
'Array, function': _map,
|
|
@@ -66,14 +83,35 @@ function _map(array, callback) {
|
|
|
66
83
|
return recurse(child, index.concat(i));
|
|
67
84
|
});
|
|
68
85
|
} else {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
86
|
+
try {
|
|
87
|
+
// invoke the callback function with the right number of arguments
|
|
88
|
+
if (args === 1) {
|
|
89
|
+
return callback(value);
|
|
90
|
+
} else if (args === 2) {
|
|
91
|
+
return callback(value, index);
|
|
92
|
+
} else {
|
|
93
|
+
// 3 or -1
|
|
94
|
+
return callback(value, index, array);
|
|
95
|
+
}
|
|
96
|
+
} catch (err) {
|
|
97
|
+
// But maybe the arguments still weren't right
|
|
98
|
+
if (err instanceof TypeError && 'data' in err && err.data.category === 'wrongType') {
|
|
99
|
+
var newmsg = "map attempted to call '".concat(err.data.fn, "(").concat(value);
|
|
100
|
+
var indexString = JSON.stringify(index);
|
|
101
|
+
|
|
102
|
+
if (args === 2) {
|
|
103
|
+
newmsg += ',' + indexString;
|
|
104
|
+
} else if (args !== 1) {
|
|
105
|
+
newmsg += ",".concat(indexString, ",").concat(array);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
newmsg += ")' but argument ".concat(err.data.index + 1, " of type ");
|
|
109
|
+
newmsg += "".concat(err.data.actual, " does not match expected type ");
|
|
110
|
+
newmsg += err.data.expected.join(' or ');
|
|
111
|
+
throw new TypeError(newmsg);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
throw err;
|
|
77
115
|
}
|
|
78
116
|
}
|
|
79
117
|
};
|
|
@@ -7,7 +7,7 @@ exports.createMatrixFromColumns = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _factory = require("../../utils/factory.js");
|
|
9
9
|
|
|
10
|
-
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
|
|
10
|
+
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; } } }; }
|
|
11
11
|
|
|
12
12
|
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); }
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ exports.createMatrixFromRows = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _factory = require("../../utils/factory.js");
|
|
9
9
|
|
|
10
|
-
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
|
|
10
|
+
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; } } }; }
|
|
11
11
|
|
|
12
12
|
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); }
|
|
13
13
|
|