mathjs 11.11.2 → 12.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 +48 -0
- package/README.md +1 -1
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +2 -2
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/core/create.js +2 -2
- package/lib/cjs/defaultInstance.js +2 -2
- package/lib/cjs/entry/allFactoriesAny.js +2 -2
- package/lib/cjs/entry/allFactoriesNumber.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesDet.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesDistance.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesEigs.generated.js +4 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesLsolve.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesLsolveAll.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesLup.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesQr.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesStirlingS2.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesSubtract.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesSubtractScalar.generated.js +17 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesUnitClass.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesUsolve.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesUsolveAll.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny.generated.js +7 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -2
- package/lib/cjs/entry/dependenciesNumber/dependenciesSubtractScalar.generated.js +17 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +7 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +4 -3
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +2 -1
- package/lib/cjs/entry/pureFunctionsAny.generated.js +43 -37
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +16 -13
- package/lib/cjs/expression/embeddedDocs/function/matrix/eigs.js +2 -2
- package/lib/cjs/expression/node/AssignmentNode.js +1 -1
- package/lib/cjs/expression/node/FunctionAssignmentNode.js +1 -1
- package/lib/cjs/expression/parse.js +50 -69
- package/lib/cjs/factoriesAny.js +7 -0
- package/lib/cjs/factoriesNumber.js +2 -1
- package/lib/cjs/function/algebra/decomposition/lup.js +3 -3
- package/lib/cjs/function/algebra/decomposition/qr.js +5 -5
- package/lib/cjs/function/algebra/solver/lsolve.js +4 -4
- package/lib/cjs/function/algebra/solver/lsolveAll.js +6 -6
- package/lib/cjs/function/algebra/solver/usolve.js +4 -4
- package/lib/cjs/function/algebra/solver/usolveAll.js +6 -6
- package/lib/cjs/function/arithmetic/subtract.js +7 -37
- package/lib/cjs/function/arithmetic/subtractScalar.js +52 -0
- package/lib/cjs/function/combinatorics/stirlingS2.js +2 -2
- package/lib/cjs/function/geometry/distance.js +10 -10
- package/lib/cjs/function/matrix/det.js +4 -4
- package/lib/cjs/function/matrix/eigs/complexEigs.js +73 -68
- package/lib/cjs/function/matrix/eigs/{realSymetric.js → realSymmetric.js} +57 -51
- package/lib/cjs/function/matrix/eigs.js +118 -45
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/unit/Unit.js +5 -5
- package/lib/cjs/utils/number.js +1 -1
- package/lib/cjs/utils/object.js +4 -2
- package/lib/cjs/utils/snapshot.js +3 -3
- package/lib/cjs/utils/string.js +12 -16
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesDet.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesDistance.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesEigs.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesLsolve.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesLsolveAll.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesLup.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesQr.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesStirlingS2.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesSubtract.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesSubtractScalar.generated.js +10 -0
- package/lib/esm/entry/dependenciesAny/dependenciesUnitClass.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesUsolve.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesUsolveAll.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny.generated.js +1 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -2
- package/lib/esm/entry/dependenciesNumber/dependenciesSubtractScalar.generated.js +10 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +5 -4
- package/lib/esm/entry/impureFunctionsNumber.generated.js +3 -2
- package/lib/esm/entry/pureFunctionsAny.generated.js +42 -37
- package/lib/esm/entry/pureFunctionsNumber.generated.js +16 -13
- package/lib/esm/expression/embeddedDocs/function/matrix/eigs.js +2 -2
- package/lib/esm/expression/node/AssignmentNode.js +1 -1
- package/lib/esm/expression/node/FunctionAssignmentNode.js +1 -1
- package/lib/esm/expression/parse.js +50 -69
- package/lib/esm/factoriesAny.js +1 -0
- package/lib/esm/factoriesNumber.js +1 -0
- package/lib/esm/function/algebra/decomposition/lup.js +3 -3
- package/lib/esm/function/algebra/decomposition/qr.js +5 -5
- package/lib/esm/function/algebra/solver/lsolve.js +4 -4
- package/lib/esm/function/algebra/solver/lsolveAll.js +6 -6
- package/lib/esm/function/algebra/solver/usolve.js +4 -4
- package/lib/esm/function/algebra/solver/usolveAll.js +6 -6
- package/lib/esm/function/arithmetic/subtract.js +7 -27
- package/lib/esm/function/arithmetic/subtractScalar.js +46 -0
- package/lib/esm/function/combinatorics/stirlingS2.js +2 -2
- package/lib/esm/function/geometry/distance.js +10 -10
- package/lib/esm/function/matrix/det.js +4 -4
- package/lib/esm/function/matrix/eigs/complexEigs.js +73 -68
- package/lib/esm/function/matrix/eigs/{realSymetric.js → realSymmetric.js} +55 -51
- package/lib/esm/function/matrix/eigs.js +119 -47
- package/lib/esm/type/unit/Unit.js +5 -5
- package/lib/esm/utils/number.js +1 -1
- package/lib/esm/utils/object.js +5 -3
- package/lib/esm/utils/snapshot.js +1 -1
- package/lib/esm/utils/string.js +12 -16
- package/lib/esm/version.js +1 -1
- package/package.json +14 -14
- package/types/EXPLANATION.md +54 -0
- package/types/index.d.ts +6797 -6446
|
@@ -7,13 +7,13 @@ exports.createUsolve = void 0;
|
|
|
7
7
|
var _factory = require("../../../utils/factory.js");
|
|
8
8
|
var _solveValidation = require("./utils/solveValidation.js");
|
|
9
9
|
var name = 'usolve';
|
|
10
|
-
var dependencies = ['typed', 'matrix', 'divideScalar', 'multiplyScalar', '
|
|
10
|
+
var dependencies = ['typed', 'matrix', 'divideScalar', 'multiplyScalar', 'subtractScalar', 'equalScalar', 'DenseMatrix'];
|
|
11
11
|
var createUsolve = exports.createUsolve = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
12
12
|
var typed = _ref.typed,
|
|
13
13
|
matrix = _ref.matrix,
|
|
14
14
|
divideScalar = _ref.divideScalar,
|
|
15
15
|
multiplyScalar = _ref.multiplyScalar,
|
|
16
|
-
|
|
16
|
+
subtractScalar = _ref.subtractScalar,
|
|
17
17
|
equalScalar = _ref.equalScalar,
|
|
18
18
|
DenseMatrix = _ref.DenseMatrix;
|
|
19
19
|
var solveValidation = (0, _solveValidation.createSolveValidation)({
|
|
@@ -85,7 +85,7 @@ var createUsolve = exports.createUsolve = /* #__PURE__ */(0, _factory.factory)(n
|
|
|
85
85
|
// loop rows
|
|
86
86
|
for (var i = j - 1; i >= 0; i--) {
|
|
87
87
|
// update copy of b
|
|
88
|
-
bdata[i] = [
|
|
88
|
+
bdata[i] = [subtractScalar(bdata[i][0] || 0, multiplyScalar(xj, mdata[i][j]))];
|
|
89
89
|
}
|
|
90
90
|
} else {
|
|
91
91
|
// zero value at j
|
|
@@ -149,7 +149,7 @@ var createUsolve = exports.createUsolve = /* #__PURE__ */(0, _factory.factory)(n
|
|
|
149
149
|
var xj = divideScalar(bj, vjj);
|
|
150
150
|
for (var _k = 0, _lastIndex = jIndices.length; _k < _lastIndex; _k++) {
|
|
151
151
|
var _i = jIndices[_k];
|
|
152
|
-
bdata[_i] = [
|
|
152
|
+
bdata[_i] = [subtractScalar(bdata[_i][0], multiplyScalar(xj, jValues[_k]))];
|
|
153
153
|
}
|
|
154
154
|
x[j] = [xj];
|
|
155
155
|
} else {
|
|
@@ -9,13 +9,13 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
|
|
|
9
9
|
var _factory = require("../../../utils/factory.js");
|
|
10
10
|
var _solveValidation = require("./utils/solveValidation.js");
|
|
11
11
|
var name = 'usolveAll';
|
|
12
|
-
var dependencies = ['typed', 'matrix', 'divideScalar', 'multiplyScalar', '
|
|
12
|
+
var dependencies = ['typed', 'matrix', 'divideScalar', 'multiplyScalar', 'subtractScalar', 'equalScalar', 'DenseMatrix'];
|
|
13
13
|
var createUsolveAll = exports.createUsolveAll = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
14
14
|
var typed = _ref.typed,
|
|
15
15
|
matrix = _ref.matrix,
|
|
16
16
|
divideScalar = _ref.divideScalar,
|
|
17
17
|
multiplyScalar = _ref.multiplyScalar,
|
|
18
|
-
|
|
18
|
+
subtractScalar = _ref.subtractScalar,
|
|
19
19
|
equalScalar = _ref.equalScalar,
|
|
20
20
|
DenseMatrix = _ref.DenseMatrix;
|
|
21
21
|
var solveValidation = (0, _solveValidation.createSolveValidation)({
|
|
@@ -86,7 +86,7 @@ var createUsolveAll = exports.createUsolveAll = /* #__PURE__ */(0, _factory.fact
|
|
|
86
86
|
b[i] = divideScalar(b[i], M[i][i]);
|
|
87
87
|
for (var j = i - 1; j >= 0; j--) {
|
|
88
88
|
// b[j] -= b[i] * M[j,i]
|
|
89
|
-
b[j] =
|
|
89
|
+
b[j] = subtractScalar(b[j], multiplyScalar(b[i], M[j][i]));
|
|
90
90
|
}
|
|
91
91
|
} else if (!equalScalar(b[i], 0)) {
|
|
92
92
|
// singular row, nonzero RHS
|
|
@@ -106,7 +106,7 @@ var createUsolveAll = exports.createUsolveAll = /* #__PURE__ */(0, _factory.fact
|
|
|
106
106
|
var bNew = (0, _toConsumableArray2["default"])(b);
|
|
107
107
|
bNew[i] = 1;
|
|
108
108
|
for (var _j = i - 1; _j >= 0; _j--) {
|
|
109
|
-
bNew[_j] =
|
|
109
|
+
bNew[_j] = subtractScalar(bNew[_j], M[_j][i]);
|
|
110
110
|
}
|
|
111
111
|
B.push(bNew);
|
|
112
112
|
}
|
|
@@ -169,7 +169,7 @@ var createUsolveAll = exports.createUsolveAll = /* #__PURE__ */(0, _factory.fact
|
|
|
169
169
|
// loop upper triangular
|
|
170
170
|
for (var _j2 = 0, _lastIndex = iIndices.length; _j2 < _lastIndex; _j2++) {
|
|
171
171
|
var _J = iIndices[_j2];
|
|
172
|
-
b[_J] =
|
|
172
|
+
b[_J] = subtractScalar(b[_J], multiplyScalar(b[i], iValues[_j2]));
|
|
173
173
|
}
|
|
174
174
|
} else if (!equalScalar(b[i], 0)) {
|
|
175
175
|
// singular row, nonzero RHS
|
|
@@ -192,7 +192,7 @@ var createUsolveAll = exports.createUsolveAll = /* #__PURE__ */(0, _factory.fact
|
|
|
192
192
|
// loop upper triangular
|
|
193
193
|
for (var _j3 = 0, _lastIndex2 = iIndices.length; _j3 < _lastIndex2; _j3++) {
|
|
194
194
|
var _J2 = iIndices[_j3];
|
|
195
|
-
bNew[_J2] =
|
|
195
|
+
bNew[_J2] = subtractScalar(bNew[_J2], iValues[_j3]);
|
|
196
196
|
}
|
|
197
197
|
B.push(bNew);
|
|
198
198
|
}
|
|
@@ -12,12 +12,12 @@ var _matAlgo10xSids = require("../../type/matrix/utils/matAlgo10xSids.js");
|
|
|
12
12
|
var _matAlgo12xSfs = require("../../type/matrix/utils/matAlgo12xSfs.js");
|
|
13
13
|
var _matrixAlgorithmSuite = require("../../type/matrix/utils/matrixAlgorithmSuite.js");
|
|
14
14
|
var name = 'subtract';
|
|
15
|
-
var dependencies = ['typed', 'matrix', 'equalScalar', '
|
|
15
|
+
var dependencies = ['typed', 'matrix', 'equalScalar', 'subtractScalar', 'unaryMinus', 'DenseMatrix', 'concat'];
|
|
16
16
|
var createSubtract = exports.createSubtract = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
17
17
|
var typed = _ref.typed,
|
|
18
18
|
matrix = _ref.matrix,
|
|
19
19
|
equalScalar = _ref.equalScalar,
|
|
20
|
-
|
|
20
|
+
subtractScalar = _ref.subtractScalar,
|
|
21
21
|
unaryMinus = _ref.unaryMinus,
|
|
22
22
|
DenseMatrix = _ref.DenseMatrix,
|
|
23
23
|
concat = _ref.concat;
|
|
@@ -73,44 +73,14 @@ var createSubtract = exports.createSubtract = /* #__PURE__ */(0, _factory.factor
|
|
|
73
73
|
*
|
|
74
74
|
* add
|
|
75
75
|
*
|
|
76
|
-
* @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} x
|
|
77
|
-
*
|
|
78
|
-
* @
|
|
79
|
-
* Value to subtract from `x`
|
|
80
|
-
* @return {number | BigNumber | Fraction | Complex | Unit | Array | Matrix}
|
|
81
|
-
* Subtraction of `x` and `y`
|
|
76
|
+
* @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} x Initial value
|
|
77
|
+
* @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} y Value to subtract from `x`
|
|
78
|
+
* @return {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} Subtraction of `x` and `y`
|
|
82
79
|
*/
|
|
83
80
|
return typed(name, {
|
|
84
|
-
'
|
|
85
|
-
return x - y;
|
|
86
|
-
},
|
|
87
|
-
'Complex, Complex': function ComplexComplex(x, y) {
|
|
88
|
-
return x.sub(y);
|
|
89
|
-
},
|
|
90
|
-
'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
|
|
91
|
-
return x.minus(y);
|
|
92
|
-
},
|
|
93
|
-
'Fraction, Fraction': function FractionFraction(x, y) {
|
|
94
|
-
return x.sub(y);
|
|
95
|
-
},
|
|
96
|
-
'Unit, Unit': typed.referToSelf(function (self) {
|
|
97
|
-
return function (x, y) {
|
|
98
|
-
if (x.value === null) {
|
|
99
|
-
throw new Error('Parameter x contains a unit with undefined value');
|
|
100
|
-
}
|
|
101
|
-
if (y.value === null) {
|
|
102
|
-
throw new Error('Parameter y contains a unit with undefined value');
|
|
103
|
-
}
|
|
104
|
-
if (!x.equalBase(y)) {
|
|
105
|
-
throw new Error('Units do not match');
|
|
106
|
-
}
|
|
107
|
-
var res = x.clone();
|
|
108
|
-
res.value = typed.find(self, [res.valueType(), y.valueType()])(res.value, y.value);
|
|
109
|
-
res.fixPrefix = false;
|
|
110
|
-
return res;
|
|
111
|
-
};
|
|
112
|
-
})
|
|
81
|
+
'any, any': subtractScalar
|
|
113
82
|
}, matrixAlgorithmSuite({
|
|
83
|
+
elop: subtractScalar,
|
|
114
84
|
SS: matAlgo05xSfSf,
|
|
115
85
|
DS: matAlgo01xDSid,
|
|
116
86
|
SD: matAlgo03xDSf,
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createSubtractScalar = void 0;
|
|
7
|
+
var _factory = require("../../utils/factory.js");
|
|
8
|
+
var _index = require("../../plain/number/index.js");
|
|
9
|
+
var name = 'subtractScalar';
|
|
10
|
+
var dependencies = ['typed'];
|
|
11
|
+
var createSubtractScalar = exports.createSubtractScalar = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
12
|
+
var typed = _ref.typed;
|
|
13
|
+
/**
|
|
14
|
+
* Subtract two scalar values, `x - y`.
|
|
15
|
+
* This function is meant for internal use: it is used by the public function
|
|
16
|
+
* `subtract`
|
|
17
|
+
*
|
|
18
|
+
* This function does not support collections (Array or Matrix).
|
|
19
|
+
*
|
|
20
|
+
* @param {number | BigNumber | Fraction | Complex | Unit} x First value
|
|
21
|
+
* @param {number | BigNumber | Fraction | Complex} y Second value to be subtracted from `x`
|
|
22
|
+
* @return {number | BigNumber | Fraction | Complex | Unit} Difference of `x` and `y`
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
return typed(name, {
|
|
26
|
+
'number, number': _index.subtractNumber,
|
|
27
|
+
'Complex, Complex': function ComplexComplex(x, y) {
|
|
28
|
+
return x.sub(y);
|
|
29
|
+
},
|
|
30
|
+
'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
|
|
31
|
+
return x.minus(y);
|
|
32
|
+
},
|
|
33
|
+
'Fraction, Fraction': function FractionFraction(x, y) {
|
|
34
|
+
return x.sub(y);
|
|
35
|
+
},
|
|
36
|
+
'Unit, Unit': typed.referToSelf(function (self) {
|
|
37
|
+
return function (x, y) {
|
|
38
|
+
if (x.value === null || x.value === undefined) {
|
|
39
|
+
throw new Error('Parameter x contains a unit with undefined value');
|
|
40
|
+
}
|
|
41
|
+
if (y.value === null || y.value === undefined) {
|
|
42
|
+
throw new Error('Parameter y contains a unit with undefined value');
|
|
43
|
+
}
|
|
44
|
+
if (!x.equalBase(y)) throw new Error('Units do not match');
|
|
45
|
+
var res = x.clone();
|
|
46
|
+
res.value = typed.find(self, [res.valueType(), y.valueType()])(res.value, y.value);
|
|
47
|
+
res.fixPrefix = false;
|
|
48
|
+
return res;
|
|
49
|
+
};
|
|
50
|
+
})
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -7,11 +7,11 @@ exports.createStirlingS2 = void 0;
|
|
|
7
7
|
var _factory = require("../../utils/factory.js");
|
|
8
8
|
var _is = require("../../utils/is.js");
|
|
9
9
|
var name = 'stirlingS2';
|
|
10
|
-
var dependencies = ['typed', 'addScalar', '
|
|
10
|
+
var dependencies = ['typed', 'addScalar', 'subtractScalar', 'multiplyScalar', 'divideScalar', 'pow', 'factorial', 'combinations', 'isNegative', 'isInteger', 'number', '?bignumber', 'larger'];
|
|
11
11
|
var createStirlingS2 = exports.createStirlingS2 = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
12
12
|
var typed = _ref.typed,
|
|
13
13
|
addScalar = _ref.addScalar,
|
|
14
|
-
|
|
14
|
+
subtractScalar = _ref.subtractScalar,
|
|
15
15
|
multiplyScalar = _ref.multiplyScalar,
|
|
16
16
|
divideScalar = _ref.divideScalar,
|
|
17
17
|
pow = _ref.pow,
|
|
@@ -7,11 +7,11 @@ exports.createDistance = void 0;
|
|
|
7
7
|
var _is = require("../../utils/is.js");
|
|
8
8
|
var _factory = require("../../utils/factory.js");
|
|
9
9
|
var name = 'distance';
|
|
10
|
-
var dependencies = ['typed', 'addScalar', '
|
|
10
|
+
var dependencies = ['typed', 'addScalar', 'subtractScalar', 'divideScalar', 'multiplyScalar', 'deepEqual', 'sqrt', 'abs'];
|
|
11
11
|
var createDistance = exports.createDistance = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
12
12
|
var typed = _ref.typed,
|
|
13
13
|
addScalar = _ref.addScalar,
|
|
14
|
-
|
|
14
|
+
subtractScalar = _ref.subtractScalar,
|
|
15
15
|
multiplyScalar = _ref.multiplyScalar,
|
|
16
16
|
divideScalar = _ref.divideScalar,
|
|
17
17
|
deepEqual = _ref.deepEqual,
|
|
@@ -84,9 +84,9 @@ var createDistance = exports.createDistance = /* #__PURE__ */(0, _factory.factor
|
|
|
84
84
|
if (deepEqual(y, z)) {
|
|
85
85
|
throw new TypeError('LinePoint1 should not be same with LinePoint2');
|
|
86
86
|
}
|
|
87
|
-
var xCoeff =
|
|
88
|
-
var yCoeff =
|
|
89
|
-
var constant =
|
|
87
|
+
var xCoeff = subtractScalar(z[1], y[1]);
|
|
88
|
+
var yCoeff = subtractScalar(y[0], z[0]);
|
|
89
|
+
var constant = subtractScalar(multiplyScalar(z[0], y[1]), multiplyScalar(y[0], z[1]));
|
|
90
90
|
return _distancePointLine2D(x[0], x[1], xCoeff, yCoeff, constant);
|
|
91
91
|
} else {
|
|
92
92
|
throw new TypeError('Invalid Arguments: Try again');
|
|
@@ -107,9 +107,9 @@ var createDistance = exports.createDistance = /* #__PURE__ */(0, _factory.factor
|
|
|
107
107
|
throw new TypeError('LinePoint1 should not be same with LinePoint2');
|
|
108
108
|
}
|
|
109
109
|
if ('pointX' in x && 'pointY' in x && 'lineOnePtX' in y && 'lineOnePtY' in y && 'lineTwoPtX' in z && 'lineTwoPtY' in z) {
|
|
110
|
-
var xCoeff =
|
|
111
|
-
var yCoeff =
|
|
112
|
-
var constant =
|
|
110
|
+
var xCoeff = subtractScalar(z.lineTwoPtY, y.lineOnePtY);
|
|
111
|
+
var yCoeff = subtractScalar(y.lineOnePtX, z.lineTwoPtX);
|
|
112
|
+
var constant = subtractScalar(multiplyScalar(z.lineTwoPtX, y.lineOnePtY), multiplyScalar(y.lineOnePtX, z.lineTwoPtY));
|
|
113
113
|
return _distancePointLine2D(x.pointX, x.pointY, xCoeff, yCoeff, constant);
|
|
114
114
|
} else {
|
|
115
115
|
throw new TypeError('Key names do not match');
|
|
@@ -277,7 +277,7 @@ var createDistance = exports.createDistance = /* #__PURE__ */(0, _factory.factor
|
|
|
277
277
|
return divideScalar(num, den);
|
|
278
278
|
}
|
|
279
279
|
function _distancePointLine3D(x, y, z, x0, y0, z0, a, b, c) {
|
|
280
|
-
var num = [
|
|
280
|
+
var num = [subtractScalar(multiplyScalar(subtractScalar(y0, y), c), multiplyScalar(subtractScalar(z0, z), b)), subtractScalar(multiplyScalar(subtractScalar(z0, z), a), multiplyScalar(subtractScalar(x0, x), c)), subtractScalar(multiplyScalar(subtractScalar(x0, x), b), multiplyScalar(subtractScalar(y0, y), a))];
|
|
281
281
|
num = sqrt(addScalar(addScalar(multiplyScalar(num[0], num[0]), multiplyScalar(num[1], num[1])), multiplyScalar(num[2], num[2])));
|
|
282
282
|
var den = sqrt(addScalar(addScalar(multiplyScalar(a, a), multiplyScalar(b, b)), multiplyScalar(c, c)));
|
|
283
283
|
return divideScalar(num, den);
|
|
@@ -287,7 +287,7 @@ var createDistance = exports.createDistance = /* #__PURE__ */(0, _factory.factor
|
|
|
287
287
|
var result = 0;
|
|
288
288
|
var diff = 0;
|
|
289
289
|
for (var i = 0; i < vectorSize; i++) {
|
|
290
|
-
diff =
|
|
290
|
+
diff = subtractScalar(x[i], y[i]);
|
|
291
291
|
result = addScalar(multiplyScalar(diff, diff), result);
|
|
292
292
|
}
|
|
293
293
|
return sqrt(result);
|
|
@@ -9,11 +9,11 @@ var _object = require("../../utils/object.js");
|
|
|
9
9
|
var _string = require("../../utils/string.js");
|
|
10
10
|
var _factory = require("../../utils/factory.js");
|
|
11
11
|
var name = 'det';
|
|
12
|
-
var dependencies = ['typed', 'matrix', '
|
|
12
|
+
var dependencies = ['typed', 'matrix', 'subtractScalar', 'multiply', 'divideScalar', 'isZero', 'unaryMinus'];
|
|
13
13
|
var createDet = exports.createDet = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
|
14
14
|
var typed = _ref.typed,
|
|
15
15
|
matrix = _ref.matrix,
|
|
16
|
-
|
|
16
|
+
subtractScalar = _ref.subtractScalar,
|
|
17
17
|
multiply = _ref.multiply,
|
|
18
18
|
divideScalar = _ref.divideScalar,
|
|
19
19
|
isZero = _ref.isZero,
|
|
@@ -108,7 +108,7 @@ var createDet = exports.createDet = /* #__PURE__ */(0, _factory.factory)(name, d
|
|
|
108
108
|
} else if (rows === 2) {
|
|
109
109
|
// this is a 2 x 2 matrix
|
|
110
110
|
// the determinant of [a11,a12;a21,a22] is det = a11*a22-a21*a12
|
|
111
|
-
return
|
|
111
|
+
return subtractScalar(multiply(matrix[0][0], matrix[1][1]), multiply(matrix[1][0], matrix[0][1]));
|
|
112
112
|
} else {
|
|
113
113
|
// Bareiss algorithm
|
|
114
114
|
// this algorithm have same complexity as LUP decomposition (O(n^3))
|
|
@@ -138,7 +138,7 @@ var createDet = exports.createDet = /* #__PURE__ */(0, _factory.factory)(name, d
|
|
|
138
138
|
for (var i = k + 1; i < rows; i++) {
|
|
139
139
|
var i_ = rowIndices[i];
|
|
140
140
|
for (var j = k + 1; j < rows; j++) {
|
|
141
|
-
matrix[i_][j] = divideScalar(
|
|
141
|
+
matrix[i_][j] = divideScalar(subtractScalar(multiply(matrix[i_][j], piv), multiply(matrix[i_][k], matrix[k_][j])), piv_);
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
}
|
|
@@ -21,6 +21,8 @@ function createComplexEigs(_ref) {
|
|
|
21
21
|
abs = _ref.abs,
|
|
22
22
|
bignumber = _ref.bignumber,
|
|
23
23
|
diag = _ref.diag,
|
|
24
|
+
size = _ref.size,
|
|
25
|
+
reshape = _ref.reshape,
|
|
24
26
|
inv = _ref.inv,
|
|
25
27
|
qr = _ref.qr,
|
|
26
28
|
usolve = _ref.usolve,
|
|
@@ -40,11 +42,8 @@ function createComplexEigs(_ref) {
|
|
|
40
42
|
*
|
|
41
43
|
* @returns {{ values: number[], vectors: number[][] }}
|
|
42
44
|
*/
|
|
43
|
-
function complexEigs(arr, N, prec, type
|
|
44
|
-
|
|
45
|
-
findVectors = true;
|
|
46
|
-
}
|
|
47
|
-
|
|
45
|
+
function complexEigs(arr, N, prec, type) {
|
|
46
|
+
var findVectors = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
|
|
48
47
|
// TODO check if any row/col are zero except the diagonal
|
|
49
48
|
|
|
50
49
|
// make sure corresponding rows and columns have similar magnitude
|
|
@@ -53,9 +52,9 @@ function createComplexEigs(_ref) {
|
|
|
53
52
|
var R = balance(arr, N, prec, type, findVectors);
|
|
54
53
|
|
|
55
54
|
// R is the row transformation matrix
|
|
56
|
-
// arr = A' = R A R
|
|
55
|
+
// arr = A' = R A R^-1, A is the original matrix
|
|
57
56
|
// (if findVectors is false, R is undefined)
|
|
58
|
-
// (And so to return to original matrix: A = R
|
|
57
|
+
// (And so to return to original matrix: A = R^-1 arr R)
|
|
59
58
|
|
|
60
59
|
// TODO if magnitudes of elements vary over many orders,
|
|
61
60
|
// move greatest elements to the top left corner
|
|
@@ -65,7 +64,7 @@ function createComplexEigs(_ref) {
|
|
|
65
64
|
// updates the transformation matrix R with new row operationsq
|
|
66
65
|
// MODIFIES arr by side effect!
|
|
67
66
|
reduceToHessenberg(arr, N, prec, type, findVectors, R);
|
|
68
|
-
// still true that original A = R
|
|
67
|
+
// still true that original A = R^-1 arr R)
|
|
69
68
|
|
|
70
69
|
// find eigenvalues
|
|
71
70
|
var _iterateUntilTriangul = iterateUntilTriangular(arr, N, prec, type, findVectors),
|
|
@@ -75,17 +74,18 @@ function createComplexEigs(_ref) {
|
|
|
75
74
|
// values is the list of eigenvalues, C is the column
|
|
76
75
|
// transformation matrix that transforms arr, the hessenberg
|
|
77
76
|
// matrix, to upper triangular
|
|
78
|
-
// (So U = C
|
|
77
|
+
// (So U = C^-1 arr C and the relationship between current arr
|
|
79
78
|
// and original A is unchanged.)
|
|
80
79
|
|
|
81
|
-
var vectors;
|
|
82
80
|
if (findVectors) {
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
var eigenvectors = findEigenvectors(arr, N, C, R, values, prec, type);
|
|
82
|
+
return {
|
|
83
|
+
values: values,
|
|
84
|
+
eigenvectors: eigenvectors
|
|
85
|
+
};
|
|
85
86
|
}
|
|
86
87
|
return {
|
|
87
|
-
values: values
|
|
88
|
-
vectors: vectors
|
|
88
|
+
values: values
|
|
89
89
|
};
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -125,9 +125,8 @@ function createComplexEigs(_ref) {
|
|
|
125
125
|
var rowNorm = realzero;
|
|
126
126
|
for (var j = 0; j < N; j++) {
|
|
127
127
|
if (i === j) continue;
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
rowNorm = addScalar(rowNorm, c);
|
|
128
|
+
colNorm = addScalar(colNorm, abs(arr[j][i]));
|
|
129
|
+
rowNorm = addScalar(rowNorm, abs(arr[i][j]));
|
|
131
130
|
}
|
|
132
131
|
if (!equal(colNorm, 0) && !equal(rowNorm, 0)) {
|
|
133
132
|
// find integer power closest to balancing the matrix
|
|
@@ -135,21 +134,21 @@ function createComplexEigs(_ref) {
|
|
|
135
134
|
// so that we don't lose any precision due to round-off)
|
|
136
135
|
|
|
137
136
|
var f = realone;
|
|
138
|
-
var
|
|
137
|
+
var c = colNorm;
|
|
139
138
|
var rowDivRadix = divideScalar(rowNorm, radix);
|
|
140
139
|
var rowMulRadix = multiplyScalar(rowNorm, radix);
|
|
141
|
-
while (smaller(
|
|
142
|
-
|
|
140
|
+
while (smaller(c, rowDivRadix)) {
|
|
141
|
+
c = multiplyScalar(c, radixSq);
|
|
143
142
|
f = multiplyScalar(f, radix);
|
|
144
143
|
}
|
|
145
|
-
while (larger(
|
|
146
|
-
|
|
144
|
+
while (larger(c, rowMulRadix)) {
|
|
145
|
+
c = divideScalar(c, radixSq);
|
|
147
146
|
f = divideScalar(f, radix);
|
|
148
147
|
}
|
|
149
148
|
|
|
150
149
|
// check whether balancing is needed
|
|
151
150
|
// condition = (c + rowNorm) / f < 0.95 * (colNorm + rowNorm)
|
|
152
|
-
var condition = smaller(divideScalar(addScalar(
|
|
151
|
+
var condition = smaller(divideScalar(addScalar(c, rowNorm), f), multiplyScalar(addScalar(colNorm, rowNorm), 0.95));
|
|
153
152
|
|
|
154
153
|
// apply balancing similarity transformation
|
|
155
154
|
if (condition) {
|
|
@@ -161,13 +160,13 @@ function createComplexEigs(_ref) {
|
|
|
161
160
|
if (i === _j) {
|
|
162
161
|
continue;
|
|
163
162
|
}
|
|
164
|
-
arr[i][_j] = multiplyScalar(arr[i][_j],
|
|
165
|
-
arr[_j][i] = multiplyScalar(arr[_j][i],
|
|
163
|
+
arr[i][_j] = multiplyScalar(arr[i][_j], g);
|
|
164
|
+
arr[_j][i] = multiplyScalar(arr[_j][i], f);
|
|
166
165
|
}
|
|
167
166
|
|
|
168
167
|
// keep track of transformations
|
|
169
168
|
if (findVectors) {
|
|
170
|
-
Rdiag[i] = multiplyScalar(Rdiag[i],
|
|
169
|
+
Rdiag[i] = multiplyScalar(Rdiag[i], g);
|
|
171
170
|
}
|
|
172
171
|
}
|
|
173
172
|
}
|
|
@@ -175,7 +174,7 @@ function createComplexEigs(_ref) {
|
|
|
175
174
|
}
|
|
176
175
|
|
|
177
176
|
// return the diagonal row transformation matrix
|
|
178
|
-
return diag(Rdiag);
|
|
177
|
+
return findVectors ? diag(Rdiag) : null;
|
|
179
178
|
}
|
|
180
179
|
|
|
181
180
|
/**
|
|
@@ -274,7 +273,7 @@ function createComplexEigs(_ref) {
|
|
|
274
273
|
|
|
275
274
|
// The Francis Algorithm
|
|
276
275
|
// The core idea of this algorithm is that doing successive
|
|
277
|
-
// A' =
|
|
276
|
+
// A' = QtAQ transformations will eventually converge to block-
|
|
278
277
|
// upper-triangular with diagonal blocks either 1x1 or 2x2.
|
|
279
278
|
// The Q here is the one from the QR decomposition, A = QR.
|
|
280
279
|
// Since the eigenvalues of a block-upper-triangular matrix are
|
|
@@ -296,7 +295,7 @@ function createComplexEigs(_ref) {
|
|
|
296
295
|
// N×N matrix describing the overall transformation done during the QR algorithm
|
|
297
296
|
var Qtotal = findVectors ? diag(Array(N).fill(one)) : undefined;
|
|
298
297
|
|
|
299
|
-
//
|
|
298
|
+
// nxn matrix describing the QR transformations done since last convergence
|
|
300
299
|
var Qpartial = findVectors ? diag(Array(n).fill(one)) : undefined;
|
|
301
300
|
|
|
302
301
|
// last eigenvalue converged before this many steps
|
|
@@ -308,7 +307,12 @@ function createComplexEigs(_ref) {
|
|
|
308
307
|
|
|
309
308
|
// Perform the factorization
|
|
310
309
|
|
|
311
|
-
var k =
|
|
310
|
+
var k = arr[n - 1][n - 1]; // TODO this is apparently a somewhat
|
|
311
|
+
// old-fashioned choice; ideally set close to an eigenvalue, or
|
|
312
|
+
// perhaps better yet switch to the implicit QR version that is sometimes
|
|
313
|
+
// specifically called the "Francis algorithm" that is alluded to
|
|
314
|
+
// in the following TODO. (Or perhaps we switch to an independently
|
|
315
|
+
// optimized third-party package for the linear algebra operations...)
|
|
312
316
|
|
|
313
317
|
for (var i = 0; i < n; i++) {
|
|
314
318
|
arr[i][i] = subtract(arr[i][i], k);
|
|
@@ -427,17 +431,17 @@ function createComplexEigs(_ref) {
|
|
|
427
431
|
_step;
|
|
428
432
|
try {
|
|
429
433
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
430
|
-
var
|
|
431
|
-
var _i4 = indexOf(uniqueValues,
|
|
434
|
+
var lambda = _step.value;
|
|
435
|
+
var _i4 = indexOf(uniqueValues, lambda, equal);
|
|
432
436
|
if (_i4 === -1) {
|
|
433
|
-
uniqueValues.push(
|
|
437
|
+
uniqueValues.push(lambda);
|
|
434
438
|
multiplicities.push(1);
|
|
435
439
|
} else {
|
|
436
440
|
multiplicities[_i4] += 1;
|
|
437
441
|
}
|
|
438
442
|
}
|
|
439
443
|
|
|
440
|
-
// find eigenvectors by solving U −
|
|
444
|
+
// find eigenvectors by solving U − lambdaE = 0
|
|
441
445
|
// TODO replace with an iterative eigenvector algorithm
|
|
442
446
|
// (this one might fail for imprecise eigenvalues)
|
|
443
447
|
} catch (err) {
|
|
@@ -449,24 +453,21 @@ function createComplexEigs(_ref) {
|
|
|
449
453
|
var len = uniqueValues.length;
|
|
450
454
|
var b = Array(N).fill(zero);
|
|
451
455
|
var E = diag(Array(N).fill(one));
|
|
452
|
-
|
|
453
|
-
// eigenvalues for which usolve failed (due to numerical error)
|
|
454
|
-
var failedLambdas = [];
|
|
455
456
|
var _loop = function _loop() {
|
|
456
|
-
var
|
|
457
|
-
var S = subtract(U, multiply(
|
|
457
|
+
var lambda = uniqueValues[i];
|
|
458
|
+
var S = subtract(U, multiply(lambda, E)); // the characteristic matrix
|
|
458
459
|
|
|
459
460
|
var solutions = usolveAll(S, b);
|
|
460
461
|
solutions.shift(); // ignore the null vector
|
|
461
462
|
|
|
462
463
|
// looks like we missed something, try inverse iteration
|
|
464
|
+
// But if that fails, just presume that the original matrix truly
|
|
465
|
+
// was defective.
|
|
463
466
|
while (solutions.length < multiplicities[i]) {
|
|
464
467
|
var approxVec = inverseIterate(S, N, solutions, prec, type);
|
|
465
|
-
if (approxVec
|
|
466
|
-
// no more vectors were found
|
|
467
|
-
failedLambdas.push(λ);
|
|
468
|
+
if (approxVec === null) {
|
|
468
469
|
break;
|
|
469
|
-
}
|
|
470
|
+
} // no more vectors were found
|
|
470
471
|
solutions.push(approxVec);
|
|
471
472
|
}
|
|
472
473
|
|
|
@@ -476,18 +477,15 @@ function createComplexEigs(_ref) {
|
|
|
476
477
|
return multiply(correction, v);
|
|
477
478
|
});
|
|
478
479
|
vectors.push.apply(vectors, (0, _toConsumableArray2["default"])(solutions.map(function (v) {
|
|
479
|
-
return
|
|
480
|
+
return {
|
|
481
|
+
value: lambda,
|
|
482
|
+
vector: flatten(v)
|
|
483
|
+
};
|
|
480
484
|
})));
|
|
481
485
|
};
|
|
482
486
|
for (var i = 0; i < len; i++) {
|
|
483
487
|
_loop();
|
|
484
488
|
}
|
|
485
|
-
if (failedLambdas.length !== 0) {
|
|
486
|
-
var err = new Error('Failed to find eigenvectors for the following eigenvalues: ' + failedLambdas.join(', '));
|
|
487
|
-
err.values = values;
|
|
488
|
-
err.vectors = vectors;
|
|
489
|
-
throw err;
|
|
490
|
-
}
|
|
491
489
|
return vectors;
|
|
492
490
|
}
|
|
493
491
|
|
|
@@ -496,7 +494,7 @@ function createComplexEigs(_ref) {
|
|
|
496
494
|
* @return {[number,number]}
|
|
497
495
|
*/
|
|
498
496
|
function eigenvalues2x2(a, b, c, d) {
|
|
499
|
-
//
|
|
497
|
+
// lambda_+- = 1/2 trA +- 1/2 sqrt( tr^2 A - 4 detA )
|
|
500
498
|
var trA = addScalar(a, d);
|
|
501
499
|
var detA = subtract(multiplyScalar(a, d), multiplyScalar(b, c));
|
|
502
500
|
var x = multiplyScalar(trA, 0.5);
|
|
@@ -506,7 +504,7 @@ function createComplexEigs(_ref) {
|
|
|
506
504
|
|
|
507
505
|
/**
|
|
508
506
|
* For an 2x2 matrix compute the transformation matrix S,
|
|
509
|
-
* so that SAS
|
|
507
|
+
* so that SAS^-1 is an upper triangular matrix
|
|
510
508
|
* @return {[[number,number],[number,number]]}
|
|
511
509
|
* @see https://math.berkeley.edu/~ogus/old/Math_54-05/webfoils/jordan.pdf
|
|
512
510
|
* @see http://people.math.harvard.edu/~knill/teaching/math21b2004/exhibits/2dmatrices/index.html
|
|
@@ -530,23 +528,22 @@ function createComplexEigs(_ref) {
|
|
|
530
528
|
}
|
|
531
529
|
|
|
532
530
|
// matrix is not diagonalizable
|
|
533
|
-
// compute
|
|
534
|
-
// N₁₂ = 0 ⇒ S = ( N⃗₁, I⃗₁ )
|
|
535
|
-
// N₁₂ ≠ 0 ⇒ S = ( N⃗₂, I⃗₂ )
|
|
536
|
-
|
|
531
|
+
// compute diagonal elements of N = A - lambdaI
|
|
537
532
|
var na = subtract(a, l1);
|
|
538
|
-
var nb = subtract(b, l1);
|
|
539
|
-
var nc = subtract(c, l1);
|
|
540
533
|
var nd = subtract(d, l1);
|
|
541
|
-
|
|
542
|
-
|
|
534
|
+
|
|
535
|
+
// col(N,2) = 0 implies S = ( col(N,1), e_1 )
|
|
536
|
+
// col(N,2) != 0 implies S = ( col(N,2), e_2 )
|
|
537
|
+
|
|
538
|
+
if (smaller(abs(b), prec) && smaller(abs(nd), prec)) {
|
|
539
|
+
return [[na, one], [c, zero]];
|
|
543
540
|
} else {
|
|
544
|
-
return [[
|
|
541
|
+
return [[b, zero], [nd, one]];
|
|
545
542
|
}
|
|
546
543
|
}
|
|
547
544
|
|
|
548
545
|
/**
|
|
549
|
-
* Enlarge the matrix from
|
|
546
|
+
* Enlarge the matrix from nxn to NxN, setting the new
|
|
550
547
|
* elements to 1 on diagonal and 0 elsewhere
|
|
551
548
|
*/
|
|
552
549
|
function inflateMatrix(arr, N) {
|
|
@@ -633,15 +630,21 @@ function createComplexEigs(_ref) {
|
|
|
633
630
|
|
|
634
631
|
// you better choose a random vector before I count to five
|
|
635
632
|
var i = 0;
|
|
636
|
-
|
|
633
|
+
for (; i < 5; ++i) {
|
|
637
634
|
b = randomOrthogonalVector(N, orthog, type);
|
|
638
|
-
|
|
635
|
+
try {
|
|
636
|
+
b = usolve(A, b);
|
|
637
|
+
} catch (_unused) {
|
|
638
|
+
// That direction didn't work, likely because the original matrix
|
|
639
|
+
// was defective. But still make the full number of tries...
|
|
640
|
+
continue;
|
|
641
|
+
}
|
|
639
642
|
if (larger(norm(b), largeNum)) {
|
|
640
643
|
break;
|
|
641
644
|
}
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
+
}
|
|
646
|
+
if (i >= 5) {
|
|
647
|
+
return null; // couldn't find any orthogonal vector in the image
|
|
645
648
|
}
|
|
646
649
|
|
|
647
650
|
// you better converge before I count to ten
|
|
@@ -697,12 +700,14 @@ function createComplexEigs(_ref) {
|
|
|
697
700
|
* Project vector v to the orthogonal complement of an array of vectors
|
|
698
701
|
*/
|
|
699
702
|
function orthogonalComplement(v, orthog) {
|
|
703
|
+
var vectorShape = size(v);
|
|
700
704
|
var _iterator3 = _createForOfIteratorHelper(orthog),
|
|
701
705
|
_step3;
|
|
702
706
|
try {
|
|
703
707
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
704
708
|
var w = _step3.value;
|
|
705
|
-
|
|
709
|
+
w = reshape(w, vectorShape); // make sure this is just a vector computation
|
|
710
|
+
// v := v − (w, v)/|w|^2 w
|
|
706
711
|
v = subtract(v, multiply(divideScalar(dot(w, v), dot(w, w)), w));
|
|
707
712
|
}
|
|
708
713
|
} catch (err) {
|