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
|
@@ -19,186 +19,195 @@ export var createSymbolNode = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
|
19
19
|
function isValuelessUnit(name) {
|
|
20
20
|
return Unit ? Unit.isValuelessUnit(name) : false;
|
|
21
21
|
}
|
|
22
|
-
/**
|
|
23
|
-
* @constructor SymbolNode
|
|
24
|
-
* @extends {Node}
|
|
25
|
-
* A symbol node can hold and resolve a symbol
|
|
26
|
-
* @param {string} name
|
|
27
|
-
* @extends {Node}
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
function SymbolNode(name) {
|
|
32
|
-
if (!(this instanceof SymbolNode)) {
|
|
33
|
-
throw new SyntaxError('Constructor must be called with the new operator');
|
|
34
|
-
} // validate input
|
|
35
22
|
|
|
23
|
+
class SymbolNode extends Node {
|
|
24
|
+
/**
|
|
25
|
+
* @constructor SymbolNode
|
|
26
|
+
* @extends {Node}
|
|
27
|
+
* A symbol node can hold and resolve a symbol
|
|
28
|
+
* @param {string} name
|
|
29
|
+
* @extends {Node}
|
|
30
|
+
*/
|
|
31
|
+
constructor(name) {
|
|
32
|
+
super(); // validate input
|
|
33
|
+
|
|
34
|
+
if (typeof name !== 'string') {
|
|
35
|
+
throw new TypeError('String expected for parameter "name"');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
this.name = name;
|
|
39
|
+
}
|
|
36
40
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
get type() {
|
|
42
|
+
return 'SymbolNode';
|
|
43
|
+
}
|
|
40
44
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
45
|
+
get isSymbolNode() {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Compile a node into a JavaScript function.
|
|
50
|
+
* This basically pre-calculates as much as possible and only leaves open
|
|
51
|
+
* calculations which depend on a dynamic scope with variables.
|
|
52
|
+
* @param {Object} math Math.js namespace with functions and constants.
|
|
53
|
+
* @param {Object} argNames An object with argument names as key and `true`
|
|
54
|
+
* as value. Used in the SymbolNode to optimize
|
|
55
|
+
* for arguments from user assigned functions
|
|
56
|
+
* (see FunctionAssignmentNode) or special symbols
|
|
57
|
+
* like `end` (see IndexNode).
|
|
58
|
+
* @return {function} Returns a function which can be called like:
|
|
59
|
+
* evalNode(scope: Object, args: Object, context: *)
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
_compile(math, argNames) {
|
|
64
|
+
var name = this.name;
|
|
65
|
+
|
|
66
|
+
if (argNames[name] === true) {
|
|
67
|
+
// this is a FunctionAssignment argument
|
|
68
|
+
// (like an x when inside the expression of a function
|
|
69
|
+
// assignment `f(x) = ...`)
|
|
70
|
+
return function (scope, args, context) {
|
|
71
|
+
return args[name];
|
|
72
|
+
};
|
|
73
|
+
} else if (name in math) {
|
|
74
|
+
return function (scope, args, context) {
|
|
75
|
+
return scope.has(name) ? scope.get(name) : getSafeProperty(math, name);
|
|
76
|
+
};
|
|
77
|
+
} else {
|
|
78
|
+
var isUnit = isValuelessUnit(name);
|
|
79
|
+
return function (scope, args, context) {
|
|
80
|
+
return scope.has(name) ? scope.get(name) : isUnit ? new Unit(null, name) : SymbolNode.onUndefinedSymbol(name);
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Execute a callback for each of the child nodes of this node
|
|
86
|
+
* @param {function(child: Node, path: string, parent: Node)} callback
|
|
87
|
+
*/
|
|
57
88
|
|
|
58
|
-
SymbolNode.prototype._compile = function (math, argNames) {
|
|
59
|
-
var name = this.name;
|
|
60
89
|
|
|
61
|
-
|
|
62
|
-
// this is a FunctionAssignment argument
|
|
63
|
-
// (like an x when inside the expression of a function assignment `f(x) = ...`)
|
|
64
|
-
return function (scope, args, context) {
|
|
65
|
-
return args[name];
|
|
66
|
-
};
|
|
67
|
-
} else if (name in math) {
|
|
68
|
-
return function (scope, args, context) {
|
|
69
|
-
return scope.has(name) ? scope.get(name) : getSafeProperty(math, name);
|
|
70
|
-
};
|
|
71
|
-
} else {
|
|
72
|
-
var isUnit = isValuelessUnit(name);
|
|
73
|
-
return function (scope, args, context) {
|
|
74
|
-
return scope.has(name) ? scope.get(name) : isUnit ? new Unit(null, name) : SymbolNode.onUndefinedSymbol(name);
|
|
75
|
-
};
|
|
90
|
+
forEach(callback) {// nothing to do, we don't have any children
|
|
76
91
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Create a new SymbolNode with children produced by the given callback.
|
|
94
|
+
* Trivial since a SymbolNode has no children
|
|
95
|
+
* @param {function(child: Node, path: string, parent: Node) : Node} callback
|
|
96
|
+
* @returns {SymbolNode} Returns a clone of the node
|
|
97
|
+
*/
|
|
82
98
|
|
|
83
99
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
*/
|
|
100
|
+
map(callback) {
|
|
101
|
+
return this.clone();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Throws an error 'Undefined symbol {name}'
|
|
105
|
+
* @param {string} name
|
|
106
|
+
*/
|
|
92
107
|
|
|
93
108
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
109
|
+
static onUndefinedSymbol(name) {
|
|
110
|
+
throw new Error('Undefined symbol ' + name);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create a clone of this node, a shallow copy
|
|
114
|
+
* @return {SymbolNode}
|
|
115
|
+
*/
|
|
101
116
|
|
|
102
117
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
118
|
+
clone() {
|
|
119
|
+
return new SymbolNode(this.name);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get string representation
|
|
123
|
+
* @param {Object} options
|
|
124
|
+
* @return {string} str
|
|
125
|
+
* @override
|
|
126
|
+
*/
|
|
110
127
|
|
|
111
128
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
129
|
+
_toString(options) {
|
|
130
|
+
return this.name;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get HTML representation
|
|
134
|
+
* @param {Object} options
|
|
135
|
+
* @return {string} str
|
|
136
|
+
* @override
|
|
137
|
+
*/
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
toHTML(options) {
|
|
141
|
+
var name = escape(this.name);
|
|
142
|
+
|
|
143
|
+
if (name === 'true' || name === 'false') {
|
|
144
|
+
return '<span class="math-symbol math-boolean">' + name + '</span>';
|
|
145
|
+
} else if (name === 'i') {
|
|
146
|
+
return '<span class="math-symbol math-imaginary-symbol">' + name + '</span>';
|
|
147
|
+
} else if (name === 'Infinity') {
|
|
148
|
+
return '<span class="math-symbol math-infinity-symbol">' + name + '</span>';
|
|
149
|
+
} else if (name === 'NaN') {
|
|
150
|
+
return '<span class="math-symbol math-nan-symbol">' + name + '</span>';
|
|
151
|
+
} else if (name === 'null') {
|
|
152
|
+
return '<span class="math-symbol math-null-symbol">' + name + '</span>';
|
|
153
|
+
} else if (name === 'undefined') {
|
|
154
|
+
return '<span class="math-symbol math-undefined-symbol">' + name + '</span>';
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return '<span class="math-symbol">' + name + '</span>';
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get a JSON representation of the node
|
|
161
|
+
* @returns {Object}
|
|
162
|
+
*/
|
|
121
163
|
|
|
122
164
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
165
|
+
toJSON() {
|
|
166
|
+
return {
|
|
167
|
+
mathjs: 'SymbolNode',
|
|
168
|
+
name: this.name
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Instantiate a SymbolNode from its JSON representation
|
|
173
|
+
* @param {Object} json An object structured like
|
|
174
|
+
* `{"mathjs": "SymbolNode", name: "x"}`,
|
|
175
|
+
* where mathjs is optional
|
|
176
|
+
* @returns {SymbolNode}
|
|
177
|
+
*/
|
|
132
178
|
|
|
133
179
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
if (name === 'true' || name === 'false') {
|
|
138
|
-
return '<span class="math-symbol math-boolean">' + name + '</span>';
|
|
139
|
-
} else if (name === 'i') {
|
|
140
|
-
return '<span class="math-symbol math-imaginary-symbol">' + name + '</span>';
|
|
141
|
-
} else if (name === 'Infinity') {
|
|
142
|
-
return '<span class="math-symbol math-infinity-symbol">' + name + '</span>';
|
|
143
|
-
} else if (name === 'NaN') {
|
|
144
|
-
return '<span class="math-symbol math-nan-symbol">' + name + '</span>';
|
|
145
|
-
} else if (name === 'null') {
|
|
146
|
-
return '<span class="math-symbol math-null-symbol">' + name + '</span>';
|
|
147
|
-
} else if (name === 'undefined') {
|
|
148
|
-
return '<span class="math-symbol math-undefined-symbol">' + name + '</span>';
|
|
180
|
+
static fromJSON(json) {
|
|
181
|
+
return new SymbolNode(json.name);
|
|
149
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Get LaTeX representation
|
|
185
|
+
* @param {Object} options
|
|
186
|
+
* @return {string} str
|
|
187
|
+
* @override
|
|
188
|
+
*/
|
|
150
189
|
|
|
151
|
-
return '<span class="math-symbol">' + name + '</span>';
|
|
152
|
-
};
|
|
153
|
-
/**
|
|
154
|
-
* Get a JSON representation of the node
|
|
155
|
-
* @returns {Object}
|
|
156
|
-
*/
|
|
157
190
|
|
|
191
|
+
_toTex(options) {
|
|
192
|
+
var isUnit = false;
|
|
158
193
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
name: this.name
|
|
163
|
-
};
|
|
164
|
-
};
|
|
165
|
-
/**
|
|
166
|
-
* Instantiate a SymbolNode from its JSON representation
|
|
167
|
-
* @param {Object} json An object structured like
|
|
168
|
-
* `{"mathjs": "SymbolNode", name: "x"}`,
|
|
169
|
-
* where mathjs is optional
|
|
170
|
-
* @returns {SymbolNode}
|
|
171
|
-
*/
|
|
194
|
+
if (typeof math[this.name] === 'undefined' && isValuelessUnit(this.name)) {
|
|
195
|
+
isUnit = true;
|
|
196
|
+
}
|
|
172
197
|
|
|
198
|
+
var symbol = toSymbol(this.name, isUnit);
|
|
173
199
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
* @param {Object} options
|
|
180
|
-
* @return {string} str
|
|
181
|
-
* @override
|
|
182
|
-
*/
|
|
200
|
+
if (symbol[0] === '\\') {
|
|
201
|
+
// no space needed if the symbol starts with '\'
|
|
202
|
+
return symbol;
|
|
203
|
+
} // the space prevents symbols from breaking stuff like '\cdot'
|
|
204
|
+
// if it's written right before the symbol
|
|
183
205
|
|
|
184
206
|
|
|
185
|
-
|
|
186
|
-
var isUnit = false;
|
|
187
|
-
|
|
188
|
-
if (typeof math[this.name] === 'undefined' && isValuelessUnit(this.name)) {
|
|
189
|
-
isUnit = true;
|
|
207
|
+
return ' ' + symbol;
|
|
190
208
|
}
|
|
191
209
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
if (symbol[0] === '\\') {
|
|
195
|
-
// no space needed if the symbol starts with '\'
|
|
196
|
-
return symbol;
|
|
197
|
-
} // the space prevents symbols from breaking stuff like '\cdot' if it's written right before the symbol
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
return ' ' + symbol;
|
|
201
|
-
};
|
|
210
|
+
}
|
|
202
211
|
|
|
203
212
|
return SymbolNode;
|
|
204
213
|
}, {
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
// in parentheses
|
|
18
18
|
// latexRightParens: the same for the right argument
|
|
19
19
|
import { hasOwnProperty } from '../utils/object.js';
|
|
20
|
+
import { isConstantNode, isParenthesisNode, rule2Node } from '../utils/is.js';
|
|
20
21
|
export var properties = [{
|
|
21
22
|
// assignment
|
|
22
23
|
AssignmentNode: {},
|
|
@@ -33,62 +34,74 @@ export var properties = [{
|
|
|
33
34
|
}, {
|
|
34
35
|
// logical or
|
|
35
36
|
'OperatorNode:or': {
|
|
37
|
+
op: 'or',
|
|
36
38
|
associativity: 'left',
|
|
37
39
|
associativeWith: []
|
|
38
40
|
}
|
|
39
41
|
}, {
|
|
40
42
|
// logical xor
|
|
41
43
|
'OperatorNode:xor': {
|
|
44
|
+
op: 'xor',
|
|
42
45
|
associativity: 'left',
|
|
43
46
|
associativeWith: []
|
|
44
47
|
}
|
|
45
48
|
}, {
|
|
46
49
|
// logical and
|
|
47
50
|
'OperatorNode:and': {
|
|
51
|
+
op: 'and',
|
|
48
52
|
associativity: 'left',
|
|
49
53
|
associativeWith: []
|
|
50
54
|
}
|
|
51
55
|
}, {
|
|
52
56
|
// bitwise or
|
|
53
57
|
'OperatorNode:bitOr': {
|
|
58
|
+
op: '|',
|
|
54
59
|
associativity: 'left',
|
|
55
60
|
associativeWith: []
|
|
56
61
|
}
|
|
57
62
|
}, {
|
|
58
63
|
// bitwise xor
|
|
59
64
|
'OperatorNode:bitXor': {
|
|
65
|
+
op: '^|',
|
|
60
66
|
associativity: 'left',
|
|
61
67
|
associativeWith: []
|
|
62
68
|
}
|
|
63
69
|
}, {
|
|
64
70
|
// bitwise and
|
|
65
71
|
'OperatorNode:bitAnd': {
|
|
72
|
+
op: '&',
|
|
66
73
|
associativity: 'left',
|
|
67
74
|
associativeWith: []
|
|
68
75
|
}
|
|
69
76
|
}, {
|
|
70
77
|
// relational operators
|
|
71
78
|
'OperatorNode:equal': {
|
|
79
|
+
op: '==',
|
|
72
80
|
associativity: 'left',
|
|
73
81
|
associativeWith: []
|
|
74
82
|
},
|
|
75
83
|
'OperatorNode:unequal': {
|
|
84
|
+
op: '!=',
|
|
76
85
|
associativity: 'left',
|
|
77
86
|
associativeWith: []
|
|
78
87
|
},
|
|
79
88
|
'OperatorNode:smaller': {
|
|
89
|
+
op: '<',
|
|
80
90
|
associativity: 'left',
|
|
81
91
|
associativeWith: []
|
|
82
92
|
},
|
|
83
93
|
'OperatorNode:larger': {
|
|
94
|
+
op: '>',
|
|
84
95
|
associativity: 'left',
|
|
85
96
|
associativeWith: []
|
|
86
97
|
},
|
|
87
98
|
'OperatorNode:smallerEq': {
|
|
99
|
+
op: '<=',
|
|
88
100
|
associativity: 'left',
|
|
89
101
|
associativeWith: []
|
|
90
102
|
},
|
|
91
103
|
'OperatorNode:largerEq': {
|
|
104
|
+
op: '>=',
|
|
92
105
|
associativity: 'left',
|
|
93
106
|
associativeWith: []
|
|
94
107
|
},
|
|
@@ -99,20 +112,24 @@ export var properties = [{
|
|
|
99
112
|
}, {
|
|
100
113
|
// bitshift operators
|
|
101
114
|
'OperatorNode:leftShift': {
|
|
115
|
+
op: '<<',
|
|
102
116
|
associativity: 'left',
|
|
103
117
|
associativeWith: []
|
|
104
118
|
},
|
|
105
119
|
'OperatorNode:rightArithShift': {
|
|
120
|
+
op: '>>',
|
|
106
121
|
associativity: 'left',
|
|
107
122
|
associativeWith: []
|
|
108
123
|
},
|
|
109
124
|
'OperatorNode:rightLogShift': {
|
|
125
|
+
op: '>>>',
|
|
110
126
|
associativity: 'left',
|
|
111
127
|
associativeWith: []
|
|
112
128
|
}
|
|
113
129
|
}, {
|
|
114
130
|
// unit conversion
|
|
115
131
|
'OperatorNode:to': {
|
|
132
|
+
op: 'to',
|
|
116
133
|
associativity: 'left',
|
|
117
134
|
associativeWith: []
|
|
118
135
|
}
|
|
@@ -122,20 +139,24 @@ export var properties = [{
|
|
|
122
139
|
}, {
|
|
123
140
|
// addition, subtraction
|
|
124
141
|
'OperatorNode:add': {
|
|
142
|
+
op: '+',
|
|
125
143
|
associativity: 'left',
|
|
126
144
|
associativeWith: ['OperatorNode:add', 'OperatorNode:subtract']
|
|
127
145
|
},
|
|
128
146
|
'OperatorNode:subtract': {
|
|
147
|
+
op: '-',
|
|
129
148
|
associativity: 'left',
|
|
130
149
|
associativeWith: []
|
|
131
150
|
}
|
|
132
151
|
}, {
|
|
133
152
|
// multiply, divide, modulus
|
|
134
153
|
'OperatorNode:multiply': {
|
|
154
|
+
op: '*',
|
|
135
155
|
associativity: 'left',
|
|
136
156
|
associativeWith: ['OperatorNode:multiply', 'OperatorNode:divide', 'Operator:dotMultiply', 'Operator:dotDivide']
|
|
137
157
|
},
|
|
138
158
|
'OperatorNode:divide': {
|
|
159
|
+
op: '/',
|
|
139
160
|
associativity: 'left',
|
|
140
161
|
associativeWith: [],
|
|
141
162
|
latexLeftParens: false,
|
|
@@ -146,34 +167,48 @@ export var properties = [{
|
|
|
146
167
|
|
|
147
168
|
},
|
|
148
169
|
'OperatorNode:dotMultiply': {
|
|
170
|
+
op: '.*',
|
|
149
171
|
associativity: 'left',
|
|
150
172
|
associativeWith: ['OperatorNode:multiply', 'OperatorNode:divide', 'OperatorNode:dotMultiply', 'OperatorNode:doDivide']
|
|
151
173
|
},
|
|
152
174
|
'OperatorNode:dotDivide': {
|
|
175
|
+
op: './',
|
|
153
176
|
associativity: 'left',
|
|
154
177
|
associativeWith: []
|
|
155
178
|
},
|
|
156
179
|
'OperatorNode:mod': {
|
|
180
|
+
op: 'mod',
|
|
157
181
|
associativity: 'left',
|
|
158
182
|
associativeWith: []
|
|
159
183
|
}
|
|
184
|
+
}, {
|
|
185
|
+
// Repeat multiplication for implicit multiplication
|
|
186
|
+
'OperatorNode:multiply': {
|
|
187
|
+
associativity: 'left',
|
|
188
|
+
associativeWith: ['OperatorNode:multiply', 'OperatorNode:divide', 'Operator:dotMultiply', 'Operator:dotDivide']
|
|
189
|
+
}
|
|
160
190
|
}, {
|
|
161
191
|
// unary prefix operators
|
|
162
192
|
'OperatorNode:unaryPlus': {
|
|
193
|
+
op: '+',
|
|
163
194
|
associativity: 'right'
|
|
164
195
|
},
|
|
165
196
|
'OperatorNode:unaryMinus': {
|
|
197
|
+
op: '-',
|
|
166
198
|
associativity: 'right'
|
|
167
199
|
},
|
|
168
200
|
'OperatorNode:bitNot': {
|
|
201
|
+
op: '~',
|
|
169
202
|
associativity: 'right'
|
|
170
203
|
},
|
|
171
204
|
'OperatorNode:not': {
|
|
205
|
+
op: 'not',
|
|
172
206
|
associativity: 'right'
|
|
173
207
|
}
|
|
174
208
|
}, {
|
|
175
209
|
// exponentiation
|
|
176
210
|
'OperatorNode:pow': {
|
|
211
|
+
op: '^',
|
|
177
212
|
associativity: 'right',
|
|
178
213
|
associativeWith: [],
|
|
179
214
|
latexRightParens: false // the exponent doesn't need parentheses in
|
|
@@ -182,20 +217,41 @@ export var properties = [{
|
|
|
182
217
|
|
|
183
218
|
},
|
|
184
219
|
'OperatorNode:dotPow': {
|
|
220
|
+
op: '.^',
|
|
185
221
|
associativity: 'right',
|
|
186
222
|
associativeWith: []
|
|
187
223
|
}
|
|
188
224
|
}, {
|
|
189
225
|
// factorial
|
|
190
226
|
'OperatorNode:factorial': {
|
|
227
|
+
op: '!',
|
|
191
228
|
associativity: 'left'
|
|
192
229
|
}
|
|
193
230
|
}, {
|
|
194
231
|
// matrix transpose
|
|
195
|
-
'OperatorNode:
|
|
232
|
+
'OperatorNode:ctranspose': {
|
|
233
|
+
op: "'",
|
|
196
234
|
associativity: 'left'
|
|
197
235
|
}
|
|
198
236
|
}];
|
|
237
|
+
/**
|
|
238
|
+
* Returns the first non-parenthesis internal node, but only
|
|
239
|
+
* when the 'parenthesis' option is unset or auto.
|
|
240
|
+
* @param {Node} _node
|
|
241
|
+
* @param {string} parenthesis
|
|
242
|
+
* @return {Node}
|
|
243
|
+
*/
|
|
244
|
+
|
|
245
|
+
function unwrapParen(_node, parenthesis) {
|
|
246
|
+
if (!parenthesis || parenthesis !== 'auto') return _node;
|
|
247
|
+
var node = _node;
|
|
248
|
+
|
|
249
|
+
while (isParenthesisNode(node)) {
|
|
250
|
+
node = node.content;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return node;
|
|
254
|
+
}
|
|
199
255
|
/**
|
|
200
256
|
* Get the precedence of a Node.
|
|
201
257
|
* Higher number for higher precedence, starting with 0.
|
|
@@ -203,10 +259,13 @@ export var properties = [{
|
|
|
203
259
|
*
|
|
204
260
|
* @param {Node} _node
|
|
205
261
|
* @param {string} parenthesis
|
|
262
|
+
* @param {string} implicit
|
|
263
|
+
* @param {Node} parent (for determining context for implicit multiplication)
|
|
206
264
|
* @return {number | null}
|
|
207
265
|
*/
|
|
208
266
|
|
|
209
|
-
|
|
267
|
+
|
|
268
|
+
export function getPrecedence(_node, parenthesis, implicit, parent) {
|
|
210
269
|
var node = _node;
|
|
211
270
|
|
|
212
271
|
if (parenthesis !== 'keep') {
|
|
@@ -215,14 +274,26 @@ export function getPrecedence(_node, parenthesis) {
|
|
|
215
274
|
}
|
|
216
275
|
|
|
217
276
|
var identifier = node.getIdentifier();
|
|
277
|
+
var precedence = null;
|
|
218
278
|
|
|
219
279
|
for (var i = 0; i < properties.length; i++) {
|
|
220
280
|
if (identifier in properties[i]) {
|
|
221
|
-
|
|
281
|
+
precedence = i;
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
} // Bump up precedence of implicit multiplication, except when preceded
|
|
285
|
+
// by a "Rule 2" fraction ( [unaryOp]constant / constant )
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
if (identifier === 'OperatorNode:multiply' && node.implicit && implicit !== 'show') {
|
|
289
|
+
var leftArg = unwrapParen(node.args[0], parenthesis);
|
|
290
|
+
|
|
291
|
+
if (!(isConstantNode(leftArg) && parent && parent.getIdentifier() === 'OperatorNode:divide' && rule2Node(unwrapParen(parent.args[0], parenthesis))) && !(leftArg.getIdentifier() === 'OperatorNode:divide' && rule2Node(unwrapParen(leftArg.args[0], parenthesis)) && isConstantNode(unwrapParen(leftArg.args[1])))) {
|
|
292
|
+
precedence += 1;
|
|
222
293
|
}
|
|
223
294
|
}
|
|
224
295
|
|
|
225
|
-
return
|
|
296
|
+
return precedence;
|
|
226
297
|
}
|
|
227
298
|
/**
|
|
228
299
|
* Get the associativity of an operator (left or right).
|
|
@@ -305,5 +376,26 @@ export function isAssociativeWith(nodeA, nodeB, parenthesis) {
|
|
|
305
376
|
} // associativeWith is not defined
|
|
306
377
|
|
|
307
378
|
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Get the operator associated with a function name.
|
|
383
|
+
* Returns a string with the operator symbol, or null if the
|
|
384
|
+
* input is not the name of a function associated with an
|
|
385
|
+
* operator.
|
|
386
|
+
*
|
|
387
|
+
* @param {string} Function name
|
|
388
|
+
* @return {string | null} Associated operator symbol, if any
|
|
389
|
+
*/
|
|
390
|
+
|
|
391
|
+
export function getOperator(fn) {
|
|
392
|
+
var identifier = 'OperatorNode:' + fn;
|
|
393
|
+
|
|
394
|
+
for (var group of properties) {
|
|
395
|
+
if (identifier in group) {
|
|
396
|
+
return group[identifier].op;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
308
400
|
return null;
|
|
309
401
|
}
|