mathjs 10.6.2 → 11.0.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 +74 -1
- package/README.md +1 -1
- package/lib/browser/math.js +2 -41
- package/lib/browser/math.js.LICENSE.txt +43 -0
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/core/create.js +6 -5
- package/lib/cjs/core/function/import.js +4 -14
- package/lib/cjs/core/function/typed.js +54 -12
- 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/dependenciesChainClass.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesKldivergence.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +56 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +6 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSqrtm.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesStd.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesStdTransform.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesChainClass.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +50 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +6 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesStd.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesStdTransform.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +87 -61
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +93 -69
- package/lib/cjs/entry/pureFunctionsAny.generated.js +50 -45
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +22 -19
- package/lib/cjs/expression/Parser.js +1 -1
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -5
- package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
- package/lib/cjs/expression/node/AccessorNode.js +216 -173
- package/lib/cjs/expression/node/ArrayNode.js +206 -160
- package/lib/cjs/expression/node/AssignmentNode.js +321 -270
- package/lib/cjs/expression/node/BlockNode.js +223 -172
- package/lib/cjs/expression/node/ConditionalNode.js +253 -193
- package/lib/cjs/expression/node/ConstantNode.js +216 -171
- package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
- package/lib/cjs/expression/node/FunctionNode.js +456 -416
- package/lib/cjs/expression/node/IndexNode.js +256 -210
- package/lib/cjs/expression/node/Node.js +411 -378
- package/lib/cjs/expression/node/ObjectNode.js +223 -178
- package/lib/cjs/expression/node/OperatorNode.js +474 -397
- package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
- package/lib/cjs/expression/node/RangeNode.js +272 -224
- package/lib/cjs/expression/node/RelationalNode.js +246 -195
- package/lib/cjs/expression/node/SymbolNode.js +219 -172
- package/lib/cjs/expression/node/utils/access.js +1 -1
- package/lib/cjs/expression/node/utils/assign.js +1 -1
- package/lib/cjs/expression/operators.js +117 -23
- package/lib/cjs/expression/parse.js +37 -19
- package/lib/cjs/expression/transform/std.transform.js +3 -1
- package/lib/cjs/factoriesAny.js +8 -0
- package/lib/cjs/factoriesNumber.js +10 -1
- package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
- package/lib/cjs/function/algebra/derivative.js +22 -30
- package/lib/cjs/function/algebra/leafCount.js +0 -3
- package/lib/cjs/function/algebra/rationalize.js +78 -108
- package/lib/cjs/function/algebra/resolve.js +53 -16
- package/lib/cjs/function/algebra/simplify/util.js +1 -1
- package/lib/cjs/function/algebra/simplify.js +87 -114
- package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
- package/lib/cjs/function/algebra/simplifyCore.js +196 -93
- 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 +9 -26
- package/lib/cjs/function/arithmetic/abs.js +7 -14
- package/lib/cjs/function/arithmetic/add.js +26 -70
- package/lib/cjs/function/arithmetic/addScalar.js +17 -9
- package/lib/cjs/function/arithmetic/cbrt.js +7 -11
- package/lib/cjs/function/arithmetic/ceil.js +56 -46
- package/lib/cjs/function/arithmetic/cube.js +5 -10
- package/lib/cjs/function/arithmetic/divide.js +7 -7
- package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
- package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
- package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
- package/lib/cjs/function/arithmetic/dotPow.js +30 -63
- package/lib/cjs/function/arithmetic/exp.js +8 -12
- package/lib/cjs/function/arithmetic/expm1.js +10 -10
- package/lib/cjs/function/arithmetic/fix.js +33 -27
- package/lib/cjs/function/arithmetic/floor.js +56 -46
- package/lib/cjs/function/arithmetic/gcd.js +27 -68
- package/lib/cjs/function/arithmetic/hypot.js +9 -5
- package/lib/cjs/function/arithmetic/invmod.js +1 -1
- package/lib/cjs/function/arithmetic/lcm.js +27 -68
- package/lib/cjs/function/arithmetic/log.js +10 -12
- package/lib/cjs/function/arithmetic/log10.js +5 -3
- package/lib/cjs/function/arithmetic/log1p.js +11 -7
- package/lib/cjs/function/arithmetic/log2.js +5 -3
- package/lib/cjs/function/arithmetic/mod.js +22 -64
- package/lib/cjs/function/arithmetic/multiply.js +40 -35
- package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
- package/lib/cjs/function/arithmetic/norm.js +1 -5
- package/lib/cjs/function/arithmetic/nthRoot.js +80 -92
- package/lib/cjs/function/arithmetic/round.js +56 -42
- package/lib/cjs/function/arithmetic/sign.js +14 -10
- package/lib/cjs/function/arithmetic/sqrt.js +5 -9
- package/lib/cjs/function/arithmetic/square.js +6 -10
- package/lib/cjs/function/arithmetic/subtract.js +44 -100
- package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
- package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
- package/lib/cjs/function/bitwise/bitAnd.js +17 -61
- package/lib/cjs/function/bitwise/bitNot.js +5 -3
- package/lib/cjs/function/bitwise/bitOr.js +16 -60
- package/lib/cjs/function/bitwise/bitXor.js +17 -61
- package/lib/cjs/function/bitwise/leftShift.js +68 -81
- package/lib/cjs/function/bitwise/rightArithShift.js +68 -81
- package/lib/cjs/function/bitwise/rightLogShift.js +68 -81
- package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
- package/lib/cjs/function/complex/arg.js +5 -3
- package/lib/cjs/function/complex/conj.js +6 -7
- package/lib/cjs/function/complex/im.js +7 -8
- package/lib/cjs/function/complex/re.js +6 -10
- package/lib/cjs/function/logical/and.js +74 -80
- package/lib/cjs/function/logical/not.js +13 -6
- package/lib/cjs/function/logical/or.js +21 -63
- package/lib/cjs/function/logical/xor.js +21 -63
- package/lib/cjs/function/matrix/diff.js +10 -7
- package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
- package/lib/cjs/function/matrix/fft.js +2 -2
- package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
- package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
- package/lib/cjs/function/matrix/ones.js +2 -1
- package/lib/cjs/function/matrix/sqrtm.js +3 -2
- package/lib/cjs/function/matrix/transpose.js +47 -48
- package/lib/cjs/function/matrix/zeros.js +2 -1
- package/lib/cjs/function/probability/factorial.js +5 -3
- package/lib/cjs/function/probability/gamma.js +38 -40
- package/lib/cjs/function/probability/kldivergence.js +5 -2
- package/lib/cjs/function/probability/lgamma.js +30 -30
- package/lib/cjs/function/probability/util/seededRNG.js +2 -2
- package/lib/cjs/function/relational/compare.js +21 -67
- package/lib/cjs/function/relational/compareNatural.js +59 -54
- package/lib/cjs/function/relational/compareText.js +10 -43
- package/lib/cjs/function/relational/compareUnits.js +24 -0
- package/lib/cjs/function/relational/equal.js +19 -80
- package/lib/cjs/function/relational/equalScalar.js +7 -9
- package/lib/cjs/function/relational/larger.js +21 -67
- package/lib/cjs/function/relational/largerEq.js +21 -67
- package/lib/cjs/function/relational/smaller.js +21 -67
- package/lib/cjs/function/relational/smallerEq.js +21 -67
- package/lib/cjs/function/relational/unequal.js +19 -80
- package/lib/cjs/function/special/erf.js +5 -3
- package/lib/cjs/function/statistics/std.js +11 -2
- package/lib/cjs/function/trigonometry/acos.js +4 -8
- package/lib/cjs/function/trigonometry/acosh.js +2 -7
- package/lib/cjs/function/trigonometry/acot.js +4 -8
- package/lib/cjs/function/trigonometry/acoth.js +4 -8
- package/lib/cjs/function/trigonometry/acsc.js +4 -8
- package/lib/cjs/function/trigonometry/acsch.js +4 -8
- package/lib/cjs/function/trigonometry/asec.js +4 -8
- package/lib/cjs/function/trigonometry/asech.js +4 -8
- package/lib/cjs/function/trigonometry/asin.js +4 -9
- package/lib/cjs/function/trigonometry/asinh.js +4 -9
- package/lib/cjs/function/trigonometry/atan.js +4 -9
- package/lib/cjs/function/trigonometry/atan2.js +24 -62
- package/lib/cjs/function/trigonometry/atanh.js +4 -9
- package/lib/cjs/function/trigonometry/cos.js +11 -20
- package/lib/cjs/function/trigonometry/cosh.js +5 -19
- package/lib/cjs/function/trigonometry/cot.js +9 -15
- package/lib/cjs/function/trigonometry/coth.js +4 -15
- package/lib/cjs/function/trigonometry/csc.js +11 -17
- package/lib/cjs/function/trigonometry/csch.js +4 -15
- package/lib/cjs/function/trigonometry/sec.js +11 -17
- package/lib/cjs/function/trigonometry/sech.js +4 -15
- package/lib/cjs/function/trigonometry/sin.js +11 -21
- package/lib/cjs/function/trigonometry/sinh.js +5 -20
- package/lib/cjs/function/trigonometry/tan.js +11 -21
- package/lib/cjs/function/trigonometry/tanh.js +5 -20
- package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
- package/lib/cjs/function/unit/to.js +7 -41
- package/lib/cjs/function/utils/hasNumericValue.js +4 -0
- package/lib/cjs/function/utils/isInteger.js +5 -3
- package/lib/cjs/function/utils/isNegative.js +10 -6
- package/lib/cjs/function/utils/isNumeric.js +5 -3
- package/lib/cjs/function/utils/isPositive.js +10 -6
- package/lib/cjs/function/utils/isPrime.js +5 -3
- package/lib/cjs/function/utils/isZero.js +10 -6
- package/lib/cjs/function/utils/numeric.js +11 -4
- package/lib/cjs/function/utils/typeOf.js +38 -44
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/plain/bignumber/index.js +1 -1
- package/lib/cjs/type/bignumber/BigNumber.js +2 -2
- package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
- package/lib/cjs/type/boolean.js +7 -5
- package/lib/cjs/type/chain/Chain.js +23 -3
- package/lib/cjs/type/complex/Complex.js +18 -14
- package/lib/cjs/type/complex/function/complex.js +6 -4
- package/lib/cjs/type/fraction/Fraction.js +10 -6
- package/lib/cjs/type/fraction/function/fraction.js +6 -4
- package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
- package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
- package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
- package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
- package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
- package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
- package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
- package/lib/cjs/type/number.js +6 -4
- package/lib/cjs/type/string.js +7 -5
- package/lib/cjs/type/unit/Unit.js +69 -21
- package/lib/cjs/type/unit/function/createUnit.js +2 -1
- package/lib/cjs/type/unit/function/unit.js +9 -3
- 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 +27 -25
- 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 +30 -57
- package/lib/cjs/utils/string.js +3 -3
- package/lib/cjs/version.js +1 -1
- package/lib/esm/core/create.js +2 -1
- package/lib/esm/core/function/import.js +2 -12
- package/lib/esm/core/function/typed.js +47 -11
- package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny.generated.js +1 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
- package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
- package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
- package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
- package/lib/esm/expression/node/AccessorNode.js +158 -153
- package/lib/esm/expression/node/ArrayNode.js +162 -154
- package/lib/esm/expression/node/AssignmentNode.js +257 -245
- package/lib/esm/expression/node/BlockNode.js +177 -163
- package/lib/esm/expression/node/ConditionalNode.js +197 -174
- package/lib/esm/expression/node/ConstantNode.js +171 -163
- package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
- package/lib/esm/expression/node/FunctionNode.js +407 -407
- package/lib/esm/expression/node/IndexNode.js +206 -198
- package/lib/esm/expression/node/Node.js +325 -325
- package/lib/esm/expression/node/ObjectNode.js +166 -157
- package/lib/esm/expression/node/OperatorNode.js +414 -377
- package/lib/esm/expression/node/ParenthesisNode.js +146 -138
- package/lib/esm/expression/node/RangeNode.js +221 -212
- package/lib/esm/expression/node/RelationalNode.js +190 -176
- package/lib/esm/expression/node/SymbolNode.js +161 -152
- package/lib/esm/expression/operators.js +96 -4
- package/lib/esm/expression/parse.js +25 -7
- package/lib/esm/expression/transform/std.transform.js +3 -1
- package/lib/esm/factoriesAny.js +1 -0
- package/lib/esm/factoriesNumber.js +1 -0
- package/lib/esm/function/algebra/derivative.js +22 -30
- package/lib/esm/function/algebra/leafCount.js +0 -3
- package/lib/esm/function/algebra/rationalize.js +83 -114
- package/lib/esm/function/algebra/resolve.js +25 -16
- package/lib/esm/function/algebra/simplify.js +82 -112
- package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
- package/lib/esm/function/algebra/simplifyCore.js +192 -91
- package/lib/esm/function/algebra/symbolicEqual.js +9 -26
- package/lib/esm/function/arithmetic/abs.js +3 -16
- package/lib/esm/function/arithmetic/add.js +21 -65
- package/lib/esm/function/arithmetic/addScalar.js +11 -5
- package/lib/esm/function/arithmetic/cbrt.js +7 -10
- package/lib/esm/function/arithmetic/ceil.js +25 -25
- package/lib/esm/function/arithmetic/cube.js +5 -9
- package/lib/esm/function/arithmetic/divide.js +7 -7
- package/lib/esm/function/arithmetic/divideScalar.js +2 -19
- package/lib/esm/function/arithmetic/dotDivide.js +22 -64
- package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
- package/lib/esm/function/arithmetic/dotPow.js +30 -62
- package/lib/esm/function/arithmetic/exp.js +8 -11
- package/lib/esm/function/arithmetic/expm1.js +10 -9
- package/lib/esm/function/arithmetic/fix.js +17 -17
- package/lib/esm/function/arithmetic/floor.js +25 -25
- package/lib/esm/function/arithmetic/gcd.js +26 -70
- package/lib/esm/function/arithmetic/hypot.js +7 -6
- package/lib/esm/function/arithmetic/lcm.js +26 -70
- package/lib/esm/function/arithmetic/log.js +7 -10
- package/lib/esm/function/arithmetic/log10.js +1 -3
- package/lib/esm/function/arithmetic/log1p.js +4 -6
- package/lib/esm/function/arithmetic/log2.js +1 -3
- package/lib/esm/function/arithmetic/mod.js +21 -62
- package/lib/esm/function/arithmetic/multiply.js +23 -27
- package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
- package/lib/esm/function/arithmetic/norm.js +0 -4
- package/lib/esm/function/arithmetic/nthRoot.js +38 -73
- package/lib/esm/function/arithmetic/round.js +26 -28
- package/lib/esm/function/arithmetic/sign.js +5 -7
- package/lib/esm/function/arithmetic/sqrt.js +5 -8
- package/lib/esm/function/arithmetic/square.js +6 -9
- package/lib/esm/function/arithmetic/subtract.js +31 -95
- package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
- package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
- package/lib/esm/function/bitwise/bitAnd.js +16 -59
- package/lib/esm/function/bitwise/bitNot.js +1 -3
- package/lib/esm/function/bitwise/bitOr.js +16 -59
- package/lib/esm/function/bitwise/bitXor.js +16 -59
- package/lib/esm/function/bitwise/leftShift.js +38 -60
- package/lib/esm/function/bitwise/rightArithShift.js +38 -60
- package/lib/esm/function/bitwise/rightLogShift.js +38 -60
- package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
- package/lib/esm/function/complex/arg.js +1 -3
- package/lib/esm/function/complex/conj.js +3 -12
- package/lib/esm/function/complex/im.js +4 -15
- package/lib/esm/function/complex/re.js +3 -15
- package/lib/esm/function/logical/and.js +35 -57
- package/lib/esm/function/logical/not.js +3 -6
- package/lib/esm/function/logical/or.js +16 -61
- package/lib/esm/function/logical/xor.js +16 -61
- package/lib/esm/function/matrix/diff.js +2 -7
- package/lib/esm/function/matrix/ones.js +2 -1
- package/lib/esm/function/matrix/sqrtm.js +3 -2
- package/lib/esm/function/matrix/transpose.js +47 -50
- package/lib/esm/function/matrix/zeros.js +2 -1
- package/lib/esm/function/probability/factorial.js +1 -3
- package/lib/esm/function/probability/gamma.js +38 -39
- package/lib/esm/function/probability/kldivergence.js +3 -2
- package/lib/esm/function/probability/lgamma.js +29 -29
- package/lib/esm/function/relational/compare.js +21 -67
- package/lib/esm/function/relational/compareNatural.js +54 -49
- package/lib/esm/function/relational/compareText.js +10 -42
- package/lib/esm/function/relational/compareUnits.js +15 -0
- package/lib/esm/function/relational/equal.js +19 -79
- package/lib/esm/function/relational/equalScalar.js +6 -9
- package/lib/esm/function/relational/larger.js +23 -73
- package/lib/esm/function/relational/largerEq.js +23 -73
- package/lib/esm/function/relational/smaller.js +23 -73
- package/lib/esm/function/relational/smallerEq.js +23 -73
- package/lib/esm/function/relational/unequal.js +19 -79
- package/lib/esm/function/special/erf.js +1 -3
- package/lib/esm/function/statistics/std.js +10 -2
- package/lib/esm/function/trigonometry/acos.js +4 -7
- package/lib/esm/function/trigonometry/acosh.js +2 -6
- package/lib/esm/function/trigonometry/acot.js +4 -7
- package/lib/esm/function/trigonometry/acoth.js +4 -7
- package/lib/esm/function/trigonometry/acsc.js +4 -7
- package/lib/esm/function/trigonometry/acsch.js +4 -7
- package/lib/esm/function/trigonometry/asec.js +4 -7
- package/lib/esm/function/trigonometry/asech.js +4 -7
- package/lib/esm/function/trigonometry/asin.js +4 -8
- package/lib/esm/function/trigonometry/asinh.js +4 -8
- package/lib/esm/function/trigonometry/atan.js +4 -8
- package/lib/esm/function/trigonometry/atan2.js +25 -64
- package/lib/esm/function/trigonometry/atanh.js +4 -8
- package/lib/esm/function/trigonometry/cos.js +11 -22
- package/lib/esm/function/trigonometry/cosh.js +5 -20
- package/lib/esm/function/trigonometry/cot.js +10 -20
- package/lib/esm/function/trigonometry/coth.js +6 -20
- package/lib/esm/function/trigonometry/csc.js +12 -22
- package/lib/esm/function/trigonometry/csch.js +6 -20
- package/lib/esm/function/trigonometry/sec.js +12 -22
- package/lib/esm/function/trigonometry/sech.js +6 -20
- package/lib/esm/function/trigonometry/sin.js +11 -23
- package/lib/esm/function/trigonometry/sinh.js +5 -21
- package/lib/esm/function/trigonometry/tan.js +11 -23
- package/lib/esm/function/trigonometry/tanh.js +5 -21
- package/lib/esm/function/trigonometry/trigUnit.js +15 -0
- package/lib/esm/function/unit/to.js +8 -43
- package/lib/esm/function/utils/hasNumericValue.js +2 -0
- package/lib/esm/function/utils/isInteger.js +1 -3
- package/lib/esm/function/utils/isNegative.js +2 -6
- package/lib/esm/function/utils/isNumeric.js +3 -9
- package/lib/esm/function/utils/isPositive.js +2 -6
- package/lib/esm/function/utils/isPrime.js +1 -3
- package/lib/esm/function/utils/isZero.js +2 -6
- package/lib/esm/function/utils/numeric.js +11 -4
- package/lib/esm/function/utils/typeOf.js +38 -44
- package/lib/esm/type/bignumber/function/bignumber.js +1 -3
- package/lib/esm/type/boolean.js +1 -3
- package/lib/esm/type/chain/Chain.js +23 -3
- package/lib/esm/type/complex/Complex.js +4 -0
- package/lib/esm/type/complex/function/complex.js +1 -3
- package/lib/esm/type/fraction/Fraction.js +4 -0
- package/lib/esm/type/fraction/function/fraction.js +1 -3
- package/lib/esm/type/matrix/DenseMatrix.js +15 -1
- package/lib/esm/type/matrix/SparseMatrix.js +9 -0
- package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
- package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
- package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
- package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
- package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
- package/lib/esm/type/number.js +1 -3
- package/lib/esm/type/string.js +1 -3
- package/lib/esm/type/unit/Unit.js +61 -13
- package/lib/esm/type/unit/function/createUnit.js +2 -1
- package/lib/esm/type/unit/function/unit.js +5 -3
- package/lib/esm/utils/is.js +18 -18
- package/lib/esm/utils/snapshot.js +22 -48
- package/lib/esm/version.js +1 -1
- package/package.json +21 -24
- package/types/index.d.ts +202 -181
- package/types/index.ts +264 -57
- package/lib/cjs/utils/polyfills.js +0 -14
- package/lib/esm/utils/polyfills.js +0 -12
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { isAccessorNode, isArrayNode, isConstantNode, isFunctionNode, isIndexNode, isObjectNode, isOperatorNode } from '../../utils/is.js';
|
|
2
|
+
import { getOperator } from '../../expression/operators.js';
|
|
2
3
|
import { createUtil } from './simplify/util.js';
|
|
3
4
|
import { factory } from '../../utils/factory.js';
|
|
4
5
|
var name = 'simplifyCore';
|
|
5
|
-
var dependencies = ['equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
|
|
6
|
+
var dependencies = ['typed', 'parse', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];
|
|
6
7
|
export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
7
8
|
var {
|
|
9
|
+
typed,
|
|
10
|
+
parse,
|
|
8
11
|
equal,
|
|
9
12
|
isZero,
|
|
10
13
|
add,
|
|
@@ -24,6 +27,14 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
|
|
|
24
27
|
} = _ref;
|
|
25
28
|
var node0 = new ConstantNode(0);
|
|
26
29
|
var node1 = new ConstantNode(1);
|
|
30
|
+
var nodeT = new ConstantNode(true);
|
|
31
|
+
var nodeF = new ConstantNode(false); // test if a node will always have a boolean value (true/false)
|
|
32
|
+
// not sure if this list is complete
|
|
33
|
+
|
|
34
|
+
function isAlwaysBoolean(node) {
|
|
35
|
+
return isOperatorNode(node) && ['and', 'not', 'or'].includes(node.op);
|
|
36
|
+
}
|
|
37
|
+
|
|
27
38
|
var {
|
|
28
39
|
hasProperty,
|
|
29
40
|
isCommutative
|
|
@@ -34,49 +45,68 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
|
|
|
34
45
|
});
|
|
35
46
|
/**
|
|
36
47
|
* simplifyCore() performs single pass simplification suitable for
|
|
37
|
-
* applications requiring ultimate performance.
|
|
38
|
-
*
|
|
39
|
-
*
|
|
48
|
+
* applications requiring ultimate performance. To roughly summarize,
|
|
49
|
+
* it handles cases along the lines of simplifyConstant() but where
|
|
50
|
+
* knowledge of a single argument is sufficient to determine the value.
|
|
51
|
+
* In contrast, simplify() extends simplifyCore() with additional passes
|
|
52
|
+
* to provide deeper simplification (such as gathering like terms).
|
|
53
|
+
*
|
|
54
|
+
* Specifically, simplifyCore:
|
|
55
|
+
*
|
|
56
|
+
* * Converts all function calls with operator equivalents to their
|
|
57
|
+
* operator forms.
|
|
58
|
+
* * Removes operators or function calls that are guaranteed to have no
|
|
59
|
+
* effect (such as unary '+').
|
|
60
|
+
* * Removes double unary '-', '~', and 'not'
|
|
61
|
+
* * Eliminates addition/subtraction of 0 and multiplication/division/powers
|
|
62
|
+
* by 1 or 0.
|
|
63
|
+
* * Converts addition of a negation into subtraction.
|
|
64
|
+
* * Eliminates logical operations with constant true or false leading
|
|
65
|
+
* arguments.
|
|
66
|
+
* * Puts constants on the left of a product, if multiplication is
|
|
67
|
+
* considered commutative by the options (which is the default)
|
|
40
68
|
*
|
|
41
69
|
* Syntax:
|
|
42
70
|
*
|
|
43
71
|
* simplifyCore(expr)
|
|
72
|
+
* simplifyCore(expr, options)
|
|
44
73
|
*
|
|
45
74
|
* Examples:
|
|
46
75
|
*
|
|
47
|
-
* const f = math.parse('2 * 1 * x ^ (
|
|
48
|
-
* math.
|
|
49
|
-
* math.simplify('2 * 1 * x ^ (
|
|
76
|
+
* const f = math.parse('2 * 1 * x ^ (1 - 0)')
|
|
77
|
+
* math.simplifyCore(f) // Node "2 * x"
|
|
78
|
+
* math.simplify('2 * 1 * x ^ (1 - 0)', [math.simplifyCore]) // Node "2 * x"
|
|
50
79
|
*
|
|
51
80
|
* See also:
|
|
52
81
|
*
|
|
53
|
-
* simplify, resolve, derivative
|
|
82
|
+
* simplify, simplifyConstant, resolve, derivative
|
|
54
83
|
*
|
|
55
|
-
* @param {Node} node
|
|
84
|
+
* @param {Node | string} node
|
|
56
85
|
* The expression to be simplified
|
|
57
86
|
* @param {Object} options
|
|
58
87
|
* Simplification options, as per simplify()
|
|
59
88
|
* @return {Node} Returns expression with basic simplifications applied
|
|
60
89
|
*/
|
|
61
90
|
|
|
62
|
-
function
|
|
91
|
+
function _simplifyCore(nodeToSimplify) {
|
|
92
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
63
93
|
var context = options ? options.context : undefined;
|
|
64
94
|
|
|
65
|
-
if (hasProperty(
|
|
95
|
+
if (hasProperty(nodeToSimplify, 'trivial', context)) {
|
|
66
96
|
// This node does nothing if it has only one argument, so if so,
|
|
67
97
|
// return that argument simplified
|
|
68
|
-
if (isFunctionNode(
|
|
69
|
-
return
|
|
98
|
+
if (isFunctionNode(nodeToSimplify) && nodeToSimplify.args.length === 1) {
|
|
99
|
+
return _simplifyCore(nodeToSimplify.args[0], options);
|
|
70
100
|
} // For other node types, we try the generic methods
|
|
71
101
|
|
|
72
102
|
|
|
73
103
|
var simpChild = false;
|
|
74
104
|
var childCount = 0;
|
|
75
|
-
|
|
105
|
+
nodeToSimplify.forEach(c => {
|
|
76
106
|
++childCount;
|
|
77
107
|
|
|
78
108
|
if (childCount === 1) {
|
|
79
|
-
simpChild =
|
|
109
|
+
simpChild = _simplifyCore(c, options);
|
|
80
110
|
}
|
|
81
111
|
});
|
|
82
112
|
|
|
@@ -85,33 +115,77 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
|
|
|
85
115
|
}
|
|
86
116
|
}
|
|
87
117
|
|
|
118
|
+
var node = nodeToSimplify;
|
|
119
|
+
|
|
120
|
+
if (isFunctionNode(node)) {
|
|
121
|
+
var op = getOperator(node.name);
|
|
122
|
+
|
|
123
|
+
if (op) {
|
|
124
|
+
// Replace FunctionNode with a new OperatorNode
|
|
125
|
+
if (node.args.length > 2 && hasProperty(node, 'associative', context)) {
|
|
126
|
+
// unflatten into binary operations since that's what simplifyCore handles
|
|
127
|
+
while (node.args.length > 2) {
|
|
128
|
+
var last = node.args.pop();
|
|
129
|
+
var seclast = node.args.pop();
|
|
130
|
+
node.args.push(new OperatorNode(op, node.name, [last, seclast]));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
node = new OperatorNode(op, node.name, node.args);
|
|
135
|
+
} else {
|
|
136
|
+
return new FunctionNode(_simplifyCore(node.fn), node.args.map(n => _simplifyCore(n, options)));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
88
140
|
if (isOperatorNode(node) && node.isUnary()) {
|
|
89
|
-
var a0 =
|
|
141
|
+
var a0 = _simplifyCore(node.args[0], options);
|
|
142
|
+
|
|
143
|
+
if (node.op === '~') {
|
|
144
|
+
// bitwise not
|
|
145
|
+
if (isOperatorNode(a0) && a0.isUnary() && a0.op === '~') {
|
|
146
|
+
return a0.args[0];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (node.op === 'not') {
|
|
151
|
+
// logical not
|
|
152
|
+
if (isOperatorNode(a0) && a0.isUnary() && a0.op === 'not') {
|
|
153
|
+
// Has the effect of turning the argument into a boolean
|
|
154
|
+
// So can only eliminate the double negation if
|
|
155
|
+
// the inside is already boolean
|
|
156
|
+
if (isAlwaysBoolean(a0.args[0])) {
|
|
157
|
+
return a0.args[0];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
var finish = true;
|
|
90
163
|
|
|
91
164
|
if (node.op === '-') {
|
|
92
165
|
// unary minus
|
|
93
166
|
if (isOperatorNode(a0)) {
|
|
167
|
+
if (a0.isBinary() && a0.fn === 'subtract') {
|
|
168
|
+
node = new OperatorNode('-', 'subtract', [a0.args[1], a0.args[0]]);
|
|
169
|
+
finish = false; // continue to process the new binary node
|
|
170
|
+
}
|
|
171
|
+
|
|
94
172
|
if (a0.isUnary() && a0.op === '-') {
|
|
95
173
|
return a0.args[0];
|
|
96
|
-
} else if (a0.isBinary() && a0.fn === 'subtract') {
|
|
97
|
-
return new OperatorNode('-', 'subtract', [a0.args[1], a0.args[0]]);
|
|
98
174
|
}
|
|
99
175
|
}
|
|
100
|
-
|
|
101
|
-
return new OperatorNode(node.op, node.fn, [a0]);
|
|
102
176
|
}
|
|
103
|
-
} else if (isOperatorNode(node) && node.isBinary()) {
|
|
104
|
-
var _a = simplifyCore(node.args[0], options);
|
|
105
177
|
|
|
106
|
-
|
|
178
|
+
if (finish) return new OperatorNode(node.op, node.fn, [a0]);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (isOperatorNode(node) && node.isBinary()) {
|
|
182
|
+
var _a = _simplifyCore(node.args[0], options);
|
|
183
|
+
|
|
184
|
+
var a1 = _simplifyCore(node.args[1], options);
|
|
107
185
|
|
|
108
186
|
if (node.op === '+') {
|
|
109
|
-
if (isConstantNode(_a)) {
|
|
110
|
-
|
|
111
|
-
return a1;
|
|
112
|
-
} else if (isConstantNode(a1)) {
|
|
113
|
-
return new ConstantNode(add(_a.value, a1.value));
|
|
114
|
-
}
|
|
187
|
+
if (isConstantNode(_a) && isZero(_a.value)) {
|
|
188
|
+
return a1;
|
|
115
189
|
}
|
|
116
190
|
|
|
117
191
|
if (isConstantNode(a1) && isZero(a1.value)) {
|
|
@@ -119,39 +193,33 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
|
|
|
119
193
|
}
|
|
120
194
|
|
|
121
195
|
if (isOperatorNode(a1) && a1.isUnary() && a1.op === '-') {
|
|
122
|
-
|
|
196
|
+
a1 = a1.args[0];
|
|
197
|
+
node = new OperatorNode('-', 'subtract', [_a, a1]);
|
|
123
198
|
}
|
|
199
|
+
}
|
|
124
200
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return new ConstantNode(subtract(_a.value, a1.value));
|
|
130
|
-
} else if (isZero(_a.value)) {
|
|
131
|
-
return new OperatorNode('-', 'unaryMinus', [a1]);
|
|
132
|
-
}
|
|
133
|
-
} // if (node.fn === "subtract" && node.args.length === 2) {
|
|
201
|
+
if (node.op === '-') {
|
|
202
|
+
if (isOperatorNode(a1) && a1.isUnary() && a1.op === '-') {
|
|
203
|
+
return _simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]), options);
|
|
204
|
+
}
|
|
134
205
|
|
|
206
|
+
if (isConstantNode(_a) && isZero(_a.value)) {
|
|
207
|
+
return _simplifyCore(new OperatorNode('-', 'unaryMinus', [a1]));
|
|
208
|
+
}
|
|
135
209
|
|
|
136
|
-
if (
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
210
|
+
if (isConstantNode(a1) && isZero(a1.value)) {
|
|
211
|
+
return _a;
|
|
212
|
+
}
|
|
140
213
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
214
|
+
return new OperatorNode(node.op, node.fn, [_a, a1]);
|
|
215
|
+
}
|
|
144
216
|
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
} else if (node.op === '*') {
|
|
217
|
+
if (node.op === '*') {
|
|
148
218
|
if (isConstantNode(_a)) {
|
|
149
219
|
if (isZero(_a.value)) {
|
|
150
220
|
return node0;
|
|
151
221
|
} else if (equal(_a.value, 1)) {
|
|
152
222
|
return a1;
|
|
153
|
-
} else if (isConstantNode(a1)) {
|
|
154
|
-
return new ConstantNode(multiply(_a.value, a1.value));
|
|
155
223
|
}
|
|
156
224
|
}
|
|
157
225
|
|
|
@@ -160,76 +228,109 @@ export var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref
|
|
|
160
228
|
return node0;
|
|
161
229
|
} else if (equal(a1.value, 1)) {
|
|
162
230
|
return _a;
|
|
163
|
-
} else if (isOperatorNode(_a) && _a.isBinary() && _a.op === node.op && isCommutative(node, context)) {
|
|
164
|
-
var a00 = _a.args[0];
|
|
165
|
-
|
|
166
|
-
if (isConstantNode(a00)) {
|
|
167
|
-
var a00a1 = new ConstantNode(multiply(a00.value, a1.value));
|
|
168
|
-
return new OperatorNode(node.op, node.fn, [a00a1, _a.args[1]], node.implicit); // constants on left
|
|
169
|
-
}
|
|
170
231
|
}
|
|
171
232
|
|
|
172
233
|
if (isCommutative(node, context)) {
|
|
173
234
|
return new OperatorNode(node.op, node.fn, [a1, _a], node.implicit); // constants on left
|
|
174
|
-
} else {
|
|
175
|
-
return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
|
|
176
235
|
}
|
|
177
236
|
}
|
|
178
237
|
|
|
179
238
|
return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
if (node.op === '/') {
|
|
242
|
+
if (isConstantNode(_a) && isZero(_a.value)) {
|
|
243
|
+
return node0;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (isConstantNode(a1) && equal(a1.value, 1)) {
|
|
247
|
+
return _a;
|
|
187
248
|
}
|
|
188
249
|
|
|
189
250
|
return new OperatorNode(node.op, node.fn, [_a, a1]);
|
|
190
|
-
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (node.op === '^') {
|
|
191
254
|
if (isConstantNode(a1)) {
|
|
192
255
|
if (isZero(a1.value)) {
|
|
193
256
|
return node1;
|
|
194
257
|
} else if (equal(a1.value, 1)) {
|
|
195
258
|
return _a;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (node.op === 'and') {
|
|
264
|
+
if (isConstantNode(_a)) {
|
|
265
|
+
if (_a.value) {
|
|
266
|
+
if (isAlwaysBoolean(a1)) return a1;
|
|
196
267
|
} else {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
268
|
+
return nodeF;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (isConstantNode(a1)) {
|
|
273
|
+
if (a1.value) {
|
|
274
|
+
if (isAlwaysBoolean(_a)) return _a;
|
|
275
|
+
} else {
|
|
276
|
+
return nodeF;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (node.op === 'or') {
|
|
282
|
+
if (isConstantNode(_a)) {
|
|
283
|
+
if (_a.value) {
|
|
284
|
+
return nodeT;
|
|
285
|
+
} else {
|
|
286
|
+
if (isAlwaysBoolean(a1)) return a1;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (isConstantNode(a1)) {
|
|
291
|
+
if (a1.value) {
|
|
292
|
+
return nodeT;
|
|
293
|
+
} else {
|
|
294
|
+
if (isAlwaysBoolean(_a)) return _a;
|
|
207
295
|
}
|
|
208
296
|
}
|
|
209
297
|
}
|
|
210
298
|
|
|
211
299
|
return new OperatorNode(node.op, node.fn, [_a, a1]);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
return new
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
return new
|
|
220
|
-
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
if (isOperatorNode(node)) {
|
|
303
|
+
return new OperatorNode(node.op, node.fn, node.args.map(a => _simplifyCore(a, options)));
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (isArrayNode(node)) {
|
|
307
|
+
return new ArrayNode(node.items.map(n => _simplifyCore(n, options)));
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (isAccessorNode(node)) {
|
|
311
|
+
return new AccessorNode(_simplifyCore(node.object, options), _simplifyCore(node.index, options));
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (isIndexNode(node)) {
|
|
315
|
+
return new IndexNode(node.dimensions.map(n => _simplifyCore(n, options)));
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
if (isObjectNode(node)) {
|
|
221
319
|
var newProps = {};
|
|
222
320
|
|
|
223
321
|
for (var prop in node.properties) {
|
|
224
|
-
newProps[prop] =
|
|
322
|
+
newProps[prop] = _simplifyCore(node.properties[prop], options);
|
|
225
323
|
}
|
|
226
324
|
|
|
227
325
|
return new ObjectNode(newProps);
|
|
228
|
-
}
|
|
229
|
-
|
|
326
|
+
} // cannot simplify
|
|
327
|
+
|
|
230
328
|
|
|
231
329
|
return node;
|
|
232
330
|
}
|
|
233
331
|
|
|
234
|
-
return
|
|
332
|
+
return typed(name, {
|
|
333
|
+
Node: _simplifyCore,
|
|
334
|
+
'Node,Object': _simplifyCore
|
|
335
|
+
});
|
|
235
336
|
});
|
|
@@ -49,32 +49,15 @@ export var createSymbolicEqual = /* #__PURE__ */factory(name, dependencies, _ref
|
|
|
49
49
|
* Returns true if a valid manipulation making the expressions equal
|
|
50
50
|
* is found.
|
|
51
51
|
*/
|
|
52
|
+
function _symbolicEqual(e1, e2) {
|
|
53
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
54
|
+
var diff = new OperatorNode('-', 'subtract', [e1, e2]);
|
|
55
|
+
var simplified = simplify(diff, {}, options);
|
|
56
|
+
return isConstantNode(simplified) && !simplified.value;
|
|
57
|
+
}
|
|
58
|
+
|
|
52
59
|
return typed(name, {
|
|
53
|
-
'
|
|
54
|
-
|
|
55
|
-
},
|
|
56
|
-
'string, string, Object': function stringStringObject(s1, s2, options) {
|
|
57
|
-
return this(parse(s1), parse(s2), options);
|
|
58
|
-
},
|
|
59
|
-
'Node, string': function NodeString(e1, s2) {
|
|
60
|
-
return this(e1, parse(s2), {});
|
|
61
|
-
},
|
|
62
|
-
'Node, string, Object': function NodeStringObject(e1, s2, options) {
|
|
63
|
-
return this(e1, parse(s2), options);
|
|
64
|
-
},
|
|
65
|
-
'string, Node': function stringNode(s1, e2) {
|
|
66
|
-
return this(parse(s1), e2, {});
|
|
67
|
-
},
|
|
68
|
-
'string, Node, Object': function stringNodeObject(s1, e2, options) {
|
|
69
|
-
return this(parse(s1), e2, options);
|
|
70
|
-
},
|
|
71
|
-
'Node, Node': function NodeNode(e1, e2) {
|
|
72
|
-
return this(e1, e2, {});
|
|
73
|
-
},
|
|
74
|
-
'Node, Node, Object': function NodeNodeObject(e1, e2, options) {
|
|
75
|
-
var diff = new OperatorNode('-', 'subtract', [e1, e2]);
|
|
76
|
-
var simplified = simplify(diff, {}, options);
|
|
77
|
-
return isConstantNode(simplified) && !simplified.value;
|
|
78
|
-
}
|
|
60
|
+
'Node, Node': _symbolicEqual,
|
|
61
|
+
'Node, Node, Object': _symbolicEqual
|
|
79
62
|
});
|
|
80
63
|
});
|
|
@@ -34,21 +34,8 @@ export var createAbs = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
34
34
|
*/
|
|
35
35
|
return typed(name, {
|
|
36
36
|
number: absNumber,
|
|
37
|
-
Complex:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
BigNumber: function BigNumber(x) {
|
|
41
|
-
return x.abs();
|
|
42
|
-
},
|
|
43
|
-
Fraction: function Fraction(x) {
|
|
44
|
-
return x.abs();
|
|
45
|
-
},
|
|
46
|
-
'Array | Matrix': function ArrayMatrix(x) {
|
|
47
|
-
// deep map collection, skip zeros since abs(0) = 0
|
|
48
|
-
return deepMap(x, this, true);
|
|
49
|
-
},
|
|
50
|
-
Unit: function Unit(x) {
|
|
51
|
-
return x.abs();
|
|
52
|
-
}
|
|
37
|
+
'Complex | BigNumber | Fraction | Unit': x => x.abs(),
|
|
38
|
+
// deep map collection, skip zeros since abs(0) = 0
|
|
39
|
+
'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self, true))
|
|
53
40
|
});
|
|
54
41
|
});
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { factory } from '../../utils/factory.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';
|
|
7
|
-
import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';
|
|
2
|
+
import { createMatAlgo01xDSid } from '../../type/matrix/utils/matAlgo01xDSid.js';
|
|
3
|
+
import { createMatAlgo04xSidSid } from '../../type/matrix/utils/matAlgo04xSidSid.js';
|
|
4
|
+
import { createMatAlgo10xSids } from '../../type/matrix/utils/matAlgo10xSids.js';
|
|
5
|
+
import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
|
|
8
6
|
var name = 'add';
|
|
9
7
|
var dependencies = ['typed', 'matrix', 'addScalar', 'equalScalar', 'DenseMatrix', 'SparseMatrix'];
|
|
10
8
|
export var createAdd = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
@@ -16,22 +14,20 @@ export var createAdd = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
16
14
|
DenseMatrix,
|
|
17
15
|
SparseMatrix
|
|
18
16
|
} = _ref;
|
|
19
|
-
var
|
|
17
|
+
var matAlgo01xDSid = createMatAlgo01xDSid({
|
|
20
18
|
typed
|
|
21
19
|
});
|
|
22
|
-
var
|
|
20
|
+
var matAlgo04xSidSid = createMatAlgo04xSidSid({
|
|
23
21
|
typed,
|
|
24
22
|
equalScalar
|
|
25
23
|
});
|
|
26
|
-
var
|
|
24
|
+
var matAlgo10xSids = createMatAlgo10xSids({
|
|
27
25
|
typed,
|
|
28
26
|
DenseMatrix
|
|
29
27
|
});
|
|
30
|
-
var
|
|
31
|
-
typed
|
|
32
|
-
|
|
33
|
-
var algorithm14 = createAlgorithm14({
|
|
34
|
-
typed
|
|
28
|
+
var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
|
|
29
|
+
typed,
|
|
30
|
+
matrix
|
|
35
31
|
});
|
|
36
32
|
/**
|
|
37
33
|
* Add two or more values, `x + y`.
|
|
@@ -68,61 +64,21 @@ export var createAdd = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
68
64
|
* @return {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} Sum of `x` and `y`
|
|
69
65
|
*/
|
|
70
66
|
|
|
71
|
-
return typed(name,
|
|
72
|
-
// we extend the signatures of addScalar with signatures dealing with matrices
|
|
73
|
-
'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {
|
|
74
|
-
return algorithm13(x, y, addScalar);
|
|
75
|
-
},
|
|
76
|
-
'DenseMatrix, SparseMatrix': function DenseMatrixSparseMatrix(x, y) {
|
|
77
|
-
return algorithm01(x, y, addScalar, false);
|
|
78
|
-
},
|
|
79
|
-
'SparseMatrix, DenseMatrix': function SparseMatrixDenseMatrix(x, y) {
|
|
80
|
-
return algorithm01(y, x, addScalar, true);
|
|
81
|
-
},
|
|
82
|
-
'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {
|
|
83
|
-
return algorithm04(x, y, addScalar);
|
|
84
|
-
},
|
|
85
|
-
'Array, Array': function ArrayArray(x, y) {
|
|
86
|
-
// use matrix implementation
|
|
87
|
-
return this(matrix(x), matrix(y)).valueOf();
|
|
88
|
-
},
|
|
89
|
-
'Array, Matrix': function ArrayMatrix(x, y) {
|
|
90
|
-
// use matrix implementation
|
|
91
|
-
return this(matrix(x), y);
|
|
92
|
-
},
|
|
93
|
-
'Matrix, Array': function MatrixArray(x, y) {
|
|
94
|
-
// use matrix implementation
|
|
95
|
-
return this(x, matrix(y));
|
|
96
|
-
},
|
|
97
|
-
'DenseMatrix, any': function DenseMatrixAny(x, y) {
|
|
98
|
-
return algorithm14(x, y, addScalar, false);
|
|
99
|
-
},
|
|
100
|
-
'SparseMatrix, any': function SparseMatrixAny(x, y) {
|
|
101
|
-
return algorithm10(x, y, addScalar, false);
|
|
102
|
-
},
|
|
103
|
-
'any, DenseMatrix': function anyDenseMatrix(x, y) {
|
|
104
|
-
return algorithm14(y, x, addScalar, true);
|
|
105
|
-
},
|
|
106
|
-
'any, SparseMatrix': function anySparseMatrix(x, y) {
|
|
107
|
-
return algorithm10(y, x, addScalar, true);
|
|
108
|
-
},
|
|
109
|
-
'Array, any': function ArrayAny(x, y) {
|
|
110
|
-
// use matrix implementation
|
|
111
|
-
return algorithm14(matrix(x), y, addScalar, false).valueOf();
|
|
112
|
-
},
|
|
113
|
-
'any, Array': function anyArray(x, y) {
|
|
114
|
-
// use matrix implementation
|
|
115
|
-
return algorithm14(matrix(y), x, addScalar, true).valueOf();
|
|
116
|
-
},
|
|
67
|
+
return typed(name, {
|
|
117
68
|
'any, any': addScalar,
|
|
118
|
-
'any, any, ...any':
|
|
119
|
-
var result =
|
|
69
|
+
'any, any, ...any': typed.referToSelf(self => (x, y, rest) => {
|
|
70
|
+
var result = self(x, y);
|
|
120
71
|
|
|
121
72
|
for (var i = 0; i < rest.length; i++) {
|
|
122
|
-
result =
|
|
73
|
+
result = self(result, rest[i]);
|
|
123
74
|
}
|
|
124
75
|
|
|
125
76
|
return result;
|
|
126
|
-
}
|
|
127
|
-
},
|
|
77
|
+
})
|
|
78
|
+
}, matrixAlgorithmSuite({
|
|
79
|
+
elop: addScalar,
|
|
80
|
+
DS: matAlgo01xDSid,
|
|
81
|
+
SS: matAlgo04xSidSid,
|
|
82
|
+
Ss: matAlgo10xSids
|
|
83
|
+
}));
|
|
128
84
|
});
|
|
@@ -30,14 +30,20 @@ export var createAddScalar = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
|
30
30
|
'Fraction, Fraction': function FractionFraction(x, y) {
|
|
31
31
|
return x.add(y);
|
|
32
32
|
},
|
|
33
|
-
'Unit, Unit':
|
|
34
|
-
if (x.value === null || x.value === undefined)
|
|
35
|
-
|
|
33
|
+
'Unit, Unit': typed.referToSelf(self => (x, y) => {
|
|
34
|
+
if (x.value === null || x.value === undefined) {
|
|
35
|
+
throw new Error('Parameter x contains a unit with undefined value');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (y.value === null || y.value === undefined) {
|
|
39
|
+
throw new Error('Parameter y contains a unit with undefined value');
|
|
40
|
+
}
|
|
41
|
+
|
|
36
42
|
if (!x.equalBase(y)) throw new Error('Units do not match');
|
|
37
43
|
var res = x.clone();
|
|
38
|
-
res.value =
|
|
44
|
+
res.value = typed.find(self, [res.valueType(), y.valueType()])(res.value, y.value);
|
|
39
45
|
res.fixPrefix = false;
|
|
40
46
|
return res;
|
|
41
|
-
}
|
|
47
|
+
})
|
|
42
48
|
});
|
|
43
49
|
});
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { factory } from '../../utils/factory.js';
|
|
2
2
|
import { isBigNumber, isComplex, isFraction } from '../../utils/is.js';
|
|
3
|
-
import { deepMap } from '../../utils/collection.js';
|
|
4
3
|
import { cbrtNumber } from '../../plain/number/index.js';
|
|
5
4
|
var name = 'cbrt';
|
|
6
5
|
var dependencies = ['config', 'typed', 'isNegative', 'unaryMinus', 'matrix', 'Complex', 'BigNumber', 'Fraction'];
|
|
@@ -19,7 +18,9 @@ export var createCbrt = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
19
18
|
/**
|
|
20
19
|
* Calculate the cubic root of a value.
|
|
21
20
|
*
|
|
22
|
-
*
|
|
21
|
+
* To avoid confusion with the matrix cube root, this function does not
|
|
22
|
+
* apply to matrices. For a matrix, to take the cube root elementwise,
|
|
23
|
+
* see the examples.
|
|
23
24
|
*
|
|
24
25
|
* Syntax:
|
|
25
26
|
*
|
|
@@ -32,7 +33,7 @@ export var createCbrt = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
32
33
|
* math.cube(3) // returns 27
|
|
33
34
|
* math.cbrt(-64) // returns -4
|
|
34
35
|
* math.cbrt(math.unit('27 m^3')) // returns Unit 3 m
|
|
35
|
-
* math.
|
|
36
|
+
* math.map([27, 64, 125], x => math.cbrt(x)) // returns [3, 4, 5]
|
|
36
37
|
*
|
|
37
38
|
* const x = math.complex('8i')
|
|
38
39
|
* math.cbrt(x) // returns Complex 1.7320508075689 + i
|
|
@@ -46,13 +47,13 @@ export var createCbrt = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
46
47
|
*
|
|
47
48
|
* square, sqrt, cube
|
|
48
49
|
*
|
|
49
|
-
* @param {number | BigNumber | Complex | Unit
|
|
50
|
+
* @param {number | BigNumber | Complex | Unit} x
|
|
50
51
|
* Value for which to calculate the cubic root.
|
|
51
52
|
* @param {boolean} [allRoots] Optional, false by default. Only applicable
|
|
52
53
|
* when `x` is a number or complex number. If true, all complex
|
|
53
54
|
* roots are returned, if false (default) the principal root is
|
|
54
55
|
* returned.
|
|
55
|
-
* @return {number | BigNumber | Complex | Unit
|
|
56
|
+
* @return {number | BigNumber | Complex | Unit}
|
|
56
57
|
* Returns the cubic root of `x`
|
|
57
58
|
*/
|
|
58
59
|
return typed(name, {
|
|
@@ -64,11 +65,7 @@ export var createCbrt = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
64
65
|
BigNumber: function BigNumber(x) {
|
|
65
66
|
return x.cbrt();
|
|
66
67
|
},
|
|
67
|
-
Unit: _cbrtUnit
|
|
68
|
-
'Array | Matrix': function ArrayMatrix(x) {
|
|
69
|
-
// deep map collection, skip zeros since cbrt(0) = 0
|
|
70
|
-
return deepMap(x, this, true);
|
|
71
|
-
}
|
|
68
|
+
Unit: _cbrtUnit
|
|
72
69
|
});
|
|
73
70
|
/**
|
|
74
71
|
* Calculate the cubic root for a complex number
|