@datagrok/eda 1.4.4 → 1.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/111.js +2 -0
- package/dist/111.js.map +1 -0
- package/dist/128.js +2 -0
- package/dist/128.js.map +1 -0
- package/dist/153.js +2 -0
- package/dist/153.js.map +1 -0
- package/dist/23.js +2 -0
- package/dist/23.js.map +1 -0
- package/dist/234.js +2 -0
- package/dist/234.js.map +1 -0
- package/dist/242.js +2 -0
- package/dist/242.js.map +1 -0
- package/dist/260.js +2 -0
- package/dist/260.js.map +1 -0
- package/dist/33.js +2 -0
- package/dist/33.js.map +1 -0
- package/dist/348.js +2 -0
- package/dist/348.js.map +1 -0
- package/dist/377.js +2 -0
- package/dist/377.js.map +1 -0
- package/dist/412.js +2 -0
- package/dist/412.js.map +1 -0
- package/dist/415.js +2 -0
- package/dist/415.js.map +1 -0
- package/dist/501.js +2 -0
- package/dist/501.js.map +1 -0
- package/dist/531.js +2 -0
- package/dist/531.js.map +1 -0
- package/dist/583.js +2 -0
- package/dist/583.js.map +1 -0
- package/dist/589.js +2 -0
- package/dist/589.js.map +1 -0
- package/dist/603.js +2 -0
- package/dist/603.js.map +1 -0
- package/dist/656.js +2 -0
- package/dist/656.js.map +1 -0
- package/dist/682.js +2 -0
- package/dist/682.js.map +1 -0
- package/dist/705.js +2 -0
- package/dist/705.js.map +1 -0
- package/dist/727.js +2 -0
- package/dist/727.js.map +1 -0
- package/dist/731.js +2 -0
- package/dist/731.js.map +1 -0
- package/dist/738.js +3 -0
- package/dist/738.js.LICENSE.txt +51 -0
- package/dist/738.js.map +1 -0
- package/dist/763.js +2 -0
- package/dist/763.js.map +1 -0
- package/dist/778.js +2 -0
- package/dist/778.js.map +1 -0
- package/dist/783.js +2 -0
- package/dist/783.js.map +1 -0
- package/dist/793.js +2 -0
- package/dist/793.js.map +1 -0
- package/dist/801.js +2 -0
- package/dist/801.js.map +1 -0
- package/dist/810.js +2 -0
- package/dist/810.js.map +1 -0
- package/dist/860.js +2 -0
- package/dist/860.js.map +1 -0
- package/dist/907.js +2 -0
- package/dist/907.js.map +1 -0
- package/dist/950.js +2 -0
- package/dist/950.js.map +1 -0
- package/dist/980.js +2 -0
- package/dist/980.js.map +1 -0
- package/dist/990.js +2 -0
- package/dist/990.js.map +1 -0
- package/dist/package-test.js +1 -26140
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +1 -30337
- package/dist/package.js.map +1 -1
- package/package.json +2 -2
- package/src/anova/anova-ui.ts +39 -24
- package/src/package-api.ts +4 -0
- package/src/package.g.ts +33 -32
- package/src/package.ts +2 -2
- package/test-console-output-1.log +72 -93
- package/test-record-1.mp4 +0 -0
- package/webpack.config.js +1 -1
- package/dist/_d4c0.js +0 -279
- package/dist/_d4c0.js.map +0 -1
- package/dist/node_modules_datagrok-libraries_math_src_dbscan_wasm_clustering-worker_js.js +0 -279
- package/dist/node_modules_datagrok-libraries_math_src_dbscan_wasm_clustering-worker_js.js.map +0 -1
- package/dist/node_modules_datagrok-libraries_ml_src_MCL_mcl-sparse-matrix-mult-worker_js.js +0 -59
- package/dist/node_modules_datagrok-libraries_ml_src_MCL_mcl-sparse-matrix-mult-worker_js.js.map +0 -1
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_distance-matrix-worker_js.js +0 -284
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_distance-matrix-worker_js.js.map +0 -1
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_single-value-knn-worker_js.js +0 -265
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_single-value-knn-worker_js.js.map +0 -1
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-worker_js.js +0 -287
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-worker_js.js.map +0 -1
- package/dist/src_workers_softmax-worker_ts.js +0 -154
- package/dist/src_workers_softmax-worker_ts.js.map +0 -1
- package/dist/src_workers_tsne-worker_ts.js +0 -244
- package/dist/src_workers_tsne-worker_ts.js.map +0 -1
- package/dist/src_workers_umap-worker_ts.js +0 -252
- package/dist/src_workers_umap-worker_ts.js.map +0 -1
- package/dist/vendors-node_modules_datagrok-libraries_math_src_dbscan_wasm_dbscan_js.js +0 -1253
- package/dist/vendors-node_modules_datagrok-libraries_math_src_dbscan_wasm_dbscan_js.js.map +0 -1
- package/dist/vendors-node_modules_datagrok-libraries_math_src_hierarchical-clustering_wasm_clustering-worker_js.js +0 -942
- package/dist/vendors-node_modules_datagrok-libraries_math_src_hierarchical-clustering_wasm_clustering-worker_js.js.map +0 -1
- package/dist/vendors-node_modules_datagrok-libraries_math_src_webGPU_sparse-matrix_webGPU-sparse-matrix_js-07693f.js +0 -1525
- package/dist/vendors-node_modules_datagrok-libraries_math_src_webGPU_sparse-matrix_webGPU-sparse-matrix_js-07693f.js.map +0 -1
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_MCL_mcl-worker_js-node_modules_datagrok-librar-e4203d.js +0 -2244
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_MCL_mcl-worker_js-node_modules_datagrok-librar-e4203d.js.map +0 -1
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-threshold-worker_js.js +0 -286
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-threshold-worker_js.js.map +0 -1
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-worker_js.js +0 -280
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-worker_js.js.map +0 -1
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-threshold-worker_js.js +0 -282
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-threshold-worker_js.js.map +0 -1
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_utils_js-node_modules_datagrok-72c7b2.js +0 -1821
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_utils_js-node_modules_datagrok-72c7b2.js.map +0 -1
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_multi-column-dimensionality-reduction_mulit-co-3800a0.js +0 -7776
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_multi-column-dimensionality-reduction_mulit-co-3800a0.js.map +0 -1
- package/dist/vendors-node_modules_keckelt_tsne_lib_index_js.js +0 -379
- package/dist/vendors-node_modules_keckelt_tsne_lib_index_js.js.map +0 -1
- package/dist/vendors-node_modules_ml-matrix_matrix_mjs.js +0 -5946
- package/dist/vendors-node_modules_ml-matrix_matrix_mjs.js.map +0 -1
- package/dist/vendors-node_modules_umap-js_dist_index_js.js +0 -2284
- package/dist/vendors-node_modules_umap-js_dist_index_js.js.map +0 -1
- package/dist/wasm_EDAForWebWorker_js-wasm_callWasmForWebWorker_js.js +0 -779
- package/dist/wasm_EDAForWebWorker_js-wasm_callWasmForWebWorker_js.js.map +0 -1
- package/dist/wasm_workers_errorWorker_js.js +0 -267
- package/dist/wasm_workers_errorWorker_js.js.map +0 -1
- package/dist/wasm_workers_fitLinearRegressionParamsWithDataNormalizingWorker_js.js +0 -267
- package/dist/wasm_workers_fitLinearRegressionParamsWithDataNormalizingWorker_js.js.map +0 -1
- package/dist/wasm_workers_fitLinearRegressionParamsWorker_js.js +0 -267
- package/dist/wasm_workers_fitLinearRegressionParamsWorker_js.js.map +0 -1
- package/dist/wasm_workers_fitSoftmaxWorker_js.js +0 -267
- package/dist/wasm_workers_fitSoftmaxWorker_js.js.map +0 -1
- package/dist/wasm_workers_generateDatasetWorker_js.js +0 -267
- package/dist/wasm_workers_generateDatasetWorker_js.js.map +0 -1
- package/dist/wasm_workers_normalizeDatasetWorker_js.js +0 -267
- package/dist/wasm_workers_normalizeDatasetWorker_js.js.map +0 -1
- package/dist/wasm_workers_partialLeastSquareRegressionWorker_js.js +0 -267
- package/dist/wasm_workers_partialLeastSquareRegressionWorker_js.js.map +0 -1
- package/dist/wasm_workers_predictByLSSVMWorker_js.js +0 -267
- package/dist/wasm_workers_predictByLSSVMWorker_js.js.map +0 -1
- package/dist/wasm_workers_principalComponentAnalysisNipalsWorker_js.js +0 -267
- package/dist/wasm_workers_principalComponentAnalysisNipalsWorker_js.js.map +0 -1
- package/dist/wasm_workers_principalComponentAnalysisWorkerUpd_js.js +0 -271
- package/dist/wasm_workers_principalComponentAnalysisWorkerUpd_js.js.map +0 -1
- package/dist/wasm_workers_trainAndAnalyzeLSSVMWorker_js.js +0 -267
- package/dist/wasm_workers_trainAndAnalyzeLSSVMWorker_js.js.map +0 -1
- package/dist/wasm_workers_trainLSSVMWorker_js.js +0 -267
- package/dist/wasm_workers_trainLSSVMWorker_js.js.map +0 -1
- package/dist/wasm_workers_xgboostWorker_js.js +0 -279
- package/dist/wasm_workers_xgboostWorker_js.js.map +0 -1
package/dist/907.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
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","isArrayOfNumbers","every","element","prototype","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","super","arrayData","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":""}
|