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
|
@@ -7,10 +7,24 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.createFunctionNode = void 0;
|
|
9
9
|
|
|
10
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
|
-
|
|
12
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
11
|
|
|
12
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
|
+
|
|
14
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
15
|
+
|
|
16
|
+
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
17
|
+
|
|
18
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
19
|
+
|
|
20
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
21
|
+
|
|
22
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
23
|
+
|
|
24
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
25
|
+
|
|
26
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
27
|
+
|
|
14
28
|
var _is = require("../../utils/is.js");
|
|
15
29
|
|
|
16
30
|
var _string = require("../../utils/string.js");
|
|
@@ -25,6 +39,10 @@ var _factory = require("../../utils/factory.js");
|
|
|
25
39
|
|
|
26
40
|
var _latex = require("../../utils/latex.js");
|
|
27
41
|
|
|
42
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
43
|
+
|
|
44
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
45
|
+
|
|
28
46
|
var name = 'FunctionNode';
|
|
29
47
|
var dependencies = ['math', 'Node', 'SymbolNode'];
|
|
30
48
|
var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
@@ -32,351 +50,12 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
|
32
50
|
Node = _ref.Node,
|
|
33
51
|
SymbolNode = _ref.SymbolNode;
|
|
34
52
|
|
|
35
|
-
/**
|
|
36
|
-
* @constructor FunctionNode
|
|
37
|
-
* @extends {./Node}
|
|
38
|
-
* invoke a list with arguments on a node
|
|
39
|
-
* @param {./Node | string} fn Node resolving with a function on which to invoke
|
|
40
|
-
* the arguments, typically a SymboNode or AccessorNode
|
|
41
|
-
* @param {./Node[]} args
|
|
42
|
-
*/
|
|
43
|
-
function FunctionNode(fn, args) {
|
|
44
|
-
if (!(this instanceof FunctionNode)) {
|
|
45
|
-
throw new SyntaxError('Constructor must be called with the new operator');
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (typeof fn === 'string') {
|
|
49
|
-
fn = new SymbolNode(fn);
|
|
50
|
-
} // validate input
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (!(0, _is.isNode)(fn)) throw new TypeError('Node expected as parameter "fn"');
|
|
54
|
-
|
|
55
|
-
if (!Array.isArray(args) || !args.every(_is.isNode)) {
|
|
56
|
-
throw new TypeError('Array containing Nodes expected for parameter "args"');
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
this.fn = fn;
|
|
60
|
-
this.args = args || []; // readonly property name
|
|
61
|
-
|
|
62
|
-
Object.defineProperty(this, 'name', {
|
|
63
|
-
get: function () {
|
|
64
|
-
return this.fn.name || '';
|
|
65
|
-
}.bind(this),
|
|
66
|
-
set: function set() {
|
|
67
|
-
throw new Error('Cannot assign a new name, name is read-only');
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
FunctionNode.prototype = new Node();
|
|
73
|
-
FunctionNode.prototype.type = 'FunctionNode';
|
|
74
|
-
FunctionNode.prototype.isFunctionNode = true;
|
|
75
53
|
/* format to fixed length */
|
|
76
|
-
|
|
77
54
|
var strin = function strin(entity) {
|
|
78
55
|
return (0, _string.format)(entity, {
|
|
79
56
|
truncate: 78
|
|
80
57
|
});
|
|
81
58
|
};
|
|
82
|
-
/**
|
|
83
|
-
* Compile a node into a JavaScript function.
|
|
84
|
-
* This basically pre-calculates as much as possible and only leaves open
|
|
85
|
-
* calculations which depend on a dynamic scope with variables.
|
|
86
|
-
* @param {Object} math Math.js namespace with functions and constants.
|
|
87
|
-
* @param {Object} argNames An object with argument names as key and `true`
|
|
88
|
-
* as value. Used in the SymbolNode to optimize
|
|
89
|
-
* for arguments from user assigned functions
|
|
90
|
-
* (see FunctionAssignmentNode) or special symbols
|
|
91
|
-
* like `end` (see IndexNode).
|
|
92
|
-
* @return {function} Returns a function which can be called like:
|
|
93
|
-
* evalNode(scope: Object, args: Object, context: *)
|
|
94
|
-
*/
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
FunctionNode.prototype._compile = function (math, argNames) {
|
|
98
|
-
if (!(this instanceof FunctionNode)) {
|
|
99
|
-
throw new TypeError('No valid FunctionNode');
|
|
100
|
-
} // compile arguments
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
var evalArgs = this.args.map(function (arg) {
|
|
104
|
-
return arg._compile(math, argNames);
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
if ((0, _is.isSymbolNode)(this.fn)) {
|
|
108
|
-
var _name = this.fn.name;
|
|
109
|
-
|
|
110
|
-
if (!argNames[_name]) {
|
|
111
|
-
// we can statically determine whether the function has an rawArgs property
|
|
112
|
-
var fn = _name in math ? (0, _customs.getSafeProperty)(math, _name) : undefined;
|
|
113
|
-
var isRaw = typeof fn === 'function' && fn.rawArgs === true;
|
|
114
|
-
|
|
115
|
-
var resolveFn = function resolveFn(scope) {
|
|
116
|
-
var value;
|
|
117
|
-
|
|
118
|
-
if (scope.has(_name)) {
|
|
119
|
-
value = scope.get(_name);
|
|
120
|
-
} else if (_name in math) {
|
|
121
|
-
value = (0, _customs.getSafeProperty)(math, _name);
|
|
122
|
-
} else {
|
|
123
|
-
return FunctionNode.onUndefinedFunction(_name);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (typeof value === 'function') {
|
|
127
|
-
return value;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
throw new TypeError("'".concat(_name, "' is not a function; its value is:\n ").concat(strin(value)));
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
if (isRaw) {
|
|
134
|
-
// pass unevaluated parameters (nodes) to the function
|
|
135
|
-
// "raw" evaluation
|
|
136
|
-
var rawArgs = this.args;
|
|
137
|
-
return function evalFunctionNode(scope, args, context) {
|
|
138
|
-
var fn = resolveFn(scope);
|
|
139
|
-
return fn(rawArgs, math, (0, _scope.createSubScope)(scope, args), scope);
|
|
140
|
-
};
|
|
141
|
-
} else {
|
|
142
|
-
// "regular" evaluation
|
|
143
|
-
switch (evalArgs.length) {
|
|
144
|
-
case 0:
|
|
145
|
-
return function evalFunctionNode(scope, args, context) {
|
|
146
|
-
var fn = resolveFn(scope);
|
|
147
|
-
return fn();
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
case 1:
|
|
151
|
-
return function evalFunctionNode(scope, args, context) {
|
|
152
|
-
var fn = resolveFn(scope);
|
|
153
|
-
var evalArg0 = evalArgs[0];
|
|
154
|
-
return fn(evalArg0(scope, args, context));
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
case 2:
|
|
158
|
-
return function evalFunctionNode(scope, args, context) {
|
|
159
|
-
var fn = resolveFn(scope);
|
|
160
|
-
var evalArg0 = evalArgs[0];
|
|
161
|
-
var evalArg1 = evalArgs[1];
|
|
162
|
-
return fn(evalArg0(scope, args, context), evalArg1(scope, args, context));
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
default:
|
|
166
|
-
return function evalFunctionNode(scope, args, context) {
|
|
167
|
-
var fn = resolveFn(scope);
|
|
168
|
-
var values = evalArgs.map(function (evalArg) {
|
|
169
|
-
return evalArg(scope, args, context);
|
|
170
|
-
});
|
|
171
|
-
return fn.apply(void 0, (0, _toConsumableArray2.default)(values));
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
} else {
|
|
176
|
-
// the function symbol is an argName
|
|
177
|
-
var _rawArgs = this.args;
|
|
178
|
-
return function evalFunctionNode(scope, args, context) {
|
|
179
|
-
var fn = args[_name];
|
|
180
|
-
|
|
181
|
-
if (typeof fn !== 'function') {
|
|
182
|
-
throw new TypeError("Argument '".concat(_name, "' was not a function; received: ").concat(strin(fn)));
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (fn.rawArgs) {
|
|
186
|
-
return fn(_rawArgs, math, (0, _scope.createSubScope)(scope, args), scope); // "raw" evaluation
|
|
187
|
-
} else {
|
|
188
|
-
var values = evalArgs.map(function (evalArg) {
|
|
189
|
-
return evalArg(scope, args, context);
|
|
190
|
-
});
|
|
191
|
-
return fn.apply(fn, values);
|
|
192
|
-
}
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
} else if ((0, _is.isAccessorNode)(this.fn) && (0, _is.isIndexNode)(this.fn.index) && this.fn.index.isObjectProperty()) {
|
|
196
|
-
// execute the function with the right context: the object of the AccessorNode
|
|
197
|
-
var evalObject = this.fn.object._compile(math, argNames);
|
|
198
|
-
|
|
199
|
-
var prop = this.fn.index.getObjectProperty();
|
|
200
|
-
var _rawArgs2 = this.args;
|
|
201
|
-
return function evalFunctionNode(scope, args, context) {
|
|
202
|
-
var object = evalObject(scope, args, context);
|
|
203
|
-
(0, _customs.validateSafeMethod)(object, prop);
|
|
204
|
-
var isRaw = object[prop] && object[prop].rawArgs;
|
|
205
|
-
|
|
206
|
-
if (isRaw) {
|
|
207
|
-
return object[prop](_rawArgs2, math, (0, _scope.createSubScope)(scope, args), scope); // "raw" evaluation
|
|
208
|
-
} else {
|
|
209
|
-
// "regular" evaluation
|
|
210
|
-
var values = evalArgs.map(function (evalArg) {
|
|
211
|
-
return evalArg(scope, args, context);
|
|
212
|
-
});
|
|
213
|
-
return object[prop].apply(object, values);
|
|
214
|
-
}
|
|
215
|
-
};
|
|
216
|
-
} else {
|
|
217
|
-
// node.fn.isAccessorNode && !node.fn.index.isObjectProperty()
|
|
218
|
-
// we have to dynamically determine whether the function has a rawArgs property
|
|
219
|
-
var fnExpr = this.fn.toString();
|
|
220
|
-
|
|
221
|
-
var evalFn = this.fn._compile(math, argNames);
|
|
222
|
-
|
|
223
|
-
var _rawArgs3 = this.args;
|
|
224
|
-
return function evalFunctionNode(scope, args, context) {
|
|
225
|
-
var fn = evalFn(scope, args, context);
|
|
226
|
-
|
|
227
|
-
if (typeof fn !== 'function') {
|
|
228
|
-
throw new TypeError("Expression '".concat(fnExpr, "' did not evaluate to a function; value is:") + "\n ".concat(strin(fn)));
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
if (fn.rawArgs) {
|
|
232
|
-
return fn(_rawArgs3, math, (0, _scope.createSubScope)(scope, args), scope); // "raw" evaluation
|
|
233
|
-
} else {
|
|
234
|
-
// "regular" evaluation
|
|
235
|
-
var values = evalArgs.map(function (evalArg) {
|
|
236
|
-
return evalArg(scope, args, context);
|
|
237
|
-
});
|
|
238
|
-
return fn.apply(fn, values);
|
|
239
|
-
}
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
/**
|
|
244
|
-
* Execute a callback for each of the child nodes of this node
|
|
245
|
-
* @param {function(child: Node, path: string, parent: Node)} callback
|
|
246
|
-
*/
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
FunctionNode.prototype.forEach = function (callback) {
|
|
250
|
-
callback(this.fn, 'fn', this);
|
|
251
|
-
|
|
252
|
-
for (var i = 0; i < this.args.length; i++) {
|
|
253
|
-
callback(this.args[i], 'args[' + i + ']', this);
|
|
254
|
-
}
|
|
255
|
-
};
|
|
256
|
-
/**
|
|
257
|
-
* Create a new FunctionNode having it's childs be the results of calling
|
|
258
|
-
* the provided callback function for each of the childs of the original node.
|
|
259
|
-
* @param {function(child: Node, path: string, parent: Node): Node} callback
|
|
260
|
-
* @returns {FunctionNode} Returns a transformed copy of the node
|
|
261
|
-
*/
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
FunctionNode.prototype.map = function (callback) {
|
|
265
|
-
var fn = this._ifNode(callback(this.fn, 'fn', this));
|
|
266
|
-
|
|
267
|
-
var args = [];
|
|
268
|
-
|
|
269
|
-
for (var i = 0; i < this.args.length; i++) {
|
|
270
|
-
args[i] = this._ifNode(callback(this.args[i], 'args[' + i + ']', this));
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
return new FunctionNode(fn, args);
|
|
274
|
-
};
|
|
275
|
-
/**
|
|
276
|
-
* Create a clone of this node, a shallow copy
|
|
277
|
-
* @return {FunctionNode}
|
|
278
|
-
*/
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
FunctionNode.prototype.clone = function () {
|
|
282
|
-
return new FunctionNode(this.fn, this.args.slice(0));
|
|
283
|
-
};
|
|
284
|
-
/**
|
|
285
|
-
* Throws an error 'Undefined function {name}'
|
|
286
|
-
* @param {string} name
|
|
287
|
-
*/
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
FunctionNode.onUndefinedFunction = function (name) {
|
|
291
|
-
throw new Error('Undefined function ' + name);
|
|
292
|
-
}; // backup Node's toString function
|
|
293
|
-
// @private
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
var nodeToString = FunctionNode.prototype.toString;
|
|
297
|
-
/**
|
|
298
|
-
* Get string representation. (wrapper function)
|
|
299
|
-
* This overrides parts of Node's toString function.
|
|
300
|
-
* If callback is an object containing callbacks, it
|
|
301
|
-
* calls the correct callback for the current node,
|
|
302
|
-
* otherwise it falls back to calling Node's toString
|
|
303
|
-
* function.
|
|
304
|
-
*
|
|
305
|
-
* @param {Object} options
|
|
306
|
-
* @return {string} str
|
|
307
|
-
* @override
|
|
308
|
-
*/
|
|
309
|
-
|
|
310
|
-
FunctionNode.prototype.toString = function (options) {
|
|
311
|
-
var customString;
|
|
312
|
-
var name = this.fn.toString(options);
|
|
313
|
-
|
|
314
|
-
if (options && (0, _typeof2.default)(options.handler) === 'object' && (0, _object.hasOwnProperty)(options.handler, name)) {
|
|
315
|
-
// callback is a map of callback functions
|
|
316
|
-
customString = options.handler[name](this, options);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
if (typeof customString !== 'undefined') {
|
|
320
|
-
return customString;
|
|
321
|
-
} // fall back to Node's toString
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
return nodeToString.call(this, options);
|
|
325
|
-
};
|
|
326
|
-
/**
|
|
327
|
-
* Get string representation
|
|
328
|
-
* @param {Object} options
|
|
329
|
-
* @return {string} str
|
|
330
|
-
*/
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
FunctionNode.prototype._toString = function (options) {
|
|
334
|
-
var args = this.args.map(function (arg) {
|
|
335
|
-
return arg.toString(options);
|
|
336
|
-
});
|
|
337
|
-
var fn = (0, _is.isFunctionAssignmentNode)(this.fn) ? '(' + this.fn.toString(options) + ')' : this.fn.toString(options); // format the arguments like "add(2, 4.2)"
|
|
338
|
-
|
|
339
|
-
return fn + '(' + args.join(', ') + ')';
|
|
340
|
-
};
|
|
341
|
-
/**
|
|
342
|
-
* Get a JSON representation of the node
|
|
343
|
-
* @returns {Object}
|
|
344
|
-
*/
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
FunctionNode.prototype.toJSON = function () {
|
|
348
|
-
return {
|
|
349
|
-
mathjs: 'FunctionNode',
|
|
350
|
-
fn: this.fn,
|
|
351
|
-
args: this.args
|
|
352
|
-
};
|
|
353
|
-
};
|
|
354
|
-
/**
|
|
355
|
-
* Instantiate an AssignmentNode from its JSON representation
|
|
356
|
-
* @param {Object} json An object structured like
|
|
357
|
-
* `{"mathjs": "FunctionNode", fn: ..., args: ...}`,
|
|
358
|
-
* where mathjs is optional
|
|
359
|
-
* @returns {FunctionNode}
|
|
360
|
-
*/
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
FunctionNode.fromJSON = function (json) {
|
|
364
|
-
return new FunctionNode(json.fn, json.args);
|
|
365
|
-
};
|
|
366
|
-
/**
|
|
367
|
-
* Get HTML representation
|
|
368
|
-
* @param {Object} options
|
|
369
|
-
* @return {string} str
|
|
370
|
-
*/
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
FunctionNode.prototype.toHTML = function (options) {
|
|
374
|
-
var args = this.args.map(function (arg) {
|
|
375
|
-
return arg.toHTML(options);
|
|
376
|
-
}); // format the arguments like "add(2, 4.2)"
|
|
377
|
-
|
|
378
|
-
return '<span class="math-function">' + (0, _string.escape)(this.fn) + '</span><span class="math-paranthesis math-round-parenthesis">(</span>' + args.join('<span class="math-separator">,</span>') + '<span class="math-paranthesis math-round-parenthesis">)</span>';
|
|
379
|
-
};
|
|
380
59
|
/*
|
|
381
60
|
* Expand a LaTeX template
|
|
382
61
|
*
|
|
@@ -417,7 +96,7 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
|
417
96
|
|
|
418
97
|
if (match[2] === undefined) {
|
|
419
98
|
// no square brackets
|
|
420
|
-
switch ((0, _typeof2
|
|
99
|
+
switch ((0, _typeof2["default"])(property)) {
|
|
421
100
|
case 'string':
|
|
422
101
|
latex += property;
|
|
423
102
|
break;
|
|
@@ -457,105 +136,466 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
|
457
136
|
latex += template.slice(inputPos); // append rest of the template
|
|
458
137
|
|
|
459
138
|
return latex;
|
|
460
|
-
}
|
|
461
|
-
// @private
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
var nodeToTex = FunctionNode.prototype.toTex;
|
|
465
|
-
/**
|
|
466
|
-
* Get LaTeX representation. (wrapper function)
|
|
467
|
-
* This overrides parts of Node's toTex function.
|
|
468
|
-
* If callback is an object containing callbacks, it
|
|
469
|
-
* calls the correct callback for the current node,
|
|
470
|
-
* otherwise it falls back to calling Node's toTex
|
|
471
|
-
* function.
|
|
472
|
-
*
|
|
473
|
-
* @param {Object} options
|
|
474
|
-
* @return {string}
|
|
475
|
-
*/
|
|
139
|
+
}
|
|
476
140
|
|
|
477
|
-
FunctionNode
|
|
478
|
-
|
|
141
|
+
var FunctionNode = /*#__PURE__*/function (_Node) {
|
|
142
|
+
(0, _inherits2["default"])(FunctionNode, _Node);
|
|
479
143
|
|
|
480
|
-
|
|
481
|
-
// callback is a map of callback functions
|
|
482
|
-
customTex = options.handler[this.name](this, options);
|
|
483
|
-
}
|
|
144
|
+
var _super = _createSuper(FunctionNode);
|
|
484
145
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
146
|
+
/**
|
|
147
|
+
* @constructor FunctionNode
|
|
148
|
+
* @extends {./Node}
|
|
149
|
+
* invoke a list with arguments on a node
|
|
150
|
+
* @param {./Node | string} fn
|
|
151
|
+
* Item resolving to a function on which to invoke
|
|
152
|
+
* the arguments, typically a SymboNode or AccessorNode
|
|
153
|
+
* @param {./Node[]} args
|
|
154
|
+
*/
|
|
155
|
+
function FunctionNode(fn, args) {
|
|
156
|
+
var _this;
|
|
488
157
|
|
|
158
|
+
(0, _classCallCheck2["default"])(this, FunctionNode);
|
|
159
|
+
_this = _super.call(this);
|
|
489
160
|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
* Get LaTeX representation
|
|
494
|
-
* @param {Object} options
|
|
495
|
-
* @return {string} str
|
|
496
|
-
*/
|
|
161
|
+
if (typeof fn === 'string') {
|
|
162
|
+
fn = new SymbolNode(fn);
|
|
163
|
+
} // validate input
|
|
497
164
|
|
|
498
165
|
|
|
499
|
-
|
|
500
|
-
var args = this.args.map(function (arg) {
|
|
501
|
-
// get LaTeX of the arguments
|
|
502
|
-
return arg.toTex(options);
|
|
503
|
-
});
|
|
504
|
-
var latexConverter;
|
|
166
|
+
if (!(0, _is.isNode)(fn)) throw new TypeError('Node expected as parameter "fn"');
|
|
505
167
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
168
|
+
if (!Array.isArray(args) || !args.every(_is.isNode)) {
|
|
169
|
+
throw new TypeError('Array containing Nodes expected for parameter "args"');
|
|
170
|
+
}
|
|
509
171
|
|
|
172
|
+
_this.fn = fn;
|
|
173
|
+
_this.args = args || [];
|
|
174
|
+
return _this;
|
|
175
|
+
} // readonly property name
|
|
510
176
|
|
|
511
|
-
if (math[this.name] && (typeof math[this.name].toTex === 'function' || (0, _typeof2.default)(math[this.name].toTex) === 'object' || typeof math[this.name].toTex === 'string')) {
|
|
512
|
-
// .toTex is a callback function
|
|
513
|
-
latexConverter = math[this.name].toTex;
|
|
514
|
-
}
|
|
515
177
|
|
|
516
|
-
|
|
178
|
+
(0, _createClass2["default"])(FunctionNode, [{
|
|
179
|
+
key: "name",
|
|
180
|
+
get: function get() {
|
|
181
|
+
return this.fn.name || '';
|
|
182
|
+
}
|
|
183
|
+
}, {
|
|
184
|
+
key: "type",
|
|
185
|
+
get: function get() {
|
|
186
|
+
return name;
|
|
187
|
+
}
|
|
188
|
+
}, {
|
|
189
|
+
key: "isFunctionNode",
|
|
190
|
+
get: function get() {
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Compile a node into a JavaScript function.
|
|
195
|
+
* This basically pre-calculates as much as possible and only leaves open
|
|
196
|
+
* calculations which depend on a dynamic scope with variables.
|
|
197
|
+
* @param {Object} math Math.js namespace with functions and constants.
|
|
198
|
+
* @param {Object} argNames An object with argument names as key and `true`
|
|
199
|
+
* as value. Used in the SymbolNode to optimize
|
|
200
|
+
* for arguments from user assigned functions
|
|
201
|
+
* (see FunctionAssignmentNode) or special symbols
|
|
202
|
+
* like `end` (see IndexNode).
|
|
203
|
+
* @return {function} Returns a function which can be called like:
|
|
204
|
+
* evalNode(scope: Object, args: Object, context: *)
|
|
205
|
+
*/
|
|
206
|
+
|
|
207
|
+
}, {
|
|
208
|
+
key: "_compile",
|
|
209
|
+
value: function _compile(math, argNames) {
|
|
210
|
+
// compile arguments
|
|
211
|
+
var evalArgs = this.args.map(function (arg) {
|
|
212
|
+
return arg._compile(math, argNames);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
if ((0, _is.isSymbolNode)(this.fn)) {
|
|
216
|
+
var _name = this.fn.name;
|
|
217
|
+
|
|
218
|
+
if (!argNames[_name]) {
|
|
219
|
+
// we can statically determine whether the function
|
|
220
|
+
// has the rawArgs property
|
|
221
|
+
var fn = _name in math ? (0, _customs.getSafeProperty)(math, _name) : undefined;
|
|
222
|
+
var isRaw = typeof fn === 'function' && fn.rawArgs === true;
|
|
223
|
+
|
|
224
|
+
var resolveFn = function resolveFn(scope) {
|
|
225
|
+
var value;
|
|
226
|
+
|
|
227
|
+
if (scope.has(_name)) {
|
|
228
|
+
value = scope.get(_name);
|
|
229
|
+
} else if (_name in math) {
|
|
230
|
+
value = (0, _customs.getSafeProperty)(math, _name);
|
|
231
|
+
} else {
|
|
232
|
+
return FunctionNode.onUndefinedFunction(_name);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (typeof value === 'function') {
|
|
236
|
+
return value;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
throw new TypeError("'".concat(_name, "' is not a function; its value is:\n ").concat(strin(value)));
|
|
240
|
+
};
|
|
517
241
|
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
242
|
+
if (isRaw) {
|
|
243
|
+
// pass unevaluated parameters (nodes) to the function
|
|
244
|
+
// "raw" evaluation
|
|
245
|
+
var rawArgs = this.args;
|
|
246
|
+
return function evalFunctionNode(scope, args, context) {
|
|
247
|
+
var fn = resolveFn(scope);
|
|
248
|
+
return fn(rawArgs, math, (0, _scope.createSubScope)(scope, args), scope);
|
|
249
|
+
};
|
|
250
|
+
} else {
|
|
251
|
+
// "regular" evaluation
|
|
252
|
+
switch (evalArgs.length) {
|
|
253
|
+
case 0:
|
|
254
|
+
return function evalFunctionNode(scope, args, context) {
|
|
255
|
+
var fn = resolveFn(scope);
|
|
256
|
+
return fn();
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
case 1:
|
|
260
|
+
return function evalFunctionNode(scope, args, context) {
|
|
261
|
+
var fn = resolveFn(scope);
|
|
262
|
+
var evalArg0 = evalArgs[0];
|
|
263
|
+
return fn(evalArg0(scope, args, context));
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
case 2:
|
|
267
|
+
return function evalFunctionNode(scope, args, context) {
|
|
268
|
+
var fn = resolveFn(scope);
|
|
269
|
+
var evalArg0 = evalArgs[0];
|
|
270
|
+
var evalArg1 = evalArgs[1];
|
|
271
|
+
return fn(evalArg0(scope, args, context), evalArg1(scope, args, context));
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
default:
|
|
275
|
+
return function evalFunctionNode(scope, args, context) {
|
|
276
|
+
var fn = resolveFn(scope);
|
|
277
|
+
var values = evalArgs.map(function (evalArg) {
|
|
278
|
+
return evalArg(scope, args, context);
|
|
279
|
+
});
|
|
280
|
+
return fn.apply(void 0, (0, _toConsumableArray2["default"])(values));
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
} else {
|
|
285
|
+
// the function symbol is an argName
|
|
286
|
+
var _rawArgs = this.args;
|
|
287
|
+
return function evalFunctionNode(scope, args, context) {
|
|
288
|
+
var fn = args[_name];
|
|
523
289
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
break;
|
|
290
|
+
if (typeof fn !== 'function') {
|
|
291
|
+
throw new TypeError("Argument '".concat(_name, "' was not a function; received: ").concat(strin(fn)));
|
|
292
|
+
}
|
|
528
293
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
294
|
+
if (fn.rawArgs) {
|
|
295
|
+
// "Raw" evaluation
|
|
296
|
+
return fn(_rawArgs, math, (0, _scope.createSubScope)(scope, args), scope);
|
|
297
|
+
} else {
|
|
298
|
+
var values = evalArgs.map(function (evalArg) {
|
|
299
|
+
return evalArg(scope, args, context);
|
|
300
|
+
});
|
|
301
|
+
return fn.apply(fn, values);
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
} else if ((0, _is.isAccessorNode)(this.fn) && (0, _is.isIndexNode)(this.fn.index) && this.fn.index.isObjectProperty()) {
|
|
306
|
+
// execute the function with the right context:
|
|
307
|
+
// the object of the AccessorNode
|
|
308
|
+
var evalObject = this.fn.object._compile(math, argNames);
|
|
309
|
+
|
|
310
|
+
var prop = this.fn.index.getObjectProperty();
|
|
311
|
+
var _rawArgs2 = this.args;
|
|
312
|
+
return function evalFunctionNode(scope, args, context) {
|
|
313
|
+
var object = evalObject(scope, args, context);
|
|
314
|
+
(0, _customs.validateSafeMethod)(object, prop);
|
|
315
|
+
var isRaw = object[prop] && object[prop].rawArgs;
|
|
316
|
+
|
|
317
|
+
if (isRaw) {
|
|
318
|
+
// "Raw" evaluation
|
|
319
|
+
return object[prop](_rawArgs2, math, (0, _scope.createSubScope)(scope, args), scope);
|
|
320
|
+
} else {
|
|
321
|
+
// "regular" evaluation
|
|
322
|
+
var values = evalArgs.map(function (evalArg) {
|
|
323
|
+
return evalArg(scope, args, context);
|
|
324
|
+
});
|
|
325
|
+
return object[prop].apply(object, values);
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
} else {
|
|
329
|
+
// node.fn.isAccessorNode && !node.fn.index.isObjectProperty()
|
|
330
|
+
// we have to dynamically determine whether the function has the
|
|
331
|
+
// rawArgs property
|
|
332
|
+
var fnExpr = this.fn.toString();
|
|
333
|
+
|
|
334
|
+
var evalFn = this.fn._compile(math, argNames);
|
|
335
|
+
|
|
336
|
+
var _rawArgs3 = this.args;
|
|
337
|
+
return function evalFunctionNode(scope, args, context) {
|
|
338
|
+
var fn = evalFn(scope, args, context);
|
|
339
|
+
|
|
340
|
+
if (typeof fn !== 'function') {
|
|
341
|
+
throw new TypeError("Expression '".concat(fnExpr, "' did not evaluate to a function; value is:") + "\n ".concat(strin(fn)));
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
if (fn.rawArgs) {
|
|
345
|
+
// "Raw" evaluation
|
|
346
|
+
return fn(_rawArgs3, math, (0, _scope.createSubScope)(scope, args), scope);
|
|
347
|
+
} else {
|
|
348
|
+
// "regular" evaluation
|
|
349
|
+
var values = evalArgs.map(function (evalArg) {
|
|
350
|
+
return evalArg(scope, args, context);
|
|
351
|
+
});
|
|
352
|
+
return fn.apply(fn, values);
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Execute a callback for each of the child nodes of this node
|
|
359
|
+
* @param {function(child: Node, path: string, parent: Node)} callback
|
|
360
|
+
*/
|
|
361
|
+
|
|
362
|
+
}, {
|
|
363
|
+
key: "forEach",
|
|
364
|
+
value: function forEach(callback) {
|
|
365
|
+
callback(this.fn, 'fn', this);
|
|
366
|
+
|
|
367
|
+
for (var i = 0; i < this.args.length; i++) {
|
|
368
|
+
callback(this.args[i], 'args[' + i + ']', this);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Create a new FunctionNode whose children are the results of calling
|
|
373
|
+
* the provided callback function for each child of the original node.
|
|
374
|
+
* @param {function(child: Node, path: string, parent: Node): Node} callback
|
|
375
|
+
* @returns {FunctionNode} Returns a transformed copy of the node
|
|
376
|
+
*/
|
|
377
|
+
|
|
378
|
+
}, {
|
|
379
|
+
key: "map",
|
|
380
|
+
value: function map(callback) {
|
|
381
|
+
var fn = this._ifNode(callback(this.fn, 'fn', this));
|
|
382
|
+
|
|
383
|
+
var args = [];
|
|
384
|
+
|
|
385
|
+
for (var i = 0; i < this.args.length; i++) {
|
|
386
|
+
args[i] = this._ifNode(callback(this.args[i], 'args[' + i + ']', this));
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
return new FunctionNode(fn, args);
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Create a clone of this node, a shallow copy
|
|
393
|
+
* @return {FunctionNode}
|
|
394
|
+
*/
|
|
395
|
+
|
|
396
|
+
}, {
|
|
397
|
+
key: "clone",
|
|
398
|
+
value: function clone() {
|
|
399
|
+
return new FunctionNode(this.fn, this.args.slice(0));
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Throws an error 'Undefined function {name}'
|
|
403
|
+
* @param {string} name
|
|
404
|
+
*/
|
|
405
|
+
|
|
406
|
+
}, {
|
|
407
|
+
key: "toString",
|
|
408
|
+
value:
|
|
409
|
+
/**
|
|
410
|
+
* Get string representation. (wrapper function)
|
|
411
|
+
* This overrides parts of Node's toString function.
|
|
412
|
+
* If callback is an object containing callbacks, it
|
|
413
|
+
* calls the correct callback for the current node,
|
|
414
|
+
* otherwise it falls back to calling Node's toString
|
|
415
|
+
* function.
|
|
416
|
+
*
|
|
417
|
+
* @param {Object} options
|
|
418
|
+
* @return {string} str
|
|
419
|
+
* @override
|
|
420
|
+
*/
|
|
421
|
+
function toString(options) {
|
|
422
|
+
var customString;
|
|
423
|
+
var name = this.fn.toString(options);
|
|
424
|
+
|
|
425
|
+
if (options && (0, _typeof2["default"])(options.handler) === 'object' && (0, _object.hasOwnProperty)(options.handler, name)) {
|
|
426
|
+
// callback is a map of callback functions
|
|
427
|
+
customString = options.handler[name](this, options);
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
if (typeof customString !== 'undefined') {
|
|
431
|
+
return customString;
|
|
432
|
+
} // fall back to Node's toString
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
return (0, _get2["default"])((0, _getPrototypeOf2["default"])(FunctionNode.prototype), "toString", this).call(this, options);
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Get string representation
|
|
439
|
+
* @param {Object} options
|
|
440
|
+
* @return {string} str
|
|
441
|
+
*/
|
|
442
|
+
|
|
443
|
+
}, {
|
|
444
|
+
key: "_toString",
|
|
445
|
+
value: function _toString(options) {
|
|
446
|
+
var args = this.args.map(function (arg) {
|
|
447
|
+
return arg.toString(options);
|
|
448
|
+
});
|
|
449
|
+
var fn = (0, _is.isFunctionAssignmentNode)(this.fn) ? '(' + this.fn.toString(options) + ')' : this.fn.toString(options); // format the arguments like "add(2, 4.2)"
|
|
450
|
+
|
|
451
|
+
return fn + '(' + args.join(', ') + ')';
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Get a JSON representation of the node
|
|
455
|
+
* @returns {Object}
|
|
456
|
+
*/
|
|
457
|
+
|
|
458
|
+
}, {
|
|
459
|
+
key: "toJSON",
|
|
460
|
+
value: function toJSON() {
|
|
461
|
+
return {
|
|
462
|
+
mathjs: name,
|
|
463
|
+
fn: this.fn,
|
|
464
|
+
args: this.args
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Instantiate an AssignmentNode from its JSON representation
|
|
469
|
+
* @param {Object} json An object structured like
|
|
470
|
+
* `{"mathjs": "FunctionNode", fn: ..., args: ...}`,
|
|
471
|
+
* where mathjs is optional
|
|
472
|
+
* @returns {FunctionNode}
|
|
473
|
+
*/
|
|
474
|
+
|
|
475
|
+
}, {
|
|
476
|
+
key: "toHTML",
|
|
477
|
+
value:
|
|
478
|
+
/**
|
|
479
|
+
* Get HTML representation
|
|
480
|
+
* @param {Object} options
|
|
481
|
+
* @return {string} str
|
|
482
|
+
*/
|
|
483
|
+
function toHTML(options) {
|
|
484
|
+
var args = this.args.map(function (arg) {
|
|
485
|
+
return arg.toHTML(options);
|
|
486
|
+
}); // format the arguments like "add(2, 4.2)"
|
|
487
|
+
|
|
488
|
+
return '<span class="math-function">' + (0, _string.escape)(this.fn) + '</span><span class="math-paranthesis math-round-parenthesis">(</span>' + args.join('<span class="math-separator">,</span>') + '<span class="math-paranthesis math-round-parenthesis">)</span>';
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Get LaTeX representation. (wrapper function)
|
|
492
|
+
* This overrides parts of Node's toTex function.
|
|
493
|
+
* If callback is an object containing callbacks, it
|
|
494
|
+
* calls the correct callback for the current node,
|
|
495
|
+
* otherwise it falls back to calling Node's toTex
|
|
496
|
+
* function.
|
|
497
|
+
*
|
|
498
|
+
* @param {Object} options
|
|
499
|
+
* @return {string}
|
|
500
|
+
*/
|
|
501
|
+
|
|
502
|
+
}, {
|
|
503
|
+
key: "toTex",
|
|
504
|
+
value: function toTex(options) {
|
|
505
|
+
var customTex;
|
|
506
|
+
|
|
507
|
+
if (options && (0, _typeof2["default"])(options.handler) === 'object' && (0, _object.hasOwnProperty)(options.handler, this.name)) {
|
|
508
|
+
// callback is a map of callback functions
|
|
509
|
+
customTex = options.handler[this.name](this, options);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
if (typeof customTex !== 'undefined') {
|
|
513
|
+
return customTex;
|
|
514
|
+
} // fall back to Node's toTex
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
return (0, _get2["default"])((0, _getPrototypeOf2["default"])(FunctionNode.prototype), "toTex", this).call(this, options);
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Get LaTeX representation
|
|
521
|
+
* @param {Object} options
|
|
522
|
+
* @return {string} str
|
|
523
|
+
*/
|
|
524
|
+
|
|
525
|
+
}, {
|
|
526
|
+
key: "_toTex",
|
|
527
|
+
value: function _toTex(options) {
|
|
528
|
+
var args = this.args.map(function (arg) {
|
|
529
|
+
// get LaTeX of the arguments
|
|
530
|
+
return arg.toTex(options);
|
|
531
|
+
});
|
|
532
|
+
var latexConverter;
|
|
533
|
+
|
|
534
|
+
if (_latex.latexFunctions[this.name]) {
|
|
535
|
+
latexConverter = _latex.latexFunctions[this.name];
|
|
536
|
+
} // toTex property on the function itself
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
if (math[this.name] && (typeof math[this.name].toTex === 'function' || (0, _typeof2["default"])(math[this.name].toTex) === 'object' || typeof math[this.name].toTex === 'string')) {
|
|
540
|
+
// .toTex is a callback function
|
|
541
|
+
latexConverter = math[this.name].toTex;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
var customToTex;
|
|
545
|
+
|
|
546
|
+
switch ((0, _typeof2["default"])(latexConverter)) {
|
|
532
547
|
case 'function':
|
|
533
|
-
|
|
548
|
+
// a callback function
|
|
549
|
+
customToTex = latexConverter(this, options);
|
|
534
550
|
break;
|
|
535
551
|
|
|
536
552
|
case 'string':
|
|
537
|
-
|
|
553
|
+
// a template string
|
|
554
|
+
customToTex = expandTemplate(latexConverter, this, options);
|
|
538
555
|
break;
|
|
539
|
-
}
|
|
540
556
|
|
|
541
|
-
|
|
557
|
+
case 'object':
|
|
558
|
+
// an object with different "converters" for different
|
|
559
|
+
// numbers of arguments
|
|
560
|
+
switch ((0, _typeof2["default"])(latexConverter[args.length])) {
|
|
561
|
+
case 'function':
|
|
562
|
+
customToTex = latexConverter[args.length](this, options);
|
|
563
|
+
break;
|
|
542
564
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
565
|
+
case 'string':
|
|
566
|
+
customToTex = expandTemplate(latexConverter[args.length], this, options);
|
|
567
|
+
break;
|
|
568
|
+
}
|
|
546
569
|
|
|
547
|
-
|
|
548
|
-
};
|
|
549
|
-
/**
|
|
550
|
-
* Get identifier.
|
|
551
|
-
* @return {string}
|
|
552
|
-
*/
|
|
570
|
+
}
|
|
553
571
|
|
|
572
|
+
if (typeof customToTex !== 'undefined') {
|
|
573
|
+
return customToTex;
|
|
574
|
+
}
|
|
554
575
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
576
|
+
return expandTemplate(_latex.defaultTemplate, this, options);
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Get identifier.
|
|
580
|
+
* @return {string}
|
|
581
|
+
*/
|
|
582
|
+
|
|
583
|
+
}, {
|
|
584
|
+
key: "getIdentifier",
|
|
585
|
+
value: function getIdentifier() {
|
|
586
|
+
return this.type + ':' + this.name;
|
|
587
|
+
}
|
|
588
|
+
}]);
|
|
589
|
+
return FunctionNode;
|
|
590
|
+
}(Node);
|
|
558
591
|
|
|
592
|
+
(0, _defineProperty2["default"])(FunctionNode, "name", name);
|
|
593
|
+
(0, _defineProperty2["default"])(FunctionNode, "onUndefinedFunction", function (name) {
|
|
594
|
+
throw new Error('Undefined function ' + name);
|
|
595
|
+
});
|
|
596
|
+
(0, _defineProperty2["default"])(FunctionNode, "fromJSON", function (json) {
|
|
597
|
+
return new FunctionNode(json.fn, json.args);
|
|
598
|
+
});
|
|
559
599
|
return FunctionNode;
|
|
560
600
|
}, {
|
|
561
601
|
isClass: true,
|