{"version":3,"file":"ml-gsd.js","sources":["../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-savitzky-golay-generalized/lib-esm/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-spectra-processing/lib-esm/x/xMedian.js","../node_modules/ml-spectra-processing/lib-esm/x/xCheck.js","../node_modules/ml-spectra-processing/lib-esm/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xIsEquallySpaced.js","../node_modules/ml-spectra-processing/lib-esm/x/xIsMonotoneIncreasing.js","../node_modules/ml-spectra-processing/lib-esm/x/xMedianAbsoluteDeviation.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib-esm/x/xNoiseStandardDeviation.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../lib-esm/utils/optimizeTop.js","../lib-esm/gsd.js","../node_modules/ml-peak-shape-generator/lib-esm/util/constants.js","../node_modules/ml-peak-shape-generator/lib-esm/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/getShape1D.js","../node_modules/ml-spectra-fitting/lib-esm/shapes/getSumOfShapes.js","../node_modules/ml-spectra-fitting/lib-esm/util/assert.js","../node_modules/ml-spectra-fitting/lib-esm/util/internalPeaks/DefaultParameters.js","../node_modules/ml-spectra-fitting/lib-esm/util/internalPeaks/getInternalPeaks.js","../node_modules/ml-levenberg-marquardt/lib-esm/checkOptions.js","../node_modules/ml-levenberg-marquardt/lib-esm/errorCalculation.js","../node_modules/ml-levenberg-marquardt/lib-esm/gradientFunction.js","../node_modules/ml-levenberg-marquardt/lib-esm/step.js","../node_modules/ml-levenberg-marquardt/lib-esm/index.js","../node_modules/ml-spectra-fitting/lib-esm/util/selectMethod.js","../node_modules/ml-spectra-fitting/lib-esm/index.js","../lib-esm/utils/appendShapeAndFWHM.js","../lib-esm/utils/groupPeaks.js","../lib-esm/post/optimizePeaksWithLogs.js","../lib-esm/post/optimizePeaks.js","../lib-esm/post/joinBroadPeaks.js","../lib-esm/post/broadenPeaks.js"],"sourcesContent":["const toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array).\n *\n * @param {any} value - Object to check.\n * @returns {boolean} True if the object is an array.\n */\nexport function isAnyArray(value) {\n    return toString.call(value).endsWith('Array]');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Apply Savitzky Golay algorithm\n * @param [ys] Array of y values\n * @param [xs] Array of X or deltaX\n * @return  Array containing the new ys (same length)\n */\nexport function sgg(ys, xs, options = {}) {\n    let { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (typeof xs === 'undefined') {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    let half = Math.floor(windowSize / 2);\n    let np = ys.length;\n    let ans = new Float64Array(np);\n    let weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = Math.pow(xs, derivative);\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        let wg1 = weights[half - i - 1];\n        let wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    let wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return Math.pow(hs / count, derivative);\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else {\n        if (k === 0 && s === 0) {\n            Grampoly = 1;\n        }\n        else {\n            Grampoly = 0;\n        }\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * @private\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\n */\nfunction fullWeights(m, n, s) {\n    let weights = new Array(m);\n    let np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n/**\n * Calculates the median of an array\n *\n * @param input - Array containing values\n * @returns - median\n */\nexport function xMedian(input) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    // we need to slice because the order of elements is changed in the quickselect\n    // https://github.com/mad-gooze/median-quickselect\n    return quickSelectMedian(input.slice());\n}\n//# sourceMappingURL=xMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if input is of type array\n *\n * @param input - input\n */\nexport function xCheck(input) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n *\n * @param array - array of numbers\n * @param target - target\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from './xFindClosestIndex';\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n *\n * @param x - array of numbers\n * @param options - Options\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex, from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the maximal value of an array of values\n *\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the minimal value of an array of values\n *\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","/**\n * Check if the values are separated always by the same difference\n *\n * @param array - Monotone growing array of number\n */\nexport function xIsEquallySpaced(array, options = {}) {\n    if (array.length < 3)\n        return true;\n    const { tolerance = 0.05 } = options;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < array.length - 1; ++i) {\n        let absoluteDifference = array[i + 1] - array[i];\n        if (absoluteDifference < minDx) {\n            minDx = absoluteDifference;\n        }\n        if (absoluteDifference > maxDx) {\n            maxDx = absoluteDifference;\n        }\n    }\n    return (maxDx - minDx) / maxDx < tolerance;\n}\n//# sourceMappingURL=xIsEquallySpaced.js.map","/**\n * Returns true if x is monotone\n *\n * @param array - array of numbers\n */\nexport function xIsMonotoneIncreasing(array) {\n    if (array.length < 2) {\n        return true;\n    }\n    for (let i = 0; i < array.length - 1; i++) {\n        if (array[i] >= array[i + 1])\n            return false;\n    }\n    return true;\n}\n//# sourceMappingURL=xIsMonotoneIncreasing.js.map","import { xMedian } from './xMedian';\n/**\n * This function calculates the median absolute deviation (MAD)\n * https://en.wikipedia.org/wiki/Median_absolute_deviation\n * @param array\n */\nexport function xMedianAbsoluteDeviation(array) {\n    const median = xMedian(array);\n    const averageDeviations = new Float64Array(array.length);\n    for (let i = 0; i < array.length; i++) {\n        averageDeviations[i] = Math.abs(array[i] - median);\n    }\n    return {\n        median,\n        mad: xMedian(averageDeviations),\n    };\n}\n//# sourceMappingURL=xMedianAbsoluteDeviation.js.map","import { xCheck } from './xCheck';\n/**\n * Return min and max values of an array\n *\n * @param array - array of number\n * @returns - Object with 2 properties, min and max\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (let value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","import { xMedianAbsoluteDeviation } from '..';\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise\n * @param array\n * @returns noise level corresponding to one standard deviation\n */\nexport function xNoiseStandardDeviation(array) {\n    const { mad, median } = xMedianAbsoluteDeviation(array);\n    return { sd: mad / 0.6744897501960817, mad, median };\n}\n//# sourceMappingURL=xNoiseStandardDeviation.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 { maxRows = 15, maxColumns = 10, maxNumSize = 8 } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\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));\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) {\n  const numStr = String(num);\n  if (numStr.length <= maxNumSize) {\n    return numStr.padEnd(maxNumSize, ' ');\n  }\n  const precise = num.toPrecision(maxNumSize - 2);\n  if (precise.length <= maxNumSize) {\n    return precise;\n  }\n  const exponential = num.toExponential(maxNumSize - 2);\n  const eIndex = exponential.indexOf('e');\n  const e = exponential.slice(eIndex);\n  return exponential.slice(0, maxNumSize - e.length) + e;\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    let result = 0;\n    if (type === 'max') {\n      return this.max();\n    } else if (type === 'frobenius') {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j < this.columns; j++) {\n          result = result + this.get(i, j) * this.get(i, j);\n        }\n      }\n      return Math.sqrt(result);\n    } else {\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 resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      resultat = resultat.setSubMatrix(c11, 0, 0);\n      resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n      resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n      resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n      return resultat.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: min,\n          max: 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\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        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 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","/**\n * Correction of the x and y coordinates using a quadratic optimizations with the peak and its 3 closest neighbors to determine the true x,y values of the peak.\n * This process is done in place and is very fast.\n * @param data\n * @param peaks\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else {\n            if (y[currentIndex + 1] >= y[currentIndex] &&\n                y[currentIndex + 1] >= y[currentIndex + 2]) {\n                currentIndex++;\n            }\n            else {\n                if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n                    y[currentIndex - 2] >= y[currentIndex - 1]) {\n                    currentIndex -= 2;\n                }\n                else {\n                    if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n                        y[currentIndex + 2] >= y[currentIndex + 3]) {\n                        currentIndex += 2;\n                    }\n                }\n            }\n        }\n        // interpolation to a sin() function\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            let alpha = 20 * Math.log10(y[currentIndex - 1]);\n            let beta = 20 * Math.log10(y[currentIndex]);\n            let gamma = 20 * Math.log10(y[currentIndex + 1]);\n            let p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            peak.x = x[currentIndex] + (x[currentIndex] - x[currentIndex - 1]) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotoneIncreasing, xMinValue, xMaxValue, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { optimizeTop } from './utils/optimizeTop';\n/**\n * Global spectra deconvolution\n * @param  data - Object data with x and y arrays. Values in x has to be growing\n * @param {number} [options.broadRatio = 0.00] - If `broadRatio` is higher than 0, then all the peaks which second derivative\n * smaller than `broadRatio * maxAbsSecondDerivative` will be marked with the soft mask equal to true.\n\n */\nexport function gsd(data, options = {}) {\n    let { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, noiseLevel, smoothY = false, maxCriteria = true, minMaxRatio = 0.00025, realTopDetection = false, } = options;\n    let { x, y } = data;\n    if (!xIsMonotoneIncreasing(x)) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    //rescale;\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    let equallySpaced = xIsEquallySpaced(x);\n    if (noiseLevel === undefined) {\n        if (equallySpaced) {\n            const noiseInfo = xNoiseStandardDeviation(y);\n            if (maxCriteria) {\n                noiseLevel = noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n            else {\n                noiseLevel = -noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n        }\n        else {\n            noiseLevel = 0;\n        }\n    }\n    else {\n        if (maxCriteria === false) {\n            noiseLevel *= -1;\n        }\n    }\n    if (maxCriteria === false) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] *= -1;\n        }\n    }\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    let yData = y;\n    let dY, ddY;\n    const { windowSize, polynomial } = sgOptions;\n    if (equallySpaced) {\n        if (smoothY) {\n            yData = sgg(y, x[1] - x[0], {\n                windowSize,\n                polynomial,\n                derivative: 0,\n            });\n        }\n        dY = sgg(y, x[1] - x[0], {\n            windowSize,\n            polynomial,\n            derivative: 1,\n        });\n        ddY = sgg(y, x[1] - x[0], {\n            windowSize,\n            polynomial,\n            derivative: 2,\n        });\n    }\n    else {\n        if (smoothY) {\n            yData = sgg(y, x, {\n                windowSize,\n                polynomial,\n                derivative: 0,\n            });\n        }\n        dY = sgg(y, x, {\n            windowSize,\n            polynomial,\n            derivative: 1,\n        });\n        ddY = sgg(y, x, {\n            windowSize,\n            polynomial,\n            derivative: 2,\n        });\n    }\n    const minY = xMinValue(yData);\n    const maxY = xMaxValue(yData);\n    if (minY > maxY || minY === maxY)\n        return [];\n    const yThreshold = minY + (maxY - minY) * minMaxRatio;\n    const dX = x[1] - x[0];\n    let lastMax = null;\n    let lastMin = null;\n    let minddY = [];\n    let intervalL = [];\n    let intervalR = [];\n    // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n    for (let i = 1; i < yData.length - 1; ++i) {\n        if ((dY[i] < dY[i - 1] && dY[i] <= dY[i + 1]) ||\n            (dY[i] <= dY[i - 1] && dY[i] < dY[i + 1])) {\n            lastMin = {\n                x: x[i],\n                index: i,\n            };\n            if (dX > 0 && lastMax !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Maximum in first derivative\n        if ((dY[i] >= dY[i - 1] && dY[i] > dY[i + 1]) ||\n            (dY[i] > dY[i - 1] && dY[i] >= dY[i + 1])) {\n            lastMax = {\n                x: x[i],\n                index: i,\n            };\n            if (dX < 0 && lastMin !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    let lastK = -1;\n    const peaks = [];\n    for (const minddYIndex of minddY) {\n        let deltaX = x[minddYIndex];\n        let possible = -1;\n        let k = lastK + 1;\n        let minDistance = Number.POSITIVE_INFINITY;\n        let currentDistance = 0;\n        while (possible === -1 && k < intervalL.length) {\n            currentDistance = Math.abs(deltaX - (intervalL[k].x + intervalR[k].x) / 2);\n            if (currentDistance < (intervalR[k].x - intervalL[k].x) / 2) {\n                possible = k;\n                lastK = k;\n            }\n            ++k;\n            // Not getting closer?\n            if (currentDistance >= minDistance) {\n                break;\n            }\n            minDistance = currentDistance;\n        }\n        if (possible !== -1) {\n            if (yData[minddYIndex] > yThreshold) {\n                let width = Math.abs(intervalR[possible].x - intervalL[possible].x);\n                peaks.push({\n                    x: deltaX,\n                    y: yData[minddYIndex],\n                    width: width,\n                    index: minddYIndex,\n                    ddY: ddY[minddYIndex],\n                    inflectionPoints: {\n                        from: intervalL[possible],\n                        to: intervalR[possible],\n                    },\n                });\n            }\n        }\n    }\n    if (realTopDetection) {\n        optimizeTop({ x, y: yData }, peaks);\n    }\n    peaks.forEach((peak) => {\n        if (!maxCriteria) {\n            peak.y *= -1;\n            peak.ddY = peak.ddY * -1;\n        }\n    });\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\n//# sourceMappingURL=gsd.js.map","export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_THREE = Math.sqrt(3);\nexport const ROOT_2LN2 = Math.sqrt(2 * Math.LN2);\nexport const ROOT_2LN2_MINUS_ONE = Math.sqrt(2 * Math.LN2) - 1;\n//# sourceMappingURL=constants.js.map","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\nexport default function erfinv(x) {\n    let a = 0.147;\n    if (x === 0)\n        return 0;\n    let ln1MinusXSqrd = Math.log(1 - x * x);\n    let lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    let firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    let secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { ROOT_2LN2, GAUSSIAN_EXP_FACTOR, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport erfinv from '../../../util/erfinv';\nexport class Gaussian {\n    constructor(options = {}) {\n        const { fwhm = 500, sd } = options;\n        this.fwhm = sd ? gaussianWidthToFWHM(2 * sd) : fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fct(x) {\n        return gaussianFct(x, this.fwhm);\n    }\n    getArea(height = calculateGaussianHeight({ fwhm: this.fwhm })) {\n        return getGaussianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getGaussianFactor(area);\n    }\n    getData(options = {}) {\n        return getGaussianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateGaussianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport function calculateGaussianHeight(options) {\n    let { fwhm = 500, area = 1, sd } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (2 * area) / ROOT_PI_OVER_LN2 / fwhm;\n}\nexport function gaussianFct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n}\nexport function gaussianWidthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\nexport function gaussianFwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\nexport function getGaussianArea(options) {\n    let { fwhm = 500, sd, height = 1 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\nexport function getGaussianFactor(area = 0.9999) {\n    return Math.sqrt(2) * erfinv(area);\n}\nexport function getGaussianData(shape = {}, options = {}) {\n    let { fwhm = 500, sd } = shape;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    let { length, factor = getGaussianFactor(), height = calculateGaussianHeight({ fwhm }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = gaussianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","import { ROOT_THREE } from '../../../util/constants';\nexport class Lorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianFct(x, this.fwhm);\n    }\n    getArea(height = 1) {\n        return getLorentzianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const calculateLorentzianHeight = ({ fwhm = 1, area = 1 }) => {\n    return (2 * area) / Math.PI / fwhm;\n};\nexport const lorentzianFct = (x, fwhm) => {\n    return Math.pow(fwhm, 2) / (4 * Math.pow(x, 2) + Math.pow(fwhm, 2));\n};\nexport const lorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const lorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1 } = options;\n    return (height * Math.PI * fwhm) / 2;\n};\nexport const getLorentzianFactor = (area = 0.9999) => {\n    return 2 * Math.tan(Math.PI * (area - 0.5));\n};\nexport const getLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500 } = shape;\n    let { length, factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = lorentzianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=Lorentzian.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport { gaussianFct, getGaussianFactor } from '../gaussian/Gaussian';\nimport { lorentzianFct, getLorentzianFactor } from '../lorentzian/Lorentzian';\nexport class PseudoVoigt {\n    constructor(options = {}) {\n        const { fwhm = 500, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this.fwhm, this.mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this.fwhm, height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this.fwhm,\n            mu: this.mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({ fwhm: this.fwhm, mu: this.mu, area });\n    }\n    getParameters() {\n        return ['fwhm', 'mu'];\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    let { fwhm = 1, mu = 0.5, area = 1 } = options;\n    return (2 * area) / (fwhm * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI));\n};\nexport const pseudoVoigtFct = (x, fwhm, mu) => {\n    return (1 - mu) * lorentzianFct(x, fwhm) + mu * gaussianFct(x, fwhm);\n};\nexport const pseudoVoigtWidthToFWHM = (width, mu = 0.5) => {\n    return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const pseudoVoigtFwhmToWidth = (fwhm, mu = 0.5) => {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const getPseudoVoigtArea = (options) => {\n    const { fwhm = 500, height = 1, mu = 0.5 } = options;\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\nexport const getPseudoVoigtFactor = (area = 0.9999, mu = 0.5) => {\n    return mu < 1 ? getLorentzianFactor(area) : getGaussianFactor(area);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    let { fwhm = 500, mu = 0.5 } = shape;\n    let { length, factor = getPseudoVoigtFactor(0.999, mu), height = calculatePseudoVoigtHeight({ fwhm, mu, area: 1 }), } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { Gaussian } from './gaussian/Gaussian';\nimport { Lorentzian } from './lorentzian/Lorentzian';\nimport { PseudoVoigt } from './pseudoVoigt/PseudoVoigt';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape1D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shape);\n        case 'lorentzian':\n            return new Lorentzian(shape);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shape);\n        default: {\n            throw Error(`Unknown distribution ${kind}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","/**\n * This function returns the sumOfShapes function\n * This function gives sumOfShapes access to the peak list and the associated data\n * @param parameters - parameters\n */\nexport function getSumOfShapes(internalPeaks) {\n    return function sumOfShapes(parameters) {\n        return (x) => {\n            let totalY = 0;\n            for (const peak of internalPeaks) {\n                const peakX = parameters[peak.fromIndex];\n                const y = parameters[peak.fromIndex + 1];\n                for (let i = 2; i <= peak.toIndex; i++) {\n                    //@ts-expect-error Not simply to solve the issue\n                    peak.shapeFct[peak.parameters[i]] = parameters[peak.fromIndex + i];\n                }\n                totalY += y * peak.shapeFct.fct(x - peakX);\n            }\n            return totalY;\n        };\n    };\n}\n//# sourceMappingURL=getSumOfShapes.js.map","/**\n * Asserts that value is truthy.\n *\n * @param value - Value to check.\n * @param message - Optional error message to throw.\n */\nexport function assert(value, message) {\n    if (!value) {\n        throw new Error(message ? message : 'unreachable');\n    }\n}\n//# sourceMappingURL=assert.js.map","export const DefaultParameters = {\n    x: {\n        init: (peak) => peak.x,\n        min: (peak, peakShape) => peak.x - peakShape.fwhm * 2,\n        max: (peak, peakShape) => peak.x + peakShape.fwhm * 2,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    y: {\n        init: (peak) => peak.y,\n        min: () => 0,\n        max: () => 1.5,\n        gradientDifference: () => 1e-3,\n    },\n    fwhm: {\n        init: (peak, peakShape) => peakShape.fwhm,\n        min: (peak, peakShape) => peakShape.fwhm * 0.25,\n        max: (peak, peakShape) => peakShape.fwhm * 4,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    mu: {\n        init: (peak, peakShape) => peakShape.mu,\n        min: () => 0,\n        max: () => 1,\n        gradientDifference: () => 0.01,\n    },\n};\n//# sourceMappingURL=DefaultParameters.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { assert } from '../assert';\nimport { DefaultParameters } from './DefaultParameters';\nconst properties = ['init', 'min', 'max', 'gradientDifference'];\n/**\n * Return an array of internalPeaks that contains the exact init, min, max values based on the options\n * @param peaks\n * @param options\n * @returns\n */\nexport function getInternalPeaks(peaks, minMaxY, options = {}) {\n    let index = 0;\n    let internalPeaks = [];\n    for (const peak of peaks) {\n        const shape = peak.shape\n            ? peak.shape\n            : options.shape\n                ? options.shape\n                : { kind: 'gaussian' };\n        const shapeFct = getShape1D(shape);\n        //@ts-expect-error Should disappear with next release of peak-shape-generator\n        const parameters = ['x', 'y', ...shapeFct.getParameters()];\n        const propertiesValues = {\n            min: [],\n            max: [],\n            init: [],\n            gradientDifference: [],\n        };\n        for (let parameter of parameters) {\n            for (let property of properties) {\n                // check if the property is specified in the peak\n                let propertyValue = peak.parameters &&\n                    peak.parameters[parameter] &&\n                    peak.parameters[parameter][property];\n                if (propertyValue) {\n                    propertyValue = getNormalizedValue(propertyValue, parameter, property, minMaxY);\n                    propertiesValues[property].push(propertyValue);\n                    continue;\n                }\n                // check if there are some global option, it could be a number or a callback\n                let generalParameterValue = options.parameters &&\n                    options.parameters[parameter] &&\n                    options.parameters[parameter][property];\n                if (generalParameterValue) {\n                    if (typeof generalParameterValue === 'number') {\n                        generalParameterValue = getNormalizedValue(generalParameterValue, parameter, property, minMaxY);\n                        propertiesValues[property].push(generalParameterValue);\n                        continue;\n                    }\n                    else {\n                        let value = generalParameterValue(peak);\n                        value = getNormalizedValue(value, parameter, property, minMaxY);\n                        propertiesValues[property].push(value);\n                        continue;\n                    }\n                }\n                // we just need to take the default parameters\n                assert(DefaultParameters[parameter], `No default parameter for ${parameter}`);\n                const defaultParameterValues = DefaultParameters[parameter][property];\n                //@ts-expect-error should never happen\n                propertiesValues[property].push(defaultParameterValues(peak, shapeFct));\n            }\n        }\n        const fromIndex = index;\n        const toIndex = fromIndex + parameters.length - 1;\n        index += toIndex - fromIndex + 1;\n        internalPeaks.push({\n            shape,\n            shapeFct,\n            parameters,\n            propertiesValues,\n            fromIndex,\n            toIndex,\n        });\n    }\n    return internalPeaks;\n}\nfunction getNormalizedValue(value, parameter, property, minMaxY) {\n    if (parameter === 'y') {\n        if (property === 'gradientDifference') {\n            return value / minMaxY.range;\n        }\n        else {\n            return (value - minMaxY.min) / minMaxY.range;\n        }\n    }\n    return value;\n}\n//# sourceMappingURL=getInternalPeaks.js.map","import { isAnyArray } from 'is-any-array';\nexport default function checkOptions(data, parameterizedFunction, options) {\n    let { timeout, minValues, maxValues, initialValues, weights = 1, damping = 1e-2, dampingStepUp = 11, dampingStepDown = 9, maxIterations = 100, errorTolerance = 1e-7, centralDifference = false, gradientDifference = 10e-2, improvementThreshold = 1e-3, } = options;\n    if (damping <= 0) {\n        throw new Error('The damping option must be a positive number');\n    }\n    else if (!data.x || !data.y) {\n        throw new Error('The data parameter must have x and y elements');\n    }\n    else if (!isAnyArray(data.x) ||\n        data.x.length < 2 ||\n        !isAnyArray(data.y) ||\n        data.y.length < 2) {\n        throw new Error('The data parameter elements must be an array with more than 2 points');\n    }\n    else if (data.x.length !== data.y.length) {\n        throw new Error('The data parameter elements must have the same size');\n    }\n    let parameters = initialValues || new Array(parameterizedFunction.length).fill(1);\n    let nbPoints = data.y.length;\n    let parLen = parameters.length;\n    maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n    minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n    if (maxValues.length !== minValues.length) {\n        throw new Error('minValues and maxValues must be the same size');\n    }\n    if (!isAnyArray(parameters)) {\n        throw new Error('initialValues must be an array');\n    }\n    if (typeof gradientDifference === 'number') {\n        gradientDifference = new Array(parameters.length).fill(gradientDifference);\n    }\n    else if (isAnyArray(gradientDifference)) {\n        if (gradientDifference.length !== parLen) {\n            gradientDifference = new Array(parLen).fill(gradientDifference[0]);\n        }\n    }\n    else {\n        throw new Error('gradientDifference should be a number or array with length equal to the number of parameters');\n    }\n    let filler;\n    if (typeof weights === 'number') {\n        let value = 1 / weights ** 2;\n        filler = () => value;\n    }\n    else if (isAnyArray(weights)) {\n        if (weights.length < data.x.length) {\n            let value = 1 / weights[0] ** 2;\n            filler = () => value;\n        }\n        else {\n            filler = (i) => 1 / weights[i] ** 2;\n        }\n    }\n    else {\n        throw new Error('weights should be a number or array with length equal to the number of data points');\n    }\n    let checkTimeout;\n    if (timeout !== undefined) {\n        if (typeof timeout !== 'number') {\n            throw new Error('timeout should be a number');\n        }\n        let endTime = Date.now() + timeout * 1000;\n        checkTimeout = () => Date.now() > endTime;\n    }\n    else {\n        checkTimeout = () => false;\n    }\n    let weightSquare = new Array(data.x.length);\n    for (let i = 0; i < nbPoints; i++) {\n        weightSquare[i] = filler(i);\n    }\n    return {\n        checkTimeout,\n        minValues,\n        maxValues,\n        parameters,\n        weightSquare,\n        damping,\n        dampingStepUp,\n        dampingStepDown,\n        maxIterations,\n        errorTolerance,\n        centralDifference,\n        gradientDifference,\n        improvementThreshold,\n    };\n}\n//# sourceMappingURL=checkOptions.js.map","/**\n * the sum of the weighted squares of the errors (or weighted residuals) between the data.y\n * and the curve-fit function.\n * @ignore\n * @param {{x:ArrayLike<number>, y:ArrayLike<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {ArrayLike<number>} parameters - Array of current parameter values\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {ArrayLike<number>} weightSquare - Square of weights\n * @return {number}\n */\nexport default function errorCalculation(data, parameters, parameterizedFunction, weightSquare) {\n    let error = 0;\n    const func = parameterizedFunction(parameters);\n    for (let i = 0; i < data.x.length; i++) {\n        error += Math.pow(data.y[i] - func(data.x[i]), 2) / weightSquare[i];\n    }\n    return error;\n}\n//# sourceMappingURL=errorCalculation.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @ignore\n * @param {{x:ArrayLike<number>, y:ArrayLike<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {ArrayLike<number>} evaluatedData - Array of previous evaluated function values\n * @param {Array<number>} params - Array of previous parameter values\n * @param {number|array} gradientDifference - The step size to approximate the jacobian matrix\n * @param {boolean} centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Matrix}\n */\nexport default function gradientFunction(data, evaluatedData, params, gradientDifference, paramFunction, centralDifference) {\n    const nbParams = params.length;\n    const nbPoints = data.x.length;\n    let ans = Matrix.zeros(nbParams, nbPoints);\n    let rowIndex = 0;\n    for (let param = 0; param < nbParams; param++) {\n        if (gradientDifference[param] === 0)\n            continue;\n        let delta = gradientDifference[param];\n        let auxParams = params.slice();\n        auxParams[param] += delta;\n        let funcParam = paramFunction(auxParams);\n        if (!centralDifference) {\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (evaluatedData[point] - funcParam(data.x[point])) / delta);\n            }\n        }\n        else {\n            auxParams = params.slice();\n            auxParams[param] -= delta;\n            delta *= 2;\n            let funcParam2 = paramFunction(auxParams);\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta);\n            }\n        }\n        rowIndex++;\n    }\n    return ans;\n}\n//# sourceMappingURL=gradientFunction.js.map","import { inverse, Matrix } from 'ml-matrix';\nimport gradientFunction from './gradientFunction';\n/**\n * Matrix function over the samples\n * @ignore\n * @param {{x:ArrayLike<number>, y:ArrayLike<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {ArrayLike<number>} evaluatedData - Array of previous evaluated function values\n * @return {Matrix}\n */\nfunction matrixFunction(data, evaluatedData) {\n    const m = data.x.length;\n    let ans = new Matrix(m, 1);\n    for (let point = 0; point < m; point++) {\n        ans.set(point, 0, data.y[point] - evaluatedData[point]);\n    }\n    return ans;\n}\n/**\n * Iteration for Levenberg-Marquardt\n * @ignore\n * @param {{x:ArrayLike<number>, y:ArrayLike<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} params - Array of previous parameter values\n * @param {number} damping - Levenberg-Marquardt parameter\n * @param {number|array} gradientDifference - The step size to approximate the jacobian matrix\n * @param {boolean} centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n */\nexport default function step(data, params, damping, gradientDifference, parameterizedFunction, centralDifference, weights) {\n    let value = damping;\n    let identity = Matrix.eye(params.length, params.length, value);\n    const func = parameterizedFunction(params);\n    let evaluatedData = new Float64Array(data.x.length);\n    for (let i = 0; i < data.x.length; i++) {\n        evaluatedData[i] = func(data.x[i]);\n    }\n    let gradientFunc = gradientFunction(data, evaluatedData, params, gradientDifference, parameterizedFunction, centralDifference);\n    let residualError = matrixFunction(data, evaluatedData);\n    let inverseMatrix = inverse(identity.add(gradientFunc.mmul(gradientFunc.transpose().scale('row', { scale: weights }))));\n    let jacobianWeightResidualError = gradientFunc.mmul(residualError.scale('row', { scale: weights }));\n    let perturbations = inverseMatrix.mmul(jacobianWeightResidualError);\n    return {\n        perturbations,\n        jacobianWeightResidualError,\n    };\n}\n//# sourceMappingURL=step.js.map","import checkOptions from './checkOptions';\nimport errorCalculation from './errorCalculation';\nimport step from './step';\n/**\n * Curve fitting algorithm\n * @param {{x:ArrayLike<number>, y:ArrayLike<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {object} [options] - Options object\n * @param {number|ArrayLike<number>} [options.weights = 1] - weighting vector, if the length does not match with the number of data points, the vector is reconstructed with first value.\n * @param {number} [options.damping = 1e-2] - Levenberg-Marquardt parameter, small values of the damping parameter λ result in a Gauss-Newton update and large\nvalues of λ result in a gradient descent update\n * @param {number} [options.dampingStepDown = 9] - factor to reduce the damping (Levenberg-Marquardt parameter) when there is not an improvement when updating parameters.\n * @param {number} [options.dampingStepUp = 11] - factor to increase the damping (Levenberg-Marquardt parameter) when there is an improvement when updating parameters.\n * @param {number} [options.improvementThreshold = 1e-3] - the threshold to define an improvement through an update of parameters\n * @param {number|ArrayLike<number>} [options.gradientDifference = 10e-2] - The step size to approximate the jacobian matrix\n * @param {boolean} [options.centralDifference = false] - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {ArrayLike<number>} [options.minValues] - Minimum allowed values for parameters\n * @param {ArrayLike<number>} [options.maxValues] - Maximum allowed values for parameters\n * @param {ArrayLike<number>} [options.initialValues] - Array of initial parameter values\n * @param {number} [options.maxIterations = 100] - Maximum of allowed iterations\n * @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point.\n * @param {number} [options.timeout] - maximum time running before throw in seconds.\n * @return {{parameterValues: Array<number>, parameterError: number, iterations: number}}\n */\nexport function levenbergMarquardt(data, parameterizedFunction, options = {}) {\n    let { checkTimeout, minValues, maxValues, parameters, weightSquare, damping, dampingStepUp, dampingStepDown, maxIterations, errorTolerance, centralDifference, gradientDifference, improvementThreshold, } = checkOptions(data, parameterizedFunction, options);\n    let error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n    let optimalError = error;\n    let optimalParameters = parameters.slice();\n    let converged = error <= errorTolerance;\n    let iteration = 0;\n    for (; iteration < maxIterations && !converged; iteration++) {\n        let previousError = error;\n        let { perturbations, jacobianWeightResidualError } = step(data, parameters, damping, gradientDifference, parameterizedFunction, centralDifference, weightSquare);\n        for (let k = 0; k < parameters.length; k++) {\n            parameters[k] = Math.min(Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)), maxValues[k]);\n        }\n        error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n        if (isNaN(error))\n            break;\n        if (error < optimalError - errorTolerance) {\n            optimalError = error;\n            optimalParameters = parameters.slice();\n        }\n        let improvementMetric = (previousError - error) /\n            perturbations\n                .transpose()\n                .mmul(perturbations.mul(damping).add(jacobianWeightResidualError))\n                .get(0, 0);\n        if (improvementMetric > improvementThreshold) {\n            damping = Math.max(damping / dampingStepDown, 1e-7);\n        }\n        else {\n            damping = Math.min(damping * dampingStepUp, 1e7);\n        }\n        if (checkTimeout()) {\n            throw new Error(`The execution time is over to ${options.timeout} seconds`);\n        }\n        converged = error <= errorTolerance;\n    }\n    return {\n        parameterValues: optimalParameters,\n        parameterError: optimalError,\n        iterations: iteration,\n    };\n}\n//# sourceMappingURL=index.js.map","import { levenbergMarquardt } from 'ml-levenberg-marquardt';\n/** Algorithm to select the method.\n * @param optimizationOptions - Optimization options\n * @returns - The algorithm and optimization options\n */\nexport function selectMethod(optimizationOptions = {}) {\n    let { kind = 'lm', options } = optimizationOptions;\n    switch (kind) {\n        case 'lm':\n        case 'levenbergMarquardt':\n            return {\n                algorithm: levenbergMarquardt,\n                optimizationOptions: {\n                    damping: 1.5,\n                    maxIterations: 100,\n                    errorTolerance: 1e-8,\n                    ...options,\n                },\n            };\n        default:\n            throw new Error(`Unknown fitting algorithm`);\n    }\n}\n//# sourceMappingURL=selectMethod.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nimport { getSumOfShapes } from './shapes/getSumOfShapes';\nimport { getInternalPeaks } from './util/internalPeaks/getInternalPeaks';\nimport { selectMethod } from './util/selectMethod';\n/**\n * Fits a set of points to the sum of a set of bell functions.\n *\n * @param data - An object containing the x and y data to be fitted.\n * @param peaks - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Options for optimize\n * @returns - An object with fitting error and the list of optimized parameters { parameters: [ {x, y, width} ], error } if the kind of shape is pseudoVoigt mu parameter is optimized.\n */\nexport function optimize(data, peaks, options = {}) {\n    // rescale data\n    let temp = xMinMaxValues(data.y);\n    const minMaxY = { ...temp, range: temp.max - temp.min };\n    const internalPeaks = getInternalPeaks(peaks, minMaxY, options);\n    // need to rescale what is related to Y\n    let normalizedY = new Float64Array(data.y.length);\n    for (let i = 0; i < data.y.length; i++) {\n        normalizedY[i] = (data.y[i] - minMaxY.min) / minMaxY.range;\n    }\n    const nbParams = internalPeaks[internalPeaks.length - 1].toIndex + 1;\n    const minValues = new Float64Array(nbParams);\n    const maxValues = new Float64Array(nbParams);\n    const initialValues = new Float64Array(nbParams);\n    const gradientDifferences = new Float64Array(nbParams);\n    let index = 0;\n    for (const peak of internalPeaks) {\n        for (let i = 0; i < peak.parameters.length; i++) {\n            minValues[index] = peak.propertiesValues.min[i];\n            maxValues[index] = peak.propertiesValues.max[i];\n            initialValues[index] = peak.propertiesValues.init[i];\n            gradientDifferences[index] = peak.propertiesValues.gradientDifference[i];\n            index++;\n        }\n    }\n    let { algorithm, optimizationOptions } = selectMethod(options.optimization);\n    let sumOfShapes = getSumOfShapes(internalPeaks);\n    let fitted = algorithm({ x: data.x, y: normalizedY }, sumOfShapes, {\n        minValues,\n        maxValues,\n        initialValues,\n        gradientDifference: gradientDifferences,\n        ...optimizationOptions,\n    });\n    const fittedValues = fitted.parameterValues;\n    let newPeaks = [];\n    for (let peak of internalPeaks) {\n        const newPeak = {\n            x: 0,\n            y: 0,\n            shape: peak.shape,\n        };\n        newPeak.x = fittedValues[peak.fromIndex];\n        newPeak.y = fittedValues[peak.fromIndex + 1] * minMaxY.range + minMaxY.min;\n        for (let i = 2; i < peak.parameters.length; i++) {\n            //@ts-expect-error should be fixed once\n            newPeak.shape[peak.parameters[i]] = fittedValues[peak.fromIndex + i];\n        }\n        newPeaks.push(newPeak);\n    }\n    return {\n        error: fitted.parameterError,\n        iterations: fitted.iterations,\n        peaks: newPeaks,\n    };\n}\n//# sourceMappingURL=index.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * Append 2 properties to the peaks, shape and fwhm\n */\nexport function appendShapeAndFWHM(peaks, options = {}) {\n    let { shape = { kind: 'gaussian' } } = options;\n    let shapeInstance = getShape1D(shape);\n    return peaks.map((peak) => ({\n        ...peak,\n        shape: { fwhm: shapeInstance.widthToFWHM(peak.width), ...shape },\n    }));\n}\n//# sourceMappingURL=appendShapeAndFWHM.js.map","/**\n * Group peaks based on factor\n * In order to group peaks we only need the x and width value. This means that\n * in the current implementation we don't take into account the asymmetry of peaks\n */\nexport function groupPeaks(peaks, options = {}) {\n    if (peaks && peaks.length === 0)\n        return [];\n    const { factor = 1 } = options;\n    peaks = JSON.parse(JSON.stringify(peaks));\n    peaks.sort((a, b) => a.x - b.x);\n    let previousPeak = peaks[0];\n    let currentGroup = [previousPeak];\n    let groups = [currentGroup];\n    for (let i = 1; i < peaks.length; i++) {\n        const peak = peaks[i];\n        if ((peak.x - previousPeak.x) / ((peak.width + previousPeak.width) / 2) <=\n            factor) {\n            currentGroup.push(peak);\n        }\n        else {\n            currentGroup = [peak];\n            groups.push(currentGroup);\n        }\n        previousPeak = peak;\n    }\n    return groups;\n}\n//# sourceMappingURL=groupPeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { optimize } from 'ml-spectra-fitting';\nimport { xGetFromToIndex } from 'ml-spectra-processing';\nimport { appendShapeAndFWHM } from '../utils/appendShapeAndFWHM';\nimport { groupPeaks } from '../utils/groupPeaks';\n/**\n * Optimize the position (x), max intensity (y), full width at half maximum (fwhm)\n * and the ratio of gaussian contribution (mu) if it's required. It currently supports three kind of shapes: gaussian, lorentzian and pseudovoigt\n * @param data - An object containing the x and y data to be fitted.\n * @param peakList - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n */\nexport function optimizePeaksWithLogs(data, peakList, options = {}) {\n    const { shape = { kind: 'gaussian' }, groupingFactor = 1, factorLimits = 2, optimization = {\n        kind: 'lm',\n        options: {\n            timeout: 10,\n        },\n    }, } = options;\n    /*\n    The optimization algorithm will take some group of peaks.\n    We can not simply optimize everything because there would be too many variables to optimize\n    and it would be too time consuming.\n  */\n    let groups = groupPeaks(peakList, { factor: groupingFactor });\n    let logs = [];\n    let results = [];\n    groups.forEach((peakGroup) => {\n        const start = Date.now();\n        // In order to make optimization we will add fwhm and shape on all the peaks\n        const peaks = appendShapeAndFWHM(peakGroup, { shape });\n        const firstPeak = peaks[0];\n        const lastPeak = peaks[peaks.length - 1];\n        const from = firstPeak.x - firstPeak.width * factorLimits;\n        const to = lastPeak.x + lastPeak.width * factorLimits;\n        const { fromIndex, toIndex } = xGetFromToIndex(data.x, { from, to });\n        const x = data.x instanceof Float64Array\n            ? data.x.subarray(fromIndex, toIndex)\n            : data.x.slice(fromIndex, toIndex);\n        const y = data.y instanceof Float64Array\n            ? data.y.subarray(fromIndex, toIndex)\n            : data.y.slice(fromIndex, toIndex);\n        const log = {\n            range: { from, to },\n            parameters: optimization,\n            groupSize: peakGroup.length,\n            time: Date.now() - start,\n        };\n        if (x.length > 5) {\n            const { iterations, error, peaks: optimizedPeaks, } = optimize({ x, y }, peaks, {\n                shape,\n                optimization,\n            });\n            for (let i = 0; i < peaks.length; i++) {\n                results.push({\n                    ...optimizedPeaks[i],\n                    width: getShape1D(peaks[i].shape).fwhmToWidth(optimizedPeaks[i].shape.fwhm),\n                });\n            }\n            logs.push({\n                ...log,\n                iterations,\n                error,\n                message: 'optimization successful',\n            });\n        }\n        else {\n            results = results.concat(peaks);\n            logs.push({\n                ...log,\n                iterations: 0,\n                message: 'x length too small for optimization',\n            });\n        }\n    });\n    return { logs, optimizedPeaks: results };\n}\n//# sourceMappingURL=optimizePeaksWithLogs.js.map","import { optimizePeaksWithLogs } from './optimizePeaksWithLogs';\n/**\n * Optimize the position (x), max intensity (y), full width at half maximum (fwhm)\n * and the ratio of gaussian contribution (mu) if it's required. It currently supports three kind of shapes: gaussian, lorentzian and pseudovoigt\n * @param data - An object containing the x and y data to be fitted.\n * @param peakList - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n */\nexport function optimizePeaks(data, peakList, options = {}) {\n    return optimizePeaksWithLogs(data, peakList, options).optimizedPeaks;\n}\n//# sourceMappingURL=optimizePeaks.js.map","import { appendShapeAndFWHM } from '../utils/appendShapeAndFWHM';\nimport { optimizePeaks } from './optimizePeaks';\n/**\n * This function tries to join the peaks that seems to belong to a broad signal in a single broad peak.\n */\nexport function joinBroadPeaks(peakList, options = {}) {\n    let { shape = { kind: 'gaussian' }, optimization = { kind: 'lm', options: { timeout: 10 } }, broadWidth = 0.25, broadRatio = 0.0025, } = options;\n    let max = 0;\n    let maxI = 0;\n    let count = 1;\n    const broadLines = [];\n    const peaks = appendShapeAndFWHM(peakList, { shape });\n    if (peaks.length < 2)\n        return peaks;\n    let maxDdy = peakList[0].ddY;\n    for (let i = 1; i < peakList.length; i++) {\n        if (Math.abs(peakList[i].ddY) > maxDdy)\n            maxDdy = Math.abs(peakList[i].ddY);\n    }\n    for (let i = peaks.length - 1; i >= 0; i--) {\n        if (Math.abs(peaks[i].ddY) <= broadRatio * maxDdy) {\n            broadLines.push(peaks.splice(i, 1)[0]);\n        }\n    }\n    //@ts-expect-error Push a feke peak\n    broadLines.push({ x: Number.MAX_VALUE, y: 0 });\n    let candidates = {\n        x: [broadLines[0].x],\n        y: [broadLines[0].y],\n    };\n    let indexes = [0];\n    for (let i = 1; i < broadLines.length; i++) {\n        if (Math.abs(broadLines[i - 1].x - broadLines[i].x) < broadWidth) {\n            candidates.x.push(broadLines[i].x);\n            candidates.y.push(broadLines[i].y);\n            if (broadLines[i].y > max) {\n                max = broadLines[i].y;\n                maxI = i;\n            }\n            indexes.push(i);\n            count++;\n        }\n        else {\n            if (count > 2) {\n                let fitted = optimizePeaks(candidates, [\n                    {\n                        x: broadLines[maxI].x,\n                        y: max,\n                        width: candidates.x[0] - candidates.x[candidates.x.length - 1],\n                    },\n                ], { shape, optimization });\n                //@ts-expect-error type is equal as expected\n                peaks.push(fitted[0]);\n            }\n            else {\n                // Put back the candidates to the peak list\n                indexes.forEach((index) => {\n                    // @ts-expect-error todo 2\n                    peaks.push(broadLines[index]);\n                });\n            }\n            candidates = { x: [broadLines[i].x], y: [broadLines[i].y] };\n            indexes = [i];\n            max = broadLines[i].y;\n            maxI = i;\n            count = 1;\n        }\n    }\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\n//# sourceMappingURL=joinBroadPeaks.js.map","/**\n * This method will allow to enlarge peaks while preventing overlap between peaks\n * A typical application in chromatography peak picking.\n * We should not make the hypothesis that x is equidistant\n * Because peaks may not be symmetric after we add 2 properties, from and to.\n * @return {Array} peakList\n */\nexport function broadenPeaks(peakList, options = {}) {\n    const { factor = 2, overlap = false } = options;\n    const peaks = peakList.map((peak) => {\n        const xFrom = peak.x - (peak.x - peak.inflectionPoints.from.x) * factor;\n        const xTo = peak.x + (peak.inflectionPoints.to.x - peak.x) * factor;\n        return {\n            x: peak.x,\n            y: peak.y,\n            index: peak.index,\n            width: xTo - xFrom,\n            from: { x: xFrom },\n            to: { x: xTo },\n        };\n    });\n    if (!overlap) {\n        for (let i = 0; i < peaks.length - 1; i++) {\n            let peak = peaks[i];\n            let nextPeak = peaks[i + 1];\n            if (peak.to.x > nextPeak.from.x) {\n                // we do it proportional to the width of the peaks\n                peak.to.x = nextPeak.from.x =\n                    (peak.width / (nextPeak.width + peak.width)) * (nextPeak.x - peak.x) +\n                        peak.x;\n            }\n        }\n    }\n    for (let peak of peaks) {\n        peak.width = peak.to.x - peak.from.x;\n    }\n    return peaks;\n}\n//# sourceMappingURL=broadenPeaks.js.map"],"names":["toString","Object","prototype","isAnyArray","value","call","endsWith","sgg","ys","xs","options","windowSize","derivative","polynomial","Number","isInteger","RangeError","TypeError","length","console","warn","half","Math","floor","np","ans","Float64Array","weights","fullWeights","hs","constantH","pow","i","wg1","wg2","d1","d2","l","getHs","wg","d","h","center","count","gramPoly","m","k","s","Grampoly","genFact","a","b","gf","j","weight","t","n","sum","Array","e","f","g","c","_ref","module","exports","window","median","xMedian","input","quickSelectMedian","slice","xCheck","xFindClosestIndex","array","target","sorted","low","high","middle","abs","index","diff","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","x","fromIndex","toIndex","from","to","undefined","xMaxValue","maxValue","xMinValue","minValue","xIsEquallySpaced","tolerance","maxDx","minDx","MAX_SAFE_INTEGER","absoluteDifference","xIsMonotoneIncreasing","xMedianAbsoluteDeviation","averageDeviations","mad","xMinMaxValues","min","max","xNoiseStandardDeviation","sd","arguments","_options$fromIndex","_options$toIndex","Error","rescale","output","currentMin","currentMax","_options$min","autoMinMax","_options$max","factor","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","matrix","maxRows","maxColumns","maxNumSize","constructor","name","inspectData","rows","columns","maxI","maxJ","result","line","push","formatNumber","get","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","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","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","exp","expm1","fround","log","log1p","log10","log2","round","sign","sin","sinh","sqrt","tan","tanh","trunc","arg0","powS","powM","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","checkNonEmpty","isEmpty","sumByRow","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","varianceByColumn","varianceAll","size","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","row","column","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","eye","diag","data","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","echelonForm","clone","iMax","swapRows","tmp","reducedEchelonForm","maxRow","p","pivot","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","NEGATIVE_INFINITY","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","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","mmulStrassen","y","r1","c1","r2","c2","embed","mat","r","resultat","blockMult","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","product","standardDeviation","Symbol","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","WrapperMatrix2D","LuDecomposition","lu","pivotVector","pivotSign","LUcolj","kmax","LU","isSingular","col","solve","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","isNaN","ks","cs","sn","sp","spm1","epm1","sk","ek","shift","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","optimizeTop","peaks","peak","currentIndex","beta","gamma","gsd","sgOptions","noiseLevel","smoothY","maxCriteria","minMaxRatio","realTopDetection","equallySpaced","noiseInfo","yData","dY","ddY","minY","maxY","yThreshold","dX","lastMax","lastMin","minddY","intervalL","intervalR","lastK","minddYIndex","deltaX","possible","minDistance","currentDistance","width","inflectionPoints","forEach","GAUSSIAN_EXP_FACTOR","LN2","ROOT_PI_OVER_LN2","PI","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","erfinv","ln1MinusXSqrd","lnEtcBy2Plus2","firstSqrt","secondSqrt","Gaussian","fwhm","gaussianWidthToFWHM","fwhmToWidth","gaussianFwhmToWidth","widthToFWHM","fct","gaussianFct","getArea","height","calculateGaussianHeight","getGaussianArea","getFactor","area","getGaussianFactor","getData","getGaussianData","calculateHeight","getParameters","shape","Lorentzian","lorentzianFwhmToWidth","lorentzianWidthToFWHM","lorentzianFct","getLorentzianArea","getLorentzianFactor","getLorentzianData","calculateLorentzianHeight","PseudoVoigt","mu","pseudoVoigtFwhmToWidth","pseudoVoigtWidthToFWHM","pseudoVoigtFct","getPseudoVoigtArea","getPseudoVoigtFactor","calculatePseudoVoigtHeight","getPseudoVoigtData","getShape1D","kind","getSumOfShapes","internalPeaks","sumOfShapes","parameters","totalY","peakX","shapeFct","assert","message","DefaultParameters","init","peakShape","gradientDifference","properties","getInternalPeaks","minMaxY","propertiesValues","parameter","property","propertyValue","getNormalizedValue","generalParameterValue","defaultParameterValues","range","checkOptions","parameterizedFunction","timeout","minValues","maxValues","initialValues","damping","dampingStepUp","dampingStepDown","maxIterations","errorTolerance","centralDifference","improvementThreshold","nbPoints","parLen","MIN_SAFE_INTEGER","filler","checkTimeout","endTime","Date","now","weightSquare","errorCalculation","error","func","gradientFunction","evaluatedData","params","paramFunction","nbParams","param","delta","auxParams","funcParam","point","funcParam2","matrixFunction","step","gradientFunc","residualError","inverseMatrix","jacobianWeightResidualError","perturbations","levenbergMarquardt","optimalError","optimalParameters","converged","iteration","previousError","improvementMetric","parameterValues","parameterError","iterations","selectMethod","optimizationOptions","algorithm","optimize","normalizedY","gradientDifferences","optimization","fitted","fittedValues","newPeaks","newPeak","appendShapeAndFWHM","shapeInstance","map","groupPeaks","JSON","parse","stringify","previousPeak","currentGroup","groups","optimizePeaksWithLogs","peakList","groupingFactor","factorLimits","logs","results","peakGroup","start","firstPeak","lastPeak","subarray","groupSize","time","optimizedPeaks","concat","optimizePeaks","joinBroadPeaks","broadWidth","broadRatio","broadLines","maxDdy","MAX_VALUE","candidates","indexes","broadenPeaks","overlap","xFrom","xTo","nextPeak"],"mappings":"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"}