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,220 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.createConditionalNode = void 0;
|
|
7
9
|
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
var _factory = require("../../utils/factory.js");
|
|
11
|
-
|
|
12
|
-
var _operators = require("../operators.js");
|
|
13
|
-
|
|
14
|
-
var name = 'ConditionalNode';
|
|
15
|
-
var dependencies = ['Node'];
|
|
16
|
-
var createConditionalNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
17
|
-
var Node = _ref.Node;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* A lazy evaluating conditional operator: 'condition ? trueExpr : falseExpr'
|
|
21
|
-
*
|
|
22
|
-
* @param {Node} condition Condition, must result in a boolean
|
|
23
|
-
* @param {Node} trueExpr Expression evaluated when condition is true
|
|
24
|
-
* @param {Node} falseExpr Expression evaluated when condition is true
|
|
25
|
-
*
|
|
26
|
-
* @constructor ConditionalNode
|
|
27
|
-
* @extends {Node}
|
|
28
|
-
*/
|
|
29
|
-
function ConditionalNode(condition, trueExpr, falseExpr) {
|
|
30
|
-
if (!(this instanceof ConditionalNode)) {
|
|
31
|
-
throw new SyntaxError('Constructor must be called with the new operator');
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if (!(0, _is.isNode)(condition)) throw new TypeError('Parameter condition must be a Node');
|
|
35
|
-
if (!(0, _is.isNode)(trueExpr)) throw new TypeError('Parameter trueExpr must be a Node');
|
|
36
|
-
if (!(0, _is.isNode)(falseExpr)) throw new TypeError('Parameter falseExpr must be a Node');
|
|
37
|
-
this.condition = condition;
|
|
38
|
-
this.trueExpr = trueExpr;
|
|
39
|
-
this.falseExpr = falseExpr;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
ConditionalNode.prototype = new Node();
|
|
43
|
-
ConditionalNode.prototype.type = 'ConditionalNode';
|
|
44
|
-
ConditionalNode.prototype.isConditionalNode = true;
|
|
45
|
-
/**
|
|
46
|
-
* Compile a node into a JavaScript function.
|
|
47
|
-
* This basically pre-calculates as much as possible and only leaves open
|
|
48
|
-
* calculations which depend on a dynamic scope with variables.
|
|
49
|
-
* @param {Object} math Math.js namespace with functions and constants.
|
|
50
|
-
* @param {Object} argNames An object with argument names as key and `true`
|
|
51
|
-
* as value. Used in the SymbolNode to optimize
|
|
52
|
-
* for arguments from user assigned functions
|
|
53
|
-
* (see FunctionAssignmentNode) or special symbols
|
|
54
|
-
* like `end` (see IndexNode).
|
|
55
|
-
* @return {function} Returns a function which can be called like:
|
|
56
|
-
* evalNode(scope: Object, args: Object, context: *)
|
|
57
|
-
*/
|
|
58
|
-
|
|
59
|
-
ConditionalNode.prototype._compile = function (math, argNames) {
|
|
60
|
-
var evalCondition = this.condition._compile(math, argNames);
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
61
11
|
|
|
62
|
-
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
63
13
|
|
|
64
|
-
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
65
15
|
|
|
66
|
-
|
|
67
|
-
return testCondition(evalCondition(scope, args, context)) ? evalTrueExpr(scope, args, context) : evalFalseExpr(scope, args, context);
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* Execute a callback for each of the child nodes of this node
|
|
72
|
-
* @param {function(child: Node, path: string, parent: Node)} callback
|
|
73
|
-
*/
|
|
16
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
74
17
|
|
|
18
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
75
19
|
|
|
76
|
-
|
|
77
|
-
callback(this.condition, 'condition', this);
|
|
78
|
-
callback(this.trueExpr, 'trueExpr', this);
|
|
79
|
-
callback(this.falseExpr, 'falseExpr', this);
|
|
80
|
-
};
|
|
81
|
-
/**
|
|
82
|
-
* Create a new ConditionalNode having it's childs be the results of calling
|
|
83
|
-
* the provided callback function for each of the childs of the original node.
|
|
84
|
-
* @param {function(child: Node, path: string, parent: Node): Node} callback
|
|
85
|
-
* @returns {ConditionalNode} Returns a transformed copy of the node
|
|
86
|
-
*/
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
ConditionalNode.prototype.map = function (callback) {
|
|
90
|
-
return new ConditionalNode(this._ifNode(callback(this.condition, 'condition', this)), this._ifNode(callback(this.trueExpr, 'trueExpr', this)), this._ifNode(callback(this.falseExpr, 'falseExpr', this)));
|
|
91
|
-
};
|
|
92
|
-
/**
|
|
93
|
-
* Create a clone of this node, a shallow copy
|
|
94
|
-
* @return {ConditionalNode}
|
|
95
|
-
*/
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
ConditionalNode.prototype.clone = function () {
|
|
99
|
-
return new ConditionalNode(this.condition, this.trueExpr, this.falseExpr);
|
|
100
|
-
};
|
|
101
|
-
/**
|
|
102
|
-
* Get string representation
|
|
103
|
-
* @param {Object} options
|
|
104
|
-
* @return {string} str
|
|
105
|
-
*/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
ConditionalNode.prototype._toString = function (options) {
|
|
109
|
-
var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
|
|
110
|
-
var precedence = (0, _operators.getPrecedence)(this, parenthesis); // Enclose Arguments in parentheses if they are an OperatorNode
|
|
111
|
-
// or have lower or equal precedence
|
|
112
|
-
// NOTE: enclosing all OperatorNodes in parentheses is a decision
|
|
113
|
-
// purely based on aesthetics and readability
|
|
114
|
-
|
|
115
|
-
var condition = this.condition.toString(options);
|
|
116
|
-
var conditionPrecedence = (0, _operators.getPrecedence)(this.condition, parenthesis);
|
|
117
|
-
|
|
118
|
-
if (parenthesis === 'all' || this.condition.type === 'OperatorNode' || conditionPrecedence !== null && conditionPrecedence <= precedence) {
|
|
119
|
-
condition = '(' + condition + ')';
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
var trueExpr = this.trueExpr.toString(options);
|
|
123
|
-
var truePrecedence = (0, _operators.getPrecedence)(this.trueExpr, parenthesis);
|
|
124
|
-
|
|
125
|
-
if (parenthesis === 'all' || this.trueExpr.type === 'OperatorNode' || truePrecedence !== null && truePrecedence <= precedence) {
|
|
126
|
-
trueExpr = '(' + trueExpr + ')';
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
var falseExpr = this.falseExpr.toString(options);
|
|
130
|
-
var falsePrecedence = (0, _operators.getPrecedence)(this.falseExpr, parenthesis);
|
|
131
|
-
|
|
132
|
-
if (parenthesis === 'all' || this.falseExpr.type === 'OperatorNode' || falsePrecedence !== null && falsePrecedence <= precedence) {
|
|
133
|
-
falseExpr = '(' + falseExpr + ')';
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return condition + ' ? ' + trueExpr + ' : ' + falseExpr;
|
|
137
|
-
};
|
|
138
|
-
/**
|
|
139
|
-
* Get a JSON representation of the node
|
|
140
|
-
* @returns {Object}
|
|
141
|
-
*/
|
|
20
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
142
21
|
|
|
22
|
+
var _is = require("../../utils/is.js");
|
|
143
23
|
|
|
144
|
-
|
|
145
|
-
return {
|
|
146
|
-
mathjs: 'ConditionalNode',
|
|
147
|
-
condition: this.condition,
|
|
148
|
-
trueExpr: this.trueExpr,
|
|
149
|
-
falseExpr: this.falseExpr
|
|
150
|
-
};
|
|
151
|
-
};
|
|
152
|
-
/**
|
|
153
|
-
* Instantiate an ConditionalNode from its JSON representation
|
|
154
|
-
* @param {Object} json An object structured like
|
|
155
|
-
* `{"mathjs": "ConditionalNode", "condition": ..., "trueExpr": ..., "falseExpr": ...}`,
|
|
156
|
-
* where mathjs is optional
|
|
157
|
-
* @returns {ConditionalNode}
|
|
158
|
-
*/
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
ConditionalNode.fromJSON = function (json) {
|
|
162
|
-
return new ConditionalNode(json.condition, json.trueExpr, json.falseExpr);
|
|
163
|
-
};
|
|
164
|
-
/**
|
|
165
|
-
* Get HTML representation
|
|
166
|
-
* @param {Object} options
|
|
167
|
-
* @return {string} str
|
|
168
|
-
*/
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
ConditionalNode.prototype.toHTML = function (options) {
|
|
172
|
-
var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
|
|
173
|
-
var precedence = (0, _operators.getPrecedence)(this, parenthesis); // Enclose Arguments in parentheses if they are an OperatorNode
|
|
174
|
-
// or have lower or equal precedence
|
|
175
|
-
// NOTE: enclosing all OperatorNodes in parentheses is a decision
|
|
176
|
-
// purely based on aesthetics and readability
|
|
177
|
-
|
|
178
|
-
var condition = this.condition.toHTML(options);
|
|
179
|
-
var conditionPrecedence = (0, _operators.getPrecedence)(this.condition, parenthesis);
|
|
180
|
-
|
|
181
|
-
if (parenthesis === 'all' || this.condition.type === 'OperatorNode' || conditionPrecedence !== null && conditionPrecedence <= precedence) {
|
|
182
|
-
condition = '<span class="math-parenthesis math-round-parenthesis">(</span>' + condition + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
var trueExpr = this.trueExpr.toHTML(options);
|
|
186
|
-
var truePrecedence = (0, _operators.getPrecedence)(this.trueExpr, parenthesis);
|
|
24
|
+
var _factory = require("../../utils/factory.js");
|
|
187
25
|
|
|
188
|
-
|
|
189
|
-
trueExpr = '<span class="math-parenthesis math-round-parenthesis">(</span>' + trueExpr + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
|
190
|
-
}
|
|
26
|
+
var _operators = require("../operators.js");
|
|
191
27
|
|
|
192
|
-
|
|
193
|
-
var falsePrecedence = (0, _operators.getPrecedence)(this.falseExpr, parenthesis);
|
|
28
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
194
29
|
|
|
195
|
-
|
|
196
|
-
falseExpr = '<span class="math-parenthesis math-round-parenthesis">(</span>' + falseExpr + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
return condition + '<span class="math-operator math-conditional-operator">?</span>' + trueExpr + '<span class="math-operator math-conditional-operator">:</span>' + falseExpr;
|
|
200
|
-
};
|
|
201
|
-
/**
|
|
202
|
-
* Get LaTeX representation
|
|
203
|
-
* @param {Object} options
|
|
204
|
-
* @return {string} str
|
|
205
|
-
*/
|
|
30
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
206
31
|
|
|
32
|
+
var name = 'ConditionalNode';
|
|
33
|
+
var dependencies = ['Node'];
|
|
34
|
+
var createConditionalNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
35
|
+
var Node = _ref.Node;
|
|
207
36
|
|
|
208
|
-
ConditionalNode.prototype._toTex = function (options) {
|
|
209
|
-
return '\\begin{cases} {' + this.trueExpr.toTex(options) + '}, &\\quad{\\text{if }\\;' + this.condition.toTex(options) + '}\\\\{' + this.falseExpr.toTex(options) + '}, &\\quad{\\text{otherwise}}\\end{cases}';
|
|
210
|
-
};
|
|
211
37
|
/**
|
|
212
38
|
* Test whether a condition is met
|
|
213
39
|
* @param {*} condition
|
|
214
40
|
* @returns {boolean} true if condition is true or non-zero, else false
|
|
215
41
|
*/
|
|
216
|
-
|
|
217
|
-
|
|
218
42
|
function testCondition(condition) {
|
|
219
43
|
if (typeof condition === 'number' || typeof condition === 'boolean' || typeof condition === 'string') {
|
|
220
44
|
return !!condition;
|
|
@@ -241,6 +65,242 @@ var createConditionalNode = /* #__PURE__ */(0, _factory.factory)(name, dependenc
|
|
|
241
65
|
throw new TypeError('Unsupported type of condition "' + (0, _is.typeOf)(condition) + '"');
|
|
242
66
|
}
|
|
243
67
|
|
|
68
|
+
var ConditionalNode = /*#__PURE__*/function (_Node) {
|
|
69
|
+
(0, _inherits2["default"])(ConditionalNode, _Node);
|
|
70
|
+
|
|
71
|
+
var _super = _createSuper(ConditionalNode);
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* A lazy evaluating conditional operator: 'condition ? trueExpr : falseExpr'
|
|
75
|
+
*
|
|
76
|
+
* @param {Node} condition Condition, must result in a boolean
|
|
77
|
+
* @param {Node} trueExpr Expression evaluated when condition is true
|
|
78
|
+
* @param {Node} falseExpr Expression evaluated when condition is true
|
|
79
|
+
*
|
|
80
|
+
* @constructor ConditionalNode
|
|
81
|
+
* @extends {Node}
|
|
82
|
+
*/
|
|
83
|
+
function ConditionalNode(condition, trueExpr, falseExpr) {
|
|
84
|
+
var _this;
|
|
85
|
+
|
|
86
|
+
(0, _classCallCheck2["default"])(this, ConditionalNode);
|
|
87
|
+
_this = _super.call(this);
|
|
88
|
+
|
|
89
|
+
if (!(0, _is.isNode)(condition)) {
|
|
90
|
+
throw new TypeError('Parameter condition must be a Node');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (!(0, _is.isNode)(trueExpr)) {
|
|
94
|
+
throw new TypeError('Parameter trueExpr must be a Node');
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (!(0, _is.isNode)(falseExpr)) {
|
|
98
|
+
throw new TypeError('Parameter falseExpr must be a Node');
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
_this.condition = condition;
|
|
102
|
+
_this.trueExpr = trueExpr;
|
|
103
|
+
_this.falseExpr = falseExpr;
|
|
104
|
+
return _this;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
(0, _createClass2["default"])(ConditionalNode, [{
|
|
108
|
+
key: "type",
|
|
109
|
+
get: function get() {
|
|
110
|
+
return name;
|
|
111
|
+
}
|
|
112
|
+
}, {
|
|
113
|
+
key: "isConditionalNode",
|
|
114
|
+
get: function get() {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Compile a node into a JavaScript function.
|
|
119
|
+
* This basically pre-calculates as much as possible and only leaves open
|
|
120
|
+
* calculations which depend on a dynamic scope with variables.
|
|
121
|
+
* @param {Object} math Math.js namespace with functions and constants.
|
|
122
|
+
* @param {Object} argNames An object with argument names as key and `true`
|
|
123
|
+
* as value. Used in the SymbolNode to optimize
|
|
124
|
+
* for arguments from user assigned functions
|
|
125
|
+
* (see FunctionAssignmentNode) or special symbols
|
|
126
|
+
* like `end` (see IndexNode).
|
|
127
|
+
* @return {function} Returns a function which can be called like:
|
|
128
|
+
* evalNode(scope: Object, args: Object, context: *)
|
|
129
|
+
*/
|
|
130
|
+
|
|
131
|
+
}, {
|
|
132
|
+
key: "_compile",
|
|
133
|
+
value: function _compile(math, argNames) {
|
|
134
|
+
var evalCondition = this.condition._compile(math, argNames);
|
|
135
|
+
|
|
136
|
+
var evalTrueExpr = this.trueExpr._compile(math, argNames);
|
|
137
|
+
|
|
138
|
+
var evalFalseExpr = this.falseExpr._compile(math, argNames);
|
|
139
|
+
|
|
140
|
+
return function evalConditionalNode(scope, args, context) {
|
|
141
|
+
return testCondition(evalCondition(scope, args, context)) ? evalTrueExpr(scope, args, context) : evalFalseExpr(scope, args, context);
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Execute a callback for each of the child nodes of this node
|
|
146
|
+
* @param {function(child: Node, path: string, parent: Node)} callback
|
|
147
|
+
*/
|
|
148
|
+
|
|
149
|
+
}, {
|
|
150
|
+
key: "forEach",
|
|
151
|
+
value: function forEach(callback) {
|
|
152
|
+
callback(this.condition, 'condition', this);
|
|
153
|
+
callback(this.trueExpr, 'trueExpr', this);
|
|
154
|
+
callback(this.falseExpr, 'falseExpr', this);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Create a new ConditionalNode whose children are the results of calling
|
|
158
|
+
* the provided callback function for each child of the original node.
|
|
159
|
+
* @param {function(child: Node, path: string, parent: Node): Node} callback
|
|
160
|
+
* @returns {ConditionalNode} Returns a transformed copy of the node
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
}, {
|
|
164
|
+
key: "map",
|
|
165
|
+
value: function map(callback) {
|
|
166
|
+
return new ConditionalNode(this._ifNode(callback(this.condition, 'condition', this)), this._ifNode(callback(this.trueExpr, 'trueExpr', this)), this._ifNode(callback(this.falseExpr, 'falseExpr', this)));
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Create a clone of this node, a shallow copy
|
|
170
|
+
* @return {ConditionalNode}
|
|
171
|
+
*/
|
|
172
|
+
|
|
173
|
+
}, {
|
|
174
|
+
key: "clone",
|
|
175
|
+
value: function clone() {
|
|
176
|
+
return new ConditionalNode(this.condition, this.trueExpr, this.falseExpr);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get string representation
|
|
180
|
+
* @param {Object} options
|
|
181
|
+
* @return {string} str
|
|
182
|
+
*/
|
|
183
|
+
|
|
184
|
+
}, {
|
|
185
|
+
key: "_toString",
|
|
186
|
+
value: function _toString(options) {
|
|
187
|
+
var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
|
|
188
|
+
var precedence = (0, _operators.getPrecedence)(this, parenthesis, options && options.implicit); // Enclose Arguments in parentheses if they are an OperatorNode
|
|
189
|
+
// or have lower or equal precedence
|
|
190
|
+
// NOTE: enclosing all OperatorNodes in parentheses is a decision
|
|
191
|
+
// purely based on aesthetics and readability
|
|
192
|
+
|
|
193
|
+
var condition = this.condition.toString(options);
|
|
194
|
+
var conditionPrecedence = (0, _operators.getPrecedence)(this.condition, parenthesis, options && options.implicit);
|
|
195
|
+
|
|
196
|
+
if (parenthesis === 'all' || this.condition.type === 'OperatorNode' || conditionPrecedence !== null && conditionPrecedence <= precedence) {
|
|
197
|
+
condition = '(' + condition + ')';
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
var trueExpr = this.trueExpr.toString(options);
|
|
201
|
+
var truePrecedence = (0, _operators.getPrecedence)(this.trueExpr, parenthesis, options && options.implicit);
|
|
202
|
+
|
|
203
|
+
if (parenthesis === 'all' || this.trueExpr.type === 'OperatorNode' || truePrecedence !== null && truePrecedence <= precedence) {
|
|
204
|
+
trueExpr = '(' + trueExpr + ')';
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
var falseExpr = this.falseExpr.toString(options);
|
|
208
|
+
var falsePrecedence = (0, _operators.getPrecedence)(this.falseExpr, parenthesis, options && options.implicit);
|
|
209
|
+
|
|
210
|
+
if (parenthesis === 'all' || this.falseExpr.type === 'OperatorNode' || falsePrecedence !== null && falsePrecedence <= precedence) {
|
|
211
|
+
falseExpr = '(' + falseExpr + ')';
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return condition + ' ? ' + trueExpr + ' : ' + falseExpr;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get a JSON representation of the node
|
|
218
|
+
* @returns {Object}
|
|
219
|
+
*/
|
|
220
|
+
|
|
221
|
+
}, {
|
|
222
|
+
key: "toJSON",
|
|
223
|
+
value: function toJSON() {
|
|
224
|
+
return {
|
|
225
|
+
mathjs: name,
|
|
226
|
+
condition: this.condition,
|
|
227
|
+
trueExpr: this.trueExpr,
|
|
228
|
+
falseExpr: this.falseExpr
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Instantiate an ConditionalNode from its JSON representation
|
|
233
|
+
* @param {Object} json
|
|
234
|
+
* An object structured like
|
|
235
|
+
* ```
|
|
236
|
+
* {"mathjs": "ConditionalNode",
|
|
237
|
+
* "condition": ...,
|
|
238
|
+
* "trueExpr": ...,
|
|
239
|
+
* "falseExpr": ...}
|
|
240
|
+
* ```
|
|
241
|
+
* where mathjs is optional
|
|
242
|
+
* @returns {ConditionalNode}
|
|
243
|
+
*/
|
|
244
|
+
|
|
245
|
+
}, {
|
|
246
|
+
key: "toHTML",
|
|
247
|
+
value:
|
|
248
|
+
/**
|
|
249
|
+
* Get HTML representation
|
|
250
|
+
* @param {Object} options
|
|
251
|
+
* @return {string} str
|
|
252
|
+
*/
|
|
253
|
+
function toHTML(options) {
|
|
254
|
+
var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
|
|
255
|
+
var precedence = (0, _operators.getPrecedence)(this, parenthesis, options && options.implicit); // Enclose Arguments in parentheses if they are an OperatorNode
|
|
256
|
+
// or have lower or equal precedence
|
|
257
|
+
// NOTE: enclosing all OperatorNodes in parentheses is a decision
|
|
258
|
+
// purely based on aesthetics and readability
|
|
259
|
+
|
|
260
|
+
var condition = this.condition.toHTML(options);
|
|
261
|
+
var conditionPrecedence = (0, _operators.getPrecedence)(this.condition, parenthesis, options && options.implicit);
|
|
262
|
+
|
|
263
|
+
if (parenthesis === 'all' || this.condition.type === 'OperatorNode' || conditionPrecedence !== null && conditionPrecedence <= precedence) {
|
|
264
|
+
condition = '<span class="math-parenthesis math-round-parenthesis">(</span>' + condition + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
var trueExpr = this.trueExpr.toHTML(options);
|
|
268
|
+
var truePrecedence = (0, _operators.getPrecedence)(this.trueExpr, parenthesis, options && options.implicit);
|
|
269
|
+
|
|
270
|
+
if (parenthesis === 'all' || this.trueExpr.type === 'OperatorNode' || truePrecedence !== null && truePrecedence <= precedence) {
|
|
271
|
+
trueExpr = '<span class="math-parenthesis math-round-parenthesis">(</span>' + trueExpr + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
var falseExpr = this.falseExpr.toHTML(options);
|
|
275
|
+
var falsePrecedence = (0, _operators.getPrecedence)(this.falseExpr, parenthesis, options && options.implicit);
|
|
276
|
+
|
|
277
|
+
if (parenthesis === 'all' || this.falseExpr.type === 'OperatorNode' || falsePrecedence !== null && falsePrecedence <= precedence) {
|
|
278
|
+
falseExpr = '<span class="math-parenthesis math-round-parenthesis">(</span>' + falseExpr + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
return condition + '<span class="math-operator math-conditional-operator">?</span>' + trueExpr + '<span class="math-operator math-conditional-operator">:</span>' + falseExpr;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Get LaTeX representation
|
|
285
|
+
* @param {Object} options
|
|
286
|
+
* @return {string} str
|
|
287
|
+
*/
|
|
288
|
+
|
|
289
|
+
}, {
|
|
290
|
+
key: "_toTex",
|
|
291
|
+
value: function _toTex(options) {
|
|
292
|
+
return '\\begin{cases} {' + this.trueExpr.toTex(options) + '}, &\\quad{\\text{if }\\;' + this.condition.toTex(options) + '}\\\\{' + this.falseExpr.toTex(options) + '}, &\\quad{\\text{otherwise}}\\end{cases}';
|
|
293
|
+
}
|
|
294
|
+
}], [{
|
|
295
|
+
key: "fromJSON",
|
|
296
|
+
value: function fromJSON(json) {
|
|
297
|
+
return new ConditionalNode(json.condition, json.trueExpr, json.falseExpr);
|
|
298
|
+
}
|
|
299
|
+
}]);
|
|
300
|
+
return ConditionalNode;
|
|
301
|
+
}(Node);
|
|
302
|
+
|
|
303
|
+
(0, _defineProperty2["default"])(ConditionalNode, "name", name);
|
|
244
304
|
return ConditionalNode;
|
|
245
305
|
}, {
|
|
246
306
|
isClass: true,
|