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.
Files changed (107) hide show
  1. package/HISTORY.md +48 -0
  2. package/README.md +1 -1
  3. package/lib/browser/math.js +1 -1
  4. package/lib/browser/math.js.LICENSE.txt +2 -2
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/core/create.js +2 -2
  7. package/lib/cjs/defaultInstance.js +2 -2
  8. package/lib/cjs/entry/allFactoriesAny.js +2 -2
  9. package/lib/cjs/entry/allFactoriesNumber.js +2 -2
  10. package/lib/cjs/entry/dependenciesAny/dependenciesDet.generated.js +2 -2
  11. package/lib/cjs/entry/dependenciesAny/dependenciesDistance.generated.js +2 -2
  12. package/lib/cjs/entry/dependenciesAny/dependenciesEigs.generated.js +4 -0
  13. package/lib/cjs/entry/dependenciesAny/dependenciesLsolve.generated.js +2 -2
  14. package/lib/cjs/entry/dependenciesAny/dependenciesLsolveAll.generated.js +2 -2
  15. package/lib/cjs/entry/dependenciesAny/dependenciesLup.generated.js +2 -2
  16. package/lib/cjs/entry/dependenciesAny/dependenciesQr.generated.js +2 -2
  17. package/lib/cjs/entry/dependenciesAny/dependenciesStirlingS2.generated.js +2 -2
  18. package/lib/cjs/entry/dependenciesAny/dependenciesSubtract.generated.js +2 -2
  19. package/lib/cjs/entry/dependenciesAny/dependenciesSubtractScalar.generated.js +17 -0
  20. package/lib/cjs/entry/dependenciesAny/dependenciesUnitClass.generated.js +2 -2
  21. package/lib/cjs/entry/dependenciesAny/dependenciesUsolve.generated.js +2 -2
  22. package/lib/cjs/entry/dependenciesAny/dependenciesUsolveAll.generated.js +2 -2
  23. package/lib/cjs/entry/dependenciesAny.generated.js +7 -0
  24. package/lib/cjs/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -2
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesSubtractScalar.generated.js +17 -0
  26. package/lib/cjs/entry/dependenciesNumber.generated.js +7 -0
  27. package/lib/cjs/entry/impureFunctionsAny.generated.js +4 -3
  28. package/lib/cjs/entry/impureFunctionsNumber.generated.js +2 -1
  29. package/lib/cjs/entry/pureFunctionsAny.generated.js +43 -37
  30. package/lib/cjs/entry/pureFunctionsNumber.generated.js +16 -13
  31. package/lib/cjs/expression/embeddedDocs/function/matrix/eigs.js +2 -2
  32. package/lib/cjs/expression/node/AssignmentNode.js +1 -1
  33. package/lib/cjs/expression/node/FunctionAssignmentNode.js +1 -1
  34. package/lib/cjs/expression/parse.js +50 -69
  35. package/lib/cjs/factoriesAny.js +7 -0
  36. package/lib/cjs/factoriesNumber.js +2 -1
  37. package/lib/cjs/function/algebra/decomposition/lup.js +3 -3
  38. package/lib/cjs/function/algebra/decomposition/qr.js +5 -5
  39. package/lib/cjs/function/algebra/solver/lsolve.js +4 -4
  40. package/lib/cjs/function/algebra/solver/lsolveAll.js +6 -6
  41. package/lib/cjs/function/algebra/solver/usolve.js +4 -4
  42. package/lib/cjs/function/algebra/solver/usolveAll.js +6 -6
  43. package/lib/cjs/function/arithmetic/subtract.js +7 -37
  44. package/lib/cjs/function/arithmetic/subtractScalar.js +52 -0
  45. package/lib/cjs/function/combinatorics/stirlingS2.js +2 -2
  46. package/lib/cjs/function/geometry/distance.js +10 -10
  47. package/lib/cjs/function/matrix/det.js +4 -4
  48. package/lib/cjs/function/matrix/eigs/complexEigs.js +73 -68
  49. package/lib/cjs/function/matrix/eigs/{realSymetric.js → realSymmetric.js} +57 -51
  50. package/lib/cjs/function/matrix/eigs.js +118 -45
  51. package/lib/cjs/header.js +2 -2
  52. package/lib/cjs/type/unit/Unit.js +5 -5
  53. package/lib/cjs/utils/number.js +1 -1
  54. package/lib/cjs/utils/object.js +4 -2
  55. package/lib/cjs/utils/snapshot.js +3 -3
  56. package/lib/cjs/utils/string.js +12 -16
  57. package/lib/cjs/version.js +1 -1
  58. package/lib/esm/entry/dependenciesAny/dependenciesDet.generated.js +2 -2
  59. package/lib/esm/entry/dependenciesAny/dependenciesDistance.generated.js +2 -2
  60. package/lib/esm/entry/dependenciesAny/dependenciesEigs.generated.js +4 -0
  61. package/lib/esm/entry/dependenciesAny/dependenciesLsolve.generated.js +2 -2
  62. package/lib/esm/entry/dependenciesAny/dependenciesLsolveAll.generated.js +2 -2
  63. package/lib/esm/entry/dependenciesAny/dependenciesLup.generated.js +2 -2
  64. package/lib/esm/entry/dependenciesAny/dependenciesQr.generated.js +2 -2
  65. package/lib/esm/entry/dependenciesAny/dependenciesStirlingS2.generated.js +2 -2
  66. package/lib/esm/entry/dependenciesAny/dependenciesSubtract.generated.js +2 -2
  67. package/lib/esm/entry/dependenciesAny/dependenciesSubtractScalar.generated.js +10 -0
  68. package/lib/esm/entry/dependenciesAny/dependenciesUnitClass.generated.js +2 -2
  69. package/lib/esm/entry/dependenciesAny/dependenciesUsolve.generated.js +2 -2
  70. package/lib/esm/entry/dependenciesAny/dependenciesUsolveAll.generated.js +2 -2
  71. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  72. package/lib/esm/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -2
  73. package/lib/esm/entry/dependenciesNumber/dependenciesSubtractScalar.generated.js +10 -0
  74. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  75. package/lib/esm/entry/impureFunctionsAny.generated.js +5 -4
  76. package/lib/esm/entry/impureFunctionsNumber.generated.js +3 -2
  77. package/lib/esm/entry/pureFunctionsAny.generated.js +42 -37
  78. package/lib/esm/entry/pureFunctionsNumber.generated.js +16 -13
  79. package/lib/esm/expression/embeddedDocs/function/matrix/eigs.js +2 -2
  80. package/lib/esm/expression/node/AssignmentNode.js +1 -1
  81. package/lib/esm/expression/node/FunctionAssignmentNode.js +1 -1
  82. package/lib/esm/expression/parse.js +50 -69
  83. package/lib/esm/factoriesAny.js +1 -0
  84. package/lib/esm/factoriesNumber.js +1 -0
  85. package/lib/esm/function/algebra/decomposition/lup.js +3 -3
  86. package/lib/esm/function/algebra/decomposition/qr.js +5 -5
  87. package/lib/esm/function/algebra/solver/lsolve.js +4 -4
  88. package/lib/esm/function/algebra/solver/lsolveAll.js +6 -6
  89. package/lib/esm/function/algebra/solver/usolve.js +4 -4
  90. package/lib/esm/function/algebra/solver/usolveAll.js +6 -6
  91. package/lib/esm/function/arithmetic/subtract.js +7 -27
  92. package/lib/esm/function/arithmetic/subtractScalar.js +46 -0
  93. package/lib/esm/function/combinatorics/stirlingS2.js +2 -2
  94. package/lib/esm/function/geometry/distance.js +10 -10
  95. package/lib/esm/function/matrix/det.js +4 -4
  96. package/lib/esm/function/matrix/eigs/complexEigs.js +73 -68
  97. package/lib/esm/function/matrix/eigs/{realSymetric.js → realSymmetric.js} +55 -51
  98. package/lib/esm/function/matrix/eigs.js +119 -47
  99. package/lib/esm/type/unit/Unit.js +5 -5
  100. package/lib/esm/utils/number.js +1 -1
  101. package/lib/esm/utils/object.js +5 -3
  102. package/lib/esm/utils/snapshot.js +1 -1
  103. package/lib/esm/utils/string.js +12 -16
  104. package/lib/esm/version.js +1 -1
  105. package/package.json +14 -14
  106. package/types/EXPLANATION.md +54 -0
  107. 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', 'subtract', 'equalScalar', 'DenseMatrix'];
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
- subtract = _ref.subtract,
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] = [subtract(bdata[i][0] || 0, multiplyScalar(xj, mdata[i][j]))];
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] = [subtract(bdata[_i][0], multiplyScalar(xj, jValues[_k]))];
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', 'subtract', 'equalScalar', 'DenseMatrix'];
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
- subtract = _ref.subtract,
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] = subtract(b[j], multiplyScalar(b[i], M[j][i]));
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] = subtract(bNew[_j], M[_j][i]);
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] = subtract(b[_J], multiplyScalar(b[i], iValues[_j2]));
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] = subtract(bNew[_J2], iValues[_j3]);
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', 'addScalar', 'unaryMinus', 'DenseMatrix', 'concat'];
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
- addScalar = _ref.addScalar,
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
- * Initial value
78
- * @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} y
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
- 'number, number': function numberNumber(x, y) {
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', 'subtract', 'multiplyScalar', 'divideScalar', 'pow', 'factorial', 'combinations', 'isNegative', 'isInteger', 'number', '?bignumber', 'larger'];
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
- subtract = _ref.subtract,
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', 'subtract', 'divideScalar', 'multiplyScalar', 'deepEqual', 'sqrt', 'abs'];
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
- subtract = _ref.subtract,
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 = subtract(z[1], y[1]);
88
- var yCoeff = subtract(y[0], z[0]);
89
- var constant = subtract(multiplyScalar(z[0], y[1]), multiplyScalar(y[0], z[1]));
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 = subtract(z.lineTwoPtY, y.lineOnePtY);
111
- var yCoeff = subtract(y.lineOnePtX, z.lineTwoPtX);
112
- var constant = subtract(multiplyScalar(z.lineTwoPtX, y.lineOnePtY), multiplyScalar(y.lineOnePtX, z.lineTwoPtY));
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 = [subtract(multiplyScalar(subtract(y0, y), c), multiplyScalar(subtract(z0, z), b)), subtract(multiplyScalar(subtract(z0, z), a), multiplyScalar(subtract(x0, x), c)), subtract(multiplyScalar(subtract(x0, x), b), multiplyScalar(subtract(y0, y), a))];
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 = subtract(x[i], y[i]);
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', 'subtract', 'multiply', 'divideScalar', 'isZero', 'unaryMinus'];
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
- subtract = _ref.subtract,
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 subtract(multiply(matrix[0][0], matrix[1][1]), multiply(matrix[1][0], matrix[0][1]));
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(subtract(multiply(matrix[i_][j], piv), multiply(matrix[i_][k], matrix[k_][j])), piv_);
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, findVectors) {
44
- if (findVectors === undefined) {
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⁻¹, A is the original matrix
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⁻¹ arr 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⁻¹ arr 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⁻¹ arr C and the relationship between current arr
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
- vectors = findEigenvectors(arr, N, C, R, values, prec, type);
84
- vectors = matrixFromColumns.apply(void 0, (0, _toConsumableArray2["default"])(vectors));
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
- var c = abs(arr[i][j]); // should be real
129
- colNorm = addScalar(colNorm, c);
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 _c = colNorm;
137
+ var c = colNorm;
139
138
  var rowDivRadix = divideScalar(rowNorm, radix);
140
139
  var rowMulRadix = multiplyScalar(rowNorm, radix);
141
- while (smaller(_c, rowDivRadix)) {
142
- _c = multiplyScalar(_c, radixSq);
140
+ while (smaller(c, rowDivRadix)) {
141
+ c = multiplyScalar(c, radixSq);
143
142
  f = multiplyScalar(f, radix);
144
143
  }
145
- while (larger(_c, rowMulRadix)) {
146
- _c = divideScalar(_c, radixSq);
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(_c, rowNorm), f), multiplyScalar(addScalar(colNorm, rowNorm), 0.95));
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], f);
165
- arr[_j][i] = multiplyScalar(arr[_j][i], g);
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], f);
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' = Q⁺AQ transformations will eventually converge to block-
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
- // n×n matrix describing the QR transformations done since last convergence
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 = 0; // TODO set close to an eigenvalue
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 λ = _step.value;
431
- var _i4 = indexOf(uniqueValues, λ, equal);
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 − λE = 0
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 λ = uniqueValues[i];
457
- var S = subtract(U, multiply(λ, E)); // the characteristic matrix
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 == null) {
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 flatten(v);
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
- // λ± = ½ trA ± ½ ( tr²A - 4 detA )
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⁻¹ is an upper triangular matrix
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 off-diagonal elements of N = A - λI
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
- if (smaller(abs(nb), prec)) {
542
- return [[na, one], [nc, zero]];
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 [[nb, zero], [nd, one]];
541
+ return [[b, zero], [nd, one]];
545
542
  }
546
543
  }
547
544
 
548
545
  /**
549
- * Enlarge the matrix from n×n to N×N, setting the new
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
- while (true) {
633
+ for (; i < 5; ++i) {
637
634
  b = randomOrthogonalVector(N, orthog, type);
638
- b = usolve(A, b);
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
- if (++i >= 5) {
643
- return null;
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
- // v := v − (w, v)/∥w∥² w
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) {