@datagrok/eda 1.3.4 → 1.4.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 (75) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/111.js +1 -1
  3. package/dist/111.js.map +1 -1
  4. package/dist/128.js +1 -1
  5. package/dist/128.js.map +1 -1
  6. package/dist/153.js +1 -1
  7. package/dist/153.js.map +1 -1
  8. package/dist/23.js +1 -1
  9. package/dist/23.js.map +1 -1
  10. package/dist/234.js +1 -1
  11. package/dist/234.js.map +1 -1
  12. package/dist/242.js +1 -1
  13. package/dist/242.js.map +1 -1
  14. package/dist/260.js +1 -1
  15. package/dist/260.js.map +1 -1
  16. package/dist/33.js +1 -1
  17. package/dist/33.js.map +1 -1
  18. package/dist/348.js +1 -1
  19. package/dist/348.js.map +1 -1
  20. package/dist/377.js +1 -1
  21. package/dist/377.js.map +1 -1
  22. package/dist/412.js +1 -1
  23. package/dist/412.js.map +1 -1
  24. package/dist/415.js +1 -1
  25. package/dist/415.js.map +1 -1
  26. package/dist/531.js +1 -1
  27. package/dist/531.js.map +1 -1
  28. package/dist/583.js +1 -1
  29. package/dist/583.js.map +1 -1
  30. package/dist/589.js +1 -1
  31. package/dist/589.js.map +1 -1
  32. package/dist/603.js +1 -1
  33. package/dist/603.js.map +1 -1
  34. package/dist/656.js +1 -1
  35. package/dist/656.js.map +1 -1
  36. package/dist/682.js +1 -1
  37. package/dist/682.js.map +1 -1
  38. package/dist/705.js +1 -1
  39. package/dist/705.js.map +1 -1
  40. package/dist/727.js +1 -1
  41. package/dist/727.js.map +1 -1
  42. package/dist/731.js +1 -1
  43. package/dist/731.js.map +1 -1
  44. package/dist/738.js +1 -1
  45. package/dist/738.js.map +1 -1
  46. package/dist/763.js +1 -1
  47. package/dist/763.js.map +1 -1
  48. package/dist/778.js +1 -1
  49. package/dist/778.js.map +1 -1
  50. package/dist/783.js +1 -1
  51. package/dist/783.js.map +1 -1
  52. package/dist/793.js +1 -1
  53. package/dist/793.js.map +1 -1
  54. package/dist/810.js +2 -0
  55. package/dist/810.js.map +1 -0
  56. package/dist/860.js +1 -1
  57. package/dist/860.js.map +1 -1
  58. package/dist/907.js +1 -1
  59. package/dist/907.js.map +1 -1
  60. package/dist/950.js +1 -1
  61. package/dist/950.js.map +1 -1
  62. package/dist/980.js +1 -1
  63. package/dist/980.js.map +1 -1
  64. package/dist/990.js +1 -1
  65. package/dist/990.js.map +1 -1
  66. package/dist/package-test.js +1 -1
  67. package/dist/package-test.js.map +1 -1
  68. package/dist/package.js +1 -1
  69. package/dist/package.js.map +1 -1
  70. package/package.json +6 -6
  71. package/src/package.ts +1 -1
  72. package/src/pls/pls-constants.ts +7 -7
  73. package/src/pls/pls-tools.ts +5 -13
  74. package/test-console-output-1.log +0 -343
  75. package/test-record-1.mp4 +0 -0
package/dist/907.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"907.js","mappings":"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","sources":["webpack://eda/./node_modules/is-any-array/lib-esm/index.js","webpack://eda/./node_modules/ml-array-rescale/lib-es6/index.js","webpack://eda/./node_modules/ml-array-min/lib-es6/index.js","webpack://eda/./node_modules/ml-array-max/lib-es6/index.js","webpack://eda/./node_modules/ml-matrix/matrix.js","webpack://eda/./node_modules/ml-matrix/matrix.mjs"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n const tag = toString.call(value);\n return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isAnyArray(input)) {\n throw new TypeError('input must be an array');\n } else if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var output;\n\n if (options.output !== undefined) {\n if (!isAnyArray(options.output)) {\n throw new TypeError('output option must be an array if specified');\n }\n\n output = options.output;\n } else {\n output = new Array(input.length);\n }\n\n var currentMin = min(input);\n var currentMax = max(input);\n\n if (currentMin === currentMax) {\n throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n }\n\n var _options$min = options.min,\n minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n _options$max = options.max,\n maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n if (minValue >= maxValue) {\n throw new RangeError('min option must be smaller than max option');\n }\n\n var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n for (var i = 0; i < input.length; i++) {\n output[i] = (input[i] - currentMin) * factor + minValue;\n }\n\n return output;\n}\n\nexport { rescale as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isAnyArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var _options$fromIndex = options.fromIndex,\n fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n _options$toIndex = options.toIndex,\n toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n throw new Error('fromIndex must be a positive integer smaller than length');\n }\n\n if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n }\n\n var minValue = input[fromIndex];\n\n for (var i = fromIndex + 1; i < toIndex; i++) {\n if (input[i] < minValue) minValue = input[i];\n }\n\n return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isAnyArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var _options$fromIndex = options.fromIndex,\n fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n _options$toIndex = options.toIndex,\n toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n throw new Error('fromIndex must be a positive integer smaller than length');\n }\n\n if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n }\n\n var maxValue = input[fromIndex];\n\n for (var i = fromIndex + 1; i < toIndex; i++) {\n if (input[i] > maxValue) maxValue = input[i];\n }\n\n return maxValue;\n}\n\nexport { max as default };\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n const {\n maxRows = 15,\n maxColumns = 10,\n maxNumSize = 8,\n padMinus = 'auto',\n } = options;\n return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n const { rows, columns } = matrix;\n const maxI = Math.min(rows, maxRows);\n const maxJ = Math.min(columns, maxColumns);\n const result = [];\n\n if (padMinus === 'auto') {\n padMinus = false;\n loop: for (let i = 0; i < maxI; i++) {\n for (let j = 0; j < maxJ; j++) {\n if (matrix.get(i, j) < 0) {\n padMinus = true;\n break loop;\n }\n }\n }\n }\n\n for (let i = 0; i < maxI; i++) {\n let line = [];\n for (let j = 0; j < maxJ; j++) {\n line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n }\n result.push(`${line.join(' ')}`);\n }\n if (maxJ !== columns) {\n result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n }\n if (maxI !== rows) {\n result.push(`... ${rows - maxRows} more rows`);\n }\n return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n return (\n num >= 0 && padMinus\n ? ` ${formatNumber2(num, maxNumSize - 1)}`\n : formatNumber2(num, maxNumSize)\n ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n // small.length numbers should be as is\n let str = num.toString();\n if (str.length <= len) return str;\n\n // (7)'0.00123' is better then (7)'1.23e-2'\n // (8)'0.000123' is worse then (7)'1.23e-3',\n let fix = num.toFixed(len);\n if (fix.length > len) {\n fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n }\n if (\n fix.length <= len &&\n !fix.startsWith('0.000') &&\n !fix.startsWith('-0.000')\n ) {\n return fix;\n }\n\n // well, if it's still too long the user should've used longer numbers\n let exp = num.toExponential(len);\n if (exp.length > len) {\n exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n }\n return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n AbstractMatrix.prototype.add = function add(value) {\n if (typeof value === 'number') return this.addS(value);\n return this.addM(value);\n };\n\n AbstractMatrix.prototype.addS = function addS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.addM = function addM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.add = function add(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.add(value);\n };\n\n AbstractMatrix.prototype.sub = function sub(value) {\n if (typeof value === 'number') return this.subS(value);\n return this.subM(value);\n };\n\n AbstractMatrix.prototype.subS = function subS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.subM = function subM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.sub = function sub(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sub(value);\n };\n AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n AbstractMatrix.subtract = AbstractMatrix.sub;\n\n AbstractMatrix.prototype.mul = function mul(value) {\n if (typeof value === 'number') return this.mulS(value);\n return this.mulM(value);\n };\n\n AbstractMatrix.prototype.mulS = function mulS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.mulM = function mulM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.mul = function mul(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.mul(value);\n };\n AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n AbstractMatrix.multiply = AbstractMatrix.mul;\n\n AbstractMatrix.prototype.div = function div(value) {\n if (typeof value === 'number') return this.divS(value);\n return this.divM(value);\n };\n\n AbstractMatrix.prototype.divS = function divS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.divM = function divM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.div = function div(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.div(value);\n };\n AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n AbstractMatrix.divide = AbstractMatrix.div;\n\n AbstractMatrix.prototype.mod = function mod(value) {\n if (typeof value === 'number') return this.modS(value);\n return this.modM(value);\n };\n\n AbstractMatrix.prototype.modS = function modS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) % value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.modM = function modM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) % matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.mod = function mod(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.mod(value);\n };\n AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n AbstractMatrix.modulus = AbstractMatrix.mod;\n\n AbstractMatrix.prototype.and = function and(value) {\n if (typeof value === 'number') return this.andS(value);\n return this.andM(value);\n };\n\n AbstractMatrix.prototype.andS = function andS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) & value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.andM = function andM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) & matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.and = function and(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.and(value);\n };\n\n AbstractMatrix.prototype.or = function or(value) {\n if (typeof value === 'number') return this.orS(value);\n return this.orM(value);\n };\n\n AbstractMatrix.prototype.orS = function orS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) | value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.orM = function orM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) | matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.or = function or(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.or(value);\n };\n\n AbstractMatrix.prototype.xor = function xor(value) {\n if (typeof value === 'number') return this.xorS(value);\n return this.xorM(value);\n };\n\n AbstractMatrix.prototype.xorS = function xorS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ^ value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.xorM = function xorM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.xor = function xor(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.xor(value);\n };\n\n AbstractMatrix.prototype.leftShift = function leftShift(value) {\n if (typeof value === 'number') return this.leftShiftS(value);\n return this.leftShiftM(value);\n };\n\n AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) << value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) << matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.leftShift = function leftShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.leftShift(value);\n };\n\n AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n return this.signPropagatingRightShiftM(value);\n };\n\n AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >> value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.signPropagatingRightShift(value);\n };\n\n AbstractMatrix.prototype.rightShift = function rightShift(value) {\n if (typeof value === 'number') return this.rightShiftS(value);\n return this.rightShiftM(value);\n };\n\n AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >>> value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.rightShift = function rightShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.rightShift(value);\n };\n AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n AbstractMatrix.prototype.not = function not() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, ~(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.not = function not(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.not();\n };\n\n AbstractMatrix.prototype.abs = function abs() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.abs(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.abs = function abs(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.abs();\n };\n\n AbstractMatrix.prototype.acos = function acos() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.acos(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.acos = function acos(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.acos();\n };\n\n AbstractMatrix.prototype.acosh = function acosh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.acosh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.acosh = function acosh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.acosh();\n };\n\n AbstractMatrix.prototype.asin = function asin() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.asin(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.asin = function asin(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.asin();\n };\n\n AbstractMatrix.prototype.asinh = function asinh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.asinh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.asinh = function asinh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.asinh();\n };\n\n AbstractMatrix.prototype.atan = function atan() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.atan(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.atan = function atan(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.atan();\n };\n\n AbstractMatrix.prototype.atanh = function atanh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.atanh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.atanh = function atanh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.atanh();\n };\n\n AbstractMatrix.prototype.cbrt = function cbrt() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cbrt(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cbrt = function cbrt(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cbrt();\n };\n\n AbstractMatrix.prototype.ceil = function ceil() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.ceil(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.ceil = function ceil(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.ceil();\n };\n\n AbstractMatrix.prototype.clz32 = function clz32() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.clz32(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.clz32 = function clz32(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.clz32();\n };\n\n AbstractMatrix.prototype.cos = function cos() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cos(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cos = function cos(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cos();\n };\n\n AbstractMatrix.prototype.cosh = function cosh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cosh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cosh = function cosh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cosh();\n };\n\n AbstractMatrix.prototype.exp = function exp() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.exp(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.exp = function exp(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.exp();\n };\n\n AbstractMatrix.prototype.expm1 = function expm1() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.expm1(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.expm1 = function expm1(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.expm1();\n };\n\n AbstractMatrix.prototype.floor = function floor() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.floor(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.floor = function floor(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.floor();\n };\n\n AbstractMatrix.prototype.fround = function fround() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.fround(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.fround = function fround(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.fround();\n };\n\n AbstractMatrix.prototype.log = function log() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log = function log(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log();\n };\n\n AbstractMatrix.prototype.log1p = function log1p() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log1p(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log1p = function log1p(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log1p();\n };\n\n AbstractMatrix.prototype.log10 = function log10() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log10(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log10 = function log10(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log10();\n };\n\n AbstractMatrix.prototype.log2 = function log2() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log2(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log2 = function log2(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log2();\n };\n\n AbstractMatrix.prototype.round = function round() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.round(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.round = function round(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.round();\n };\n\n AbstractMatrix.prototype.sign = function sign() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sign(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sign = function sign(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sign();\n };\n\n AbstractMatrix.prototype.sin = function sin() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sin(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sin = function sin(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sin();\n };\n\n AbstractMatrix.prototype.sinh = function sinh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sinh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sinh = function sinh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sinh();\n };\n\n AbstractMatrix.prototype.sqrt = function sqrt() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sqrt(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sqrt = function sqrt(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sqrt();\n };\n\n AbstractMatrix.prototype.tan = function tan() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.tan(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.tan = function tan(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.tan();\n };\n\n AbstractMatrix.prototype.tanh = function tanh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.tanh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.tanh = function tanh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.tanh();\n };\n\n AbstractMatrix.prototype.trunc = function trunc() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.trunc(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.trunc = function trunc(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.trunc();\n };\n\n AbstractMatrix.pow = function pow(matrix, arg0) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.pow(arg0);\n };\n\n AbstractMatrix.prototype.pow = function pow(value) {\n if (typeof value === 'number') return this.powS(value);\n return this.powM(value);\n };\n\n AbstractMatrix.prototype.powS = function powS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ** value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.powM = function powM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n }\n }\n return this;\n };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n let max = outer ? matrix.rows : matrix.rows - 1;\n if (index < 0 || index > max) {\n throw new RangeError('Row index out of range');\n }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n let max = outer ? matrix.columns : matrix.columns - 1;\n if (index < 0 || index > max) {\n throw new RangeError('Column index out of range');\n }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n if (vector.to1DArray) {\n vector = vector.to1DArray();\n }\n if (vector.length !== matrix.columns) {\n throw new RangeError(\n 'vector size must be the same as the number of columns',\n );\n }\n return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n if (vector.to1DArray) {\n vector = vector.to1DArray();\n }\n if (vector.length !== matrix.rows) {\n throw new RangeError('vector size must be the same as the number of rows');\n }\n return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n if (!isAnyArray.isAnyArray(rowIndices)) {\n throw new TypeError('row indices must be an array');\n }\n\n for (let i = 0; i < rowIndices.length; i++) {\n if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n throw new RangeError('row indices are out of range');\n }\n }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n if (!isAnyArray.isAnyArray(columnIndices)) {\n throw new TypeError('column indices must be an array');\n }\n\n for (let i = 0; i < columnIndices.length; i++) {\n if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n throw new RangeError('column indices are out of range');\n }\n }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n if (arguments.length !== 5) {\n throw new RangeError('expected 4 arguments');\n }\n checkNumber('startRow', startRow);\n checkNumber('endRow', endRow);\n checkNumber('startColumn', startColumn);\n checkNumber('endColumn', endColumn);\n if (\n startRow > endRow ||\n startColumn > endColumn ||\n startRow < 0 ||\n startRow >= matrix.rows ||\n endRow < 0 ||\n endRow >= matrix.rows ||\n startColumn < 0 ||\n startColumn >= matrix.columns ||\n endColumn < 0 ||\n endColumn >= matrix.columns\n ) {\n throw new RangeError('Submatrix indices are out of range');\n }\n}\n\nfunction newArray(length, value = 0) {\n let array = [];\n for (let i = 0; i < length; i++) {\n array.push(value);\n }\n return array;\n}\n\nfunction checkNumber(name, value) {\n if (typeof value !== 'number') {\n throw new TypeError(`${name} must be a number`);\n }\n}\n\nfunction checkNonEmpty(matrix) {\n if (matrix.isEmpty()) {\n throw new Error('Empty matrix has no elements to index');\n }\n}\n\nfunction sumByRow(matrix) {\n let sum = newArray(matrix.rows);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[i] += matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction sumByColumn(matrix) {\n let sum = newArray(matrix.columns);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[j] += matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction sumAll(matrix) {\n let v = 0;\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n v += matrix.get(i, j);\n }\n }\n return v;\n}\n\nfunction productByRow(matrix) {\n let sum = newArray(matrix.rows, 1);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[i] *= matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction productByColumn(matrix) {\n let sum = newArray(matrix.columns, 1);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[j] *= matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction productAll(matrix) {\n let v = 1;\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n v *= matrix.get(i, j);\n }\n }\n return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const variance = [];\n\n for (let i = 0; i < rows; i++) {\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean[i];\n sum1 += x;\n sum2 += x * x;\n }\n if (unbiased) {\n variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n } else {\n variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n }\n }\n return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const variance = [];\n\n for (let j = 0; j < cols; j++) {\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let i = 0; i < rows; i++) {\n x = matrix.get(i, j) - mean[j];\n sum1 += x;\n sum2 += x * x;\n }\n if (unbiased) {\n variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n } else {\n variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n }\n }\n return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const size = rows * cols;\n\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean;\n sum1 += x;\n sum2 += x * x;\n }\n }\n if (unbiased) {\n return (sum2 - (sum1 * sum1) / size) / (size - 1);\n } else {\n return (sum2 - (sum1 * sum1) / size) / size;\n }\n}\n\nfunction centerByRow(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[i]);\n }\n }\n}\n\nfunction centerByColumn(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[j]);\n }\n }\n}\n\nfunction centerAll(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean);\n }\n }\n}\n\nfunction getScaleByRow(matrix) {\n const scale = [];\n for (let i = 0; i < matrix.rows; i++) {\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[i]);\n }\n }\n}\n\nfunction getScaleByColumn(matrix) {\n const scale = [];\n for (let j = 0; j < matrix.columns; j++) {\n let sum = 0;\n for (let i = 0; i < matrix.rows; i++) {\n sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[j]);\n }\n }\n}\n\nfunction getScaleAll(matrix) {\n const divider = matrix.size - 1;\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n for (let i = 0; i < matrix.rows; i++) {\n sum += matrix.get(i, j) ** 2 / divider;\n }\n }\n return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale);\n }\n }\n}\n\nclass AbstractMatrix {\n static from1DArray(newRows, newColumns, newData) {\n let length = newRows * newColumns;\n if (length !== newData.length) {\n throw new RangeError('data length does not match given dimensions');\n }\n let newMatrix = new Matrix(newRows, newColumns);\n for (let row = 0; row < newRows; row++) {\n for (let column = 0; column < newColumns; column++) {\n newMatrix.set(row, column, newData[row * newColumns + column]);\n }\n }\n return newMatrix;\n }\n\n static rowVector(newData) {\n let vector = new Matrix(1, newData.length);\n for (let i = 0; i < newData.length; i++) {\n vector.set(0, i, newData[i]);\n }\n return vector;\n }\n\n static columnVector(newData) {\n let vector = new Matrix(newData.length, 1);\n for (let i = 0; i < newData.length; i++) {\n vector.set(i, 0, newData[i]);\n }\n return vector;\n }\n\n static zeros(rows, columns) {\n return new Matrix(rows, columns);\n }\n\n static ones(rows, columns) {\n return new Matrix(rows, columns).fill(1);\n }\n\n static rand(rows, columns, options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { random = Math.random } = options;\n let matrix = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.set(i, j, random());\n }\n }\n return matrix;\n }\n\n static randInt(rows, columns, options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1000, random = Math.random } = options;\n if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let interval = max - min;\n let matrix = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n let value = min + Math.round(random() * interval);\n matrix.set(i, j, value);\n }\n }\n return matrix;\n }\n\n static eye(rows, columns, value) {\n if (columns === undefined) columns = rows;\n if (value === undefined) value = 1;\n let min = Math.min(rows, columns);\n let matrix = this.zeros(rows, columns);\n for (let i = 0; i < min; i++) {\n matrix.set(i, i, value);\n }\n return matrix;\n }\n\n static diag(data, rows, columns) {\n let l = data.length;\n if (rows === undefined) rows = l;\n if (columns === undefined) columns = rows;\n let min = Math.min(l, rows, columns);\n let matrix = this.zeros(rows, columns);\n for (let i = 0; i < min; i++) {\n matrix.set(i, i, data[i]);\n }\n return matrix;\n }\n\n static min(matrix1, matrix2) {\n matrix1 = this.checkMatrix(matrix1);\n matrix2 = this.checkMatrix(matrix2);\n let rows = matrix1.rows;\n let columns = matrix1.columns;\n let result = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n }\n }\n return result;\n }\n\n static max(matrix1, matrix2) {\n matrix1 = this.checkMatrix(matrix1);\n matrix2 = this.checkMatrix(matrix2);\n let rows = matrix1.rows;\n let columns = matrix1.columns;\n let result = new this(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n }\n }\n return result;\n }\n\n static checkMatrix(value) {\n return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n }\n\n static isMatrix(value) {\n return value != null && value.klass === 'Matrix';\n }\n\n get size() {\n return this.rows * this.columns;\n }\n\n apply(callback) {\n if (typeof callback !== 'function') {\n throw new TypeError('callback must be a function');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n callback.call(this, i, j);\n }\n }\n return this;\n }\n\n to1DArray() {\n let array = [];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n array.push(this.get(i, j));\n }\n }\n return array;\n }\n\n to2DArray() {\n let copy = [];\n for (let i = 0; i < this.rows; i++) {\n copy.push([]);\n for (let j = 0; j < this.columns; j++) {\n copy[i].push(this.get(i, j));\n }\n }\n return copy;\n }\n\n toJSON() {\n return this.to2DArray();\n }\n\n isRowVector() {\n return this.rows === 1;\n }\n\n isColumnVector() {\n return this.columns === 1;\n }\n\n isVector() {\n return this.rows === 1 || this.columns === 1;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isEmpty() {\n return this.rows === 0 || this.columns === 0;\n }\n\n isSymmetric() {\n if (this.isSquare()) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j <= i; j++) {\n if (this.get(i, j) !== this.get(j, i)) {\n return false;\n }\n }\n }\n return true;\n }\n return false;\n }\n\n isDistance() {\n if (!this.isSymmetric()) return false;\n\n for (let i = 0; i < this.rows; i++) {\n if (this.get(i, i) !== 0) return false;\n }\n\n return true;\n }\n\n isEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isEchelonForm = true;\n let checked = false;\n while (i < this.rows && isEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isEchelonForm = false;\n checked = true;\n }\n }\n i++;\n }\n return isEchelonForm;\n }\n\n isReducedEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isReducedEchelonForm = true;\n let checked = false;\n while (i < this.rows && isReducedEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isReducedEchelonForm = false;\n checked = true;\n }\n }\n for (let k = j + 1; k < this.rows; k++) {\n if (this.get(i, k) !== 0) {\n isReducedEchelonForm = false;\n }\n }\n i++;\n }\n return isReducedEchelonForm;\n }\n\n echelonForm() {\n let result = this.clone();\n let h = 0;\n let k = 0;\n while (h < result.rows && k < result.columns) {\n let iMax = h;\n for (let i = h; i < result.rows; i++) {\n if (result.get(i, k) > result.get(iMax, k)) {\n iMax = i;\n }\n }\n if (result.get(iMax, k) === 0) {\n k++;\n } else {\n result.swapRows(h, iMax);\n let tmp = result.get(h, k);\n for (let j = k; j < result.columns; j++) {\n result.set(h, j, result.get(h, j) / tmp);\n }\n for (let i = h + 1; i < result.rows; i++) {\n let factor = result.get(i, k) / result.get(h, k);\n result.set(i, k, 0);\n for (let j = k + 1; j < result.columns; j++) {\n result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n }\n }\n h++;\n k++;\n }\n }\n return result;\n }\n\n reducedEchelonForm() {\n let result = this.echelonForm();\n let m = result.columns;\n let n = result.rows;\n let h = n - 1;\n while (h >= 0) {\n if (result.maxRow(h) === 0) {\n h--;\n } else {\n let p = 0;\n let pivot = false;\n while (p < n && pivot === false) {\n if (result.get(h, p) === 1) {\n pivot = true;\n } else {\n p++;\n }\n }\n for (let i = 0; i < h; i++) {\n let factor = result.get(i, p);\n for (let j = p; j < m; j++) {\n let tmp = result.get(i, j) - factor * result.get(h, j);\n result.set(i, j, tmp);\n }\n }\n h--;\n }\n }\n return result;\n }\n\n set() {\n throw new Error('set method is unimplemented');\n }\n\n get() {\n throw new Error('get method is unimplemented');\n }\n\n repeat(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { rows = 1, columns = 1 } = options;\n if (!Number.isInteger(rows) || rows <= 0) {\n throw new TypeError('rows must be a positive integer');\n }\n if (!Number.isInteger(columns) || columns <= 0) {\n throw new TypeError('columns must be a positive integer');\n }\n let matrix = new Matrix(this.rows * rows, this.columns * columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n }\n }\n return matrix;\n }\n\n fill(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, value);\n }\n }\n return this;\n }\n\n neg() {\n return this.mulS(-1);\n }\n\n getRow(index) {\n checkRowIndex(this, index);\n let row = [];\n for (let i = 0; i < this.columns; i++) {\n row.push(this.get(index, i));\n }\n return row;\n }\n\n getRowVector(index) {\n return Matrix.rowVector(this.getRow(index));\n }\n\n setRow(index, array) {\n checkRowIndex(this, index);\n array = checkRowVector(this, array);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, array[i]);\n }\n return this;\n }\n\n swapRows(row1, row2) {\n checkRowIndex(this, row1);\n checkRowIndex(this, row2);\n for (let i = 0; i < this.columns; i++) {\n let temp = this.get(row1, i);\n this.set(row1, i, this.get(row2, i));\n this.set(row2, i, temp);\n }\n return this;\n }\n\n getColumn(index) {\n checkColumnIndex(this, index);\n let column = [];\n for (let i = 0; i < this.rows; i++) {\n column.push(this.get(i, index));\n }\n return column;\n }\n\n getColumnVector(index) {\n return Matrix.columnVector(this.getColumn(index));\n }\n\n setColumn(index, array) {\n checkColumnIndex(this, index);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, array[i]);\n }\n return this;\n }\n\n swapColumns(column1, column2) {\n checkColumnIndex(this, column1);\n checkColumnIndex(this, column2);\n for (let i = 0; i < this.rows; i++) {\n let temp = this.get(i, column1);\n this.set(i, column1, this.get(i, column2));\n this.set(i, column2, temp);\n }\n return this;\n }\n\n addRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[j]);\n }\n }\n return this;\n }\n\n subRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[j]);\n }\n }\n return this;\n }\n\n mulRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[j]);\n }\n }\n return this;\n }\n\n divRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[j]);\n }\n }\n return this;\n }\n\n addColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[i]);\n }\n }\n return this;\n }\n\n subColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[i]);\n }\n }\n return this;\n }\n\n mulColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[i]);\n }\n }\n return this;\n }\n\n divColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[i]);\n }\n }\n return this;\n }\n\n mulRow(index, value) {\n checkRowIndex(this, index);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, this.get(index, i) * value);\n }\n return this;\n }\n\n mulColumn(index, value) {\n checkColumnIndex(this, index);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, this.get(i, index) * value);\n }\n return this;\n }\n\n max(by) {\n if (this.isEmpty()) {\n return NaN;\n }\n switch (by) {\n case 'row': {\n const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max[row]) {\n max[row] = this.get(row, column);\n }\n }\n }\n return max;\n }\n case 'column': {\n const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max[column]) {\n max[column] = this.get(row, column);\n }\n }\n }\n return max;\n }\n case undefined: {\n let max = this.get(0, 0);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max) {\n max = this.get(row, column);\n }\n }\n }\n return max;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n maxIndex() {\n checkNonEmpty(this);\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) > v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n min(by) {\n if (this.isEmpty()) {\n return NaN;\n }\n\n switch (by) {\n case 'row': {\n const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min[row]) {\n min[row] = this.get(row, column);\n }\n }\n }\n return min;\n }\n case 'column': {\n const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min[column]) {\n min[column] = this.get(row, column);\n }\n }\n }\n return min;\n }\n case undefined: {\n let min = this.get(0, 0);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min) {\n min = this.get(row, column);\n }\n }\n }\n return min;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n minIndex() {\n checkNonEmpty(this);\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) < v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n maxRow(row) {\n checkRowIndex(this, row);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n maxRowIndex(row) {\n checkRowIndex(this, row);\n checkNonEmpty(this);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n minRow(row) {\n checkRowIndex(this, row);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n minRowIndex(row) {\n checkRowIndex(this, row);\n checkNonEmpty(this);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n maxColumn(column) {\n checkColumnIndex(this, column);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n maxColumnIndex(column) {\n checkColumnIndex(this, column);\n checkNonEmpty(this);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n minColumn(column) {\n checkColumnIndex(this, column);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n minColumnIndex(column) {\n checkColumnIndex(this, column);\n checkNonEmpty(this);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n diag() {\n let min = Math.min(this.rows, this.columns);\n let diag = [];\n for (let i = 0; i < min; i++) {\n diag.push(this.get(i, i));\n }\n return diag;\n }\n\n norm(type = 'frobenius') {\n switch (type) {\n case 'max':\n return this.max();\n case 'frobenius':\n return Math.sqrt(this.dot(this));\n default:\n throw new RangeError(`unknown norm type: ${type}`);\n }\n }\n\n cumulativeSum() {\n let sum = 0;\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n sum += this.get(i, j);\n this.set(i, j, sum);\n }\n }\n return this;\n }\n\n dot(vector2) {\n if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n let vector1 = this.to1DArray();\n if (vector1.length !== vector2.length) {\n throw new RangeError('vectors do not have the same size');\n }\n let dot = 0;\n for (let i = 0; i < vector1.length; i++) {\n dot += vector1[i] * vector2[i];\n }\n return dot;\n }\n\n mmul(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.columns;\n\n let result = new Matrix(m, p);\n\n let Bcolj = new Float64Array(n);\n for (let j = 0; j < p; j++) {\n for (let k = 0; k < n; k++) {\n Bcolj[k] = other.get(k, j);\n }\n\n for (let i = 0; i < m; i++) {\n let s = 0;\n for (let k = 0; k < n; k++) {\n s += this.get(i, k) * Bcolj[k];\n }\n\n result.set(i, j, s);\n }\n }\n return result;\n }\n\n strassen2x2(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(2, 2);\n const a11 = this.get(0, 0);\n const b11 = other.get(0, 0);\n const a12 = this.get(0, 1);\n const b12 = other.get(0, 1);\n const a21 = this.get(1, 0);\n const b21 = other.get(1, 0);\n const a22 = this.get(1, 1);\n const b22 = other.get(1, 1);\n\n // Compute intermediate values.\n const m1 = (a11 + a22) * (b11 + b22);\n const m2 = (a21 + a22) * b11;\n const m3 = a11 * (b12 - b22);\n const m4 = a22 * (b21 - b11);\n const m5 = (a11 + a12) * b22;\n const m6 = (a21 - a11) * (b11 + b12);\n const m7 = (a12 - a22) * (b21 + b22);\n\n // Combine intermediate values into the output.\n const c00 = m1 + m4 - m5 + m7;\n const c01 = m3 + m5;\n const c10 = m2 + m4;\n const c11 = m1 - m2 + m3 + m6;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n return result;\n }\n\n strassen3x3(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(3, 3);\n\n const a00 = this.get(0, 0);\n const a01 = this.get(0, 1);\n const a02 = this.get(0, 2);\n const a10 = this.get(1, 0);\n const a11 = this.get(1, 1);\n const a12 = this.get(1, 2);\n const a20 = this.get(2, 0);\n const a21 = this.get(2, 1);\n const a22 = this.get(2, 2);\n\n const b00 = other.get(0, 0);\n const b01 = other.get(0, 1);\n const b02 = other.get(0, 2);\n const b10 = other.get(1, 0);\n const b11 = other.get(1, 1);\n const b12 = other.get(1, 2);\n const b20 = other.get(2, 0);\n const b21 = other.get(2, 1);\n const b22 = other.get(2, 2);\n\n const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n const m2 = (a00 - a10) * (-b01 + b11);\n const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n const m5 = (a10 + a11) * (-b00 + b01);\n const m6 = a00 * b00;\n const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n const m8 = (-a00 + a20) * (b02 - b12);\n const m9 = (a20 + a21) * (-b00 + b02);\n const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n const m13 = (a02 - a22) * (b11 - b21);\n const m14 = a02 * b20;\n const m15 = (a21 + a22) * (-b20 + b21);\n const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n const m17 = (a02 - a12) * (b12 - b22);\n const m18 = (a11 + a12) * (-b20 + b22);\n const m19 = a01 * b10;\n const m20 = a12 * b21;\n const m21 = a10 * b02;\n const m22 = a20 * b01;\n const m23 = a22 * b22;\n\n const c00 = m6 + m14 + m19;\n const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n const c11 = m2 + m4 + m5 + m6 + m20;\n const c12 = m14 + m16 + m17 + m18 + m21;\n const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n const c21 = m12 + m13 + m14 + m15 + m22;\n const c22 = m6 + m7 + m8 + m9 + m23;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(0, 2, c02);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n result.set(1, 2, c12);\n result.set(2, 0, c20);\n result.set(2, 1, c21);\n result.set(2, 2, c22);\n return result;\n }\n\n mmulStrassen(y) {\n y = Matrix.checkMatrix(y);\n let x = this.clone();\n let r1 = x.rows;\n let c1 = x.columns;\n let r2 = y.rows;\n let c2 = y.columns;\n if (c1 !== r2) {\n // eslint-disable-next-line no-console\n console.warn(\n `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n );\n }\n\n // Put a matrix into the top left of a matrix of zeros.\n // `rows` and `cols` are the dimensions of the output matrix.\n function embed(mat, rows, cols) {\n let r = mat.rows;\n let c = mat.columns;\n if (r === rows && c === cols) {\n return mat;\n } else {\n let resultat = AbstractMatrix.zeros(rows, cols);\n resultat = resultat.setSubMatrix(mat, 0, 0);\n return resultat;\n }\n }\n\n // Make sure both matrices are the same size.\n // This is exclusively for simplicity:\n // this algorithm can be implemented with matrices of different sizes.\n\n let r = Math.max(r1, r2);\n let c = Math.max(c1, c2);\n x = embed(x, r, c);\n y = embed(y, r, c);\n\n // Our recursive multiplication function.\n function blockMult(a, b, rows, cols) {\n // For small matrices, resort to naive multiplication.\n if (rows <= 512 || cols <= 512) {\n return a.mmul(b); // a is equivalent to this\n }\n\n // Apply dynamic padding.\n if (rows % 2 === 1 && cols % 2 === 1) {\n a = embed(a, rows + 1, cols + 1);\n b = embed(b, rows + 1, cols + 1);\n } else if (rows % 2 === 1) {\n a = embed(a, rows + 1, cols);\n b = embed(b, rows + 1, cols);\n } else if (cols % 2 === 1) {\n a = embed(a, rows, cols + 1);\n b = embed(b, rows, cols + 1);\n }\n\n let halfRows = parseInt(a.rows / 2, 10);\n let halfCols = parseInt(a.columns / 2, 10);\n // Subdivide input matrices.\n let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n // Compute intermediate values.\n let m1 = blockMult(\n AbstractMatrix.add(a11, a22),\n AbstractMatrix.add(b11, b22),\n halfRows,\n halfCols,\n );\n let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n let m6 = blockMult(\n AbstractMatrix.sub(a21, a11),\n AbstractMatrix.add(b11, b12),\n halfRows,\n halfCols,\n );\n let m7 = blockMult(\n AbstractMatrix.sub(a12, a22),\n AbstractMatrix.add(b21, b22),\n halfRows,\n halfCols,\n );\n\n // Combine intermediate values into the output.\n let c11 = AbstractMatrix.add(m1, m4);\n c11.sub(m5);\n c11.add(m7);\n let c12 = AbstractMatrix.add(m3, m5);\n let c21 = AbstractMatrix.add(m2, m4);\n let c22 = AbstractMatrix.sub(m1, m2);\n c22.add(m3);\n c22.add(m6);\n\n // Crop output to the desired size (undo dynamic padding).\n let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n result = result.setSubMatrix(c11, 0, 0);\n result = result.setSubMatrix(c12, c11.rows, 0);\n result = result.setSubMatrix(c21, 0, c11.columns);\n result = result.setSubMatrix(c22, c11.rows, c11.columns);\n return result.subMatrix(0, rows - 1, 0, cols - 1);\n }\n\n return blockMult(x, y, r, c);\n }\n\n scaleRows(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.rows; i++) {\n const row = this.getRow(i);\n if (row.length > 0) {\n rescale(row, { min, max, output: row });\n }\n newMatrix.setRow(i, row);\n }\n return newMatrix;\n }\n\n scaleColumns(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.columns; i++) {\n const column = this.getColumn(i);\n if (column.length) {\n rescale(column, {\n min,\n max,\n output: column,\n });\n }\n newMatrix.setColumn(i, column);\n }\n return newMatrix;\n }\n\n flipRows() {\n const middle = Math.ceil(this.columns / 2);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < middle; j++) {\n let first = this.get(i, j);\n let last = this.get(i, this.columns - 1 - j);\n this.set(i, j, last);\n this.set(i, this.columns - 1 - j, first);\n }\n }\n return this;\n }\n\n flipColumns() {\n const middle = Math.ceil(this.rows / 2);\n for (let j = 0; j < this.columns; j++) {\n for (let i = 0; i < middle; i++) {\n let first = this.get(i, j);\n let last = this.get(this.rows - 1 - i, j);\n this.set(i, j, last);\n this.set(this.rows - 1 - i, j, first);\n }\n }\n return this;\n }\n\n kroneckerProduct(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.rows;\n let q = other.columns;\n\n let result = new Matrix(m * p, n * q);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n for (let k = 0; k < p; k++) {\n for (let l = 0; l < q; l++) {\n result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n }\n }\n }\n }\n return result;\n }\n\n kroneckerSum(other) {\n other = Matrix.checkMatrix(other);\n if (!this.isSquare() || !other.isSquare()) {\n throw new Error('Kronecker Sum needs two Square Matrices');\n }\n let m = this.rows;\n let n = other.rows;\n let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n return AxI.add(IxB);\n }\n\n transpose() {\n let result = new Matrix(this.columns, this.rows);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n result.set(j, i, this.get(i, j));\n }\n }\n return result;\n }\n\n sortRows(compareFunction = compareNumbers) {\n for (let i = 0; i < this.rows; i++) {\n this.setRow(i, this.getRow(i).sort(compareFunction));\n }\n return this;\n }\n\n sortColumns(compareFunction = compareNumbers) {\n for (let i = 0; i < this.columns; i++) {\n this.setColumn(i, this.getColumn(i).sort(compareFunction));\n }\n return this;\n }\n\n subMatrix(startRow, endRow, startColumn, endColumn) {\n checkRange(this, startRow, endRow, startColumn, endColumn);\n let newMatrix = new Matrix(\n endRow - startRow + 1,\n endColumn - startColumn + 1,\n );\n for (let i = startRow; i <= endRow; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n }\n }\n return newMatrix;\n }\n\n subMatrixRow(indices, startColumn, endColumn) {\n if (startColumn === undefined) startColumn = 0;\n if (endColumn === undefined) endColumn = this.columns - 1;\n if (\n startColumn > endColumn ||\n startColumn < 0 ||\n startColumn >= this.columns ||\n endColumn < 0 ||\n endColumn >= this.columns\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n if (indices[i] < 0 || indices[i] >= this.rows) {\n throw new RangeError(`Row index out of range: ${indices[i]}`);\n }\n newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n }\n }\n return newMatrix;\n }\n\n subMatrixColumn(indices, startRow, endRow) {\n if (startRow === undefined) startRow = 0;\n if (endRow === undefined) endRow = this.rows - 1;\n if (\n startRow > endRow ||\n startRow < 0 ||\n startRow >= this.rows ||\n endRow < 0 ||\n endRow >= this.rows\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startRow; j <= endRow; j++) {\n if (indices[i] < 0 || indices[i] >= this.columns) {\n throw new RangeError(`Column index out of range: ${indices[i]}`);\n }\n newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n }\n }\n return newMatrix;\n }\n\n setSubMatrix(matrix, startRow, startColumn) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isEmpty()) {\n return this;\n }\n let endRow = startRow + matrix.rows - 1;\n let endColumn = startColumn + matrix.columns - 1;\n checkRange(this, startRow, endRow, startColumn, endColumn);\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n this.set(startRow + i, startColumn + j, matrix.get(i, j));\n }\n }\n return this;\n }\n\n selection(rowIndices, columnIndices) {\n checkRowIndices(this, rowIndices);\n checkColumnIndices(this, columnIndices);\n let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n for (let i = 0; i < rowIndices.length; i++) {\n let rowIndex = rowIndices[i];\n for (let j = 0; j < columnIndices.length; j++) {\n let columnIndex = columnIndices[j];\n newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n }\n }\n return newMatrix;\n }\n\n trace() {\n let min = Math.min(this.rows, this.columns);\n let trace = 0;\n for (let i = 0; i < min; i++) {\n trace += this.get(i, i);\n }\n return trace;\n }\n\n clone() {\n return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n }\n\n /**\n * @template {AbstractMatrix} M\n * @param {AbstractMatrix} from\n * @param {M} to\n * @return {M}\n */\n static copy(from, to) {\n for (const [row, column, value] of from.entries()) {\n to.set(row, column, value);\n }\n\n return to;\n }\n\n sum(by) {\n switch (by) {\n case 'row':\n return sumByRow(this);\n case 'column':\n return sumByColumn(this);\n case undefined:\n return sumAll(this);\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n product(by) {\n switch (by) {\n case 'row':\n return productByRow(this);\n case 'column':\n return productByColumn(this);\n case undefined:\n return productAll(this);\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n mean(by) {\n const sum = this.sum(by);\n switch (by) {\n case 'row': {\n for (let i = 0; i < this.rows; i++) {\n sum[i] /= this.columns;\n }\n return sum;\n }\n case 'column': {\n for (let i = 0; i < this.columns; i++) {\n sum[i] /= this.rows;\n }\n return sum;\n }\n case undefined:\n return sum / this.size;\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n variance(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { unbiased = true, mean = this.mean(by) } = options;\n if (typeof unbiased !== 'boolean') {\n throw new TypeError('unbiased must be a boolean');\n }\n switch (by) {\n case 'row': {\n if (!isAnyArray.isAnyArray(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByRow(this, unbiased, mean);\n }\n case 'column': {\n if (!isAnyArray.isAnyArray(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByColumn(this, unbiased, mean);\n }\n case undefined: {\n if (typeof mean !== 'number') {\n throw new TypeError('mean must be a number');\n }\n return varianceAll(this, unbiased, mean);\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n standardDeviation(by, options) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n const variance = this.variance(by, options);\n if (by === undefined) {\n return Math.sqrt(variance);\n } else {\n for (let i = 0; i < variance.length; i++) {\n variance[i] = Math.sqrt(variance[i]);\n }\n return variance;\n }\n }\n\n center(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { center = this.mean(by) } = options;\n switch (by) {\n case 'row': {\n if (!isAnyArray.isAnyArray(center)) {\n throw new TypeError('center must be an array');\n }\n centerByRow(this, center);\n return this;\n }\n case 'column': {\n if (!isAnyArray.isAnyArray(center)) {\n throw new TypeError('center must be an array');\n }\n centerByColumn(this, center);\n return this;\n }\n case undefined: {\n if (typeof center !== 'number') {\n throw new TypeError('center must be a number');\n }\n centerAll(this, center);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n scale(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n let scale = options.scale;\n switch (by) {\n case 'row': {\n if (scale === undefined) {\n scale = getScaleByRow(this);\n } else if (!isAnyArray.isAnyArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByRow(this, scale);\n return this;\n }\n case 'column': {\n if (scale === undefined) {\n scale = getScaleByColumn(this);\n } else if (!isAnyArray.isAnyArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByColumn(this, scale);\n return this;\n }\n case undefined: {\n if (scale === undefined) {\n scale = getScaleAll(this);\n } else if (typeof scale !== 'number') {\n throw new TypeError('scale must be a number');\n }\n scaleAll(this, scale);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n toString(options) {\n return inspectMatrixWithOptions(this, options);\n }\n\n [Symbol.iterator]() {\n return this.entries();\n }\n\n /**\n * iterator from left to right, from top to bottom\n * yield [row, column, value]\n * @returns {Generator<[number, number, number], void, *>}\n */\n *entries() {\n for (let row = 0; row < this.rows; row++) {\n for (let col = 0; col < this.columns; col++) {\n yield [row, col, this.get(row, col)];\n }\n }\n }\n\n /**\n * iterator from left to right, from top to bottom\n * yield value\n * @returns {Generator<number, void, *>}\n */\n *values() {\n for (let row = 0; row < this.rows; row++) {\n for (let col = 0; col < this.columns; col++) {\n yield this.get(row, col);\n }\n }\n }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n return array.every((element) => {\n return typeof element === 'number';\n });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n /**\n * @type {Float64Array[]}\n */\n data;\n\n /**\n * Init an empty matrix\n * @param {number} nRows\n * @param {number} nColumns\n */\n #initData(nRows, nColumns) {\n this.data = [];\n\n if (Number.isInteger(nColumns) && nColumns >= 0) {\n for (let i = 0; i < nRows; i++) {\n this.data.push(new Float64Array(nColumns));\n }\n } else {\n throw new TypeError('nColumns must be a positive integer');\n }\n\n this.rows = nRows;\n this.columns = nColumns;\n }\n\n constructor(nRows, nColumns) {\n super();\n if (Matrix.isMatrix(nRows)) {\n this.#initData(nRows.rows, nRows.columns);\n Matrix.copy(nRows, this);\n } else if (Number.isInteger(nRows) && nRows >= 0) {\n this.#initData(nRows, nColumns);\n } else if (isAnyArray.isAnyArray(nRows)) {\n // Copy the values from the 2D array\n const arrayData = nRows;\n nRows = arrayData.length;\n nColumns = nRows ? arrayData[0].length : 0;\n if (typeof nColumns !== 'number') {\n throw new TypeError(\n 'Data must be a 2D array with at least one element',\n );\n }\n this.data = [];\n\n for (let i = 0; i < nRows; i++) {\n if (arrayData[i].length !== nColumns) {\n throw new RangeError('Inconsistent array dimensions');\n }\n if (!isArrayOfNumbers(arrayData[i])) {\n throw new TypeError('Input data contains non-numeric values');\n }\n this.data.push(Float64Array.from(arrayData[i]));\n }\n\n this.rows = nRows;\n this.columns = nColumns;\n } else {\n throw new TypeError(\n 'First argument must be a positive number or an array',\n );\n }\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n\n removeRow(index) {\n checkRowIndex(this, index);\n this.data.splice(index, 1);\n this.rows -= 1;\n return this;\n }\n\n addRow(index, array) {\n if (array === undefined) {\n array = index;\n index = this.rows;\n }\n checkRowIndex(this, index, true);\n array = Float64Array.from(checkRowVector(this, array));\n this.data.splice(index, 0, array);\n this.rows += 1;\n return this;\n }\n\n removeColumn(index) {\n checkColumnIndex(this, index);\n for (let i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns - 1);\n for (let j = 0; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n for (let j = index + 1; j < this.columns; j++) {\n newRow[j - 1] = this.data[i][j];\n }\n this.data[i] = newRow;\n }\n this.columns -= 1;\n return this;\n }\n\n addColumn(index, array) {\n if (typeof array === 'undefined') {\n array = index;\n index = this.columns;\n }\n checkColumnIndex(this, index, true);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns + 1);\n let j = 0;\n for (; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n newRow[j++] = array[i];\n for (; j < this.columns + 1; j++) {\n newRow[j] = this.data[i][j - 1];\n }\n this.data[i] = newRow;\n }\n this.columns += 1;\n return this;\n }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n /** @type {Matrix} */\n #matrix;\n\n get size() {\n return this.#matrix.size;\n }\n\n get rows() {\n return this.#matrix.rows;\n }\n\n get columns() {\n return this.#matrix.columns;\n }\n\n get diagonalSize() {\n return this.rows;\n }\n\n /**\n * not the same as matrix.isSymmetric()\n * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n *\n * @param value\n * @returns {boolean}\n */\n static isSymmetricMatrix(value) {\n return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n }\n\n /**\n * @param diagonalSize\n * @return {SymmetricMatrix}\n */\n static zeros(diagonalSize) {\n return new this(diagonalSize);\n }\n\n /**\n * @param diagonalSize\n * @return {SymmetricMatrix}\n */\n static ones(diagonalSize) {\n return new this(diagonalSize).fill(1);\n }\n\n /**\n * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n * @return {this}\n */\n constructor(diagonalSize) {\n super();\n\n if (Matrix.isMatrix(diagonalSize)) {\n if (!diagonalSize.isSymmetric()) {\n throw new TypeError('not symmetric data');\n }\n\n this.#matrix = Matrix.copy(\n diagonalSize,\n new Matrix(diagonalSize.rows, diagonalSize.rows),\n );\n } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n this.#matrix = new Matrix(diagonalSize, diagonalSize);\n } else {\n this.#matrix = new Matrix(diagonalSize);\n\n if (!this.isSymmetric()) {\n throw new TypeError('not symmetric data');\n }\n }\n }\n\n clone() {\n const matrix = new SymmetricMatrix(this.diagonalSize);\n\n for (const [row, col, value] of this.upperRightEntries()) {\n matrix.set(row, col, value);\n }\n\n return matrix;\n }\n\n toMatrix() {\n return new Matrix(this);\n }\n\n get(rowIndex, columnIndex) {\n return this.#matrix.get(rowIndex, columnIndex);\n }\n set(rowIndex, columnIndex, value) {\n // symmetric set\n this.#matrix.set(rowIndex, columnIndex, value);\n this.#matrix.set(columnIndex, rowIndex, value);\n\n return this;\n }\n\n removeCross(index) {\n // symmetric remove side\n this.#matrix.removeRow(index);\n this.#matrix.removeColumn(index);\n\n return this;\n }\n\n addCross(index, array) {\n if (array === undefined) {\n array = index;\n index = this.diagonalSize;\n }\n\n const row = array.slice();\n row.splice(index, 1);\n\n this.#matrix.addRow(index, row);\n this.#matrix.addColumn(index, array);\n\n return this;\n }\n\n /**\n * @param {Mask[]} mask\n */\n applyMask(mask) {\n if (mask.length !== this.diagonalSize) {\n throw new RangeError('Mask size do not match with matrix size');\n }\n\n // prepare sides to remove from matrix from mask\n /** @type {number[]} */\n const sidesToRemove = [];\n for (const [index, passthroughs] of mask.entries()) {\n if (passthroughs) continue;\n sidesToRemove.push(index);\n }\n // to remove from highest to lowest for no mutation shifting\n sidesToRemove.reverse();\n\n // remove sides\n for (const sideIndex of sidesToRemove) {\n this.removeCross(sideIndex);\n }\n\n return this;\n }\n\n /**\n * Compact format upper-right corner of matrix\n * iterate from left to right, from top to bottom.\n *\n * ```\n * A B C D\n * A 1 2 3 4\n * B 2 5 6 7\n * C 3 6 8 9\n * D 4 7 9 10\n * ```\n *\n * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n *\n * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n *\n * @returns {number[]}\n */\n toCompact() {\n const { diagonalSize } = this;\n\n /** @type {number[]} */\n const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n compact[index] = this.get(row, col);\n\n if (++col >= diagonalSize) col = ++row;\n }\n\n return compact;\n }\n\n /**\n * @param {number[]} compact\n * @return {SymmetricMatrix}\n */\n static fromCompact(compact) {\n const compactSize = compact.length;\n // compactSize = (sideSize * (sideSize + 1)) / 2\n // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n if (!Number.isInteger(diagonalSize)) {\n throw new TypeError(\n `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n compact,\n )}`,\n );\n }\n\n const matrix = new SymmetricMatrix(diagonalSize);\n for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n matrix.set(col, row, compact[index]);\n if (++col >= diagonalSize) col = ++row;\n }\n\n return matrix;\n }\n\n /**\n * half iterator upper-right-corner from left to right, from top to bottom\n * yield [row, column, value]\n *\n * @returns {Generator<[number, number, number], void, *>}\n */\n *upperRightEntries() {\n for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n const value = this.get(row, col);\n\n yield [row, col, value];\n\n // at the end of row, move cursor to next row at diagonal position\n if (++col >= this.diagonalSize) col = ++row;\n }\n }\n\n /**\n * half iterator upper-right-corner from left to right, from top to bottom\n * yield value\n *\n * @returns {Generator<[number, number, number], void, *>}\n */\n *upperRightValues() {\n for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n const value = this.get(row, col);\n\n yield value;\n\n // at the end of row, move cursor to next row at diagonal position\n if (++col >= this.diagonalSize) col = ++row;\n }\n }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n /**\n * not the same as matrix.isSymmetric()\n * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n *\n * @param value\n * @returns {boolean}\n */\n static isDistanceMatrix(value) {\n return (\n SymmetricMatrix.isSymmetricMatrix(value) &&\n value.klassSubType === 'DistanceMatrix'\n );\n }\n\n constructor(sideSize) {\n super(sideSize);\n\n if (!this.isDistance()) {\n throw new TypeError('Provided arguments do no produce a distance matrix');\n }\n }\n\n set(rowIndex, columnIndex, value) {\n // distance matrix diagonal is 0\n if (rowIndex === columnIndex) value = 0;\n\n return super.set(rowIndex, columnIndex, value);\n }\n\n addCross(index, array) {\n if (array === undefined) {\n array = index;\n index = this.diagonalSize;\n }\n\n // ensure distance\n array = array.slice();\n array[index] = 0;\n\n return super.addCross(index, array);\n }\n\n toSymmetricMatrix() {\n return new SymmetricMatrix(this);\n }\n\n clone() {\n const matrix = new DistanceMatrix(this.diagonalSize);\n\n for (const [row, col, value] of this.upperRightEntries()) {\n if (row === col) continue;\n matrix.set(row, col, value);\n }\n\n return matrix;\n }\n\n /**\n * Compact format upper-right corner of matrix\n * no diagonal (only zeros)\n * iterable from left to right, from top to bottom.\n *\n * ```\n * A B C D\n * A 0 1 2 3\n * B 1 0 4 5\n * C 2 4 0 6\n * D 3 5 6 0\n * ```\n *\n * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n *\n * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n *\n * @returns {number[]}\n */\n toCompact() {\n const { diagonalSize } = this;\n const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n /** @type {number[]} */\n const compact = new Array(compactLength);\n for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n compact[index] = this.get(row, col);\n\n if (++col >= diagonalSize) col = ++row + 1;\n }\n\n return compact;\n }\n\n /**\n * @param {number[]} compact\n */\n static fromCompact(compact) {\n const compactSize = compact.length;\n\n if (compactSize === 0) {\n return new this(0);\n }\n\n // compactSize in Natural integer range ]0;∞]\n // compactSize = (sideSize * (sideSize - 1)) / 2\n // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n if (!Number.isInteger(diagonalSize)) {\n throw new TypeError(\n `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n compact,\n )}`,\n );\n }\n\n const matrix = new this(diagonalSize);\n for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n matrix.set(col, row, compact[index]);\n if (++col >= diagonalSize) col = ++row + 1;\n }\n\n return matrix;\n }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n constructor(matrix, rows, columns) {\n super();\n this.matrix = matrix;\n this.rows = rows;\n this.columns = columns;\n }\n}\n\nclass MatrixColumnView extends BaseView {\n constructor(matrix, column) {\n checkColumnIndex(matrix, column);\n super(matrix, matrix.rows, 1);\n this.column = column;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.column, value);\n return this;\n }\n\n get(rowIndex) {\n return this.matrix.get(rowIndex, this.column);\n }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n constructor(matrix, columnIndices) {\n checkColumnIndices(matrix, columnIndices);\n super(matrix, matrix.rows, columnIndices.length);\n this.columnIndices = columnIndices;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n constructor(matrix) {\n super(matrix, matrix.rows, matrix.columns);\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n }\n}\n\nclass MatrixFlipRowView extends BaseView {\n constructor(matrix) {\n super(matrix, matrix.rows, matrix.columns);\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n }\n}\n\nclass MatrixRowView extends BaseView {\n constructor(matrix, row) {\n checkRowIndex(matrix, row);\n super(matrix, 1, matrix.columns);\n this.row = row;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.row, columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.row, columnIndex);\n }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n constructor(matrix, rowIndices) {\n checkRowIndices(matrix, rowIndices);\n super(matrix, rowIndices.length, matrix.columns);\n this.rowIndices = rowIndices;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n }\n}\n\nclass MatrixSelectionView extends BaseView {\n constructor(matrix, rowIndices, columnIndices) {\n checkRowIndices(matrix, rowIndices);\n checkColumnIndices(matrix, columnIndices);\n super(matrix, rowIndices.length, columnIndices.length);\n this.rowIndices = rowIndices;\n this.columnIndices = columnIndices;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(\n this.rowIndices[rowIndex],\n this.columnIndices[columnIndex],\n value,\n );\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(\n this.rowIndices[rowIndex],\n this.columnIndices[columnIndex],\n );\n }\n}\n\nclass MatrixSubView extends BaseView {\n constructor(matrix, startRow, endRow, startColumn, endColumn) {\n checkRange(matrix, startRow, endRow, startColumn, endColumn);\n super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n this.startRow = startRow;\n this.startColumn = startColumn;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(\n this.startRow + rowIndex,\n this.startColumn + columnIndex,\n value,\n );\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(\n this.startRow + rowIndex,\n this.startColumn + columnIndex,\n );\n }\n}\n\nclass MatrixTransposeView extends BaseView {\n constructor(matrix) {\n super(matrix, matrix.columns, matrix.rows);\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(columnIndex, rowIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(columnIndex, rowIndex);\n }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n constructor(data, options = {}) {\n const { rows = 1 } = options;\n\n if (data.length % rows !== 0) {\n throw new Error('the data length is not divisible by the number of rows');\n }\n super();\n this.rows = rows;\n this.columns = data.length / rows;\n this.data = data;\n }\n\n set(rowIndex, columnIndex, value) {\n let index = this._calculateIndex(rowIndex, columnIndex);\n this.data[index] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n let index = this._calculateIndex(rowIndex, columnIndex);\n return this.data[index];\n }\n\n _calculateIndex(row, column) {\n return row * this.columns + column;\n }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n constructor(data) {\n super();\n this.data = data;\n this.rows = data.length;\n this.columns = data[0].length;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n}\n\nfunction wrap(array, options) {\n if (isAnyArray.isAnyArray(array)) {\n if (array[0] && isAnyArray.isAnyArray(array[0])) {\n return new WrapperMatrix2D(array);\n } else {\n return new WrapperMatrix1D(array, options);\n }\n } else {\n throw new Error('the argument is not an array');\n }\n}\n\nclass LuDecomposition {\n constructor(matrix) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n let lu = matrix.clone();\n let rows = lu.rows;\n let columns = lu.columns;\n let pivotVector = new Float64Array(rows);\n let pivotSign = 1;\n let i, j, k, p, s, t, v;\n let LUcolj, kmax;\n\n for (i = 0; i < rows; i++) {\n pivotVector[i] = i;\n }\n\n LUcolj = new Float64Array(rows);\n\n for (j = 0; j < columns; j++) {\n for (i = 0; i < rows; i++) {\n LUcolj[i] = lu.get(i, j);\n }\n\n for (i = 0; i < rows; i++) {\n kmax = Math.min(i, j);\n s = 0;\n for (k = 0; k < kmax; k++) {\n s += lu.get(i, k) * LUcolj[k];\n }\n LUcolj[i] -= s;\n lu.set(i, j, LUcolj[i]);\n }\n\n p = j;\n for (i = j + 1; i < rows; i++) {\n if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n p = i;\n }\n }\n\n if (p !== j) {\n for (k = 0; k < columns; k++) {\n t = lu.get(p, k);\n lu.set(p, k, lu.get(j, k));\n lu.set(j, k, t);\n }\n\n v = pivotVector[p];\n pivotVector[p] = pivotVector[j];\n pivotVector[j] = v;\n\n pivotSign = -pivotSign;\n }\n\n if (j < rows && lu.get(j, j) !== 0) {\n for (i = j + 1; i < rows; i++) {\n lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n }\n }\n }\n\n this.LU = lu;\n this.pivotVector = pivotVector;\n this.pivotSign = pivotSign;\n }\n\n isSingular() {\n let data = this.LU;\n let col = data.columns;\n for (let j = 0; j < col; j++) {\n if (data.get(j, j) === 0) {\n return true;\n }\n }\n return false;\n }\n\n solve(value) {\n value = Matrix.checkMatrix(value);\n\n let lu = this.LU;\n let rows = lu.rows;\n\n if (rows !== value.rows) {\n throw new Error('Invalid matrix dimensions');\n }\n if (this.isSingular()) {\n throw new Error('LU matrix is singular');\n }\n\n let count = value.columns;\n let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n let columns = lu.columns;\n let i, j, k;\n\n for (k = 0; k < columns; k++) {\n for (i = k + 1; i < columns; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n }\n }\n }\n for (k = columns - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n X.set(k, j, X.get(k, j) / lu.get(k, k));\n }\n for (i = 0; i < k; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n }\n }\n }\n return X;\n }\n\n get determinant() {\n let data = this.LU;\n if (!data.isSquare()) {\n throw new Error('Matrix must be square');\n }\n let determinant = this.pivotSign;\n let col = data.columns;\n for (let j = 0; j < col; j++) {\n determinant *= data.get(j, j);\n }\n return determinant;\n }\n\n get lowerTriangularMatrix() {\n let data = this.LU;\n let rows = data.rows;\n let columns = data.columns;\n let X = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n if (i > j) {\n X.set(i, j, data.get(i, j));\n } else if (i === j) {\n X.set(i, j, 1);\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get upperTriangularMatrix() {\n let data = this.LU;\n let rows = data.rows;\n let columns = data.columns;\n let X = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n if (i <= j) {\n X.set(i, j, data.get(i, j));\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get pivotPermutationVector() {\n return Array.from(this.pivotVector);\n }\n}\n\nfunction hypotenuse(a, b) {\n let r = 0;\n if (Math.abs(a) > Math.abs(b)) {\n r = b / a;\n return Math.abs(a) * Math.sqrt(1 + r * r);\n }\n if (b !== 0) {\n r = a / b;\n return Math.abs(b) * Math.sqrt(1 + r * r);\n }\n return 0;\n}\n\nclass QrDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let qr = value.clone();\n let m = value.rows;\n let n = value.columns;\n let rdiag = new Float64Array(n);\n let i, j, k, s;\n\n for (k = 0; k < n; k++) {\n let nrm = 0;\n for (i = k; i < m; i++) {\n nrm = hypotenuse(nrm, qr.get(i, k));\n }\n if (nrm !== 0) {\n if (qr.get(k, k) < 0) {\n nrm = -nrm;\n }\n for (i = k; i < m; i++) {\n qr.set(i, k, qr.get(i, k) / nrm);\n }\n qr.set(k, k, qr.get(k, k) + 1);\n for (j = k + 1; j < n; j++) {\n s = 0;\n for (i = k; i < m; i++) {\n s += qr.get(i, k) * qr.get(i, j);\n }\n s = -s / qr.get(k, k);\n for (i = k; i < m; i++) {\n qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n rdiag[k] = -nrm;\n }\n\n this.QR = qr;\n this.Rdiag = rdiag;\n }\n\n solve(value) {\n value = Matrix.checkMatrix(value);\n\n let qr = this.QR;\n let m = qr.rows;\n\n if (value.rows !== m) {\n throw new Error('Matrix row dimensions must agree');\n }\n if (!this.isFullRank()) {\n throw new Error('Matrix is rank deficient');\n }\n\n let count = value.columns;\n let X = value.clone();\n let n = qr.columns;\n let i, j, k, s;\n\n for (k = 0; k < n; k++) {\n for (j = 0; j < count; j++) {\n s = 0;\n for (i = k; i < m; i++) {\n s += qr.get(i, k) * X.get(i, j);\n }\n s = -s / qr.get(k, k);\n for (i = k; i < m; i++) {\n X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n for (k = n - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n }\n for (i = 0; i < k; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n }\n }\n }\n\n return X.subMatrix(0, n - 1, 0, count - 1);\n }\n\n isFullRank() {\n let columns = this.QR.columns;\n for (let i = 0; i < columns; i++) {\n if (this.Rdiag[i] === 0) {\n return false;\n }\n }\n return true;\n }\n\n get upperTriangularMatrix() {\n let qr = this.QR;\n let n = qr.columns;\n let X = new Matrix(n, n);\n let i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n if (i < j) {\n X.set(i, j, qr.get(i, j));\n } else if (i === j) {\n X.set(i, j, this.Rdiag[i]);\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get orthogonalMatrix() {\n let qr = this.QR;\n let rows = qr.rows;\n let columns = qr.columns;\n let X = new Matrix(rows, columns);\n let i, j, k, s;\n\n for (k = columns - 1; k >= 0; k--) {\n for (i = 0; i < rows; i++) {\n X.set(i, k, 0);\n }\n X.set(k, k, 1);\n for (j = k; j < columns; j++) {\n if (qr.get(k, k) !== 0) {\n s = 0;\n for (i = k; i < rows; i++) {\n s += qr.get(i, k) * X.get(i, j);\n }\n\n s = -s / qr.get(k, k);\n\n for (i = k; i < rows; i++) {\n X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n }\n return X;\n }\n}\n\nclass SingularValueDecomposition {\n constructor(value, options = {}) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n if (value.isEmpty()) {\n throw new Error('Matrix must be non-empty');\n }\n\n let m = value.rows;\n let n = value.columns;\n\n const {\n computeLeftSingularVectors = true,\n computeRightSingularVectors = true,\n autoTranspose = false,\n } = options;\n\n let wantu = Boolean(computeLeftSingularVectors);\n let wantv = Boolean(computeRightSingularVectors);\n\n let swapped = false;\n let a;\n if (m < n) {\n if (!autoTranspose) {\n a = value.clone();\n // eslint-disable-next-line no-console\n console.warn(\n 'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n );\n } else {\n a = value.transpose();\n m = a.rows;\n n = a.columns;\n swapped = true;\n let aux = wantu;\n wantu = wantv;\n wantv = aux;\n }\n } else {\n a = value.clone();\n }\n\n let nu = Math.min(m, n);\n let ni = Math.min(m + 1, n);\n let s = new Float64Array(ni);\n let U = new Matrix(m, nu);\n let V = new Matrix(n, n);\n\n let e = new Float64Array(n);\n let work = new Float64Array(m);\n\n let si = new Float64Array(ni);\n for (let i = 0; i < ni; i++) si[i] = i;\n\n let nct = Math.min(m - 1, n);\n let nrt = Math.max(0, Math.min(n - 2, m));\n let mrc = Math.max(nct, nrt);\n\n for (let k = 0; k < mrc; k++) {\n if (k < nct) {\n s[k] = 0;\n for (let i = k; i < m; i++) {\n s[k] = hypotenuse(s[k], a.get(i, k));\n }\n if (s[k] !== 0) {\n if (a.get(k, k) < 0) {\n s[k] = -s[k];\n }\n for (let i = k; i < m; i++) {\n a.set(i, k, a.get(i, k) / s[k]);\n }\n a.set(k, k, a.get(k, k) + 1);\n }\n s[k] = -s[k];\n }\n\n for (let j = k + 1; j < n; j++) {\n if (k < nct && s[k] !== 0) {\n let t = 0;\n for (let i = k; i < m; i++) {\n t += a.get(i, k) * a.get(i, j);\n }\n t = -t / a.get(k, k);\n for (let i = k; i < m; i++) {\n a.set(i, j, a.get(i, j) + t * a.get(i, k));\n }\n }\n e[j] = a.get(k, j);\n }\n\n if (wantu && k < nct) {\n for (let i = k; i < m; i++) {\n U.set(i, k, a.get(i, k));\n }\n }\n\n if (k < nrt) {\n e[k] = 0;\n for (let i = k + 1; i < n; i++) {\n e[k] = hypotenuse(e[k], e[i]);\n }\n if (e[k] !== 0) {\n if (e[k + 1] < 0) {\n e[k] = 0 - e[k];\n }\n for (let i = k + 1; i < n; i++) {\n e[i] /= e[k];\n }\n e[k + 1] += 1;\n }\n e[k] = -e[k];\n if (k + 1 < m && e[k] !== 0) {\n for (let i = k + 1; i < m; i++) {\n work[i] = 0;\n }\n for (let i = k + 1; i < m; i++) {\n for (let j = k + 1; j < n; j++) {\n work[i] += e[j] * a.get(i, j);\n }\n }\n for (let j = k + 1; j < n; j++) {\n let t = -e[j] / e[k + 1];\n for (let i = k + 1; i < m; i++) {\n a.set(i, j, a.get(i, j) + t * work[i]);\n }\n }\n }\n if (wantv) {\n for (let i = k + 1; i < n; i++) {\n V.set(i, k, e[i]);\n }\n }\n }\n }\n\n let p = Math.min(n, m + 1);\n if (nct < n) {\n s[nct] = a.get(nct, nct);\n }\n if (m < p) {\n s[p - 1] = 0;\n }\n if (nrt + 1 < p) {\n e[nrt] = a.get(nrt, p - 1);\n }\n e[p - 1] = 0;\n\n if (wantu) {\n for (let j = nct; j < nu; j++) {\n for (let i = 0; i < m; i++) {\n U.set(i, j, 0);\n }\n U.set(j, j, 1);\n }\n for (let k = nct - 1; k >= 0; k--) {\n if (s[k] !== 0) {\n for (let j = k + 1; j < nu; j++) {\n let t = 0;\n for (let i = k; i < m; i++) {\n t += U.get(i, k) * U.get(i, j);\n }\n t = -t / U.get(k, k);\n for (let i = k; i < m; i++) {\n U.set(i, j, U.get(i, j) + t * U.get(i, k));\n }\n }\n for (let i = k; i < m; i++) {\n U.set(i, k, -U.get(i, k));\n }\n U.set(k, k, 1 + U.get(k, k));\n for (let i = 0; i < k - 1; i++) {\n U.set(i, k, 0);\n }\n } else {\n for (let i = 0; i < m; i++) {\n U.set(i, k, 0);\n }\n U.set(k, k, 1);\n }\n }\n }\n\n if (wantv) {\n for (let k = n - 1; k >= 0; k--) {\n if (k < nrt && e[k] !== 0) {\n for (let j = k + 1; j < n; j++) {\n let t = 0;\n for (let i = k + 1; i < n; i++) {\n t += V.get(i, k) * V.get(i, j);\n }\n t = -t / V.get(k + 1, k);\n for (let i = k + 1; i < n; i++) {\n V.set(i, j, V.get(i, j) + t * V.get(i, k));\n }\n }\n }\n for (let i = 0; i < n; i++) {\n V.set(i, k, 0);\n }\n V.set(k, k, 1);\n }\n }\n\n let pp = p - 1;\n let eps = Number.EPSILON;\n while (p > 0) {\n let k, kase;\n for (k = p - 2; k >= -1; k--) {\n if (k === -1) {\n break;\n }\n const alpha =\n Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n e[k] = 0;\n break;\n }\n }\n if (k === p - 2) {\n kase = 4;\n } else {\n let ks;\n for (ks = p - 1; ks >= k; ks--) {\n if (ks === k) {\n break;\n }\n let t =\n (ks !== p ? Math.abs(e[ks]) : 0) +\n (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n if (Math.abs(s[ks]) <= eps * t) {\n s[ks] = 0;\n break;\n }\n }\n if (ks === k) {\n kase = 3;\n } else if (ks === p - 1) {\n kase = 1;\n } else {\n kase = 2;\n k = ks;\n }\n }\n\n k++;\n\n switch (kase) {\n case 1: {\n let f = e[p - 2];\n e[p - 2] = 0;\n for (let j = p - 2; j >= k; j--) {\n let t = hypotenuse(s[j], f);\n let cs = s[j] / t;\n let sn = f / t;\n s[j] = t;\n if (j !== k) {\n f = -sn * e[j - 1];\n e[j - 1] = cs * e[j - 1];\n }\n if (wantv) {\n for (let i = 0; i < n; i++) {\n t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n V.set(i, j, t);\n }\n }\n }\n break;\n }\n case 2: {\n let f = e[k - 1];\n e[k - 1] = 0;\n for (let j = k; j < p; j++) {\n let t = hypotenuse(s[j], f);\n let cs = s[j] / t;\n let sn = f / t;\n s[j] = t;\n f = -sn * e[j];\n e[j] = cs * e[j];\n if (wantu) {\n for (let i = 0; i < m; i++) {\n t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n U.set(i, j, t);\n }\n }\n }\n break;\n }\n case 3: {\n const scale = Math.max(\n Math.abs(s[p - 1]),\n Math.abs(s[p - 2]),\n Math.abs(e[p - 2]),\n Math.abs(s[k]),\n Math.abs(e[k]),\n );\n const sp = s[p - 1] / scale;\n const spm1 = s[p - 2] / scale;\n const epm1 = e[p - 2] / scale;\n const sk = s[k] / scale;\n const ek = e[k] / scale;\n const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n const c = sp * epm1 * (sp * epm1);\n let shift = 0;\n if (b !== 0 || c !== 0) {\n if (b < 0) {\n shift = 0 - Math.sqrt(b * b + c);\n } else {\n shift = Math.sqrt(b * b + c);\n }\n shift = c / (b + shift);\n }\n let f = (sk + sp) * (sk - sp) + shift;\n let g = sk * ek;\n for (let j = k; j < p - 1; j++) {\n let t = hypotenuse(f, g);\n if (t === 0) t = Number.MIN_VALUE;\n let cs = f / t;\n let sn = g / t;\n if (j !== k) {\n e[j - 1] = t;\n }\n f = cs * s[j] + sn * e[j];\n e[j] = cs * e[j] - sn * s[j];\n g = sn * s[j + 1];\n s[j + 1] = cs * s[j + 1];\n if (wantv) {\n for (let i = 0; i < n; i++) {\n t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n V.set(i, j, t);\n }\n }\n t = hypotenuse(f, g);\n if (t === 0) t = Number.MIN_VALUE;\n cs = f / t;\n sn = g / t;\n s[j] = t;\n f = cs * e[j] + sn * s[j + 1];\n s[j + 1] = -sn * e[j] + cs * s[j + 1];\n g = sn * e[j + 1];\n e[j + 1] = cs * e[j + 1];\n if (wantu && j < m - 1) {\n for (let i = 0; i < m; i++) {\n t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n U.set(i, j, t);\n }\n }\n }\n e[p - 2] = f;\n break;\n }\n case 4: {\n if (s[k] <= 0) {\n s[k] = s[k] < 0 ? -s[k] : 0;\n if (wantv) {\n for (let i = 0; i <= pp; i++) {\n V.set(i, k, -V.get(i, k));\n }\n }\n }\n while (k < pp) {\n if (s[k] >= s[k + 1]) {\n break;\n }\n let t = s[k];\n s[k] = s[k + 1];\n s[k + 1] = t;\n if (wantv && k < n - 1) {\n for (let i = 0; i < n; i++) {\n t = V.get(i, k + 1);\n V.set(i, k + 1, V.get(i, k));\n V.set(i, k, t);\n }\n }\n if (wantu && k < m - 1) {\n for (let i = 0; i < m; i++) {\n t = U.get(i, k + 1);\n U.set(i, k + 1, U.get(i, k));\n U.set(i, k, t);\n }\n }\n k++;\n }\n p--;\n break;\n }\n // no default\n }\n }\n\n if (swapped) {\n let tmp = V;\n V = U;\n U = tmp;\n }\n\n this.m = m;\n this.n = n;\n this.s = s;\n this.U = U;\n this.V = V;\n }\n\n solve(value) {\n let Y = value;\n let e = this.threshold;\n let scols = this.s.length;\n let Ls = Matrix.zeros(scols, scols);\n\n for (let i = 0; i < scols; i++) {\n if (Math.abs(this.s[i]) <= e) {\n Ls.set(i, i, 0);\n } else {\n Ls.set(i, i, 1 / this.s[i]);\n }\n }\n\n let U = this.U;\n let V = this.rightSingularVectors;\n\n let VL = V.mmul(Ls);\n let vrows = V.rows;\n let urows = U.rows;\n let VLU = Matrix.zeros(vrows, urows);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < urows; j++) {\n let sum = 0;\n for (let k = 0; k < scols; k++) {\n sum += VL.get(i, k) * U.get(j, k);\n }\n VLU.set(i, j, sum);\n }\n }\n\n return VLU.mmul(Y);\n }\n\n solveForDiagonal(value) {\n return this.solve(Matrix.diag(value));\n }\n\n inverse() {\n let V = this.V;\n let e = this.threshold;\n let vrows = V.rows;\n let vcols = V.columns;\n let X = new Matrix(vrows, this.s.length);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < vcols; j++) {\n if (Math.abs(this.s[j]) > e) {\n X.set(i, j, V.get(i, j) / this.s[j]);\n }\n }\n }\n\n let U = this.U;\n\n let urows = U.rows;\n let ucols = U.columns;\n let Y = new Matrix(vrows, urows);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < urows; j++) {\n let sum = 0;\n for (let k = 0; k < ucols; k++) {\n sum += X.get(i, k) * U.get(j, k);\n }\n Y.set(i, j, sum);\n }\n }\n\n return Y;\n }\n\n get condition() {\n return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n }\n\n get norm2() {\n return this.s[0];\n }\n\n get rank() {\n let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n let r = 0;\n let s = this.s;\n for (let i = 0, ii = s.length; i < ii; i++) {\n if (s[i] > tol) {\n r++;\n }\n }\n return r;\n }\n\n get diagonal() {\n return Array.from(this.s);\n }\n\n get threshold() {\n return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n }\n\n get leftSingularVectors() {\n return this.U;\n }\n\n get rightSingularVectors() {\n return this.V;\n }\n\n get diagonalMatrix() {\n return Matrix.diag(this.s);\n }\n}\n\nfunction inverse(matrix, useSVD = false) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (useSVD) {\n return new SingularValueDecomposition(matrix).inverse();\n } else {\n return solve(matrix, Matrix.eye(matrix.rows));\n }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n if (useSVD) {\n return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n } else {\n return leftHandSide.isSquare()\n ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n : new QrDecomposition(leftHandSide).solve(rightHandSide);\n }\n}\n\nfunction determinant(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isSquare()) {\n if (matrix.columns === 0) {\n return 1;\n }\n\n let a, b, c, d;\n if (matrix.columns === 2) {\n // 2 x 2 matrix\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(1, 0);\n d = matrix.get(1, 1);\n\n return a * d - b * c;\n } else if (matrix.columns === 3) {\n // 3 x 3 matrix\n let subMatrix0, subMatrix1, subMatrix2;\n subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(0, 2);\n\n return (\n a * determinant(subMatrix0) -\n b * determinant(subMatrix1) +\n c * determinant(subMatrix2)\n );\n } else {\n // general purpose determinant using the LU decomposition\n return new LuDecomposition(matrix).determinant;\n }\n } else {\n throw Error('determinant can only be calculated for a square matrix');\n }\n}\n\nfunction xrange(n, exception) {\n let range = [];\n for (let i = 0; i < n; i++) {\n if (i !== exception) {\n range.push(i);\n }\n }\n return range;\n}\n\nfunction dependenciesOneRow(\n error,\n matrix,\n index,\n thresholdValue = 10e-10,\n thresholdError = 10e-10,\n) {\n if (error > thresholdError) {\n return new Array(matrix.rows + 1).fill(0);\n } else {\n let returnArray = matrix.addRow(index, [0]);\n for (let i = 0; i < returnArray.rows; i++) {\n if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n returnArray.set(i, 0, 0);\n }\n }\n return returnArray.to1DArray();\n }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n matrix = Matrix.checkMatrix(matrix);\n\n let n = matrix.rows;\n let results = new Matrix(n, n);\n\n for (let i = 0; i < n; i++) {\n let b = Matrix.columnVector(matrix.getRow(i));\n let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n let svd = new SingularValueDecomposition(Abis);\n let x = svd.solve(b);\n let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n results.setRow(\n i,\n dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n );\n }\n return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isEmpty()) {\n // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n // (0xn)*(nx0)*(0xn) = 0xn\n // (nx0)*(0xn)*(nx0) = nx0\n return matrix.transpose();\n }\n let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n let U = svdSolution.leftSingularVectors;\n let V = svdSolution.rightSingularVectors;\n let s = svdSolution.diagonal;\n\n for (let i = 0; i < s.length; i++) {\n if (Math.abs(s[i]) > threshold) {\n s[i] = 1.0 / s[i];\n } else {\n s[i] = 0.0;\n }\n }\n\n return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = new Matrix(xMatrix);\n let yIsSame = false;\n if (\n typeof yMatrix === 'object' &&\n !Matrix.isMatrix(yMatrix) &&\n !isAnyArray.isAnyArray(yMatrix)\n ) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = new Matrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n const { center = true } = options;\n if (center) {\n xMatrix = xMatrix.center('column');\n if (!yIsSame) {\n yMatrix = yMatrix.center('column');\n }\n }\n const cov = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < cov.rows; i++) {\n for (let j = 0; j < cov.columns; j++) {\n cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n }\n }\n return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = new Matrix(xMatrix);\n let yIsSame = false;\n if (\n typeof yMatrix === 'object' &&\n !Matrix.isMatrix(yMatrix) &&\n !isAnyArray.isAnyArray(yMatrix)\n ) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = new Matrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n\n const { center = true, scale = true } = options;\n if (center) {\n xMatrix.center('column');\n if (!yIsSame) {\n yMatrix.center('column');\n }\n }\n if (scale) {\n xMatrix.scale('column');\n if (!yIsSame) {\n yMatrix.scale('column');\n }\n }\n\n const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n const sdy = yIsSame\n ? sdx\n : yMatrix.standardDeviation('column', { unbiased: true });\n\n const corr = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < corr.rows; i++) {\n for (let j = 0; j < corr.columns; j++) {\n corr.set(\n i,\n j,\n corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n );\n }\n }\n return corr;\n}\n\nclass EigenvalueDecomposition {\n constructor(matrix, options = {}) {\n const { assumeSymmetric = false } = options;\n\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (!matrix.isSquare()) {\n throw new Error('Matrix is not a square matrix');\n }\n\n if (matrix.isEmpty()) {\n throw new Error('Matrix must be non-empty');\n }\n\n let n = matrix.columns;\n let V = new Matrix(n, n);\n let d = new Float64Array(n);\n let e = new Float64Array(n);\n let value = matrix;\n let i, j;\n\n let isSymmetric = false;\n if (assumeSymmetric) {\n isSymmetric = true;\n } else {\n isSymmetric = matrix.isSymmetric();\n }\n\n if (isSymmetric) {\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, value.get(i, j));\n }\n }\n tred2(n, e, d, V);\n tql2(n, e, d, V);\n } else {\n let H = new Matrix(n, n);\n let ort = new Float64Array(n);\n for (j = 0; j < n; j++) {\n for (i = 0; i < n; i++) {\n H.set(i, j, value.get(i, j));\n }\n }\n orthes(n, H, ort, V);\n hqr2(n, e, d, V, H);\n }\n\n this.n = n;\n this.e = e;\n this.d = d;\n this.V = V;\n }\n\n get realEigenvalues() {\n return Array.from(this.d);\n }\n\n get imaginaryEigenvalues() {\n return Array.from(this.e);\n }\n\n get eigenvectorMatrix() {\n return this.V;\n }\n\n get diagonalMatrix() {\n let n = this.n;\n let e = this.e;\n let d = this.d;\n let X = new Matrix(n, n);\n let i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n X.set(i, j, 0);\n }\n X.set(i, i, d[i]);\n if (e[i] > 0) {\n X.set(i, i + 1, e[i]);\n } else if (e[i] < 0) {\n X.set(i, i - 1, e[i]);\n }\n }\n return X;\n }\n}\n\nfunction tred2(n, e, d, V) {\n let f, g, h, i, j, k, hh, scale;\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n }\n\n for (i = n - 1; i > 0; i--) {\n scale = 0;\n h = 0;\n for (k = 0; k < i; k++) {\n scale = scale + Math.abs(d[k]);\n }\n\n if (scale === 0) {\n e[i] = d[i - 1];\n for (j = 0; j < i; j++) {\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n V.set(j, i, 0);\n }\n } else {\n for (k = 0; k < i; k++) {\n d[k] /= scale;\n h += d[k] * d[k];\n }\n\n f = d[i - 1];\n g = Math.sqrt(h);\n if (f > 0) {\n g = -g;\n }\n\n e[i] = scale * g;\n h = h - f * g;\n d[i - 1] = f - g;\n for (j = 0; j < i; j++) {\n e[j] = 0;\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n V.set(j, i, f);\n g = e[j] + V.get(j, j) * f;\n for (k = j + 1; k <= i - 1; k++) {\n g += V.get(k, j) * d[k];\n e[k] += V.get(k, j) * f;\n }\n e[j] = g;\n }\n\n f = 0;\n for (j = 0; j < i; j++) {\n e[j] /= h;\n f += e[j] * d[j];\n }\n\n hh = f / (h + h);\n for (j = 0; j < i; j++) {\n e[j] -= hh * d[j];\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n g = e[j];\n for (k = j; k <= i - 1; k++) {\n V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n }\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n }\n }\n d[i] = h;\n }\n\n for (i = 0; i < n - 1; i++) {\n V.set(n - 1, i, V.get(i, i));\n V.set(i, i, 1);\n h = d[i + 1];\n if (h !== 0) {\n for (k = 0; k <= i; k++) {\n d[k] = V.get(k, i + 1) / h;\n }\n\n for (j = 0; j <= i; j++) {\n g = 0;\n for (k = 0; k <= i; k++) {\n g += V.get(k, i + 1) * V.get(k, j);\n }\n for (k = 0; k <= i; k++) {\n V.set(k, j, V.get(k, j) - g * d[k]);\n }\n }\n }\n\n for (k = 0; k <= i; k++) {\n V.set(k, i + 1, 0);\n }\n }\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n V.set(n - 1, j, 0);\n }\n\n V.set(n - 1, n - 1, 1);\n e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n for (i = 1; i < n; i++) {\n e[i - 1] = e[i];\n }\n\n e[n - 1] = 0;\n\n let f = 0;\n let tst1 = 0;\n let eps = Number.EPSILON;\n\n for (l = 0; l < n; l++) {\n tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n m = l;\n while (m < n) {\n if (Math.abs(e[m]) <= eps * tst1) {\n break;\n }\n m++;\n }\n\n if (m > l) {\n do {\n\n g = d[l];\n p = (d[l + 1] - g) / (2 * e[l]);\n r = hypotenuse(p, 1);\n if (p < 0) {\n r = -r;\n }\n\n d[l] = e[l] / (p + r);\n d[l + 1] = e[l] * (p + r);\n dl1 = d[l + 1];\n h = g - d[l];\n for (i = l + 2; i < n; i++) {\n d[i] -= h;\n }\n\n f = f + h;\n\n p = d[m];\n c = 1;\n c2 = c;\n c3 = c;\n el1 = e[l + 1];\n s = 0;\n s2 = 0;\n for (i = m - 1; i >= l; i--) {\n c3 = c2;\n c2 = c;\n s2 = s;\n g = c * e[i];\n h = c * p;\n r = hypotenuse(p, e[i]);\n e[i + 1] = s * r;\n s = e[i] / r;\n c = p / r;\n p = c * d[i] - s * g;\n d[i + 1] = h + s * (c * g + s * d[i]);\n\n for (k = 0; k < n; k++) {\n h = V.get(k, i + 1);\n V.set(k, i + 1, s * V.get(k, i) + c * h);\n V.set(k, i, c * V.get(k, i) - s * h);\n }\n }\n\n p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n e[l] = s * p;\n d[l] = c * p;\n } while (Math.abs(e[l]) > eps * tst1);\n }\n d[l] = d[l] + f;\n e[l] = 0;\n }\n\n for (i = 0; i < n - 1; i++) {\n k = i;\n p = d[i];\n for (j = i + 1; j < n; j++) {\n if (d[j] < p) {\n k = j;\n p = d[j];\n }\n }\n\n if (k !== i) {\n d[k] = d[i];\n d[i] = p;\n for (j = 0; j < n; j++) {\n p = V.get(j, i);\n V.set(j, i, V.get(j, k));\n V.set(j, k, p);\n }\n }\n }\n}\n\nfunction orthes(n, H, ort, V) {\n let low = 0;\n let high = n - 1;\n let f, g, h, i, j, m;\n let scale;\n\n for (m = low + 1; m <= high - 1; m++) {\n scale = 0;\n for (i = m; i <= high; i++) {\n scale = scale + Math.abs(H.get(i, m - 1));\n }\n\n if (scale !== 0) {\n h = 0;\n for (i = high; i >= m; i--) {\n ort[i] = H.get(i, m - 1) / scale;\n h += ort[i] * ort[i];\n }\n\n g = Math.sqrt(h);\n if (ort[m] > 0) {\n g = -g;\n }\n\n h = h - ort[m] * g;\n ort[m] = ort[m] - g;\n\n for (j = m; j < n; j++) {\n f = 0;\n for (i = high; i >= m; i--) {\n f += ort[i] * H.get(i, j);\n }\n\n f = f / h;\n for (i = m; i <= high; i++) {\n H.set(i, j, H.get(i, j) - f * ort[i]);\n }\n }\n\n for (i = 0; i <= high; i++) {\n f = 0;\n for (j = high; j >= m; j--) {\n f += ort[j] * H.get(i, j);\n }\n\n f = f / h;\n for (j = m; j <= high; j++) {\n H.set(i, j, H.get(i, j) - f * ort[j]);\n }\n }\n\n ort[m] = scale * ort[m];\n H.set(m, m - 1, scale * g);\n }\n }\n\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, i === j ? 1 : 0);\n }\n }\n\n for (m = high - 1; m >= low + 1; m--) {\n if (H.get(m, m - 1) !== 0) {\n for (i = m + 1; i <= high; i++) {\n ort[i] = H.get(i, m - 1);\n }\n\n for (j = m; j <= high; j++) {\n g = 0;\n for (i = m; i <= high; i++) {\n g += ort[i] * V.get(i, j);\n }\n\n g = g / ort[m] / H.get(m, m - 1);\n for (i = m; i <= high; i++) {\n V.set(i, j, V.get(i, j) + g * ort[i]);\n }\n }\n }\n }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n let n = nn - 1;\n let low = 0;\n let high = nn - 1;\n let eps = Number.EPSILON;\n let exshift = 0;\n let norm = 0;\n let p = 0;\n let q = 0;\n let r = 0;\n let s = 0;\n let z = 0;\n let iter = 0;\n let i, j, k, l, m, t, w, x, y;\n let ra, sa, vr, vi;\n let notlast, cdivres;\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n d[i] = H.get(i, i);\n e[i] = 0;\n }\n\n for (j = Math.max(i - 1, 0); j < nn; j++) {\n norm = norm + Math.abs(H.get(i, j));\n }\n }\n\n while (n >= low) {\n l = n;\n while (l > low) {\n s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n if (s === 0) {\n s = norm;\n }\n if (Math.abs(H.get(l, l - 1)) < eps * s) {\n break;\n }\n l--;\n }\n\n if (l === n) {\n H.set(n, n, H.get(n, n) + exshift);\n d[n] = H.get(n, n);\n e[n] = 0;\n n--;\n iter = 0;\n } else if (l === n - 1) {\n w = H.get(n, n - 1) * H.get(n - 1, n);\n p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n q = p * p + w;\n z = Math.sqrt(Math.abs(q));\n H.set(n, n, H.get(n, n) + exshift);\n H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n x = H.get(n, n);\n\n if (q >= 0) {\n z = p >= 0 ? p + z : p - z;\n d[n - 1] = x + z;\n d[n] = d[n - 1];\n if (z !== 0) {\n d[n] = x - w / z;\n }\n e[n - 1] = 0;\n e[n] = 0;\n x = H.get(n, n - 1);\n s = Math.abs(x) + Math.abs(z);\n p = x / s;\n q = z / s;\n r = Math.sqrt(p * p + q * q);\n p = p / r;\n q = q / r;\n\n for (j = n - 1; j < nn; j++) {\n z = H.get(n - 1, j);\n H.set(n - 1, j, q * z + p * H.get(n, j));\n H.set(n, j, q * H.get(n, j) - p * z);\n }\n\n for (i = 0; i <= n; i++) {\n z = H.get(i, n - 1);\n H.set(i, n - 1, q * z + p * H.get(i, n));\n H.set(i, n, q * H.get(i, n) - p * z);\n }\n\n for (i = low; i <= high; i++) {\n z = V.get(i, n - 1);\n V.set(i, n - 1, q * z + p * V.get(i, n));\n V.set(i, n, q * V.get(i, n) - p * z);\n }\n } else {\n d[n - 1] = x + p;\n d[n] = x + p;\n e[n - 1] = z;\n e[n] = -z;\n }\n\n n = n - 2;\n iter = 0;\n } else {\n x = H.get(n, n);\n y = 0;\n w = 0;\n if (l < n) {\n y = H.get(n - 1, n - 1);\n w = H.get(n, n - 1) * H.get(n - 1, n);\n }\n\n if (iter === 10) {\n exshift += x;\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - x);\n }\n s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n // eslint-disable-next-line no-multi-assign\n x = y = 0.75 * s;\n w = -0.4375 * s * s;\n }\n\n if (iter === 30) {\n s = (y - x) / 2;\n s = s * s + w;\n if (s > 0) {\n s = Math.sqrt(s);\n if (y < x) {\n s = -s;\n }\n s = x - w / ((y - x) / 2 + s);\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - s);\n }\n exshift += s;\n // eslint-disable-next-line no-multi-assign\n x = y = w = 0.964;\n }\n }\n\n iter = iter + 1;\n\n m = n - 2;\n while (m >= l) {\n z = H.get(m, m);\n r = x - z;\n s = y - z;\n p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n q = H.get(m + 1, m + 1) - z - r - s;\n r = H.get(m + 2, m + 1);\n s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n p = p / s;\n q = q / s;\n r = r / s;\n if (m === l) {\n break;\n }\n if (\n Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n eps *\n (Math.abs(p) *\n (Math.abs(H.get(m - 1, m - 1)) +\n Math.abs(z) +\n Math.abs(H.get(m + 1, m + 1))))\n ) {\n break;\n }\n m--;\n }\n\n for (i = m + 2; i <= n; i++) {\n H.set(i, i - 2, 0);\n if (i > m + 2) {\n H.set(i, i - 3, 0);\n }\n }\n\n for (k = m; k <= n - 1; k++) {\n notlast = k !== n - 1;\n if (k !== m) {\n p = H.get(k, k - 1);\n q = H.get(k + 1, k - 1);\n r = notlast ? H.get(k + 2, k - 1) : 0;\n x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n if (x !== 0) {\n p = p / x;\n q = q / x;\n r = r / x;\n }\n }\n\n if (x === 0) {\n break;\n }\n\n s = Math.sqrt(p * p + q * q + r * r);\n if (p < 0) {\n s = -s;\n }\n\n if (s !== 0) {\n if (k !== m) {\n H.set(k, k - 1, -s * x);\n } else if (l !== m) {\n H.set(k, k - 1, -H.get(k, k - 1));\n }\n\n p = p + s;\n x = p / s;\n y = q / s;\n z = r / s;\n q = q / p;\n r = r / p;\n\n for (j = k; j < nn; j++) {\n p = H.get(k, j) + q * H.get(k + 1, j);\n if (notlast) {\n p = p + r * H.get(k + 2, j);\n H.set(k + 2, j, H.get(k + 2, j) - p * z);\n }\n\n H.set(k, j, H.get(k, j) - p * x);\n H.set(k + 1, j, H.get(k + 1, j) - p * y);\n }\n\n for (i = 0; i <= Math.min(n, k + 3); i++) {\n p = x * H.get(i, k) + y * H.get(i, k + 1);\n if (notlast) {\n p = p + z * H.get(i, k + 2);\n H.set(i, k + 2, H.get(i, k + 2) - p * r);\n }\n\n H.set(i, k, H.get(i, k) - p);\n H.set(i, k + 1, H.get(i, k + 1) - p * q);\n }\n\n for (i = low; i <= high; i++) {\n p = x * V.get(i, k) + y * V.get(i, k + 1);\n if (notlast) {\n p = p + z * V.get(i, k + 2);\n V.set(i, k + 2, V.get(i, k + 2) - p * r);\n }\n\n V.set(i, k, V.get(i, k) - p);\n V.set(i, k + 1, V.get(i, k + 1) - p * q);\n }\n }\n }\n }\n }\n\n if (norm === 0) {\n return;\n }\n\n for (n = nn - 1; n >= 0; n--) {\n p = d[n];\n q = e[n];\n\n if (q === 0) {\n l = n;\n H.set(n, n, 1);\n for (i = n - 1; i >= 0; i--) {\n w = H.get(i, i) - p;\n r = 0;\n for (j = l; j <= n; j++) {\n r = r + H.get(i, j) * H.get(j, n);\n }\n\n if (e[i] < 0) {\n z = w;\n s = r;\n } else {\n l = i;\n if (e[i] === 0) {\n H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n t = (x * s - z * r) / q;\n H.set(i, n, t);\n H.set(\n i + 1,\n n,\n Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n );\n }\n\n t = Math.abs(H.get(i, n));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n } else if (q < 0) {\n l = n - 1;\n\n if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n H.set(n - 1, n - 1, q / H.get(n, n - 1));\n H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n } else {\n cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n H.set(n - 1, n - 1, cdivres[0]);\n H.set(n - 1, n, cdivres[1]);\n }\n\n H.set(n, n - 1, 0);\n H.set(n, n, 1);\n for (i = n - 2; i >= 0; i--) {\n ra = 0;\n sa = 0;\n for (j = l; j <= n; j++) {\n ra = ra + H.get(i, j) * H.get(j, n - 1);\n sa = sa + H.get(i, j) * H.get(j, n);\n }\n\n w = H.get(i, i) - p;\n\n if (e[i] < 0) {\n z = w;\n r = ra;\n s = sa;\n } else {\n l = i;\n if (e[i] === 0) {\n cdivres = cdiv(-ra, -sa, w, q);\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n vi = (d[i] - p) * 2 * q;\n if (vr === 0 && vi === 0) {\n vr =\n eps *\n norm *\n (Math.abs(w) +\n Math.abs(q) +\n Math.abs(x) +\n Math.abs(y) +\n Math.abs(z));\n }\n cdivres = cdiv(\n x * r - z * ra + q * sa,\n x * s - z * sa - q * ra,\n vr,\n vi,\n );\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n H.set(\n i + 1,\n n - 1,\n (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n );\n H.set(\n i + 1,\n n,\n (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n );\n } else {\n cdivres = cdiv(\n -r - y * H.get(i, n - 1),\n -s - y * H.get(i, n),\n z,\n q,\n );\n H.set(i + 1, n - 1, cdivres[0]);\n H.set(i + 1, n, cdivres[1]);\n }\n }\n\n t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n - 1, H.get(j, n - 1) / t);\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n }\n }\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n for (j = i; j < nn; j++) {\n V.set(i, j, H.get(i, j));\n }\n }\n }\n\n for (j = nn - 1; j >= low; j--) {\n for (i = low; i <= high; i++) {\n z = 0;\n for (k = low; k <= Math.min(j, high); k++) {\n z = z + V.get(i, k) * H.get(k, j);\n }\n V.set(i, j, z);\n }\n }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n let r, d;\n if (Math.abs(yr) > Math.abs(yi)) {\n r = yi / yr;\n d = yr + r * yi;\n return [(xr + r * xi) / d, (xi - r * xr) / d];\n } else {\n r = yr / yi;\n d = yi + r * yr;\n return [(r * xr + xi) / d, (r * xi - xr) / d];\n }\n}\n\nclass CholeskyDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n if (!value.isSymmetric()) {\n throw new Error('Matrix is not symmetric');\n }\n\n let a = value;\n let dimension = a.rows;\n let l = new Matrix(dimension, dimension);\n let positiveDefinite = true;\n let i, j, k;\n\n for (j = 0; j < dimension; j++) {\n let d = 0;\n for (k = 0; k < j; k++) {\n let s = 0;\n for (i = 0; i < k; i++) {\n s += l.get(k, i) * l.get(j, i);\n }\n s = (a.get(j, k) - s) / l.get(k, k);\n l.set(j, k, s);\n d = d + s * s;\n }\n\n d = a.get(j, j) - d;\n\n positiveDefinite &= d > 0;\n l.set(j, j, Math.sqrt(Math.max(d, 0)));\n for (k = j + 1; k < dimension; k++) {\n l.set(j, k, 0);\n }\n }\n\n this.L = l;\n this.positiveDefinite = Boolean(positiveDefinite);\n }\n\n isPositiveDefinite() {\n return this.positiveDefinite;\n }\n\n solve(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let l = this.L;\n let dimension = l.rows;\n\n if (value.rows !== dimension) {\n throw new Error('Matrix dimensions do not match');\n }\n if (this.isPositiveDefinite() === false) {\n throw new Error('Matrix is not positive definite');\n }\n\n let count = value.columns;\n let B = value.clone();\n let i, j, k;\n\n for (k = 0; k < dimension; k++) {\n for (j = 0; j < count; j++) {\n for (i = 0; i < k; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n for (k = dimension - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n for (i = k + 1; i < dimension; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n return B;\n }\n\n get lowerTriangularMatrix() {\n return this.L;\n }\n}\n\nclass nipals {\n constructor(X, options = {}) {\n X = WrapperMatrix2D.checkMatrix(X);\n let { Y } = options;\n const {\n scaleScores = false,\n maxIterations = 1000,\n terminationCriteria = 1e-10,\n } = options;\n\n let u;\n if (Y) {\n if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\n Y = Matrix.columnVector(Y);\n } else {\n Y = WrapperMatrix2D.checkMatrix(Y);\n }\n if (Y.rows !== X.rows) {\n throw new Error('Y should have the same number of rows as X');\n }\n u = Y.getColumnVector(0);\n } else {\n u = X.getColumnVector(0);\n }\n\n let diff = 1;\n let t, q, w, tOld;\n\n for (\n let counter = 0;\n counter < maxIterations && diff > terminationCriteria;\n counter++\n ) {\n w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n w = w.div(w.norm());\n\n t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n if (counter > 0) {\n diff = t.clone().sub(tOld).pow(2).sum();\n }\n tOld = t.clone();\n\n if (Y) {\n q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n q = q.div(q.norm());\n\n u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n } else {\n u = t;\n }\n }\n\n if (Y) {\n let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n p = p.div(p.norm());\n let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n let yResidual = Y.clone().sub(\n t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n );\n\n this.t = t;\n this.p = p.transpose();\n this.w = w.transpose();\n this.q = q;\n this.u = u;\n this.s = t.transpose().mmul(t);\n this.xResidual = xResidual;\n this.yResidual = yResidual;\n this.betas = residual;\n } else {\n this.w = w.transpose();\n this.s = t.transpose().mmul(t).sqrt();\n if (scaleScores) {\n this.t = t.clone().div(this.s.get(0, 0));\n } else {\n this.t = t;\n }\n this.xResidual = X.sub(t.mmul(w.transpose()));\n }\n }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n"],"names":["toString","Object","prototype","isAnyArray","value","tag","call","endsWith","includes","rescale","input","output","options","arguments","length","undefined","TypeError","Array","currentMin","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Number","isInteger","Error","minValue","i","min","currentMax","maxValue","max","RangeError","_options$min","autoMinMax","_options$max","factor","indent","repeat","indentData","inspectMatrixWithOptions","matrix","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","rows","columns","maxI","Math","maxJ","result","loop","j","get","line","push","formatNumber","join","inspectData","num","formatNumber2","padEnd","len","str","fix","toFixed","startsWith","exp","toExponential","slice","checkRowIndex","index","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","array","checkNonEmpty","isEmpty","AbstractMatrix","from1DArray","newRows","newColumns","newData","newMatrix","Matrix","row","column","set","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","round","eye","this","diag","data","l","matrix1","matrix2","checkMatrix","isMatrix","klass","size","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","setSubMatrix","neg","mulS","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","NEGATIVE_INFINITY","maxIndex","v","idx","POSITIVE_INFINITY","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","sqrt","dot","cumulativeSum","sum","vector2","vector1","mmul","other","Bcolj","Float64Array","s","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","y","x","r1","c1","r2","c2","embed","mat","cols","r","c","resultat","console","warn","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","add","sub","scaleRows","isFinite","scaleColumns","flipRows","middle","ceil","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","from","to","entries","sumByRow","sumByColumn","sumAll","product","productByRow","productByColumn","productAll","mean","variance","unbiased","sum1","sum2","varianceByRow","varianceByColumn","varianceAll","standardDeviation","center","centerByRow","centerByColumn","centerAll","scale","getScaleByRow","scaleByRow","getScaleByColumn","scaleByColumn","divider","getScaleAll","scaleAll","Symbol","iterator","col","values","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","super","arrayData","every","element","removeRow","splice","addRow","removeColumn","newRow","addColumn","addS","addM","subS","subM","subtract","subtractS","subtractM","mul","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","clz32","cos","cosh","expm1","floor","fround","log","log1p","log10","log2","sign","sin","sinh","tan","tanh","trunc","pow","arg0","powS","powM","installMathOperations","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","reverse","sideIndex","toCompact","compact","fromCompact","compactSize","JSON","stringify","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","BaseView","MatrixSelectionView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","LuDecomposition","t","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","e","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","isNaN","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","leftHandSide","rightHandSide","useSVD","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","EigenvalueDecomposition","assumeSymmetric","d","hh","tred2","dl1","c3","el1","s2","tst1","tql2","H","ort","high","low","orthes","nn","w","ra","sa","vr","vi","notlast","cdivres","exshift","z","iter","cdiv","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","B","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","diff","counter","xResidual","residual","yResidual","betas","exports","xMatrix","yMatrix","yIsSame","sdx","sdy","corr","cov","subMatrix0","subMatrix1","subMatrix2","results","Abis","svdSolution"],"sourceRoot":""}
1
+ {"version":3,"file":"907.js","mappings":"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","sources":["webpack://eda/./node_modules/ml-matrix/matrix.js","webpack://eda/./node_modules/is-any-array/lib-esm/index.js","webpack://eda/./node_modules/ml-array-rescale/lib-es6/index.js","webpack://eda/./node_modules/ml-array-min/lib-es6/index.js","webpack://eda/./node_modules/ml-array-max/lib-es6/index.js","webpack://eda/./node_modules/ml-matrix/matrix.mjs"],"sourcesContent":["'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n const {\n maxRows = 15,\n maxColumns = 10,\n maxNumSize = 8,\n padMinus = 'auto',\n } = options;\n return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n const { rows, columns } = matrix;\n const maxI = Math.min(rows, maxRows);\n const maxJ = Math.min(columns, maxColumns);\n const result = [];\n\n if (padMinus === 'auto') {\n padMinus = false;\n loop: for (let i = 0; i < maxI; i++) {\n for (let j = 0; j < maxJ; j++) {\n if (matrix.get(i, j) < 0) {\n padMinus = true;\n break loop;\n }\n }\n }\n }\n\n for (let i = 0; i < maxI; i++) {\n let line = [];\n for (let j = 0; j < maxJ; j++) {\n line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n }\n result.push(`${line.join(' ')}`);\n }\n if (maxJ !== columns) {\n result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n }\n if (maxI !== rows) {\n result.push(`... ${rows - maxRows} more rows`);\n }\n return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n return (\n num >= 0 && padMinus\n ? ` ${formatNumber2(num, maxNumSize - 1)}`\n : formatNumber2(num, maxNumSize)\n ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n // small.length numbers should be as is\n let str = num.toString();\n if (str.length <= len) return str;\n\n // (7)'0.00123' is better then (7)'1.23e-2'\n // (8)'0.000123' is worse then (7)'1.23e-3',\n let fix = num.toFixed(len);\n if (fix.length > len) {\n fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n }\n if (\n fix.length <= len &&\n !fix.startsWith('0.000') &&\n !fix.startsWith('-0.000')\n ) {\n return fix;\n }\n\n // well, if it's still too long the user should've used longer numbers\n let exp = num.toExponential(len);\n if (exp.length > len) {\n exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n }\n return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n AbstractMatrix.prototype.add = function add(value) {\n if (typeof value === 'number') return this.addS(value);\n return this.addM(value);\n };\n\n AbstractMatrix.prototype.addS = function addS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.addM = function addM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.add = function add(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.add(value);\n };\n\n AbstractMatrix.prototype.sub = function sub(value) {\n if (typeof value === 'number') return this.subS(value);\n return this.subM(value);\n };\n\n AbstractMatrix.prototype.subS = function subS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.subM = function subM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.sub = function sub(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sub(value);\n };\n AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n AbstractMatrix.subtract = AbstractMatrix.sub;\n\n AbstractMatrix.prototype.mul = function mul(value) {\n if (typeof value === 'number') return this.mulS(value);\n return this.mulM(value);\n };\n\n AbstractMatrix.prototype.mulS = function mulS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.mulM = function mulM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.mul = function mul(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.mul(value);\n };\n AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n AbstractMatrix.multiply = AbstractMatrix.mul;\n\n AbstractMatrix.prototype.div = function div(value) {\n if (typeof value === 'number') return this.divS(value);\n return this.divM(value);\n };\n\n AbstractMatrix.prototype.divS = function divS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.divM = function divM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.div = function div(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.div(value);\n };\n AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n AbstractMatrix.divide = AbstractMatrix.div;\n\n AbstractMatrix.prototype.mod = function mod(value) {\n if (typeof value === 'number') return this.modS(value);\n return this.modM(value);\n };\n\n AbstractMatrix.prototype.modS = function modS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) % value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.modM = function modM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) % matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.mod = function mod(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.mod(value);\n };\n AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n AbstractMatrix.modulus = AbstractMatrix.mod;\n\n AbstractMatrix.prototype.and = function and(value) {\n if (typeof value === 'number') return this.andS(value);\n return this.andM(value);\n };\n\n AbstractMatrix.prototype.andS = function andS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) & value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.andM = function andM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) & matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.and = function and(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.and(value);\n };\n\n AbstractMatrix.prototype.or = function or(value) {\n if (typeof value === 'number') return this.orS(value);\n return this.orM(value);\n };\n\n AbstractMatrix.prototype.orS = function orS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) | value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.orM = function orM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) | matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.or = function or(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.or(value);\n };\n\n AbstractMatrix.prototype.xor = function xor(value) {\n if (typeof value === 'number') return this.xorS(value);\n return this.xorM(value);\n };\n\n AbstractMatrix.prototype.xorS = function xorS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ^ value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.xorM = function xorM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.xor = function xor(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.xor(value);\n };\n\n AbstractMatrix.prototype.leftShift = function leftShift(value) {\n if (typeof value === 'number') return this.leftShiftS(value);\n return this.leftShiftM(value);\n };\n\n AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) << value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) << matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.leftShift = function leftShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.leftShift(value);\n };\n\n AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n return this.signPropagatingRightShiftM(value);\n };\n\n AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >> value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.signPropagatingRightShift(value);\n };\n\n AbstractMatrix.prototype.rightShift = function rightShift(value) {\n if (typeof value === 'number') return this.rightShiftS(value);\n return this.rightShiftM(value);\n };\n\n AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >>> value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.rightShift = function rightShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.rightShift(value);\n };\n AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n AbstractMatrix.prototype.not = function not() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, ~(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.not = function not(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.not();\n };\n\n AbstractMatrix.prototype.abs = function abs() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.abs(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.abs = function abs(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.abs();\n };\n\n AbstractMatrix.prototype.acos = function acos() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.acos(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.acos = function acos(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.acos();\n };\n\n AbstractMatrix.prototype.acosh = function acosh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.acosh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.acosh = function acosh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.acosh();\n };\n\n AbstractMatrix.prototype.asin = function asin() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.asin(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.asin = function asin(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.asin();\n };\n\n AbstractMatrix.prototype.asinh = function asinh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.asinh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.asinh = function asinh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.asinh();\n };\n\n AbstractMatrix.prototype.atan = function atan() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.atan(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.atan = function atan(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.atan();\n };\n\n AbstractMatrix.prototype.atanh = function atanh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.atanh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.atanh = function atanh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.atanh();\n };\n\n AbstractMatrix.prototype.cbrt = function cbrt() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cbrt(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cbrt = function cbrt(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cbrt();\n };\n\n AbstractMatrix.prototype.ceil = function ceil() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.ceil(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.ceil = function ceil(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.ceil();\n };\n\n AbstractMatrix.prototype.clz32 = function clz32() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.clz32(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.clz32 = function clz32(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.clz32();\n };\n\n AbstractMatrix.prototype.cos = function cos() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cos(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cos = function cos(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cos();\n };\n\n AbstractMatrix.prototype.cosh = function cosh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cosh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cosh = function cosh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cosh();\n };\n\n AbstractMatrix.prototype.exp = function exp() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.exp(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.exp = function exp(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.exp();\n };\n\n AbstractMatrix.prototype.expm1 = function expm1() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.expm1(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.expm1 = function expm1(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.expm1();\n };\n\n AbstractMatrix.prototype.floor = function floor() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.floor(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.floor = function floor(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.floor();\n };\n\n AbstractMatrix.prototype.fround = function fround() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.fround(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.fround = function fround(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.fround();\n };\n\n AbstractMatrix.prototype.log = function log() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log = function log(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log();\n };\n\n AbstractMatrix.prototype.log1p = function log1p() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log1p(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log1p = function log1p(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log1p();\n };\n\n AbstractMatrix.prototype.log10 = function log10() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log10(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log10 = function log10(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log10();\n };\n\n AbstractMatrix.prototype.log2 = function log2() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log2(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log2 = function log2(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log2();\n };\n\n AbstractMatrix.prototype.round = function round() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.round(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.round = function round(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.round();\n };\n\n AbstractMatrix.prototype.sign = function sign() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sign(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sign = function sign(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sign();\n };\n\n AbstractMatrix.prototype.sin = function sin() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sin(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sin = function sin(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sin();\n };\n\n AbstractMatrix.prototype.sinh = function sinh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sinh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sinh = function sinh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sinh();\n };\n\n AbstractMatrix.prototype.sqrt = function sqrt() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sqrt(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sqrt = function sqrt(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sqrt();\n };\n\n AbstractMatrix.prototype.tan = function tan() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.tan(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.tan = function tan(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.tan();\n };\n\n AbstractMatrix.prototype.tanh = function tanh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.tanh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.tanh = function tanh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.tanh();\n };\n\n AbstractMatrix.prototype.trunc = function trunc() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.trunc(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.trunc = function trunc(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.trunc();\n };\n\n AbstractMatrix.pow = function pow(matrix, arg0) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.pow(arg0);\n };\n\n AbstractMatrix.prototype.pow = function pow(value) {\n if (typeof value === 'number') return this.powS(value);\n return this.powM(value);\n };\n\n AbstractMatrix.prototype.powS = function powS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ** value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.powM = function powM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n }\n }\n return this;\n };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n let max = outer ? matrix.rows : matrix.rows - 1;\n if (index < 0 || index > max) {\n throw new RangeError('Row index out of range');\n }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n let max = outer ? matrix.columns : matrix.columns - 1;\n if (index < 0 || index > max) {\n throw new RangeError('Column index out of range');\n }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n if (vector.to1DArray) {\n vector = vector.to1DArray();\n }\n if (vector.length !== matrix.columns) {\n throw new RangeError(\n 'vector size must be the same as the number of columns',\n );\n }\n return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n if (vector.to1DArray) {\n vector = vector.to1DArray();\n }\n if (vector.length !== matrix.rows) {\n throw new RangeError('vector size must be the same as the number of rows');\n }\n return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n if (!isAnyArray.isAnyArray(rowIndices)) {\n throw new TypeError('row indices must be an array');\n }\n\n for (let i = 0; i < rowIndices.length; i++) {\n if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n throw new RangeError('row indices are out of range');\n }\n }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n if (!isAnyArray.isAnyArray(columnIndices)) {\n throw new TypeError('column indices must be an array');\n }\n\n for (let i = 0; i < columnIndices.length; i++) {\n if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n throw new RangeError('column indices are out of range');\n }\n }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n if (arguments.length !== 5) {\n throw new RangeError('expected 4 arguments');\n }\n checkNumber('startRow', startRow);\n checkNumber('endRow', endRow);\n checkNumber('startColumn', startColumn);\n checkNumber('endColumn', endColumn);\n if (\n startRow > endRow ||\n startColumn > endColumn ||\n startRow < 0 ||\n startRow >= matrix.rows ||\n endRow < 0 ||\n endRow >= matrix.rows ||\n startColumn < 0 ||\n startColumn >= matrix.columns ||\n endColumn < 0 ||\n endColumn >= matrix.columns\n ) {\n throw new RangeError('Submatrix indices are out of range');\n }\n}\n\nfunction newArray(length, value = 0) {\n let array = [];\n for (let i = 0; i < length; i++) {\n array.push(value);\n }\n return array;\n}\n\nfunction checkNumber(name, value) {\n if (typeof value !== 'number') {\n throw new TypeError(`${name} must be a number`);\n }\n}\n\nfunction checkNonEmpty(matrix) {\n if (matrix.isEmpty()) {\n throw new Error('Empty matrix has no elements to index');\n }\n}\n\nfunction sumByRow(matrix) {\n let sum = newArray(matrix.rows);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[i] += matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction sumByColumn(matrix) {\n let sum = newArray(matrix.columns);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[j] += matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction sumAll(matrix) {\n let v = 0;\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n v += matrix.get(i, j);\n }\n }\n return v;\n}\n\nfunction productByRow(matrix) {\n let sum = newArray(matrix.rows, 1);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[i] *= matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction productByColumn(matrix) {\n let sum = newArray(matrix.columns, 1);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[j] *= matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction productAll(matrix) {\n let v = 1;\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n v *= matrix.get(i, j);\n }\n }\n return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const variance = [];\n\n for (let i = 0; i < rows; i++) {\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean[i];\n sum1 += x;\n sum2 += x * x;\n }\n if (unbiased) {\n variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n } else {\n variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n }\n }\n return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const variance = [];\n\n for (let j = 0; j < cols; j++) {\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let i = 0; i < rows; i++) {\n x = matrix.get(i, j) - mean[j];\n sum1 += x;\n sum2 += x * x;\n }\n if (unbiased) {\n variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n } else {\n variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n }\n }\n return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const size = rows * cols;\n\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean;\n sum1 += x;\n sum2 += x * x;\n }\n }\n if (unbiased) {\n return (sum2 - (sum1 * sum1) / size) / (size - 1);\n } else {\n return (sum2 - (sum1 * sum1) / size) / size;\n }\n}\n\nfunction centerByRow(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[i]);\n }\n }\n}\n\nfunction centerByColumn(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[j]);\n }\n }\n}\n\nfunction centerAll(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean);\n }\n }\n}\n\nfunction getScaleByRow(matrix) {\n const scale = [];\n for (let i = 0; i < matrix.rows; i++) {\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[i]);\n }\n }\n}\n\nfunction getScaleByColumn(matrix) {\n const scale = [];\n for (let j = 0; j < matrix.columns; j++) {\n let sum = 0;\n for (let i = 0; i < matrix.rows; i++) {\n sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[j]);\n }\n }\n}\n\nfunction getScaleAll(matrix) {\n const divider = matrix.size - 1;\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n for (let i = 0; i < matrix.rows; i++) {\n sum += matrix.get(i, j) ** 2 / divider;\n }\n }\n return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale);\n }\n }\n}\n\nclass AbstractMatrix {\n static from1DArray(newRows, newColumns, newData) {\n let length = newRows * newColumns;\n if (length !== newData.length) {\n throw new RangeError('data length does not match given dimensions');\n }\n let newMatrix = new Matrix(newRows, newColumns);\n for (let row = 0; row < newRows; row++) {\n for (let column = 0; column < newColumns; column++) {\n newMatrix.set(row, column, newData[row * newColumns + column]);\n }\n }\n return newMatrix;\n }\n\n static rowVector(newData) {\n let vector = new Matrix(1, newData.length);\n for (let i = 0; i < newData.length; i++) {\n vector.set(0, i, newData[i]);\n }\n return vector;\n }\n\n static columnVector(newData) {\n let vector = new Matrix(newData.length, 1);\n for (let i = 0; i < newData.length; i++) {\n vector.set(i, 0, newData[i]);\n }\n return vector;\n }\n\n static zeros(rows, columns) {\n return new Matrix(rows, columns);\n }\n\n static ones(rows, columns) {\n return new Matrix(rows, columns).fill(1);\n }\n\n static rand(rows, columns, options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { random = Math.random } = options;\n let matrix = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.set(i, j, random());\n }\n }\n return matrix;\n }\n\n static randInt(rows, columns, options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1000, random = Math.random } = options;\n if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let interval = max - min;\n let matrix = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n let value = min + Math.round(random() * interval);\n matrix.set(i, j, value);\n }\n }\n return matrix;\n }\n\n static eye(rows, columns, value) {\n if (columns === undefined) columns = rows;\n if (value === undefined) value = 1;\n let min = Math.min(rows, columns);\n let matrix = this.zeros(rows, columns);\n for (let i = 0; i < min; i++) {\n matrix.set(i, i, value);\n }\n return matrix;\n }\n\n static diag(data, rows, columns) {\n let l = data.length;\n if (rows === undefined) rows = l;\n if (columns === undefined) columns = rows;\n let min = Math.min(l, rows, columns);\n let matrix = this.zeros(rows, columns);\n for (let i = 0; i < min; i++) {\n matrix.set(i, i, data[i]);\n }\n return matrix;\n }\n\n static min(matrix1, matrix2) {\n matrix1 = this.checkMatrix(matrix1);\n matrix2 = this.checkMatrix(matrix2);\n let rows = matrix1.rows;\n let columns = matrix1.columns;\n let result = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n }\n }\n return result;\n }\n\n static max(matrix1, matrix2) {\n matrix1 = this.checkMatrix(matrix1);\n matrix2 = this.checkMatrix(matrix2);\n let rows = matrix1.rows;\n let columns = matrix1.columns;\n let result = new this(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n }\n }\n return result;\n }\n\n static checkMatrix(value) {\n return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n }\n\n static isMatrix(value) {\n return value != null && value.klass === 'Matrix';\n }\n\n get size() {\n return this.rows * this.columns;\n }\n\n apply(callback) {\n if (typeof callback !== 'function') {\n throw new TypeError('callback must be a function');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n callback.call(this, i, j);\n }\n }\n return this;\n }\n\n to1DArray() {\n let array = [];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n array.push(this.get(i, j));\n }\n }\n return array;\n }\n\n to2DArray() {\n let copy = [];\n for (let i = 0; i < this.rows; i++) {\n copy.push([]);\n for (let j = 0; j < this.columns; j++) {\n copy[i].push(this.get(i, j));\n }\n }\n return copy;\n }\n\n toJSON() {\n return this.to2DArray();\n }\n\n isRowVector() {\n return this.rows === 1;\n }\n\n isColumnVector() {\n return this.columns === 1;\n }\n\n isVector() {\n return this.rows === 1 || this.columns === 1;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isEmpty() {\n return this.rows === 0 || this.columns === 0;\n }\n\n isSymmetric() {\n if (this.isSquare()) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j <= i; j++) {\n if (this.get(i, j) !== this.get(j, i)) {\n return false;\n }\n }\n }\n return true;\n }\n return false;\n }\n\n isDistance() {\n if (!this.isSymmetric()) return false;\n\n for (let i = 0; i < this.rows; i++) {\n if (this.get(i, i) !== 0) return false;\n }\n\n return true;\n }\n\n isEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isEchelonForm = true;\n let checked = false;\n while (i < this.rows && isEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isEchelonForm = false;\n checked = true;\n }\n }\n i++;\n }\n return isEchelonForm;\n }\n\n isReducedEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isReducedEchelonForm = true;\n let checked = false;\n while (i < this.rows && isReducedEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isReducedEchelonForm = false;\n checked = true;\n }\n }\n for (let k = j + 1; k < this.rows; k++) {\n if (this.get(i, k) !== 0) {\n isReducedEchelonForm = false;\n }\n }\n i++;\n }\n return isReducedEchelonForm;\n }\n\n echelonForm() {\n let result = this.clone();\n let h = 0;\n let k = 0;\n while (h < result.rows && k < result.columns) {\n let iMax = h;\n for (let i = h; i < result.rows; i++) {\n if (result.get(i, k) > result.get(iMax, k)) {\n iMax = i;\n }\n }\n if (result.get(iMax, k) === 0) {\n k++;\n } else {\n result.swapRows(h, iMax);\n let tmp = result.get(h, k);\n for (let j = k; j < result.columns; j++) {\n result.set(h, j, result.get(h, j) / tmp);\n }\n for (let i = h + 1; i < result.rows; i++) {\n let factor = result.get(i, k) / result.get(h, k);\n result.set(i, k, 0);\n for (let j = k + 1; j < result.columns; j++) {\n result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n }\n }\n h++;\n k++;\n }\n }\n return result;\n }\n\n reducedEchelonForm() {\n let result = this.echelonForm();\n let m = result.columns;\n let n = result.rows;\n let h = n - 1;\n while (h >= 0) {\n if (result.maxRow(h) === 0) {\n h--;\n } else {\n let p = 0;\n let pivot = false;\n while (p < n && pivot === false) {\n if (result.get(h, p) === 1) {\n pivot = true;\n } else {\n p++;\n }\n }\n for (let i = 0; i < h; i++) {\n let factor = result.get(i, p);\n for (let j = p; j < m; j++) {\n let tmp = result.get(i, j) - factor * result.get(h, j);\n result.set(i, j, tmp);\n }\n }\n h--;\n }\n }\n return result;\n }\n\n set() {\n throw new Error('set method is unimplemented');\n }\n\n get() {\n throw new Error('get method is unimplemented');\n }\n\n repeat(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { rows = 1, columns = 1 } = options;\n if (!Number.isInteger(rows) || rows <= 0) {\n throw new TypeError('rows must be a positive integer');\n }\n if (!Number.isInteger(columns) || columns <= 0) {\n throw new TypeError('columns must be a positive integer');\n }\n let matrix = new Matrix(this.rows * rows, this.columns * columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n }\n }\n return matrix;\n }\n\n fill(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, value);\n }\n }\n return this;\n }\n\n neg() {\n return this.mulS(-1);\n }\n\n getRow(index) {\n checkRowIndex(this, index);\n let row = [];\n for (let i = 0; i < this.columns; i++) {\n row.push(this.get(index, i));\n }\n return row;\n }\n\n getRowVector(index) {\n return Matrix.rowVector(this.getRow(index));\n }\n\n setRow(index, array) {\n checkRowIndex(this, index);\n array = checkRowVector(this, array);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, array[i]);\n }\n return this;\n }\n\n swapRows(row1, row2) {\n checkRowIndex(this, row1);\n checkRowIndex(this, row2);\n for (let i = 0; i < this.columns; i++) {\n let temp = this.get(row1, i);\n this.set(row1, i, this.get(row2, i));\n this.set(row2, i, temp);\n }\n return this;\n }\n\n getColumn(index) {\n checkColumnIndex(this, index);\n let column = [];\n for (let i = 0; i < this.rows; i++) {\n column.push(this.get(i, index));\n }\n return column;\n }\n\n getColumnVector(index) {\n return Matrix.columnVector(this.getColumn(index));\n }\n\n setColumn(index, array) {\n checkColumnIndex(this, index);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, array[i]);\n }\n return this;\n }\n\n swapColumns(column1, column2) {\n checkColumnIndex(this, column1);\n checkColumnIndex(this, column2);\n for (let i = 0; i < this.rows; i++) {\n let temp = this.get(i, column1);\n this.set(i, column1, this.get(i, column2));\n this.set(i, column2, temp);\n }\n return this;\n }\n\n addRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[j]);\n }\n }\n return this;\n }\n\n subRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[j]);\n }\n }\n return this;\n }\n\n mulRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[j]);\n }\n }\n return this;\n }\n\n divRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[j]);\n }\n }\n return this;\n }\n\n addColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[i]);\n }\n }\n return this;\n }\n\n subColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[i]);\n }\n }\n return this;\n }\n\n mulColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[i]);\n }\n }\n return this;\n }\n\n divColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[i]);\n }\n }\n return this;\n }\n\n mulRow(index, value) {\n checkRowIndex(this, index);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, this.get(index, i) * value);\n }\n return this;\n }\n\n mulColumn(index, value) {\n checkColumnIndex(this, index);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, this.get(i, index) * value);\n }\n return this;\n }\n\n max(by) {\n if (this.isEmpty()) {\n return NaN;\n }\n switch (by) {\n case 'row': {\n const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max[row]) {\n max[row] = this.get(row, column);\n }\n }\n }\n return max;\n }\n case 'column': {\n const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max[column]) {\n max[column] = this.get(row, column);\n }\n }\n }\n return max;\n }\n case undefined: {\n let max = this.get(0, 0);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max) {\n max = this.get(row, column);\n }\n }\n }\n return max;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n maxIndex() {\n checkNonEmpty(this);\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) > v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n min(by) {\n if (this.isEmpty()) {\n return NaN;\n }\n\n switch (by) {\n case 'row': {\n const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min[row]) {\n min[row] = this.get(row, column);\n }\n }\n }\n return min;\n }\n case 'column': {\n const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min[column]) {\n min[column] = this.get(row, column);\n }\n }\n }\n return min;\n }\n case undefined: {\n let min = this.get(0, 0);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min) {\n min = this.get(row, column);\n }\n }\n }\n return min;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n minIndex() {\n checkNonEmpty(this);\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) < v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n maxRow(row) {\n checkRowIndex(this, row);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n maxRowIndex(row) {\n checkRowIndex(this, row);\n checkNonEmpty(this);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n minRow(row) {\n checkRowIndex(this, row);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n minRowIndex(row) {\n checkRowIndex(this, row);\n checkNonEmpty(this);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n maxColumn(column) {\n checkColumnIndex(this, column);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n maxColumnIndex(column) {\n checkColumnIndex(this, column);\n checkNonEmpty(this);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n minColumn(column) {\n checkColumnIndex(this, column);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n minColumnIndex(column) {\n checkColumnIndex(this, column);\n checkNonEmpty(this);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n diag() {\n let min = Math.min(this.rows, this.columns);\n let diag = [];\n for (let i = 0; i < min; i++) {\n diag.push(this.get(i, i));\n }\n return diag;\n }\n\n norm(type = 'frobenius') {\n switch (type) {\n case 'max':\n return this.max();\n case 'frobenius':\n return Math.sqrt(this.dot(this));\n default:\n throw new RangeError(`unknown norm type: ${type}`);\n }\n }\n\n cumulativeSum() {\n let sum = 0;\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n sum += this.get(i, j);\n this.set(i, j, sum);\n }\n }\n return this;\n }\n\n dot(vector2) {\n if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n let vector1 = this.to1DArray();\n if (vector1.length !== vector2.length) {\n throw new RangeError('vectors do not have the same size');\n }\n let dot = 0;\n for (let i = 0; i < vector1.length; i++) {\n dot += vector1[i] * vector2[i];\n }\n return dot;\n }\n\n mmul(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.columns;\n\n let result = new Matrix(m, p);\n\n let Bcolj = new Float64Array(n);\n for (let j = 0; j < p; j++) {\n for (let k = 0; k < n; k++) {\n Bcolj[k] = other.get(k, j);\n }\n\n for (let i = 0; i < m; i++) {\n let s = 0;\n for (let k = 0; k < n; k++) {\n s += this.get(i, k) * Bcolj[k];\n }\n\n result.set(i, j, s);\n }\n }\n return result;\n }\n\n mpow(scalar) {\n if (!this.isSquare()) {\n throw new RangeError('Matrix must be square');\n }\n if (!Number.isInteger(scalar) || scalar < 0) {\n throw new RangeError('Exponent must be a non-negative integer');\n }\n // Russian Peasant exponentiation, i.e. exponentiation by squaring\n let result = Matrix.eye(this.rows);\n let bb = this;\n // Note: Don't bit shift. In JS, that would truncate at 32 bits\n for (let e = scalar; e >= 1; e /= 2) {\n if ((e & 1) !== 0) {\n result = result.mmul(bb);\n }\n bb = bb.mmul(bb);\n }\n return result;\n }\n\n strassen2x2(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(2, 2);\n const a11 = this.get(0, 0);\n const b11 = other.get(0, 0);\n const a12 = this.get(0, 1);\n const b12 = other.get(0, 1);\n const a21 = this.get(1, 0);\n const b21 = other.get(1, 0);\n const a22 = this.get(1, 1);\n const b22 = other.get(1, 1);\n\n // Compute intermediate values.\n const m1 = (a11 + a22) * (b11 + b22);\n const m2 = (a21 + a22) * b11;\n const m3 = a11 * (b12 - b22);\n const m4 = a22 * (b21 - b11);\n const m5 = (a11 + a12) * b22;\n const m6 = (a21 - a11) * (b11 + b12);\n const m7 = (a12 - a22) * (b21 + b22);\n\n // Combine intermediate values into the output.\n const c00 = m1 + m4 - m5 + m7;\n const c01 = m3 + m5;\n const c10 = m2 + m4;\n const c11 = m1 - m2 + m3 + m6;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n return result;\n }\n\n strassen3x3(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(3, 3);\n\n const a00 = this.get(0, 0);\n const a01 = this.get(0, 1);\n const a02 = this.get(0, 2);\n const a10 = this.get(1, 0);\n const a11 = this.get(1, 1);\n const a12 = this.get(1, 2);\n const a20 = this.get(2, 0);\n const a21 = this.get(2, 1);\n const a22 = this.get(2, 2);\n\n const b00 = other.get(0, 0);\n const b01 = other.get(0, 1);\n const b02 = other.get(0, 2);\n const b10 = other.get(1, 0);\n const b11 = other.get(1, 1);\n const b12 = other.get(1, 2);\n const b20 = other.get(2, 0);\n const b21 = other.get(2, 1);\n const b22 = other.get(2, 2);\n\n const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n const m2 = (a00 - a10) * (-b01 + b11);\n const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n const m5 = (a10 + a11) * (-b00 + b01);\n const m6 = a00 * b00;\n const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n const m8 = (-a00 + a20) * (b02 - b12);\n const m9 = (a20 + a21) * (-b00 + b02);\n const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n const m13 = (a02 - a22) * (b11 - b21);\n const m14 = a02 * b20;\n const m15 = (a21 + a22) * (-b20 + b21);\n const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n const m17 = (a02 - a12) * (b12 - b22);\n const m18 = (a11 + a12) * (-b20 + b22);\n const m19 = a01 * b10;\n const m20 = a12 * b21;\n const m21 = a10 * b02;\n const m22 = a20 * b01;\n const m23 = a22 * b22;\n\n const c00 = m6 + m14 + m19;\n const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n const c11 = m2 + m4 + m5 + m6 + m20;\n const c12 = m14 + m16 + m17 + m18 + m21;\n const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n const c21 = m12 + m13 + m14 + m15 + m22;\n const c22 = m6 + m7 + m8 + m9 + m23;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(0, 2, c02);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n result.set(1, 2, c12);\n result.set(2, 0, c20);\n result.set(2, 1, c21);\n result.set(2, 2, c22);\n return result;\n }\n\n mmulStrassen(y) {\n y = Matrix.checkMatrix(y);\n let x = this.clone();\n let r1 = x.rows;\n let c1 = x.columns;\n let r2 = y.rows;\n let c2 = y.columns;\n if (c1 !== r2) {\n // eslint-disable-next-line no-console\n console.warn(\n `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n );\n }\n\n // Put a matrix into the top left of a matrix of zeros.\n // `rows` and `cols` are the dimensions of the output matrix.\n function embed(mat, rows, cols) {\n let r = mat.rows;\n let c = mat.columns;\n if (r === rows && c === cols) {\n return mat;\n } else {\n let resultat = AbstractMatrix.zeros(rows, cols);\n resultat = resultat.setSubMatrix(mat, 0, 0);\n return resultat;\n }\n }\n\n // Make sure both matrices are the same size.\n // This is exclusively for simplicity:\n // this algorithm can be implemented with matrices of different sizes.\n\n let r = Math.max(r1, r2);\n let c = Math.max(c1, c2);\n x = embed(x, r, c);\n y = embed(y, r, c);\n\n // Our recursive multiplication function.\n function blockMult(a, b, rows, cols) {\n // For small matrices, resort to naive multiplication.\n if (rows <= 512 || cols <= 512) {\n return a.mmul(b); // a is equivalent to this\n }\n\n // Apply dynamic padding.\n if (rows % 2 === 1 && cols % 2 === 1) {\n a = embed(a, rows + 1, cols + 1);\n b = embed(b, rows + 1, cols + 1);\n } else if (rows % 2 === 1) {\n a = embed(a, rows + 1, cols);\n b = embed(b, rows + 1, cols);\n } else if (cols % 2 === 1) {\n a = embed(a, rows, cols + 1);\n b = embed(b, rows, cols + 1);\n }\n\n let halfRows = parseInt(a.rows / 2, 10);\n let halfCols = parseInt(a.columns / 2, 10);\n // Subdivide input matrices.\n let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n // Compute intermediate values.\n let m1 = blockMult(\n AbstractMatrix.add(a11, a22),\n AbstractMatrix.add(b11, b22),\n halfRows,\n halfCols,\n );\n let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n let m6 = blockMult(\n AbstractMatrix.sub(a21, a11),\n AbstractMatrix.add(b11, b12),\n halfRows,\n halfCols,\n );\n let m7 = blockMult(\n AbstractMatrix.sub(a12, a22),\n AbstractMatrix.add(b21, b22),\n halfRows,\n halfCols,\n );\n\n // Combine intermediate values into the output.\n let c11 = AbstractMatrix.add(m1, m4);\n c11.sub(m5);\n c11.add(m7);\n let c12 = AbstractMatrix.add(m3, m5);\n let c21 = AbstractMatrix.add(m2, m4);\n let c22 = AbstractMatrix.sub(m1, m2);\n c22.add(m3);\n c22.add(m6);\n\n // Crop output to the desired size (undo dynamic padding).\n let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n result = result.setSubMatrix(c11, 0, 0);\n result = result.setSubMatrix(c12, c11.rows, 0);\n result = result.setSubMatrix(c21, 0, c11.columns);\n result = result.setSubMatrix(c22, c11.rows, c11.columns);\n return result.subMatrix(0, rows - 1, 0, cols - 1);\n }\n\n return blockMult(x, y, r, c);\n }\n\n scaleRows(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.rows; i++) {\n const row = this.getRow(i);\n if (row.length > 0) {\n rescale(row, { min, max, output: row });\n }\n newMatrix.setRow(i, row);\n }\n return newMatrix;\n }\n\n scaleColumns(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.columns; i++) {\n const column = this.getColumn(i);\n if (column.length) {\n rescale(column, {\n min,\n max,\n output: column,\n });\n }\n newMatrix.setColumn(i, column);\n }\n return newMatrix;\n }\n\n flipRows() {\n const middle = Math.ceil(this.columns / 2);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < middle; j++) {\n let first = this.get(i, j);\n let last = this.get(i, this.columns - 1 - j);\n this.set(i, j, last);\n this.set(i, this.columns - 1 - j, first);\n }\n }\n return this;\n }\n\n flipColumns() {\n const middle = Math.ceil(this.rows / 2);\n for (let j = 0; j < this.columns; j++) {\n for (let i = 0; i < middle; i++) {\n let first = this.get(i, j);\n let last = this.get(this.rows - 1 - i, j);\n this.set(i, j, last);\n this.set(this.rows - 1 - i, j, first);\n }\n }\n return this;\n }\n\n kroneckerProduct(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.rows;\n let q = other.columns;\n\n let result = new Matrix(m * p, n * q);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n for (let k = 0; k < p; k++) {\n for (let l = 0; l < q; l++) {\n result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n }\n }\n }\n }\n return result;\n }\n\n kroneckerSum(other) {\n other = Matrix.checkMatrix(other);\n if (!this.isSquare() || !other.isSquare()) {\n throw new Error('Kronecker Sum needs two Square Matrices');\n }\n let m = this.rows;\n let n = other.rows;\n let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n return AxI.add(IxB);\n }\n\n transpose() {\n let result = new Matrix(this.columns, this.rows);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n result.set(j, i, this.get(i, j));\n }\n }\n return result;\n }\n\n sortRows(compareFunction = compareNumbers) {\n for (let i = 0; i < this.rows; i++) {\n this.setRow(i, this.getRow(i).sort(compareFunction));\n }\n return this;\n }\n\n sortColumns(compareFunction = compareNumbers) {\n for (let i = 0; i < this.columns; i++) {\n this.setColumn(i, this.getColumn(i).sort(compareFunction));\n }\n return this;\n }\n\n subMatrix(startRow, endRow, startColumn, endColumn) {\n checkRange(this, startRow, endRow, startColumn, endColumn);\n let newMatrix = new Matrix(\n endRow - startRow + 1,\n endColumn - startColumn + 1,\n );\n for (let i = startRow; i <= endRow; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n }\n }\n return newMatrix;\n }\n\n subMatrixRow(indices, startColumn, endColumn) {\n if (startColumn === undefined) startColumn = 0;\n if (endColumn === undefined) endColumn = this.columns - 1;\n if (\n startColumn > endColumn ||\n startColumn < 0 ||\n startColumn >= this.columns ||\n endColumn < 0 ||\n endColumn >= this.columns\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n if (indices[i] < 0 || indices[i] >= this.rows) {\n throw new RangeError(`Row index out of range: ${indices[i]}`);\n }\n newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n }\n }\n return newMatrix;\n }\n\n subMatrixColumn(indices, startRow, endRow) {\n if (startRow === undefined) startRow = 0;\n if (endRow === undefined) endRow = this.rows - 1;\n if (\n startRow > endRow ||\n startRow < 0 ||\n startRow >= this.rows ||\n endRow < 0 ||\n endRow >= this.rows\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startRow; j <= endRow; j++) {\n if (indices[i] < 0 || indices[i] >= this.columns) {\n throw new RangeError(`Column index out of range: ${indices[i]}`);\n }\n newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n }\n }\n return newMatrix;\n }\n\n setSubMatrix(matrix, startRow, startColumn) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isEmpty()) {\n return this;\n }\n let endRow = startRow + matrix.rows - 1;\n let endColumn = startColumn + matrix.columns - 1;\n checkRange(this, startRow, endRow, startColumn, endColumn);\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n this.set(startRow + i, startColumn + j, matrix.get(i, j));\n }\n }\n return this;\n }\n\n selection(rowIndices, columnIndices) {\n checkRowIndices(this, rowIndices);\n checkColumnIndices(this, columnIndices);\n let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n for (let i = 0; i < rowIndices.length; i++) {\n let rowIndex = rowIndices[i];\n for (let j = 0; j < columnIndices.length; j++) {\n let columnIndex = columnIndices[j];\n newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n }\n }\n return newMatrix;\n }\n\n trace() {\n let min = Math.min(this.rows, this.columns);\n let trace = 0;\n for (let i = 0; i < min; i++) {\n trace += this.get(i, i);\n }\n return trace;\n }\n\n clone() {\n return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n }\n\n /**\n * @template {AbstractMatrix} M\n * @param {AbstractMatrix} from\n * @param {M} to\n * @return {M}\n */\n static copy(from, to) {\n for (const [row, column, value] of from.entries()) {\n to.set(row, column, value);\n }\n\n return to;\n }\n\n sum(by) {\n switch (by) {\n case 'row':\n return sumByRow(this);\n case 'column':\n return sumByColumn(this);\n case undefined:\n return sumAll(this);\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n product(by) {\n switch (by) {\n case 'row':\n return productByRow(this);\n case 'column':\n return productByColumn(this);\n case undefined:\n return productAll(this);\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n mean(by) {\n const sum = this.sum(by);\n switch (by) {\n case 'row': {\n for (let i = 0; i < this.rows; i++) {\n sum[i] /= this.columns;\n }\n return sum;\n }\n case 'column': {\n for (let i = 0; i < this.columns; i++) {\n sum[i] /= this.rows;\n }\n return sum;\n }\n case undefined:\n return sum / this.size;\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n variance(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { unbiased = true, mean = this.mean(by) } = options;\n if (typeof unbiased !== 'boolean') {\n throw new TypeError('unbiased must be a boolean');\n }\n switch (by) {\n case 'row': {\n if (!isAnyArray.isAnyArray(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByRow(this, unbiased, mean);\n }\n case 'column': {\n if (!isAnyArray.isAnyArray(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByColumn(this, unbiased, mean);\n }\n case undefined: {\n if (typeof mean !== 'number') {\n throw new TypeError('mean must be a number');\n }\n return varianceAll(this, unbiased, mean);\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n standardDeviation(by, options) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n const variance = this.variance(by, options);\n if (by === undefined) {\n return Math.sqrt(variance);\n } else {\n for (let i = 0; i < variance.length; i++) {\n variance[i] = Math.sqrt(variance[i]);\n }\n return variance;\n }\n }\n\n center(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { center = this.mean(by) } = options;\n switch (by) {\n case 'row': {\n if (!isAnyArray.isAnyArray(center)) {\n throw new TypeError('center must be an array');\n }\n centerByRow(this, center);\n return this;\n }\n case 'column': {\n if (!isAnyArray.isAnyArray(center)) {\n throw new TypeError('center must be an array');\n }\n centerByColumn(this, center);\n return this;\n }\n case undefined: {\n if (typeof center !== 'number') {\n throw new TypeError('center must be a number');\n }\n centerAll(this, center);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n scale(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n let scale = options.scale;\n switch (by) {\n case 'row': {\n if (scale === undefined) {\n scale = getScaleByRow(this);\n } else if (!isAnyArray.isAnyArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByRow(this, scale);\n return this;\n }\n case 'column': {\n if (scale === undefined) {\n scale = getScaleByColumn(this);\n } else if (!isAnyArray.isAnyArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByColumn(this, scale);\n return this;\n }\n case undefined: {\n if (scale === undefined) {\n scale = getScaleAll(this);\n } else if (typeof scale !== 'number') {\n throw new TypeError('scale must be a number');\n }\n scaleAll(this, scale);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n toString(options) {\n return inspectMatrixWithOptions(this, options);\n }\n\n [Symbol.iterator]() {\n return this.entries();\n }\n\n /**\n * iterator from left to right, from top to bottom\n * yield [row, column, value]\n * @returns {Generator<[number, number, number], void, void>}\n */\n *entries() {\n for (let row = 0; row < this.rows; row++) {\n for (let col = 0; col < this.columns; col++) {\n yield [row, col, this.get(row, col)];\n }\n }\n }\n\n /**\n * iterator from left to right, from top to bottom\n * yield value\n * @returns {Generator<number, void, void>}\n */\n *values() {\n for (let row = 0; row < this.rows; row++) {\n for (let col = 0; col < this.columns; col++) {\n yield this.get(row, col);\n }\n }\n }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n return array.every((element) => {\n return typeof element === 'number';\n });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n /**\n * @type {Float64Array[]}\n */\n data;\n\n /**\n * Init an empty matrix\n * @param {number} nRows\n * @param {number} nColumns\n */\n #initData(nRows, nColumns) {\n this.data = [];\n\n if (Number.isInteger(nColumns) && nColumns >= 0) {\n for (let i = 0; i < nRows; i++) {\n this.data.push(new Float64Array(nColumns));\n }\n } else {\n throw new TypeError('nColumns must be a positive integer');\n }\n\n this.rows = nRows;\n this.columns = nColumns;\n }\n\n constructor(nRows, nColumns) {\n super();\n if (Matrix.isMatrix(nRows)) {\n this.#initData(nRows.rows, nRows.columns);\n Matrix.copy(nRows, this);\n } else if (Number.isInteger(nRows) && nRows >= 0) {\n this.#initData(nRows, nColumns);\n } else if (isAnyArray.isAnyArray(nRows)) {\n // Copy the values from the 2D array\n const arrayData = nRows;\n nRows = arrayData.length;\n nColumns = nRows ? arrayData[0].length : 0;\n if (typeof nColumns !== 'number') {\n throw new TypeError(\n 'Data must be a 2D array with at least one element',\n );\n }\n this.data = [];\n\n for (let i = 0; i < nRows; i++) {\n if (arrayData[i].length !== nColumns) {\n throw new RangeError('Inconsistent array dimensions');\n }\n if (!isArrayOfNumbers(arrayData[i])) {\n throw new TypeError('Input data contains non-numeric values');\n }\n this.data.push(Float64Array.from(arrayData[i]));\n }\n\n this.rows = nRows;\n this.columns = nColumns;\n } else {\n throw new TypeError(\n 'First argument must be a positive number or an array',\n );\n }\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n\n removeRow(index) {\n checkRowIndex(this, index);\n this.data.splice(index, 1);\n this.rows -= 1;\n return this;\n }\n\n addRow(index, array) {\n if (array === undefined) {\n array = index;\n index = this.rows;\n }\n checkRowIndex(this, index, true);\n array = Float64Array.from(checkRowVector(this, array));\n this.data.splice(index, 0, array);\n this.rows += 1;\n return this;\n }\n\n removeColumn(index) {\n checkColumnIndex(this, index);\n for (let i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns - 1);\n for (let j = 0; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n for (let j = index + 1; j < this.columns; j++) {\n newRow[j - 1] = this.data[i][j];\n }\n this.data[i] = newRow;\n }\n this.columns -= 1;\n return this;\n }\n\n addColumn(index, array) {\n if (typeof array === 'undefined') {\n array = index;\n index = this.columns;\n }\n checkColumnIndex(this, index, true);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns + 1);\n let j = 0;\n for (; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n newRow[j++] = array[i];\n for (; j < this.columns + 1; j++) {\n newRow[j] = this.data[i][j - 1];\n }\n this.data[i] = newRow;\n }\n this.columns += 1;\n return this;\n }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n /** @type {Matrix} */\n #matrix;\n\n get size() {\n return this.#matrix.size;\n }\n\n get rows() {\n return this.#matrix.rows;\n }\n\n get columns() {\n return this.#matrix.columns;\n }\n\n get diagonalSize() {\n return this.rows;\n }\n\n /**\n * not the same as matrix.isSymmetric()\n * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n *\n * @param value\n * @returns {boolean}\n */\n static isSymmetricMatrix(value) {\n return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n }\n\n /**\n * @param diagonalSize\n * @return {SymmetricMatrix}\n */\n static zeros(diagonalSize) {\n return new this(diagonalSize);\n }\n\n /**\n * @param diagonalSize\n * @return {SymmetricMatrix}\n */\n static ones(diagonalSize) {\n return new this(diagonalSize).fill(1);\n }\n\n /**\n * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n * @return {this}\n */\n constructor(diagonalSize) {\n super();\n\n if (Matrix.isMatrix(diagonalSize)) {\n if (!diagonalSize.isSymmetric()) {\n throw new TypeError('not symmetric data');\n }\n\n this.#matrix = Matrix.copy(\n diagonalSize,\n new Matrix(diagonalSize.rows, diagonalSize.rows),\n );\n } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n this.#matrix = new Matrix(diagonalSize, diagonalSize);\n } else {\n this.#matrix = new Matrix(diagonalSize);\n\n if (!this.isSymmetric()) {\n throw new TypeError('not symmetric data');\n }\n }\n }\n\n clone() {\n const matrix = new SymmetricMatrix(this.diagonalSize);\n\n for (const [row, col, value] of this.upperRightEntries()) {\n matrix.set(row, col, value);\n }\n\n return matrix;\n }\n\n toMatrix() {\n return new Matrix(this);\n }\n\n get(rowIndex, columnIndex) {\n return this.#matrix.get(rowIndex, columnIndex);\n }\n set(rowIndex, columnIndex, value) {\n // symmetric set\n this.#matrix.set(rowIndex, columnIndex, value);\n this.#matrix.set(columnIndex, rowIndex, value);\n\n return this;\n }\n\n removeCross(index) {\n // symmetric remove side\n this.#matrix.removeRow(index);\n this.#matrix.removeColumn(index);\n\n return this;\n }\n\n addCross(index, array) {\n if (array === undefined) {\n array = index;\n index = this.diagonalSize;\n }\n\n const row = array.slice();\n row.splice(index, 1);\n\n this.#matrix.addRow(index, row);\n this.#matrix.addColumn(index, array);\n\n return this;\n }\n\n /**\n * @param {Mask[]} mask\n */\n applyMask(mask) {\n if (mask.length !== this.diagonalSize) {\n throw new RangeError('Mask size do not match with matrix size');\n }\n\n // prepare sides to remove from matrix from mask\n /** @type {number[]} */\n const sidesToRemove = [];\n for (const [index, passthroughs] of mask.entries()) {\n if (passthroughs) continue;\n sidesToRemove.push(index);\n }\n // to remove from highest to lowest for no mutation shifting\n sidesToRemove.reverse();\n\n // remove sides\n for (const sideIndex of sidesToRemove) {\n this.removeCross(sideIndex);\n }\n\n return this;\n }\n\n /**\n * Compact format upper-right corner of matrix\n * iterate from left to right, from top to bottom.\n *\n * ```\n * A B C D\n * A 1 2 3 4\n * B 2 5 6 7\n * C 3 6 8 9\n * D 4 7 9 10\n * ```\n *\n * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n *\n * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n *\n * @returns {number[]}\n */\n toCompact() {\n const { diagonalSize } = this;\n\n /** @type {number[]} */\n const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n compact[index] = this.get(row, col);\n\n if (++col >= diagonalSize) col = ++row;\n }\n\n return compact;\n }\n\n /**\n * @param {number[]} compact\n * @return {SymmetricMatrix}\n */\n static fromCompact(compact) {\n const compactSize = compact.length;\n // compactSize = (sideSize * (sideSize + 1)) / 2\n // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n if (!Number.isInteger(diagonalSize)) {\n throw new TypeError(\n `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n compact,\n )}`,\n );\n }\n\n const matrix = new SymmetricMatrix(diagonalSize);\n for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n matrix.set(col, row, compact[index]);\n if (++col >= diagonalSize) col = ++row;\n }\n\n return matrix;\n }\n\n /**\n * half iterator upper-right-corner from left to right, from top to bottom\n * yield [row, column, value]\n *\n * @returns {Generator<[number, number, number], void, void>}\n */\n *upperRightEntries() {\n for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n const value = this.get(row, col);\n\n yield [row, col, value];\n\n // at the end of row, move cursor to next row at diagonal position\n if (++col >= this.diagonalSize) col = ++row;\n }\n }\n\n /**\n * half iterator upper-right-corner from left to right, from top to bottom\n * yield value\n *\n * @returns {Generator<[number, number, number], void, void>}\n */\n *upperRightValues() {\n for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n const value = this.get(row, col);\n\n yield value;\n\n // at the end of row, move cursor to next row at diagonal position\n if (++col >= this.diagonalSize) col = ++row;\n }\n }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n /**\n * not the same as matrix.isSymmetric()\n * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n *\n * @param value\n * @returns {boolean}\n */\n static isDistanceMatrix(value) {\n return (\n SymmetricMatrix.isSymmetricMatrix(value) &&\n value.klassSubType === 'DistanceMatrix'\n );\n }\n\n constructor(sideSize) {\n super(sideSize);\n\n if (!this.isDistance()) {\n throw new TypeError('Provided arguments do no produce a distance matrix');\n }\n }\n\n set(rowIndex, columnIndex, value) {\n // distance matrix diagonal is 0\n if (rowIndex === columnIndex) value = 0;\n\n return super.set(rowIndex, columnIndex, value);\n }\n\n addCross(index, array) {\n if (array === undefined) {\n array = index;\n index = this.diagonalSize;\n }\n\n // ensure distance\n array = array.slice();\n array[index] = 0;\n\n return super.addCross(index, array);\n }\n\n toSymmetricMatrix() {\n return new SymmetricMatrix(this);\n }\n\n clone() {\n const matrix = new DistanceMatrix(this.diagonalSize);\n\n for (const [row, col, value] of this.upperRightEntries()) {\n if (row === col) continue;\n matrix.set(row, col, value);\n }\n\n return matrix;\n }\n\n /**\n * Compact format upper-right corner of matrix\n * no diagonal (only zeros)\n * iterable from left to right, from top to bottom.\n *\n * ```\n * A B C D\n * A 0 1 2 3\n * B 1 0 4 5\n * C 2 4 0 6\n * D 3 5 6 0\n * ```\n *\n * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n *\n * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n *\n * @returns {number[]}\n */\n toCompact() {\n const { diagonalSize } = this;\n const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n /** @type {number[]} */\n const compact = new Array(compactLength);\n for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n compact[index] = this.get(row, col);\n\n if (++col >= diagonalSize) col = ++row + 1;\n }\n\n return compact;\n }\n\n /**\n * @param {number[]} compact\n */\n static fromCompact(compact) {\n const compactSize = compact.length;\n\n if (compactSize === 0) {\n return new this(0);\n }\n\n // compactSize in Natural integer range ]0;∞]\n // compactSize = (sideSize * (sideSize - 1)) / 2\n // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n if (!Number.isInteger(diagonalSize)) {\n throw new TypeError(\n `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n compact,\n )}`,\n );\n }\n\n const matrix = new this(diagonalSize);\n for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n matrix.set(col, row, compact[index]);\n if (++col >= diagonalSize) col = ++row + 1;\n }\n\n return matrix;\n }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n constructor(matrix, rows, columns) {\n super();\n this.matrix = matrix;\n this.rows = rows;\n this.columns = columns;\n }\n}\n\nclass MatrixColumnView extends BaseView {\n constructor(matrix, column) {\n checkColumnIndex(matrix, column);\n super(matrix, matrix.rows, 1);\n this.column = column;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.column, value);\n return this;\n }\n\n get(rowIndex) {\n return this.matrix.get(rowIndex, this.column);\n }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n constructor(matrix, columnIndices) {\n checkColumnIndices(matrix, columnIndices);\n super(matrix, matrix.rows, columnIndices.length);\n this.columnIndices = columnIndices;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n constructor(matrix) {\n super(matrix, matrix.rows, matrix.columns);\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n }\n}\n\nclass MatrixFlipRowView extends BaseView {\n constructor(matrix) {\n super(matrix, matrix.rows, matrix.columns);\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n }\n}\n\nclass MatrixRowView extends BaseView {\n constructor(matrix, row) {\n checkRowIndex(matrix, row);\n super(matrix, 1, matrix.columns);\n this.row = row;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.row, columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.row, columnIndex);\n }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n constructor(matrix, rowIndices) {\n checkRowIndices(matrix, rowIndices);\n super(matrix, rowIndices.length, matrix.columns);\n this.rowIndices = rowIndices;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n }\n}\n\nclass MatrixSelectionView extends BaseView {\n constructor(matrix, rowIndices, columnIndices) {\n checkRowIndices(matrix, rowIndices);\n checkColumnIndices(matrix, columnIndices);\n super(matrix, rowIndices.length, columnIndices.length);\n this.rowIndices = rowIndices;\n this.columnIndices = columnIndices;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(\n this.rowIndices[rowIndex],\n this.columnIndices[columnIndex],\n value,\n );\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(\n this.rowIndices[rowIndex],\n this.columnIndices[columnIndex],\n );\n }\n}\n\nclass MatrixSubView extends BaseView {\n constructor(matrix, startRow, endRow, startColumn, endColumn) {\n checkRange(matrix, startRow, endRow, startColumn, endColumn);\n super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n this.startRow = startRow;\n this.startColumn = startColumn;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(\n this.startRow + rowIndex,\n this.startColumn + columnIndex,\n value,\n );\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(\n this.startRow + rowIndex,\n this.startColumn + columnIndex,\n );\n }\n}\n\nclass MatrixTransposeView extends BaseView {\n constructor(matrix) {\n super(matrix, matrix.columns, matrix.rows);\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(columnIndex, rowIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(columnIndex, rowIndex);\n }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n constructor(data, options = {}) {\n const { rows = 1 } = options;\n\n if (data.length % rows !== 0) {\n throw new Error('the data length is not divisible by the number of rows');\n }\n super();\n this.rows = rows;\n this.columns = data.length / rows;\n this.data = data;\n }\n\n set(rowIndex, columnIndex, value) {\n let index = this._calculateIndex(rowIndex, columnIndex);\n this.data[index] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n let index = this._calculateIndex(rowIndex, columnIndex);\n return this.data[index];\n }\n\n _calculateIndex(row, column) {\n return row * this.columns + column;\n }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n constructor(data) {\n super();\n this.data = data;\n this.rows = data.length;\n this.columns = data[0].length;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n}\n\nfunction wrap(array, options) {\n if (isAnyArray.isAnyArray(array)) {\n if (array[0] && isAnyArray.isAnyArray(array[0])) {\n return new WrapperMatrix2D(array);\n } else {\n return new WrapperMatrix1D(array, options);\n }\n } else {\n throw new Error('the argument is not an array');\n }\n}\n\nclass LuDecomposition {\n constructor(matrix) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n let lu = matrix.clone();\n let rows = lu.rows;\n let columns = lu.columns;\n let pivotVector = new Float64Array(rows);\n let pivotSign = 1;\n let i, j, k, p, s, t, v;\n let LUcolj, kmax;\n\n for (i = 0; i < rows; i++) {\n pivotVector[i] = i;\n }\n\n LUcolj = new Float64Array(rows);\n\n for (j = 0; j < columns; j++) {\n for (i = 0; i < rows; i++) {\n LUcolj[i] = lu.get(i, j);\n }\n\n for (i = 0; i < rows; i++) {\n kmax = Math.min(i, j);\n s = 0;\n for (k = 0; k < kmax; k++) {\n s += lu.get(i, k) * LUcolj[k];\n }\n LUcolj[i] -= s;\n lu.set(i, j, LUcolj[i]);\n }\n\n p = j;\n for (i = j + 1; i < rows; i++) {\n if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n p = i;\n }\n }\n\n if (p !== j) {\n for (k = 0; k < columns; k++) {\n t = lu.get(p, k);\n lu.set(p, k, lu.get(j, k));\n lu.set(j, k, t);\n }\n\n v = pivotVector[p];\n pivotVector[p] = pivotVector[j];\n pivotVector[j] = v;\n\n pivotSign = -pivotSign;\n }\n\n if (j < rows && lu.get(j, j) !== 0) {\n for (i = j + 1; i < rows; i++) {\n lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n }\n }\n }\n\n this.LU = lu;\n this.pivotVector = pivotVector;\n this.pivotSign = pivotSign;\n }\n\n isSingular() {\n let data = this.LU;\n let col = data.columns;\n for (let j = 0; j < col; j++) {\n if (data.get(j, j) === 0) {\n return true;\n }\n }\n return false;\n }\n\n solve(value) {\n value = Matrix.checkMatrix(value);\n\n let lu = this.LU;\n let rows = lu.rows;\n\n if (rows !== value.rows) {\n throw new Error('Invalid matrix dimensions');\n }\n if (this.isSingular()) {\n throw new Error('LU matrix is singular');\n }\n\n let count = value.columns;\n let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n let columns = lu.columns;\n let i, j, k;\n\n for (k = 0; k < columns; k++) {\n for (i = k + 1; i < columns; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n }\n }\n }\n for (k = columns - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n X.set(k, j, X.get(k, j) / lu.get(k, k));\n }\n for (i = 0; i < k; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n }\n }\n }\n return X;\n }\n\n get determinant() {\n let data = this.LU;\n if (!data.isSquare()) {\n throw new Error('Matrix must be square');\n }\n let determinant = this.pivotSign;\n let col = data.columns;\n for (let j = 0; j < col; j++) {\n determinant *= data.get(j, j);\n }\n return determinant;\n }\n\n get lowerTriangularMatrix() {\n let data = this.LU;\n let rows = data.rows;\n let columns = data.columns;\n let X = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n if (i > j) {\n X.set(i, j, data.get(i, j));\n } else if (i === j) {\n X.set(i, j, 1);\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get upperTriangularMatrix() {\n let data = this.LU;\n let rows = data.rows;\n let columns = data.columns;\n let X = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n if (i <= j) {\n X.set(i, j, data.get(i, j));\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get pivotPermutationVector() {\n return Array.from(this.pivotVector);\n }\n}\n\nfunction hypotenuse(a, b) {\n let r = 0;\n if (Math.abs(a) > Math.abs(b)) {\n r = b / a;\n return Math.abs(a) * Math.sqrt(1 + r * r);\n }\n if (b !== 0) {\n r = a / b;\n return Math.abs(b) * Math.sqrt(1 + r * r);\n }\n return 0;\n}\n\nclass QrDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let qr = value.clone();\n let m = value.rows;\n let n = value.columns;\n let rdiag = new Float64Array(n);\n let i, j, k, s;\n\n for (k = 0; k < n; k++) {\n let nrm = 0;\n for (i = k; i < m; i++) {\n nrm = hypotenuse(nrm, qr.get(i, k));\n }\n if (nrm !== 0) {\n if (qr.get(k, k) < 0) {\n nrm = -nrm;\n }\n for (i = k; i < m; i++) {\n qr.set(i, k, qr.get(i, k) / nrm);\n }\n qr.set(k, k, qr.get(k, k) + 1);\n for (j = k + 1; j < n; j++) {\n s = 0;\n for (i = k; i < m; i++) {\n s += qr.get(i, k) * qr.get(i, j);\n }\n s = -s / qr.get(k, k);\n for (i = k; i < m; i++) {\n qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n rdiag[k] = -nrm;\n }\n\n this.QR = qr;\n this.Rdiag = rdiag;\n }\n\n solve(value) {\n value = Matrix.checkMatrix(value);\n\n let qr = this.QR;\n let m = qr.rows;\n\n if (value.rows !== m) {\n throw new Error('Matrix row dimensions must agree');\n }\n if (!this.isFullRank()) {\n throw new Error('Matrix is rank deficient');\n }\n\n let count = value.columns;\n let X = value.clone();\n let n = qr.columns;\n let i, j, k, s;\n\n for (k = 0; k < n; k++) {\n for (j = 0; j < count; j++) {\n s = 0;\n for (i = k; i < m; i++) {\n s += qr.get(i, k) * X.get(i, j);\n }\n s = -s / qr.get(k, k);\n for (i = k; i < m; i++) {\n X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n for (k = n - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n }\n for (i = 0; i < k; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n }\n }\n }\n\n return X.subMatrix(0, n - 1, 0, count - 1);\n }\n\n isFullRank() {\n let columns = this.QR.columns;\n for (let i = 0; i < columns; i++) {\n if (this.Rdiag[i] === 0) {\n return false;\n }\n }\n return true;\n }\n\n get upperTriangularMatrix() {\n let qr = this.QR;\n let n = qr.columns;\n let X = new Matrix(n, n);\n let i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n if (i < j) {\n X.set(i, j, qr.get(i, j));\n } else if (i === j) {\n X.set(i, j, this.Rdiag[i]);\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get orthogonalMatrix() {\n let qr = this.QR;\n let rows = qr.rows;\n let columns = qr.columns;\n let X = new Matrix(rows, columns);\n let i, j, k, s;\n\n for (k = columns - 1; k >= 0; k--) {\n for (i = 0; i < rows; i++) {\n X.set(i, k, 0);\n }\n X.set(k, k, 1);\n for (j = k; j < columns; j++) {\n if (qr.get(k, k) !== 0) {\n s = 0;\n for (i = k; i < rows; i++) {\n s += qr.get(i, k) * X.get(i, j);\n }\n\n s = -s / qr.get(k, k);\n\n for (i = k; i < rows; i++) {\n X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n }\n return X;\n }\n}\n\nclass SingularValueDecomposition {\n constructor(value, options = {}) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n if (value.isEmpty()) {\n throw new Error('Matrix must be non-empty');\n }\n\n let m = value.rows;\n let n = value.columns;\n\n const {\n computeLeftSingularVectors = true,\n computeRightSingularVectors = true,\n autoTranspose = false,\n } = options;\n\n let wantu = Boolean(computeLeftSingularVectors);\n let wantv = Boolean(computeRightSingularVectors);\n\n let swapped = false;\n let a;\n if (m < n) {\n if (!autoTranspose) {\n a = value.clone();\n // eslint-disable-next-line no-console\n console.warn(\n 'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n );\n } else {\n a = value.transpose();\n m = a.rows;\n n = a.columns;\n swapped = true;\n let aux = wantu;\n wantu = wantv;\n wantv = aux;\n }\n } else {\n a = value.clone();\n }\n\n let nu = Math.min(m, n);\n let ni = Math.min(m + 1, n);\n let s = new Float64Array(ni);\n let U = new Matrix(m, nu);\n let V = new Matrix(n, n);\n\n let e = new Float64Array(n);\n let work = new Float64Array(m);\n\n let si = new Float64Array(ni);\n for (let i = 0; i < ni; i++) si[i] = i;\n\n let nct = Math.min(m - 1, n);\n let nrt = Math.max(0, Math.min(n - 2, m));\n let mrc = Math.max(nct, nrt);\n\n for (let k = 0; k < mrc; k++) {\n if (k < nct) {\n s[k] = 0;\n for (let i = k; i < m; i++) {\n s[k] = hypotenuse(s[k], a.get(i, k));\n }\n if (s[k] !== 0) {\n if (a.get(k, k) < 0) {\n s[k] = -s[k];\n }\n for (let i = k; i < m; i++) {\n a.set(i, k, a.get(i, k) / s[k]);\n }\n a.set(k, k, a.get(k, k) + 1);\n }\n s[k] = -s[k];\n }\n\n for (let j = k + 1; j < n; j++) {\n if (k < nct && s[k] !== 0) {\n let t = 0;\n for (let i = k; i < m; i++) {\n t += a.get(i, k) * a.get(i, j);\n }\n t = -t / a.get(k, k);\n for (let i = k; i < m; i++) {\n a.set(i, j, a.get(i, j) + t * a.get(i, k));\n }\n }\n e[j] = a.get(k, j);\n }\n\n if (wantu && k < nct) {\n for (let i = k; i < m; i++) {\n U.set(i, k, a.get(i, k));\n }\n }\n\n if (k < nrt) {\n e[k] = 0;\n for (let i = k + 1; i < n; i++) {\n e[k] = hypotenuse(e[k], e[i]);\n }\n if (e[k] !== 0) {\n if (e[k + 1] < 0) {\n e[k] = 0 - e[k];\n }\n for (let i = k + 1; i < n; i++) {\n e[i] /= e[k];\n }\n e[k + 1] += 1;\n }\n e[k] = -e[k];\n if (k + 1 < m && e[k] !== 0) {\n for (let i = k + 1; i < m; i++) {\n work[i] = 0;\n }\n for (let i = k + 1; i < m; i++) {\n for (let j = k + 1; j < n; j++) {\n work[i] += e[j] * a.get(i, j);\n }\n }\n for (let j = k + 1; j < n; j++) {\n let t = -e[j] / e[k + 1];\n for (let i = k + 1; i < m; i++) {\n a.set(i, j, a.get(i, j) + t * work[i]);\n }\n }\n }\n if (wantv) {\n for (let i = k + 1; i < n; i++) {\n V.set(i, k, e[i]);\n }\n }\n }\n }\n\n let p = Math.min(n, m + 1);\n if (nct < n) {\n s[nct] = a.get(nct, nct);\n }\n if (m < p) {\n s[p - 1] = 0;\n }\n if (nrt + 1 < p) {\n e[nrt] = a.get(nrt, p - 1);\n }\n e[p - 1] = 0;\n\n if (wantu) {\n for (let j = nct; j < nu; j++) {\n for (let i = 0; i < m; i++) {\n U.set(i, j, 0);\n }\n U.set(j, j, 1);\n }\n for (let k = nct - 1; k >= 0; k--) {\n if (s[k] !== 0) {\n for (let j = k + 1; j < nu; j++) {\n let t = 0;\n for (let i = k; i < m; i++) {\n t += U.get(i, k) * U.get(i, j);\n }\n t = -t / U.get(k, k);\n for (let i = k; i < m; i++) {\n U.set(i, j, U.get(i, j) + t * U.get(i, k));\n }\n }\n for (let i = k; i < m; i++) {\n U.set(i, k, -U.get(i, k));\n }\n U.set(k, k, 1 + U.get(k, k));\n for (let i = 0; i < k - 1; i++) {\n U.set(i, k, 0);\n }\n } else {\n for (let i = 0; i < m; i++) {\n U.set(i, k, 0);\n }\n U.set(k, k, 1);\n }\n }\n }\n\n if (wantv) {\n for (let k = n - 1; k >= 0; k--) {\n if (k < nrt && e[k] !== 0) {\n for (let j = k + 1; j < n; j++) {\n let t = 0;\n for (let i = k + 1; i < n; i++) {\n t += V.get(i, k) * V.get(i, j);\n }\n t = -t / V.get(k + 1, k);\n for (let i = k + 1; i < n; i++) {\n V.set(i, j, V.get(i, j) + t * V.get(i, k));\n }\n }\n }\n for (let i = 0; i < n; i++) {\n V.set(i, k, 0);\n }\n V.set(k, k, 1);\n }\n }\n\n let pp = p - 1;\n let eps = Number.EPSILON;\n while (p > 0) {\n let k, kase;\n for (k = p - 2; k >= -1; k--) {\n if (k === -1) {\n break;\n }\n const alpha =\n Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n e[k] = 0;\n break;\n }\n }\n if (k === p - 2) {\n kase = 4;\n } else {\n let ks;\n for (ks = p - 1; ks >= k; ks--) {\n if (ks === k) {\n break;\n }\n let t =\n (ks !== p ? Math.abs(e[ks]) : 0) +\n (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n if (Math.abs(s[ks]) <= eps * t) {\n s[ks] = 0;\n break;\n }\n }\n if (ks === k) {\n kase = 3;\n } else if (ks === p - 1) {\n kase = 1;\n } else {\n kase = 2;\n k = ks;\n }\n }\n\n k++;\n\n switch (kase) {\n case 1: {\n let f = e[p - 2];\n e[p - 2] = 0;\n for (let j = p - 2; j >= k; j--) {\n let t = hypotenuse(s[j], f);\n let cs = s[j] / t;\n let sn = f / t;\n s[j] = t;\n if (j !== k) {\n f = -sn * e[j - 1];\n e[j - 1] = cs * e[j - 1];\n }\n if (wantv) {\n for (let i = 0; i < n; i++) {\n t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n V.set(i, j, t);\n }\n }\n }\n break;\n }\n case 2: {\n let f = e[k - 1];\n e[k - 1] = 0;\n for (let j = k; j < p; j++) {\n let t = hypotenuse(s[j], f);\n let cs = s[j] / t;\n let sn = f / t;\n s[j] = t;\n f = -sn * e[j];\n e[j] = cs * e[j];\n if (wantu) {\n for (let i = 0; i < m; i++) {\n t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n U.set(i, j, t);\n }\n }\n }\n break;\n }\n case 3: {\n const scale = Math.max(\n Math.abs(s[p - 1]),\n Math.abs(s[p - 2]),\n Math.abs(e[p - 2]),\n Math.abs(s[k]),\n Math.abs(e[k]),\n );\n const sp = s[p - 1] / scale;\n const spm1 = s[p - 2] / scale;\n const epm1 = e[p - 2] / scale;\n const sk = s[k] / scale;\n const ek = e[k] / scale;\n const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n const c = sp * epm1 * (sp * epm1);\n let shift = 0;\n if (b !== 0 || c !== 0) {\n if (b < 0) {\n shift = 0 - Math.sqrt(b * b + c);\n } else {\n shift = Math.sqrt(b * b + c);\n }\n shift = c / (b + shift);\n }\n let f = (sk + sp) * (sk - sp) + shift;\n let g = sk * ek;\n for (let j = k; j < p - 1; j++) {\n let t = hypotenuse(f, g);\n if (t === 0) t = Number.MIN_VALUE;\n let cs = f / t;\n let sn = g / t;\n if (j !== k) {\n e[j - 1] = t;\n }\n f = cs * s[j] + sn * e[j];\n e[j] = cs * e[j] - sn * s[j];\n g = sn * s[j + 1];\n s[j + 1] = cs * s[j + 1];\n if (wantv) {\n for (let i = 0; i < n; i++) {\n t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n V.set(i, j, t);\n }\n }\n t = hypotenuse(f, g);\n if (t === 0) t = Number.MIN_VALUE;\n cs = f / t;\n sn = g / t;\n s[j] = t;\n f = cs * e[j] + sn * s[j + 1];\n s[j + 1] = -sn * e[j] + cs * s[j + 1];\n g = sn * e[j + 1];\n e[j + 1] = cs * e[j + 1];\n if (wantu && j < m - 1) {\n for (let i = 0; i < m; i++) {\n t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n U.set(i, j, t);\n }\n }\n }\n e[p - 2] = f;\n break;\n }\n case 4: {\n if (s[k] <= 0) {\n s[k] = s[k] < 0 ? -s[k] : 0;\n if (wantv) {\n for (let i = 0; i <= pp; i++) {\n V.set(i, k, -V.get(i, k));\n }\n }\n }\n while (k < pp) {\n if (s[k] >= s[k + 1]) {\n break;\n }\n let t = s[k];\n s[k] = s[k + 1];\n s[k + 1] = t;\n if (wantv && k < n - 1) {\n for (let i = 0; i < n; i++) {\n t = V.get(i, k + 1);\n V.set(i, k + 1, V.get(i, k));\n V.set(i, k, t);\n }\n }\n if (wantu && k < m - 1) {\n for (let i = 0; i < m; i++) {\n t = U.get(i, k + 1);\n U.set(i, k + 1, U.get(i, k));\n U.set(i, k, t);\n }\n }\n k++;\n }\n p--;\n break;\n }\n // no default\n }\n }\n\n if (swapped) {\n let tmp = V;\n V = U;\n U = tmp;\n }\n\n this.m = m;\n this.n = n;\n this.s = s;\n this.U = U;\n this.V = V;\n }\n\n solve(value) {\n let Y = value;\n let e = this.threshold;\n let scols = this.s.length;\n let Ls = Matrix.zeros(scols, scols);\n\n for (let i = 0; i < scols; i++) {\n if (Math.abs(this.s[i]) <= e) {\n Ls.set(i, i, 0);\n } else {\n Ls.set(i, i, 1 / this.s[i]);\n }\n }\n\n let U = this.U;\n let V = this.rightSingularVectors;\n\n let VL = V.mmul(Ls);\n let vrows = V.rows;\n let urows = U.rows;\n let VLU = Matrix.zeros(vrows, urows);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < urows; j++) {\n let sum = 0;\n for (let k = 0; k < scols; k++) {\n sum += VL.get(i, k) * U.get(j, k);\n }\n VLU.set(i, j, sum);\n }\n }\n\n return VLU.mmul(Y);\n }\n\n solveForDiagonal(value) {\n return this.solve(Matrix.diag(value));\n }\n\n inverse() {\n let V = this.V;\n let e = this.threshold;\n let vrows = V.rows;\n let vcols = V.columns;\n let X = new Matrix(vrows, this.s.length);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < vcols; j++) {\n if (Math.abs(this.s[j]) > e) {\n X.set(i, j, V.get(i, j) / this.s[j]);\n }\n }\n }\n\n let U = this.U;\n\n let urows = U.rows;\n let ucols = U.columns;\n let Y = new Matrix(vrows, urows);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < urows; j++) {\n let sum = 0;\n for (let k = 0; k < ucols; k++) {\n sum += X.get(i, k) * U.get(j, k);\n }\n Y.set(i, j, sum);\n }\n }\n\n return Y;\n }\n\n get condition() {\n return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n }\n\n get norm2() {\n return this.s[0];\n }\n\n get rank() {\n let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n let r = 0;\n let s = this.s;\n for (let i = 0, ii = s.length; i < ii; i++) {\n if (s[i] > tol) {\n r++;\n }\n }\n return r;\n }\n\n get diagonal() {\n return Array.from(this.s);\n }\n\n get threshold() {\n return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n }\n\n get leftSingularVectors() {\n return this.U;\n }\n\n get rightSingularVectors() {\n return this.V;\n }\n\n get diagonalMatrix() {\n return Matrix.diag(this.s);\n }\n}\n\nfunction inverse(matrix, useSVD = false) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (useSVD) {\n return new SingularValueDecomposition(matrix).inverse();\n } else {\n return solve(matrix, Matrix.eye(matrix.rows));\n }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n if (useSVD) {\n return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n } else {\n return leftHandSide.isSquare()\n ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n : new QrDecomposition(leftHandSide).solve(rightHandSide);\n }\n}\n\nfunction determinant(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isSquare()) {\n if (matrix.columns === 0) {\n return 1;\n }\n\n let a, b, c, d;\n if (matrix.columns === 2) {\n // 2 x 2 matrix\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(1, 0);\n d = matrix.get(1, 1);\n\n return a * d - b * c;\n } else if (matrix.columns === 3) {\n // 3 x 3 matrix\n let subMatrix0, subMatrix1, subMatrix2;\n subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(0, 2);\n\n return (\n a * determinant(subMatrix0) -\n b * determinant(subMatrix1) +\n c * determinant(subMatrix2)\n );\n } else {\n // general purpose determinant using the LU decomposition\n return new LuDecomposition(matrix).determinant;\n }\n } else {\n throw Error('determinant can only be calculated for a square matrix');\n }\n}\n\nfunction xrange(n, exception) {\n let range = [];\n for (let i = 0; i < n; i++) {\n if (i !== exception) {\n range.push(i);\n }\n }\n return range;\n}\n\nfunction dependenciesOneRow(\n error,\n matrix,\n index,\n thresholdValue = 10e-10,\n thresholdError = 10e-10,\n) {\n if (error > thresholdError) {\n return new Array(matrix.rows + 1).fill(0);\n } else {\n let returnArray = matrix.addRow(index, [0]);\n for (let i = 0; i < returnArray.rows; i++) {\n if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n returnArray.set(i, 0, 0);\n }\n }\n return returnArray.to1DArray();\n }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n matrix = Matrix.checkMatrix(matrix);\n\n let n = matrix.rows;\n let results = new Matrix(n, n);\n\n for (let i = 0; i < n; i++) {\n let b = Matrix.columnVector(matrix.getRow(i));\n let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n let svd = new SingularValueDecomposition(Abis);\n let x = svd.solve(b);\n let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n results.setRow(\n i,\n dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n );\n }\n return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isEmpty()) {\n // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n // (0xn)*(nx0)*(0xn) = 0xn\n // (nx0)*(0xn)*(nx0) = nx0\n return matrix.transpose();\n }\n let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n let U = svdSolution.leftSingularVectors;\n let V = svdSolution.rightSingularVectors;\n let s = svdSolution.diagonal;\n\n for (let i = 0; i < s.length; i++) {\n if (Math.abs(s[i]) > threshold) {\n s[i] = 1.0 / s[i];\n } else {\n s[i] = 0.0;\n }\n }\n\n return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = new Matrix(xMatrix);\n let yIsSame = false;\n if (\n typeof yMatrix === 'object' &&\n !Matrix.isMatrix(yMatrix) &&\n !isAnyArray.isAnyArray(yMatrix)\n ) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = new Matrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n const { center = true } = options;\n if (center) {\n xMatrix = xMatrix.center('column');\n if (!yIsSame) {\n yMatrix = yMatrix.center('column');\n }\n }\n const cov = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < cov.rows; i++) {\n for (let j = 0; j < cov.columns; j++) {\n cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n }\n }\n return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = new Matrix(xMatrix);\n let yIsSame = false;\n if (\n typeof yMatrix === 'object' &&\n !Matrix.isMatrix(yMatrix) &&\n !isAnyArray.isAnyArray(yMatrix)\n ) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = new Matrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n\n const { center = true, scale = true } = options;\n if (center) {\n xMatrix.center('column');\n if (!yIsSame) {\n yMatrix.center('column');\n }\n }\n if (scale) {\n xMatrix.scale('column');\n if (!yIsSame) {\n yMatrix.scale('column');\n }\n }\n\n const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n const sdy = yIsSame\n ? sdx\n : yMatrix.standardDeviation('column', { unbiased: true });\n\n const corr = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < corr.rows; i++) {\n for (let j = 0; j < corr.columns; j++) {\n corr.set(\n i,\n j,\n corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n );\n }\n }\n return corr;\n}\n\nclass EigenvalueDecomposition {\n constructor(matrix, options = {}) {\n const { assumeSymmetric = false } = options;\n\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (!matrix.isSquare()) {\n throw new Error('Matrix is not a square matrix');\n }\n\n if (matrix.isEmpty()) {\n throw new Error('Matrix must be non-empty');\n }\n\n let n = matrix.columns;\n let V = new Matrix(n, n);\n let d = new Float64Array(n);\n let e = new Float64Array(n);\n let value = matrix;\n let i, j;\n\n let isSymmetric = false;\n if (assumeSymmetric) {\n isSymmetric = true;\n } else {\n isSymmetric = matrix.isSymmetric();\n }\n\n if (isSymmetric) {\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, value.get(i, j));\n }\n }\n tred2(n, e, d, V);\n tql2(n, e, d, V);\n } else {\n let H = new Matrix(n, n);\n let ort = new Float64Array(n);\n for (j = 0; j < n; j++) {\n for (i = 0; i < n; i++) {\n H.set(i, j, value.get(i, j));\n }\n }\n orthes(n, H, ort, V);\n hqr2(n, e, d, V, H);\n }\n\n this.n = n;\n this.e = e;\n this.d = d;\n this.V = V;\n }\n\n get realEigenvalues() {\n return Array.from(this.d);\n }\n\n get imaginaryEigenvalues() {\n return Array.from(this.e);\n }\n\n get eigenvectorMatrix() {\n return this.V;\n }\n\n get diagonalMatrix() {\n let n = this.n;\n let e = this.e;\n let d = this.d;\n let X = new Matrix(n, n);\n let i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n X.set(i, j, 0);\n }\n X.set(i, i, d[i]);\n if (e[i] > 0) {\n X.set(i, i + 1, e[i]);\n } else if (e[i] < 0) {\n X.set(i, i - 1, e[i]);\n }\n }\n return X;\n }\n}\n\nfunction tred2(n, e, d, V) {\n let f, g, h, i, j, k, hh, scale;\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n }\n\n for (i = n - 1; i > 0; i--) {\n scale = 0;\n h = 0;\n for (k = 0; k < i; k++) {\n scale = scale + Math.abs(d[k]);\n }\n\n if (scale === 0) {\n e[i] = d[i - 1];\n for (j = 0; j < i; j++) {\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n V.set(j, i, 0);\n }\n } else {\n for (k = 0; k < i; k++) {\n d[k] /= scale;\n h += d[k] * d[k];\n }\n\n f = d[i - 1];\n g = Math.sqrt(h);\n if (f > 0) {\n g = -g;\n }\n\n e[i] = scale * g;\n h = h - f * g;\n d[i - 1] = f - g;\n for (j = 0; j < i; j++) {\n e[j] = 0;\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n V.set(j, i, f);\n g = e[j] + V.get(j, j) * f;\n for (k = j + 1; k <= i - 1; k++) {\n g += V.get(k, j) * d[k];\n e[k] += V.get(k, j) * f;\n }\n e[j] = g;\n }\n\n f = 0;\n for (j = 0; j < i; j++) {\n e[j] /= h;\n f += e[j] * d[j];\n }\n\n hh = f / (h + h);\n for (j = 0; j < i; j++) {\n e[j] -= hh * d[j];\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n g = e[j];\n for (k = j; k <= i - 1; k++) {\n V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n }\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n }\n }\n d[i] = h;\n }\n\n for (i = 0; i < n - 1; i++) {\n V.set(n - 1, i, V.get(i, i));\n V.set(i, i, 1);\n h = d[i + 1];\n if (h !== 0) {\n for (k = 0; k <= i; k++) {\n d[k] = V.get(k, i + 1) / h;\n }\n\n for (j = 0; j <= i; j++) {\n g = 0;\n for (k = 0; k <= i; k++) {\n g += V.get(k, i + 1) * V.get(k, j);\n }\n for (k = 0; k <= i; k++) {\n V.set(k, j, V.get(k, j) - g * d[k]);\n }\n }\n }\n\n for (k = 0; k <= i; k++) {\n V.set(k, i + 1, 0);\n }\n }\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n V.set(n - 1, j, 0);\n }\n\n V.set(n - 1, n - 1, 1);\n e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n for (i = 1; i < n; i++) {\n e[i - 1] = e[i];\n }\n\n e[n - 1] = 0;\n\n let f = 0;\n let tst1 = 0;\n let eps = Number.EPSILON;\n\n for (l = 0; l < n; l++) {\n tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n m = l;\n while (m < n) {\n if (Math.abs(e[m]) <= eps * tst1) {\n break;\n }\n m++;\n }\n\n if (m > l) {\n do {\n\n g = d[l];\n p = (d[l + 1] - g) / (2 * e[l]);\n r = hypotenuse(p, 1);\n if (p < 0) {\n r = -r;\n }\n\n d[l] = e[l] / (p + r);\n d[l + 1] = e[l] * (p + r);\n dl1 = d[l + 1];\n h = g - d[l];\n for (i = l + 2; i < n; i++) {\n d[i] -= h;\n }\n\n f = f + h;\n\n p = d[m];\n c = 1;\n c2 = c;\n c3 = c;\n el1 = e[l + 1];\n s = 0;\n s2 = 0;\n for (i = m - 1; i >= l; i--) {\n c3 = c2;\n c2 = c;\n s2 = s;\n g = c * e[i];\n h = c * p;\n r = hypotenuse(p, e[i]);\n e[i + 1] = s * r;\n s = e[i] / r;\n c = p / r;\n p = c * d[i] - s * g;\n d[i + 1] = h + s * (c * g + s * d[i]);\n\n for (k = 0; k < n; k++) {\n h = V.get(k, i + 1);\n V.set(k, i + 1, s * V.get(k, i) + c * h);\n V.set(k, i, c * V.get(k, i) - s * h);\n }\n }\n\n p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n e[l] = s * p;\n d[l] = c * p;\n } while (Math.abs(e[l]) > eps * tst1);\n }\n d[l] = d[l] + f;\n e[l] = 0;\n }\n\n for (i = 0; i < n - 1; i++) {\n k = i;\n p = d[i];\n for (j = i + 1; j < n; j++) {\n if (d[j] < p) {\n k = j;\n p = d[j];\n }\n }\n\n if (k !== i) {\n d[k] = d[i];\n d[i] = p;\n for (j = 0; j < n; j++) {\n p = V.get(j, i);\n V.set(j, i, V.get(j, k));\n V.set(j, k, p);\n }\n }\n }\n}\n\nfunction orthes(n, H, ort, V) {\n let low = 0;\n let high = n - 1;\n let f, g, h, i, j, m;\n let scale;\n\n for (m = low + 1; m <= high - 1; m++) {\n scale = 0;\n for (i = m; i <= high; i++) {\n scale = scale + Math.abs(H.get(i, m - 1));\n }\n\n if (scale !== 0) {\n h = 0;\n for (i = high; i >= m; i--) {\n ort[i] = H.get(i, m - 1) / scale;\n h += ort[i] * ort[i];\n }\n\n g = Math.sqrt(h);\n if (ort[m] > 0) {\n g = -g;\n }\n\n h = h - ort[m] * g;\n ort[m] = ort[m] - g;\n\n for (j = m; j < n; j++) {\n f = 0;\n for (i = high; i >= m; i--) {\n f += ort[i] * H.get(i, j);\n }\n\n f = f / h;\n for (i = m; i <= high; i++) {\n H.set(i, j, H.get(i, j) - f * ort[i]);\n }\n }\n\n for (i = 0; i <= high; i++) {\n f = 0;\n for (j = high; j >= m; j--) {\n f += ort[j] * H.get(i, j);\n }\n\n f = f / h;\n for (j = m; j <= high; j++) {\n H.set(i, j, H.get(i, j) - f * ort[j]);\n }\n }\n\n ort[m] = scale * ort[m];\n H.set(m, m - 1, scale * g);\n }\n }\n\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, i === j ? 1 : 0);\n }\n }\n\n for (m = high - 1; m >= low + 1; m--) {\n if (H.get(m, m - 1) !== 0) {\n for (i = m + 1; i <= high; i++) {\n ort[i] = H.get(i, m - 1);\n }\n\n for (j = m; j <= high; j++) {\n g = 0;\n for (i = m; i <= high; i++) {\n g += ort[i] * V.get(i, j);\n }\n\n g = g / ort[m] / H.get(m, m - 1);\n for (i = m; i <= high; i++) {\n V.set(i, j, V.get(i, j) + g * ort[i]);\n }\n }\n }\n }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n let n = nn - 1;\n let low = 0;\n let high = nn - 1;\n let eps = Number.EPSILON;\n let exshift = 0;\n let norm = 0;\n let p = 0;\n let q = 0;\n let r = 0;\n let s = 0;\n let z = 0;\n let iter = 0;\n let i, j, k, l, m, t, w, x, y;\n let ra, sa, vr, vi;\n let notlast, cdivres;\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n d[i] = H.get(i, i);\n e[i] = 0;\n }\n\n for (j = Math.max(i - 1, 0); j < nn; j++) {\n norm = norm + Math.abs(H.get(i, j));\n }\n }\n\n while (n >= low) {\n l = n;\n while (l > low) {\n s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n if (s === 0) {\n s = norm;\n }\n if (Math.abs(H.get(l, l - 1)) < eps * s) {\n break;\n }\n l--;\n }\n\n if (l === n) {\n H.set(n, n, H.get(n, n) + exshift);\n d[n] = H.get(n, n);\n e[n] = 0;\n n--;\n iter = 0;\n } else if (l === n - 1) {\n w = H.get(n, n - 1) * H.get(n - 1, n);\n p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n q = p * p + w;\n z = Math.sqrt(Math.abs(q));\n H.set(n, n, H.get(n, n) + exshift);\n H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n x = H.get(n, n);\n\n if (q >= 0) {\n z = p >= 0 ? p + z : p - z;\n d[n - 1] = x + z;\n d[n] = d[n - 1];\n if (z !== 0) {\n d[n] = x - w / z;\n }\n e[n - 1] = 0;\n e[n] = 0;\n x = H.get(n, n - 1);\n s = Math.abs(x) + Math.abs(z);\n p = x / s;\n q = z / s;\n r = Math.sqrt(p * p + q * q);\n p = p / r;\n q = q / r;\n\n for (j = n - 1; j < nn; j++) {\n z = H.get(n - 1, j);\n H.set(n - 1, j, q * z + p * H.get(n, j));\n H.set(n, j, q * H.get(n, j) - p * z);\n }\n\n for (i = 0; i <= n; i++) {\n z = H.get(i, n - 1);\n H.set(i, n - 1, q * z + p * H.get(i, n));\n H.set(i, n, q * H.get(i, n) - p * z);\n }\n\n for (i = low; i <= high; i++) {\n z = V.get(i, n - 1);\n V.set(i, n - 1, q * z + p * V.get(i, n));\n V.set(i, n, q * V.get(i, n) - p * z);\n }\n } else {\n d[n - 1] = x + p;\n d[n] = x + p;\n e[n - 1] = z;\n e[n] = -z;\n }\n\n n = n - 2;\n iter = 0;\n } else {\n x = H.get(n, n);\n y = 0;\n w = 0;\n if (l < n) {\n y = H.get(n - 1, n - 1);\n w = H.get(n, n - 1) * H.get(n - 1, n);\n }\n\n if (iter === 10) {\n exshift += x;\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - x);\n }\n s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n // eslint-disable-next-line no-multi-assign\n x = y = 0.75 * s;\n w = -0.4375 * s * s;\n }\n\n if (iter === 30) {\n s = (y - x) / 2;\n s = s * s + w;\n if (s > 0) {\n s = Math.sqrt(s);\n if (y < x) {\n s = -s;\n }\n s = x - w / ((y - x) / 2 + s);\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - s);\n }\n exshift += s;\n // eslint-disable-next-line no-multi-assign\n x = y = w = 0.964;\n }\n }\n\n iter = iter + 1;\n\n m = n - 2;\n while (m >= l) {\n z = H.get(m, m);\n r = x - z;\n s = y - z;\n p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n q = H.get(m + 1, m + 1) - z - r - s;\n r = H.get(m + 2, m + 1);\n s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n p = p / s;\n q = q / s;\n r = r / s;\n if (m === l) {\n break;\n }\n if (\n Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n eps *\n (Math.abs(p) *\n (Math.abs(H.get(m - 1, m - 1)) +\n Math.abs(z) +\n Math.abs(H.get(m + 1, m + 1))))\n ) {\n break;\n }\n m--;\n }\n\n for (i = m + 2; i <= n; i++) {\n H.set(i, i - 2, 0);\n if (i > m + 2) {\n H.set(i, i - 3, 0);\n }\n }\n\n for (k = m; k <= n - 1; k++) {\n notlast = k !== n - 1;\n if (k !== m) {\n p = H.get(k, k - 1);\n q = H.get(k + 1, k - 1);\n r = notlast ? H.get(k + 2, k - 1) : 0;\n x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n if (x !== 0) {\n p = p / x;\n q = q / x;\n r = r / x;\n }\n }\n\n if (x === 0) {\n break;\n }\n\n s = Math.sqrt(p * p + q * q + r * r);\n if (p < 0) {\n s = -s;\n }\n\n if (s !== 0) {\n if (k !== m) {\n H.set(k, k - 1, -s * x);\n } else if (l !== m) {\n H.set(k, k - 1, -H.get(k, k - 1));\n }\n\n p = p + s;\n x = p / s;\n y = q / s;\n z = r / s;\n q = q / p;\n r = r / p;\n\n for (j = k; j < nn; j++) {\n p = H.get(k, j) + q * H.get(k + 1, j);\n if (notlast) {\n p = p + r * H.get(k + 2, j);\n H.set(k + 2, j, H.get(k + 2, j) - p * z);\n }\n\n H.set(k, j, H.get(k, j) - p * x);\n H.set(k + 1, j, H.get(k + 1, j) - p * y);\n }\n\n for (i = 0; i <= Math.min(n, k + 3); i++) {\n p = x * H.get(i, k) + y * H.get(i, k + 1);\n if (notlast) {\n p = p + z * H.get(i, k + 2);\n H.set(i, k + 2, H.get(i, k + 2) - p * r);\n }\n\n H.set(i, k, H.get(i, k) - p);\n H.set(i, k + 1, H.get(i, k + 1) - p * q);\n }\n\n for (i = low; i <= high; i++) {\n p = x * V.get(i, k) + y * V.get(i, k + 1);\n if (notlast) {\n p = p + z * V.get(i, k + 2);\n V.set(i, k + 2, V.get(i, k + 2) - p * r);\n }\n\n V.set(i, k, V.get(i, k) - p);\n V.set(i, k + 1, V.get(i, k + 1) - p * q);\n }\n }\n }\n }\n }\n\n if (norm === 0) {\n return;\n }\n\n for (n = nn - 1; n >= 0; n--) {\n p = d[n];\n q = e[n];\n\n if (q === 0) {\n l = n;\n H.set(n, n, 1);\n for (i = n - 1; i >= 0; i--) {\n w = H.get(i, i) - p;\n r = 0;\n for (j = l; j <= n; j++) {\n r = r + H.get(i, j) * H.get(j, n);\n }\n\n if (e[i] < 0) {\n z = w;\n s = r;\n } else {\n l = i;\n if (e[i] === 0) {\n H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n t = (x * s - z * r) / q;\n H.set(i, n, t);\n H.set(\n i + 1,\n n,\n Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n );\n }\n\n t = Math.abs(H.get(i, n));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n } else if (q < 0) {\n l = n - 1;\n\n if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n H.set(n - 1, n - 1, q / H.get(n, n - 1));\n H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n } else {\n cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n H.set(n - 1, n - 1, cdivres[0]);\n H.set(n - 1, n, cdivres[1]);\n }\n\n H.set(n, n - 1, 0);\n H.set(n, n, 1);\n for (i = n - 2; i >= 0; i--) {\n ra = 0;\n sa = 0;\n for (j = l; j <= n; j++) {\n ra = ra + H.get(i, j) * H.get(j, n - 1);\n sa = sa + H.get(i, j) * H.get(j, n);\n }\n\n w = H.get(i, i) - p;\n\n if (e[i] < 0) {\n z = w;\n r = ra;\n s = sa;\n } else {\n l = i;\n if (e[i] === 0) {\n cdivres = cdiv(-ra, -sa, w, q);\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n vi = (d[i] - p) * 2 * q;\n if (vr === 0 && vi === 0) {\n vr =\n eps *\n norm *\n (Math.abs(w) +\n Math.abs(q) +\n Math.abs(x) +\n Math.abs(y) +\n Math.abs(z));\n }\n cdivres = cdiv(\n x * r - z * ra + q * sa,\n x * s - z * sa - q * ra,\n vr,\n vi,\n );\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n H.set(\n i + 1,\n n - 1,\n (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n );\n H.set(\n i + 1,\n n,\n (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n );\n } else {\n cdivres = cdiv(\n -r - y * H.get(i, n - 1),\n -s - y * H.get(i, n),\n z,\n q,\n );\n H.set(i + 1, n - 1, cdivres[0]);\n H.set(i + 1, n, cdivres[1]);\n }\n }\n\n t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n - 1, H.get(j, n - 1) / t);\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n }\n }\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n for (j = i; j < nn; j++) {\n V.set(i, j, H.get(i, j));\n }\n }\n }\n\n for (j = nn - 1; j >= low; j--) {\n for (i = low; i <= high; i++) {\n z = 0;\n for (k = low; k <= Math.min(j, high); k++) {\n z = z + V.get(i, k) * H.get(k, j);\n }\n V.set(i, j, z);\n }\n }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n let r, d;\n if (Math.abs(yr) > Math.abs(yi)) {\n r = yi / yr;\n d = yr + r * yi;\n return [(xr + r * xi) / d, (xi - r * xr) / d];\n } else {\n r = yr / yi;\n d = yi + r * yr;\n return [(r * xr + xi) / d, (r * xi - xr) / d];\n }\n}\n\nclass CholeskyDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n if (!value.isSymmetric()) {\n throw new Error('Matrix is not symmetric');\n }\n\n let a = value;\n let dimension = a.rows;\n let l = new Matrix(dimension, dimension);\n let positiveDefinite = true;\n let i, j, k;\n\n for (j = 0; j < dimension; j++) {\n let d = 0;\n for (k = 0; k < j; k++) {\n let s = 0;\n for (i = 0; i < k; i++) {\n s += l.get(k, i) * l.get(j, i);\n }\n s = (a.get(j, k) - s) / l.get(k, k);\n l.set(j, k, s);\n d = d + s * s;\n }\n\n d = a.get(j, j) - d;\n\n positiveDefinite &&= d > 0;\n l.set(j, j, Math.sqrt(Math.max(d, 0)));\n for (k = j + 1; k < dimension; k++) {\n l.set(j, k, 0);\n }\n }\n\n this.L = l;\n this.positiveDefinite = positiveDefinite;\n }\n\n isPositiveDefinite() {\n return this.positiveDefinite;\n }\n\n solve(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let l = this.L;\n let dimension = l.rows;\n\n if (value.rows !== dimension) {\n throw new Error('Matrix dimensions do not match');\n }\n if (this.isPositiveDefinite() === false) {\n throw new Error('Matrix is not positive definite');\n }\n\n let count = value.columns;\n let B = value.clone();\n let i, j, k;\n\n for (k = 0; k < dimension; k++) {\n for (j = 0; j < count; j++) {\n for (i = 0; i < k; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n for (k = dimension - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n for (i = k + 1; i < dimension; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n return B;\n }\n\n get lowerTriangularMatrix() {\n return this.L;\n }\n}\n\nclass nipals {\n constructor(X, options = {}) {\n X = WrapperMatrix2D.checkMatrix(X);\n let { Y } = options;\n const {\n scaleScores = false,\n maxIterations = 1000,\n terminationCriteria = 1e-10,\n } = options;\n\n let u;\n if (Y) {\n if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\n Y = Matrix.columnVector(Y);\n } else {\n Y = WrapperMatrix2D.checkMatrix(Y);\n }\n if (Y.rows !== X.rows) {\n throw new Error('Y should have the same number of rows as X');\n }\n u = Y.getColumnVector(0);\n } else {\n u = X.getColumnVector(0);\n }\n\n let diff = 1;\n let t, q, w, tOld;\n\n for (\n let counter = 0;\n counter < maxIterations && diff > terminationCriteria;\n counter++\n ) {\n w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n w = w.div(w.norm());\n\n t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n if (counter > 0) {\n diff = t.clone().sub(tOld).pow(2).sum();\n }\n tOld = t.clone();\n\n if (Y) {\n q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n q = q.div(q.norm());\n\n u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n } else {\n u = t;\n }\n }\n\n if (Y) {\n let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n p = p.div(p.norm());\n let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n let yResidual = Y.clone().sub(\n t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n );\n\n this.t = t;\n this.p = p.transpose();\n this.w = w.transpose();\n this.q = q;\n this.u = u;\n this.s = t.transpose().mmul(t);\n this.xResidual = xResidual;\n this.yResidual = yResidual;\n this.betas = residual;\n } else {\n this.w = w.transpose();\n this.s = t.transpose().mmul(t).sqrt();\n if (scaleScores) {\n this.t = t.clone().div(this.s.get(0, 0));\n } else {\n this.t = t;\n }\n this.xResidual = X.sub(t.mmul(w.transpose()));\n }\n }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n const tag = toString.call(value);\n return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isAnyArray(input)) {\n throw new TypeError('input must be an array');\n } else if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var output;\n\n if (options.output !== undefined) {\n if (!isAnyArray(options.output)) {\n throw new TypeError('output option must be an array if specified');\n }\n\n output = options.output;\n } else {\n output = new Array(input.length);\n }\n\n var currentMin = min(input);\n var currentMax = max(input);\n\n if (currentMin === currentMax) {\n throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n }\n\n var _options$min = options.min,\n minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n _options$max = options.max,\n maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n if (minValue >= maxValue) {\n throw new RangeError('min option must be smaller than max option');\n }\n\n var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n for (var i = 0; i < input.length; i++) {\n output[i] = (input[i] - currentMin) * factor + minValue;\n }\n\n return output;\n}\n\nexport { rescale as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isAnyArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var _options$fromIndex = options.fromIndex,\n fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n _options$toIndex = options.toIndex,\n toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n throw new Error('fromIndex must be a positive integer smaller than length');\n }\n\n if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n }\n\n var minValue = input[fromIndex];\n\n for (var i = fromIndex + 1; i < toIndex; i++) {\n if (input[i] < minValue) minValue = input[i];\n }\n\n return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isAnyArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var _options$fromIndex = options.fromIndex,\n fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n _options$toIndex = options.toIndex,\n toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n throw new Error('fromIndex must be a positive integer smaller than length');\n }\n\n if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n }\n\n var maxValue = input[fromIndex];\n\n for (var i = fromIndex + 1; i < toIndex; i++) {\n if (input[i] > maxValue) maxValue = input[i];\n }\n\n return maxValue;\n}\n\nexport { max as default };\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n"],"names":["isAnyArray","rescale","indent","repeat","indentData","inspectMatrixWithOptions","matrix","options","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","rows","columns","maxI","Math","min","maxJ","result","loop","i","j","get","line","push","formatNumber","join","length","inspectData","num","formatNumber2","padEnd","len","str","toString","fix","toFixed","max","startsWith","exp","toExponential","slice","checkRowIndex","index","outer","RangeError","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","TypeError","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","arguments","checkNumber","newArray","value","array","checkNonEmpty","isEmpty","Error","AbstractMatrix","from1DArray","newRows","newColumns","newData","newMatrix","Matrix","row","column","set","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","Number","isInteger","interval","round","eye","undefined","this","diag","data","l","matrix1","matrix2","checkMatrix","isMatrix","klass","size","apply","callback","call","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","factor","reducedEchelonForm","m","n","maxRow","p","pivot","setSubMatrix","neg","mulS","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","Array","NEGATIVE_INFINITY","maxIndex","v","idx","POSITIVE_INFINITY","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","sqrt","dot","cumulativeSum","sum","vector2","vector1","mmul","other","Bcolj","Float64Array","s","mpow","scalar","bb","e","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","y","x","r1","c1","r2","c2","embed","mat","cols","r","c","resultat","console","warn","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","add","sub","scaleRows","isFinite","output","scaleColumns","flipRows","middle","ceil","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","from","to","entries","sumByRow","sumByColumn","sumAll","product","productByRow","productByColumn","productAll","mean","variance","unbiased","sum1","sum2","varianceByRow","varianceByColumn","varianceAll","standardDeviation","center","centerByRow","centerByColumn","centerAll","scale","getScaleByRow","scaleByRow","getScaleByColumn","scaleByColumn","divider","getScaleAll","scaleAll","Symbol","iterator","col","values","prototype","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","super","arrayData","every","element","removeRow","splice","addRow","removeColumn","newRow","addColumn","addS","addM","subS","subM","subtract","subtractS","subtractM","mul","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","clz32","cos","cosh","expm1","floor","fround","log","log1p","log10","log2","sign","sin","sinh","tan","tanh","trunc","pow","arg0","powS","powM","installMathOperations","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","reverse","sideIndex","toCompact","compact","fromCompact","compactSize","JSON","stringify","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","BaseView","MatrixSelectionView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","LuDecomposition","t","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","isNaN","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","leftHandSide","rightHandSide","useSVD","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","EigenvalueDecomposition","assumeSymmetric","d","hh","tred2","dl1","c3","el1","s2","tst1","tql2","H","ort","high","low","orthes","nn","w","ra","sa","vr","vi","notlast","cdivres","exshift","z","iter","cdiv","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","B","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","diff","counter","xResidual","residual","yResidual","betas","exports","xMatrix","yMatrix","yIsSame","sdx","sdy","corr","cov","subMatrix0","subMatrix1","subMatrix2","results","Abis","svdSolution","Object","tag","endsWith","includes","input","currentMin","_options$fromIndex","fromIndex","_options$toIndex","toIndex","minValue","currentMax","maxValue","_options$min","autoMinMax","_options$max"],"sourceRoot":""}