{"version":3,"sources":["webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack:///./src/utils/data_time_limit.ts","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/is-any-array/lib-esm/index.js","webpack:///./node_modules/ml-array-max/lib-es6/index.js","webpack:///./node_modules/ml-array-min/lib-es6/index.js","webpack:///./node_modules/ml-array-rescale/lib-es6/index.js","webpack:///./node_modules/ml-matrix/src/inspect.js","webpack:///./node_modules/ml-matrix/src/mathOperations.js","webpack:///./node_modules/ml-matrix/src/util.js","webpack:///./node_modules/ml-matrix/src/stat.js","webpack:///./node_modules/ml-matrix/src/matrix.js","webpack:///./node_modules/ml-matrix/src/views/base.js","webpack:///./node_modules/ml-matrix/src/views/transpose.js","webpack:///./node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","webpack:///./node_modules/ml-matrix/src/dc/lu.js","webpack:///./node_modules/ml-matrix/src/dc/util.js","webpack:///./node_modules/ml-matrix/src/dc/qr.js","webpack:///./node_modules/ml-matrix/src/dc/svd.js","webpack:///./node_modules/ml-matrix/src/decompositions.js","webpack:///./node_modules/ml-regression-base/lib-esm/checkArrayLength.js","webpack:///./node_modules/ml-regression-base/lib-esm/index.js","webpack:///./node_modules/ml-regression-base/lib-esm/maybeToPrecision.js","webpack:///./node_modules/ml-regression-polynomial/lib-esm/index.js","webpack:///./src/utils/helper.ts","webpack:///./node_modules/core-js/modules/es.object.keys.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"],"names":["ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread2","target","i","arguments","length","source","forEach","key","defineProperty","getOwnPropertyDescriptors","defineProperties","data_cam_time_limit","data_mic_time_limit","data_feed_time_limit","_defineProperty","obj","value","configurable","writable","prototype","toString","isAnyArray","tag","call","endsWith","includes","input","options","undefined","TypeError","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Number","isInteger","Error","maxValue","minValue","rescale","output","Array","currentMin","currentMax","RangeError","_options$min","min","autoMinMax","_options$max","max","factor","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","this","matrix","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","inspectData","rows","columns","maxI","Math","maxJ","result","loop","j","get","line","formatNumber","join","num","formatNumber2","padEnd","len","str","fix","toFixed","startsWith","exp","toExponential","slice","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","set","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","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","ceil","clz32","cos","cosh","expm1","floor","fround","log","log1p","log10","log2","round","sign","sin","sinh","sqrt","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","index","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","array","checkNonEmpty","isEmpty","sumByRow","sum","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","x","varianceByColumn","varianceAll","size","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","newRows","newColumns","newData","row","column","fill","random","interval","zeros","data","l","matrix1","matrix2","isMatrix","klass","callback","copy","to2DArray","isSquare","previousColumn","isEchelonForm","checked","isReducedEchelonForm","k","clone","h","iMax","swapRows","tmp","echelonForm","m","n","maxRow","p","pivot","setSubMatrix","rowVector","getRow","row1","row2","temp","columnVector","getColumn","column1","column2","by","NaN","NEGATIVE_INFINITY","idx","POSITIVE_INFINITY","diag","type","dot","vector2","vector1","other","Bcolj","Float64Array","s","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","y","r1","c1","r2","c2","embed","mat","r","c","resultat","console","warn","blockMult","a","b","mmul","halfRows","parseInt","halfCols","subMatrix","isFinite","setRow","setColumn","middle","first","last","q","AxI","kroneckerProduct","eye","IxB","compareFunction","compareNumbers","sort","indices","rowIndex","columnIndex","trace","center","isArrayOfNumbers","every","element","Symbol","for","rand","randomInt","randInt","diagonal","identity","negate","neg","tensorProduct","nRows","nColumns","super","arrayData","from","splice","newRow","t","LUcolj","kmax","lu","pivotVector","pivotSign","LU","col","isSingular","count","X","subMatrixRow","determinant","hypotenuse","qr","rdiag","nrm","QR","Rdiag","isFullRank","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","transpose","aux","nu","ni","U","V","e","work","si","nct","nrt","mrc","pp","iter","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","solve","vcols","ucols","tol","ii","leftHandSide","rightHandSide","useSVD","checkArrayLength","_predict","xVal","precision","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","maybeToPrecision","number","figures","toPrecision","degree","powers","coefficients","regress","_toFormula","isLaTeX","sup","closeSup","times","fn","json","interceptAtZero","isArray","nCoefficients","F","FT","A","B","store","compareDateToCurrent","date","Date","getTime","getSensorsInFarm","farm","visibility","sensors","barns","barn","isActive","is_last_batch_active","barnSensors","map","sensor","barn_name","getSmartcamsOnline","smartcams","smartcam","isSmartcamOnline","getBarnByPK","age","last_batch_accommodation_date","last_acquisition_date","datetime_last_data","generateTrendline","weights","dates","timestamps","predictWeight","lastDate","futureTrendline","futureDate","futureWeight","predict","weight","$","toObject","nativeKeys","fails","FAILS_ON_PRIMITIVES","stat","forced","it","DESCRIPTORS","toIndexedObject","getOwnPropertyDescriptorModule","createProperty","sham","descriptor","O","nativeGetOwnPropertyDescriptor","FORCED"],"mappings":"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","file":"js/chunk-3bc2140d.b046e7bf.js","sourcesContent":["import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}","// minutes\nexport const data_cam_time_limit = 2880\nexport const data_mic_time_limit = 360\nexport const data_feed_time_limit = 360\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\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';\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 { 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';\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","const indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\nexport function inspectMatrix() {\n return inspectMatrixWithOptions(this);\n}\n\nexport function 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","export function 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, Math.pow(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, Math.pow(this.get(i, j), matrix.get(i, j)));\n }\n }\n return this;\n };\n}\n","import { isAnyArray } from 'is-any-array';\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 */\nexport function 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 */\nexport function 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 */\nexport function 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 */\nexport function 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\nexport function checkRowIndices(matrix, rowIndices) {\n if (!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\nexport function checkColumnIndices(matrix, columnIndices) {\n if (!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\nexport function 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\nexport function 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\nexport function checkNonEmpty(matrix) {\n if (matrix.isEmpty()) {\n throw new Error('Empty matrix has no elements to index');\n }\n}\n","import { newArray } from './util';\n\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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 += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nexport function 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\nexport function 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 += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nexport function 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\nexport function 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 += Math.pow(matrix.get(i, j), 2) / divider;\n }\n }\n return Math.sqrt(sum);\n}\n\nexport function 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","import { isAnyArray } from 'is-any-array';\nimport rescale from 'ml-array-rescale';\n\nimport { inspectMatrix, inspectMatrixWithOptions } from './inspect';\nimport { installMathOperations } from './mathOperations';\nimport {\n sumByRow,\n sumByColumn,\n sumAll,\n productByRow,\n productByColumn,\n productAll,\n varianceByRow,\n varianceByColumn,\n varianceAll,\n centerByRow,\n centerByColumn,\n centerAll,\n scaleByRow,\n scaleByColumn,\n scaleAll,\n getScaleByRow,\n getScaleByColumn,\n getScaleAll,\n} from './stat';\nimport {\n checkRowVector,\n checkRowIndex,\n checkColumnIndex,\n checkColumnVector,\n checkRange,\n checkNonEmpty,\n checkRowIndices,\n checkColumnIndices,\n} from './util';\n\nexport class 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 isEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isEchelonForm = true;\n let checked = false;\n while (i < this.rows && isEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isEchelonForm = false;\n checked = true;\n }\n }\n i++;\n }\n return isEchelonForm;\n }\n\n isReducedEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isReducedEchelonForm = true;\n let checked = false;\n while (i < this.rows && isReducedEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isReducedEchelonForm = false;\n checked = true;\n }\n }\n for (let k = j + 1; k < this.rows; k++) {\n if (this.get(i, k) !== 0) {\n isReducedEchelonForm = false;\n }\n }\n i++;\n }\n return isReducedEchelonForm;\n }\n\n echelonForm() {\n let result = this.clone();\n let h = 0;\n let k = 0;\n while (h < result.rows && k < result.columns) {\n let iMax = h;\n for (let i = h; i < result.rows; i++) {\n if (result.get(i, k) > result.get(iMax, k)) {\n iMax = i;\n }\n }\n if (result.get(iMax, k) === 0) {\n k++;\n } else {\n result.swapRows(h, iMax);\n let tmp = result.get(h, k);\n for (let j = k; j < result.columns; j++) {\n result.set(h, j, result.get(h, j) / tmp);\n }\n for (let i = h + 1; i < result.rows; i++) {\n let factor = result.get(i, k) / result.get(h, k);\n result.set(i, k, 0);\n for (let j = k + 1; j < result.columns; j++) {\n result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n }\n }\n h++;\n k++;\n }\n }\n return result;\n }\n\n reducedEchelonForm() {\n let result = this.echelonForm();\n let m = result.columns;\n let n = result.rows;\n let h = n - 1;\n while (h >= 0) {\n if (result.maxRow(h) === 0) {\n h--;\n } else {\n let p = 0;\n let pivot = false;\n while (p < n && pivot === false) {\n if (result.get(h, p) === 1) {\n pivot = true;\n } else {\n p++;\n }\n }\n for (let i = 0; i < h; i++) {\n let factor = result.get(i, p);\n for (let j = p; j < m; j++) {\n let tmp = result.get(i, j) - factor * result.get(h, j);\n result.set(i, j, tmp);\n }\n }\n h--;\n }\n }\n return result;\n }\n\n set() {\n throw new Error('set method is unimplemented');\n }\n\n get() {\n throw new Error('get method is unimplemented');\n }\n\n repeat(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { rows = 1, columns = 1 } = options;\n if (!Number.isInteger(rows) || rows <= 0) {\n throw new TypeError('rows must be a positive integer');\n }\n if (!Number.isInteger(columns) || columns <= 0) {\n throw new TypeError('columns must be a positive integer');\n }\n let matrix = new Matrix(this.rows * rows, this.columns * columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n }\n }\n return matrix;\n }\n\n fill(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, value);\n }\n }\n return this;\n }\n\n neg() {\n return this.mulS(-1);\n }\n\n getRow(index) {\n checkRowIndex(this, index);\n let row = [];\n for (let i = 0; i < this.columns; i++) {\n row.push(this.get(index, i));\n }\n return row;\n }\n\n getRowVector(index) {\n return Matrix.rowVector(this.getRow(index));\n }\n\n setRow(index, array) {\n checkRowIndex(this, index);\n array = checkRowVector(this, array);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, array[i]);\n }\n return this;\n }\n\n swapRows(row1, row2) {\n checkRowIndex(this, row1);\n checkRowIndex(this, row2);\n for (let i = 0; i < this.columns; i++) {\n let temp = this.get(row1, i);\n this.set(row1, i, this.get(row2, i));\n this.set(row2, i, temp);\n }\n return this;\n }\n\n getColumn(index) {\n checkColumnIndex(this, index);\n let column = [];\n for (let i = 0; i < this.rows; i++) {\n column.push(this.get(i, index));\n }\n return column;\n }\n\n getColumnVector(index) {\n return Matrix.columnVector(this.getColumn(index));\n }\n\n setColumn(index, array) {\n checkColumnIndex(this, index);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, array[i]);\n }\n return this;\n }\n\n swapColumns(column1, column2) {\n checkColumnIndex(this, column1);\n checkColumnIndex(this, column2);\n for (let i = 0; i < this.rows; i++) {\n let temp = this.get(i, column1);\n this.set(i, column1, this.get(i, column2));\n this.set(i, column2, temp);\n }\n return this;\n }\n\n addRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[j]);\n }\n }\n return this;\n }\n\n subRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[j]);\n }\n }\n return this;\n }\n\n mulRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[j]);\n }\n }\n return this;\n }\n\n divRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[j]);\n }\n }\n return this;\n }\n\n addColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[i]);\n }\n }\n return this;\n }\n\n subColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[i]);\n }\n }\n return this;\n }\n\n mulColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[i]);\n }\n }\n return this;\n }\n\n divColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[i]);\n }\n }\n return this;\n }\n\n mulRow(index, value) {\n checkRowIndex(this, index);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, this.get(index, i) * value);\n }\n return this;\n }\n\n mulColumn(index, value) {\n checkColumnIndex(this, index);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, this.get(i, index) * value);\n }\n return this;\n }\n\n max(by) {\n if (this.isEmpty()) {\n return NaN;\n }\n switch (by) {\n case 'row': {\n const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max[row]) {\n max[row] = this.get(row, column);\n }\n }\n }\n return max;\n }\n case 'column': {\n const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max[column]) {\n max[column] = this.get(row, column);\n }\n }\n }\n return max;\n }\n case undefined: {\n let max = this.get(0, 0);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max) {\n max = this.get(row, column);\n }\n }\n }\n return max;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n maxIndex() {\n checkNonEmpty(this);\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) > v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n min(by) {\n if (this.isEmpty()) {\n return NaN;\n }\n\n switch (by) {\n case 'row': {\n const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min[row]) {\n min[row] = this.get(row, column);\n }\n }\n }\n return min;\n }\n case 'column': {\n const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min[column]) {\n min[column] = this.get(row, column);\n }\n }\n }\n return min;\n }\n case undefined: {\n let min = this.get(0, 0);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min) {\n min = this.get(row, column);\n }\n }\n }\n return min;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n minIndex() {\n checkNonEmpty(this);\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) < v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n maxRow(row) {\n checkRowIndex(this, row);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n maxRowIndex(row) {\n checkRowIndex(this, row);\n checkNonEmpty(this);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n minRow(row) {\n checkRowIndex(this, row);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n minRowIndex(row) {\n checkRowIndex(this, row);\n checkNonEmpty(this);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n maxColumn(column) {\n checkColumnIndex(this, column);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n maxColumnIndex(column) {\n checkColumnIndex(this, column);\n checkNonEmpty(this);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n minColumn(column) {\n checkColumnIndex(this, column);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n minColumnIndex(column) {\n checkColumnIndex(this, column);\n checkNonEmpty(this);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n diag() {\n let min = Math.min(this.rows, this.columns);\n let diag = [];\n for (let i = 0; i < min; i++) {\n diag.push(this.get(i, i));\n }\n return diag;\n }\n\n norm(type = 'frobenius') {\n switch (type) {\n case 'max':\n return this.max();\n case 'frobenius':\n return Math.sqrt(this.dot(this));\n default:\n throw new RangeError(`unknown norm type: ${type}`);\n }\n }\n\n cumulativeSum() {\n let sum = 0;\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n sum += this.get(i, j);\n this.set(i, j, sum);\n }\n }\n return this;\n }\n\n dot(vector2) {\n if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n let vector1 = this.to1DArray();\n if (vector1.length !== vector2.length) {\n throw new RangeError('vectors do not have the same size');\n }\n let dot = 0;\n for (let i = 0; i < vector1.length; i++) {\n dot += vector1[i] * vector2[i];\n }\n return dot;\n }\n\n mmul(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.columns;\n\n let result = new Matrix(m, p);\n\n let Bcolj = new Float64Array(n);\n for (let j = 0; j < p; j++) {\n for (let k = 0; k < n; k++) {\n Bcolj[k] = other.get(k, j);\n }\n\n for (let i = 0; i < m; i++) {\n let s = 0;\n for (let k = 0; k < n; k++) {\n s += this.get(i, k) * Bcolj[k];\n }\n\n result.set(i, j, s);\n }\n }\n return result;\n }\n\n strassen2x2(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(2, 2);\n const a11 = this.get(0, 0);\n const b11 = other.get(0, 0);\n const a12 = this.get(0, 1);\n const b12 = other.get(0, 1);\n const a21 = this.get(1, 0);\n const b21 = other.get(1, 0);\n const a22 = this.get(1, 1);\n const b22 = other.get(1, 1);\n\n // Compute intermediate values.\n const m1 = (a11 + a22) * (b11 + b22);\n const m2 = (a21 + a22) * b11;\n const m3 = a11 * (b12 - b22);\n const m4 = a22 * (b21 - b11);\n const m5 = (a11 + a12) * b22;\n const m6 = (a21 - a11) * (b11 + b12);\n const m7 = (a12 - a22) * (b21 + b22);\n\n // Combine intermediate values into the output.\n const c00 = m1 + m4 - m5 + m7;\n const c01 = m3 + m5;\n const c10 = m2 + m4;\n const c11 = m1 - m2 + m3 + m6;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n return result;\n }\n\n strassen3x3(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(3, 3);\n\n const a00 = this.get(0, 0);\n const a01 = this.get(0, 1);\n const a02 = this.get(0, 2);\n const a10 = this.get(1, 0);\n const a11 = this.get(1, 1);\n const a12 = this.get(1, 2);\n const a20 = this.get(2, 0);\n const a21 = this.get(2, 1);\n const a22 = this.get(2, 2);\n\n const b00 = other.get(0, 0);\n const b01 = other.get(0, 1);\n const b02 = other.get(0, 2);\n const b10 = other.get(1, 0);\n const b11 = other.get(1, 1);\n const b12 = other.get(1, 2);\n const b20 = other.get(2, 0);\n const b21 = other.get(2, 1);\n const b22 = other.get(2, 2);\n\n const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n const m2 = (a00 - a10) * (-b01 + b11);\n const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n const m5 = (a10 + a11) * (-b00 + b01);\n const m6 = a00 * b00;\n const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n const m8 = (-a00 + a20) * (b02 - b12);\n const m9 = (a20 + a21) * (-b00 + b02);\n const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n const m13 = (a02 - a22) * (b11 - b21);\n const m14 = a02 * b20;\n const m15 = (a21 + a22) * (-b20 + b21);\n const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n const m17 = (a02 - a12) * (b12 - b22);\n const m18 = (a11 + a12) * (-b20 + b22);\n const m19 = a01 * b10;\n const m20 = a12 * b21;\n const m21 = a10 * b02;\n const m22 = a20 * b01;\n const m23 = a22 * b22;\n\n const c00 = m6 + m14 + m19;\n const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n const c11 = m2 + m4 + m5 + m6 + m20;\n const c12 = m14 + m16 + m17 + m18 + m21;\n const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n const c21 = m12 + m13 + m14 + m15 + m22;\n const c22 = m6 + m7 + m8 + m9 + m23;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(0, 2, c02);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n result.set(1, 2, c12);\n result.set(2, 0, c20);\n result.set(2, 1, c21);\n result.set(2, 2, c22);\n return result;\n }\n\n mmulStrassen(y) {\n y = Matrix.checkMatrix(y);\n let x = this.clone();\n let r1 = x.rows;\n let c1 = x.columns;\n let r2 = y.rows;\n let c2 = y.columns;\n if (c1 !== r2) {\n // eslint-disable-next-line no-console\n console.warn(\n `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n );\n }\n\n // Put a matrix into the top left of a matrix of zeros.\n // `rows` and `cols` are the dimensions of the output matrix.\n function embed(mat, rows, cols) {\n let r = mat.rows;\n let c = mat.columns;\n if (r === rows && c === cols) {\n return mat;\n } else {\n let resultat = AbstractMatrix.zeros(rows, cols);\n resultat = resultat.setSubMatrix(mat, 0, 0);\n return resultat;\n }\n }\n\n // Make sure both matrices are the same size.\n // This is exclusively for simplicity:\n // this algorithm can be implemented with matrices of different sizes.\n\n let r = Math.max(r1, r2);\n let c = Math.max(c1, c2);\n x = embed(x, r, c);\n y = embed(y, r, c);\n\n // Our recursive multiplication function.\n function blockMult(a, b, rows, cols) {\n // For small matrices, resort to naive multiplication.\n if (rows <= 512 || cols <= 512) {\n return a.mmul(b); // a is equivalent to this\n }\n\n // Apply dynamic padding.\n if (rows % 2 === 1 && cols % 2 === 1) {\n a = embed(a, rows + 1, cols + 1);\n b = embed(b, rows + 1, cols + 1);\n } else if (rows % 2 === 1) {\n a = embed(a, rows + 1, cols);\n b = embed(b, rows + 1, cols);\n } else if (cols % 2 === 1) {\n a = embed(a, rows, cols + 1);\n b = embed(b, rows, cols + 1);\n }\n\n let halfRows = parseInt(a.rows / 2, 10);\n let halfCols = parseInt(a.columns / 2, 10);\n // Subdivide input matrices.\n let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n // Compute intermediate values.\n let m1 = blockMult(\n AbstractMatrix.add(a11, a22),\n AbstractMatrix.add(b11, b22),\n halfRows,\n halfCols,\n );\n let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n let m6 = blockMult(\n AbstractMatrix.sub(a21, a11),\n AbstractMatrix.add(b11, b12),\n halfRows,\n halfCols,\n );\n let m7 = blockMult(\n AbstractMatrix.sub(a12, a22),\n AbstractMatrix.add(b21, b22),\n halfRows,\n halfCols,\n );\n\n // Combine intermediate values into the output.\n let c11 = AbstractMatrix.add(m1, m4);\n c11.sub(m5);\n c11.add(m7);\n let c12 = AbstractMatrix.add(m3, m5);\n let c21 = AbstractMatrix.add(m2, m4);\n let c22 = AbstractMatrix.sub(m1, m2);\n c22.add(m3);\n c22.add(m6);\n\n // Crop output to the desired size (undo dynamic padding).\n let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n result = result.setSubMatrix(c11, 0, 0);\n result = result.setSubMatrix(c12, c11.rows, 0);\n result = result.setSubMatrix(c21, 0, c11.columns);\n result = result.setSubMatrix(c22, c11.rows, c11.columns);\n return result.subMatrix(0, rows - 1, 0, cols - 1);\n }\n\n return blockMult(x, y, r, c);\n }\n\n scaleRows(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.rows; i++) {\n const row = this.getRow(i);\n if (row.length > 0) {\n rescale(row, { min, max, output: row });\n }\n newMatrix.setRow(i, row);\n }\n return newMatrix;\n }\n\n scaleColumns(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.columns; i++) {\n const column = this.getColumn(i);\n if (column.length) {\n rescale(column, {\n min,\n max,\n output: column,\n });\n }\n newMatrix.setColumn(i, column);\n }\n return newMatrix;\n }\n\n flipRows() {\n const middle = Math.ceil(this.columns / 2);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < middle; j++) {\n let first = this.get(i, j);\n let last = this.get(i, this.columns - 1 - j);\n this.set(i, j, last);\n this.set(i, this.columns - 1 - j, first);\n }\n }\n return this;\n }\n\n flipColumns() {\n const middle = Math.ceil(this.rows / 2);\n for (let j = 0; j < this.columns; j++) {\n for (let i = 0; i < middle; i++) {\n let first = this.get(i, j);\n let last = this.get(this.rows - 1 - i, j);\n this.set(i, j, last);\n this.set(this.rows - 1 - i, j, first);\n }\n }\n return this;\n }\n\n kroneckerProduct(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.rows;\n let q = other.columns;\n\n let result = new Matrix(m * p, n * q);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n for (let k = 0; k < p; k++) {\n for (let l = 0; l < q; l++) {\n result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n }\n }\n }\n }\n return result;\n }\n\n kroneckerSum(other) {\n other = Matrix.checkMatrix(other);\n if (!this.isSquare() || !other.isSquare()) {\n throw new Error('Kronecker Sum needs two Square Matrices');\n }\n let m = this.rows;\n let n = other.rows;\n let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n return AxI.add(IxB);\n }\n\n transpose() {\n let result = new Matrix(this.columns, this.rows);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n result.set(j, i, this.get(i, j));\n }\n }\n return result;\n }\n\n sortRows(compareFunction = compareNumbers) {\n for (let i = 0; i < this.rows; i++) {\n this.setRow(i, this.getRow(i).sort(compareFunction));\n }\n return this;\n }\n\n sortColumns(compareFunction = compareNumbers) {\n for (let i = 0; i < this.columns; i++) {\n this.setColumn(i, this.getColumn(i).sort(compareFunction));\n }\n return this;\n }\n\n subMatrix(startRow, endRow, startColumn, endColumn) {\n checkRange(this, startRow, endRow, startColumn, endColumn);\n let newMatrix = new Matrix(\n endRow - startRow + 1,\n endColumn - startColumn + 1,\n );\n for (let i = startRow; i <= endRow; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n }\n }\n return newMatrix;\n }\n\n subMatrixRow(indices, startColumn, endColumn) {\n if (startColumn === undefined) startColumn = 0;\n if (endColumn === undefined) endColumn = this.columns - 1;\n if (\n startColumn > endColumn ||\n startColumn < 0 ||\n startColumn >= this.columns ||\n endColumn < 0 ||\n endColumn >= this.columns\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n if (indices[i] < 0 || indices[i] >= this.rows) {\n throw new RangeError(`Row index out of range: ${indices[i]}`);\n }\n newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n }\n }\n return newMatrix;\n }\n\n subMatrixColumn(indices, startRow, endRow) {\n if (startRow === undefined) startRow = 0;\n if (endRow === undefined) endRow = this.rows - 1;\n if (\n startRow > endRow ||\n startRow < 0 ||\n startRow >= this.rows ||\n endRow < 0 ||\n endRow >= this.rows\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startRow; j <= endRow; j++) {\n if (indices[i] < 0 || indices[i] >= this.columns) {\n throw new RangeError(`Column index out of range: ${indices[i]}`);\n }\n newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n }\n }\n return newMatrix;\n }\n\n setSubMatrix(matrix, startRow, startColumn) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isEmpty()) {\n return this;\n }\n let endRow = startRow + matrix.rows - 1;\n let endColumn = startColumn + matrix.columns - 1;\n checkRange(this, startRow, endRow, startColumn, endColumn);\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n this.set(startRow + i, startColumn + j, matrix.get(i, j));\n }\n }\n return this;\n }\n\n selection(rowIndices, columnIndices) {\n checkRowIndices(this, rowIndices);\n checkColumnIndices(this, columnIndices);\n let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n for (let i = 0; i < rowIndices.length; i++) {\n let rowIndex = rowIndices[i];\n for (let j = 0; j < columnIndices.length; j++) {\n let columnIndex = columnIndices[j];\n newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n }\n }\n return newMatrix;\n }\n\n trace() {\n let min = Math.min(this.rows, this.columns);\n let trace = 0;\n for (let i = 0; i < min; i++) {\n trace += this.get(i, i);\n }\n return trace;\n }\n\n clone() {\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n newMatrix.set(row, column, this.get(row, column));\n }\n }\n return newMatrix;\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(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByRow(this, unbiased, mean);\n }\n case 'column': {\n if (!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(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(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(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(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\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\nexport default class Matrix extends AbstractMatrix {\n constructor(nRows, nColumns) {\n super();\n if (Matrix.isMatrix(nRows)) {\n // eslint-disable-next-line no-constructor-return\n return nRows.clone();\n } else if (Number.isInteger(nRows) && nRows >= 0) {\n // Create an empty matrix\n this.data = [];\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 } else if (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 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 } else {\n throw new TypeError(\n 'First argument must be a positive number or an array',\n );\n }\n this.rows = nRows;\n this.columns = nColumns;\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","import { AbstractMatrix } from '../matrix';\n\nexport default class 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","import BaseView from './base';\n\nexport default class 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","import { AbstractMatrix } from '../matrix';\n\nexport default class 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","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class 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","export function 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","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class 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","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class 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 iter = 0;\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 iter = iter + 1;\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 iter = 0;\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","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function 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\nexport function 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","import { isAnyArray } from 'is-any-array';\n/**\n * Check that x and y are arrays with the same length.\n * @param x - first array\n * @param y - second array\n * @throws if x or y are not the same length, or if they are not arrays\n */\nexport default function checkArrayLength(x, y) {\n if (!isAnyArray(x) || !isAnyArray(y)) {\n throw new TypeError('x and y must be arrays');\n }\n if (x.length !== y.length) {\n throw new RangeError('x and y arrays must have the same length');\n }\n}\n//# sourceMappingURL=checkArrayLength.js.map","import { isAnyArray } from 'is-any-array';\nimport checkArrayLength from './checkArrayLength';\nexport { default as maybeToPrecision } from './maybeToPrecision';\nexport default class BaseRegression {\n constructor() {\n if (new.target === BaseRegression) {\n throw new Error('BaseRegression must be subclassed');\n }\n }\n predict(x) {\n if (typeof x === 'number') {\n return this._predict(x);\n }\n else if (isAnyArray(x)) {\n const y = [];\n for (const xVal of x) {\n y.push(this._predict(xVal));\n }\n return y;\n }\n else {\n throw new TypeError('x must be a number or array');\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _predict(x) {\n throw new Error('_predict must be implemented');\n }\n train() {\n // Do nothing for this package\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n toString(precision) {\n return '';\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n toLaTeX(precision) {\n return '';\n }\n /**\n * Return the correlation coefficient of determination (r) and chi-square.\n * @param x - explanatory variable\n * @param y - response variable\n * @return - Object with further statistics.\n */\n score(x, y) {\n checkArrayLength(x, y);\n const n = x.length;\n const y2 = new Array(n);\n for (let i = 0; i < n; i++) {\n y2[i] = this._predict(x[i]);\n }\n let xSum = 0;\n let ySum = 0;\n let chi2 = 0;\n let rmsd = 0;\n let xSquared = 0;\n let ySquared = 0;\n let xY = 0;\n for (let i = 0; i < n; i++) {\n xSum += y2[i];\n ySum += y[i];\n xSquared += y2[i] * y2[i];\n ySquared += y[i] * y[i];\n xY += y2[i] * y[i];\n if (y[i] !== 0) {\n chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n }\n rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n }\n const r = (n * xY - xSum * ySum) /\n Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n return {\n r,\n r2: r * r,\n chi2,\n rmsd: Math.sqrt(rmsd / n),\n };\n }\n}\nexport { checkArrayLength };\n//# sourceMappingURL=index.js.map","/**\n * Cast `number` to string. Optionally `digits` specifies significant figures.\n * @param number\n * @param figures\n * @returns - A string representation of `number`.\n */\nexport default function maybeToPrecision(number, figures) {\n if (number < 0) {\n number = 0 - number;\n if (typeof figures === 'number') {\n return `- ${number.toPrecision(figures)}`;\n }\n else {\n return `- ${number.toString()}`;\n }\n }\n else if (typeof figures === 'number') {\n return number.toPrecision(figures);\n }\n else {\n return number.toString();\n }\n}\n//# sourceMappingURL=maybeToPrecision.js.map","import { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\nimport BaseRegression, { checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\nexport class PolynomialRegression extends BaseRegression {\n /**\n * @param x - independent or explanatory variable\n * @param y - dependent or response variable\n * @param degree - degree of the polynomial regression, or array of powers to be used. When degree is an array, intercept at zero is forced to false/ignored.\n * @example `new PolynomialRegression(x, y, 2)`, in this case, you can pass the option `interceptAtZero`, if you need it.\n * @example `new PolynomialRegression(x, y, [1, 3, 5])`\n * Each of the degrees corresponds to a column, so if you have them switched, just do:\n * @example `new PolynomialRegression(x, y, [3, 1, 5])`\n *\n * @param options.interceptAtZero - force the polynomial regression so that f(0) = 0\n */\n constructor(x, y, degree, options = {}) {\n super();\n // @ts-expect-error internal use only\n if (x === true) {\n // @ts-expect-error internal use only\n this.degree = y.degree;\n // @ts-expect-error internal use only\n this.powers = y.powers;\n // @ts-expect-error internal use only\n this.coefficients = y.coefficients;\n }\n else {\n checkArrayLength(x, y);\n const result = regress(x, y, degree, options);\n this.degree = result.degree;\n this.powers = result.powers;\n this.coefficients = result.coefficients;\n }\n }\n _predict(x) {\n let y = 0;\n for (let k = 0; k < this.powers.length; k++) {\n y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n }\n return y;\n }\n toJSON() {\n return {\n name: 'polynomialRegression',\n degree: this.degree,\n powers: this.powers,\n coefficients: this.coefficients,\n };\n }\n toString(precision) {\n return this._toFormula(precision, false);\n }\n toLaTeX(precision) {\n return this._toFormula(precision, true);\n }\n _toFormula(precision, isLaTeX) {\n let sup = '^';\n let closeSup = '';\n let times = ' * ';\n if (isLaTeX) {\n sup = '^{';\n closeSup = '}';\n times = '';\n }\n let fn = '';\n let str = '';\n for (let k = 0; k < this.coefficients.length; k++) {\n str = '';\n if (this.coefficients[k] !== 0) {\n if (this.powers[k] === 0) {\n str = maybeToPrecision(this.coefficients[k], precision);\n }\n else if (this.powers[k] === 1) {\n str = `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n }\n else {\n str = `${maybeToPrecision(this.coefficients[k], precision) + times}x${sup}${this.powers[k]}${closeSup}`;\n }\n if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n str = ` + ${str}`;\n }\n else if (k !== this.coefficients.length - 1) {\n str = ` ${str}`;\n }\n }\n fn = str + fn;\n }\n if (fn.startsWith('+')) {\n fn = fn.slice(1);\n }\n return `f(x) = ${fn}`;\n }\n static load(json) {\n if (json.name !== 'polynomialRegression') {\n throw new TypeError('not a polynomial regression model');\n }\n // @ts-expect-error internal use only\n return new PolynomialRegression(true, json);\n }\n}\n/**\n * Perform a polynomial regression on the given data set.\n * This is an internal function.\n * @param x - independent or explanatory variable\n * @param y - dependent or response variable\n * @param degree - degree of the polynomial regression\n * @param options.interceptAtZero - force the polynomial regression so that $f(0) = 0$\n */\nfunction regress(x, y, degree, options = {}) {\n const n = x.length;\n let { interceptAtZero = false } = options;\n let powers = [];\n if (Array.isArray(degree)) {\n powers = degree;\n interceptAtZero = false; //must be false in this case\n }\n else if (typeof degree === 'number') {\n if (interceptAtZero) {\n powers = new Array(degree);\n for (let k = 0; k < degree; k++) {\n powers[k] = k + 1;\n }\n }\n else {\n powers = new Array(degree + 1);\n for (let k = 0; k <= degree; k++) {\n powers[k] = k;\n }\n }\n }\n const nCoefficients = powers.length; //1 per power, in any case.\n const F = new Matrix(n, nCoefficients);\n const Y = new Matrix([y]);\n for (let k = 0; k < nCoefficients; k++) {\n for (let i = 0; i < n; i++) {\n if (powers[k] === 0) {\n F.set(i, k, 1);\n }\n else {\n F.set(i, k, Math.pow(x[i], powers[k]));\n }\n }\n }\n const FT = new MatrixTransposeView(F);\n const A = FT.mmul(F);\n const B = FT.mmul(new MatrixTransposeView(Y));\n return {\n coefficients: solve(A, B).to1DArray(),\n degree: Math.max(...powers),\n powers,\n };\n}\n//# sourceMappingURL=index.js.map","import { useDashboardStore } from '@/store/dashboard';\nimport { FarmType } from './../types/farm';\nimport { BarnType } from './../types/barn';\nimport { SensorType } from './../types/sensor';\nimport { BarnVisibilityType } from './../types/barn_visibility';\nimport { data_cam_time_limit } from \"@/utils/data_time_limit\";\nimport { trendlineType } from '@/types/trendline';\nimport { PolynomialRegression } from 'ml-regression-polynomial';\n\nconst store = useDashboardStore();\n\n\nexport function compareDateToCurrent(date: string): number {\n return Math.ceil(Math.abs((new Date().getTime() - new Date(date).getTime()) / (1000 * 60)))\n}\n\nexport function isSensorOnline(datetime_last_ping: string, verification_period: number): boolean {\n return compareDateToCurrent(datetime_last_ping) < verification_period\n}\n\nexport function isSensorNotAnswering(datetime_last_ping: string, verification_period: number): boolean {\n return verification_period <= compareDateToCurrent(datetime_last_ping) \n && compareDateToCurrent(datetime_last_ping) <= verification_period*2\n}\n\nexport function isSensorOffline(datetime_last_ping: string, verification_period: number): boolean {\n return compareDateToCurrent(datetime_last_ping) > verification_period*2\n}\n\nexport function getSensorsInFarm(farm: FarmType, visibility: BarnVisibilityType): SensorType[] {\n const sensors: SensorType[] = [];\n farm.barns.forEach((barn: BarnType) => {\n const isActive = visibility !== 'hide_disabled' || barn.is_last_batch_active;\n if (isActive) {\n const barnSensors = barn.sensors.map((sensor) => ({\n ...sensor,\n barn_name: barn.name,\n }));\n sensors.push(...barnSensors);\n }\n });\n return sensors;\n}\n\nexport function getSmartcamsOnline(smartcams: SensorType[]): SensorType[] {\n return smartcams.filter((smartcam: SensorType) => isSmartcamOnline(smartcam))\n}\n\nexport function isSmartcamOnline(smartcam: SensorType): boolean {\n const barn = store.getBarnByPK(smartcam.barn)\n if (barn != undefined) {\n const age = compareDateToCurrent(barn.last_batch_accommodation_date)\n // 32 days have 46080 minutes\n if (age < 46080) {\n return compareDateToCurrent(smartcam.last_acquisition_date) < data_cam_time_limit\n }\n }\n if (smartcam.datetime_last_data == null) return false\n return compareDateToCurrent(smartcam.datetime_last_data) < data_cam_time_limit\n}\n\nexport function generateTrendline(weights: number[], dates: Date[]): trendlineType[] {\n // Convert dates to timestamps for easier calculations\n const timestamps: number[] = dates.map(date => date.getTime());\n\n // Calculate the polynomial coefficients\n const predictWeight = new PolynomialRegression(timestamps, weights, 3);\n\n // Calculate trendline for 10 days after the last date\n const lastDate = Math.max(...timestamps);\n const futureTrendline: { date: Date, weight: number }[] = [];\n for (let i = 1; i <= 10; i++) {\n const futureDate = lastDate + (i * 24 * 60 * 60 * 1000); // 1 day in milliseconds\n const futureWeight = predictWeight.predict(futureDate);\n futureTrendline.push({\n date: new Date(futureDate),\n weight: futureWeight\n });\n }\n\n return futureTrendline;\n }\n\n\n\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n"],"sourceRoot":""}