{"version":3,"file":"ml-gsd.js","sources":["../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-savitzky-golay-generalized/src/index.js","../lib-esm/gsd.js","../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-spectra-fitting/src/shapes/sumOfGaussianLorentzians.js","../node_modules/ml-spectra-fitting/src/shapes/sumOfGaussians.js","../node_modules/ml-spectra-fitting/src/shapes/sumOfLorentzians.js","../node_modules/ml-spectra-fitting/src/util/assignDeep.js","../node_modules/ml-spectra-fitting/src/util/checkInput.js","../node_modules/ml-levenberg-marquardt/src/checkOptions.js","../node_modules/ml-levenberg-marquardt/src/errorCalculation.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","../node_modules/ml-levenberg-marquardt/src/gradientFunction.js","../node_modules/ml-levenberg-marquardt/src/step.js","../node_modules/ml-levenberg-marquardt/src/index.js","../node_modules/ml-spectra-fitting/src/util/selectMethod.js","../node_modules/ml-spectra-fitting/src/index.js","../node_modules/ml-spectra-processing/src/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/src/x/xGetFromToIndex.js","../lib-esm/post/groupPeaks.js","../lib-esm/post/optimizePeaks.js","../lib-esm/post/joinBroadPeaks.js","../lib-esm/post/broadenPeaks.js"],"sourcesContent":["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}\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}\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}\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 * Apply Savitzky Golay algorithm\n * @param {array} [ys] Array of y values\n * @param {array|number} [xs] Array of X or deltaX\n * @param {object} [options={}]\n * @param {number} [options.windowSize=9]\n * @param {number} [options.derivative=0]\n * @param {number} [options.polynomial=3]\n * @return {array} Array containing the new ys (same length)\n */\n\nexport default function SavitzkyGolay(ys, xs, options = {}) {\n  let { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n\n  if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n    throw new RangeError(\n      'Invalid window size (should be odd and at least 5 integer number)',\n    );\n  }\n  if (windowSize > ys.length) {\n    throw new RangeError(\n      `Window size is higher than the data length ${windowSize}>${ys.length}`,\n    );\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(\n      '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  }\n\n  let half = Math.floor(windowSize / 2);\n  let np = ys.length;\n  let ans = new Array(np);\n  let weights = fullWeights(windowSize, polynomial, derivative);\n  let hs = 0;\n  let constantH = true;\n  if (Array.isArray(xs)) {\n    constantH = false;\n  } else {\n    hs = Math.pow(xs, derivative);\n  }\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    } 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\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++) d += wg[l] * ys[l + i - windowSize];\n    if (!constantH) hs = getHs(xs, i - half - 1, half, derivative);\n    ans[i - half - 1] = d / hs;\n  }\n  return ans;\n}\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}\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  } else {\n    if (k === 0 && s === 0) {\n      Grampoly = 1;\n    } else {\n      Grampoly = 0;\n    }\n  }\n  return Grampoly;\n}\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}\n\nfunction Weight(i, t, m, n, s) {\n  let sum = 0;\n  for (let k = 0; k <= n; k++) {\n    //console.log(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/**\n *\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 Array(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\n/*function entropy(data,h,options){\n    var trend = SavitzkyGolay(data,h,trendOptions);\n    var copy = new Array(data.length);\n    var sum = 0;\n    var max = 0;\n    for(var i=0;i<data.length;i++){\n        copy[i] = data[i]-trend[i];\n    }\n\n    sum/=data.length;\n    console.log(sum+\" \"+max);\n    console.log(stat.array.standardDeviation(copy));\n    console.log(Math.abs(stat.array.mean(copy))/stat.array.standardDeviation(copy));\n    return sum;\n\n}\n\n\n\nfunction guessWindowSize(data, h){\n    console.log(\"entropy \"+entropy(data,h,trendOptions));\n    return 5;\n}\n*/\n","import { getShape1D } from 'ml-peak-shape-generator';\nimport SG from 'ml-savitzky-golay-generalized';\nexport function gsd(data, options = {}) {\n    let { noiseLevel, sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, shape = { kind: 'gaussian' }, smoothY = true, maxCriteria = true, minMaxRatio = 0.00025, derivativeThreshold = -1, realTopDetection = false, } = options;\n    let { y: yIn, x } = data;\n    const y = yIn.slice();\n    let equalSpaced = isEqualSpaced(x);\n    if (maxCriteria === false) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] *= -1;\n        }\n    }\n    if (noiseLevel === undefined) {\n        noiseLevel = equalSpaced ? getNoiseLevel(y) : 0;\n    }\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= noiseLevel;\n    }\n    for (let i = 0; i < y.length; i++) {\n        if (y[i] < 0) {\n            y[i] = 0;\n        }\n    }\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 yData = y;\n    let dY, ddY;\n    const { windowSize, polynomial } = sgOptions;\n    if (equalSpaced) {\n        if (smoothY) {\n            yData = SG(y, x[1] - x[0], {\n                windowSize,\n                polynomial,\n                derivative: 0,\n            });\n        }\n        dY = SG(y, x[1] - x[0], {\n            windowSize,\n            polynomial,\n            derivative: 1,\n        });\n        ddY = SG(y, x[1] - x[0], {\n            windowSize,\n            polynomial,\n            derivative: 2,\n        });\n    }\n    else {\n        if (smoothY) {\n            yData = SG(y, x, {\n                windowSize,\n                polynomial,\n                derivative: 0,\n            });\n        }\n        dY = SG(y, x, {\n            windowSize,\n            polynomial,\n            derivative: 1,\n        });\n        ddY = SG(y, x, {\n            windowSize,\n            polynomial,\n            derivative: 2,\n        });\n    }\n    const xData = x;\n    const dX = x[1] - x[0];\n    let maxDdy = 0;\n    let maxY = 0;\n    for (let i = 0; i < yData.length; i++) {\n        if (Math.abs(ddY[i]) > maxDdy) {\n            maxDdy = Math.abs(ddY[i]);\n        }\n        if (Math.abs(yData[i]) > maxY) {\n            maxY = Math.abs(yData[i]);\n        }\n    }\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        // filter based on derivativeThreshold\n        if (Math.abs(dY[i]) > derivativeThreshold) {\n            // Minimum 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                lastMin = {\n                    x: xData[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: xData[i],\n                    index: i,\n                };\n                if (dX < 0 && lastMin !== null) {\n                    intervalL.push(lastMax);\n                    intervalR.push(lastMin);\n                }\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 widthToFWHM = getShape1D(shape).widthToFWHM;\n    let lastK = -1;\n    let possible;\n    let frequency;\n    let distanceJ;\n    let minDistance;\n    let gettingCloser;\n    const peaks = [];\n    const indexes = [];\n    for (const minddYIndex of minddY) {\n        frequency = xData[minddYIndex];\n        possible = -1;\n        let k = lastK + 1;\n        minDistance = Number.MAX_VALUE;\n        distanceJ = 0;\n        gettingCloser = true;\n        while (possible === -1 && k < intervalL.length && gettingCloser) {\n            distanceJ = Math.abs(frequency - (intervalL[k].x + intervalR[k].x) / 2);\n            // Still getting closer?\n            if (distanceJ < minDistance) {\n                minDistance = distanceJ;\n            }\n            else {\n                gettingCloser = false;\n            }\n            if (distanceJ < Math.abs(intervalL[k].x - intervalR[k].x) / 2) {\n                possible = k;\n                lastK = k;\n            }\n            ++k;\n        }\n        if (possible !== -1) {\n            if (Math.abs(yData[minddYIndex]) > minMaxRatio * maxY) {\n                let width = Math.abs(intervalR[possible].x - intervalL[possible].x);\n                indexes.push(minddYIndex);\n                peaks.push({\n                    x: frequency,\n                    y: maxCriteria\n                        ? yData[minddYIndex] + noiseLevel\n                        : -yData[minddYIndex] - noiseLevel,\n                    width: width,\n                    fwhm: widthToFWHM(width),\n                    shape,\n                });\n            }\n        }\n    }\n    if (realTopDetection) {\n        determineRealTop({ peaks, x: xData, y: yData, indexes });\n    }\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\nconst isEqualSpaced = (x) => {\n    let tmp;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < x.length - 1; ++i) {\n        tmp = Math.abs(x[i + 1] - x[i]);\n        if (tmp < minDx) {\n            minDx = tmp;\n        }\n        if (tmp > maxDx) {\n            maxDx = tmp;\n        }\n    }\n    return (maxDx - minDx) / maxDx < 0.05;\n};\nconst getNoiseLevel = (y) => {\n    let mean = 0;\n    let stddev = 0;\n    let length = y.length;\n    for (let i = 0; i < length; ++i) {\n        mean += y[i];\n    }\n    mean /= length;\n    let averageDeviations = new Array(length);\n    for (let i = 0; i < length; ++i) {\n        averageDeviations[i] = Math.abs(y[i] - mean);\n    }\n    averageDeviations.sort((a, b) => a - b);\n    if (length % 2 === 1) {\n        stddev = averageDeviations[(length - 1) / 2] / 0.6745;\n    }\n    else {\n        stddev =\n            (0.5 *\n                (averageDeviations[length / 2] + averageDeviations[length / 2 - 1])) /\n                0.6745;\n    }\n    return stddev;\n};\nconst determineRealTop = (options) => {\n    const { peaks, x, y, indexes } = options;\n    let alpha;\n    let beta;\n    let gamma;\n    let p;\n    for (let i = 0; i < peaks.length; i++) {\n        const peak = peaks[i];\n        let currentPoint = indexes[i];\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentPoint - 1] >= y[currentPoint - 2] &&\n            y[currentPoint - 1] >= y[currentPoint]) {\n            currentPoint--;\n        }\n        else {\n            if (y[currentPoint + 1] >= y[currentPoint] &&\n                y[currentPoint + 1] >= y[currentPoint + 2]) {\n                currentPoint++;\n            }\n            else {\n                if (y[currentPoint - 2] >= y[currentPoint - 3] &&\n                    y[currentPoint - 2] >= y[currentPoint - 1]) {\n                    currentPoint -= 2;\n                }\n                else {\n                    if (y[currentPoint + 2] >= y[currentPoint + 1] &&\n                        y[currentPoint + 2] >= y[currentPoint + 3]) {\n                        currentPoint += 2;\n                    }\n                }\n            }\n        }\n        // interpolation to a sin() function\n        if (y[currentPoint - 1] > 0 &&\n            y[currentPoint + 1] > 0 &&\n            y[currentPoint] >= y[currentPoint - 1] &&\n            y[currentPoint] >= y[currentPoint + 1] &&\n            (y[currentPoint] !== y[currentPoint - 1] ||\n                y[currentPoint] !== y[currentPoint + 1])) {\n            alpha = 20 * Math.log10(y[currentPoint - 1]);\n            beta = 20 * Math.log10(y[currentPoint]);\n            gamma = 20 * Math.log10(y[currentPoint + 1]);\n            p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            peak.x = x[currentPoint] + (x[currentPoint] - x[currentPoint - 1]) * p;\n            peak.y =\n                y[currentPoint] -\n                    0.25 * (y[currentPoint - 1] - y[currentPoint + 1]) * p;\n        }\n    }\n};\n//# sourceMappingURL=gsd.js.map","const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","import isArray from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(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 default max;\n","import { PseudoVoigt } from 'ml-peak-shape-generator';\n\n/**\n * This function calculates the spectrum as a sum of linear combination of gaussian and lorentzian functions. The pseudo voigt\n * parameters are divided in 4 batches. 1st: centers; 2nd: heights; 3th: widths; 4th: mu's ;\n * @param t Ordinate value\n * @param p Lorentzian parameters\n * @returns {*}\n */\n\n// const pseudoVoigtFct = PseudoVoigt.fct;\n\nexport function sumOfGaussianLorentzians(p) {\n  const pseudoVoigt = new PseudoVoigt();\n  return (t) => {\n    let nL = p.length / 4;\n    let result = 0;\n    for (let i = 0; i < nL; i++) {\n      pseudoVoigt.fwhm = p[i + nL * 2];\n      pseudoVoigt.mu = p[i + nL * 3];\n      result += p[i + nL] * pseudoVoigt.fct(t - p[i]);\n    }\n    return result;\n  };\n}\n","import { Gaussian } from 'ml-peak-shape-generator';\n\n/**\n * This function calculates the spectrum as a sum of gaussian functions. The Gaussian\n * parameters are divided in 3 batches. 1st: centers; 2nd: height; 3th: widths;\n * @param t Ordinate values\n * @param p Gaussian parameters\n * @returns {*}\n */\n\nexport function sumOfGaussians(p) {\n  const nL = p.length / 3;\n  const gaussian = new Gaussian();\n  return (t) => {\n    let result = 0;\n    for (let i = 0; i < nL; i++) {\n      gaussian.fwhm = p[i + nL * 2];\n      result += p[i + nL] * gaussian.fct(t - p[i]);\n    }\n    return result;\n  };\n}\n","import { Lorentzian } from 'ml-peak-shape-generator';\n\n/**\n * This function calculates the spectrum as a sum of lorentzian functions. The Lorentzian\n * parameters are divided in 3 batches. 1st: centers; 2nd: heights; 3th: widths;\n * @param t Ordinate values\n * @param p Lorentzian parameters\n * @returns {*}\n */\n\n// const lorentzianFct = Lorentzian.fct;\n\nexport function sumOfLorentzians(p) {\n  const lorentzian = new Lorentzian();\n  return (t) => {\n    let nL = p.length / 3;\n    let result = 0;\n    for (let i = 0; i < nL; i++) {\n      lorentzian.fwhm = p[i + nL * 2];\n      result += p[i + nL] * lorentzian.fct(t - p[i]);\n    }\n    return result;\n  };\n}\n","const isValidKey = (key) => {\n  return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n};\n\nconst isObject = (val) => {\n  return typeof val === 'object';\n};\nconst isPrimitive = (val) => {\n  return typeof val === 'object' ? val === null : typeof val !== 'function';\n};\n\nexport function assignDeep(target, ...args) {\n  let index = 0;\n  if (isPrimitive(target)) target = args[index++];\n  if (!target) target = {};\n  for (; index < args.length; index++) {\n    if (!isObject(args[index])) continue;\n    for (const key in args[index]) {\n      if (!isValidKey(key)) continue;\n      if (isObject(target[key]) && isObject(args[index][key])) {\n        assignDeep(target[key], args[index][key]);\n      } else {\n        target[key] = args[index][key];\n      }\n    }\n  }\n  return target;\n}\n","import getMaxValue from 'ml-array-max';\n\nimport { sumOfGaussianLorentzians } from '../shapes/sumOfGaussianLorentzians';\nimport { sumOfGaussians } from '../shapes/sumOfGaussians';\nimport { sumOfLorentzians } from '../shapes/sumOfLorentzians';\n\nimport { assignDeep } from './assignDeep';\n\nexport function checkInput(data, peaks, options) {\n  let {\n    shape = { kind: 'gaussian' },\n    optimization = {\n      kind: 'lm',\n    },\n  } = options;\n\n  if (typeof shape.kind !== 'string') {\n    throw new Error('kind should be a string');\n  }\n\n  let kind = shape.kind.toLowerCase().replace(/[^a-z]/g, '');\n\n  let paramsFunc;\n  let defaultParameters;\n  switch (kind) {\n    case 'gaussian':\n      paramsFunc = sumOfGaussians;\n      defaultParameters = {\n        x: {\n          init: (peak) => peak.x,\n          max: (peak) => peak.x + peak.fwhm * 2,\n          min: (peak) => peak.x - peak.fwhm * 2,\n          gradientDifference: (peak) => peak.fwhm * 2e-3,\n        },\n        y: {\n          init: (peak) => peak.y,\n          max: () => 1.5,\n          min: () => 0,\n          gradientDifference: () => 1e-3,\n        },\n        fwhm: {\n          init: (peak) => peak.fwhm,\n          max: (peak) => peak.fwhm * 4,\n          min: (peak) => peak.fwhm * 0.25,\n          gradientDifference: (peak) => peak.fwhm * 2e-3,\n        },\n      };\n      break;\n    case 'lorentzian':\n      paramsFunc = sumOfLorentzians;\n      defaultParameters = {\n        x: {\n          init: (peak) => peak.x,\n          max: (peak) => peak.x + peak.fwhm * 2,\n          min: (peak) => peak.x - peak.fwhm * 2,\n          gradientDifference: (peak) => peak.fwhm * 2e-3,\n        },\n        y: {\n          init: (peak) => peak.y,\n          max: () => 1.5,\n          min: () => 0,\n          gradientDifference: () => 1e-3,\n        },\n        fwhm: {\n          init: (peak) => peak.fwhm,\n          max: (peak) => peak.fwhm * 4,\n          min: (peak) => peak.fwhm * 0.25,\n          gradientDifference: (peak) => peak.fwhm * 2e-3,\n        },\n      };\n      break;\n    case 'pseudovoigt':\n      paramsFunc = sumOfGaussianLorentzians;\n      defaultParameters = {\n        x: {\n          init: (peak) => peak.x,\n          max: (peak) => peak.x + peak.fwhm * 2,\n          min: (peak) => peak.x - peak.fwhm * 2,\n          gradientDifference: (peak) => peak.fwhm * 2e-3,\n        },\n        y: {\n          init: (peak) => peak.y,\n          max: () => 1.5,\n          min: () => 0,\n          gradientDifference: () => 1e-3,\n        },\n        fwhm: {\n          init: (peak) => peak.fwhm,\n          max: (peak) => peak.fwhm * 4,\n          min: (peak) => peak.fwhm * 0.25,\n          gradientDifference: (peak) => peak.fwhm * 2e-3,\n        },\n        mu: {\n          init: (peak) =>\n            peak.shape && peak.shape.mu !== undefined ? peak.shape.mu : 0.5,\n          min: () => 0,\n          max: () => 1,\n          gradientDifference: () => 0.01,\n        },\n      };\n      break;\n    default:\n      throw new Error('kind of shape is not supported');\n  }\n\n  let x = data.x;\n  let maxY = getMaxValue(data.y);\n  let y = new Array(x.length);\n  for (let i = 0; i < x.length; i++) {\n    y[i] = data.y[i] / maxY;\n  }\n\n  for (let i = 0; i < peaks.length; i++) {\n    peaks[i].y /= maxY;\n    peaks[i].shape = {\n      kind: shape.kind,\n      ...peaks[i].shape,\n    };\n  }\n\n  let parameters = assignDeep({}, defaultParameters, optimization.parameters);\n\n  for (let key in parameters) {\n    for (let par in parameters[key]) {\n      if (!Array.isArray(parameters[key][par])) {\n        parameters[key][par] = [parameters[key][par]];\n      }\n      if (\n        parameters[key][par].length !== 1 &&\n        parameters[key][par].length !== peaks.length\n      ) {\n        throw new Error(`The length of ${key}-${par} is not correct`);\n      }\n      for (let index = 0; index < parameters[key][par].length; index++) {\n        if (typeof parameters[key][par][index] === 'number') {\n          let value = parameters[key][par][index];\n          parameters[key][par][index] = () => value;\n        }\n      }\n    }\n  }\n\n  optimization.parameters = parameters;\n\n  return {\n    y,\n    x,\n    maxY,\n    peaks,\n    paramsFunc,\n    optimization,\n  };\n}\n","import isArray from 'is-any-array';\n\nexport default function checkOptions(data, parameterizedFunction, options) {\n  let {\n    timeout,\n    minValues,\n    maxValues,\n    initialValues,\n    weights = 1,\n    damping = 1e-2,\n    dampingStepUp = 11,\n    dampingStepDown = 9,\n    maxIterations = 100,\n    errorTolerance = 1e-7,\n    centralDifference = false,\n    gradientDifference = 10e-2,\n    improvementThreshold = 1e-3,\n  } = options;\n\n  if (damping <= 0) {\n    throw new Error('The damping option must be a positive number');\n  } else if (!data.x || !data.y) {\n    throw new Error('The data parameter must have x and y elements');\n  } else if (\n    !isArray(data.x) ||\n    data.x.length < 2 ||\n    !isArray(data.y) ||\n    data.y.length < 2\n  ) {\n    throw new Error(\n      '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\n  let parameters =\n    initialValues || new Array(parameterizedFunction.length).fill(1);\n\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\n  if (maxValues.length !== minValues.length) {\n    throw new Error('minValues and maxValues must be the same size');\n  }\n\n  if (!isArray(parameters)) {\n    throw new Error('initialValues must be an array');\n  }\n\n  if (typeof gradientDifference === 'number') {\n    gradientDifference = new Array(parameters.length).fill(gradientDifference);\n  } else if (isArray(gradientDifference)) {\n    if (gradientDifference.length !== parLen) {\n      gradientDifference = new Array(parLen).fill(gradientDifference[0]);\n    }\n  } else {\n    throw new Error(\n      'gradientDifference should be a number or array with length equal to the number of parameters',\n    );\n  }\n\n  let filler;\n  if (typeof weights === 'number') {\n    let value = 1 / weights ** 2;\n    filler = () => value;\n  } else if (isArray(weights)) {\n    if (weights.length < data.x.length) {\n      let value = 1 / weights[0] ** 2;\n      filler = () => value;\n    } else {\n      filler = (i) => 1 / weights[i] ** 2;\n    }\n  } else {\n    throw new Error(\n      'weights should be a number or array with length equal to the number of data points',\n    );\n  }\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  } else {\n    checkTimeout = () => false;\n  }\n\n  let weightSquare = new Array(data.x.length);\n  for (let i = 0; i < nbPoints; i++) {\n    weightSquare[i] = filler(i);\n  }\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","/**\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:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<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 {Array} weightSquare - Square of weights\n * @return {number}\n */\nexport default function errorCalculation(\n  data,\n  parameters,\n  parameterizedFunction,\n  weightSquare,\n) {\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\n  return error;\n}\n","import isArray from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(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 default min;\n","import isArray 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 (!isArray(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 (!isArray(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","/**\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 checkIndices(matrix, rowIndices, columnIndices) {\n  return {\n    row: checkRowIndices(matrix, rowIndices),\n    column: checkColumnIndices(matrix, columnIndices),\n  };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n  if (typeof rowIndices !== 'object') {\n    throw new TypeError('unexpected type for row indices');\n  }\n\n  let rowOut = rowIndices.some((r) => {\n    return r < 0 || r >= matrix.rows;\n  });\n\n  if (rowOut) {\n    throw new RangeError('row indices are out of range');\n  }\n\n  if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n  return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n  if (typeof columnIndices !== 'object') {\n    throw new TypeError('unexpected type for column indices');\n  }\n\n  let columnOut = columnIndices.some((c) => {\n    return c < 0 || c >= matrix.columns;\n  });\n\n  if (columnOut) {\n    throw new RangeError('column indices are out of range');\n  }\n  if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n  return columnIndices;\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 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  checkIndices,\n  checkNonEmpty,\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() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(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        }\n      }\n    }\n    return v;\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() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(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        }\n      }\n    }\n    return v;\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    let indices = checkIndices(this, rowIndices, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < indices.row.length; i++) {\n      let rowIndex = indices.row[i];\n      for (let j = 0; j < indices.column.length; j++) {\n        let columnIndex = indices.column[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 (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!Array.isArray(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 (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!Array.isArray(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 (!Array.isArray(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 (!Array.isArray(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 (Array.isArray(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","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<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 */\n\nexport default function gradientFunction(\n  data,\n  evaluatedData,\n  params,\n  gradientDifference,\n  paramFunction,\n  centralDifference,\n) {\n  const nbParams = params.length;\n  const nbPoints = data.x.length;\n  let ans = Matrix.zeros(nbParams, nbPoints);\n\n  let rowIndex = 0;\n  for (let param = 0; param < nbParams; param++) {\n    if (gradientDifference[param] === 0) 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(\n          rowIndex,\n          point,\n          (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(\n          rowIndex,\n          point,\n          (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta,\n        );\n      }\n    }\n    rowIndex++;\n  }\n\n  return ans;\n}\n","import { inverse, Matrix } from 'ml-matrix';\n\nimport gradientFunction from './gradientFunction';\n\n/**\n * Matrix function over the samples\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} evaluatedData - Array of previous evaluated function values\n * @return {Matrix}\n */\nfunction matrixFunction(data, evaluatedData) {\n  const m = data.x.length;\n\n  let ans = new Matrix(m, 1);\n\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/**\n * Iteration for Levenberg-Marquardt\n * @ignore\n * @param {{x:Array<number>, y:Array<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 * @return {Array<number>}\n */\nexport default function step(\n  data,\n  params,\n  damping,\n  gradientDifference,\n  parameterizedFunction,\n  centralDifference,\n  weights,\n) {\n  let value = damping;\n  let identity = Matrix.eye(params.length, params.length, value);\n\n  const func = parameterizedFunction(params);\n\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\n  let gradientFunc = gradientFunction(\n    data,\n    evaluatedData,\n    params,\n    gradientDifference,\n    parameterizedFunction,\n    centralDifference,\n  );\n  let residualError = matrixFunction(data, evaluatedData);\n\n  let inverseMatrix = inverse(\n    identity.add(\n      gradientFunc.mmul(\n        gradientFunc.transpose().scale('row', { scale: weights }),\n      ),\n    ),\n  );\n\n  let jacobianWeigthResidualError = gradientFunc.mmul(\n    residualError.scale('row', { scale: weights }),\n  );\n\n  let perturbations = inverseMatrix.mmul(jacobianWeigthResidualError);\n\n  return {\n    perturbations,\n    jacobianWeigthResidualError,\n  };\n}\n","import checkOptions from './checkOptions';\nimport errorCalculation from './errorCalculation';\nimport step from './step';\n\n/**\n * Curve fitting algorithm\n * @param {{x:Array<number>, y:Array<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|array} [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|array} [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 {Array<number>} [options.minValues] - Minimum allowed values for parameters\n * @param {Array<number>} [options.maxValues] - Maximum allowed values for parameters\n * @param {Array<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 default function levenbergMarquardt(\n  data,\n  parameterizedFunction,\n  options = {},\n) {\n  let {\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  } = checkOptions(data, parameterizedFunction, options);\n\n  let error = errorCalculation(\n    data,\n    parameters,\n    parameterizedFunction,\n    weightSquare,\n  );\n\n  let converged = error <= errorTolerance;\n\n  let iteration = 0;\n  for (; iteration < maxIterations && !converged; iteration++) {\n    let previousError = error;\n\n    let { perturbations, jacobianWeigthResidualError } = step(\n      data,\n      parameters,\n      damping,\n      gradientDifference,\n      parameterizedFunction,\n      centralDifference,\n      weightSquare,\n    );\n\n    for (let k = 0; k < parameters.length; k++) {\n      parameters[k] = Math.min(\n        Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)),\n        maxValues[k],\n      );\n    }\n\n    error = errorCalculation(\n      data,\n      parameters,\n      parameterizedFunction,\n      weightSquare,\n    );\n\n    if (isNaN(error)) break;\n\n    let improvementMetric =\n      (previousError - error) /\n      perturbations\n        .transpose()\n        .mmul(perturbations.mulS(damping).add(jacobianWeigthResidualError))\n        .get(0, 0);\n\n    if (improvementMetric > improvementThreshold) {\n      damping = Math.max(damping / dampingStepDown, 1e-7);\n    } else {\n      error = previousError;\n      damping = Math.min(damping * dampingStepUp, 1e7);\n    }\n\n    if (checkTimeout()) {\n      throw new Error(\n        `The execution time is over to ${options.timeout} seconds`,\n      );\n    }\n\n    converged = error <= errorTolerance;\n  }\n\n  return {\n    parameterValues: parameters,\n    parameterError: error,\n    iterations: iteration,\n  };\n}\n","import LM from 'ml-levenberg-marquardt';\n\nconst LEVENBERG_MARQUARDT = 1;\n\nexport function selectMethod(optimizationOptions = {}) {\n  let { kind, options } = optimizationOptions;\n  kind = getKind(kind);\n  switch (kind) {\n    case LEVENBERG_MARQUARDT:\n      return {\n        algorithm: LM,\n        optimizationOptions: checkOptions(kind, options),\n      };\n    default:\n      throw new Error(`Unknown kind algorithm`);\n  }\n}\n\nfunction checkOptions(kind, options = {}) {\n  // eslint-disable-next-line default-case\n  switch (kind) {\n    case LEVENBERG_MARQUARDT:\n      return Object.assign({}, lmOptions, options);\n  }\n}\n\nfunction getKind(kind) {\n  if (typeof kind !== 'string') return kind;\n  switch (kind.toLowerCase().replace(/[^a-z]/g, '')) {\n    case 'lm':\n    case 'levenbergmarquardt':\n      return LEVENBERG_MARQUARDT;\n    default:\n      throw new Error(`Unknown kind algorithm`);\n  }\n}\n\nconst lmOptions = {\n  damping: 1.5,\n  maxIterations: 100,\n  errorTolerance: 1e-8,\n};\n","import { checkInput } from './util/checkInput';\nimport { selectMethod } from './util/selectMethod';\n\n// const STATE_INIT = 0;\n// const STATE_MIN = 1;\n// const STATE_MAX = 2;\n// const STATE_GRADIENT_DIFFERENCE = 3;\n\n// const X = 0;\n// const Y = 1;\n// const WIDTH = 2;\n// const MU = 3;\n\n// const keys = ['x', 'y', 'width', 'mu'];\n/**\n * Fits a set of points to the sum of a set of bell functions.\n * @param {object} data - An object containing the x and y data to be fitted.\n * @param {array} peaks - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param {object} [options = {}]\n * @param {object} [options.shape={}] - it's specify the kind of shape used to fitting.\n * @param {string} [options.shape.kind = 'gaussian'] - kind of shape; lorentzian, gaussian and pseudovoigt are supported.\n * @param {object} [options.optimization = {}] - it's specify the kind and options of the algorithm use to optimize parameters.\n * @param {object} [options.optimization.kind = 'lm'] - kind of algorithm. By default it's levenberg-marquardt.\n * @param {object} [options.optimization.parameters] - options of each parameter to be optimized e.g. For a gaussian shape\n *  it could have x, y and with properties, each of which could contain init, min, max and gradientDifference, those options will define the guess,\n *  the min and max value of the parameter (search space) and the step size to approximate the jacobian matrix respectively. Those options could be a number,\n *  array of numbers, callback, or array of callbacks. Each kind of shape has default parameters so it could be undefined.\n * @param {object} [options.optimization.parameters.x] - options for x parameter.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.init] - definition of the starting point of the parameter (the guess),\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the guess of the first peak and so on.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.min] - definition of the lower limit of the parameter,\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the min of the first peak and so on.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.max] - definition of the upper limit of the parameter,\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the max of the first peak and so on.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.gradientDifference] - definition of  the step size to approximate the jacobian matrix of the parameter,\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the gradientDifference of the first peak and so on.\n * @param {object} [options.optimization.options = {}] - options for the specific kind of algorithm.\n * @param {number} [options.optimization.options.timeout] - maximum time running before break in seconds.\n * @param {number} [options.optimization.options.damping=1.5]\n * @param {number} [options.optimization.options.maxIterations=100]\n * @param {number} [options.optimization.options.errorTolerance=1e-8]\n * @returns {object} - A 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, peakList, options = {}) {\n  const { y, x, maxY, peaks, paramsFunc, optimization } = checkInput(\n    data,\n    peakList,\n    options,\n  );\n\n  let parameters = optimization.parameters;\n\n  let nbShapes = peaks.length;\n  let parameterKey = Object.keys(parameters);\n  let nbParams = nbShapes * parameterKey.length;\n  let pMin = new Float64Array(nbParams);\n  let pMax = new Float64Array(nbParams);\n  let pInit = new Float64Array(nbParams);\n  let gradientDifference = new Float64Array(nbParams);\n\n  for (let i = 0; i < nbShapes; i++) {\n    let peak = peaks[i];\n    for (let k = 0; k < parameterKey.length; k++) {\n      let key = parameterKey[k];\n      let init = parameters[key].init;\n      let min = parameters[key].min;\n      let max = parameters[key].max;\n      let gradientDifferenceValue = parameters[key].gradientDifference;\n      pInit[i + k * nbShapes] = init[i % init.length](peak);\n      pMin[i + k * nbShapes] = min[i % min.length](peak);\n      pMax[i + k * nbShapes] = max[i % max.length](peak);\n      gradientDifference[i + k * nbShapes] =\n        gradientDifferenceValue[i % gradientDifferenceValue.length](peak);\n    }\n  }\n\n  let { algorithm, optimizationOptions } = selectMethod(optimization);\n\n  optimizationOptions.minValues = pMin;\n  optimizationOptions.maxValues = pMax;\n  optimizationOptions.initialValues = pInit;\n  optimizationOptions.gradientDifference = gradientDifference;\n\n  let pFit = algorithm({ x, y }, paramsFunc, optimizationOptions);\n\n  let { parameterError: error, iterations } = pFit;\n  let result = { error, iterations, peaks };\n  for (let i = 0; i < nbShapes; i++) {\n    for (let k = 0; k < parameterKey.length; k++) {\n      const key = parameterKey[k];\n      const value = pFit.parameterValues[i + k * nbShapes];\n      // we modify the optimized parameters\n      if (key === 'x' || key === 'fwhm') {\n        peaks[i][parameterKey[k]] = value;\n      } else if (key === 'y') {\n        peaks[i][parameterKey[k]] = value * maxY;\n      } else {\n        peaks[i].shape[parameterKey[k]] = value;\n      }\n    }\n  }\n\n  return result;\n}\n","/**\n * Returns the closest index of a `target` in an ordered array\n * @param {array<Number>} array\n * @param {number} target\n */\n\nexport function xFindClosestIndex(array, target) {\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    } else if (array[middle] > target) {\n      high = middle;\n    } else {\n      return middle;\n    }\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    } else {\n      return low + 1;\n    }\n  } else {\n    return low;\n  }\n}\n","import { xFindClosestIndex } from './xFindClosestIndex';\n\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n * @param {array} x\n * @param {object} [options={}]\n * @param {number} [options.from] - First value for xyIntegration in the X scale\n * @param {number} [options.fromIndex=0] - First point for xyIntegration\n * @param {number} [options.to] - Last value for xyIntegration in the X scale\n * @param {number} [options.toIndex=x.length-1] - Last point for xyIntegration\n */\n\nexport function xGetFromToIndex(x, options = {}) {\n  let { fromIndex, toIndex, from, to } = options;\n\n  if (fromIndex === undefined) {\n    if (from !== undefined) {\n      fromIndex = xFindClosestIndex(x, from);\n    } else {\n      fromIndex = 0;\n    }\n  }\n  if (toIndex === undefined) {\n    if (to !== undefined) {\n      toIndex = xFindClosestIndex(x, to);\n    } else {\n      toIndex = x.length - 1;\n    }\n  }\n  if (fromIndex > toIndex) [fromIndex, toIndex] = [toIndex, fromIndex];\n  return { fromIndex, toIndex };\n}\n","export function groupPeaks(peakList, factor = 1) {\n    if (peakList && peakList.length === 0)\n        return [];\n    let peaks = JSON.parse(JSON.stringify(peakList));\n    peaks.sort((a, b) => a.x - b.x);\n    let previousPeak = {\n        x: Number.NEGATIVE_INFINITY,\n        y: 0,\n        width: 1,\n    };\n    let currentGroup = [previousPeak];\n    let groups = [];\n    peaks.forEach((peak) => {\n        if ((peak.x - previousPeak.x) / (peak.width + previousPeak.width) <=\n            factor / 2) {\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 { groupPeaks } from './groupPeaks';\nexport function optimizePeaks(data, peakList, options = {}) {\n    const { factorWidth = 1, factorLimits = 2, shape = {\n        kind: 'gaussian',\n    }, optimization = {\n        kind: 'lm',\n        options: {\n            timeout: 10,\n        },\n    }, } = options;\n    if (data.x[0] > data.x[1]) {\n        data.x.reverse();\n        data.y.reverse();\n    }\n    const checkPeakList = (peaks, shape) => {\n        const shape1D = getShape1D(shape);\n        for (let peak of peaks) {\n            if (peak.fwhm) {\n                peak.width = shape1D.fwhmToWidth(peak.fwhm);\n            }\n            else {\n                peak.fwhm = shape1D.widthToFWHM(peak.width);\n            }\n        }\n        return peaks;\n    };\n    checkPeakList(peakList, shape);\n    let groups = groupPeaks(peakList, factorWidth);\n    let results = [];\n    groups.forEach((peaks) => {\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        // Multiple peaks\n        const currentRange = {\n            x: data.x.slice(fromIndex, toIndex),\n            y: data.y.slice(fromIndex, toIndex),\n        };\n        if (currentRange.x.length > 5) {\n            let { peaks: optimizedPeaks } = optimize(currentRange, peaks, {\n                shape,\n                optimization,\n            });\n            results = results.concat(optimizedPeaks);\n            // eslint-disable-next-line curly\n        }\n        else\n            results = results.concat(peaks);\n    });\n    return checkPeakList(results, shape);\n}\n//# sourceMappingURL=optimizePeaks.js.map","import SG from 'ml-savitzky-golay-generalized';\nimport { optimize } from 'ml-spectra-fitting';\nimport { xFindClosestIndex } from 'ml-spectra-processing';\nexport function joinBroadPeaks(data, peakList, options = {}) {\n    let { broadMask, shape = { kind: 'gaussian' }, optimization = { kind: 'lm', options: { timeout: 10 } }, sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, broadRatio = 0.0025, broadWidth = 0.25, } = options;\n    let max = 0;\n    let maxI = 0;\n    let count = 1;\n    const broadLines = [];\n    const peaks = JSON.parse(JSON.stringify(peakList));\n    const mask = !broadMask\n        ? getSoftMask(data, peaks, { sgOptions, broadRatio })\n        : broadMask;\n    if (mask.length !== peaks.length) {\n        throw new Error('mask length does not match the length of peaksList');\n    }\n    for (let i = peaks.length - 1; i >= 0; i--) {\n        if (mask[i]) {\n            broadLines.push(peaks.splice(i, 1)[0]);\n        }\n    }\n    // Push a feke peak\n    broadLines.push({ x: Number.MAX_VALUE, y: 0, width: 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 = optimize(candidates, [\n                    {\n                        x: broadLines[maxI].x,\n                        y: max,\n                        width: candidates.x[0] - candidates.x[candidates.x.length - 1],\n                        shape,\n                    },\n                ], { shape, optimization });\n                let { peaks: peak } = fitted;\n                peaks.push(peak[0]);\n            }\n            else {\n                // Put back the candidates to the signals list\n                indexes.forEach((index) => {\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}\nfunction getSoftMask(data, peakList, options) {\n    const { sgOptions, broadRatio } = options;\n    const { windowSize, polynomial } = sgOptions;\n    const yData = new Float64Array(data.y);\n    const xData = new Float64Array(data.x);\n    if (xData[1] - xData[0] < 0) {\n        yData.reverse();\n        xData.reverse();\n    }\n    const ddY = SG(yData, xData[1] - xData[0], {\n        windowSize,\n        polynomial,\n        derivative: 2,\n    });\n    let maxDdy = 0;\n    for (const ddYIndex of ddY) {\n        if (Math.abs(ddYIndex) > maxDdy)\n            maxDdy = Math.abs(ddYIndex);\n    }\n    const broadMask = [];\n    for (let peak of peakList) {\n        const { x: xValue } = peak;\n        const index = xFindClosestIndex(xData, xValue, { sorted: true });\n        broadMask.push(Math.abs(ddY[index]) <= broadRatio * maxDdy);\n    }\n    return broadMask;\n}\n//# sourceMappingURL=joinBroadPeaks.js.map","export function broadenPeaks(peakList, options = {}) {\n    const { factor = 2, overlap = false } = options;\n    const peaks = JSON.parse(JSON.stringify(peakList));\n    peaks.forEach((peak) => {\n        peak.from = peak.x - (peak.width / 2) * factor;\n        peak.to = peak.x + (peak.width / 2) * factor;\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 > nextPeak.from) {\n                peak.to = nextPeak.from = (peak.to + nextPeak.from) / 2;\n            }\n        }\n    }\n    for (let peak of peaks) {\n        peak.width = peak.to - peak.from;\n    }\n    return peaks.map((peak) => {\n        const { x, y, width, shape } = peak;\n        const peakResult = { x, y, width };\n        if (shape)\n            peakResult.shape = shape;\n        return peakResult;\n    });\n}\n//# sourceMappingURL=broadenPeaks.js.map"],"names":["SavitzkyGolay","ys","xs","options","windowSize","derivative","polynomial","Number","isInteger","RangeError","length","console","warn","half","Math","floor","np","ans","Array","weights","fullWeights","hs","constantH","isArray","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","SG","toString","Object","prototype","isAnyArray","object","call","endsWith","max","input","arguments","undefined","TypeError","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Error","maxValue","sumOfGaussianLorentzians","p","pseudoVoigt","PseudoVoigt","nL","result","fwhm","mu","fct","sumOfGaussians","gaussian","Gaussian","sumOfLorentzians","lorentzian","Lorentzian","isValidKey","key","isObject","val","isPrimitive","assignDeep","target","index","args","checkInput","data","peaks","shape","kind","optimization","toLowerCase","replace","paramsFunc","defaultParameters","x","init","peak","min","gradientDifference","y","maxY","getMaxValue","parameters","par","value","checkOptions","parameterizedFunction","timeout","minValues","maxValues","initialValues","damping","dampingStepUp","dampingStepDown","maxIterations","errorTolerance","centralDifference","improvementThreshold","fill","nbPoints","parLen","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","filler","checkTimeout","endTime","Date","now","weightSquare","errorCalculation","error","func","minValue","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","line","push","formatNumber","get","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","e","slice","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","set","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","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","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","rowOut","some","r","from","columnOut","c","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","array","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","rowVector","columnVector","zeros","ones","rand","random","randInt","interval","eye","diag","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","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","NaN","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","Float64Array","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","r1","c1","r2","c2","embed","mat","resultat","blockMult","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","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","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","gradientFunction","evaluatedData","params","paramFunction","nbParams","param","delta","auxParams","funcParam","point","funcParam2","matrixFunction","step","gradientFunc","residualError","inverseMatrix","jacobianWeigthResidualError","perturbations","levenbergMarquardt","converged","iteration","previousError","improvementMetric","parameterValues","parameterError","iterations","LEVENBERG_MARQUARDT","selectMethod","optimizationOptions","getKind","algorithm","LM","assign","lmOptions","optimize","peakList","nbShapes","parameterKey","keys","pMin","pMax","pInit","gradientDifferenceValue","pFit","xFindClosestIndex","low","high","xGetFromToIndex","to"],"mappings":"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"}