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,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import { factory } from '../utils/factory.js';
|
|
3
|
-
import { isAccessorNode, isConstantNode, isFunctionNode, isOperatorNode, isSymbolNode } from '../utils/is.js';
|
|
3
|
+
import { isAccessorNode, isConstantNode, isFunctionNode, isOperatorNode, isSymbolNode, rule2Node } from '../utils/is.js';
|
|
4
4
|
import { deepMap } from '../utils/collection.js';
|
|
5
5
|
import { hasOwnProperty } from '../utils/object.js';
|
|
6
6
|
var name = 'parse';
|
|
@@ -614,7 +614,10 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
614
614
|
|
|
615
615
|
if (state.token !== '' && state.token !== '\n' && state.token !== ';') {
|
|
616
616
|
node = parseAssignment(state);
|
|
617
|
-
|
|
617
|
+
|
|
618
|
+
if (state.comment) {
|
|
619
|
+
node.comment = state.comment;
|
|
620
|
+
}
|
|
618
621
|
} // TODO: simplify this loop
|
|
619
622
|
|
|
620
623
|
|
|
@@ -632,7 +635,11 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
632
635
|
|
|
633
636
|
if (state.token !== '\n' && state.token !== ';' && state.token !== '') {
|
|
634
637
|
node = parseAssignment(state);
|
|
635
|
-
|
|
638
|
+
|
|
639
|
+
if (state.comment) {
|
|
640
|
+
node.comment = state.comment;
|
|
641
|
+
}
|
|
642
|
+
|
|
636
643
|
visible = state.token !== ';';
|
|
637
644
|
blocks.push({
|
|
638
645
|
node,
|
|
@@ -646,7 +653,10 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
646
653
|
} else {
|
|
647
654
|
if (!node) {
|
|
648
655
|
node = new ConstantNode(undefined);
|
|
649
|
-
|
|
656
|
+
|
|
657
|
+
if (state.comment) {
|
|
658
|
+
node.comment = state.comment;
|
|
659
|
+
}
|
|
650
660
|
}
|
|
651
661
|
|
|
652
662
|
return node;
|
|
@@ -1088,8 +1098,10 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
1088
1098
|
}
|
|
1089
1099
|
/**
|
|
1090
1100
|
* Infamous "rule 2" as described in https://github.com/josdejong/mathjs/issues/792#issuecomment-361065370
|
|
1101
|
+
* And as amended in https://github.com/josdejong/mathjs/issues/2370#issuecomment-1054052164
|
|
1091
1102
|
* Explicit division gets higher precedence than implicit multiplication
|
|
1092
|
-
* when the division matches this pattern:
|
|
1103
|
+
* when the division matches this pattern:
|
|
1104
|
+
* [unaryPrefixOp]?[number] / [number] [symbol]
|
|
1093
1105
|
* @return {Node} node
|
|
1094
1106
|
* @private
|
|
1095
1107
|
*/
|
|
@@ -1102,7 +1114,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
1102
1114
|
|
|
1103
1115
|
while (true) {
|
|
1104
1116
|
// Match the "number /" part of the pattern "number / number symbol"
|
|
1105
|
-
if (state.token === '/' &&
|
|
1117
|
+
if (state.token === '/' && rule2Node(last)) {
|
|
1106
1118
|
// Look ahead to see if the next token is a number
|
|
1107
1119
|
tokenStates.push(_extends({}, state));
|
|
1108
1120
|
getTokenSkipNewline(state); // Match the "number / number" part of the pattern
|
|
@@ -1796,7 +1808,13 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
1796
1808
|
var error = new SyntaxError(message + ' (char ' + c + ')');
|
|
1797
1809
|
error.char = c;
|
|
1798
1810
|
return error;
|
|
1799
|
-
}
|
|
1811
|
+
} // Now that we can parse, automatically convert strings to Nodes by parsing
|
|
1812
|
+
|
|
1800
1813
|
|
|
1814
|
+
typed.addConversion({
|
|
1815
|
+
from: 'string',
|
|
1816
|
+
to: 'Node',
|
|
1817
|
+
convert: parse
|
|
1818
|
+
});
|
|
1801
1819
|
return parse;
|
|
1802
1820
|
});
|
|
@@ -3,7 +3,7 @@ import { createStd } from '../../function/statistics/std.js';
|
|
|
3
3
|
import { errorTransform } from './utils/errorTransform.js';
|
|
4
4
|
import { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';
|
|
5
5
|
var name = 'std';
|
|
6
|
-
var dependencies = ['typed', 'sqrt', 'variance'];
|
|
6
|
+
var dependencies = ['typed', 'map', 'sqrt', 'variance'];
|
|
7
7
|
/**
|
|
8
8
|
* Attach a transform function to math.std
|
|
9
9
|
* Adds a property transform containing the transform function.
|
|
@@ -15,11 +15,13 @@ var dependencies = ['typed', 'sqrt', 'variance'];
|
|
|
15
15
|
export var createStdTransform = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
16
16
|
var {
|
|
17
17
|
typed,
|
|
18
|
+
map,
|
|
18
19
|
sqrt,
|
|
19
20
|
variance
|
|
20
21
|
} = _ref;
|
|
21
22
|
var std = createStd({
|
|
22
23
|
typed,
|
|
24
|
+
map,
|
|
23
25
|
sqrt,
|
|
24
26
|
variance
|
|
25
27
|
});
|
package/lib/esm/factoriesAny.js
CHANGED
|
@@ -248,6 +248,7 @@ export { createCatalan } from './function/combinatorics/catalan.js';
|
|
|
248
248
|
export { createComposition } from './function/combinatorics/composition.js';
|
|
249
249
|
export { createLeafCount } from './function/algebra/leafCount.js';
|
|
250
250
|
export { createSimplify } from './function/algebra/simplify.js';
|
|
251
|
+
export { createSimplifyConstant } from './function/algebra/simplifyConstant.js';
|
|
251
252
|
export { createSimplifyCore } from './function/algebra/simplifyCore.js';
|
|
252
253
|
export { createResolve } from './function/algebra/resolve.js';
|
|
253
254
|
export { createSymbolicEqual } from './function/algebra/symbolicEqual.js';
|
|
@@ -15,6 +15,7 @@ export { createChain } from './type/chain/function/chain.js'; // algebra
|
|
|
15
15
|
|
|
16
16
|
export { createResolve } from './function/algebra/resolve.js';
|
|
17
17
|
export { createSimplify } from './function/algebra/simplify.js';
|
|
18
|
+
export { createSimplifyConstant } from './function/algebra/simplifyConstant.js';
|
|
18
19
|
export { createSimplifyCore } from './function/algebra/simplifyCore.js';
|
|
19
20
|
export { createDerivative } from './function/algebra/derivative.js';
|
|
20
21
|
export { createRationalize } from './function/algebra/rationalize.js'; // arithmetic
|
|
@@ -56,39 +56,26 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
|
56
56
|
* be simplified.
|
|
57
57
|
* @return {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} The derivative of `expr`
|
|
58
58
|
*/
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
function plainDerivative(expr, variable) {
|
|
60
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
|
61
|
+
simplify: true
|
|
62
|
+
};
|
|
63
|
+
var constNodes = {};
|
|
64
|
+
constTag(constNodes, expr, variable.name);
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
var res = _derivative(expr, constNodes);
|
|
65
67
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
'Node, SymbolNode': function NodeSymbolNode(expr, variable) {
|
|
69
|
-
return this(expr, variable, {
|
|
70
|
-
simplify: true
|
|
71
|
-
});
|
|
72
|
-
},
|
|
73
|
-
'string, SymbolNode': function stringSymbolNode(expr, variable) {
|
|
74
|
-
return this(parse(expr), variable);
|
|
75
|
-
},
|
|
76
|
-
'string, SymbolNode, Object': function stringSymbolNodeObject(expr, variable, options) {
|
|
77
|
-
return this(parse(expr), variable, options);
|
|
78
|
-
},
|
|
79
|
-
'string, string': function stringString(expr, variable) {
|
|
80
|
-
return this(parse(expr), parse(variable));
|
|
81
|
-
},
|
|
82
|
-
'string, string, Object': function stringStringObject(expr, variable, options) {
|
|
83
|
-
return this(parse(expr), parse(variable), options);
|
|
84
|
-
},
|
|
85
|
-
'Node, string': function NodeString(expr, variable) {
|
|
86
|
-
return this(expr, parse(variable));
|
|
87
|
-
},
|
|
88
|
-
'Node, string, Object': function NodeStringObject(expr, variable, options) {
|
|
89
|
-
return this(expr, parse(variable), options);
|
|
90
|
-
} // TODO: replace the 8 signatures above with 4 as soon as typed-function supports optional arguments
|
|
68
|
+
return options.simplify ? simplify(res) : res;
|
|
69
|
+
}
|
|
91
70
|
|
|
71
|
+
typed.addConversion({
|
|
72
|
+
from: 'identifier',
|
|
73
|
+
to: 'SymbolNode',
|
|
74
|
+
convert: parse
|
|
75
|
+
});
|
|
76
|
+
var derivative = typed(name, {
|
|
77
|
+
'Node, SymbolNode': plainDerivative,
|
|
78
|
+
'Node, SymbolNode, Object': plainDerivative
|
|
92
79
|
/* TODO: implement and test syntax with order of derivatives -> implement as an option {order: number}
|
|
93
80
|
'Node, SymbolNode, ConstantNode': function (expr, variable, {order}) {
|
|
94
81
|
let res = expr
|
|
@@ -102,6 +89,11 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
|
102
89
|
*/
|
|
103
90
|
|
|
104
91
|
});
|
|
92
|
+
typed.removeConversion({
|
|
93
|
+
from: 'identifier',
|
|
94
|
+
to: 'SymbolNode',
|
|
95
|
+
convert: parse
|
|
96
|
+
});
|
|
105
97
|
derivative._simplify = true;
|
|
106
98
|
|
|
107
99
|
derivative.toTex = function (deriv) {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { isInteger } from '../../utils/number.js';
|
|
2
2
|
import { factory } from '../../utils/factory.js';
|
|
3
|
-
import { createSimplifyConstant } from './simplify/simplifyConstant.js';
|
|
4
3
|
var name = 'rationalize';
|
|
5
|
-
var dependencies = ['config', 'typed', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'parse', 'simplifyCore', 'simplify', '?bignumber', '?fraction', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode', 'ParenthesisNode'];
|
|
4
|
+
var dependencies = ['config', 'typed', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'parse', 'simplifyConstant', 'simplifyCore', 'simplify', '?bignumber', '?fraction', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode', 'ParenthesisNode'];
|
|
6
5
|
export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
7
6
|
var {
|
|
8
7
|
config,
|
|
@@ -15,6 +14,7 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
|
15
14
|
divide,
|
|
16
15
|
pow,
|
|
17
16
|
parse,
|
|
17
|
+
simplifyConstant,
|
|
18
18
|
simplifyCore,
|
|
19
19
|
simplify,
|
|
20
20
|
fraction,
|
|
@@ -31,22 +31,7 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
|
31
31
|
SymbolNode,
|
|
32
32
|
ParenthesisNode
|
|
33
33
|
} = _ref;
|
|
34
|
-
|
|
35
|
-
typed,
|
|
36
|
-
config,
|
|
37
|
-
mathWithTransform,
|
|
38
|
-
matrix,
|
|
39
|
-
fraction,
|
|
40
|
-
bignumber,
|
|
41
|
-
AccessorNode,
|
|
42
|
-
ArrayNode,
|
|
43
|
-
ConstantNode,
|
|
44
|
-
FunctionNode,
|
|
45
|
-
IndexNode,
|
|
46
|
-
ObjectNode,
|
|
47
|
-
OperatorNode,
|
|
48
|
-
SymbolNode
|
|
49
|
-
});
|
|
34
|
+
|
|
50
35
|
/**
|
|
51
36
|
* Transform a rationalizable expression in a rational fraction.
|
|
52
37
|
* If rational fraction is one variable polynomial then converts
|
|
@@ -100,116 +85,100 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
|
100
85
|
* {Expression Node} node simplified expression
|
|
101
86
|
*
|
|
102
87
|
*/
|
|
88
|
+
function _rationalize(expr) {
|
|
89
|
+
var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
90
|
+
var detailed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
91
|
+
var setRules = rulesRationalize(); // Rules for change polynomial in near canonical form
|
|
103
92
|
|
|
104
|
-
|
|
105
|
-
string: function string(expr) {
|
|
106
|
-
return this(parse(expr), {}, false);
|
|
107
|
-
},
|
|
108
|
-
'string, boolean': function stringBoolean(expr, detailed) {
|
|
109
|
-
return this(parse(expr), {}, detailed);
|
|
110
|
-
},
|
|
111
|
-
'string, Object': function stringObject(expr, scope) {
|
|
112
|
-
return this(parse(expr), scope, false);
|
|
113
|
-
},
|
|
114
|
-
'string, Object, boolean': function stringObjectBoolean(expr, scope, detailed) {
|
|
115
|
-
return this(parse(expr), scope, detailed);
|
|
116
|
-
},
|
|
117
|
-
Node: function Node(expr) {
|
|
118
|
-
return this(expr, {}, false);
|
|
119
|
-
},
|
|
120
|
-
'Node, boolean': function NodeBoolean(expr, detailed) {
|
|
121
|
-
return this(expr, {}, detailed);
|
|
122
|
-
},
|
|
123
|
-
'Node, Object': function NodeObject(expr, scope) {
|
|
124
|
-
return this(expr, scope, false);
|
|
125
|
-
},
|
|
126
|
-
'Node, Object, boolean': function NodeObjectBoolean(expr, scope, detailed) {
|
|
127
|
-
var setRules = rulesRationalize(); // Rules for change polynomial in near canonical form
|
|
128
|
-
|
|
129
|
-
var polyRet = polynomial(expr, scope, true, setRules.firstRules); // Check if expression is a rationalizable polynomial
|
|
130
|
-
|
|
131
|
-
var nVars = polyRet.variables.length;
|
|
132
|
-
var noExactFractions = {
|
|
133
|
-
exactFractions: false
|
|
134
|
-
};
|
|
135
|
-
var withExactFractions = {
|
|
136
|
-
exactFractions: true
|
|
137
|
-
};
|
|
138
|
-
expr = polyRet.expression;
|
|
139
|
-
|
|
140
|
-
if (nVars >= 1) {
|
|
141
|
-
// If expression in not a constant
|
|
142
|
-
expr = expandPower(expr); // First expand power of polynomials (cannot be made from rules!)
|
|
143
|
-
|
|
144
|
-
var sBefore; // Previous expression
|
|
145
|
-
|
|
146
|
-
var rules;
|
|
147
|
-
var eDistrDiv = true;
|
|
148
|
-
var redoInic = false; // Apply the initial rules, including succ div rules:
|
|
149
|
-
|
|
150
|
-
expr = simplify(expr, setRules.firstRules, {}, noExactFractions);
|
|
151
|
-
var s;
|
|
152
|
-
|
|
153
|
-
while (true) {
|
|
154
|
-
// Alternate applying successive division rules and distr.div.rules
|
|
155
|
-
// until there are no more changes:
|
|
156
|
-
rules = eDistrDiv ? setRules.distrDivRules : setRules.sucDivRules;
|
|
157
|
-
expr = simplify(expr, rules, {}, withExactFractions);
|
|
158
|
-
eDistrDiv = !eDistrDiv; // Swap between Distr.Div and Succ. Div. Rules
|
|
159
|
-
|
|
160
|
-
s = expr.toString();
|
|
161
|
-
|
|
162
|
-
if (s === sBefore) {
|
|
163
|
-
break; // No changes : end of the loop
|
|
164
|
-
}
|
|
93
|
+
var polyRet = polynomial(expr, scope, true, setRules.firstRules); // Check if expression is a rationalizable polynomial
|
|
165
94
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
95
|
+
var nVars = polyRet.variables.length;
|
|
96
|
+
var noExactFractions = {
|
|
97
|
+
exactFractions: false
|
|
98
|
+
};
|
|
99
|
+
var withExactFractions = {
|
|
100
|
+
exactFractions: true
|
|
101
|
+
};
|
|
102
|
+
expr = polyRet.expression;
|
|
169
103
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
} // Apply final rules:
|
|
104
|
+
if (nVars >= 1) {
|
|
105
|
+
// If expression in not a constant
|
|
106
|
+
expr = expandPower(expr); // First expand power of polynomials (cannot be made from rules!)
|
|
174
107
|
|
|
108
|
+
var sBefore; // Previous expression
|
|
175
109
|
|
|
176
|
-
|
|
177
|
-
|
|
110
|
+
var rules;
|
|
111
|
+
var eDistrDiv = true;
|
|
112
|
+
var redoInic = false; // Apply the initial rules, including succ div rules:
|
|
178
113
|
|
|
114
|
+
expr = simplify(expr, setRules.firstRules, {}, noExactFractions);
|
|
115
|
+
var s;
|
|
179
116
|
|
|
180
|
-
|
|
181
|
-
|
|
117
|
+
while (true) {
|
|
118
|
+
// Alternate applying successive division rules and distr.div.rules
|
|
119
|
+
// until there are no more changes:
|
|
120
|
+
rules = eDistrDiv ? setRules.distrDivRules : setRules.sucDivRules;
|
|
121
|
+
expr = simplify(expr, rules, {}, withExactFractions);
|
|
122
|
+
eDistrDiv = !eDistrDiv; // Swap between Distr.Div and Succ. Div. Rules
|
|
182
123
|
|
|
183
|
-
|
|
184
|
-
// Separate numerator from denominator
|
|
185
|
-
if (nVars === 1) {
|
|
186
|
-
expr.args[0] = polyToCanonical(expr.args[0], coefficients);
|
|
187
|
-
expr.args[1] = polyToCanonical(expr.args[1]);
|
|
188
|
-
}
|
|
124
|
+
s = expr.toString();
|
|
189
125
|
|
|
190
|
-
if (
|
|
191
|
-
|
|
192
|
-
retRationalize.denominator = expr.args[1];
|
|
193
|
-
}
|
|
194
|
-
} else {
|
|
195
|
-
if (nVars === 1) {
|
|
196
|
-
expr = polyToCanonical(expr, coefficients);
|
|
126
|
+
if (s === sBefore) {
|
|
127
|
+
break; // No changes : end of the loop
|
|
197
128
|
}
|
|
198
129
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
130
|
+
redoInic = true;
|
|
131
|
+
sBefore = s;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (redoInic) {
|
|
135
|
+
// Apply first rules again without succ div rules (if there are changes)
|
|
136
|
+
expr = simplify(expr, setRules.firstRulesAgain, {}, noExactFractions);
|
|
137
|
+
} // Apply final rules:
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
expr = simplify(expr, setRules.finalRules, {}, noExactFractions);
|
|
141
|
+
} // NVars >= 1
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
var coefficients = [];
|
|
145
|
+
var retRationalize = {};
|
|
204
146
|
|
|
147
|
+
if (expr.type === 'OperatorNode' && expr.isBinary() && expr.op === '/') {
|
|
148
|
+
// Separate numerator from denominator
|
|
149
|
+
if (nVars === 1) {
|
|
150
|
+
expr.args[0] = polyToCanonical(expr.args[0], coefficients);
|
|
151
|
+
expr.args[1] = polyToCanonical(expr.args[1]);
|
|
152
|
+
}
|
|
205
153
|
|
|
206
|
-
if (
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
154
|
+
if (detailed) {
|
|
155
|
+
retRationalize.numerator = expr.args[0];
|
|
156
|
+
retRationalize.denominator = expr.args[1];
|
|
157
|
+
}
|
|
158
|
+
} else {
|
|
159
|
+
if (nVars === 1) {
|
|
160
|
+
expr = polyToCanonical(expr, coefficients);
|
|
161
|
+
}
|
|
212
162
|
|
|
163
|
+
if (detailed) {
|
|
164
|
+
retRationalize.numerator = expr;
|
|
165
|
+
retRationalize.denominator = null;
|
|
166
|
+
}
|
|
167
|
+
} // nVars
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
if (!detailed) return expr;
|
|
171
|
+
retRationalize.coefficients = coefficients;
|
|
172
|
+
retRationalize.variables = polyRet.variables;
|
|
173
|
+
retRationalize.expression = expr;
|
|
174
|
+
return retRationalize;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return typed(name, {
|
|
178
|
+
Node: _rationalize,
|
|
179
|
+
'Node, boolean': (expr, detailed) => _rationalize(expr, {}, detailed),
|
|
180
|
+
'Node, Object': _rationalize,
|
|
181
|
+
'Node, Object, boolean': _rationalize
|
|
213
182
|
}); // end of typed rationalize
|
|
214
183
|
|
|
215
184
|
/**
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { createMap
|
|
1
|
+
import { createMap } from '../../utils/map.js';
|
|
2
2
|
import { isFunctionNode, isNode, isOperatorNode, isParenthesisNode, isSymbolNode } from '../../utils/is.js';
|
|
3
3
|
import { factory } from '../../utils/factory.js';
|
|
4
4
|
var name = 'resolve';
|
|
5
|
-
var dependencies = ['parse', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];
|
|
5
|
+
var dependencies = ['typed', 'parse', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];
|
|
6
6
|
export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
7
7
|
var {
|
|
8
|
+
typed,
|
|
8
9
|
parse,
|
|
9
10
|
ConstantNode,
|
|
10
11
|
FunctionNode,
|
|
@@ -21,9 +22,9 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
21
22
|
*
|
|
22
23
|
* Examples:
|
|
23
24
|
*
|
|
24
|
-
* math.resolve('x + y', {x:1, y:2}) // Node
|
|
25
|
-
* math.resolve(math.parse('x+y'), {x:1, y:2}) // Node
|
|
26
|
-
* math.simplify('x+y', {x:2, y:'x+x'}).toString()
|
|
25
|
+
* math.resolve('x + y', {x:1, y:2}) // Node '1 + 2'
|
|
26
|
+
* math.resolve(math.parse('x+y'), {x:1, y:2}) // Node '1 + 2'
|
|
27
|
+
* math.simplify('x+y', {x:2, y: math.parse('x+x')}).toString() // "6"
|
|
27
28
|
*
|
|
28
29
|
* See also:
|
|
29
30
|
*
|
|
@@ -38,7 +39,7 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
38
39
|
* If there is a cyclic dependency among the variables in `scope`,
|
|
39
40
|
* resolution is impossible and a ReferenceError is thrown.
|
|
40
41
|
*/
|
|
41
|
-
function
|
|
42
|
+
function _resolve(node, scope) {
|
|
42
43
|
var within = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Set();
|
|
43
44
|
|
|
44
45
|
// note `within`:
|
|
@@ -48,10 +49,6 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
48
49
|
return node;
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
if (!isMap(scope)) {
|
|
52
|
-
scope = createMap(scope);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
52
|
if (isSymbolNode(node)) {
|
|
56
53
|
if (within.has(node.name)) {
|
|
57
54
|
var variables = Array.from(within).join(', ');
|
|
@@ -63,7 +60,7 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
63
60
|
if (isNode(value)) {
|
|
64
61
|
var nextWithin = new Set(within);
|
|
65
62
|
nextWithin.add(node.name);
|
|
66
|
-
return
|
|
63
|
+
return _resolve(value, scope, nextWithin);
|
|
67
64
|
} else if (typeof value === 'number') {
|
|
68
65
|
return parse(String(value));
|
|
69
66
|
} else if (value !== undefined) {
|
|
@@ -73,14 +70,14 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
73
70
|
}
|
|
74
71
|
} else if (isOperatorNode(node)) {
|
|
75
72
|
var args = node.args.map(function (arg) {
|
|
76
|
-
return
|
|
73
|
+
return _resolve(arg, scope, within);
|
|
77
74
|
});
|
|
78
75
|
return new OperatorNode(node.op, node.fn, args, node.implicit);
|
|
79
76
|
} else if (isParenthesisNode(node)) {
|
|
80
|
-
return new ParenthesisNode(
|
|
77
|
+
return new ParenthesisNode(_resolve(node.content, scope, within));
|
|
81
78
|
} else if (isFunctionNode(node)) {
|
|
82
79
|
var _args = node.args.map(function (arg) {
|
|
83
|
-
return
|
|
80
|
+
return _resolve(arg, scope, within);
|
|
84
81
|
});
|
|
85
82
|
|
|
86
83
|
return new FunctionNode(node.name, _args);
|
|
@@ -88,8 +85,20 @@ export var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
|
88
85
|
// for some of the above special cases)
|
|
89
86
|
|
|
90
87
|
|
|
91
|
-
return node.map(child =>
|
|
88
|
+
return node.map(child => _resolve(child, scope, within));
|
|
92
89
|
}
|
|
93
90
|
|
|
94
|
-
return resolve
|
|
91
|
+
return typed('resolve', {
|
|
92
|
+
Node: _resolve,
|
|
93
|
+
'Node, Map | null | undefined': _resolve,
|
|
94
|
+
'Node, Object': (n, scope) => _resolve(n, createMap(scope)),
|
|
95
|
+
// For arrays and matrices, we map `self` rather than `_resolve`
|
|
96
|
+
// because resolve is fairly expensive anyway, and this way
|
|
97
|
+
// we get nice error messages if one entry in the array has wrong type.
|
|
98
|
+
'Array | Matrix': typed.referToSelf(self => A => A.map(n => self(n))),
|
|
99
|
+
'Array | Matrix, null | undefined': typed.referToSelf(self => A => A.map(n => self(n))),
|
|
100
|
+
'Array, Object': typed.referTo('Array,Map', selfAM => (A, scope) => selfAM(A, createMap(scope))),
|
|
101
|
+
'Matrix, Object': typed.referTo('Matrix,Map', selfMM => (A, scope) => selfMM(A, createMap(scope))),
|
|
102
|
+
'Array | Matrix, Map': typed.referToSelf(self => (A, scope) => A.map(n => self(n, scope)))
|
|
103
|
+
});
|
|
95
104
|
});
|