mathjs 10.6.4 → 11.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +63 -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 +50 -40
- 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 +50 -40
- 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 +20 -23
- package/types/index.d.ts +201 -180
- package/types/index.ts +264 -57
- package/lib/cjs/utils/polyfills.js +0 -14
- package/lib/esm/utils/polyfills.js +0 -12
@@ -1,4 +1,5 @@
|
|
1
|
-
import
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
+
import { isNode, isConstantNode, isOperatorNode, isParenthesisNode } from '../../utils/is.js';
|
2
3
|
import { map } from '../../utils/array.js';
|
3
4
|
import { escape } from '../../utils/string.js';
|
4
5
|
import { getSafeProperty, isSafeMethod } from '../../utils/customs.js';
|
@@ -13,149 +14,29 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
13
14
|
} = _ref;
|
14
15
|
|
15
16
|
/**
|
16
|
-
*
|
17
|
-
*
|
18
|
-
*
|
19
|
-
*
|
20
|
-
* @
|
21
|
-
* @param {string} fn Function name, for example 'add'
|
22
|
-
* @param {Node[]} args Operator arguments
|
23
|
-
* @param {boolean} [implicit] Is this an implicit multiplication?
|
24
|
-
* @param {boolean} [isPercentage] Is this an percentage Operation?
|
25
|
-
*/
|
26
|
-
function OperatorNode(op, fn, args, implicit, isPercentage) {
|
27
|
-
if (!(this instanceof OperatorNode)) {
|
28
|
-
throw new SyntaxError('Constructor must be called with the new operator');
|
29
|
-
} // validate input
|
30
|
-
|
31
|
-
|
32
|
-
if (typeof op !== 'string') {
|
33
|
-
throw new TypeError('string expected for parameter "op"');
|
34
|
-
}
|
35
|
-
|
36
|
-
if (typeof fn !== 'string') {
|
37
|
-
throw new TypeError('string expected for parameter "fn"');
|
38
|
-
}
|
39
|
-
|
40
|
-
if (!Array.isArray(args) || !args.every(isNode)) {
|
41
|
-
throw new TypeError('Array containing Nodes expected for parameter "args"');
|
42
|
-
}
|
43
|
-
|
44
|
-
this.implicit = implicit === true;
|
45
|
-
this.isPercentage = isPercentage === true;
|
46
|
-
this.op = op;
|
47
|
-
this.fn = fn;
|
48
|
-
this.args = args || [];
|
49
|
-
}
|
50
|
-
|
51
|
-
OperatorNode.prototype = new Node();
|
52
|
-
OperatorNode.prototype.type = 'OperatorNode';
|
53
|
-
OperatorNode.prototype.isOperatorNode = true;
|
54
|
-
/**
|
55
|
-
* Compile a node into a JavaScript function.
|
56
|
-
* This basically pre-calculates as much as possible and only leaves open
|
57
|
-
* calculations which depend on a dynamic scope with variables.
|
58
|
-
* @param {Object} math Math.js namespace with functions and constants.
|
59
|
-
* @param {Object} argNames An object with argument names as key and `true`
|
60
|
-
* as value. Used in the SymbolNode to optimize
|
61
|
-
* for arguments from user assigned functions
|
62
|
-
* (see FunctionAssignmentNode) or special symbols
|
63
|
-
* like `end` (see IndexNode).
|
64
|
-
* @return {function} Returns a function which can be called like:
|
65
|
-
* evalNode(scope: Object, args: Object, context: *)
|
17
|
+
* Returns true if the expression starts with a constant, under
|
18
|
+
* the current parenthesization:
|
19
|
+
* @param {Node} expression
|
20
|
+
* @param {string} parenthesis
|
21
|
+
* @return {boolean}
|
66
22
|
*/
|
23
|
+
function startsWithConstant(expr, parenthesis) {
|
24
|
+
var curNode = expr;
|
67
25
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
if (!math[this.fn]) {
|
72
|
-
throw new Error('Function ' + this.fn + ' missing in provided namespace "math"');
|
73
|
-
} else {
|
74
|
-
throw new Error('No access to function "' + this.fn + '"');
|
26
|
+
if (parenthesis === 'auto') {
|
27
|
+
while (isParenthesisNode(curNode)) {
|
28
|
+
curNode = curNode.content;
|
75
29
|
}
|
76
30
|
}
|
77
31
|
|
78
|
-
|
79
|
-
var evalArgs = map(this.args, function (arg) {
|
80
|
-
return arg._compile(math, argNames);
|
81
|
-
});
|
82
|
-
|
83
|
-
if (evalArgs.length === 1) {
|
84
|
-
var evalArg0 = evalArgs[0];
|
85
|
-
return function evalOperatorNode(scope, args, context) {
|
86
|
-
return fn(evalArg0(scope, args, context));
|
87
|
-
};
|
88
|
-
} else if (evalArgs.length === 2) {
|
89
|
-
var _evalArg = evalArgs[0];
|
90
|
-
var evalArg1 = evalArgs[1];
|
91
|
-
return function evalOperatorNode(scope, args, context) {
|
92
|
-
return fn(_evalArg(scope, args, context), evalArg1(scope, args, context));
|
93
|
-
};
|
94
|
-
} else {
|
95
|
-
return function evalOperatorNode(scope, args, context) {
|
96
|
-
return fn.apply(null, map(evalArgs, function (evalArg) {
|
97
|
-
return evalArg(scope, args, context);
|
98
|
-
}));
|
99
|
-
};
|
100
|
-
}
|
101
|
-
};
|
102
|
-
/**
|
103
|
-
* Execute a callback for each of the child nodes of this node
|
104
|
-
* @param {function(child: Node, path: string, parent: Node)} callback
|
105
|
-
*/
|
106
|
-
|
107
|
-
|
108
|
-
OperatorNode.prototype.forEach = function (callback) {
|
109
|
-
for (var i = 0; i < this.args.length; i++) {
|
110
|
-
callback(this.args[i], 'args[' + i + ']', this);
|
111
|
-
}
|
112
|
-
};
|
113
|
-
/**
|
114
|
-
* Create a new OperatorNode having it's childs be the results of calling
|
115
|
-
* the provided callback function for each of the childs of the original node.
|
116
|
-
* @param {function(child: Node, path: string, parent: Node): Node} callback
|
117
|
-
* @returns {OperatorNode} Returns a transformed copy of the node
|
118
|
-
*/
|
119
|
-
|
120
|
-
|
121
|
-
OperatorNode.prototype.map = function (callback) {
|
122
|
-
var args = [];
|
32
|
+
if (isConstantNode(curNode)) return true;
|
123
33
|
|
124
|
-
|
125
|
-
|
34
|
+
if (isOperatorNode(curNode)) {
|
35
|
+
return startsWithConstant(curNode.args[0], parenthesis);
|
126
36
|
}
|
127
37
|
|
128
|
-
return
|
129
|
-
}
|
130
|
-
/**
|
131
|
-
* Create a clone of this node, a shallow copy
|
132
|
-
* @return {OperatorNode}
|
133
|
-
*/
|
134
|
-
|
135
|
-
|
136
|
-
OperatorNode.prototype.clone = function () {
|
137
|
-
return new OperatorNode(this.op, this.fn, this.args.slice(0), this.implicit, this.isPercentage);
|
138
|
-
};
|
139
|
-
/**
|
140
|
-
* Check whether this is an unary OperatorNode:
|
141
|
-
* has exactly one argument, like `-a`.
|
142
|
-
* @return {boolean} Returns true when an unary operator node, false otherwise.
|
143
|
-
*/
|
144
|
-
|
145
|
-
|
146
|
-
OperatorNode.prototype.isUnary = function () {
|
147
|
-
return this.args.length === 1;
|
148
|
-
};
|
149
|
-
/**
|
150
|
-
* Check whether this is a binary OperatorNode:
|
151
|
-
* has exactly two arguments, like `a + b`.
|
152
|
-
* @return {boolean} Returns true when a binary operator node, false otherwise.
|
153
|
-
*/
|
154
|
-
|
155
|
-
|
156
|
-
OperatorNode.prototype.isBinary = function () {
|
157
|
-
return this.args.length === 2;
|
158
|
-
};
|
38
|
+
return false;
|
39
|
+
}
|
159
40
|
/**
|
160
41
|
* Calculate which parentheses are necessary. Gets an OperatorNode
|
161
42
|
* (which is the root of the tree) and an Array of Nodes
|
@@ -173,7 +54,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
173
54
|
|
174
55
|
function calculateNecessaryParentheses(root, parenthesis, implicit, args, latex) {
|
175
56
|
// precedence of the root OperatorNode
|
176
|
-
var precedence = getPrecedence(root, parenthesis);
|
57
|
+
var precedence = getPrecedence(root, parenthesis, implicit);
|
177
58
|
var associativity = getAssociativity(root, parenthesis);
|
178
59
|
|
179
60
|
if (parenthesis === 'all' || args.length > 2 && root.getIdentifier() !== 'OperatorNode:add' && root.getIdentifier() !== 'OperatorNode:multiply') {
|
@@ -203,7 +84,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
203
84
|
// unary operators
|
204
85
|
{
|
205
86
|
// precedence of the operand
|
206
|
-
var operandPrecedence = getPrecedence(args[0], parenthesis); // handle special cases for LaTeX, where some of the parentheses aren't needed
|
87
|
+
var operandPrecedence = getPrecedence(args[0], parenthesis, implicit, root); // handle special cases for LaTeX, where some of the parentheses aren't needed
|
207
88
|
|
208
89
|
if (latex && operandPrecedence !== null) {
|
209
90
|
var operandIdentifier;
|
@@ -252,7 +133,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
252
133
|
var lhsParens; // left hand side needs parenthesis?
|
253
134
|
// precedence of the left hand side
|
254
135
|
|
255
|
-
var lhsPrecedence = getPrecedence(args[0], parenthesis); // is the root node associative with the left hand side
|
136
|
+
var lhsPrecedence = getPrecedence(args[0], parenthesis, implicit, root); // is the root node associative with the left hand side
|
256
137
|
|
257
138
|
var assocWithLhs = isAssociativeWith(root, args[0], parenthesis);
|
258
139
|
|
@@ -275,7 +156,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
275
156
|
var rhsParens; // right hand side needs parenthesis?
|
276
157
|
// precedence of the right hand side
|
277
158
|
|
278
|
-
var rhsPrecedence = getPrecedence(args[1], parenthesis); // is the root node associative with the right hand side?
|
159
|
+
var rhsPrecedence = getPrecedence(args[1], parenthesis, implicit, root); // is the root node associative with the right hand side?
|
279
160
|
|
280
161
|
var assocWithRhs = isAssociativeWith(root, args[1], parenthesis);
|
281
162
|
|
@@ -341,7 +222,7 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
341
222
|
default:
|
342
223
|
if (root.getIdentifier() === 'OperatorNode:add' || root.getIdentifier() === 'OperatorNode:multiply') {
|
343
224
|
result = args.map(function (arg) {
|
344
|
-
var argPrecedence = getPrecedence(arg, parenthesis);
|
225
|
+
var argPrecedence = getPrecedence(arg, parenthesis, implicit, root);
|
345
226
|
var assocWithArg = isAssociativeWith(root, arg, parenthesis);
|
346
227
|
var argAssociativity = getAssociativity(arg, parenthesis);
|
347
228
|
|
@@ -359,327 +240,483 @@ export var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
359
240
|
}
|
360
241
|
|
361
242
|
break;
|
362
|
-
} //
|
363
|
-
//
|
364
|
-
//
|
365
|
-
|
243
|
+
} // Handles an edge case of parentheses with implicit multiplication
|
244
|
+
// of ConstantNode.
|
245
|
+
// In that case, parenthesize ConstantNodes that follow an unparenthesized
|
246
|
+
// expression, even though they normally wouldn't be printed.
|
366
247
|
|
367
|
-
if (args.length >= 2 && root.getIdentifier() === 'OperatorNode:multiply' && root.implicit && parenthesis === 'auto' && implicit === 'hide') {
|
368
|
-
result = args.map(function (arg, index) {
|
369
|
-
var isParenthesisNode = arg.getIdentifier() === 'ParenthesisNode';
|
370
248
|
|
371
|
-
|
372
|
-
|
373
|
-
|
249
|
+
if (args.length >= 2 && root.getIdentifier() === 'OperatorNode:multiply' && root.implicit && parenthesis !== 'all' && implicit === 'hide') {
|
250
|
+
for (var i = 1; i < result.length; ++i) {
|
251
|
+
if (startsWithConstant(args[i], parenthesis) && !result[i - 1] && (parenthesis !== 'keep' || !isParenthesisNode(args[i - 1]))) {
|
252
|
+
result[i] = true;
|
374
253
|
}
|
375
|
-
|
376
|
-
return false;
|
377
|
-
});
|
254
|
+
}
|
378
255
|
}
|
379
256
|
|
380
257
|
return result;
|
381
258
|
}
|
382
|
-
/**
|
383
|
-
* Get string representation.
|
384
|
-
* @param {Object} options
|
385
|
-
* @return {string} str
|
386
|
-
*/
|
387
259
|
|
260
|
+
class OperatorNode extends Node {
|
261
|
+
/**
|
262
|
+
* @constructor OperatorNode
|
263
|
+
* @extends {Node}
|
264
|
+
* An operator with two arguments, like 2+3
|
265
|
+
*
|
266
|
+
* @param {string} op Operator name, for example '+'
|
267
|
+
* @param {string} fn Function name, for example 'add'
|
268
|
+
* @param {Node[]} args Operator arguments
|
269
|
+
* @param {boolean} [implicit] Is this an implicit multiplication?
|
270
|
+
* @param {boolean} [isPercentage] Is this an percentage Operation?
|
271
|
+
*/
|
272
|
+
constructor(op, fn, args, implicit, isPercentage) {
|
273
|
+
super(); // validate input
|
274
|
+
|
275
|
+
if (typeof op !== 'string') {
|
276
|
+
throw new TypeError('string expected for parameter "op"');
|
277
|
+
}
|
388
278
|
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
var args = this.args;
|
393
|
-
var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, false);
|
394
|
-
|
395
|
-
if (args.length === 1) {
|
396
|
-
// unary operators
|
397
|
-
var assoc = getAssociativity(this, parenthesis);
|
398
|
-
var operand = args[0].toString(options);
|
279
|
+
if (typeof fn !== 'string') {
|
280
|
+
throw new TypeError('string expected for parameter "fn"');
|
281
|
+
}
|
399
282
|
|
400
|
-
if (
|
401
|
-
|
402
|
-
}
|
283
|
+
if (!Array.isArray(args) || !args.every(isNode)) {
|
284
|
+
throw new TypeError('Array containing Nodes expected for parameter "args"');
|
285
|
+
}
|
403
286
|
|
287
|
+
this.implicit = implicit === true;
|
288
|
+
this.isPercentage = isPercentage === true;
|
289
|
+
this.op = op;
|
290
|
+
this.fn = fn;
|
291
|
+
this.args = args || [];
|
292
|
+
}
|
404
293
|
|
405
|
-
|
294
|
+
get type() {
|
295
|
+
return name;
|
296
|
+
}
|
406
297
|
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
298
|
+
get isOperatorNode() {
|
299
|
+
return true;
|
300
|
+
}
|
301
|
+
/**
|
302
|
+
* Compile a node into a JavaScript function.
|
303
|
+
* This basically pre-calculates as much as possible and only leaves open
|
304
|
+
* calculations which depend on a dynamic scope with variables.
|
305
|
+
* @param {Object} math Math.js namespace with functions and constants.
|
306
|
+
* @param {Object} argNames An object with argument names as key and `true`
|
307
|
+
* as value. Used in the SymbolNode to optimize
|
308
|
+
* for arguments from user assigned functions
|
309
|
+
* (see FunctionAssignmentNode) or special symbols
|
310
|
+
* like `end` (see IndexNode).
|
311
|
+
* @return {function} Returns a function which can be called like:
|
312
|
+
* evalNode(scope: Object, args: Object, context: *)
|
313
|
+
*/
|
314
|
+
|
315
|
+
|
316
|
+
_compile(math, argNames) {
|
317
|
+
// validate fn
|
318
|
+
if (typeof this.fn !== 'string' || !isSafeMethod(math, this.fn)) {
|
319
|
+
if (!math[this.fn]) {
|
320
|
+
throw new Error('Function ' + this.fn + ' missing in provided namespace "math"');
|
321
|
+
} else {
|
322
|
+
throw new Error('No access to function "' + this.fn + '"');
|
323
|
+
}
|
324
|
+
}
|
414
325
|
|
326
|
+
var fn = getSafeProperty(math, this.fn);
|
327
|
+
var evalArgs = map(this.args, function (arg) {
|
328
|
+
return arg._compile(math, argNames);
|
329
|
+
});
|
415
330
|
|
416
|
-
|
417
|
-
|
418
|
-
|
331
|
+
if (evalArgs.length === 1) {
|
332
|
+
var evalArg0 = evalArgs[0];
|
333
|
+
return function evalOperatorNode(scope, args, context) {
|
334
|
+
return fn(evalArg0(scope, args, context));
|
335
|
+
};
|
336
|
+
} else if (evalArgs.length === 2) {
|
337
|
+
var _evalArg = evalArgs[0];
|
338
|
+
var evalArg1 = evalArgs[1];
|
339
|
+
return function evalOperatorNode(scope, args, context) {
|
340
|
+
return fn(_evalArg(scope, args, context), evalArg1(scope, args, context));
|
341
|
+
};
|
342
|
+
} else {
|
343
|
+
return function evalOperatorNode(scope, args, context) {
|
344
|
+
return fn.apply(null, map(evalArgs, function (evalArg) {
|
345
|
+
return evalArg(scope, args, context);
|
346
|
+
}));
|
347
|
+
};
|
348
|
+
}
|
349
|
+
}
|
350
|
+
/**
|
351
|
+
* Execute a callback for each of the child nodes of this node
|
352
|
+
* @param {function(child: Node, path: string, parent: Node)} callback
|
353
|
+
*/
|
419
354
|
|
420
|
-
var rhs = args[1].toString(options); // right hand side
|
421
355
|
|
422
|
-
|
423
|
-
|
424
|
-
|
356
|
+
forEach(callback) {
|
357
|
+
for (var i = 0; i < this.args.length; i++) {
|
358
|
+
callback(this.args[i], 'args[' + i + ']', this);
|
425
359
|
}
|
360
|
+
}
|
361
|
+
/**
|
362
|
+
* Create a new OperatorNode whose children are the results of calling
|
363
|
+
* the provided callback function for each child of the original node.
|
364
|
+
* @param {function(child: Node, path: string, parent: Node): Node} callback
|
365
|
+
* @returns {OperatorNode} Returns a transformed copy of the node
|
366
|
+
*/
|
426
367
|
|
427
|
-
if (parens[1]) {
|
428
|
-
// right hand side in parenthesis?
|
429
|
-
rhs = '(' + rhs + ')';
|
430
|
-
}
|
431
368
|
|
432
|
-
|
433
|
-
|
369
|
+
map(callback) {
|
370
|
+
var args = [];
|
371
|
+
|
372
|
+
for (var i = 0; i < this.args.length; i++) {
|
373
|
+
args[i] = this._ifNode(callback(this.args[i], 'args[' + i + ']', this));
|
434
374
|
}
|
435
375
|
|
436
|
-
return
|
437
|
-
}
|
438
|
-
|
439
|
-
|
376
|
+
return new OperatorNode(this.op, this.fn, args, this.implicit, this.isPercentage);
|
377
|
+
}
|
378
|
+
/**
|
379
|
+
* Create a clone of this node, a shallow copy
|
380
|
+
* @return {OperatorNode}
|
381
|
+
*/
|
440
382
|
|
441
|
-
if (parens[index]) {
|
442
|
-
// put in parenthesis?
|
443
|
-
arg = '(' + arg + ')';
|
444
|
-
}
|
445
383
|
|
446
|
-
|
447
|
-
|
384
|
+
clone() {
|
385
|
+
return new OperatorNode(this.op, this.fn, this.args.slice(0), this.implicit, this.isPercentage);
|
386
|
+
}
|
387
|
+
/**
|
388
|
+
* Check whether this is an unary OperatorNode:
|
389
|
+
* has exactly one argument, like `-a`.
|
390
|
+
* @return {boolean}
|
391
|
+
* Returns true when an unary operator node, false otherwise.
|
392
|
+
*/
|
448
393
|
|
449
|
-
if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
|
450
|
-
return stringifiedArgs.join(' ');
|
451
|
-
}
|
452
394
|
|
453
|
-
|
454
|
-
|
455
|
-
// fallback to formatting as a function call
|
456
|
-
return this.fn + '(' + this.args.join(', ') + ')';
|
395
|
+
isUnary() {
|
396
|
+
return this.args.length === 1;
|
457
397
|
}
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
398
|
+
/**
|
399
|
+
* Check whether this is a binary OperatorNode:
|
400
|
+
* has exactly two arguments, like `a + b`.
|
401
|
+
* @return {boolean}
|
402
|
+
* Returns true when a binary operator node, false otherwise.
|
403
|
+
*/
|
463
404
|
|
464
405
|
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
};
|
474
|
-
};
|
475
|
-
/**
|
476
|
-
* Instantiate an OperatorNode from its JSON representation
|
477
|
-
* @param {Object} json An object structured like
|
478
|
-
* `{"mathjs": "OperatorNode", "op": "+", "fn": "add", "args": [...], "implicit": false, "isPercentage":false}`,
|
479
|
-
* where mathjs is optional
|
480
|
-
* @returns {OperatorNode}
|
481
|
-
*/
|
406
|
+
isBinary() {
|
407
|
+
return this.args.length === 2;
|
408
|
+
}
|
409
|
+
/**
|
410
|
+
* Get string representation.
|
411
|
+
* @param {Object} options
|
412
|
+
* @return {string} str
|
413
|
+
*/
|
482
414
|
|
483
415
|
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
* @param {Object} options
|
490
|
-
* @return {string} str
|
491
|
-
*/
|
416
|
+
_toString(options) {
|
417
|
+
var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
|
418
|
+
var implicit = options && options.implicit ? options.implicit : 'hide';
|
419
|
+
var args = this.args;
|
420
|
+
var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, false);
|
492
421
|
|
422
|
+
if (args.length === 1) {
|
423
|
+
// unary operators
|
424
|
+
var assoc = getAssociativity(this, parenthesis);
|
425
|
+
var operand = args[0].toString(options);
|
493
426
|
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
var args = this.args;
|
498
|
-
var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, false);
|
427
|
+
if (parens[0]) {
|
428
|
+
operand = '(' + operand + ')';
|
429
|
+
} // for example for "not", we want a space between operand and argument
|
499
430
|
|
500
|
-
if (args.length === 1) {
|
501
|
-
// unary operators
|
502
|
-
var assoc = getAssociativity(this, parenthesis);
|
503
|
-
var operand = args[0].toHTML(options);
|
504
431
|
|
505
|
-
|
506
|
-
operand = '<span class="math-parenthesis math-round-parenthesis">(</span>' + operand + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
507
|
-
}
|
432
|
+
var opIsNamed = /[a-zA-Z]+/.test(this.op);
|
508
433
|
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
} else if (args.length === 2) {
|
517
|
-
// binary operatoes
|
518
|
-
var lhs = args[0].toHTML(options); // left hand side
|
434
|
+
if (assoc === 'right') {
|
435
|
+
// prefix operator
|
436
|
+
return this.op + (opIsNamed ? ' ' : '') + operand;
|
437
|
+
} else if (assoc === 'left') {
|
438
|
+
// postfix
|
439
|
+
return operand + (opIsNamed ? ' ' : '') + this.op;
|
440
|
+
} // fall back to postfix
|
519
441
|
|
520
|
-
var rhs = args[1].toHTML(options); // right hand side
|
521
442
|
|
522
|
-
|
523
|
-
|
524
|
-
lhs =
|
525
|
-
}
|
443
|
+
return operand + this.op;
|
444
|
+
} else if (args.length === 2) {
|
445
|
+
var lhs = args[0].toString(options); // left hand side
|
526
446
|
|
527
|
-
|
528
|
-
// right hand side in parenthesis?
|
529
|
-
rhs = '<span class="math-parenthesis math-round-parenthesis">(</span>' + rhs + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
530
|
-
}
|
447
|
+
var rhs = args[1].toString(options); // right hand side
|
531
448
|
|
532
|
-
|
533
|
-
|
534
|
-
|
449
|
+
if (parens[0]) {
|
450
|
+
// left hand side in parenthesis?
|
451
|
+
lhs = '(' + lhs + ')';
|
452
|
+
}
|
535
453
|
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
454
|
+
if (parens[1]) {
|
455
|
+
// right hand side in parenthesis?
|
456
|
+
rhs = '(' + rhs + ')';
|
457
|
+
}
|
540
458
|
|
541
|
-
if (
|
542
|
-
|
543
|
-
arg = '<span class="math-parenthesis math-round-parenthesis">(</span>' + arg + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
459
|
+
if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
|
460
|
+
return lhs + ' ' + rhs;
|
544
461
|
}
|
545
462
|
|
546
|
-
return
|
547
|
-
})
|
463
|
+
return lhs + ' ' + this.op + ' ' + rhs;
|
464
|
+
} else if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {
|
465
|
+
var stringifiedArgs = args.map(function (arg, index) {
|
466
|
+
arg = arg.toString(options);
|
467
|
+
|
468
|
+
if (parens[index]) {
|
469
|
+
// put in parenthesis?
|
470
|
+
arg = '(' + arg + ')';
|
471
|
+
}
|
472
|
+
|
473
|
+
return arg;
|
474
|
+
});
|
548
475
|
|
549
|
-
if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {
|
550
476
|
if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
|
551
|
-
return stringifiedArgs.join('
|
477
|
+
return stringifiedArgs.join(' ');
|
552
478
|
}
|
553
479
|
|
554
|
-
return stringifiedArgs.join('
|
480
|
+
return stringifiedArgs.join(' ' + this.op + ' ');
|
555
481
|
} else {
|
556
482
|
// fallback to formatting as a function call
|
557
|
-
return
|
483
|
+
return this.fn + '(' + this.args.join(', ') + ')';
|
558
484
|
}
|
559
485
|
}
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
486
|
+
/**
|
487
|
+
* Get a JSON representation of the node
|
488
|
+
* @returns {Object}
|
489
|
+
*/
|
490
|
+
|
491
|
+
|
492
|
+
toJSON() {
|
493
|
+
return {
|
494
|
+
mathjs: name,
|
495
|
+
op: this.op,
|
496
|
+
fn: this.fn,
|
497
|
+
args: this.args,
|
498
|
+
implicit: this.implicit,
|
499
|
+
isPercentage: this.isPercentage
|
500
|
+
};
|
501
|
+
}
|
502
|
+
/**
|
503
|
+
* Instantiate an OperatorNode from its JSON representation
|
504
|
+
* @param {Object} json
|
505
|
+
* An object structured like
|
506
|
+
* ```
|
507
|
+
* {"mathjs": "OperatorNode",
|
508
|
+
* "op": "+", "fn": "add", "args": [...],
|
509
|
+
* "implicit": false,
|
510
|
+
* "isPercentage":false}
|
511
|
+
* ```
|
512
|
+
* where mathjs is optional
|
513
|
+
* @returns {OperatorNode}
|
514
|
+
*/
|
515
|
+
|
516
|
+
|
517
|
+
static fromJSON(json) {
|
518
|
+
return new OperatorNode(json.op, json.fn, json.args, json.implicit, json.isPercentage);
|
519
|
+
}
|
520
|
+
/**
|
521
|
+
* Get HTML representation.
|
522
|
+
* @param {Object} options
|
523
|
+
* @return {string} str
|
524
|
+
*/
|
566
525
|
|
567
526
|
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
var op = latexOperators[this.fn];
|
574
|
-
op = typeof op === 'undefined' ? this.op : op; // fall back to using this.op
|
527
|
+
toHTML(options) {
|
528
|
+
var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
|
529
|
+
var implicit = options && options.implicit ? options.implicit : 'hide';
|
530
|
+
var args = this.args;
|
531
|
+
var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, false);
|
575
532
|
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
533
|
+
if (args.length === 1) {
|
534
|
+
// unary operators
|
535
|
+
var assoc = getAssociativity(this, parenthesis);
|
536
|
+
var operand = args[0].toHTML(options);
|
580
537
|
|
581
|
-
|
582
|
-
|
583
|
-
|
538
|
+
if (parens[0]) {
|
539
|
+
operand = '<span class="math-parenthesis math-round-parenthesis">(</span>' + operand + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
540
|
+
}
|
584
541
|
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
542
|
+
if (assoc === 'right') {
|
543
|
+
// prefix operator
|
544
|
+
return '<span class="math-operator math-unary-operator ' + 'math-lefthand-unary-operator">' + escape(this.op) + '</span>' + operand;
|
545
|
+
} else {
|
546
|
+
// postfix when assoc === 'left' or undefined
|
547
|
+
return operand + '<span class="math-operator math-unary-operator ' + 'math-righthand-unary-operator">' + escape(this.op) + '</span>';
|
548
|
+
}
|
549
|
+
} else if (args.length === 2) {
|
550
|
+
// binary operatoes
|
551
|
+
var lhs = args[0].toHTML(options); // left hand side
|
552
|
+
|
553
|
+
var rhs = args[1].toHTML(options); // right hand side
|
554
|
+
|
555
|
+
if (parens[0]) {
|
556
|
+
// left hand side in parenthesis?
|
557
|
+
lhs = '<span class="math-parenthesis math-round-parenthesis">(</span>' + lhs + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
558
|
+
}
|
559
|
+
|
560
|
+
if (parens[1]) {
|
561
|
+
// right hand side in parenthesis?
|
562
|
+
rhs = '<span class="math-parenthesis math-round-parenthesis">(</span>' + rhs + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
563
|
+
}
|
564
|
+
|
565
|
+
if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
|
566
|
+
return lhs + '<span class="math-operator math-binary-operator ' + 'math-implicit-binary-operator"></span>' + rhs;
|
567
|
+
}
|
592
568
|
|
569
|
+
return lhs + '<span class="math-operator math-binary-operator ' + 'math-explicit-binary-operator">' + escape(this.op) + '</span>' + rhs;
|
570
|
+
} else {
|
571
|
+
var stringifiedArgs = args.map(function (arg, index) {
|
572
|
+
arg = arg.toHTML(options);
|
593
573
|
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
574
|
+
if (parens[index]) {
|
575
|
+
// put in parenthesis?
|
576
|
+
arg = '<span class="math-parenthesis math-round-parenthesis">(</span>' + arg + '<span class="math-parenthesis math-round-parenthesis">)</span>';
|
577
|
+
}
|
598
578
|
|
599
|
-
|
579
|
+
return arg;
|
580
|
+
});
|
600
581
|
|
601
|
-
|
602
|
-
|
582
|
+
if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {
|
583
|
+
if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {
|
584
|
+
return stringifiedArgs.join('<span class="math-operator math-binary-operator ' + 'math-implicit-binary-operator"></span>');
|
585
|
+
}
|
586
|
+
|
587
|
+
return stringifiedArgs.join('<span class="math-operator math-binary-operator ' + 'math-explicit-binary-operator">' + escape(this.op) + '</span>');
|
588
|
+
} else {
|
589
|
+
// fallback to formatting as a function call
|
590
|
+
return '<span class="math-function">' + escape(this.fn) + '</span><span class="math-paranthesis math-round-parenthesis">' + '(</span>' + stringifiedArgs.join('<span class="math-separator">,</span>') + '<span class="math-paranthesis math-round-parenthesis">)</span>';
|
591
|
+
}
|
603
592
|
}
|
593
|
+
}
|
594
|
+
/**
|
595
|
+
* Get LaTeX representation
|
596
|
+
* @param {Object} options
|
597
|
+
* @return {string} str
|
598
|
+
*/
|
599
|
+
|
600
|
+
|
601
|
+
_toTex(options) {
|
602
|
+
var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';
|
603
|
+
var implicit = options && options.implicit ? options.implicit : 'hide';
|
604
|
+
var args = this.args;
|
605
|
+
var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, true);
|
606
|
+
var op = latexOperators[this.fn];
|
607
|
+
op = typeof op === 'undefined' ? this.op : op; // fall back to using this.op
|
608
|
+
|
609
|
+
if (args.length === 1) {
|
610
|
+
// unary operators
|
611
|
+
var assoc = getAssociativity(this, parenthesis);
|
612
|
+
var operand = args[0].toTex(options);
|
613
|
+
|
614
|
+
if (parens[0]) {
|
615
|
+
operand = "\\left(".concat(operand, "\\right)");
|
616
|
+
}
|
604
617
|
|
605
|
-
|
618
|
+
if (assoc === 'right') {
|
619
|
+
// prefix operator
|
620
|
+
return op + operand;
|
621
|
+
} else if (assoc === 'left') {
|
622
|
+
// postfix operator
|
623
|
+
return operand + op;
|
624
|
+
} // fall back to postfix
|
606
625
|
|
607
|
-
var rhsTex = rhs.toTex(options);
|
608
626
|
|
609
|
-
|
610
|
-
|
611
|
-
|
627
|
+
return operand + op;
|
628
|
+
} else if (args.length === 2) {
|
629
|
+
// binary operators
|
630
|
+
var lhs = args[0]; // left hand side
|
612
631
|
|
632
|
+
var lhsTex = lhs.toTex(options);
|
613
633
|
|
614
|
-
|
634
|
+
if (parens[0]) {
|
635
|
+
lhsTex = "\\left(".concat(lhsTex, "\\right)");
|
636
|
+
}
|
615
637
|
|
616
|
-
|
617
|
-
lhsIdentifier = lhs.getIdentifier();
|
618
|
-
} else {
|
619
|
-
// Ignore ParenthesisNodes if in 'keep' mode
|
620
|
-
lhsIdentifier = lhs.getContent().getIdentifier();
|
621
|
-
}
|
638
|
+
var rhs = args[1]; // right hand side
|
622
639
|
|
623
|
-
|
624
|
-
case 'OperatorNode:divide':
|
625
|
-
// op contains '\\frac' at this point
|
626
|
-
return op + '{' + lhsTex + '}' + '{' + rhsTex + '}';
|
640
|
+
var rhsTex = rhs.toTex(options);
|
627
641
|
|
628
|
-
|
629
|
-
|
630
|
-
|
642
|
+
if (parens[1]) {
|
643
|
+
rhsTex = "\\left(".concat(rhsTex, "\\right)");
|
644
|
+
} // handle some exceptions (due to the way LaTeX works)
|
631
645
|
|
632
|
-
switch (lhsIdentifier) {
|
633
|
-
case 'ConditionalNode': //
|
634
646
|
|
635
|
-
|
636
|
-
lhsTex = "\\left(".concat(lhsTex, "\\right)");
|
637
|
-
}
|
647
|
+
var lhsIdentifier;
|
638
648
|
|
639
|
-
|
649
|
+
if (parenthesis === 'keep') {
|
650
|
+
lhsIdentifier = lhs.getIdentifier();
|
651
|
+
} else {
|
652
|
+
// Ignore ParenthesisNodes if in 'keep' mode
|
653
|
+
lhsIdentifier = lhs.getContent().getIdentifier();
|
654
|
+
}
|
640
655
|
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
656
|
+
switch (this.getIdentifier()) {
|
657
|
+
case 'OperatorNode:divide':
|
658
|
+
// op contains '\\frac' at this point
|
659
|
+
return op + '{' + lhsTex + '}' + '{' + rhsTex + '}';
|
645
660
|
|
646
|
-
|
661
|
+
case 'OperatorNode:pow':
|
662
|
+
lhsTex = '{' + lhsTex + '}';
|
663
|
+
rhsTex = '{' + rhsTex + '}';
|
647
664
|
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
665
|
+
switch (lhsIdentifier) {
|
666
|
+
case 'ConditionalNode': //
|
667
|
+
|
668
|
+
case 'OperatorNode:divide':
|
669
|
+
lhsTex = "\\left(".concat(lhsTex, "\\right)");
|
670
|
+
}
|
671
|
+
|
672
|
+
break;
|
673
|
+
|
674
|
+
case 'OperatorNode:multiply':
|
675
|
+
if (this.implicit && implicit === 'hide') {
|
676
|
+
return lhsTex + '~' + rhsTex;
|
677
|
+
}
|
652
678
|
|
653
|
-
if (parens[index]) {
|
654
|
-
arg = "\\left(".concat(arg, "\\right)");
|
655
679
|
}
|
656
680
|
|
657
|
-
return
|
658
|
-
})
|
681
|
+
return lhsTex + op + rhsTex;
|
682
|
+
} else if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {
|
683
|
+
var texifiedArgs = args.map(function (arg, index) {
|
684
|
+
arg = arg.toTex(options);
|
685
|
+
|
686
|
+
if (parens[index]) {
|
687
|
+
arg = "\\left(".concat(arg, "\\right)");
|
688
|
+
}
|
659
689
|
|
660
|
-
|
661
|
-
|
690
|
+
return arg;
|
691
|
+
});
|
692
|
+
|
693
|
+
if (this.getIdentifier() === 'OperatorNode:multiply' && this.implicit && implicit === 'hide') {
|
694
|
+
return texifiedArgs.join('~');
|
695
|
+
}
|
696
|
+
|
697
|
+
return texifiedArgs.join(op);
|
698
|
+
} else {
|
699
|
+
// fall back to formatting as a function call
|
700
|
+
// as this is a fallback, it doesn't use
|
701
|
+
// fancy function names
|
702
|
+
return '\\mathrm{' + this.fn + '}\\left(' + args.map(function (arg) {
|
703
|
+
return arg.toTex(options);
|
704
|
+
}).join(',') + '\\right)';
|
662
705
|
}
|
706
|
+
}
|
707
|
+
/**
|
708
|
+
* Get identifier.
|
709
|
+
* @return {string}
|
710
|
+
*/
|
663
711
|
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
// as this is a fallback, it doesn't use
|
668
|
-
// fancy function names
|
669
|
-
return '\\mathrm{' + this.fn + '}\\left(' + args.map(function (arg) {
|
670
|
-
return arg.toTex(options);
|
671
|
-
}).join(',') + '\\right)';
|
712
|
+
|
713
|
+
getIdentifier() {
|
714
|
+
return this.type + ':' + this.fn;
|
672
715
|
}
|
673
|
-
};
|
674
|
-
/**
|
675
|
-
* Get identifier.
|
676
|
-
* @return {string}
|
677
|
-
*/
|
678
716
|
|
717
|
+
}
|
679
718
|
|
680
|
-
OperatorNode
|
681
|
-
return this.type + ':' + this.fn;
|
682
|
-
};
|
719
|
+
_defineProperty(OperatorNode, "name", name);
|
683
720
|
|
684
721
|
return OperatorNode;
|
685
722
|
}, {
|