mathjs 10.6.2 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HISTORY.md +74 -1
- package/README.md +1 -1
- package/lib/browser/math.js +2 -41
- package/lib/browser/math.js.LICENSE.txt +43 -0
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/core/create.js +6 -5
- package/lib/cjs/core/function/import.js +4 -14
- package/lib/cjs/core/function/typed.js +54 -12
- package/lib/cjs/defaultInstance.js +3 -3
- package/lib/cjs/entry/allFactoriesAny.js +1 -1
- package/lib/cjs/entry/allFactoriesNumber.js +1 -1
- package/lib/cjs/entry/configReadonly.js +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesChainClass.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesKldivergence.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesRationalize.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesResolve.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +56 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +6 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSqrtm.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesStd.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesStdTransform.generated.js +3 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +8 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesChainClass.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesRationalize.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesResolve.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +50 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +6 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesStd.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesStdTransform.generated.js +3 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +87 -61
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +93 -69
- package/lib/cjs/entry/pureFunctionsAny.generated.js +50 -45
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +22 -19
- package/lib/cjs/expression/Parser.js +1 -1
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -5
- package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyConstant.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
- package/lib/cjs/expression/node/AccessorNode.js +216 -173
- package/lib/cjs/expression/node/ArrayNode.js +206 -160
- package/lib/cjs/expression/node/AssignmentNode.js +321 -270
- package/lib/cjs/expression/node/BlockNode.js +223 -172
- package/lib/cjs/expression/node/ConditionalNode.js +253 -193
- package/lib/cjs/expression/node/ConstantNode.js +216 -171
- package/lib/cjs/expression/node/FunctionAssignmentNode.js +258 -196
- package/lib/cjs/expression/node/FunctionNode.js +456 -416
- package/lib/cjs/expression/node/IndexNode.js +256 -210
- package/lib/cjs/expression/node/Node.js +411 -378
- package/lib/cjs/expression/node/ObjectNode.js +223 -178
- package/lib/cjs/expression/node/OperatorNode.js +474 -397
- package/lib/cjs/expression/node/ParenthesisNode.js +189 -143
- package/lib/cjs/expression/node/RangeNode.js +272 -224
- package/lib/cjs/expression/node/RelationalNode.js +246 -195
- package/lib/cjs/expression/node/SymbolNode.js +219 -172
- package/lib/cjs/expression/node/utils/access.js +1 -1
- package/lib/cjs/expression/node/utils/assign.js +1 -1
- package/lib/cjs/expression/operators.js +117 -23
- package/lib/cjs/expression/parse.js +37 -19
- package/lib/cjs/expression/transform/std.transform.js +3 -1
- package/lib/cjs/factoriesAny.js +8 -0
- package/lib/cjs/factoriesNumber.js +10 -1
- package/lib/cjs/function/algebra/decomposition/qr.js +1 -1
- package/lib/cjs/function/algebra/derivative.js +22 -30
- package/lib/cjs/function/algebra/leafCount.js +0 -3
- package/lib/cjs/function/algebra/rationalize.js +78 -108
- package/lib/cjs/function/algebra/resolve.js +53 -16
- package/lib/cjs/function/algebra/simplify/util.js +1 -1
- package/lib/cjs/function/algebra/simplify.js +87 -114
- package/lib/cjs/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +44 -10
- package/lib/cjs/function/algebra/simplifyCore.js +196 -93
- package/lib/cjs/function/algebra/solver/lsolveAll.js +2 -2
- package/lib/cjs/function/algebra/solver/usolveAll.js +2 -2
- package/lib/cjs/function/algebra/symbolicEqual.js +9 -26
- package/lib/cjs/function/arithmetic/abs.js +7 -14
- package/lib/cjs/function/arithmetic/add.js +26 -70
- package/lib/cjs/function/arithmetic/addScalar.js +17 -9
- package/lib/cjs/function/arithmetic/cbrt.js +7 -11
- package/lib/cjs/function/arithmetic/ceil.js +56 -46
- package/lib/cjs/function/arithmetic/cube.js +5 -10
- package/lib/cjs/function/arithmetic/divide.js +7 -7
- package/lib/cjs/function/arithmetic/divideScalar.js +4 -18
- package/lib/cjs/function/arithmetic/dotDivide.js +22 -65
- package/lib/cjs/function/arithmetic/dotMultiply.js +16 -61
- package/lib/cjs/function/arithmetic/dotPow.js +30 -63
- package/lib/cjs/function/arithmetic/exp.js +8 -12
- package/lib/cjs/function/arithmetic/expm1.js +10 -10
- package/lib/cjs/function/arithmetic/fix.js +33 -27
- package/lib/cjs/function/arithmetic/floor.js +56 -46
- package/lib/cjs/function/arithmetic/gcd.js +27 -68
- package/lib/cjs/function/arithmetic/hypot.js +9 -5
- package/lib/cjs/function/arithmetic/invmod.js +1 -1
- package/lib/cjs/function/arithmetic/lcm.js +27 -68
- package/lib/cjs/function/arithmetic/log.js +10 -12
- package/lib/cjs/function/arithmetic/log10.js +5 -3
- package/lib/cjs/function/arithmetic/log1p.js +11 -7
- package/lib/cjs/function/arithmetic/log2.js +5 -3
- package/lib/cjs/function/arithmetic/mod.js +22 -64
- package/lib/cjs/function/arithmetic/multiply.js +40 -35
- package/lib/cjs/function/arithmetic/multiplyScalar.js +2 -9
- package/lib/cjs/function/arithmetic/norm.js +1 -5
- package/lib/cjs/function/arithmetic/nthRoot.js +80 -92
- package/lib/cjs/function/arithmetic/round.js +56 -42
- package/lib/cjs/function/arithmetic/sign.js +14 -10
- package/lib/cjs/function/arithmetic/sqrt.js +5 -9
- package/lib/cjs/function/arithmetic/square.js +6 -10
- package/lib/cjs/function/arithmetic/subtract.js +44 -100
- package/lib/cjs/function/arithmetic/unaryMinus.js +14 -16
- package/lib/cjs/function/arithmetic/unaryPlus.js +6 -4
- package/lib/cjs/function/bitwise/bitAnd.js +17 -61
- package/lib/cjs/function/bitwise/bitNot.js +5 -3
- package/lib/cjs/function/bitwise/bitOr.js +16 -60
- package/lib/cjs/function/bitwise/bitXor.js +17 -61
- package/lib/cjs/function/bitwise/leftShift.js +68 -81
- package/lib/cjs/function/bitwise/rightArithShift.js +68 -81
- package/lib/cjs/function/bitwise/rightLogShift.js +68 -81
- package/lib/cjs/function/bitwise/useMatrixForArrayScalar.js +36 -0
- package/lib/cjs/function/complex/arg.js +5 -3
- package/lib/cjs/function/complex/conj.js +6 -7
- package/lib/cjs/function/complex/im.js +7 -8
- package/lib/cjs/function/complex/re.js +6 -10
- package/lib/cjs/function/logical/and.js +74 -80
- package/lib/cjs/function/logical/not.js +13 -6
- package/lib/cjs/function/logical/or.js +21 -63
- package/lib/cjs/function/logical/xor.js +21 -63
- package/lib/cjs/function/matrix/diff.js +10 -7
- package/lib/cjs/function/matrix/eigs/complexEigs.js +5 -5
- package/lib/cjs/function/matrix/fft.js +2 -2
- package/lib/cjs/function/matrix/matrixFromColumns.js +1 -1
- package/lib/cjs/function/matrix/matrixFromRows.js +1 -1
- package/lib/cjs/function/matrix/ones.js +2 -1
- package/lib/cjs/function/matrix/sqrtm.js +3 -2
- package/lib/cjs/function/matrix/transpose.js +47 -48
- package/lib/cjs/function/matrix/zeros.js +2 -1
- package/lib/cjs/function/probability/factorial.js +5 -3
- package/lib/cjs/function/probability/gamma.js +38 -40
- package/lib/cjs/function/probability/kldivergence.js +5 -2
- package/lib/cjs/function/probability/lgamma.js +30 -30
- package/lib/cjs/function/probability/util/seededRNG.js +2 -2
- package/lib/cjs/function/relational/compare.js +21 -67
- package/lib/cjs/function/relational/compareNatural.js +59 -54
- package/lib/cjs/function/relational/compareText.js +10 -43
- package/lib/cjs/function/relational/compareUnits.js +24 -0
- package/lib/cjs/function/relational/equal.js +19 -80
- package/lib/cjs/function/relational/equalScalar.js +7 -9
- package/lib/cjs/function/relational/larger.js +21 -67
- package/lib/cjs/function/relational/largerEq.js +21 -67
- package/lib/cjs/function/relational/smaller.js +21 -67
- package/lib/cjs/function/relational/smallerEq.js +21 -67
- package/lib/cjs/function/relational/unequal.js +19 -80
- package/lib/cjs/function/special/erf.js +5 -3
- package/lib/cjs/function/statistics/std.js +11 -2
- package/lib/cjs/function/trigonometry/acos.js +4 -8
- package/lib/cjs/function/trigonometry/acosh.js +2 -7
- package/lib/cjs/function/trigonometry/acot.js +4 -8
- package/lib/cjs/function/trigonometry/acoth.js +4 -8
- package/lib/cjs/function/trigonometry/acsc.js +4 -8
- package/lib/cjs/function/trigonometry/acsch.js +4 -8
- package/lib/cjs/function/trigonometry/asec.js +4 -8
- package/lib/cjs/function/trigonometry/asech.js +4 -8
- package/lib/cjs/function/trigonometry/asin.js +4 -9
- package/lib/cjs/function/trigonometry/asinh.js +4 -9
- package/lib/cjs/function/trigonometry/atan.js +4 -9
- package/lib/cjs/function/trigonometry/atan2.js +24 -62
- package/lib/cjs/function/trigonometry/atanh.js +4 -9
- package/lib/cjs/function/trigonometry/cos.js +11 -20
- package/lib/cjs/function/trigonometry/cosh.js +5 -19
- package/lib/cjs/function/trigonometry/cot.js +9 -15
- package/lib/cjs/function/trigonometry/coth.js +4 -15
- package/lib/cjs/function/trigonometry/csc.js +11 -17
- package/lib/cjs/function/trigonometry/csch.js +4 -15
- package/lib/cjs/function/trigonometry/sec.js +11 -17
- package/lib/cjs/function/trigonometry/sech.js +4 -15
- package/lib/cjs/function/trigonometry/sin.js +11 -21
- package/lib/cjs/function/trigonometry/sinh.js +5 -20
- package/lib/cjs/function/trigonometry/tan.js +11 -21
- package/lib/cjs/function/trigonometry/tanh.js +5 -20
- package/lib/cjs/function/trigonometry/trigUnit.js +24 -0
- package/lib/cjs/function/unit/to.js +7 -41
- package/lib/cjs/function/utils/hasNumericValue.js +4 -0
- package/lib/cjs/function/utils/isInteger.js +5 -3
- package/lib/cjs/function/utils/isNegative.js +10 -6
- package/lib/cjs/function/utils/isNumeric.js +5 -3
- package/lib/cjs/function/utils/isPositive.js +10 -6
- package/lib/cjs/function/utils/isPrime.js +5 -3
- package/lib/cjs/function/utils/isZero.js +10 -6
- package/lib/cjs/function/utils/numeric.js +11 -4
- package/lib/cjs/function/utils/typeOf.js +38 -44
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/plain/bignumber/index.js +1 -1
- package/lib/cjs/type/bignumber/BigNumber.js +2 -2
- package/lib/cjs/type/bignumber/function/bignumber.js +6 -4
- package/lib/cjs/type/boolean.js +7 -5
- package/lib/cjs/type/chain/Chain.js +23 -3
- package/lib/cjs/type/complex/Complex.js +18 -14
- package/lib/cjs/type/complex/function/complex.js +6 -4
- package/lib/cjs/type/fraction/Fraction.js +10 -6
- package/lib/cjs/type/fraction/function/fraction.js +6 -4
- package/lib/cjs/type/matrix/DenseMatrix.js +21 -6
- package/lib/cjs/type/matrix/SparseMatrix.js +12 -2
- package/lib/cjs/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +4 -4
- package/lib/cjs/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +7 -7
- package/lib/cjs/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +6 -6
- package/lib/cjs/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +5 -5
- package/lib/cjs/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +5 -5
- package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +238 -0
- package/lib/cjs/type/number.js +6 -4
- package/lib/cjs/type/string.js +7 -5
- package/lib/cjs/type/unit/Unit.js +69 -21
- package/lib/cjs/type/unit/function/createUnit.js +2 -1
- package/lib/cjs/type/unit/function/unit.js +9 -3
- package/lib/cjs/utils/customs.js +2 -2
- package/lib/cjs/utils/emitter.js +1 -1
- package/lib/cjs/utils/function.js +2 -2
- package/lib/cjs/utils/is.js +27 -25
- package/lib/cjs/utils/latex.js +3 -3
- package/lib/cjs/utils/lruQueue.js +1 -1
- package/lib/cjs/utils/map.js +3 -3
- package/lib/cjs/utils/object.js +2 -2
- package/lib/cjs/utils/snapshot.js +30 -57
- package/lib/cjs/utils/string.js +3 -3
- package/lib/cjs/version.js +1 -1
- package/lib/esm/core/create.js +2 -1
- package/lib/esm/core/function/import.js +2 -12
- package/lib/esm/core/function/typed.js +47 -11
- package/lib/esm/entry/dependenciesAny/dependenciesChainClass.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesKldivergence.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesRationalize.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesResolve.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +34 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSimplifyCore.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSqrtm.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesStd.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesStdTransform.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny.generated.js +1 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesChainClass.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesRationalize.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesResolve.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +30 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyCore.generated.js +4 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesStd.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesStdTransform.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +73 -48
- package/lib/esm/entry/impureFunctionsNumber.generated.js +81 -58
- package/lib/esm/entry/pureFunctionsAny.generated.js +39 -36
- package/lib/esm/entry/pureFunctionsNumber.generated.js +14 -13
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/esm/expression/embeddedDocs/function/algebra/simplifyConstant.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js +1 -1
- package/lib/esm/expression/node/AccessorNode.js +158 -153
- package/lib/esm/expression/node/ArrayNode.js +162 -154
- package/lib/esm/expression/node/AssignmentNode.js +257 -245
- package/lib/esm/expression/node/BlockNode.js +177 -163
- package/lib/esm/expression/node/ConditionalNode.js +197 -174
- package/lib/esm/expression/node/ConstantNode.js +171 -163
- package/lib/esm/expression/node/FunctionAssignmentNode.js +205 -180
- package/lib/esm/expression/node/FunctionNode.js +407 -407
- package/lib/esm/expression/node/IndexNode.js +206 -198
- package/lib/esm/expression/node/Node.js +325 -325
- package/lib/esm/expression/node/ObjectNode.js +166 -157
- package/lib/esm/expression/node/OperatorNode.js +414 -377
- package/lib/esm/expression/node/ParenthesisNode.js +146 -138
- package/lib/esm/expression/node/RangeNode.js +221 -212
- package/lib/esm/expression/node/RelationalNode.js +190 -176
- package/lib/esm/expression/node/SymbolNode.js +161 -152
- package/lib/esm/expression/operators.js +96 -4
- package/lib/esm/expression/parse.js +25 -7
- package/lib/esm/expression/transform/std.transform.js +3 -1
- package/lib/esm/factoriesAny.js +1 -0
- package/lib/esm/factoriesNumber.js +1 -0
- package/lib/esm/function/algebra/derivative.js +22 -30
- package/lib/esm/function/algebra/leafCount.js +0 -3
- package/lib/esm/function/algebra/rationalize.js +83 -114
- package/lib/esm/function/algebra/resolve.js +25 -16
- package/lib/esm/function/algebra/simplify.js +82 -112
- package/lib/esm/function/algebra/{simplify/simplifyConstant.js → simplifyConstant.js} +39 -9
- package/lib/esm/function/algebra/simplifyCore.js +192 -91
- package/lib/esm/function/algebra/symbolicEqual.js +9 -26
- package/lib/esm/function/arithmetic/abs.js +3 -16
- package/lib/esm/function/arithmetic/add.js +21 -65
- package/lib/esm/function/arithmetic/addScalar.js +11 -5
- package/lib/esm/function/arithmetic/cbrt.js +7 -10
- package/lib/esm/function/arithmetic/ceil.js +25 -25
- package/lib/esm/function/arithmetic/cube.js +5 -9
- package/lib/esm/function/arithmetic/divide.js +7 -7
- package/lib/esm/function/arithmetic/divideScalar.js +2 -19
- package/lib/esm/function/arithmetic/dotDivide.js +22 -64
- package/lib/esm/function/arithmetic/dotMultiply.js +16 -60
- package/lib/esm/function/arithmetic/dotPow.js +30 -62
- package/lib/esm/function/arithmetic/exp.js +8 -11
- package/lib/esm/function/arithmetic/expm1.js +10 -9
- package/lib/esm/function/arithmetic/fix.js +17 -17
- package/lib/esm/function/arithmetic/floor.js +25 -25
- package/lib/esm/function/arithmetic/gcd.js +26 -70
- package/lib/esm/function/arithmetic/hypot.js +7 -6
- package/lib/esm/function/arithmetic/lcm.js +26 -70
- package/lib/esm/function/arithmetic/log.js +7 -10
- package/lib/esm/function/arithmetic/log10.js +1 -3
- package/lib/esm/function/arithmetic/log1p.js +4 -6
- package/lib/esm/function/arithmetic/log2.js +1 -3
- package/lib/esm/function/arithmetic/mod.js +21 -62
- package/lib/esm/function/arithmetic/multiply.js +23 -27
- package/lib/esm/function/arithmetic/multiplyScalar.js +2 -13
- package/lib/esm/function/arithmetic/norm.js +0 -4
- package/lib/esm/function/arithmetic/nthRoot.js +38 -73
- package/lib/esm/function/arithmetic/round.js +26 -28
- package/lib/esm/function/arithmetic/sign.js +5 -7
- package/lib/esm/function/arithmetic/sqrt.js +5 -8
- package/lib/esm/function/arithmetic/square.js +6 -9
- package/lib/esm/function/arithmetic/subtract.js +31 -95
- package/lib/esm/function/arithmetic/unaryMinus.js +6 -16
- package/lib/esm/function/arithmetic/unaryPlus.js +2 -4
- package/lib/esm/function/bitwise/bitAnd.js +16 -59
- package/lib/esm/function/bitwise/bitNot.js +1 -3
- package/lib/esm/function/bitwise/bitOr.js +16 -59
- package/lib/esm/function/bitwise/bitXor.js +16 -59
- package/lib/esm/function/bitwise/leftShift.js +38 -60
- package/lib/esm/function/bitwise/rightArithShift.js +38 -60
- package/lib/esm/function/bitwise/rightLogShift.js +38 -60
- package/lib/esm/function/bitwise/useMatrixForArrayScalar.js +13 -0
- package/lib/esm/function/complex/arg.js +1 -3
- package/lib/esm/function/complex/conj.js +3 -12
- package/lib/esm/function/complex/im.js +4 -15
- package/lib/esm/function/complex/re.js +3 -15
- package/lib/esm/function/logical/and.js +35 -57
- package/lib/esm/function/logical/not.js +3 -6
- package/lib/esm/function/logical/or.js +16 -61
- package/lib/esm/function/logical/xor.js +16 -61
- package/lib/esm/function/matrix/diff.js +2 -7
- package/lib/esm/function/matrix/ones.js +2 -1
- package/lib/esm/function/matrix/sqrtm.js +3 -2
- package/lib/esm/function/matrix/transpose.js +47 -50
- package/lib/esm/function/matrix/zeros.js +2 -1
- package/lib/esm/function/probability/factorial.js +1 -3
- package/lib/esm/function/probability/gamma.js +38 -39
- package/lib/esm/function/probability/kldivergence.js +3 -2
- package/lib/esm/function/probability/lgamma.js +29 -29
- package/lib/esm/function/relational/compare.js +21 -67
- package/lib/esm/function/relational/compareNatural.js +54 -49
- package/lib/esm/function/relational/compareText.js +10 -42
- package/lib/esm/function/relational/compareUnits.js +15 -0
- package/lib/esm/function/relational/equal.js +19 -79
- package/lib/esm/function/relational/equalScalar.js +6 -9
- package/lib/esm/function/relational/larger.js +23 -73
- package/lib/esm/function/relational/largerEq.js +23 -73
- package/lib/esm/function/relational/smaller.js +23 -73
- package/lib/esm/function/relational/smallerEq.js +23 -73
- package/lib/esm/function/relational/unequal.js +19 -79
- package/lib/esm/function/special/erf.js +1 -3
- package/lib/esm/function/statistics/std.js +10 -2
- package/lib/esm/function/trigonometry/acos.js +4 -7
- package/lib/esm/function/trigonometry/acosh.js +2 -6
- package/lib/esm/function/trigonometry/acot.js +4 -7
- package/lib/esm/function/trigonometry/acoth.js +4 -7
- package/lib/esm/function/trigonometry/acsc.js +4 -7
- package/lib/esm/function/trigonometry/acsch.js +4 -7
- package/lib/esm/function/trigonometry/asec.js +4 -7
- package/lib/esm/function/trigonometry/asech.js +4 -7
- package/lib/esm/function/trigonometry/asin.js +4 -8
- package/lib/esm/function/trigonometry/asinh.js +4 -8
- package/lib/esm/function/trigonometry/atan.js +4 -8
- package/lib/esm/function/trigonometry/atan2.js +25 -64
- package/lib/esm/function/trigonometry/atanh.js +4 -8
- package/lib/esm/function/trigonometry/cos.js +11 -22
- package/lib/esm/function/trigonometry/cosh.js +5 -20
- package/lib/esm/function/trigonometry/cot.js +10 -20
- package/lib/esm/function/trigonometry/coth.js +6 -20
- package/lib/esm/function/trigonometry/csc.js +12 -22
- package/lib/esm/function/trigonometry/csch.js +6 -20
- package/lib/esm/function/trigonometry/sec.js +12 -22
- package/lib/esm/function/trigonometry/sech.js +6 -20
- package/lib/esm/function/trigonometry/sin.js +11 -23
- package/lib/esm/function/trigonometry/sinh.js +5 -21
- package/lib/esm/function/trigonometry/tan.js +11 -23
- package/lib/esm/function/trigonometry/tanh.js +5 -21
- package/lib/esm/function/trigonometry/trigUnit.js +15 -0
- package/lib/esm/function/unit/to.js +8 -43
- package/lib/esm/function/utils/hasNumericValue.js +2 -0
- package/lib/esm/function/utils/isInteger.js +1 -3
- package/lib/esm/function/utils/isNegative.js +2 -6
- package/lib/esm/function/utils/isNumeric.js +3 -9
- package/lib/esm/function/utils/isPositive.js +2 -6
- package/lib/esm/function/utils/isPrime.js +1 -3
- package/lib/esm/function/utils/isZero.js +2 -6
- package/lib/esm/function/utils/numeric.js +11 -4
- package/lib/esm/function/utils/typeOf.js +38 -44
- package/lib/esm/type/bignumber/function/bignumber.js +1 -3
- package/lib/esm/type/boolean.js +1 -3
- package/lib/esm/type/chain/Chain.js +23 -3
- package/lib/esm/type/complex/Complex.js +4 -0
- package/lib/esm/type/complex/function/complex.js +1 -3
- package/lib/esm/type/fraction/Fraction.js +4 -0
- package/lib/esm/type/fraction/function/fraction.js +1 -3
- package/lib/esm/type/matrix/DenseMatrix.js +15 -1
- package/lib/esm/type/matrix/SparseMatrix.js +9 -0
- package/lib/esm/type/matrix/utils/{algorithm01.js → matAlgo01xDSid.js} +2 -2
- package/lib/esm/type/matrix/utils/{algorithm02.js → matAlgo02xDS0.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm03.js → matAlgo03xDSf.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm04.js → matAlgo04xSidSid.js} +5 -5
- package/lib/esm/type/matrix/utils/{algorithm05.js → matAlgo05xSfSf.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm06.js → matAlgo06xS0S0.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm07.js → matAlgo07xSSf.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm08.js → matAlgo08xS0Sid.js} +4 -4
- package/lib/esm/type/matrix/utils/{algorithm09.js → matAlgo09xS0Sf.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm10.js → matAlgo10xSids.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm11.js → matAlgo11xS0s.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm12.js → matAlgo12xSfs.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm13.js → matAlgo13xDD.js} +3 -3
- package/lib/esm/type/matrix/utils/{algorithm14.js → matAlgo14xDs.js} +3 -3
- package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +168 -0
- package/lib/esm/type/number.js +1 -3
- package/lib/esm/type/string.js +1 -3
- package/lib/esm/type/unit/Unit.js +61 -13
- package/lib/esm/type/unit/function/createUnit.js +2 -1
- package/lib/esm/type/unit/function/unit.js +5 -3
- package/lib/esm/utils/is.js +18 -18
- package/lib/esm/utils/snapshot.js +22 -48
- package/lib/esm/version.js +1 -1
- package/package.json +21 -24
- package/types/index.d.ts +202 -181
- package/types/index.ts +264 -57
- package/lib/cjs/utils/polyfills.js +0 -14
- package/lib/esm/utils/polyfills.js +0 -12
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.createAssignmentNode = void 0;
|
|
7
9
|
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
|
+
|
|
16
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
|
+
|
|
18
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
|
+
|
|
20
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
|
+
|
|
8
22
|
var _is = require("../../utils/is.js");
|
|
9
23
|
|
|
10
24
|
var _customs = require("../../utils/customs.js");
|
|
@@ -17,6 +31,10 @@ var _assign = require("./utils/assign.js");
|
|
|
17
31
|
|
|
18
32
|
var _operators = require("../operators.js");
|
|
19
33
|
|
|
34
|
+
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); }; }
|
|
35
|
+
|
|
36
|
+
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; } }
|
|
37
|
+
|
|
20
38
|
var name = 'AssignmentNode';
|
|
21
39
|
var dependencies = ['subset', '?matrix', // FIXME: should not be needed at all, should be handled by subset
|
|
22
40
|
'Node'];
|
|
@@ -31,306 +49,339 @@ var createAssignmentNode = /* #__PURE__ */(0, _factory.factory)(name, dependenci
|
|
|
31
49
|
subset: subset,
|
|
32
50
|
matrix: matrix
|
|
33
51
|
});
|
|
34
|
-
/**
|
|
35
|
-
* @constructor AssignmentNode
|
|
36
|
-
* @extends {Node}
|
|
37
|
-
*
|
|
38
|
-
* Define a symbol, like `a=3.2`, update a property like `a.b=3.2`, or
|
|
39
|
-
* replace a subset of a matrix like `A[2,2]=42`.
|
|
40
|
-
*
|
|
41
|
-
* Syntax:
|
|
42
|
-
*
|
|
43
|
-
* new AssignmentNode(symbol, value)
|
|
44
|
-
* new AssignmentNode(object, index, value)
|
|
45
|
-
*
|
|
46
|
-
* Usage:
|
|
47
|
-
*
|
|
48
|
-
* new AssignmentNode(new SymbolNode('a'), new ConstantNode(2)) // a=2
|
|
49
|
-
* new AssignmentNode(new SymbolNode('a'), new IndexNode('b'), new ConstantNode(2)) // a.b=2
|
|
50
|
-
* new AssignmentNode(new SymbolNode('a'), new IndexNode(1, 2), new ConstantNode(3)) // a[1,2]=3
|
|
51
|
-
*
|
|
52
|
-
* @param {SymbolNode | AccessorNode} object Object on which to assign a value
|
|
53
|
-
* @param {IndexNode} [index=null] Index, property name or matrix
|
|
54
|
-
* index. Optional. If not provided
|
|
55
|
-
* and `object` is a SymbolNode,
|
|
56
|
-
* the property is assigned to the
|
|
57
|
-
* global scope.
|
|
58
|
-
* @param {Node} value The value to be assigned
|
|
59
|
-
*/
|
|
60
|
-
|
|
61
|
-
function AssignmentNode(object, index, value) {
|
|
62
|
-
if (!(this instanceof AssignmentNode)) {
|
|
63
|
-
throw new SyntaxError('Constructor must be called with the new operator');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
this.object = object;
|
|
67
|
-
this.index = value ? index : null;
|
|
68
|
-
this.value = value || index; // validate input
|
|
69
|
-
|
|
70
|
-
if (!(0, _is.isSymbolNode)(object) && !(0, _is.isAccessorNode)(object)) {
|
|
71
|
-
throw new TypeError('SymbolNode or AccessorNode expected as "object"');
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if ((0, _is.isSymbolNode)(object) && object.name === 'end') {
|
|
75
|
-
throw new Error('Cannot assign to symbol "end"');
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
if (this.index && !(0, _is.isIndexNode)(this.index)) {
|
|
79
|
-
// index is optional
|
|
80
|
-
throw new TypeError('IndexNode expected as "index"');
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (!(0, _is.isNode)(this.value)) {
|
|
84
|
-
throw new TypeError('Node expected as "value"');
|
|
85
|
-
} // readonly property name
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
Object.defineProperty(this, 'name', {
|
|
89
|
-
get: function () {
|
|
90
|
-
if (this.index) {
|
|
91
|
-
return this.index.isObjectProperty() ? this.index.getObjectProperty() : '';
|
|
92
|
-
} else {
|
|
93
|
-
return this.object.name || '';
|
|
94
|
-
}
|
|
95
|
-
}.bind(this),
|
|
96
|
-
set: function set() {
|
|
97
|
-
throw new Error('Cannot assign a new name, name is read-only');
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
AssignmentNode.prototype = new Node();
|
|
103
|
-
AssignmentNode.prototype.type = 'AssignmentNode';
|
|
104
|
-
AssignmentNode.prototype.isAssignmentNode = true;
|
|
105
|
-
/**
|
|
106
|
-
* Compile a node into a JavaScript function.
|
|
107
|
-
* This basically pre-calculates as much as possible and only leaves open
|
|
108
|
-
* calculations which depend on a dynamic scope with variables.
|
|
109
|
-
* @param {Object} math Math.js namespace with functions and constants.
|
|
110
|
-
* @param {Object} argNames An object with argument names as key and `true`
|
|
111
|
-
* as value. Used in the SymbolNode to optimize
|
|
112
|
-
* for arguments from user assigned functions
|
|
113
|
-
* (see FunctionAssignmentNode) or special symbols
|
|
114
|
-
* like `end` (see IndexNode).
|
|
115
|
-
* @return {function} Returns a function which can be called like:
|
|
116
|
-
* evalNode(scope: Object, args: Object, context: *)
|
|
117
|
-
*/
|
|
118
|
-
|
|
119
|
-
AssignmentNode.prototype._compile = function (math, argNames) {
|
|
120
|
-
var evalObject = this.object._compile(math, argNames);
|
|
121
|
-
|
|
122
|
-
var evalIndex = this.index ? this.index._compile(math, argNames) : null;
|
|
123
|
-
|
|
124
|
-
var evalValue = this.value._compile(math, argNames);
|
|
125
|
-
|
|
126
|
-
var name = this.object.name;
|
|
127
|
-
|
|
128
|
-
if (!this.index) {
|
|
129
|
-
// apply a variable to the scope, for example `a=2`
|
|
130
|
-
if (!(0, _is.isSymbolNode)(this.object)) {
|
|
131
|
-
throw new TypeError('SymbolNode expected as object');
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return function evalAssignmentNode(scope, args, context) {
|
|
135
|
-
var value = evalValue(scope, args, context);
|
|
136
|
-
scope.set(name, value);
|
|
137
|
-
return value;
|
|
138
|
-
};
|
|
139
|
-
} else if (this.index.isObjectProperty()) {
|
|
140
|
-
// apply an object property for example `a.b=2`
|
|
141
|
-
var prop = this.index.getObjectProperty();
|
|
142
|
-
return function evalAssignmentNode(scope, args, context) {
|
|
143
|
-
var object = evalObject(scope, args, context);
|
|
144
|
-
var value = evalValue(scope, args, context);
|
|
145
|
-
(0, _customs.setSafeProperty)(object, prop, value);
|
|
146
|
-
return value;
|
|
147
|
-
};
|
|
148
|
-
} else if ((0, _is.isSymbolNode)(this.object)) {
|
|
149
|
-
// update a matrix subset, for example `a[2]=3`
|
|
150
|
-
return function evalAssignmentNode(scope, args, context) {
|
|
151
|
-
var childObject = evalObject(scope, args, context);
|
|
152
|
-
var value = evalValue(scope, args, context);
|
|
153
|
-
var index = evalIndex(scope, args, childObject); // Important: we pass childObject instead of context
|
|
154
|
-
|
|
155
|
-
scope.set(name, assign(childObject, index, value));
|
|
156
|
-
return value;
|
|
157
|
-
};
|
|
158
|
-
} else {
|
|
159
|
-
// isAccessorNode(node.object) === true
|
|
160
|
-
// update a matrix subset, for example `a.b[2]=3`
|
|
161
|
-
// we will not use the compile function of the AccessorNode, but compile it
|
|
162
|
-
// ourselves here as we need the parent object of the AccessorNode:
|
|
163
|
-
// wee need to apply the updated object to parent object
|
|
164
|
-
var evalParentObject = this.object.object._compile(math, argNames);
|
|
165
|
-
|
|
166
|
-
if (this.object.index.isObjectProperty()) {
|
|
167
|
-
var parentProp = this.object.index.getObjectProperty();
|
|
168
|
-
return function evalAssignmentNode(scope, args, context) {
|
|
169
|
-
var parent = evalParentObject(scope, args, context);
|
|
170
|
-
var childObject = (0, _customs.getSafeProperty)(parent, parentProp);
|
|
171
|
-
var index = evalIndex(scope, args, childObject); // Important: we pass childObject instead of context
|
|
172
|
-
|
|
173
|
-
var value = evalValue(scope, args, context);
|
|
174
|
-
(0, _customs.setSafeProperty)(parent, parentProp, assign(childObject, index, value));
|
|
175
|
-
return value;
|
|
176
|
-
};
|
|
177
|
-
} else {
|
|
178
|
-
// if some parameters use the 'end' parameter, we need to calculate the size
|
|
179
|
-
var evalParentIndex = this.object.index._compile(math, argNames);
|
|
180
|
-
|
|
181
|
-
return function evalAssignmentNode(scope, args, context) {
|
|
182
|
-
var parent = evalParentObject(scope, args, context);
|
|
183
|
-
var parentIndex = evalParentIndex(scope, args, parent); // Important: we pass parent instead of context
|
|
184
|
-
|
|
185
|
-
var childObject = access(parent, parentIndex);
|
|
186
|
-
var index = evalIndex(scope, args, childObject); // Important: we pass childObject instead of context
|
|
187
|
-
|
|
188
|
-
var value = evalValue(scope, args, context);
|
|
189
|
-
assign(parent, parentIndex, assign(childObject, index, value));
|
|
190
|
-
return value;
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
/**
|
|
196
|
-
* Execute a callback for each of the child nodes of this node
|
|
197
|
-
* @param {function(child: Node, path: string, parent: Node)} callback
|
|
198
|
-
*/
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
AssignmentNode.prototype.forEach = function (callback) {
|
|
202
|
-
callback(this.object, 'object', this);
|
|
203
|
-
|
|
204
|
-
if (this.index) {
|
|
205
|
-
callback(this.index, 'index', this);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
callback(this.value, 'value', this);
|
|
209
|
-
};
|
|
210
|
-
/**
|
|
211
|
-
* Create a new AssignmentNode having it's childs be the results of calling
|
|
212
|
-
* the provided callback function for each of the childs of the original node.
|
|
213
|
-
* @param {function(child: Node, path: string, parent: Node): Node} callback
|
|
214
|
-
* @returns {AssignmentNode} Returns a transformed copy of the node
|
|
215
|
-
*/
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
AssignmentNode.prototype.map = function (callback) {
|
|
219
|
-
var object = this._ifNode(callback(this.object, 'object', this));
|
|
220
|
-
|
|
221
|
-
var index = this.index ? this._ifNode(callback(this.index, 'index', this)) : null;
|
|
222
|
-
|
|
223
|
-
var value = this._ifNode(callback(this.value, 'value', this));
|
|
224
|
-
|
|
225
|
-
return new AssignmentNode(object, index, value);
|
|
226
|
-
};
|
|
227
|
-
/**
|
|
228
|
-
* Create a clone of this node, a shallow copy
|
|
229
|
-
* @return {AssignmentNode}
|
|
230
|
-
*/
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
AssignmentNode.prototype.clone = function () {
|
|
234
|
-
return new AssignmentNode(this.object, this.index, this.value);
|
|
235
|
-
};
|
|
236
52
|
/*
|
|
237
53
|
* Is parenthesis needed?
|
|
238
54
|
* @param {node} node
|
|
239
55
|
* @param {string} [parenthesis='keep']
|
|
56
|
+
* @param {string} implicit
|
|
240
57
|
* @private
|
|
241
58
|
*/
|
|
242
59
|
|
|
243
|
-
|
|
244
|
-
function needParenthesis(node, parenthesis) {
|
|
60
|
+
function needParenthesis(node, parenthesis, implicit) {
|
|
245
61
|
if (!parenthesis) {
|
|
246
62
|
parenthesis = 'keep';
|
|
247
63
|
}
|
|
248
64
|
|
|
249
|
-
var precedence = (0, _operators.getPrecedence)(node, parenthesis);
|
|
250
|
-
var exprPrecedence = (0, _operators.getPrecedence)(node.value, parenthesis);
|
|
65
|
+
var precedence = (0, _operators.getPrecedence)(node, parenthesis, implicit);
|
|
66
|
+
var exprPrecedence = (0, _operators.getPrecedence)(node.value, parenthesis, implicit);
|
|
251
67
|
return parenthesis === 'all' || exprPrecedence !== null && exprPrecedence <= precedence;
|
|
252
68
|
}
|
|
253
|
-
/**
|
|
254
|
-
* Get string representation
|
|
255
|
-
* @param {Object} options
|
|
256
|
-
* @return {string}
|
|
257
|
-
*/
|
|
258
69
|
|
|
70
|
+
var AssignmentNode = /*#__PURE__*/function (_Node) {
|
|
71
|
+
(0, _inherits2["default"])(AssignmentNode, _Node);
|
|
72
|
+
|
|
73
|
+
var _super = _createSuper(AssignmentNode);
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @constructor AssignmentNode
|
|
77
|
+
* @extends {Node}
|
|
78
|
+
*
|
|
79
|
+
* Define a symbol, like `a=3.2`, update a property like `a.b=3.2`, or
|
|
80
|
+
* replace a subset of a matrix like `A[2,2]=42`.
|
|
81
|
+
*
|
|
82
|
+
* Syntax:
|
|
83
|
+
*
|
|
84
|
+
* new AssignmentNode(symbol, value)
|
|
85
|
+
* new AssignmentNode(object, index, value)
|
|
86
|
+
*
|
|
87
|
+
* Usage:
|
|
88
|
+
*
|
|
89
|
+
* new AssignmentNode(new SymbolNode('a'), new ConstantNode(2)) // a=2
|
|
90
|
+
* new AssignmentNode(new SymbolNode('a'),
|
|
91
|
+
* new IndexNode('b'),
|
|
92
|
+
* new ConstantNode(2)) // a.b=2
|
|
93
|
+
* new AssignmentNode(new SymbolNode('a'),
|
|
94
|
+
* new IndexNode(1, 2),
|
|
95
|
+
* new ConstantNode(3)) // a[1,2]=3
|
|
96
|
+
*
|
|
97
|
+
* @param {SymbolNode | AccessorNode} object
|
|
98
|
+
* Object on which to assign a value
|
|
99
|
+
* @param {IndexNode} [index=null]
|
|
100
|
+
* Index, property name or matrix index. Optional. If not provided
|
|
101
|
+
* and `object` is a SymbolNode, the property is assigned to the
|
|
102
|
+
* global scope.
|
|
103
|
+
* @param {Node} value
|
|
104
|
+
* The value to be assigned
|
|
105
|
+
*/
|
|
106
|
+
function AssignmentNode(object, index, value) {
|
|
107
|
+
var _this;
|
|
108
|
+
|
|
109
|
+
(0, _classCallCheck2["default"])(this, AssignmentNode);
|
|
110
|
+
_this = _super.call(this);
|
|
111
|
+
_this.object = object;
|
|
112
|
+
_this.index = value ? index : null;
|
|
113
|
+
_this.value = value || index; // validate input
|
|
114
|
+
|
|
115
|
+
if (!(0, _is.isSymbolNode)(object) && !(0, _is.isAccessorNode)(object)) {
|
|
116
|
+
throw new TypeError('SymbolNode or AccessorNode expected as "object"');
|
|
117
|
+
}
|
|
259
118
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
var value = this.value.toString(options);
|
|
119
|
+
if ((0, _is.isSymbolNode)(object) && object.name === 'end') {
|
|
120
|
+
throw new Error('Cannot assign to symbol "end"');
|
|
121
|
+
}
|
|
264
122
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
123
|
+
if (_this.index && !(0, _is.isIndexNode)(_this.index)) {
|
|
124
|
+
// index is optional
|
|
125
|
+
throw new TypeError('IndexNode expected as "index"');
|
|
126
|
+
}
|
|
268
127
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
* Get a JSON representation of the node
|
|
273
|
-
* @returns {Object}
|
|
274
|
-
*/
|
|
128
|
+
if (!(0, _is.isNode)(_this.value)) {
|
|
129
|
+
throw new TypeError('Node expected as "value"');
|
|
130
|
+
}
|
|
275
131
|
|
|
132
|
+
return _this;
|
|
133
|
+
} // class name for typing purposes:
|
|
276
134
|
|
|
277
|
-
AssignmentNode.prototype.toJSON = function () {
|
|
278
|
-
return {
|
|
279
|
-
mathjs: 'AssignmentNode',
|
|
280
|
-
object: this.object,
|
|
281
|
-
index: this.index,
|
|
282
|
-
value: this.value
|
|
283
|
-
};
|
|
284
|
-
};
|
|
285
|
-
/**
|
|
286
|
-
* Instantiate an AssignmentNode from its JSON representation
|
|
287
|
-
* @param {Object} json An object structured like
|
|
288
|
-
* `{"mathjs": "AssignmentNode", object: ..., index: ..., value: ...}`,
|
|
289
|
-
* where mathjs is optional
|
|
290
|
-
* @returns {AssignmentNode}
|
|
291
|
-
*/
|
|
292
135
|
|
|
136
|
+
(0, _createClass2["default"])(AssignmentNode, [{
|
|
137
|
+
key: "name",
|
|
138
|
+
get: // readonly property name
|
|
139
|
+
function get() {
|
|
140
|
+
if (this.index) {
|
|
141
|
+
return this.index.isObjectProperty() ? this.index.getObjectProperty() : '';
|
|
142
|
+
} else {
|
|
143
|
+
return this.object.name || '';
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}, {
|
|
147
|
+
key: "type",
|
|
148
|
+
get: function get() {
|
|
149
|
+
return name;
|
|
150
|
+
}
|
|
151
|
+
}, {
|
|
152
|
+
key: "isAssignmentNode",
|
|
153
|
+
get: function get() {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Compile a node into a JavaScript function.
|
|
158
|
+
* This basically pre-calculates as much as possible and only leaves open
|
|
159
|
+
* calculations which depend on a dynamic scope with variables.
|
|
160
|
+
* @param {Object} math Math.js namespace with functions and constants.
|
|
161
|
+
* @param {Object} argNames An object with argument names as key and `true`
|
|
162
|
+
* as value. Used in the SymbolNode to optimize
|
|
163
|
+
* for arguments from user assigned functions
|
|
164
|
+
* (see FunctionAssignmentNode) or special symbols
|
|
165
|
+
* like `end` (see IndexNode).
|
|
166
|
+
* @return {function} Returns a function which can be called like:
|
|
167
|
+
* evalNode(scope: Object, args: Object, context: *)
|
|
168
|
+
*/
|
|
169
|
+
|
|
170
|
+
}, {
|
|
171
|
+
key: "_compile",
|
|
172
|
+
value: function _compile(math, argNames) {
|
|
173
|
+
var evalObject = this.object._compile(math, argNames);
|
|
174
|
+
|
|
175
|
+
var evalIndex = this.index ? this.index._compile(math, argNames) : null;
|
|
176
|
+
|
|
177
|
+
var evalValue = this.value._compile(math, argNames);
|
|
178
|
+
|
|
179
|
+
var name = this.object.name;
|
|
180
|
+
|
|
181
|
+
if (!this.index) {
|
|
182
|
+
// apply a variable to the scope, for example `a=2`
|
|
183
|
+
if (!(0, _is.isSymbolNode)(this.object)) {
|
|
184
|
+
throw new TypeError('SymbolNode expected as object');
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return function evalAssignmentNode(scope, args, context) {
|
|
188
|
+
var value = evalValue(scope, args, context);
|
|
189
|
+
scope.set(name, value);
|
|
190
|
+
return value;
|
|
191
|
+
};
|
|
192
|
+
} else if (this.index.isObjectProperty()) {
|
|
193
|
+
// apply an object property for example `a.b=2`
|
|
194
|
+
var prop = this.index.getObjectProperty();
|
|
195
|
+
return function evalAssignmentNode(scope, args, context) {
|
|
196
|
+
var object = evalObject(scope, args, context);
|
|
197
|
+
var value = evalValue(scope, args, context);
|
|
198
|
+
(0, _customs.setSafeProperty)(object, prop, value);
|
|
199
|
+
return value;
|
|
200
|
+
};
|
|
201
|
+
} else if ((0, _is.isSymbolNode)(this.object)) {
|
|
202
|
+
// update a matrix subset, for example `a[2]=3`
|
|
203
|
+
return function evalAssignmentNode(scope, args, context) {
|
|
204
|
+
var childObject = evalObject(scope, args, context);
|
|
205
|
+
var value = evalValue(scope, args, context); // Important: we pass childObject instead of context:
|
|
206
|
+
|
|
207
|
+
var index = evalIndex(scope, args, childObject);
|
|
208
|
+
scope.set(name, assign(childObject, index, value));
|
|
209
|
+
return value;
|
|
210
|
+
};
|
|
211
|
+
} else {
|
|
212
|
+
// isAccessorNode(node.object) === true
|
|
213
|
+
// update a matrix subset, for example `a.b[2]=3`
|
|
214
|
+
// we will not use the compile function of the AccessorNode, but
|
|
215
|
+
// compile it ourselves here as we need the parent object of the
|
|
216
|
+
// AccessorNode:
|
|
217
|
+
// wee need to apply the updated object to parent object
|
|
218
|
+
var evalParentObject = this.object.object._compile(math, argNames);
|
|
219
|
+
|
|
220
|
+
if (this.object.index.isObjectProperty()) {
|
|
221
|
+
var parentProp = this.object.index.getObjectProperty();
|
|
222
|
+
return function evalAssignmentNode(scope, args, context) {
|
|
223
|
+
var parent = evalParentObject(scope, args, context);
|
|
224
|
+
var childObject = (0, _customs.getSafeProperty)(parent, parentProp); // Important: we pass childObject instead of context:
|
|
225
|
+
|
|
226
|
+
var index = evalIndex(scope, args, childObject);
|
|
227
|
+
var value = evalValue(scope, args, context);
|
|
228
|
+
(0, _customs.setSafeProperty)(parent, parentProp, assign(childObject, index, value));
|
|
229
|
+
return value;
|
|
230
|
+
};
|
|
231
|
+
} else {
|
|
232
|
+
// if some parameters use the 'end' parameter, we need to calculate
|
|
233
|
+
// the size
|
|
234
|
+
var evalParentIndex = this.object.index._compile(math, argNames);
|
|
235
|
+
|
|
236
|
+
return function evalAssignmentNode(scope, args, context) {
|
|
237
|
+
var parent = evalParentObject(scope, args, context); // Important: we pass parent instead of context:
|
|
238
|
+
|
|
239
|
+
var parentIndex = evalParentIndex(scope, args, parent);
|
|
240
|
+
var childObject = access(parent, parentIndex); // Important: we pass childObject instead of context
|
|
241
|
+
|
|
242
|
+
var index = evalIndex(scope, args, childObject);
|
|
243
|
+
var value = evalValue(scope, args, context);
|
|
244
|
+
assign(parent, parentIndex, assign(childObject, index, value));
|
|
245
|
+
return value;
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Execute a callback for each of the child nodes of this node
|
|
252
|
+
* @param {function(child: Node, path: string, parent: Node)} callback
|
|
253
|
+
*/
|
|
293
254
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
* Get HTML representation
|
|
299
|
-
* @param {Object} options
|
|
300
|
-
* @return {string}
|
|
301
|
-
*/
|
|
255
|
+
}, {
|
|
256
|
+
key: "forEach",
|
|
257
|
+
value: function forEach(callback) {
|
|
258
|
+
callback(this.object, 'object', this);
|
|
302
259
|
|
|
260
|
+
if (this.index) {
|
|
261
|
+
callback(this.index, 'index', this);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
callback(this.value, 'value', this);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Create a new AssignmentNode whose children are the results of calling
|
|
268
|
+
* the provided callback function for each child of the original node.
|
|
269
|
+
* @param {function(child: Node, path: string, parent: Node): Node} callback
|
|
270
|
+
* @returns {AssignmentNode} Returns a transformed copy of the node
|
|
271
|
+
*/
|
|
303
272
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
273
|
+
}, {
|
|
274
|
+
key: "map",
|
|
275
|
+
value: function map(callback) {
|
|
276
|
+
var object = this._ifNode(callback(this.object, 'object', this));
|
|
308
277
|
|
|
309
|
-
|
|
310
|
-
value = '<span class="math-paranthesis math-round-parenthesis">(</span>' + value + '<span class="math-paranthesis math-round-parenthesis">)</span>';
|
|
311
|
-
}
|
|
278
|
+
var index = this.index ? this._ifNode(callback(this.index, 'index', this)) : null;
|
|
312
279
|
|
|
313
|
-
|
|
314
|
-
};
|
|
315
|
-
/**
|
|
316
|
-
* Get LaTeX representation
|
|
317
|
-
* @param {Object} options
|
|
318
|
-
* @return {string}
|
|
319
|
-
*/
|
|
280
|
+
var value = this._ifNode(callback(this.value, 'value', this));
|
|
320
281
|
|
|
282
|
+
return new AssignmentNode(object, index, value);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Create a clone of this node, a shallow copy
|
|
286
|
+
* @return {AssignmentNode}
|
|
287
|
+
*/
|
|
288
|
+
|
|
289
|
+
}, {
|
|
290
|
+
key: "clone",
|
|
291
|
+
value: function clone() {
|
|
292
|
+
return new AssignmentNode(this.object, this.index, this.value);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get string representation
|
|
296
|
+
* @param {Object} options
|
|
297
|
+
* @return {string}
|
|
298
|
+
*/
|
|
299
|
+
|
|
300
|
+
}, {
|
|
301
|
+
key: "_toString",
|
|
302
|
+
value: function _toString(options) {
|
|
303
|
+
var object = this.object.toString(options);
|
|
304
|
+
var index = this.index ? this.index.toString(options) : '';
|
|
305
|
+
var value = this.value.toString(options);
|
|
306
|
+
|
|
307
|
+
if (needParenthesis(this, options && options.parenthesis, options && options.implicit)) {
|
|
308
|
+
value = '(' + value + ')';
|
|
309
|
+
}
|
|
321
310
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
311
|
+
return object + index + ' = ' + value;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Get a JSON representation of the node
|
|
315
|
+
* @returns {Object}
|
|
316
|
+
*/
|
|
317
|
+
|
|
318
|
+
}, {
|
|
319
|
+
key: "toJSON",
|
|
320
|
+
value: function toJSON() {
|
|
321
|
+
return {
|
|
322
|
+
mathjs: name,
|
|
323
|
+
object: this.object,
|
|
324
|
+
index: this.index,
|
|
325
|
+
value: this.value
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Instantiate an AssignmentNode from its JSON representation
|
|
330
|
+
* @param {Object} json
|
|
331
|
+
* An object structured like
|
|
332
|
+
* `{"mathjs": "AssignmentNode", object: ..., index: ..., value: ...}`,
|
|
333
|
+
* where mathjs is optional
|
|
334
|
+
* @returns {AssignmentNode}
|
|
335
|
+
*/
|
|
336
|
+
|
|
337
|
+
}, {
|
|
338
|
+
key: "toHTML",
|
|
339
|
+
value:
|
|
340
|
+
/**
|
|
341
|
+
* Get HTML representation
|
|
342
|
+
* @param {Object} options
|
|
343
|
+
* @return {string}
|
|
344
|
+
*/
|
|
345
|
+
function toHTML(options) {
|
|
346
|
+
var object = this.object.toHTML(options);
|
|
347
|
+
var index = this.index ? this.index.toHTML(options) : '';
|
|
348
|
+
var value = this.value.toHTML(options);
|
|
349
|
+
|
|
350
|
+
if (needParenthesis(this, options && options.parenthesis, options && options.implicit)) {
|
|
351
|
+
value = '<span class="math-paranthesis math-round-parenthesis">(</span>' + value + '<span class="math-paranthesis math-round-parenthesis">)</span>';
|
|
352
|
+
}
|
|
326
353
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
354
|
+
return object + index + '<span class="math-operator math-assignment-operator ' + 'math-variable-assignment-operator math-binary-operator">=</span>' + value;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Get LaTeX representation
|
|
358
|
+
* @param {Object} options
|
|
359
|
+
* @return {string}
|
|
360
|
+
*/
|
|
361
|
+
|
|
362
|
+
}, {
|
|
363
|
+
key: "_toTex",
|
|
364
|
+
value: function _toTex(options) {
|
|
365
|
+
var object = this.object.toTex(options);
|
|
366
|
+
var index = this.index ? this.index.toTex(options) : '';
|
|
367
|
+
var value = this.value.toTex(options);
|
|
368
|
+
|
|
369
|
+
if (needParenthesis(this, options && options.parenthesis, options && options.implicit)) {
|
|
370
|
+
value = "\\left(".concat(value, "\\right)");
|
|
371
|
+
}
|
|
330
372
|
|
|
331
|
-
|
|
332
|
-
|
|
373
|
+
return object + index + ':=' + value;
|
|
374
|
+
}
|
|
375
|
+
}], [{
|
|
376
|
+
key: "fromJSON",
|
|
377
|
+
value: function fromJSON(json) {
|
|
378
|
+
return new AssignmentNode(json.object, json.index, json.value);
|
|
379
|
+
}
|
|
380
|
+
}]);
|
|
381
|
+
return AssignmentNode;
|
|
382
|
+
}(Node);
|
|
333
383
|
|
|
384
|
+
(0, _defineProperty2["default"])(AssignmentNode, "name", name);
|
|
334
385
|
return AssignmentNode;
|
|
335
386
|
}, {
|
|
336
387
|
isClass: true,
|