{"version":3,"file":"raman-spectrum.js","sources":["../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-spectra-processing/lib-esm/x/getOutputArray.js","../node_modules/ml-spectra-processing/lib-esm/x/xMedian.js","../node_modules/ml-spectra-processing/lib-esm/x/xCheck.js","../node_modules/ml-spectra-processing/lib-esm/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xAbsoluteSum.js","../node_modules/ml-spectra-processing/lib-esm/x/xAdd.js","../node_modules/ml-spectra-processing/lib-esm/x/xApplyFunctionStr.js","../node_modules/ml-spectra-processing/lib-esm/x/xMultiply.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/matrix.js","../node_modules/ml-matrix/matrix.mjs","../node_modules/ml-spectra-processing/lib-esm/x/xMean.js","../node_modules/ml-spectra-processing/lib-esm/x/xVariance.js","../node_modules/ml-spectra-processing/lib-esm/x/xStandardDeviation.js","../node_modules/ml-spectra-processing/lib-esm/x/xDivide.js","../node_modules/ml-spectra-processing/lib-esm/x/xEnsureFloat64.js","../node_modules/ml-spectra-processing/lib-esm/utils/createArray.js","../node_modules/ml-spectra-processing/lib-esm/utils/createFromToArray.js","../node_modules/ml-spectra-processing/lib-esm/utils/stringify.js","../node_modules/ml-spectra-processing/lib-esm/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xIsEquallySpaced.js","../node_modules/ml-spectra-processing/lib-esm/x/xIsMonotonic.js","../node_modules/ml-spectra-processing/lib-esm/x/xMedianAbsoluteDeviation.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib-esm/x/utils/erfcinv.js","../node_modules/ml-spectra-processing/lib-esm/x/utils/simpleNormInv.js","../node_modules/ml-spectra-processing/lib-esm/x/xNoiseSanPlot.js","../node_modules/ml-spectra-processing/lib-esm/x/xNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib-esm/x/xNorm.js","../node_modules/ml-spectra-processing/lib-esm/x/xSum.js","../node_modules/ml-spectra-processing/lib-esm/x/xNormed.js","../node_modules/ml-spectra-processing/lib-esm/x/xPadding.js","../node_modules/ml-spectra-processing/lib-esm/x/xParetoNormalization.js","../node_modules/ml-spectra-processing/lib-esm/x/xRescale.js","../node_modules/ml-spectra-processing/lib-esm/x/xRolling.js","../node_modules/ml-spectra-processing/lib-esm/x/xRollingAverage.js","../node_modules/ml-spectra-processing/lib-esm/x/xRollingMedian.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyCheck.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyEnsureGrowingX.js","../node_modules/ml-spectra-processing/lib-esm/zones/zonesNormalize.js","../node_modules/ml-spectra-processing/lib-esm/zones/zonesWithPoints.js","../node_modules/ml-spectra-processing/lib-esm/xy/utils/equallySpacedSlot.js","../node_modules/ml-spectra-processing/lib-esm/xy/utils/integral.js","../node_modules/ml-spectra-processing/lib-esm/xy/utils/equallySpacedSmooth.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyEquallySpaced.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyFilterX.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyFilterXPositive.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyGrowingX.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyIntegration.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMaxClosestYPoint.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMinClosestYPoint.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCreateEmpty.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixMinMaxZ.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixZRescale.js","../node_modules/common-spectrum/lib/jsgraph/addStyle.js","../node_modules/common-spectrum/lib/jsgraph/colors.js","../node_modules/common-spectrum/lib/jsgraph/getJSGraph.js","../node_modules/common-spectrum/lib/jsgraph/getNormalizationAnnotations.js","../node_modules/ml-signal-processing/lib/filters/scaling/centerMean.js","../node_modules/ml-signal-processing/lib/filters/scaling/centerMedian.js","../node_modules/ml-signal-processing/lib/filters/x/fromTo.js","../node_modules/ml-signal-processing/lib/filters/scaling/normed.js","../node_modules/ml-signal-processing/lib/filters/scaling/divideBySD.js","../node_modules/ml-signal-processing/lib/filters/scaling/rescale.js","../node_modules/ml-signal-processing/lib/filters/scaling/paretoNormalization.js","../node_modules/ml-airpls/src/choleskySolver.js","../node_modules/cuthill-mckee/cuthill-mckee.js","../node_modules/ml-airpls/src/utils.js","../node_modules/ml-airpls/src/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/baselines/src/airPLS.js","../node_modules/ml-regression-base/lib-esm/checkArrayLength.js","../node_modules/ml-regression-base/lib-esm/BaseRegression.js","../node_modules/ml-regression-base/lib-esm/maybeToPrecision.js","../node_modules/ml-regression-polynomial/lib-esm/index.js","../node_modules/ml-baseline-correction-regression/src/index.js","../node_modules/baselines/src/iterativePolynomial.js","../node_modules/baselines/src/rollingAverage.js","../node_modules/ml-rolling-ball-baseline/lib-esm/rollingBall.js","../node_modules/baselines/src/rollingBall.js","../node_modules/baselines/src/rollingMedian.js","../node_modules/ml-signal-processing/lib/filters/baseline/airPLSBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/iterativePolynomialBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingAverageBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingBallBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingMedianBaseline.js","../node_modules/ml-savitzky-golay-generalized/lib-esm/index.js","../node_modules/ml-signal-processing/lib/filters/sg/firstDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/secondDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/thirdDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/savitzkyGolay.js","../node_modules/ml-signal-processing/lib/filters/x/ensureGrowing.js","../node_modules/ml-signal-processing/lib/filters/x/reverseIfNeeded.js","../node_modules/ml-signal-processing/lib/filters/x/equallySpaced.js","../node_modules/ml-signal-processing/lib/filters/x/filterX.js","../node_modules/ml-signal-processing/lib/filters/x/setMaxX.js","../node_modules/ml-signal-processing/lib/filters/x/setMinX.js","../node_modules/ml-gsd/lib/utils/optimizeTop.js","../node_modules/ml-gsd/lib/gsd.js","../node_modules/ml-peak-shape-generator/lib-esm/util/constants.js","../node_modules/ml-peak-shape-generator/lib-esm/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzianDispersive/LorentzianDispersive.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/generalizedLorentzian/GeneralizedLorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/getShape1D.js","../node_modules/ml-spectra-fitting/lib/shapes/getSumOfShapes.js","../node_modules/ml-spectra-fitting/lib/util/assert.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/DefaultParameters.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/getInternalPeaks.js","../node_modules/ml-levenberg-marquardt/lib/check_options.js","../node_modules/ml-levenberg-marquardt/lib/error_calculation.js","../node_modules/ml-levenberg-marquardt/lib/gradient_function.js","../node_modules/ml-levenberg-marquardt/lib/step.js","../node_modules/ml-levenberg-marquardt/lib/levenberg_marquardt.js","../node_modules/ml-direct/src/util/antiLowerConvexHull.js","../node_modules/ml-direct/src/index.js","../node_modules/ml-spectra-fitting/lib/util/wrappers/directOptimization.js","../node_modules/ml-spectra-fitting/lib/util/selectMethod.js","../node_modules/ml-spectra-fitting/lib/index.js","../node_modules/ml-signal-processing/lib/filters/x/calibrateX.js","../node_modules/ml-signal-processing/lib/filters/x/xFunction.js","../node_modules/ml-signal-processing/lib/filters/scaling/yFunction.js","../node_modules/ml-signal-processing/lib/filters/y/setMaxY.js","../node_modules/ml-signal-processing/lib/filters/y/setMinY.js","../node_modules/ml-signal-processing/lib/filterXY.js","../node_modules/common-spectrum/lib/util/getNormalizedSpectrum.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/lib/util/convertUnit.js","../node_modules/common-spectrum/lib/util/ensureRegexp.js","../node_modules/common-spectrum/lib/util/getConvertedVariable.js","../node_modules/common-spectrum/lib/util/getXYSpectra.js","../node_modules/common-spectrum/lib/util/getXYSpectrum.js","../node_modules/common-spectrum/lib/Analysis.js","../node_modules/common-spectrum/lib/util/appendDistinctParameter.js","../node_modules/common-spectrum/lib/util/appendDistinctValue.js","../node_modules/common-spectrum/lib/AnalysesManager.js","../node_modules/isutf8/dist/index.esm.js","../node_modules/ensure-string/lib-esm/index.js","../node_modules/dynamic-typing/lib-esm/parseString.js","../node_modules/gyromagnetic-ratio/lib-esm/gyromagneticRatioMHzT.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticNucleus.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticRatio.js","../node_modules/gyromagnetic-ratio/lib-esm/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/jcampconverter/dist/jcampconverter.js","../node_modules/common-spectrum/lib/from/fromJcamp.js","../node_modules/convert-to-jcamp/lib-esm/utils/addInfoData.js","../node_modules/convert-to-jcamp/lib-esm/utils/checkMatrix.js","../node_modules/convert-to-jcamp/lib-esm/utils/checkNumberOrArray.js","../node_modules/convert-to-jcamp/lib-esm/utils/getExtremeValues.js","../node_modules/convert-to-jcamp/lib-esm/creatorNtuples.js","../node_modules/convert-to-jcamp/lib-esm/utils/getFactorNumber.js","../node_modules/convert-to-jcamp/lib-esm/utils/getBestFactor.js","../node_modules/convert-to-jcamp/lib-esm/utils/getNumber.js","../node_modules/convert-to-jcamp/lib-esm/utils/peakTableCreator.js","../node_modules/convert-to-jcamp/lib-esm/utils/rescaleAndEnsureInteger.js","../node_modules/convert-to-jcamp/lib-esm/utils/vectorEncoder.js","../node_modules/convert-to-jcamp/lib-esm/utils/xyDataCreator.js","../node_modules/convert-to-jcamp/lib-esm/fromJSON.js","../node_modules/convert-to-jcamp/lib-esm/fromVariables.js","../node_modules/common-spectrum/lib/to/toJcamps.js","../node_modules/common-spectrum/lib/to/toJcamp.js","../node_modules/common-spectrum/lib/util/peakPicking.js","../node_modules/common-spectrum/lib/util/autoPeakPicking.js","../node_modules/common-spectrum/lib/index.js","../src/jsgraph/getAnnotations.js","../src/utils/surfaceAnalysis.js","../node_modules/spc-parser/lib-esm/types.js","../node_modules/spc-parser/lib-esm/utility/headerUtils.js","../node_modules/spc-parser/lib-esm/fileHeader.js","../node_modules/spc-parser/lib-esm/utility/getDataShape.js","../node_modules/iobuffer/lib-esm/text.js","../node_modules/iobuffer/lib-esm/IOBuffer.js","../node_modules/spc-parser/lib-esm/dataBlock/utility/ensureIncreasingXValues.js","../node_modules/spc-parser/lib-esm/dataBlock/shared.js","../node_modules/spc-parser/lib-esm/dataBlock/newDataBlock.js","../node_modules/spc-parser/lib-esm/dataBlock/oldDataBlock.js","../node_modules/spc-parser/lib-esm/logBlock.js","../node_modules/spc-parser/lib-esm/parse.js","../src/from/fromSPC.js","../node_modules/wdf-parser/lib-esm/maps.js","../node_modules/wdf-parser/lib-esm/readBlockHeader.js","../node_modules/wdf-parser/lib-esm/readBlock.js","../node_modules/wdf-parser/lib-esm/utilities.js","../node_modules/wdf-parser/lib-esm/readFileHeader.js","../node_modules/wdf-parser/lib-esm/parse.js","../src/from/fromWDF.js","../src/index.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function\n * @param output - undefined or a new array\n * @param length - length of the output array\n * @returns\n */\nexport function getOutputArray(output, length) {\n    if (output !== undefined) {\n        if (!isAnyArray(output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        if (output.length !== length) {\n            throw new TypeError('the output array does not have the correct length');\n        }\n        return output;\n    }\n    else {\n        return new Float64Array(length);\n    }\n}\n//# sourceMappingURL=getOutputArray.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculates the median of an array.\n * @param input - Array containing values\n * @param options\n * @returns - median\n */\nexport function xMedian(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { exact = false } = options || {};\n    const array = input.slice();\n    const middleIndex = calcMiddle(0, array.length - 1);\n    const median = quickSelect(array, middleIndex);\n    if (array.length % 2 === 1 || !exact) {\n        return median;\n    }\n    const medianNext = quickSelect(array, middleIndex + 1);\n    return (median + medianNext) / 2;\n}\nfunction quickSelect(array, middleIndex) {\n    let low = 0;\n    let high = array.length - 1;\n    let middle = 0;\n    let currentLow = 0;\n    let currentHigh = 0;\n    while (true) {\n        if (high <= low) {\n            return array[middleIndex];\n        }\n        if (high === low + 1) {\n            if (array[low] > array[high]) {\n                swap(array, low, high);\n            }\n            return array[middleIndex];\n        }\n        // Find median of low, middle and high items; swap into position low\n        middle = calcMiddle(low, high);\n        if (array[middle] > array[high])\n            swap(array, middle, high);\n        if (array[low] > array[high])\n            swap(array, low, high);\n        if (array[middle] > array[low])\n            swap(array, middle, low);\n        // Swap low item (now in position middle) into position (low+1)\n        swap(array, middle, low + 1);\n        // Nibble from each end towards middle, swapping items when stuck\n        currentLow = low + 1;\n        currentHigh = high;\n        while (true) {\n            do\n                currentLow++;\n            while (array[low] > array[currentLow]);\n            do\n                currentHigh--;\n            while (array[currentHigh] > array[low]);\n            if (currentHigh < currentLow) {\n                break;\n            }\n            swap(array, currentLow, currentHigh);\n        }\n        // Swap middle item (in position low) back into correct position\n        swap(array, low, currentHigh);\n        // Re-set active partition\n        if (currentHigh <= middleIndex) {\n            low = currentLow;\n        }\n        if (currentHigh >= middleIndex) {\n            high = currentHigh - 1;\n        }\n    }\n}\nfunction swap(array, i, j) {\n    const temp = array[j];\n    array[j] = array[i];\n    array[i] = temp;\n}\nfunction calcMiddle(i, j) {\n    return Math.floor((i + j) / 2);\n}\n//# sourceMappingURL=xMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - Array to check.\n * @param options - Additional checks.\n */\nexport function xCheck(input, options = {}) {\n    const { minLength } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    if (typeof input[0] !== 'number') {\n        throw new TypeError('input must contain numbers');\n    }\n    if (minLength && input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n * @param array - array of numbers\n * @param target - target\n * @param options\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from './xFindClosestIndex';\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n * @param x - array of numbers\n * @param options - Options\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex } = options;\n    const { from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\nexport function xAbsoluteSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sum = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sum += Math.abs(array[i]);\n    }\n    return sum;\n}\n//# sourceMappingURL=xAbsoluteSum.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param array1 - the first array\n * @param array2 - the second array or number\n * @returns the result of the addition\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xAdd.js.map","/**\n * Will apply a function on each element of the array described as a string\n * By default we will use as variable 'x'\n * In front of sequence of lowercase we will add 'Math.'. This allows to write\n * `sin(x) + cos(x)` and it will be replace internally by (x) => (Math.sin(x) + Math.cos(x))\n * @param array\n * @param options\n * @returns\n */\nexport function xApplyFunctionStr(array, options = {}) {\n    const { variableLabel = 'x', fctString = variableLabel } = options;\n    const fct = new Function(variableLabel, `return Number(${fctString\n        .replaceAll(/(?<before>^|\\W)(?<after>[\\da-z]{2,}\\()/g, '$<before>Math.$<after>')\n        .replaceAll('Math.Math', 'Math')})`);\n    const toReturn = Float64Array.from(array);\n    for (let i = 0; i < array.length; i++) {\n        toReturn[i] = fct(array[i]);\n        if (Number.isNaN(toReturn[i])) {\n            throw new Error(`The callback ${fctString} does not return a number: ${array[i]}`);\n        }\n    }\n    return toReturn;\n}\n//# sourceMappingURL=xApplyFunctionStr.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from './getOutputArray';\n/**\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array\n * @param options - options\n */\nexport function xMultiply(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xMultiply.js.map","import { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport { max as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isAnyArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray.isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray.isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nfunction newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nfunction checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n\nfunction sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nfunction centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nfunction centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nfunction centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nfunction getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nfunction getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nfunction getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n\nclass AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isDistance() {\n    if (!this.isSymmetric()) return false;\n\n    for (let i = 0; i < this.rows; i++) {\n      if (this.get(i, i) !== 0) return false;\n    }\n\n    return true;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    switch (type) {\n      case 'max':\n        return this.max();\n      case 'frobenius':\n        return Math.sqrt(this.dot(this));\n      default:\n        throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  mpow(scalar) {\n    if (!this.isSquare()) {\n      throw new RangeError('Matrix must be square');\n    }\n    if (!Number.isInteger(scalar) || scalar < 0) {\n      throw new RangeError('Exponent must be a non-negative integer');\n    }\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\n    let result = Matrix.eye(this.rows);\n    let bb = this;\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\n    for (let e = scalar; e >= 1; e /= 2) {\n      if ((e & 1) !== 0) {\n        result = result.mmul(bb);\n      }\n      bb = bb.mmul(bb);\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      result = result.setSubMatrix(c11, 0, 0);\n      result = result.setSubMatrix(c12, c11.rows, 0);\n      result = result.setSubMatrix(c21, 0, c11.columns);\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min,\n          max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n  }\n\n  /**\n   * @template {AbstractMatrix} M\n   * @param {AbstractMatrix} from\n   * @param {M} to\n   * @return {M}\n   */\n  static copy(from, to) {\n    for (const [row, column, value] of from.entries()) {\n      to.set(row, column, value);\n    }\n\n    return to;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield [row, column, value]\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *entries() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield [row, col, this.get(row, col)];\n      }\n    }\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield value\n   * @returns {Generator<number, void, void>}\n   */\n  *values() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield this.get(row, col);\n      }\n    }\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n  /**\n   * @type {Float64Array[]}\n   */\n  data;\n\n  /**\n   * Init an empty matrix\n   * @param {number} nRows\n   * @param {number} nColumns\n   */\n  #initData(nRows, nColumns) {\n    this.data = [];\n\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\n      for (let i = 0; i < nRows; i++) {\n        this.data.push(new Float64Array(nColumns));\n      }\n    } else {\n      throw new TypeError('nColumns must be a positive integer');\n    }\n\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      this.#initData(nRows.rows, nRows.columns);\n      Matrix.copy(nRows, this);\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      this.#initData(nRows, nColumns);\n    } else if (isAnyArray.isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n\n      this.rows = nRows;\n      this.columns = nColumns;\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n  /** @type {Matrix} */\n  #matrix;\n\n  get size() {\n    return this.#matrix.size;\n  }\n\n  get rows() {\n    return this.#matrix.rows;\n  }\n\n  get columns() {\n    return this.#matrix.columns;\n  }\n\n  get diagonalSize() {\n    return this.rows;\n  }\n\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isSymmetricMatrix(value) {\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static zeros(diagonalSize) {\n    return new this(diagonalSize);\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static ones(diagonalSize) {\n    return new this(diagonalSize).fill(1);\n  }\n\n  /**\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n   * @return {this}\n   */\n  constructor(diagonalSize) {\n    super();\n\n    if (Matrix.isMatrix(diagonalSize)) {\n      if (!diagonalSize.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n\n      this.#matrix = Matrix.copy(\n        diagonalSize,\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\n      );\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\n    } else {\n      this.#matrix = new Matrix(diagonalSize);\n\n      if (!this.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n    }\n  }\n\n  clone() {\n    const matrix = new SymmetricMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  toMatrix() {\n    return new Matrix(this);\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.#matrix.get(rowIndex, columnIndex);\n  }\n  set(rowIndex, columnIndex, value) {\n    // symmetric set\n    this.#matrix.set(rowIndex, columnIndex, value);\n    this.#matrix.set(columnIndex, rowIndex, value);\n\n    return this;\n  }\n\n  removeCross(index) {\n    // symmetric remove side\n    this.#matrix.removeRow(index);\n    this.#matrix.removeColumn(index);\n\n    return this;\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    const row = array.slice();\n    row.splice(index, 1);\n\n    this.#matrix.addRow(index, row);\n    this.#matrix.addColumn(index, array);\n\n    return this;\n  }\n\n  /**\n   * @param {Mask[]} mask\n   */\n  applyMask(mask) {\n    if (mask.length !== this.diagonalSize) {\n      throw new RangeError('Mask size do not match with matrix size');\n    }\n\n    // prepare sides to remove from matrix from mask\n    /** @type {number[]} */\n    const sidesToRemove = [];\n    for (const [index, passthroughs] of mask.entries()) {\n      if (passthroughs) continue;\n      sidesToRemove.push(index);\n    }\n    // to remove from highest to lowest for no mutation shifting\n    sidesToRemove.reverse();\n\n    // remove sides\n    for (const sideIndex of sidesToRemove) {\n      this.removeCross(sideIndex);\n    }\n\n    return this;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * iterate from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 1 2 3 4\n   * B 2 5 6 7\n   * C 3 6 8 9\n   * D 4 7 9 10\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n   *\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n\n    /** @type {number[]} */\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   * @return {SymmetricMatrix}\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n    // compactSize = (sideSize * (sideSize + 1)) / 2\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new SymmetricMatrix(diagonalSize);\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return matrix;\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield [row, column, value]\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightEntries() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield [row, col, value];\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield value\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightValues() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield value;\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isDistanceMatrix(value) {\n    return (\n      SymmetricMatrix.isSymmetricMatrix(value) &&\n      value.klassSubType === 'DistanceMatrix'\n    );\n  }\n\n  constructor(sideSize) {\n    super(sideSize);\n\n    if (!this.isDistance()) {\n      throw new TypeError('Provided arguments do no produce a distance matrix');\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    // distance matrix diagonal is 0\n    if (rowIndex === columnIndex) value = 0;\n\n    return super.set(rowIndex, columnIndex, value);\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    // ensure distance\n    array = array.slice();\n    array[index] = 0;\n\n    return super.addCross(index, array);\n  }\n\n  toSymmetricMatrix() {\n    return new SymmetricMatrix(this);\n  }\n\n  clone() {\n    const matrix = new DistanceMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      if (row === col) continue;\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * no diagonal (only zeros)\n   * iterable from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 0 1 2 3\n   * B 1 0 4 5\n   * C 2 4 0 6\n   * D 3 5 6 0\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n   *\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n    /** @type {number[]} */\n    const compact = new Array(compactLength);\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n\n    if (compactSize === 0) {\n      return new this(0);\n    }\n\n    // compactSize in Natural integer range ]0;∞]\n    // compactSize = (sideSize * (sideSize - 1)) / 2\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new this(diagonalSize);\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return matrix;\n  }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n\nclass MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n  constructor(matrix, columnIndices) {\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, matrix.rows, columnIndices.length);\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n  }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n  }\n}\n\nclass MatrixFlipRowView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n  }\n}\n\nclass MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n  constructor(matrix, rowIndices) {\n    checkRowIndices(matrix, rowIndices);\n    super(matrix, rowIndices.length, matrix.columns);\n    this.rowIndices = rowIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n  }\n}\n\nclass MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    checkRowIndices(matrix, rowIndices);\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, rowIndices.length, columnIndices.length);\n    this.rowIndices = rowIndices;\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n\nclass MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n\nclass MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n\nfunction wrap(array, options) {\n  if (isAnyArray.isAnyArray(array)) {\n    if (array[0] && isAnyArray.isAnyArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n\nclass LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n\nfunction hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n\nclass QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n\nclass SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n\nfunction inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n\nfunction determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    if (matrix.columns === 0) {\n      return 1;\n    }\n\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isEmpty()) {\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n    // (0xn)*(nx0)*(0xn) = 0xn\n    // (nx0)*(0xn)*(nx0) = nx0\n    return matrix.transpose();\n  }\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > threshold) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n\nclass EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    if (matrix.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(i, j, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n    } else {\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n        V.set(j, i, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(j, i, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(k, j) * d[k];\n          e[k] += V.get(k, j) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(n - 1, i, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(k, i + 1) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(k, i + 1) * V.get(k, j);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(k, j, V.get(k, j) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(k, i + 1, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n    V.set(n - 1, j, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      do {\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(k, i + 1);\n            V.set(k, i + 1, s * V.get(k, i) + c * h);\n            V.set(k, i, c * V.get(k, i) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(j, i);\n        V.set(j, i, V.get(j, k));\n        V.set(j, k, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        // eslint-disable-next-line no-multi-assign\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          // eslint-disable-next-line no-multi-assign\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n\nclass CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &&= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = positiveDefinite;\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n\nclass nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the mean value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMean(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue / (toIndex - fromIndex + 1);\n}\n//# sourceMappingURL=xMean.js.map","import { isAnyArray } from 'is-any-array';\nimport { xMean } from './xMean';\n/**\n * Finds the variance of the data\n * @param values - the values of the array\n * @param options - options\n * @returns variance\n */\nexport function xVariance(values, options = {}) {\n    if (!isAnyArray(values)) {\n        throw new TypeError('input must be an array');\n    }\n    const { unbiased = true, mean = xMean(values) } = options;\n    let sqrError = 0;\n    for (let i = 0; i < values.length; i++) {\n        const x = values[i] - mean;\n        sqrError += x * x;\n    }\n    if (unbiased) {\n        return sqrError / (values.length - 1);\n    }\n    else {\n        return sqrError / values.length;\n    }\n}\n//# sourceMappingURL=xVariance.js.map","import { xVariance } from './xVariance';\n/**\n * Finds the standard deviation for the data at hand\n * @param values - values in the data\n * @param options - options\n * @returns standard deviation\n */\nexport function xStandardDeviation(values, options = {}) {\n    return Math.sqrt(xVariance(values, options));\n}\n//# sourceMappingURL=xStandardDeviation.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from './getOutputArray';\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array or number\n * @param options - options\n */\nexport function xDivide(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new RangeError('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xDivide.js.map","import { xCheck } from './xCheck';\n/**\n * Returns a copy of the data as a Float64Array.\n * @param array - array of numbers\n */\nexport function xEnsureFloat64(array) {\n    xCheck(array);\n    if (array instanceof Float64Array) {\n        return array.slice(0);\n    }\n    return Float64Array.from(array);\n}\n//# sourceMappingURL=xEnsureFloat64.js.map","export function createNumberArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\nexport function createDoubleArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\n//# sourceMappingURL=createArray.js.map","/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n * @param options - options\n * @returns - array of distributed numbers between \"from\" and \"to\"\n */\nexport function createFromToArray(options = {}) {\n    const { from = 0, to = 1, length = 1000, includeFrom = true, includeTo = true, distribution = 'uniform', } = options;\n    const array = new Float64Array(length);\n    let div = length;\n    if (includeFrom && includeTo) {\n        div = length - 1;\n    }\n    else if ((!includeFrom && includeTo) || (includeFrom && !includeTo)) {\n        div = length;\n    }\n    else if (!includeFrom && !includeTo) {\n        div = length + 1;\n    }\n    const delta = (to - from) / div;\n    if (distribution === 'uniform') {\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * index;\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * (index + 1);\n                index++;\n            }\n        }\n    }\n    else if (distribution === 'log') {\n        const base = (to / from) ** (1 / div);\n        const firstExponent = Math.log(from) / Math.log(base);\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index);\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index + 1);\n                index++;\n            }\n        }\n    }\n    else {\n        throw new Error('distribution must be uniform or log');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Stringify an object and convert all typed arrays to arrays\n * @param object\n * @param replacer\n * @param space\n * @returns\n */\nexport function stringify(object, replacer, space) {\n    const internalReplacer = (key, value) => {\n        if (ArrayBuffer.isView(value)) {\n            value = Array.from(value);\n        }\n        if (replacer) {\n            return replacer(key, value);\n        }\n        return value;\n    };\n    return JSON.stringify(object, internalReplacer, space);\n}\n//# sourceMappingURL=stringify.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the minimal value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","/**\n * Check if the values are separated always by the same difference\n * @param array - Monotone growing array of number\n * @param options\n */\nexport function xIsEquallySpaced(array, options = {}) {\n    if (array.length < 3)\n        return true;\n    const { tolerance = 0.05 } = options;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < array.length - 1; ++i) {\n        const absoluteDifference = array[i + 1] - array[i];\n        if (absoluteDifference < minDx) {\n            minDx = absoluteDifference;\n        }\n        if (absoluteDifference > maxDx) {\n            maxDx = absoluteDifference;\n        }\n    }\n    return (maxDx - minDx) / maxDx < tolerance;\n}\n//# sourceMappingURL=xIsEquallySpaced.js.map","/**\n * Returns true if x is monotonic.\n * @param array - array of numbers.\n * @returns 1 if monotonic increasing, -1 if monotonic decreasing, 0 if not monotonic.\n */\nexport function xIsMonotonic(array) {\n    if (array.length <= 2) {\n        return 1;\n    }\n    if (array[0] === array[1]) {\n        // maybe a constant series\n        for (let i = 1; i < array.length - 1; i++) {\n            if (array[i] !== array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    if (array[0] < array.at(-1)) {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] >= array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    else {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] <= array[i + 1])\n                return 0;\n        }\n        return -1;\n    }\n}\n//# sourceMappingURL=xIsMonotonic.js.map","import { xMedian } from './xMedian';\n/**\n * This function calculates the median absolute deviation (MAD).\n * https://en.wikipedia.org/wiki/Median_absolute_deviation\n * @param array\n */\nexport function xMedianAbsoluteDeviation(array) {\n    const median = xMedian(array);\n    const averageDeviations = new Float64Array(array.length);\n    for (let i = 0; i < array.length; i++) {\n        averageDeviations[i] = Math.abs(array[i] - median);\n    }\n    return {\n        median,\n        mad: xMedian(averageDeviations),\n    };\n}\n//# sourceMappingURL=xMedianAbsoluteDeviation.js.map","import { xCheck } from './xCheck';\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns - Object with 2 properties, min and max.\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (const value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","/*\nAdapted from: https://github.com/compute-io/erfcinv/blob/aa116e23883839359e310ad41a7c42f72815fc1e/lib/number.js\n\nThe MIT License (MIT)\n\nCopyright (c) 2014-2015 The Compute.io Authors. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the \"Software\") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n// Coefficients for erfcinv on [0, 0.5]:\nconst Y1 = 8.91314744949340820313e-2;\nconst P1 = [\n    -5.38772965071242932965e-3, 8.22687874676915743155e-3,\n    2.19878681111168899165e-2, -3.65637971411762664006e-2,\n    -1.26926147662974029034e-2, 3.34806625409744615033e-2,\n    -8.36874819741736770379e-3, -5.08781949658280665617e-4,\n];\nconst Q1 = [\n    8.86216390456424707504e-4, -2.33393759374190016776e-3,\n    7.95283687341571680018e-2, -5.27396382340099713954e-2,\n    -7.1228902341542847553e-1, 6.62328840472002992063e-1, 1.56221558398423026363,\n    -1.56574558234175846809, -9.70005043303290640362e-1, 1,\n];\n// Coefficients for erfcinv for 0.5 > 1-x >= 0:\nconst Y2 = 2.249481201171875;\nconst P2 = [\n    -3.67192254707729348546, 2.11294655448340526258e1, 1.7445385985570866523e1,\n    -4.46382324441786960818e1, -1.88510648058714251895e1,\n    1.76447298408374015486e1, 8.37050328343119927838, 1.05264680699391713268e-1,\n    -2.02433508355938759655e-1,\n];\nconst Q2 = [\n    1.72114765761200282724, -2.26436933413139721736e1, 1.08268667355460159008e1,\n    4.85609213108739935468e1, -2.01432634680485188801e1,\n    -2.86608180499800029974e1, 3.9713437953343869095, 6.24264124854247537712, 1,\n];\n// Coefficients for erfcinv for sqrt( -log(1-x)):\nconst Y3 = 8.07220458984375e-1;\nconst P3 = [\n    -6.81149956853776992068e-10, 2.85225331782217055858e-8,\n    -6.79465575181126350155e-7, 2.14558995388805277169e-3,\n    2.90157910005329060432e-2, 1.42869534408157156766e-1,\n    3.37785538912035898924e-1, 3.87079738972604337464e-1,\n    1.17030156341995252019e-1, -1.63794047193317060787e-1,\n    -1.31102781679951906451e-1,\n];\nconst Q3 = [\n    1.105924229346489121e-2, 1.52264338295331783612e-1, 8.48854343457902036425e-1,\n    2.59301921623620271374, 4.77846592945843778382, 5.38168345707006855425,\n    3.46625407242567245975, 1,\n];\nconst Y4 = 9.3995571136474609375e-1;\nconst P4 = [\n    2.66339227425782031962e-12, -2.30404776911882601748e-10,\n    4.60469890584317994083e-6, 1.57544617424960554631e-4,\n    1.87123492819559223345e-3, 9.50804701325919603619e-3,\n    1.85573306514231072324e-2, -2.22426529213447927281e-3,\n    -3.50353787183177984712e-2,\n];\nconst Q4 = [\n    7.64675292302794483503e-5, 2.63861676657015992959e-3,\n    3.41589143670947727934e-2, 2.20091105764131249824e-1,\n    7.62059164553623404043e-1, 1.3653349817554063097, 1,\n];\nconst Y5 = 9.8362827301025390625e-1;\nconst P5 = [\n    9.9055709973310326855e-17, -2.81128735628831791805e-14,\n    4.62596163522878599135e-9, 4.49696789927706453732e-7,\n    1.49624783758342370182e-5, 2.09386317487588078668e-4,\n    1.05628862152492910091e-3, -1.12951438745580278863e-3,\n    -1.67431005076633737133e-2,\n];\nconst Q5 = [\n    2.82243172016108031869e-7, 2.75335474764726041141e-5,\n    9.64011807005165528527e-4, 1.60746087093676504695e-2,\n    1.38151865749083321638e-1, 5.91429344886417493481e-1, 1,\n];\n/**\n * Polyval.\n * @param c - Array of Number.\n * @param x - Number.\n * @returns Number.\n */\nfunction polyval(c, x) {\n    let p = 0;\n    for (const coef of c) {\n        p = p * x + coef;\n    }\n    return p;\n}\n/**\n * Calculates a rational approximation.\n * @private\n * @param x - Number.\n * @param v - Number.\n * @param P - Array of polynomial coefficients.\n * @param Q - Array of polynomial coefficients.\n * @param Y - Number.\n * @returns Rational approximation.\n */\nfunction calc(x, v, P, Q, Y) {\n    const s = x - v;\n    const r = polyval(P, s) / polyval(Q, s);\n    return Y * x + r * x;\n}\n/**\n * Evaluates the complementary inverse error function for an input value.\n * @private\n * @param x - Input value.\n * @returns Evaluated complementary inverse error function.\n */\nexport default function erfcinv(x) {\n    let sign = false;\n    let val;\n    let q;\n    let g;\n    let r;\n    // [1] Special cases...\n    // NaN:\n    if (Number.isNaN(x)) {\n        return Number.NaN;\n    }\n    // x not on the interval: [0,2]\n    if (x < 0 || x > 2) {\n        throw new RangeError(`erfcinv()::invalid input argument. Value must be on the interval [0,2]. Value: \\`${x}\\`.`);\n    }\n    if (x === 0) {\n        return Number.POSITIVE_INFINITY;\n    }\n    if (x === 2) {\n        return Number.NEGATIVE_INFINITY;\n    }\n    if (x === 1) {\n        return 0;\n    }\n    // [2] Get the sign and make use of `erfc` reflection formula: `erfc(-z)=2 - erfc(z)`...\n    if (x > 1) {\n        q = 2 - x;\n        x = 1 - q;\n        sign = true;\n    }\n    else {\n        q = x;\n        x = 1 - x;\n    }\n    // [3] |x| <= 0.5\n    if (x <= 0.5) {\n        g = x * (x + 10);\n        r = polyval(P1, x) / polyval(Q1, x);\n        val = g * Y1 + g * r;\n        return sign ? -val : val;\n    }\n    // [4] 1-|x| >= 0.25\n    if (q >= 0.25) {\n        g = Math.sqrt(-2 * Math.log(q));\n        q = q - 0.25;\n        r = polyval(P2, q) / polyval(Q2, q);\n        val = g / (Y2 + r);\n        return sign ? -val : val;\n    }\n    q = Math.sqrt(-Math.log(q));\n    // [5] q < 3\n    if (q < 3) {\n        return calc(q, 1.125, P3, Q3, Y3);\n    }\n    // [6] q < 6\n    if (q < 6) {\n        return calc(q, 3, P4, Q4, Y4);\n    }\n    // Note that the smallest number in JavaScript is 5e-324. Math.sqrt( -Math.log( 5e-324 ) ) ~27.2844\n    return calc(q, 6, P5, Q5, Y5);\n    // Note that in the boost library, they are able to go to much smaller values, as 128 bit long doubles support ~1e-5000; something which JavaScript does not natively support.\n}\n//# sourceMappingURL=erfcinv.js.map","import erfcinv from './erfcinv';\n/**\n * Applies a simple normalization inverse transformation to the input data.\n * @param data - The input array of numbers to be transformed.\n * @param options - Optional parameters for the transformation.\n * @returns A new Float64Array containing the transformed data.\n */\nexport function simpleNormInv(data, options = {}) {\n    const { magnitudeMode = false } = options;\n    const result = new Float64Array(data.length);\n    if (magnitudeMode) {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -Math.sqrt(-2 * Math.log(1 - data[i]));\n        }\n    }\n    else {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -1 * Math.SQRT2 * erfcinv(2 * data[i]);\n        }\n    }\n    return result;\n}\n/**\n * Convenience wrapper for single number processing by simpleNormInv function.\n * @param data - The number to be normalized.\n * @param options - The options for the normalization process.\n * @returns The normalized number.\n */\nexport function simpleNormInvNumber(data, options = {}) {\n    return simpleNormInv([data], options)[0];\n}\n//# sourceMappingURL=simpleNormInv.js.map","import { isAnyArray } from 'is-any-array';\nimport { createFromToArray } from '../utils';\nimport { simpleNormInvNumber } from './utils/simpleNormInv';\nimport { xEnsureFloat64 } from './xEnsureFloat64';\n/**\n * Determine noise level by san plot methodology (https://doi.org/10.1002/mrc.4882)\n * @param array - real or magnitude spectra data.\n * @param options - options\n * @returns noise level\n */\nexport function xNoiseSanPlot(array, options = {}) {\n    const { mask, cutOff, refine = true, magnitudeMode = false, scaleFactor = 1, factorStd = 5, fixOffset = true, } = options;\n    const input = prepareData(array, { scaleFactor, mask });\n    if (fixOffset && !magnitudeMode) {\n        const medianIndex = Math.floor(input.length / 2);\n        const median = input.length % 2 === 0\n            ? 0.5 * (input[medianIndex - 1] + input[medianIndex])\n            : input[medianIndex];\n        for (let i = 0; i < input.length; i++) {\n            input[i] -= median;\n        }\n    }\n    const firstNegativeValueIndex = input.at(-1) >= 0\n        ? input.length\n        : input.findIndex((e) => e < 0);\n    let lastPositiveValueIndex = firstNegativeValueIndex - 1;\n    for (let i = lastPositiveValueIndex; i >= 0; i--) {\n        if (input[i] > 0) {\n            lastPositiveValueIndex = i;\n            break;\n        }\n    }\n    const signPositive = input.slice(0, lastPositiveValueIndex + 1);\n    const signNegative = input.slice(firstNegativeValueIndex);\n    const cutOffDist = cutOff || determineCutOff(signPositive, { magnitudeMode });\n    const pIndex = Math.floor(signPositive.length * cutOffDist);\n    const initialNoiseLevelPositive = signPositive[pIndex];\n    const skyPoint = signPositive[0];\n    let initialNoiseLevelNegative;\n    if (signNegative.length > 0) {\n        const nIndex = Math.floor(signNegative.length * (1 - cutOffDist));\n        initialNoiseLevelNegative = -1 * signNegative[nIndex];\n    }\n    else {\n        initialNoiseLevelNegative = 0;\n    }\n    let noiseLevelPositive = initialNoiseLevelPositive;\n    let noiseLevelNegative = initialNoiseLevelNegative;\n    let cloneSignPositive = signPositive.slice();\n    let cloneSignNegative = signNegative.slice();\n    let cutOffSignalsIndexPlus = 0;\n    let cutOffSignalsIndexNeg = 2;\n    if (refine) {\n        let cutOffSignals = noiseLevelPositive * factorStd;\n        cutOffSignalsIndexPlus = signPositive.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexPlus > -1) {\n            cloneSignPositive = signPositive.slice(cutOffSignalsIndexPlus);\n            noiseLevelPositive =\n                cloneSignPositive[Math.floor(cloneSignPositive.length * cutOffDist)];\n        }\n        cutOffSignals = noiseLevelNegative * factorStd;\n        cutOffSignalsIndexNeg = signNegative.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexNeg > -1) {\n            cloneSignNegative = signNegative.slice(cutOffSignalsIndexNeg);\n            noiseLevelNegative =\n                cloneSignPositive[Math.floor(cloneSignNegative.length * (1 - cutOffDist))];\n        }\n    }\n    const correctionFactor = -simpleNormInvNumber(cutOffDist / 2, {\n        magnitudeMode,\n    });\n    let effectiveCutOffDist, refinedCorrectionFactor;\n    if (refine && cutOffSignalsIndexPlus > -1) {\n        effectiveCutOffDist =\n            (cutOffDist * cloneSignPositive.length + cutOffSignalsIndexPlus) /\n                (cloneSignPositive.length + cutOffSignalsIndexPlus);\n        refinedCorrectionFactor =\n            -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n        noiseLevelPositive /= refinedCorrectionFactor;\n        if (cutOffSignalsIndexNeg > -1) {\n            effectiveCutOffDist =\n                (cutOffDist * cloneSignNegative.length + cutOffSignalsIndexNeg) /\n                    (cloneSignNegative.length + cutOffSignalsIndexNeg);\n            refinedCorrectionFactor =\n                -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n            if (noiseLevelNegative !== 0) {\n                noiseLevelNegative /= refinedCorrectionFactor;\n            }\n        }\n    }\n    else {\n        noiseLevelPositive /= correctionFactor;\n        noiseLevelNegative /= correctionFactor;\n    }\n    return {\n        positive: noiseLevelPositive,\n        negative: noiseLevelNegative,\n        snr: skyPoint / noiseLevelPositive,\n        sanplot: generateSanPlot(input, {\n            fromTo: {\n                positive: { from: 0, to: lastPositiveValueIndex },\n                negative: { from: firstNegativeValueIndex, to: input.length },\n            },\n        }),\n    };\n}\n/**\n * Determines the optimal cut-off point for a given array of positive numbers.\n * @param signPositive - An array of positive numbers.\n * @param options - Optional parameters to configure the cut-off determination.\n * @param options.magnitudeMode - If true, uses magnitude mode for normalization. Default is false.\n * @param options.considerList - An object specifying the range and step for consideration.\n * @param options.considerList.from - The starting point of the range. Default is 0.5.\n * @param options.considerList.step - The step size for the range. Default is 0.1.\n * @param options.considerList.to - The ending point of the range. Default is 0.9.\n * @returns The optimal cut-off point as a number.\n */\nfunction determineCutOff(signPositive, options = {}) {\n    const { magnitudeMode = false, considerList = { from: 0.5, step: 0.1, to: 0.9 }, } = options;\n    //generate a list of values for\n    const cutOff = [];\n    const indexMax = signPositive.length - 1;\n    for (let i = 0.01; i <= 0.99; i += 0.01) {\n        const index = Math.round(indexMax * i);\n        const value = -signPositive[index] / simpleNormInvNumber(i / 2, { magnitudeMode });\n        cutOff.push([i, value]);\n    }\n    let minKi = Number.MAX_SAFE_INTEGER;\n    const { from, to, step } = considerList;\n    const delta = step / 2;\n    let whereToCutStat = 0.5;\n    for (let i = from; i <= to; i += step) {\n        const floor = i - delta;\n        const top = i + delta;\n        const elementsOfCutOff = cutOff.filter((e) => e[0] < top && e[0] > floor);\n        let averageValue = 0;\n        for (const element of elementsOfCutOff) {\n            averageValue += Math.abs(element[1]);\n        }\n        let kiSqrt = 0;\n        for (const element of elementsOfCutOff) {\n            kiSqrt += (element[1] - averageValue) ** 2;\n        }\n        if (kiSqrt < minKi) {\n            minKi = kiSqrt;\n            whereToCutStat = i;\n        }\n    }\n    return whereToCutStat;\n}\n/**\n * Generates a SAN plot from the given array based on the specified options.\n * @param array - The input array of numbers to be processed.\n * @param options - An optional object containing configuration options.\n * @param options.logBaseY - The logarithmic base for the Y-axis. Defaults to 2.\n * @param options.fromTo - An object specifying the range for each key. Each key maps to an object with `from` and `to` properties.\n * @returns An object where each key maps to a DataXY object containing the processed data.\n */\nfunction generateSanPlot(array, options = {}) {\n    const { fromTo, logBaseY = 2 } = options;\n    const sanplot = {};\n    for (const key in fromTo) {\n        const { from, to } = fromTo[key];\n        sanplot[key] =\n            from !== to\n                ? scale(array.slice(from, to), {\n                    logBaseY,\n                })\n                : { x: [], y: [] };\n        if (key === 'negative') {\n            sanplot[key].y.reverse();\n        }\n    }\n    return sanplot;\n}\n/**\n * Scales the input array based on the provided options.\n * @param array - The input array to be scaled.\n * @param options - An optional object containing scaling options.\n * @param options.logBaseY - If provided, the array values will be scaled using the logarithm of this base.\n * @returns An object containing the scaled x and y arrays.\n */\nfunction scale(array, options = {}) {\n    const { log10, abs } = Math;\n    const { logBaseY } = options;\n    if (logBaseY) {\n        array = array.slice(0);\n        const logOfBase = log10(logBaseY);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = log10(abs(array[i])) / logOfBase;\n        }\n    }\n    const xAxis = createFromToArray({\n        from: 0,\n        to: array.length - 1,\n        length: array.length,\n    });\n    return { x: xAxis, y: array };\n}\n/**\n * Prepares and processes the input data array based on the provided options.\n * @param array - The input array of numbers to be processed.\n * @param options - An object containing the following properties:\n *   - scaleFactor: A number by which to scale each element of the array.\n *   - mask: An optional array of the same length as the input array, where\n *           elements corresponding to `true` values will be excluded from processing.\n * @param options.scaleFactor\n * @param options.mask\n * @returns A new Float64Array containing the processed data, scaled by the\n *          scaleFactor and sorted in descending order.\n */\nfunction prepareData(array, options) {\n    const { scaleFactor, mask } = options;\n    const input = xEnsureFloat64(isAnyArray(mask) && mask.length === array.length\n        ? array.filter((_e, i) => !mask[i])\n        : array);\n    if (scaleFactor > 1) {\n        for (let i = 0; i < input.length; i++) {\n            input[i] *= scaleFactor;\n        }\n    }\n    return input.sort().reverse();\n}\n//# sourceMappingURL=xNoiseSanPlot.js.map","import { xMedianAbsoluteDeviation } from './xMedianAbsoluteDeviation';\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise\n * @param array\n * @returns noise level corresponding to one standard deviation\n */\nexport function xNoiseStandardDeviation(array) {\n    const { mad, median } = xMedianAbsoluteDeviation(array);\n    return { sd: mad / 0.6744897501960817, mad, median };\n}\n//# sourceMappingURL=xNoiseStandardDeviation.js.map","/**\n * This function calculate the norm of a vector.\n * @example xNorm([3, 4]) -> 5\n * @param array - array\n * @returns - calculated norm\n */\nexport function xNorm(array) {\n    let result = 0;\n    for (const element of array) {\n        result += element ** 2;\n    }\n    return Math.sqrt(result);\n}\n//# sourceMappingURL=xNorm.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Calculate the sum of the values\n * @param array - Object that contains property x (an ordered increasing array) and y (an array).\n * @param options - Options.\n * @returns XSum value on the specified range.\n */\nexport function xSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xSum.js.map","import { getOutputArray } from './getOutputArray';\nimport { xCheck } from './xCheck';\nimport { xMaxValue } from './xMaxValue';\nimport { xSum } from './xSum';\n/**\n * Divides the data with either the sum, the absolute sum or the maximum of the data\n * @param input - Array containing values\n * @param options - options\n * @returns - normalized data\n */\nexport function xNormed(input, options = {}) {\n    const { algorithm = 'absolute', value = 1 } = options;\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    if (input.length === 0) {\n        throw new Error('input must not be empty');\n    }\n    switch (algorithm) {\n        case 'absolute': {\n            const absoluteSumValue = absoluteSum(input) / value;\n            if (absoluteSumValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / absoluteSumValue;\n            }\n            return output;\n        }\n        case 'max': {\n            const currentMaxValue = xMaxValue(input);\n            if (currentMaxValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            const factor = value / currentMaxValue;\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] * factor;\n            }\n            return output;\n        }\n        case 'sum': {\n            const sumFactor = xSum(input) / value;\n            if (sumFactor === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / sumFactor;\n            }\n            return output;\n        }\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\nfunction absoluteSum(input) {\n    let sumValue = 0;\n    for (let i = 0; i < input.length; i++) {\n        sumValue += Math.abs(input[i]);\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xNormed.js.map","import { xCheck } from './xCheck';\nimport { xEnsureFloat64 } from './xEnsureFloat64';\n/**\n * This function pads an array\n *s\n * @param array - the array that will be padded\n * @param options - options\n */\nexport function xPadding(array, options = {}) {\n    const { size = 0, value = 0, algorithm } = options;\n    xCheck(array);\n    if (!algorithm) {\n        return xEnsureFloat64(array);\n    }\n    const result = new Float64Array(array.length + size * 2);\n    for (let i = 0; i < array.length; i++) {\n        result[i + size] = array[i];\n    }\n    const fromEnd = size + array.length;\n    const toEnd = 2 * size + array.length;\n    switch (algorithm) {\n        case 'value':\n            for (let i = 0; i < size; i++) {\n                result[i] = value;\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = value;\n            }\n            break;\n        case 'duplicate':\n            for (let i = 0; i < size; i++) {\n                result[i] = array[0];\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = array.at(-1);\n            }\n            break;\n        case 'circular':\n            for (let i = 0; i < size; i++) {\n                result[i] =\n                    array[(array.length - (size % array.length) + i) % array.length];\n            }\n            for (let i = 0; i < size; i++) {\n                result[i + fromEnd] = array[i % array.length];\n            }\n            break;\n        default:\n            throw new Error(`unknown algorithm ${String(algorithm)}`);\n    }\n    return result;\n}\n//# sourceMappingURL=xPadding.js.map","import { xCheck } from './xCheck';\nimport { xStandardDeviation } from './xStandardDeviation';\n/**\n * Pareto scaling, which uses the square root of standard deviation as the scaling factor, circumvents the amplification of noise by retaining a small portion of magnitude information.\n * Noda, I. (2008). Scaling techniques to enhance two-dimensional correlation spectra. Journal of Molecular Structure, 883, 216-227.\n * DOI: 10.1016/j.molstruc.2007.12.026\n * @param array - array of number\n */\nexport function xParetoNormalization(array) {\n    xCheck(array);\n    const result = new Float64Array(array.length);\n    const sqrtSD = Math.sqrt(xStandardDeviation(array));\n    for (let i = 0; i < array.length; i++) {\n        result[i] = array[i] / sqrtSD;\n    }\n    return result;\n}\n//# sourceMappingURL=xParetoNormalization.js.map","import { getOutputArray } from './getOutputArray';\nimport { xCheck } from './xCheck';\nimport { xMaxValue } from './xMaxValue';\nimport { xMinValue } from './xMinValue';\n/**\n * Function used to rescale data\n * @param input - input for the rescale\n * @param options - options\n * @returns rescaled data\n */\nexport function xRescale(input, options = {}) {\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    const currentMin = xMinValue(input);\n    const currentMax = xMaxValue(input);\n    if (currentMin === currentMax) {\n        throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n    }\n    const { min = 0, max = 1 } = options;\n    if (min >= max) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + min;\n    }\n    return output;\n}\n//# sourceMappingURL=xRescale.js.map","import { xCheck } from './xCheck';\nimport { xPadding } from './xPadding';\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param fct - callback function that from an array returns a value\n * @param options - options\n */\nexport function xRolling(array, fct, options = {}) {\n    xCheck(array);\n    if (typeof fct !== 'function') {\n        throw new TypeError('fct must be a function');\n    }\n    const { window = 5, padding = {} } = options;\n    const { size = window - 1, algorithm, value } = padding;\n    const padded = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n    const newArray = [];\n    for (let i = 0; i < padded.length - window + 1; i++) {\n        // we will send a view to the original buffer\n        newArray.push(fct(padded.subarray(i, i + window)));\n    }\n    return newArray;\n}\n//# sourceMappingURL=xRolling.js.map","import { xMean } from './xMean';\nimport { xRolling } from './xRolling';\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - option\n */\nexport function xRollingAverage(array, options = {}) {\n    return xRolling(array, xMean, options);\n}\n//# sourceMappingURL=xRollingAverage.js.map","import { xMedian } from './xMedian';\nimport { xRolling } from './xRolling';\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - options\n */\nexport function xRollingMedian(array, options = {}) {\n    return xRolling(array, xMedian, options);\n}\n//# sourceMappingURL=xRollingMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Verify that `data` is an object of x,y arrays.\n * Throws an error if it's not.\n * @param data\n * @param options\n * @param options.minLength\n */\nexport function xyCheck(data, options = {}) {\n    const { minLength } = options;\n    if (data === null ||\n        typeof data !== 'object' ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.x) ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.y)) {\n        throw new Error('data must be an object of x and y arrays');\n    }\n    // @ts-expect-error Typechecking\n    if (data.x.length !== data.y.length) {\n        throw new Error('the x and y arrays must have the same length');\n    }\n    // @ts-expect-error Typechecking\n    if (minLength && data.x.length < minLength) {\n        throw new Error(`data.x must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyCheck.js.map","import { xIsMonotonic } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Filters x,y values to allow strictly growing values in x-axis.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array).\n */\nexport function xyEnsureGrowingX(data) {\n    xyCheck(data);\n    if (xIsMonotonic(data.x) === 1)\n        return data;\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    let prevX = Number.NEGATIVE_INFINITY;\n    let currentIndex = 0;\n    for (let index = 0; index < x.length; index++) {\n        if (prevX < x[index]) {\n            if (currentIndex < index) {\n                x[currentIndex] = x[index];\n                y[currentIndex] = y[index];\n            }\n            currentIndex++;\n            prevX = x[index];\n        }\n    }\n    x.length = currentIndex;\n    y.length = currentIndex;\n    return { x, y };\n}\n//# sourceMappingURL=xyEnsureGrowingX.js.map","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n * - deal with exclusions zones\n * - if no zones is specified add one between -Infinity and +Infinity\n * @param zones - array of zones\n * @param options - options\n * @returns array of zones\n */\nexport function zonesNormalize(zones = [], options = {}) {\n    const { exclusions = [] } = options;\n    let { from = Number.NEGATIVE_INFINITY, to = Number.POSITIVE_INFINITY } = options;\n    if (from > to)\n        [from, to] = [to, from];\n    zones = zones\n        .map((zone) => zone.from > zone.to ? { from: zone.to, to: zone.from } : { ...zone })\n        .sort((a, b) => {\n        if (a.from !== b.from)\n            return a.from - b.from;\n        return a.to - b.to;\n    });\n    if (zones.length === 0) {\n        zones.push({ from, to });\n    }\n    for (const zone of zones) {\n        if (from > zone.from)\n            zone.from = from;\n        if (to < zone.to)\n            zone.to = to;\n    }\n    zones = zones.filter((zone) => zone.from <= zone.to);\n    if (zones.length === 0)\n        return [];\n    let currentZone = zones[0];\n    const beforeExclusionsZones = [currentZone];\n    for (let i = 1; i < zones.length; i++) {\n        const zone = zones[i];\n        if (zone.from <= currentZone.to) {\n            if (currentZone.to < zone.to) {\n                currentZone.to = zone.to;\n            }\n        }\n        else {\n            currentZone = zone;\n            beforeExclusionsZones.push(currentZone);\n        }\n    }\n    if (exclusions.length === 0)\n        return beforeExclusionsZones;\n    const normalizedExclusions = zonesNormalize(exclusions);\n    let currentExclusionIndex = 0;\n    const results = [];\n    for (let zoneIndex = 0; zoneIndex < beforeExclusionsZones.length; zoneIndex++) {\n        const zone = beforeExclusionsZones[zoneIndex];\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        while (currentExclusionIndex < normalizedExclusions.length &&\n            normalizedExclusions[currentExclusionIndex].to <= zone.from) {\n            currentExclusionIndex++;\n        }\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        if (zone.to < normalizedExclusions[currentExclusionIndex].from) {\n            // no problems, not yet in exclusion\n            results.push(zone);\n            continue;\n        }\n        if (normalizedExclusions[currentExclusionIndex].to >= zone.to) {\n            // could be totally excluded\n            if (normalizedExclusions[currentExclusionIndex].from <= zone.from) {\n                continue;\n            }\n            results.push({\n                from: normalizedExclusions[currentExclusionIndex].to,\n                to: zone.to,\n            });\n        }\n        // we cut in the middle, we need to create more zones, annoying !\n        if (normalizedExclusions[currentExclusionIndex].from > zone.from) {\n            results.push({\n                from: zone.from,\n                to: normalizedExclusions[currentExclusionIndex].from,\n            });\n        }\n        zone.from = normalizedExclusions[currentExclusionIndex].to;\n        zoneIndex--;\n    }\n    return results;\n}\n//# sourceMappingURL=zonesNormalize.js.map","import { zonesNormalize } from './zonesNormalize';\n/**\n * Add the number of points per zone to reach a specified total\n * @param zones - array of zones\n * @param numberOfPoints - total number of points to distribute between zones\n * @param options - options\n * @returns array of zones with points\n */\nexport function zonesWithPoints(zones = [], \n/**\n * total number of points to distribute between zones\n * @default 10\n */\nnumberOfPoints = 10, options = {}) {\n    if (zones.length === 0)\n        return [];\n    const normalizedZones = zonesNormalize(zones, options);\n    const zonesWithNumberOfPoints = [];\n    const totalSize = normalizedZones.reduce((previous, current) => {\n        return previous + (current.to - current.from);\n    }, 0);\n    const unitsPerPoint = totalSize / numberOfPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < normalizedZones.length - 1; i++) {\n        const tempZone = normalizedZones[i];\n        const tempZoneNumberOfPoints = Math.min(Math.round((tempZone.to - tempZone.from) / unitsPerPoint), numberOfPoints - currentTotal);\n        zonesWithNumberOfPoints.push({\n            ...tempZone,\n            numberOfPoints: tempZoneNumberOfPoints,\n        });\n        currentTotal += tempZoneNumberOfPoints;\n    }\n    zonesWithNumberOfPoints.push({\n        ...normalizedZones.at(-1),\n        numberOfPoints: numberOfPoints - currentTotal,\n    });\n    return zonesWithNumberOfPoints;\n}\n//# sourceMappingURL=zonesWithPoints.js.map","/**\n * Function that retrieves the getEquallySpacedData with the variant \"slot\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    if (xLength < 2) {\n        return Float64Array.from(x);\n    }\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    const lastStep = x.at(-1) - x.at(-2);\n    const start = from - halfStep;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    // Init main variables\n    let min = start;\n    let max = start + step;\n    let previousX = -Number.MAX_VALUE;\n    let previousY = 0;\n    let nextX = x[0];\n    let nextY = y[0];\n    let frontOutsideSpectra = 0;\n    let backOutsideSpectra = true;\n    let currentValue = 0;\n    // for slot algorithm\n    let currentPoints = 0;\n    let i = 1; // index of input\n    let j = 0; // index of output\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        while (previousX - max > 0) {\n            // no overlap with original point, just consume current value\n            if (backOutsideSpectra) {\n                currentPoints++;\n                backOutsideSpectra = false;\n            }\n            output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n            j++;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            currentValue = 0;\n            currentPoints = 0;\n        }\n        if (previousX > min) {\n            currentValue += previousY;\n            currentPoints++;\n        }\n        if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n            currentPoints--;\n        }\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else {\n            nextX += lastStep;\n            nextY = 0;\n            frontOutsideSpectra++;\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=equallySpacedSlot.js.map","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param x0\n * @param x1\n * @param slope\n * @param intercept\n * @returns integral value.\n */\nexport default function integral(\n/** first coordinate of point */\nx0, \n/** second coordinate of point */\nx1, \n/** slope of the line */\nslope, \n/** intercept of the line on the y axis */\nintercept) {\n    return (0.5 * slope * x1 * x1 +\n        intercept * x1 -\n        (0.5 * slope * x0 * x0 + intercept * x0));\n}\n//# sourceMappingURL=integral.js.map","import integral from './integral';\n/**\n * Function that retrieves the getEquallySpacedData with the variant \"smooth\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    const initialOriginalStep = x[1] - x[0];\n    const lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n    // Init main variables\n    let min = from - halfStep;\n    let max = from + halfStep;\n    let previousX = Number.MIN_SAFE_INTEGER;\n    let previousY = 0;\n    let nextX = x[0] - initialOriginalStep;\n    let nextY = 0;\n    let currentValue = 0;\n    let slope = 0;\n    let intercept = 0;\n    let sumAtMin = 0;\n    let sumAtMax = 0;\n    let i = 0; // index of input\n    let j = 0; // index of output\n    let add = 0;\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        if (previousX <= min && min <= nextX) {\n            add = integral(0, min - previousX, slope, previousY);\n            sumAtMin = currentValue + add;\n        }\n        while (nextX - max >= 0) {\n            // no overlap with original point, just consume current value\n            add = integral(0, max - previousX, slope, previousY);\n            sumAtMax = currentValue + add;\n            output[j++] = (sumAtMax - sumAtMin) / step;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            sumAtMin = sumAtMax;\n        }\n        currentValue += integral(previousX, nextX, slope, intercept);\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else if (i === xLength) {\n            nextX += lastOriginalStep;\n            nextY = 0;\n        }\n        slope = getSlope(previousX, previousY, nextX, nextY);\n        intercept = -slope * previousX + previousY;\n    }\n    return output;\n}\nfunction getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n}\n//# sourceMappingURL=equallySpacedSmooth.js.map","import { createFromToArray } from '../utils';\nimport { zonesNormalize, zonesWithPoints } from '../zones';\nimport equallySpacedSlot from './utils/equallySpacedSlot';\nimport equallySpacedSmooth from './utils/equallySpacedSmooth';\nimport { xyCheck } from './xyCheck';\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in an array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in an array.\n *\n * If exclusions zone are present, zones are ignored !\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns new object with x / y array with the equally spaced data.\n */\nexport function xyEquallySpaced(data, options = {}) {\n    const { x, y } = data;\n    const xLength = x.length;\n    const { from = x[0], to = x[xLength - 1], variant = 'smooth', numberOfPoints = 100, exclusions = [], zones = [{ from, to }], } = options;\n    if (from > to) {\n        throw new RangeError('from should be larger than to');\n    }\n    xyCheck(data);\n    if (numberOfPoints < 2) {\n        throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n    }\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    const zonesWithPointsRes = zonesWithPoints(normalizedZones, numberOfPoints, {\n        from,\n        to,\n    }).filter((zone) => zone.numberOfPoints);\n    let xResult = [];\n    let yResult = [];\n    for (const zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        const zoneResult = processZone(Array.from(x), Array.from(y), zone.from, zone.to, zone.numberOfPoints, variant);\n        xResult = xResult.concat(zoneResult.x);\n        yResult = yResult.concat(zoneResult.y);\n    }\n    return { x: xResult, y: yResult };\n}\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n    if (numberOfPoints < 1) {\n        throw new RangeError('the number of points must be at least 1');\n    }\n    const output = variant === 'slot'\n        ? Array.from(equallySpacedSlot(x, y, from, to, numberOfPoints))\n        : Array.from(equallySpacedSmooth(x, y, from, to, numberOfPoints));\n    return {\n        x: Array.from(createFromToArray({\n            from,\n            to,\n            length: numberOfPoints,\n        })),\n        y: output,\n    };\n}\n//# sourceMappingURL=xyEquallySpaced.js.map","import { zonesNormalize } from '../zones';\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns filtered array\n */\nexport function xyFilterX(data, options = {}) {\n    const { x, y } = data;\n    if (x.length === 0) {\n        return {\n            x: Array.from(x),\n            y: Array.from(y),\n        };\n    }\n    const { from = x[0], to = x.at(-1), zones = [{ from, to }], exclusions = [], } = options;\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    let currentZoneIndex = 0;\n    const newX = [];\n    const newY = [];\n    let position = 0;\n    while (position < x.length) {\n        if (x[position] <= normalizedZones[currentZoneIndex].to &&\n            x[position] >= normalizedZones[currentZoneIndex].from) {\n            newX.push(x[position]);\n            newY.push(y[position]);\n        }\n        else if (x[position] > normalizedZones[currentZoneIndex].to) {\n            currentZoneIndex++;\n            if (!normalizedZones[currentZoneIndex])\n                break;\n        }\n        position++;\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterX.js.map","import { xyCheck } from './xyCheck';\n/**\n * Filter out all the points for which x <= 0. Useful to display log scale data\n * @param data - data\n * @returns - An object with the filtered data\n */\nexport function xyFilterXPositive(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    if (x === undefined || y === undefined) {\n        return { x: newX, y: newY };\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (x[i] > 0) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyFilterXPositive.js.map","/**\n * Order object of array, x has to be monotone. Ensure x is growing\n * @param data - Object of kind {x:[], y:[]}.\n */\nexport function xyGrowingX(data) {\n    const { x, y } = data;\n    if (x.length !== y.length) {\n        throw new TypeError('length of x and y must be identical');\n    }\n    if (x.length < 2 || x[0] < x.at(-1))\n        return data;\n    return {\n        x: x.slice(0).reverse(),\n        y: y.slice(0).reverse(),\n    };\n}\n//# sourceMappingURL=xyGrowingX.js.map","import { xGetFromToIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Calculate integration\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - xyIntegration value on the specified range\n */\nexport function xyIntegration(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        return 0;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let currentxyIntegration = 0;\n    for (let i = fromIndex; i < toIndex; i++) {\n        currentxyIntegration += ((x[i + 1] - x[i]) * (y[i + 1] + y[i])) / 2;\n    }\n    return currentxyIntegration;\n}\n//# sourceMappingURL=xyIntegration.js.map","import { xFindClosestIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Find the closest maximum going up hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - An object with the x/y value\n */\nexport function xyMaxClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let xyMaxY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] > xyMaxY) {\n            currentIndex--;\n        }\n        else if (currentIndex < x.length - 1 && y[currentIndex + 1] > xyMaxY) {\n            currentIndex++;\n        }\n        xyMaxY = y[currentIndex];\n    }\n    return {\n        x: x[currentIndex],\n        y: y[currentIndex],\n        index: currentIndex,\n    };\n}\n//# sourceMappingURL=xyMaxClosestYPoint.js.map","import { xFindClosestIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Find the closest minimum going down hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - An object with the x/y value\n */\nexport function xyMinClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let minY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] < minY) {\n            currentIndex--;\n        }\n        else if (currentIndex < x.length - 1 && y[currentIndex + 1] < minY) {\n            currentIndex++;\n        }\n        minY = y[currentIndex];\n    }\n    return {\n        x: x[currentIndex],\n        y: y[currentIndex],\n        index: currentIndex,\n    };\n}\n//# sourceMappingURL=xyMinClosestYPoint.js.map","import { createNumberArray } from '../utils';\n/**\n * Create a new matrix based on the size of the current one or by using specific dimensions.\n * @param options\n */\nexport function matrixCreateEmpty(options) {\n    const { matrix, nbRows = matrix?.length || 1, nbColumns = matrix?.[0].length || 1, ArrayConstructor = Float64Array, } = options;\n    const newMatrix = [];\n    for (let row = 0; row < nbRows; row++) {\n        newMatrix.push(createNumberArray(ArrayConstructor, nbColumns));\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCreateEmpty.js.map","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix must contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('all rows must has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","import { matrixCheck } from './matrixCheck';\n/**\n * Get min and max Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","import { matrixCreateEmpty } from './matrixCreateEmpty';\nimport { matrixMinMaxZ } from './matrixMinMaxZ';\n/**\n * Rescale a matrix between min and max values.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZRescale(matrix, options = {}) {\n    const { min = 0, max = 1, ArrayConstructor } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows, ArrayConstructor });\n    const { min: currentMin, max: currentMax } = matrixMinMaxZ(matrix);\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] =\n                (matrix[row][column] - currentMin) * factor + min;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZRescale.js.map","export function addStyle(serie, spectrum, options = {}) {\n    let { color = '#A9A9A9' } = options;\n    const { opacity = 1, lineWidth = 1 } = options;\n    if (color.match(/#[\\da-f]{6}$/i)) {\n        color = (color + ((opacity * 255) >> 0).toString(16)).toUpperCase();\n    }\n    else {\n        color = color.replace(/rgb ?\\((.*)\\)/, `rgba($1,${opacity})`);\n    }\n    serie.style = [\n        {\n            name: 'unselected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth,\n                    dash: 1,\n                },\n            },\n        },\n        {\n            name: 'selected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth + 2,\n                    dash: 1,\n                },\n            },\n        },\n    ];\n    serie.name = spectrum.label || spectrum.id;\n}\n//# sourceMappingURL=addStyle.js.map","export const COLORS = [\n    '#FFB300',\n    '#803E75',\n    '#FF6800',\n    '#A6BDD7',\n    '#C10020',\n    '#CEA262',\n    '#817066',\n    '#007D34',\n    '#F6768E',\n    '#00538A',\n    '#FF7A5C',\n    '#53377A',\n    '#FF8E00',\n    '#B32851',\n    '#F4C800',\n    '#7F180D',\n    '#93AA00',\n    '#593315',\n    '#F13A13',\n    '#232C16',\n];\n//# sourceMappingURL=colors.js.map","import { xyFilterXPositive } from 'ml-spectra-processing';\nimport { addStyle } from './addStyle.js';\nimport { COLORS } from './colors.js';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param analyses\n * @param options\n */\nexport function getJSGraph(analyses, options = {}) {\n    const { colors = COLORS, opacities = [1], linesWidth = [1], selector = {}, normalization, xAxis = {}, yAxis = {}, } = options;\n    const series = [];\n    let xLabel = xAxis.label;\n    let yLabel = yAxis.label;\n    let xUnits = xAxis.units;\n    let yUnits = yAxis.units;\n    for (let i = 0; i < analyses.length; i++) {\n        const analysis = analyses[i];\n        const spectra = analysis.getNormalizedSpectra({\n            selector,\n            normalization,\n        });\n        if (spectra.length === 0)\n            continue;\n        const firstSpectrum = spectra[0];\n        // todo: if many spectra are available and not xUnits / yUnits are specified we should ensure that all the spectra are compatible\n        if (!xLabel)\n            xLabel = firstSpectrum.variables.x.label;\n        if (!yLabel)\n            yLabel = firstSpectrum.variables.y.label;\n        if (!xUnits)\n            xUnits = firstSpectrum.variables.x.units;\n        if (!yUnits)\n            yUnits = firstSpectrum.variables.y.units;\n        for (const spectrum of spectra) {\n            const serie = {};\n            addStyle(serie, analysis, {\n                color: colors[i % colors.length],\n                opacity: opacities[i % opacities.length],\n                lineWidth: linesWidth[i % linesWidth.length],\n            });\n            serie.data = {\n                x: spectrum.variables.x.data,\n                y: spectrum.variables.y.data,\n            };\n            serie.id = spectrum.id;\n            if (xAxis.logScale) {\n                serie.data = xyFilterXPositive(serie.data);\n            }\n            series.push(serie);\n        }\n    }\n    return {\n        axes: {\n            x: {\n                label: xLabel,\n                unit: xUnits,\n                unitWrapperBefore: '(',\n                unitWrapperAfter: ')',\n                flipped: false,\n                display: true,\n                ...xAxis,\n            },\n            y: {\n                label: yLabel,\n                unit: yUnits,\n                unitWrapperBefore: '(',\n                unitWrapperAfter: ')',\n                flipped: false,\n                display: true,\n                ...yAxis,\n            },\n        },\n        series,\n    };\n}\n//# sourceMappingURL=getJSGraph.js.map","export function getNormalizationAnnotations(filter = {}, boundary = { y: { min: '0px', max: '2000px' } }) {\n    let { exclusions = [] } = filter;\n    let annotations = [];\n    exclusions = exclusions.filter((exclusion) => !exclusion.ignore);\n    annotations = exclusions.map((exclusion) => {\n        const annotation = {\n            type: 'rect',\n            position: [\n                { x: exclusion.from, y: boundary.y.min },\n                { x: exclusion.to, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        };\n        return annotation;\n    });\n    if (filter.from !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: Number.MIN_SAFE_INTEGER, y: boundary.y.min },\n                { x: filter.from, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    if (filter.to !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: filter.to, y: boundary.y.min },\n                { x: Number.MAX_SAFE_INTEGER, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    return annotations;\n}\n//# sourceMappingURL=getNormalizationAnnotations.js.map","import { xMean } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n */\nexport function centerMean(data) {\n    const { y } = data;\n    const mean = xMean(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= mean;\n    }\n    return { data };\n}\n//# sourceMappingURL=centerMean.js.map","import { xMedian } from 'ml-spectra-processing';\n/**\n * Center the median\n * @param data\n */\nexport function centerMedian(data) {\n    const { y } = data;\n    const median = xMedian(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= median;\n    }\n    return { data };\n}\n//# sourceMappingURL=centerMedian.js.map","import { xGetFromToIndex } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function fromTo(data, options = {}) {\n    const { fromIndex, toIndex } = xGetFromToIndex(data.x, options);\n    return {\n        data: {\n            x: data.x.subarray(fromIndex, toIndex + 1),\n            y: data.y.subarray(fromIndex, toIndex + 1),\n        },\n    };\n}\n//# sourceMappingURL=fromTo.js.map","import { xNormed } from 'ml-spectra-processing';\n/**\n * Norm the Y values\n * @param data\n * @param options\n */\nexport function normed(data, options = {}) {\n    xNormed(data.y, { ...options, output: data.y });\n    return { data };\n}\n//# sourceMappingURL=normed.js.map","import { xStandardDeviation } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n */\nexport function divideBySD(data) {\n    const { y } = data;\n    const sd = xStandardDeviation(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] /= sd;\n    }\n    return { data };\n}\n//# sourceMappingURL=divideBySD.js.map","import { xRescale } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n * @param options\n */\nexport function rescale(data, options = {}) {\n    xRescale(data.y, { ...options, output: data.y });\n    return { data };\n}\n//# sourceMappingURL=rescale.js.map","import { xParetoNormalization } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n */\nexport function paretoNormalization(data) {\n    return {\n        data: {\n            x: data.x,\n            y: xParetoNormalization(data.y),\n        },\n    };\n}\n//# sourceMappingURL=paretoNormalization.js.map","// Based on https://github.com/scijs/cholesky-solve\n\n/*\nThe MIT License (MIT)\n\nCopyright (c) 2013 Eric Arnebäck\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nfunction ldlSymbolic(\n  n /* A and L are n-by-n, where n >= 0 */,\n  Ap /* input of size n + 1, not modified */,\n  Ai /* input of size nz=Ap[n], not modified */,\n  Lp /* output of size n + 1, not defined on input */,\n  Parent /* output of size n, not defined on input */,\n  Lnz /* output of size n, not defined on input */,\n  Flag /* workspace of size n, not defn. on input or output */,\n) {\n  let i, k, p, kk, p2;\n\n  for (k = 0; k < n; k++) {\n    /* L(k,:) pattern: all nodes reachable in etree from nz in A(0:k-1,k) */\n    Parent[k] = -1; /* parent of k is not yet known */\n    Flag[k] = k; /* mark node k as visited */\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\n    kk = k; /* kth original, or permuted, column */\n    p2 = Ap[kk + 1];\n    for (p = Ap[kk]; p < p2; p++) {\n      /* A (i,k) is nonzero (original or permuted A) */\n      i = Ai[p];\n\n      if (i < k) {\n        /* follow path from i to root of etree, stop at flagged node */\n        for (; Flag[i] !== k; i = Parent[i]) {\n          /* find parent of i if not yet determined */\n          if (Parent[i] === -1) Parent[i] = k;\n          Lnz[i]++; /* L (k,i) is nonzero */\n          Flag[i] = k; /* mark i as visited */\n        }\n      }\n    }\n  }\n  /* construct Lp index array from Lnz column counts */\n  Lp[0] = 0;\n  for (k = 0; k < n; k++) {\n    Lp[k + 1] = Lp[k] + Lnz[k];\n  }\n}\n\nfunction ldlNumeric(\n  n /* A and L are n-by-n, where n >= 0 */,\n  Ap /* input of size n+1, not modified */,\n  Ai /* input of size nz=Ap[n], not modified */,\n  Ax /* input of size nz=Ap[n], not modified */,\n  Lp /* input of size n+1, not modified */,\n  Parent /* input of size n, not modified */,\n  Lnz /* output of size n, not defn. on input */,\n  Li /* output of size lnz=Lp[n], not defined on input */,\n  Lx /* output of size lnz=Lp[n], not defined on input */,\n  D /* output of size n, not defined on input */,\n  Y /* workspace of size n, not defn. on input or output */,\n  Pattern /* workspace of size n, not defn. on input or output */,\n  Flag /* workspace of size n, not defn. on input or output */,\n) {\n  let yi, lKi;\n  let i, k, p, kk, p2, len, top;\n  for (k = 0; k < n; k++) {\n    /* compute nonzero Pattern of kth row of L, in topological order */\n    Y[k] = 0.0; /* Y(0:k) is now all zero */\n    top = n; /* stack for pattern is empty */\n    Flag[k] = k; /* mark node k as visited */\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\n    kk = k; /* kth original, or permuted, column */\n    p2 = Ap[kk + 1];\n    for (p = Ap[kk]; p < p2; p++) {\n      i = Ai[p]; /* get A(i,k) */\n      if (i <= k) {\n        Y[i] += Ax[p]; /* scatter A(i,k) into Y (sum duplicates) */\n        for (len = 0; Flag[i] !== k; i = Parent[i]) {\n          Pattern[len++] = i; /* L(k,i) is nonzero */\n          Flag[i] = k; /* mark i as visited */\n        }\n        while (len > 0) Pattern[--top] = Pattern[--len];\n      }\n    }\n    /* compute numerical values kth row of L (a sparse triangular solve) */\n    D[k] = Y[k]; /* get D(k,k) and clear Y(k) */\n    Y[k] = 0.0;\n    for (; top < n; top++) {\n      i = Pattern[top]; /* Pattern[top:n-1] is pattern of L(:,k) */\n      yi = Y[i]; /* get and clear Y(i) */\n      Y[i] = 0.0;\n      p2 = Lp[i] + Lnz[i];\n      for (p = Lp[i]; p < p2; p++) {\n        Y[Li[p]] -= Lx[p] * yi;\n      }\n      lKi = yi / D[i]; /* the nonzero entry L(k,i) */\n      D[k] -= lKi * yi;\n      Li[p] = k; /* store L(k,i) in column form of L */\n      Lx[p] = lKi;\n      Lnz[i]++; /* increment count of nonzeros in col i */\n    }\n\n    if (D[k] === 0.0) return k; /* failure, D(k,k) is zero */\n  }\n\n  return n; /* success, diagonal of D is all nonzero */\n}\n\nfunction ldlLsolve(\n  n /* L is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  Lp /* input of size n+1, not modified */,\n  Li /* input of size lnz=Lp[n], not modified */,\n  Lx /* input of size lnz=Lp[n], not modified */,\n) {\n  let j, p, p2;\n  for (j = 0; j < n; j++) {\n    p2 = Lp[j + 1];\n    for (p = Lp[j]; p < p2; p++) {\n      X[Li[p]] -= Lx[p] * X[j];\n    }\n  }\n}\n\nfunction ldlDsolve(\n  n /* D is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  D /* input of size n, not modified */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[j] /= D[j];\n  }\n}\n\nfunction ldlLTsolve(\n  n /* L is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  Lp /* input of size n+1, not modified */,\n  Li /* input of size lnz=Lp[n], not modified */,\n  Lx /* input of size lnz=Lp[n], not modified */,\n) {\n  let j, p, p2;\n  for (j = n - 1; j >= 0; j--) {\n    p2 = Lp[j + 1];\n    for (p = Lp[j]; p < p2; p++) {\n      X[j] -= Lx[p] * X[Li[p]];\n    }\n  }\n}\n\nfunction ldlPerm(\n  n /* size of X, B, and P */,\n  X /* output of size n. */,\n  B /* input of size n. */,\n  P /* input permutation array of size n. */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[j] = B[P[j]];\n  }\n}\n\nfunction ldlPermt(\n  n /* size of X, B, and P */,\n  X /* output of size n. */,\n  B /* input of size n. */,\n  P /* input permutation array of size n. */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[P[j]] = B[j];\n  }\n}\n\nfunction prepare(M, n, P) {\n  // if a permutation was specified, apply it.\n  if (P) {\n    let Pinv = new Array(n);\n\n    for (let k = 0; k < n; k++) {\n      Pinv[P[k]] = k;\n    }\n\n    let Mt = []; // scratch memory\n    // Apply permutation. We make M into P*M*P^T\n    for (let a = 0; a < M.length; ++a) {\n      let ar = Pinv[M[a][0]];\n      let ac = Pinv[M[a][1]];\n\n      // we only store the upper-diagonal elements(since we assume matrix is symmetric, we only need to store these)\n      // if permuted element is below diagonal, we simply transpose it.\n      if (ac < ar) {\n        let t = ac;\n        ac = ar;\n        ar = t;\n      }\n\n      Mt[a] = [];\n      Mt[a][0] = ar;\n      Mt[a][1] = ac;\n      Mt[a][2] = M[a][2];\n    }\n\n    M = Mt; // copy scratch memory.\n  } else {\n    // if P argument is null, we just use an identity permutation.\n    P = [];\n    for (let i = 0; i < n; ++i) {\n      P[i] = i;\n    }\n  }\n\n  // The sparse matrix we are decomposing is A.\n  // Now we shall create A from M.\n  let Ap = new Array(n + 1);\n  let Ai = new Array(M.length);\n  let Ax = new Array(M.length);\n\n  // count number of non-zero elements in columns.\n  let LNZ = [];\n  for (let i = 0; i < n; ++i) {\n    LNZ[i] = 0;\n  }\n  for (let a = 0; a < M.length; ++a) {\n    LNZ[M[a][1]]++;\n  }\n\n  Ap[0] = 0;\n  for (let i = 0; i < n; ++i) {\n    Ap[i + 1] = Ap[i] + LNZ[i];\n  }\n\n  let coloffset = [];\n  for (let a = 0; a < n; ++a) {\n    coloffset[a] = 0;\n  }\n\n  // go through all elements in M, and add them to sparse matrix A.\n  for (let i = 0; i < M.length; ++i) {\n    let e = M[i];\n    let col = e[1];\n\n    let adr = Ap[col] + coloffset[col];\n    Ai[adr] = e[0];\n    Ax[adr] = e[2];\n\n    coloffset[col]++;\n  }\n\n  let D = new Array(n);\n  let Y = new Array(n);\n  let Lp = new Array(n + 1);\n  let Parent = new Array(n);\n  let Lnz = new Array(n);\n  let Flag = new Array(n);\n  let Pattern = new Array(n);\n  let bp1 = new Array(n);\n  let x = new Array(n);\n  let d;\n\n  ldlSymbolic(n, Ap, Ai, Lp, Parent, Lnz, Flag);\n\n  let Lx = new Array(Lp[n]);\n  let Li = new Array(Lp[n]);\n\n  d = ldlNumeric(n, Ap, Ai, Ax, Lp, Parent, Lnz, Li, Lx, D, Y, Pattern, Flag);\n\n  if (d === n) {\n    return (b) => {\n      ldlPerm(n, bp1, b, P);\n      ldlLsolve(n, bp1, Lp, Li, Lx);\n      ldlDsolve(n, bp1, D);\n      ldlLTsolve(n, bp1, Lp, Li, Lx);\n      ldlPermt(n, x, bp1, P);\n\n      return x;\n    };\n  } else {\n    return null;\n  }\n}\n\nexport { prepare as default };\n","'use strict'\n\nmodule.exports = cuthillMckee\n\nfunction compareNum(a, b) { return a - b }\n\nfunction cuthillMckee(list, n) {\n  var adj = new Array(n)\n  var visited = new Array(n)\n  for(var i=0; i<n; ++i) {\n    adj[i]     = []\n    visited[i] = false\n  }\n\n  for(var i=0; i<list.length; ++i) {\n    var l = list[i]\n    adj[l[0]].push(l[1])\n  }\n\n  var toVisit = new Array(n)\n  var eol = 0\n  var ptr = 0\n  for(var i=0; i<n; ++i) {\n    if(visited[i]) {\n      continue\n    }\n    toVisit[eol++] = i\n    visited[i] = true\n    while(ptr < eol) {\n      var v = toVisit[ptr++]\n      var nbhd = adj[v]\n      nbhd.sort(compareNum)\n      for(var j=0; j<nbhd.length; ++j) {\n        var u = nbhd[j]\n        if(visited[u]) {\n          continue\n        }\n        visited[u] = true\n        toVisit[eol++] = u\n      }\n    }\n  }\n\n  var result = new Array(n)\n  for(var i=0; i<n; ++i) {\n    result[toVisit[i]] = i\n  }\n\n  return result\n}\n","import cuthillMckee from 'cuthill-mckee';\n\nconst getClosestNumber = (array = [], goal = 0) => {\n  const closest = array.reduce((prev, curr) => {\n    return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;\n  });\n  return closest;\n};\n\nconst getCloseIndex = (array = [], goal = 0) => {\n  const closest = getClosestNumber(array, goal);\n  return array.indexOf(closest);\n};\n\nconst updateSystem = (matrix, y, weights) => {\n  let nbPoints = y.length;\n  let l = nbPoints - 1;\n  let newMatrix = new Array(matrix.length);\n  let newVector = new Float64Array(nbPoints);\n  for (let i = 0; i < l; i++) {\n    let w = weights[i];\n    let diag = i * 2;\n    let next = diag + 1;\n    newMatrix[diag] = matrix[diag].slice();\n    newMatrix[next] = matrix[next].slice();\n    if (w === 0) {\n      newVector[i] = 0;\n    } else {\n      newVector[i] = y[i] * w;\n      newMatrix[diag][2] += w;\n    }\n  }\n  newVector[l] = y[l] * weights[l];\n  newMatrix[l * 2] = matrix[l * 2].slice();\n  newMatrix[l * 2][2] += weights[l];\n\n  return [newMatrix, newVector];\n};\n\nconst getDeltaMatrix = (nbPoints, lambda) => {\n  let matrix = [];\n  let last = nbPoints - 1;\n  for (let i = 0; i < last; i++) {\n    matrix.push([i, i, lambda * 2]);\n    matrix.push([i + 1, i, -1 * lambda]);\n  }\n  matrix[0][2] = lambda;\n  matrix.push([last, last, lambda]);\n  return {\n    lowerTriangularNonZeros: matrix,\n    permutationEncodedArray: cuthillMckee(matrix, nbPoints),\n  };\n};\n\nexport { updateSystem, getDeltaMatrix, getCloseIndex, getClosestNumber };\n","import { xMultiply, xNoiseSanPlot, xAbsoluteSum } from 'ml-spectra-processing';\n\nimport cholesky from './choleskySolver';\nimport { updateSystem, getDeltaMatrix, getCloseIndex } from './utils';\n\nfunction getControlPoints(x, y, options = {}) {\n  const { length } = x;\n  let { controlPoints = Int8Array.from({ length }).fill(0) } = options;\n  const { zones = [], weights = Float64Array.from({ length }).fill(1) } =\n    options;\n\n  if (x.length !== y.length) {\n    throw new RangeError('Y should match the length with X');\n  } else if (controlPoints.length !== x.length) {\n    throw new RangeError('controlPoints should match the length with X');\n  } else if (weights.length !== x.length) {\n    throw new RangeError('weights should match the length with X');\n  }\n\n  zones.forEach((range) => {\n    let indexFrom = getCloseIndex(x, range.from);\n    let indexTo = getCloseIndex(x, range.to);\n    if (indexFrom > indexTo) [indexFrom, indexTo] = [indexTo, indexFrom];\n    for (let i = indexFrom; i < indexTo; i++) {\n      controlPoints[i] = 1;\n    }\n  });\n\n  return {\n    weights:\n      'controlPoints' in options || zones.length > 0\n        ? xMultiply(weights, controlPoints)\n        : weights,\n    controlPoints,\n  };\n}\n\n/**\n * Fit the baseline drift by iteratively changing weights of sum square error between the fitted baseline and original signals,\n * for further information about the parameters you can get the [paper of airPLS](https://github.com/zmzhang/airPLS/blob/main/airPLS_manuscript.pdf)\n * @param {Array<number>} x - x axis data useful when control points or zones are submitted\n * @param {Array<number>} y - Original data\n * @param {object} [options={}] - Options object\n * @param {number} [options.maxIterations = 100] - Maximal number of iterations if the method does not reach the stop criterion\n * @param {number} [options.tolerance = 0.001] - Factor of the sum of absolute value of original data, to compute stop criterion\n * @param {Array<number>} [options.weights = [1,1,...]] - Initial weights vector, default each point has the same weight\n * @param {number} [options.lambda = 100] - Factor of weights matrix in -> [I + lambda D'D]z = x\n * @param {Array<number>} [options.controlPoints = []] - Array of 0|1 to force the baseline cross those points.\n * @param {Array<number>} [options.zones = []] - Array of x axis values (as from - to), to force that baseline cross those zones.\n * @returns {{corrected: Array<number>, error: number, iteration: number, baseline: Array<number>}}\n */\n\nexport default function airPLS(x, y, options = {}) {\n  const { weights, controlPoints } = getControlPoints(x, y, options);\n  let { maxIterations = 100, lambda = 10, tolerance = 0.001 } = options;\n\n  let baseline, iteration;\n  let sumNegDifferences = Number.MAX_SAFE_INTEGER;\n  const corrected = Float64Array.from(y);\n  let stopCriterion = getStopCriterion(y, tolerance);\n\n  const { length } = y;\n  let { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(\n    length,\n    lambda,\n  );\n\n  let threshold = 1;\n  const l = length - 1;\n  let prevNegSum = Number.MAX_SAFE_INTEGER;\n  for (\n    iteration = 0;\n    iteration < maxIterations && Math.abs(sumNegDifferences) > stopCriterion;\n    iteration++\n  ) {\n    let [leftHandSide, rightHandSide] = updateSystem(\n      lowerTriangularNonZeros,\n      y,\n      weights,\n    );\n\n    let cho = cholesky(leftHandSide, length, permutationEncodedArray);\n\n    baseline = cho(rightHandSide);\n\n    sumNegDifferences = applyCorrection(y, baseline, corrected);\n    if (iteration === 1) {\n      const { positive } = xNoiseSanPlot(corrected);\n      threshold = positive;\n    } else {\n      const absChange = Math.abs(prevNegSum / sumNegDifferences);\n      if (absChange < 1.01 && absChange > 0.99) {\n        break;\n      }\n    }\n\n    prevNegSum = sumNegDifferences + 0;\n    for (let i = 1; i < l; i++) {\n      const diff = corrected[i];\n      if (controlPoints[i] < 1 && Math.abs(diff) > threshold) {\n        weights[i] = 0;\n      } else {\n        const factor = diff > 0 ? -1 : 1;\n        weights[i] = Math.exp(\n          (factor * (iteration * diff)) / Math.abs(sumNegDifferences),\n        );\n      }\n    }\n\n    weights[0] = 1;\n    weights[l] = 1;\n  }\n\n  return {\n    corrected,\n    baseline,\n    iteration,\n    error: sumNegDifferences,\n  };\n\n  function applyCorrection(y, baseline, corrected) {\n    let sumNegDifferences = 0;\n    for (let i = 0; i < y.length; i++) {\n      let diff = y[i] - baseline[i];\n      if (diff < 0) sumNegDifferences += diff;\n      corrected[i] = diff;\n    }\n\n    return sumNegDifferences;\n  }\n}\n\nfunction getStopCriterion(y, tolerance) {\n  let sum = xAbsoluteSum(y);\n  return tolerance * sum;\n}\n","import { isAnyArray } from 'is-any-array';\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array<number>} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array<number>}\n */\n\nfunction sequentialFill() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (_typeof(input) === 'object' && !isAnyArray(input)) {\n    options = input;\n    input = [];\n  }\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  var _options = options,\n      _options$from = _options.from,\n      from = _options$from === void 0 ? 0 : _options$from,\n      _options$to = _options.to,\n      to = _options$to === void 0 ? 10 : _options$to,\n      _options$size = _options.size,\n      size = _options$size === void 0 ? input.length : _options$size,\n      step = _options.step;\n\n  if (size !== 0 && step) {\n    throw new Error('step is defined by the array size');\n  }\n\n  if (!size) {\n    if (step) {\n      size = Math.floor((to - from) / step) + 1;\n    } else {\n      size = to - from + 1;\n    }\n  }\n\n  if (!step && size) {\n    step = (to - from) / (size - 1);\n  }\n\n  if (Array.isArray(input)) {\n    // only works with normal array\n    input.length = 0;\n\n    for (var i = 0; i < size; i++) {\n      input.push(from);\n      from += step;\n    }\n  } else {\n    if (input.length !== size) {\n      throw new Error('sequentialFill typed array must have the correct length');\n    }\n\n    for (var _i = 0; _i < size; _i++) {\n      input[_i] = from;\n      from += step;\n    }\n  }\n\n  return input;\n}\n\nexport { sequentialFill as default };\n","import airpls from 'ml-airpls';\nimport sequentialFill from 'ml-array-sequential-fill';\n/**\n * Adaptive iteratively reweighted penalized least squares [1]\n *\n * This function calls ml-airpls\n *\n * References:\n * [1] Zhang, Z.-M.; Chen, S.; Liang, Y.-Z.\n * Baseline Correction Using Adaptive Iteratively Reweighted Penalized Least Squares.\n * Analyst 2010, 135 (5), 1138–1146. https://doi.org/10.1039/B922045C.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {object} [options.regression] - Options for the regression\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.regression.§Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function airPLSBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n  let output = airpls(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { isAnyArray } from 'is-any-array';\n/**\n * Check that x and y are arrays with the same length.\n * @param x - first array\n * @param y - second array\n * @throws if x or y are not the same length, or if they are not arrays\n */\nexport function checkArrayLength(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y)) {\n        throw new TypeError('x and y must be arrays');\n    }\n    if (x.length !== y.length) {\n        throw new RangeError('x and y arrays must have the same length');\n    }\n}\n//# sourceMappingURL=checkArrayLength.js.map","import { isAnyArray } from 'is-any-array';\nimport { checkArrayLength } from './checkArrayLength';\nexport class BaseRegression {\n    constructor() {\n        if (new.target === BaseRegression) {\n            throw new Error('BaseRegression must be subclassed');\n        }\n    }\n    predict(x) {\n        if (typeof x === 'number') {\n            return this._predict(x);\n        }\n        else if (isAnyArray(x)) {\n            const y = [];\n            for (const xVal of x) {\n                y.push(this._predict(xVal));\n            }\n            return y;\n        }\n        else {\n            throw new TypeError('x must be a number or array');\n        }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _predict(x) {\n        throw new Error('_predict must be implemented');\n    }\n    train() {\n        // Do nothing for this package\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toString(precision) {\n        return '';\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toLaTeX(precision) {\n        return '';\n    }\n    /**\n     * Return the correlation coefficient of determination (r) and chi-square.\n     * @param x - explanatory variable\n     * @param y - response variable\n     * @return - Object with further statistics.\n     */\n    score(x, y) {\n        checkArrayLength(x, y);\n        const n = x.length;\n        const y2 = new Array(n);\n        for (let i = 0; i < n; i++) {\n            y2[i] = this._predict(x[i]);\n        }\n        let xSum = 0;\n        let ySum = 0;\n        let chi2 = 0;\n        let rmsd = 0;\n        let xSquared = 0;\n        let ySquared = 0;\n        let xY = 0;\n        for (let i = 0; i < n; i++) {\n            xSum += y2[i];\n            ySum += y[i];\n            xSquared += y2[i] * y2[i];\n            ySquared += y[i] * y[i];\n            xY += y2[i] * y[i];\n            if (y[i] !== 0) {\n                chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n            }\n            rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n        }\n        const r = (n * xY - xSum * ySum) /\n            Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n        return {\n            r,\n            r2: r * r,\n            chi2,\n            rmsd: Math.sqrt(rmsd / n),\n        };\n    }\n}\n//# sourceMappingURL=BaseRegression.js.map","/**\n * Cast `number` to string. Optionally `digits` specifies significant figures.\n * @param number\n * @param figures\n * @returns - A string representation of `number`.\n */\nexport function maybeToPrecision(number, figures) {\n    if (number < 0) {\n        number = 0 - number;\n        if (typeof figures === 'number') {\n            return `- ${number.toPrecision(figures)}`;\n        }\n        else {\n            return `- ${number.toString()}`;\n        }\n    }\n    else if (typeof figures === 'number') {\n        return number.toPrecision(figures);\n    }\n    else {\n        return number.toString();\n    }\n}\n//# sourceMappingURL=maybeToPrecision.js.map","import { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\nimport { BaseRegression, checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\nexport class PolynomialRegression extends BaseRegression {\n    /**\n     * @param x - independent or explanatory variable\n     * @param y - dependent or response variable\n     * @param degree - degree of the polynomial regression, or array of powers to be used. When degree is an array, intercept at zero is forced to false/ignored.\n     * @example `new PolynomialRegression(x, y, 2)`, in this case, you can pass the option `interceptAtZero`, if you need it.\n     * @param options\n     * @example `new PolynomialRegression(x, y, [1, 3, 5])`\n     * Each of the degrees corresponds to a column, so if you have them switched, just do:\n     * @example `new PolynomialRegression(x, y, [3, 1, 5])`\n     * @param options.interceptAtZero - force the polynomial regression so that f(0) = 0\n     */\n    constructor(x, y, degree, options = {}) {\n        super();\n        // @ts-expect-error internal use only\n        if (x === true) {\n            // @ts-expect-error internal use only\n            this.degree = y.degree;\n            // @ts-expect-error internal use only\n            this.powers = y.powers;\n            // @ts-expect-error internal use only\n            this.coefficients = y.coefficients;\n        }\n        else {\n            checkArrayLength(x, y);\n            const result = regress(x, y, degree, options);\n            this.degree = result.degree;\n            this.powers = result.powers;\n            this.coefficients = result.coefficients;\n        }\n    }\n    _predict(x) {\n        let y = 0;\n        for (let k = 0; k < this.powers.length; k++) {\n            y += this.coefficients[k] * x ** this.powers[k];\n        }\n        return y;\n    }\n    toJSON() {\n        return {\n            name: 'polynomialRegression',\n            degree: this.degree,\n            powers: this.powers,\n            coefficients: this.coefficients,\n        };\n    }\n    toString(precision) {\n        return this._toFormula(precision, false);\n    }\n    toLaTeX(precision) {\n        return this._toFormula(precision, true);\n    }\n    _toFormula(precision, isLaTeX) {\n        let sup = '^';\n        let closeSup = '';\n        let times = ' * ';\n        if (isLaTeX) {\n            sup = '^{';\n            closeSup = '}';\n            times = '';\n        }\n        let fn = '';\n        let str = '';\n        for (let k = 0; k < this.coefficients.length; k++) {\n            str = '';\n            if (this.coefficients[k] !== 0) {\n                if (this.powers[k] === 0) {\n                    str = maybeToPrecision(this.coefficients[k], precision);\n                }\n                else if (this.powers[k] === 1) {\n                    str = `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n                }\n                else {\n                    str = `${maybeToPrecision(this.coefficients[k], precision) + times}x${sup}${this.powers[k]}${closeSup}`;\n                }\n                if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n                    str = ` + ${str}`;\n                }\n                else if (k !== this.coefficients.length - 1) {\n                    str = ` ${str}`;\n                }\n            }\n            fn = str + fn;\n        }\n        if (fn.startsWith('+')) {\n            fn = fn.slice(1);\n        }\n        return `f(x) = ${fn}`;\n    }\n    static load(json) {\n        if (json.name !== 'polynomialRegression') {\n            throw new TypeError('not a polynomial regression model');\n        }\n        // @ts-expect-error internal use only\n        return new PolynomialRegression(true, json);\n    }\n}\n/**\n * Perform a polynomial regression on the given data set.\n * This is an internal function.\n * @param x - independent or explanatory variable\n * @param y - dependent or response variable\n * @param degree - degree of the polynomial regression\n * @param options.interceptAtZero - force the polynomial regression so that $f(0) = 0$\n * @param options\n */\nfunction regress(x, y, degree, options = {}) {\n    const n = x.length;\n    let { interceptAtZero = false } = options;\n    let powers = [];\n    if (Array.isArray(degree)) {\n        powers = degree;\n        interceptAtZero = false; //must be false in this case\n    }\n    else if (typeof degree === 'number') {\n        if (interceptAtZero) {\n            powers = new Array(degree);\n            for (let k = 0; k < degree; k++) {\n                powers[k] = k + 1;\n            }\n        }\n        else {\n            powers = new Array(degree + 1);\n            for (let k = 0; k <= degree; k++) {\n                powers[k] = k;\n            }\n        }\n    }\n    const nCoefficients = powers.length; //1 per power, in any case.\n    const F = new Matrix(n, nCoefficients);\n    const Y = new Matrix([y]);\n    for (let k = 0; k < nCoefficients; k++) {\n        for (let i = 0; i < n; i++) {\n            if (powers[k] === 0) {\n                F.set(i, k, 1);\n            }\n            else {\n                F.set(i, k, x[i] ** powers[k]);\n            }\n        }\n    }\n    const FT = new MatrixTransposeView(F);\n    const A = FT.mmul(F);\n    const B = FT.mmul(new MatrixTransposeView(Y));\n    return {\n        coefficients: solve(A, B).to1DArray(),\n        degree: Math.max(...powers),\n        powers,\n    };\n}\n//# sourceMappingURL=index.js.map","import { PolynomialRegression } from 'ml-regression-polynomial';\n\n/**\n * Iterative regression-based baseline correction\n * @param {Array<number>} x - Independent axis variable\n * @param {Array<number>} y - Dependent axis variable\n * @param {object} [options] - Options object\n * @param {number} [options.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regressionOptions] - Options for regressionFunction\n * @param {number} [options.tolerance = 0.001] - Convergence error tolerance\n * @return {{corrected: Array<number>, delta: number, iteration: number, baseline: Array<number>}}\n */\nexport function baselineCorrectionRegression(x, y, options = {}) {\n  let {\n    maxIterations = 100,\n    Regression = PolynomialRegression,\n    regressionOptions,\n    tolerance = 0.001,\n  } = options;\n\n  if (!regressionOptions && Regression === PolynomialRegression) {\n    regressionOptions = 3;\n  }\n\n  let baseline = y.slice();\n  let fitting = y.slice();\n  let oldFitting = y;\n  let iteration = 0;\n  let delta;\n  let regression;\n  while (iteration < maxIterations) {\n    // Calculate the fitting result\n    regression = new Regression(x, baseline, regressionOptions);\n\n    delta = 0;\n    for (let i = 0; i < baseline.length; i++) {\n      fitting[i] = regression.predict(x[i]);\n      if (baseline[i] > fitting[i]) {\n        baseline[i] = fitting[i];\n      }\n\n      delta += Math.abs((fitting[i] - oldFitting[i]) / oldFitting[i]);\n    }\n\n    // Stop criterion\n    if (delta < tolerance) {\n      break;\n    } else {\n      oldFitting = fitting.slice();\n      iteration++;\n    }\n  }\n\n  // removes baseline\n  let corrected = new Array(baseline.length);\n  for (let j = 0; j < baseline.length; j++) {\n    corrected[j] = y[j] - baseline[j];\n  }\n\n  return {\n    corrected,\n    delta,\n    iteration,\n    baseline,\n    regression,\n  };\n}\n","import sequentialFill from 'ml-array-sequential-fill';\nimport { baselineCorrectionRegression } from 'ml-baseline-correction-regression';\n\n/**\n * Iterative polynomial fitting [1]\n *\n * Implementation based on ml-baseline-correction-regression\n *\n * References:\n * [1] Gan, F.; Ruan, G.; Mo, J.\n * Baseline Correction by Improved Iterative Polynomial Fitting with Automatic Threshold.\n *  Chemometrics and Intelligent Laboratory Systems 2006, 82 (1), 59–65.\n * https://doi.org/10.1016/j.chemolab.2005.08.009.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {Object} [options.regression]\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {Object} [options.regression]\n * @param {function} [options.regression.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {Object} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function iterativePolynomialBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n\n  let output = baselineCorrectionRegression(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { xRollingAverage } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingAverageBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = { ...defaults, ...options };\n  let baseline = xRollingAverage(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","import { isAnyArray } from 'is-any-array';\nimport { xMean, xMaxValue, xMinValue } from 'ml-spectra-processing';\nexport function rollingBall(spectrum, options = {}) {\n    if (!isAnyArray(spectrum)) {\n        throw new Error('Spectrum must be an array');\n    }\n    if (spectrum.length === 0) {\n        throw new TypeError('Spectrum must not be empty');\n    }\n    const numberPoints = spectrum.length;\n    const maxima = new Float64Array(numberPoints);\n    const minima = new Float64Array(numberPoints);\n    const baseline = new Float64Array(numberPoints);\n    // windowM 4 percent of spectrum length\n    // windowS 8 percent of spectrum length\n    const { windowM = Math.round(numberPoints * 0.04), windowS = Math.round(numberPoints * 0.08), } = options;\n    // fi(1) in original paper\n    for (let i = 0; i < spectrum.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, spectrum.length);\n        minima[i] = xMinValue(spectrum, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    // fi in original paper\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, minima.length);\n        maxima[i] = xMaxValue(minima, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowS);\n        const windowRight = Math.min(i + windowS + 1, maxima.length);\n        baseline[i] = xMean(maxima.subarray(windowLeft, windowRight));\n    }\n    return baseline;\n}\n//# sourceMappingURL=rollingBall.js.map","import { rollingBall } from 'ml-rolling-ball-baseline';\n\n/**\n * Rolling ball baseline correction algorithm.\n * From the abstract of (1):\n * \"This algorithm behaves equivalently to traditional polynomial backgrounds in simple spectra,\n * [...] and is considerably more robust for multiple overlapping peaks, rapidly varying background [...]\n *\n * The baseline is the trace one gets by rolling a ball below a spectrum. Algorithm has three steps:\n * Finding the minima in each window, find maxima among minima and then smooth over them by averaging.\n *\n * Algorithm described in (1), but in the implementation here the window width does not change.\n *\n * Reference:\n * (1) Kneen, M. A.; Annegarn, H. J.\n *     Algorithm for Fitting XRF, SEM and PIXE X-Ray Spectra Backgrounds.\n *     Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms 1996, 109–110, 209–213.\n *     https://doi.org/10.1016/0168-583X(95)00908-6.\n * (2) Kristian Hovde Liland, Bjørn-Helge Mevik, Roberto Canteri: baseline.\n *     https://cran.r-project.org/web/packages/baseline/index.html\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {Number} [options.windowM] - width of local window for minimization/maximization, defaults to 4% of the spectrum length\n * @param {Number} [options.windowS] - width of local window for smoothing, defaults to 8% of the specturm length\n * @returns {BaselineOutput}\n */\nexport function rollingBallBaseline(ys, options = {}) {\n  const baseline = rollingBall(ys, options);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","import { xRollingMedian } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingMedianBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = { ...defaults, ...options };\n  let baseline = xRollingMedian(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","//@ts-expect-error no type definition for baselines\nimport { airPLSBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function airPLSBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=airPLSBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { iterativePolynomialBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function iterativePolynomialBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=iterativePolynomialBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingAverageBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingAverageBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingAverageBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingBallBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingBallBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingBallBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingMedianBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingMedianBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingMedianBaseline.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Apply Savitzky Golay algorithm\n * @param [ys] Array of y values\n * @param [xs] Array of X or deltaX\n * @return  Array containing the new ys (same length)\n */\nexport function sgg(ys, xs, options = {}) {\n    const { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (typeof xs === 'undefined') {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const ans = new Float64Array(np);\n    const weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = xs ** derivative;\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        const wg1 = weights[half - i - 1];\n        const wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    const wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return (hs / count) ** derivative;\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else if (k === 0 && s === 0) {\n        Grampoly = 1;\n    }\n    else {\n        Grampoly = 0;\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * @private\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\n */\nfunction fullWeights(m, n, s) {\n    const weights = new Array(m);\n    const np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the first derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function firstDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 1 }) } };\n}\n//# sourceMappingURL=firstDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the second derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function secondDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 2 }) } };\n}\n//# sourceMappingURL=secondDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the third derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function thirdDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 3 }) } };\n}\n//# sourceMappingURL=thirdDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Apply the Savitzky Golay Generalized Filter\n * @param data\n * @param options\n */\nexport function savitzkyGolay(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, options) } };\n}\n//# sourceMappingURL=savitzkyGolay.js.map","import { xyEnsureGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function ensureGrowing(data) {\n    return { data: xyEnsureGrowingX(data) };\n}\n//# sourceMappingURL=ensureGrowing.js.map","import { xyGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function reverseIfNeeded(data) {\n    return { data: xyGrowingX(data) };\n}\n//# sourceMappingURL=reverseIfNeeded.js.map","import { xyEquallySpaced } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function equallySpaced(data, options = {}) {\n    return { data: xyEquallySpaced(data, options) };\n}\n//# sourceMappingURL=equallySpaced.js.map","import { xyFilterX } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function filterX(data, options = {}) {\n    return {\n        data: xyFilterX(data, options),\n    };\n}\n//# sourceMappingURL=filterX.js.map","import { xAdd, xMaxValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMaxX(data, options = {}) {\n    const { max = 1 } = options;\n    const existingMax = xMaxValue(data.x);\n    if (existingMax === max) {\n        return { data };\n    }\n    return {\n        data: {\n            x: xAdd(data.x, max - existingMax),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=setMaxX.js.map","import { xAdd, xMinValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMinX(data, options = {}) {\n    const { min = 0 } = options;\n    const existingMin = xMinValue(data.x);\n    if (existingMin === min) {\n        return { data };\n    }\n    return {\n        data: {\n            x: xAdd(data.x, min - existingMin),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=setMinX.js.map","/**\n * Correction of the x and y coordinates using a quadratic optimizations with the peak and its 3 closest neighbors to determine the true x,y values of the peak.\n * This process is done in place and is very fast.\n * @param data\n * @param peaks\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else if (y[currentIndex + 1] >= y[currentIndex] &&\n            y[currentIndex + 1] >= y[currentIndex + 2]) {\n            currentIndex++;\n        }\n        else if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n            y[currentIndex - 2] >= y[currentIndex - 1]) {\n            currentIndex -= 2;\n        }\n        else if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n            y[currentIndex + 2] >= y[currentIndex + 3]) {\n            currentIndex += 2;\n        }\n        // interpolation to a sin() function\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            const alpha = 20 * Math.log10(y[currentIndex - 1]);\n            const beta = 20 * Math.log10(y[currentIndex]);\n            const gamma = 20 * Math.log10(y[currentIndex + 1]);\n            const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            const xCurrent = x[currentIndex];\n            const xPrevious = x[currentIndex - 1];\n            peak.x = xCurrent + (xCurrent - xPrevious) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotonic, xMinMaxValues, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { optimizeTop } from \"./utils/optimizeTop.js\";\n/**\n * Global spectra deconvolution\n * @param  data - Object data with x and y arrays. Values in x has to be growing\n * @param options\n * @param {number} [options.broadRatio = 0.00] - If `broadRatio` is higher than 0, then all the peaks which second derivative\n * smaller than `broadRatio * maxAbsSecondDerivative` will be marked with the soft mask equal to true.\n */\nexport function gsd(data, options = {}) {\n    let { noiseLevel } = options;\n    const { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, smoothY = false, maxCriteria = true, minMaxRatio = 0.00025, realTopDetection = false, } = options;\n    const { x } = data;\n    let { y } = data;\n    if (xIsMonotonic(x) !== 1) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    //rescale;\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    const equallySpaced = xIsEquallySpaced(x);\n    if (noiseLevel === undefined) {\n        if (equallySpaced) {\n            const noiseInfo = xNoiseStandardDeviation(y);\n            if (maxCriteria) {\n                noiseLevel = noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n            else {\n                noiseLevel = -noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n        }\n        else {\n            noiseLevel = 0;\n        }\n    }\n    else if (!maxCriteria) {\n        noiseLevel *= -1;\n    }\n    if (!maxCriteria) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] *= -1;\n        }\n    }\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    const xValue = equallySpaced ? x[1] - x[0] : x;\n    const yData = smoothY\n        ? sgg(y, xValue, {\n            ...sgOptions,\n            derivative: 0,\n        })\n        : y;\n    const dY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 1,\n    });\n    const ddY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 2,\n    });\n    const { min: minY, max: maxY } = xMinMaxValues(yData);\n    if (minY > maxY || minY === maxY)\n        return [];\n    const yThreshold = minY + (maxY - minY) * minMaxRatio;\n    const dX = x[1] - x[0];\n    let lastMax = null;\n    let lastMin = null;\n    const minddY = [];\n    const intervalL = [];\n    const intervalR = [];\n    // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n    for (let i = 1; i < yData.length - 1; ++i) {\n        if ((dY[i] < dY[i - 1] && dY[i] <= dY[i + 1]) ||\n            (dY[i] <= dY[i - 1] && dY[i] < dY[i + 1])) {\n            lastMin = {\n                x: x[i],\n                index: i,\n            };\n            if (dX > 0 && lastMax !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Maximum in first derivative\n        if ((dY[i] >= dY[i - 1] && dY[i] > dY[i + 1]) ||\n            (dY[i] > dY[i - 1] && dY[i] >= dY[i + 1])) {\n            lastMax = {\n                x: x[i],\n                index: i,\n            };\n            if (dX < 0 && lastMin !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    let lastK = -1;\n    const peaks = [];\n    for (const minddYIndex of minddY) {\n        const deltaX = x[minddYIndex];\n        let possible = -1;\n        let k = lastK + 1;\n        let minDistance = Number.POSITIVE_INFINITY;\n        let currentDistance = 0;\n        while (possible === -1 && k < intervalL.length) {\n            currentDistance = Math.abs(deltaX - (intervalL[k].x + intervalR[k].x) / 2);\n            if (currentDistance < (intervalR[k].x - intervalL[k].x) / 2) {\n                possible = k;\n                lastK = k;\n            }\n            ++k;\n            // Not getting closer?\n            if (currentDistance >= minDistance) {\n                break;\n            }\n            minDistance = currentDistance;\n        }\n        if (possible !== -1) {\n            if (yData[minddYIndex] > yThreshold) {\n                const width = Math.abs(intervalR[possible].x - intervalL[possible].x);\n                peaks.push({\n                    id: crypto.randomUUID(),\n                    x: deltaX,\n                    y: yData[minddYIndex],\n                    width,\n                    index: minddYIndex,\n                    ddY: ddY[minddYIndex],\n                    inflectionPoints: {\n                        from: intervalL[possible],\n                        to: intervalR[possible],\n                    },\n                });\n            }\n        }\n    }\n    if (realTopDetection) {\n        optimizeTop({ x, y: yData }, peaks);\n    }\n    peaks.forEach((peak) => {\n        if (!maxCriteria) {\n            peak.y *= -1;\n            peak.ddY = peak.ddY * -1;\n        }\n    });\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\n//# sourceMappingURL=gsd.js.map","export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_THREE = Math.sqrt(3);\nexport const ROOT_2LN2 = Math.sqrt(2 * Math.LN2);\nexport const ROOT_2LN2_MINUS_ONE = Math.sqrt(2 * Math.LN2) - 1;\n//# sourceMappingURL=constants.js.map","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\nexport default function erfinv(x) {\n    let a = 0.147;\n    if (x === 0)\n        return 0;\n    let ln1MinusXSqrd = Math.log(1 - x * x);\n    let lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    let firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    let secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { ROOT_2LN2, GAUSSIAN_EXP_FACTOR, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport erfinv from '../../../util/erfinv';\nexport class Gaussian {\n    constructor(options = {}) {\n        const { fwhm = 500, sd } = options;\n        this.fwhm = sd ? gaussianWidthToFWHM(2 * sd) : fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fct(x) {\n        return gaussianFct(x, this.fwhm);\n    }\n    getArea(height = calculateGaussianHeight({ fwhm: this.fwhm })) {\n        return getGaussianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getGaussianFactor(area);\n    }\n    getData(options = {}) {\n        return getGaussianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateGaussianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport function calculateGaussianHeight(options) {\n    let { fwhm = 500, area = 1, sd } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (2 * area) / ROOT_PI_OVER_LN2 / fwhm;\n}\n/**\n * Calculate the height of the gaussian function of a specific width (fwhm) at a speicifc\n * x position (the gaussian is centered on x=0)\n * @param x\n * @param fwhm\n * @returns y\n */\nexport function gaussianFct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n}\nexport function gaussianWidthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\nexport function gaussianFwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\nexport function getGaussianArea(options) {\n    let { fwhm = 500, sd, height = 1 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\nexport function getGaussianFactor(area = 0.9999) {\n    return Math.sqrt(2) * erfinv(area);\n}\nexport function getGaussianData(shape = {}, options = {}) {\n    let { fwhm = 500, sd } = shape;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    let { length, factor = getGaussianFactor(), height = calculateGaussianHeight({ fwhm }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = gaussianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","import { ROOT_THREE } from '../../../util/constants';\nexport class Lorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianFct(x, this.fwhm);\n    }\n    getArea(height = 1) {\n        return getLorentzianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const calculateLorentzianHeight = ({ fwhm = 1, area = 1 }) => {\n    return (2 * area) / Math.PI / fwhm;\n};\nexport const getLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1 } = options;\n    return (height * Math.PI * fwhm) / 2;\n};\nexport const lorentzianFct = (x, fwhm) => {\n    return fwhm ** 2 / (4 * x ** 2 + 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 getLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\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 { calculateLorentzianHeight, getLorentzianFactor, lorentzianFwhmToWidth, lorentzianWidthToFWHM, } from '../lorentzian/Lorentzian';\nexport class LorentzianDispersive {\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 lorentzianDispersiveFct(x, this.fwhm);\n    }\n    //eslint-disable-next-line\n    getArea(_height) {\n        return 0;\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianDispersiveData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const lorentzianDispersiveFct = (x, fwhm) => {\n    return (2 * fwhm * x) / (4 * x ** 2 + fwhm ** 2);\n};\nexport const getLorentzianDispersiveData = (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] = lorentzianDispersiveFct(i - center, fwhm) * height;\n        data[length - 1 - i] = -data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=LorentzianDispersive.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport { gaussianFct, getGaussianFactor } from '../gaussian/Gaussian';\nimport { lorentzianFct, getLorentzianFactor } from '../lorentzian/Lorentzian';\nexport class PseudoVoigt {\n    constructor(options = {}) {\n        const { fwhm = 500, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this.fwhm, this.mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this.fwhm, height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this.fwhm,\n            mu: this.mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({ fwhm: this.fwhm, mu: this.mu, area });\n    }\n    getParameters() {\n        return ['fwhm', 'mu'];\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    let { fwhm = 1, mu = 0.5, area = 1 } = options;\n    return (2 * area) / (fwhm * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI));\n};\nexport const pseudoVoigtFct = (x, fwhm, mu) => {\n    return (1 - mu) * lorentzianFct(x, fwhm) + mu * gaussianFct(x, fwhm);\n};\nexport const pseudoVoigtWidthToFWHM = (width, mu = 0.5) => {\n    return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const pseudoVoigtFwhmToWidth = (fwhm, mu = 0.5) => {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const getPseudoVoigtArea = (options) => {\n    const { fwhm = 500, height = 1, mu = 0.5 } = options;\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\nexport const getPseudoVoigtFactor = (area = 0.9999, mu = 0.5) => {\n    return mu < 1 ? getLorentzianFactor(area) : getGaussianFactor(area);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    let { fwhm = 500, mu = 0.5 } = shape;\n    let { length, factor = getPseudoVoigtFactor(0.999, mu), height = calculatePseudoVoigtHeight({ fwhm, mu, area: 1 }), } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { ROOT_THREE } from '../../../util/constants';\n/**\n * This shape is a linear combination of rational function (n|n+2), for n = 0 (lorentzian function) and n = 2\n * the parameter that combines those two functions is `gamma` and it is called the kurtosis parameter, it is an\n * implementation of generalized lorentzian shape published by Stanislav Sykora in the SMASH 2010. DOI:10.3247/SL3nmr10.006\n * @link http://www.ebyte.it/stan/Talk_ML_UserMeeting_SMASH_2010_GeneralizedLorentzian.html\n */\nexport class GeneralizedLorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500, gamma = 0.5 } = options;\n        this.fwhm = fwhm;\n        this.gamma = gamma;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return generalizedLorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return generalizedLorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return generalizedLorentzianFct(x, this.fwhm, this.gamma);\n    }\n    getArea(height = 1) {\n        return getGeneralizedLorentzianArea({\n            fwhm: this.fwhm,\n            height,\n            gamma: this.gamma,\n        });\n    }\n    getFactor(area) {\n        return getGeneralizedLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getGeneralizedLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        const { gamma, fwhm } = this;\n        return calculateGeneralizedLorentzianHeight({ fwhm, area, gamma });\n    }\n    getParameters() {\n        return ['fwhm', 'gamma'];\n    }\n}\nexport const calculateGeneralizedLorentzianHeight = ({ fwhm = 1, gamma = 1, area = 1, }) => {\n    return (area / fwhm / (3.14159 - 0.420894 * gamma)) * 2;\n};\n/**\n * expression of integral generated by Mathematica of the function\n */\nexport const getGeneralizedLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1, gamma = 1 } = options;\n    return (height * fwhm * (3.14159 - 0.420894 * gamma)) / 2;\n};\nexport const generalizedLorentzianFct = (x, fwhm, gamma) => {\n    const u = ((2 * x) / fwhm) ** 2;\n    return (1 - gamma) / (1 + u) + (gamma * (1 + u / 2)) / (1 + u + u ** 2);\n};\nexport const generalizedLorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const generalizedLorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getGeneralizedLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\n};\nexport const getGeneralizedLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500, gamma = 1 } = shape;\n    let { length, factor = getGeneralizedLorentzianFactor(), height = calculateGeneralizedLorentzianHeight({ fwhm, area: 1, gamma }), } = 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] = generalizedLorentzianFct(i - center, fwhm, gamma) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=GeneralizedLorentzian.js.map","import { Gaussian } from './gaussian/Gaussian';\nimport { GeneralizedLorentzian } from './generalizedLorentzian/GeneralizedLorentzian';\nimport { Lorentzian } from './lorentzian/Lorentzian';\nimport { LorentzianDispersive } from './lorentzianDispersive/LorentzianDispersive';\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        case 'lorentzianDispersive':\n            return new LorentzianDispersive(shape);\n        case 'generalizedLorentzian':\n            return new GeneralizedLorentzian(shape);\n        default: {\n            throw Error(`Unknown distribution ${kind}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","/**\n * This function returns the sumOfShapes function\n * This function gives sumOfShapes access to the peak list and the associated data\n * @param internalPeaks\n */\nexport function getSumOfShapes(internalPeaks) {\n    return function sumOfShapes(parameters) {\n        return (x) => {\n            let totalY = 0;\n            for (const peak of internalPeaks) {\n                const peakX = parameters[peak.fromIndex];\n                const y = parameters[peak.fromIndex + 1];\n                for (let i = 2; i < parameters.length; i++) {\n                    const shapeFctKey = peak.parameters[i];\n                    peak.shapeFct[shapeFctKey] = parameters[peak.fromIndex + i];\n                }\n                totalY += y * peak.shapeFct.fct(x - peakX);\n            }\n            return totalY;\n        };\n    };\n}\n//# sourceMappingURL=getSumOfShapes.js.map","/**\n * Asserts that value is truthy.\n *\n * @param value - Value to check.\n * @param message - Optional error message to throw.\n */\nexport function assert(value, message) {\n    if (!value) {\n        throw new Error(message ? message : 'unreachable');\n    }\n}\n//# sourceMappingURL=assert.js.map","export const DefaultParameters = {\n    x: {\n        init: (peak) => peak.x,\n        min: (peak, peakShape) => peak.x - peakShape.fwhm * 2,\n        max: (peak, peakShape) => peak.x + peakShape.fwhm * 2,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    y: {\n        init: (peak) => peak.y,\n        min: (peak) => (peak.y < 0 ? -1.1 : 0),\n        max: (peak) => (peak.y < 0 ? 0 : 1.1),\n        gradientDifference: () => 1e-3,\n    },\n    fwhm: {\n        init: (peak, peakShape) => peakShape.fwhm,\n        min: (peak, peakShape) => peakShape.fwhm * 0.25,\n        max: (peak, peakShape) => peakShape.fwhm * 4,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    mu: {\n        init: (peak, peakShape) => peakShape.mu,\n        min: () => 0,\n        max: () => 1,\n        gradientDifference: () => 0.01,\n    },\n    gamma: {\n        init: (peak, peakShape) => peakShape.gamma || 0.5,\n        min: () => -1,\n        max: () => 2,\n        gradientDifference: () => 0.01,\n    },\n};\n//# sourceMappingURL=DefaultParameters.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { assert } from \"../assert.js\";\nimport { DefaultParameters } from \"./DefaultParameters.js\";\nconst properties = ['init', 'min', 'max', 'gradientDifference'];\n/**\n * Return an array of internalPeaks that contains the exact init, min, max values based on the options\n * @param peaks\n * @param minMaxY\n * @param options\n * @returns\n */\nexport function getInternalPeaks(peaks, minMaxY, options = {}) {\n    let index = 0;\n    const internalPeaks = [];\n    const { baseline: shiftValue = minMaxY.min } = options;\n    const normalizedPeaks = peaks.map((peak) => {\n        return {\n            ...peak,\n            y: (peak.y - shiftValue) / minMaxY.range,\n        };\n    });\n    for (const peak of normalizedPeaks) {\n        const { id, shape = options.shape ? options.shape : { kind: 'gaussian' } } = peak;\n        const shapeFct = getShape1D(shape);\n        const parameters = ['x', 'y', ...shapeFct.getParameters()];\n        const propertiesValues = {\n            min: [],\n            max: [],\n            init: [],\n            gradientDifference: [],\n        };\n        for (const parameter of parameters) {\n            for (const property of properties) {\n                // check if the property is specified in the peak\n                let propertyValue = peak?.parameters?.[parameter]?.[property];\n                if (propertyValue) {\n                    propertyValue = getNormalizedValue(propertyValue, parameter, property, minMaxY, options.baseline);\n                    propertiesValues[property].push(propertyValue);\n                    continue;\n                }\n                // check if there are some global option, it could be a number or a callback\n                let generalParameterValue = options?.parameters?.[parameter]?.[property];\n                if (generalParameterValue) {\n                    if (typeof generalParameterValue === 'number') {\n                        generalParameterValue = getNormalizedValue(generalParameterValue, parameter, property, minMaxY, options.baseline);\n                        propertiesValues[property].push(generalParameterValue);\n                        continue;\n                    }\n                    else {\n                        let value = generalParameterValue(peak);\n                        value = getNormalizedValue(value, parameter, property, minMaxY, options.baseline);\n                        propertiesValues[property].push(value);\n                        continue;\n                    }\n                }\n                // we just need to take the default parameters\n                assert(DefaultParameters[parameter], `No default parameter for ${parameter}`);\n                const defaultParameterValues = DefaultParameters[parameter][property];\n                //@ts-expect-error should never happen\n                propertiesValues[property].push(defaultParameterValues(peak, shapeFct));\n            }\n        }\n        const fromIndex = index;\n        const toIndex = fromIndex + parameters.length - 1;\n        index += toIndex - fromIndex + 1;\n        internalPeaks.push({\n            id,\n            shape,\n            shapeFct,\n            parameters,\n            propertiesValues,\n            fromIndex,\n            toIndex,\n        });\n    }\n    return internalPeaks;\n}\nfunction getNormalizedValue(value, parameter, property, minMaxY, baseline) {\n    if (parameter === 'y') {\n        if (property === 'gradientDifference') {\n            return value;\n        }\n        else {\n            return baseline !== undefined\n                ? (value - baseline) / minMaxY.range\n                : (value - minMaxY.min) / minMaxY.range;\n        }\n    }\n    return value;\n}\n//# sourceMappingURL=getInternalPeaks.js.map","import { isAnyArray } from 'is-any-array';\nexport default function checkOptions(data, options) {\n    const { timeout, initialValues, weights = 1, damping = 1e-2, dampingStepUp = 11, dampingStepDown = 9, maxIterations = 100, errorTolerance = 1e-7, centralDifference = false, gradientDifference = 10e-2, improvementThreshold = 1e-3, } = options;\n    let { minValues, maxValues } = options;\n    if (damping <= 0) {\n        throw new Error('The damping option must be a positive number');\n    }\n    else if (!data.x || !data.y) {\n        throw new Error('The data parameter must have x and y elements');\n    }\n    else if (!isAnyArray(data.x) ||\n        data.x.length < 2 ||\n        !isAnyArray(data.y) ||\n        data.y.length < 2) {\n        throw new Error('The data parameter elements must be an array with more than 2 points');\n    }\n    else if (data.x.length !== data.y.length) {\n        throw new Error('The data parameter elements must have the same size');\n    }\n    if (!(initialValues && initialValues.length > 0)) {\n        throw new Error('The initialValues option is mandatory and must be an array');\n    }\n    const parameters = Array.from(initialValues);\n    const parLen = parameters.length;\n    maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n    minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n    if (maxValues.length !== minValues.length) {\n        throw new Error('minValues and maxValues must be the same size');\n    }\n    const gradientDifferenceArray = getGradientDifferenceArray(gradientDifference, parameters);\n    const filler = getFiller(weights, data.x.length);\n    const checkTimeout = getCheckTimeout(timeout);\n    const weightSquare = Array.from({ length: data.x.length }, (_, i) => filler(i));\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: gradientDifferenceArray,\n        improvementThreshold,\n    };\n}\nfunction getGradientDifferenceArray(gradientDifference, parameters) {\n    if (typeof gradientDifference === 'number') {\n        return new Array(parameters.length).fill(gradientDifference);\n    }\n    else if (isAnyArray(gradientDifference)) {\n        const parLen = parameters.length;\n        if (gradientDifference.length !== parLen) {\n            return new Array(parLen).fill(gradientDifference[0]);\n        }\n        return Array.from(gradientDifference);\n    }\n    throw new Error('gradientDifference should be a number or array with length equal to the number of parameters');\n}\nfunction getFiller(weights, dataLength) {\n    if (typeof weights === 'number') {\n        const value = 1 / weights ** 2;\n        return () => value;\n    }\n    else if (isAnyArray(weights)) {\n        if (weights.length < dataLength) {\n            const value = 1 / weights[0] ** 2;\n            return () => value;\n        }\n        return (i) => 1 / weights[i] ** 2;\n    }\n    throw new Error('weights should be a number or array with length equal to the number of data points');\n}\nfunction getCheckTimeout(timeout) {\n    if (timeout !== undefined) {\n        if (typeof timeout !== 'number') {\n            throw new Error('timeout should be a number');\n        }\n        const endTime = Date.now() + timeout * 1000;\n        return () => Date.now() > endTime;\n    }\n    else {\n        return () => false;\n    }\n}\n//# sourceMappingURL=check_options.js.map","/**\n * the sum of the weighted squares of the errors (or weighted residuals) between the data.y\n * and the curve-fit function.\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameters - Array of current parameter values\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weightSquare - Square of weights (must be same length as data.x)\n */\nexport default function errorCalculation(data, parameters, parameterizedFunction, weightSquare) {\n    let error = 0;\n    const func = parameterizedFunction(parameters);\n    for (let i = 0; i < data.x.length; i++) {\n        error += (data.y[i] - func(data.x[i])) ** 2 / weightSquare[i];\n    }\n    return error;\n}\n//# sourceMappingURL=error_calculation.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @param data Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n * @param params - Array of previous parameter values\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param paramFunction - The parameters and returns a function with the independent variable as a parameter\n */\nexport default function gradientFunction(data, evaluatedData, params, gradientDifference, paramFunction, centralDifference) {\n    const nbParams = params.length;\n    const nbPoints = data.x.length;\n    const ans = Matrix.zeros(nbParams, nbPoints);\n    let rowIndex = 0;\n    for (let param = 0; param < nbParams; param++) {\n        if (gradientDifference[param] === 0)\n            continue;\n        let delta = gradientDifference[param];\n        let auxParams = params.slice();\n        auxParams[param] += delta;\n        const funcParam = paramFunction(auxParams);\n        if (!centralDifference) {\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (evaluatedData[point] - funcParam(data.x[point])) / delta);\n            }\n        }\n        else {\n            auxParams = params.slice();\n            auxParams[param] -= delta;\n            delta *= 2;\n            const funcParam2 = paramFunction(auxParams);\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta);\n            }\n        }\n        rowIndex++;\n    }\n    return ans;\n}\n//# sourceMappingURL=gradient_function.js.map","import { inverse, Matrix } from 'ml-matrix';\nimport gradientFunction from \"./gradient_function.js\";\n/**\n * Matrix function over the samples\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n */\nfunction matrixFunction(data, evaluatedData) {\n    const m = data.x.length;\n    const ans = new Matrix(m, 1);\n    for (let point = 0; point < m; point++) {\n        ans.set(point, 0, data.y[point] - evaluatedData[point]);\n    }\n    return ans;\n}\n/**\n * Iteration for Levenberg-Marquardt\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param params - Array of previous parameter values\n * @param damping - Levenberg-Marquardt parameter\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weights - scale the gradient and residual error by weights\n */\nexport default function step(data, params, damping, gradientDifference, parameterizedFunction, centralDifference, weights) {\n    const identity = Matrix.eye(params.length, params.length, damping);\n    const func = parameterizedFunction(params);\n    const 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    const gradientFunc = gradientFunction(data, evaluatedData, params, gradientDifference, parameterizedFunction, centralDifference);\n    const residualError = matrixFunction(data, evaluatedData);\n    const inverseMatrix = inverse(identity.add(gradientFunc.mmul(gradientFunc.transpose().scale('row', { scale: weights }))));\n    const jacobianWeightResidualError = gradientFunc.mmul(residualError.scale('row', { scale: weights }));\n    const perturbations = inverseMatrix.mmul(jacobianWeightResidualError);\n    return {\n        perturbations,\n        jacobianWeightResidualError,\n    };\n}\n//# sourceMappingURL=step.js.map","import checkOptions from \"./check_options.js\";\nimport errorCalculation from \"./error_calculation.js\";\nimport step from \"./step.js\";\n/**\n * Curve fitting algorithm\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameterizedFunction - Takes an array of parameters and returns a function with the independent variable as its sole argument\n * @param options - Options object\n */\nexport function levenbergMarquardt(data, parameterizedFunction, options) {\n    const checkedOptions = checkOptions(data, options);\n    const { checkTimeout, minValues, maxValues, parameters, weightSquare, dampingStepUp, dampingStepDown, maxIterations, errorTolerance, centralDifference, gradientDifference, improvementThreshold, } = checkedOptions;\n    let damping = checkedOptions.damping;\n    let error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n    let optimalError = error;\n    let optimalParameters = parameters.slice();\n    let converged = error <= errorTolerance;\n    let iteration = 0;\n    for (; iteration < maxIterations && !converged; iteration++) {\n        const previousError = error;\n        const { perturbations, jacobianWeightResidualError } = step(data, parameters, damping, gradientDifference, parameterizedFunction, centralDifference, weightSquare);\n        for (let k = 0; k < parameters.length; k++) {\n            parameters[k] = Math.min(Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)), maxValues[k]);\n        }\n        error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n        if (isNaN(error))\n            break;\n        if (error < optimalError - errorTolerance) {\n            optimalError = error;\n            optimalParameters = parameters.slice();\n        }\n        const improvementMetric = (previousError - error) /\n            perturbations\n                .transpose()\n                .mmul(perturbations.mul(damping).add(jacobianWeightResidualError))\n                .get(0, 0);\n        if (improvementMetric > improvementThreshold) {\n            damping = Math.max(damping / dampingStepDown, 1e-7);\n        }\n        else {\n            damping = Math.min(damping * dampingStepUp, 1e7);\n        }\n        if (checkTimeout()) {\n            throw new Error(`The execution time is over to ${options.timeout} seconds`);\n        }\n        converged = error <= errorTolerance;\n    }\n    return {\n        parameterValues: optimalParameters,\n        parameterError: optimalError,\n        iterations: iteration,\n    };\n}\n//# sourceMappingURL=levenberg_marquardt.js.map","/**\n * Preparata, F. P., & Shamos, M. I. (2012). Computational geometry: an introduction. Springer Science & Business Media.\n * @param {Array} x - The array with x coordinates of the points.\n * @param {Array} y - The array with y coordinates of the points.\n * @return {Array} The indices of the points of anticlockwise lower convex hull\n * @private\n */\nexport default function antiLowerConvexHull(x, y) {\n  if (x.length !== y.length) {\n    throw new RangeError('X and Y vectors has different dimensions');\n  }\n\n  const nbPoints = x.length - 1;\n  if (nbPoints === 0) return [0];\n  if (nbPoints === 1) return [0, 1];\n\n  let currentPoint = 0;\n  let result = new Array(x.length).fill(true);\n  while (true) {\n    const a = currentPoint;\n    const b = moveOn(currentPoint, nbPoints, result);\n    const c = moveOn(moveOn(currentPoint, nbPoints, result), nbPoints, result);\n\n    const det =\n      x[c] * (y[a] - y[b]) + x[a] * (y[b] - y[c]) + x[b] * (y[c] - y[a]);\n\n    const leftTurn = det >= 0;\n\n    if (leftTurn) {\n      currentPoint = b;\n    } else {\n      result[b] = false;\n      currentPoint = moveBack(currentPoint, nbPoints, result);\n    }\n    if (c === nbPoints) break;\n  }\n\n  return result\n    .map((item, index) => (item === false ? false : index))\n    .filter((item) => item !== false);\n}\n\n/**\n * @param {number} currentPoint - The index of the current point to make the move\n * @param {number} nbPoints - The total number of points in the array\n * @param {Array} vector - The array with the points\n * @return {number} the index of the point after the move\n * @private\n */\n\nfunction moveBack(currentPoint, nbPoints, vector) {\n  let counter = currentPoint - 1;\n  while (vector[counter] === false) counter--;\n  return currentPoint === 0 ? nbPoints : counter;\n}\n\nfunction moveOn(currentPoint, nbPoints, vector) {\n  let counter = currentPoint + 1;\n  while (vector[counter] === false) counter++;\n  return currentPoint === nbPoints ? 0 : counter;\n}\n","import { xNorm, xMaxValue, xMinValue } from 'ml-spectra-processing';\n\nimport antiLowerConvexHull from './util/antiLowerConvexHull';\n\n/**\n * Performs a global optimization of required parameters\n * It will return an object containing:\n * - `minFunctionValue`: The minimum value found for the objetive function\n * - `optima`: Array of Array of values for all the variables where the function reach its minimum value\n * - `iterations`: Number of iterations performed in the process\n * - `finalState`: Internal state allowing to continue optimization (initialState)\n * @param {function} objectiveFunction Function to evaluate. It should accept an array of variables\n * @param {Array} lowerBoundaries Array containing for each variable the lower boundary\n * @param {Array} upperBoundaries Array containing for each variable the higher boundary\n * @param {Object} [options={}]\n * @param {number} [options.iterations] - Number of iterations.\n * @param {number} [options.epsilon] - Tolerance to choose best current value.\n * @param {number} [options.tolerance] - Minimum tollerance of the function.\n * @param {number} [options.tolerance2] - Minimum tollerance of the function.\n * @param {Object} [options.initialState={}}] - finalState of previous optimization.\n * @return {Object} {finalState, iterations, minFunctionValue}\n * */\n\nexport default function direct(\n  objectiveFunction,\n  lowerBoundaries,\n  upperBoundaries,\n  options = {},\n) {\n  const {\n    iterations = 50,\n    epsilon = 1e-4,\n    tolerance = 1e-16,\n    tolerance2 = 1e-12,\n    initialState = {},\n  } = options;\n\n  if (\n    objectiveFunction === undefined ||\n    lowerBoundaries === undefined ||\n    upperBoundaries === undefined\n  ) {\n    throw new RangeError('There is something undefined');\n  }\n\n  lowerBoundaries = new Float64Array(lowerBoundaries);\n  upperBoundaries = new Float64Array(upperBoundaries);\n\n  if (lowerBoundaries.length !== upperBoundaries.length) {\n    throw new Error(\n      'Lower bounds and Upper bounds for x are not of the same length',\n    );\n  }\n\n  //-------------------------------------------------------------------------\n  //                        STEP 1. Initialization\n  //-------------------------------------------------------------------------\n  let n = lowerBoundaries.length;\n  let diffBorders = upperBoundaries.map((x, i) => x - lowerBoundaries[i]);\n\n  let {\n    numberOfRectangles = 0,\n    totalIterations = 0,\n    unitaryCoordinates = [new Float64Array(n).fill(0.5)],\n    middlePoint = new Float64Array(n).map((value, index) => {\n      return (\n        lowerBoundaries[index] +\n        unitaryCoordinates[0][index] * diffBorders[index]\n      );\n    }),\n    bestCurrentValue = objectiveFunction(middlePoint),\n    fCalls = 1,\n    smallerDistance = 0,\n    edgeSizes = [new Float64Array(n).fill(0.5)],\n    diagonalDistances = [Math.sqrt(n * 0.5 ** 2)],\n    functionValues = [bestCurrentValue],\n    differentDistances = diagonalDistances,\n    smallerValuesByDistance = [bestCurrentValue],\n    choiceLimit = undefined,\n  } = initialState;\n  if (\n    initialState.originalCoordinates &&\n    initialState.originalCoordinates.length > 0\n  ) {\n    bestCurrentValue = xMinValue(functionValues);\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n    );\n\n    unitaryCoordinates = initialState.originalCoordinates.slice();\n    for (let j = 0; j < unitaryCoordinates.length; j++) {\n      for (let i = 0; i < lowerBoundaries.length; i++) {\n        unitaryCoordinates[j][i] =\n          (unitaryCoordinates[j][i] - lowerBoundaries[i]) / diffBorders[i];\n      }\n    }\n  }\n\n  let iteration = 0;\n  //-------------------------------------------------------------------------\n  //                          Iteration loop\n  //-------------------------------------------------------------------------\n\n  while (iteration < iterations) {\n    //----------------------------------------------------------------------\n    //  STEP 2. Identify the set S of all potentially optimal rectangles\n    //----------------------------------------------------------------------\n\n    let S1 = [];\n    let idx = differentDistances.findIndex(\n      // eslint-disable-next-line no-loop-func\n      (e) => e === diagonalDistances[smallerDistance],\n    );\n    let counter = 0;\n    for (let i = idx; i < differentDistances.length; i++) {\n      for (let f = 0; f < functionValues.length; f++) {\n        if (\n          (functionValues[f] === smallerValuesByDistance[i]) &\n          (diagonalDistances[f] === differentDistances[i])\n        ) {\n          S1[counter++] = f;\n        }\n      }\n    }\n\n    let optimumValuesIndex, S3;\n    if (differentDistances.length - idx > 1) {\n      let a1 = diagonalDistances[smallerDistance];\n      let b1 = functionValues[smallerDistance];\n      let a2 = differentDistances[differentDistances.length - 1];\n      let b2 = smallerValuesByDistance[differentDistances.length - 1];\n      let slope = (b2 - b1) / (a2 - a1);\n      let constant = b1 - slope * a1;\n      let S2 = new Uint32Array(counter);\n      counter = 0;\n      for (let i = 0; i < S2.length; i++) {\n        let j = S1[i];\n        if (\n          functionValues[j] <=\n          slope * diagonalDistances[j] + constant + tolerance2\n        ) {\n          S2[counter++] = j;\n        }\n      }\n\n      let xHull = [];\n      let yHull = [];\n      for (let i = 0; i < counter; i++) {\n        xHull.push(diagonalDistances[S2[i]]);\n        yHull.push(functionValues[S2[i]]);\n      }\n\n      let lowerIndexHull = antiLowerConvexHull(xHull, yHull);\n\n      S3 = [];\n      for (let i = 0; i < lowerIndexHull.length; i++) {\n        S3.push(S2[lowerIndexHull[i]]);\n      }\n    } else {\n      S3 = S1.slice(0, counter);\n    }\n    optimumValuesIndex = S3;\n    //--------------------------------------------------------------\n    // STEPS 3,5: Select any rectangle j in S\n    //--------------------------------------------------------------\n    for (let k = 0; k < optimumValuesIndex.length; k++) {\n      let j = optimumValuesIndex[k];\n      let largerSide = xMaxValue(edgeSizes[j]);\n      let largeSidesIndex = new Uint32Array(edgeSizes[j].length);\n      counter = 0;\n      for (let i = 0; i < edgeSizes[j].length; i++) {\n        if (Math.abs(edgeSizes[j][i] - largerSide) < tolerance) {\n          largeSidesIndex[counter++] = i;\n        }\n      }\n      let delta = (2 * largerSide) / 3;\n      let bestFunctionValues = [];\n      for (let r = 0; r < counter; r++) {\n        let i = largeSidesIndex[r];\n        let firstMiddleCenter = unitaryCoordinates[j].slice();\n        let secondMiddleCenter = unitaryCoordinates[j].slice();\n        firstMiddleCenter[i] += delta;\n        secondMiddleCenter[i] -= delta;\n        let firstMiddleValue = new Float64Array(firstMiddleCenter.length);\n        let secondMiddleValue = new Float64Array(secondMiddleCenter.length);\n        for (let i = 0; i < firstMiddleCenter.length; i++) {\n          firstMiddleValue[i] =\n            lowerBoundaries[i] + firstMiddleCenter[i] * diffBorders[i];\n          secondMiddleValue[i] =\n            lowerBoundaries[i] + secondMiddleCenter[i] * diffBorders[i];\n        }\n        let firstMinValue = objectiveFunction(firstMiddleValue);\n        let secondMinValue = objectiveFunction(secondMiddleValue);\n        fCalls += 2;\n        bestFunctionValues.push({\n          minValue: Math.min(firstMinValue, secondMinValue),\n          index: r,\n        });\n        // [Math.min(firstMinValue, secondMinValue), r];\n        unitaryCoordinates.push(firstMiddleCenter, secondMiddleCenter);\n        functionValues.push(firstMinValue, secondMinValue);\n      }\n\n      let b = bestFunctionValues.sort((a, b) => a.minValue - b.minValue);\n      for (let r = 0; r < counter; r++) {\n        let u = largeSidesIndex[b[r].index];\n        let ix1 = numberOfRectangles + 2 * (b[r].index + 1) - 1;\n        let ix2 = numberOfRectangles + 2 * (b[r].index + 1);\n        edgeSizes[j][u] = delta / 2;\n        edgeSizes[ix1] = edgeSizes[j].slice();\n        edgeSizes[ix2] = edgeSizes[j].slice();\n        diagonalDistances[j] = xNorm(edgeSizes[j]);\n        diagonalDistances[ix1] = diagonalDistances[j];\n        diagonalDistances[ix2] = diagonalDistances[j];\n      }\n      numberOfRectangles += 2 * counter;\n    }\n\n    //--------------------------------------------------------------\n    //                  Update\n    //--------------------------------------------------------------\n\n    bestCurrentValue = xMinValue(functionValues);\n\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n      iteration,\n    );\n\n    differentDistances = Array.from(new Set(diagonalDistances));\n    differentDistances = differentDistances.sort((a, b) => a - b);\n\n    smallerValuesByDistance = [];\n    for (let i = 0; i < differentDistances.length; i++) {\n      let minIndex;\n      let minValue = Number.POSITIVE_INFINITY;\n      for (let k = 0; k < diagonalDistances.length; k++) {\n        if (diagonalDistances[k] === differentDistances[i]) {\n          if (functionValues[k] < minValue) {\n            minValue = functionValues[k];\n            minIndex = k;\n          }\n        }\n      }\n      smallerValuesByDistance.push(functionValues[minIndex]);\n    }\n\n    let currentMin = [];\n    for (let j = 0; j < functionValues.length; j++) {\n      if (functionValues[j] === bestCurrentValue) {\n        let temp = [];\n        for (let i = 0; i < lowerBoundaries.length; i++) {\n          temp.push(\n            lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i],\n          );\n        }\n        currentMin.push(temp);\n      }\n    }\n    iteration += 1;\n  }\n  //--------------------------------------------------------------\n  //                  Saving results\n  //--------------------------------------------------------------\n\n  let result = {};\n  result.minFunctionValue = bestCurrentValue;\n  result.iterations = iteration;\n  let originalCoordinates = [];\n  for (let j = 0; j < numberOfRectangles + 1; j++) {\n    let pair = [];\n    for (let i = 0; i < lowerBoundaries.length; i++) {\n      pair.push(lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i]);\n    }\n    originalCoordinates.push(pair);\n  }\n\n  result.finalState = {\n    numberOfRectangles,\n    totalIterations: (totalIterations += iterations),\n    originalCoordinates,\n    middlePoint,\n    fCalls,\n    smallerDistance,\n    edgeSizes,\n    diagonalDistances,\n    functionValues,\n    differentDistances,\n    smallerValuesByDistance,\n    choiceLimit,\n  };\n\n  let minimizer = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    if (functionValues[i] === bestCurrentValue) {\n      minimizer.push(originalCoordinates[i]);\n    }\n  }\n\n  result.optima = minimizer;\n  return result;\n}\n\nfunction getMinIndex(\n  functionValues,\n  diagonalDistances,\n  choiceLimit,\n  bestCurrentValue,\n) {\n  let item = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    item[i] =\n      Math.abs(functionValues[i] - (bestCurrentValue + choiceLimit)) /\n      diagonalDistances[i];\n  }\n  const min = xMinValue(item);\n  let result = item.findIndex((x) => x === min);\n  return result;\n}\n","import direct from 'ml-direct';\nexport function directOptimization(data, sumOfShapes, options) {\n    const { minValues, maxValues, maxIterations, epsilon, tolerance, tolerance2, initialState, } = options;\n    const objectiveFunction = getObjectiveFunction(data, sumOfShapes);\n    const result = direct(objectiveFunction, \n    // direct internally converts ArrayLike to Float64Array,\n    // so we can safely cast minValues and maxValues to number[]\n    minValues, maxValues, {\n        iterations: maxIterations,\n        epsilon,\n        tolerance,\n        tolerance2,\n        initialState,\n    });\n    const { optima } = result;\n    return {\n        parameterError: result.minFunctionValue,\n        iterations: result.iterations,\n        parameterValues: optima[0],\n    };\n}\nfunction getObjectiveFunction(data, sumOfShapes) {\n    const { x, y } = data;\n    const nbPoints = x.length;\n    return (parameters) => {\n        const fct = sumOfShapes(parameters);\n        let error = 0;\n        for (let i = 0; i < nbPoints; i++) {\n            error += (y[i] - fct(x[i])) ** 2;\n        }\n        return error;\n    };\n}\n//# sourceMappingURL=directOptimization.js.map","import { levenbergMarquardt } from 'ml-levenberg-marquardt';\nimport { directOptimization } from \"./wrappers/directOptimization.js\";\n/** Algorithm to select the method.\n * @param optimizationOptions - Optimization options\n * @returns - The algorithm and optimization options\n */\nexport function selectMethod(optimizationOptions = {}) {\n    const { kind = 'lm', options } = optimizationOptions;\n    switch (kind) {\n        case 'lm':\n        case 'levenbergMarquardt':\n            return {\n                algorithm: levenbergMarquardt,\n                optimizationOptions: {\n                    damping: 1.5,\n                    maxIterations: 100,\n                    errorTolerance: 1e-8,\n                    ...options,\n                },\n            };\n        case 'direct': {\n            return {\n                algorithm: directOptimization,\n                optimizationOptions: {\n                    iterations: 20,\n                    epsilon: 1e-4,\n                    tolerance: 1e-16,\n                    tolerance2: 1e-12,\n                    initialState: {},\n                    ...options,\n                },\n            };\n        }\n        default:\n            throw new Error(`Unknown fitting algorithm`);\n    }\n}\n//# sourceMappingURL=selectMethod.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nimport { getSumOfShapes } from \"./shapes/getSumOfShapes.js\";\nimport { getInternalPeaks } from \"./util/internalPeaks/getInternalPeaks.js\";\nimport { selectMethod } from \"./util/selectMethod.js\";\n/**\n * Fits a set of points to the sum of a set of bell functions.\n *\n * @param data - An object containing the x and y data to be fitted.\n * @param peaks - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Options for optimize\n * @returns - An object with fitting error and the list of optimized parameters { parameters: [ {x, y, width} ], error } if the kind of shape is pseudoVoigt mu parameter is optimized.\n */\nexport function optimize(data, peaks, options = {}) {\n    // rescale data\n    const temp = xMinMaxValues(data.y);\n    const minMaxY = { ...temp, range: temp.max - temp.min };\n    const internalPeaks = getInternalPeaks(peaks, minMaxY, options);\n    // need to rescale what is related to Y\n    const { baseline: shiftValue = minMaxY.min } = options;\n    const normalizedY = new Float64Array(data.y.length);\n    for (let i = 0; i < data.y.length; i++) {\n        normalizedY[i] = (data.y[i] - shiftValue) / minMaxY.range;\n    }\n    const nbParams = internalPeaks[internalPeaks.length - 1].toIndex + 1;\n    const minValues = new Float64Array(nbParams);\n    const maxValues = new Float64Array(nbParams);\n    const initialValues = new Float64Array(nbParams);\n    const gradientDifferences = new Float64Array(nbParams);\n    let index = 0;\n    for (const peak of internalPeaks) {\n        for (let i = 0; i < peak.parameters.length; i++) {\n            minValues[index] = peak.propertiesValues.min[i];\n            maxValues[index] = peak.propertiesValues.max[i];\n            initialValues[index] = peak.propertiesValues.init[i];\n            gradientDifferences[index] = peak.propertiesValues.gradientDifference[i];\n            index++;\n        }\n    }\n    const { algorithm, optimizationOptions } = selectMethod(options.optimization);\n    const sumOfShapes = getSumOfShapes(internalPeaks);\n    const fitted = algorithm({ x: data.x, y: normalizedY }, sumOfShapes, {\n        minValues,\n        maxValues,\n        initialValues,\n        gradientDifference: gradientDifferences,\n        ...optimizationOptions,\n    });\n    const fittedValues = fitted.parameterValues;\n    const newPeaks = [];\n    for (const peak of internalPeaks) {\n        const { id, shape, parameters, fromIndex } = peak;\n        let newPeak = { x: 0, y: 0, shape };\n        if (id) {\n            newPeak = { ...newPeak, id };\n        }\n        newPeak.x = fittedValues[fromIndex];\n        newPeak.y = fittedValues[fromIndex + 1] * minMaxY.range + shiftValue;\n        for (let i = 2; i < parameters.length; i++) {\n            //@ts-expect-error should be fixed once\n            newPeak.shape[parameters[i]] = fittedValues[fromIndex + i];\n        }\n        newPeaks.push(newPeak);\n    }\n    return {\n        error: fitted.parameterError,\n        iterations: fitted.iterations,\n        peaks: newPeaks,\n    };\n}\n//# sourceMappingURL=index.js.map","import { gsd } from 'ml-gsd';\nimport { xFindClosestIndex, xMean, xAdd } from 'ml-spectra-processing';\n/**\n * Filter that allows to calibrateX the x axis based on the presence of peaks\n * @param data\n * @param options\n */\nexport function calibrateX(data, options = {}) {\n    const { targetX = 0, nbPeaks = 1, from = data.x[0], to = data.x.at(-1), gsd: gsdOptions = {\n        minMaxRatio: 0.1,\n        realTopDetection: true,\n        smoothY: true,\n        sgOptions: {\n            windowSize: 7,\n            polynomial: 3,\n        },\n    }, } = options;\n    const fromIndex = xFindClosestIndex(data.x, from);\n    const toIndex = xFindClosestIndex(data.x, to);\n    const peaks = gsd({\n        x: data.x.subarray(fromIndex, toIndex),\n        y: data.y.subarray(fromIndex, toIndex),\n    }, gsdOptions)\n        .sort((a, b) => b.y - a.y)\n        .slice(0, nbPeaks);\n    if (peaks.length < nbPeaks)\n        return { data };\n    const middle = xMean(peaks.map((peak) => peak.x));\n    return { data: { x: xAdd(data.x, targetX - middle), y: data.y } };\n}\n//# sourceMappingURL=calibrateX.js.map","import { xApplyFunctionStr } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function xFunction(data, options = {}) {\n    return {\n        data: {\n            x: xApplyFunctionStr(data.x, {\n                variableLabel: 'x',\n                fctString: options.function,\n            }),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=xFunction.js.map","import { xApplyFunctionStr } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function yFunction(data, options = {}) {\n    return {\n        data: {\n            x: data.x,\n            y: xApplyFunctionStr(data.y, {\n                variableLabel: 'y',\n                fctString: options.function,\n            }),\n        },\n    };\n}\n//# sourceMappingURL=yFunction.js.map","import { xAdd, xMaxValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMaxY(data, options = {}) {\n    const { max = 1 } = options;\n    const existingMax = xMaxValue(data.y);\n    if (existingMax === max) {\n        return { data };\n    }\n    return {\n        data: {\n            x: data.x,\n            y: xAdd(data.y, max - existingMax),\n        },\n    };\n}\n//# sourceMappingURL=setMaxY.js.map","import { xAdd, xMinValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMinY(data, options = {}) {\n    const { min = 0 } = options;\n    const existingMin = xMinValue(data.y);\n    if (existingMin === min) {\n        return { data };\n    }\n    return {\n        data: {\n            x: data.x,\n            y: xAdd(data.y, min - existingMin),\n        },\n    };\n}\n//# sourceMappingURL=setMinY.js.map","import { xEnsureFloat64, xyGrowingX } from 'ml-spectra-processing';\nimport * as Filters from \"./filters/filters.js\";\n/**\n * Apply filters on {x:[], y:[]}\n * @param data\n * @param filters\n * @returns A very important number\n */\nexport function filterXY(data, filters) {\n    let result = {\n        data: xyGrowingX({ x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) }),\n    };\n    const logs = [];\n    for (const filter of filters) {\n        const start = Date.now();\n        const filterFct = Filters[filter.name];\n        if (!filterFct) {\n            throw new Error(`Unknown filter: ${filter.name}`);\n        }\n        // @ts-expect-error some method have options and some other ones don't have any options\n        result = filterFct(result.data, filter.options);\n        result.data = xyGrowingX(result.data);\n        logs.push({\n            name: filter.name,\n            time: Date.now() - start,\n        });\n    }\n    return { logs, data: result.data };\n}\n//# sourceMappingURL=filterXY.js.map","import { filterXY } from 'ml-signal-processing';\nimport { xIsMonotonic, xMaxValue, xMinValue } from 'ml-spectra-processing';\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n    const data = {\n        x: spectrum.variables.x.data,\n        y: spectrum.variables.y.data,\n    };\n    const newSpectrum = {\n        variables: {\n            x: {\n                data: spectrum.variables.x.data,\n                units: spectrum.variables.x.units,\n                label: spectrum.variables.x.label,\n            },\n            y: {\n                data: spectrum.variables.y.data,\n                units: spectrum.variables.y.units,\n                label: spectrum.variables.y.label,\n            },\n        },\n    };\n    if (spectrum.title)\n        newSpectrum.title = spectrum.title;\n    if (spectrum.dataType)\n        newSpectrum.dataType = spectrum.dataType;\n    if (spectrum.meta)\n        newSpectrum.meta = spectrum.meta;\n    if (spectrum.id)\n        newSpectrum.id = spectrum.id;\n    const { from = spectrum.variables.x.min, to = spectrum.variables.x.max, numberOfPoints, exclusions = [], zones = [], } = options;\n    let { filters = [] } = options;\n    filters = structuredClone(filters);\n    if (numberOfPoints) {\n        filters.push({\n            name: 'equallySpaced',\n            options: { from, to, exclusions, zones, numberOfPoints },\n        });\n    }\n    else {\n        filters.push({\n            name: 'filterX',\n            options: { from, to, exclusions, zones },\n        });\n    }\n    const { x, y } = filterXY(data, filters).data;\n    // filters change the y axis, we get rid of the units\n    // TODO we should deal correctly with this problem\n    if (filters.length > 1) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label = newSpectrum.variables.y.label?.replace(/\\s*\\[.*]/, '');\n    }\n    newSpectrum.variables.x.data = x;\n    newSpectrum.variables.x.min = xMinValue(x);\n    newSpectrum.variables.x.max = xMaxValue(x);\n    newSpectrum.variables.x.isMonotonic = xIsMonotonic(x);\n    newSpectrum.variables.y.data = y;\n    newSpectrum.variables.y.min = xMinValue(y);\n    newSpectrum.variables.y.max = xMaxValue(y);\n    newSpectrum.variables.y.isMonotonic = xIsMonotonic(y);\n    return newSpectrum;\n}\n//# sourceMappingURL=getNormalizedSpectrum.js.map","/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Qty = factory());\n})(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"t\",\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-imp\", \"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<Gal>\" : [[\"Gal\"], 1e-2, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* molar_concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"molar_concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"molar_concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\",\"Joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<electronvolt>\" : [[\"eV\", \"electronvolt\", \"electronvolts\"], 1.602176634E-19, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<arcminute>\" :[[\"arcmin\",\"arcminute\",\"arcminutes\"], Math.PI / 10800.0, \"angle\", [\"<radian>\"]],\n    \"<arcsecond>\" :[[\"arcsec\",\"arcsecond\",\"arcseconds\"], Math.PI / 648000.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppb>\" :  [[\"ppb\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-12, \"prefix_only\", [\"<1>\"]],\n    \"<ppq>\" :  [[\"ppq\"],1e-15, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.8.0\";\n\n  return Qty;\n\n}));\n","import Qty from 'js-quantities';\nexport function convertUnit(array, fromUnit, toUnit) {\n    fromUnit = normalize(fromUnit);\n    toUnit = normalize(toUnit);\n    if (fromUnit === toUnit)\n        return array;\n    const convert = Qty.swiftConverter(fromUnit, toUnit); // Configures converter\n    //@ts-expect-error convert does not allowed typed array but it works\n    return convert(array);\n}\nfunction normalize(unit) {\n    unit = unit.replaceAll('°C', 'tempC');\n    unit = unit.replaceAll('°F', 'tempF');\n    unit = unit.replaceAll(/(^|\\W)K(\\W|$)/g, '$1tempK$2');\n    return unit;\n}\n//# sourceMappingURL=convertUnit.js.map","const testRegExp = /^\\/((?:\\\\\\/|[^/])+)\\/([gimuy]{0,5})?$/;\nexport function ensureRegexp(string) {\n    if (typeof string !== 'string')\n        return string;\n    const parts = testRegExp.exec(string);\n    if (parts) {\n        try {\n            return new RegExp(parts[1], parts[2]);\n        }\n        catch {\n            return stringToRegexp(string);\n        }\n    }\n    else {\n        return stringToRegexp(string);\n    }\n}\nfunction stringToRegexp(string, flags = 'i') {\n    return new RegExp(string.replaceAll(/[$()*+.?[\\\\\\]^{|}]/g, (match) => `\\\\${match}`), flags);\n}\n//# sourceMappingURL=ensureRegexp.js.map","import { xIsMonotonic, xMaxValue, xMinValue } from 'ml-spectra-processing';\nimport { convertUnit } from './convertUnit.js';\nexport function getConvertedVariable(variable, newUnits) {\n    const data = variable.units !== undefined && variable.units !== newUnits // would be nice if convertUnit would allow typedArray\n        ? convertUnit(Array.from(variable.data), variable.units, newUnits)\n        : variable.data;\n    return {\n        units: newUnits,\n        label: variable.label.replace(`[${variable.units || ''}]`, `[${newUnits}]`),\n        data: data || [],\n        min: data ? xMinValue(data) : undefined,\n        max: data ? xMaxValue(data) : undefined,\n        isMonotonic: xIsMonotonic(data),\n    };\n}\n//# sourceMappingURL=getConvertedVariable.js.map","/* eslint-disable @typescript-eslint/no-dynamic-delete */\nimport { convertUnit } from './convertUnit.js';\nimport { ensureRegexp } from './ensureRegexp.js';\nimport { getConvertedVariable } from './getConvertedVariable.js';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param spectra\n * @param selector\n */\nexport function getXYSpectra(spectra = [], selector = {}) {\n    const selectedSpectra = [];\n    if (spectra.length === 0)\n        return selectedSpectra;\n    const { variables, units, labels, meta, index } = selector;\n    let { dataType, title, xUnits, yUnits, xVariable = 'x', yVariable = 'y', xLabel, yLabel, } = selector;\n    if (index !== undefined) {\n        return [spectra[index]];\n    }\n    if (dataType) {\n        dataType = ensureRegexp(dataType);\n    }\n    if (title) {\n        title = ensureRegexp(title);\n    }\n    if (units && !xUnits && !yUnits)\n        [yUnits, xUnits] = units.split(/\\s*vs\\s*/);\n    if (labels && !xLabel && !yLabel) {\n        [yLabel, xLabel] = labels.split(/\\s*vs\\s*/);\n    }\n    if (variables) {\n        const parts = variables.split(/\\s*vs\\s*/);\n        if (parts.length === 2) {\n            xVariable = parts[1];\n            yVariable = parts[0];\n        }\n    }\n    if (xLabel)\n        xLabel = ensureRegexp(xLabel);\n    if (yLabel)\n        yLabel = ensureRegexp(yLabel);\n    for (const spectrum of spectra) {\n        const variableNames = Object.keys(spectrum.variables);\n        if (!(variableNames.length > 1))\n            continue;\n        // we filter on general spectrum information\n        if (dataType &&\n            (!spectrum.dataType || !dataType.exec(spectrum.dataType))) {\n            continue;\n        }\n        if (title && (!spectrum.title || !title.exec(spectrum.title))) {\n            continue;\n        }\n        if (meta && typeof meta === 'object') {\n            if (!spectrum.meta)\n                continue;\n            for (const key in spectrum.meta) {\n                if (!spectrum.meta[key])\n                    continue;\n                const value = ensureRegexp(spectrum.meta[key]);\n                if (!value.exec(spectrum.meta[key]))\n                    continue;\n            }\n        }\n        const x = getPossibleVariable(spectrum.variables, {\n            units: xUnits,\n            label: xLabel,\n            variableName: xVariable,\n        });\n        const y = getPossibleVariable(spectrum.variables, {\n            units: yUnits,\n            label: yLabel,\n            variableName: yVariable,\n        });\n        if (x && y) {\n            // should we reverse the x axis?\n            if (x.data[0] > x.data.at(-1)) {\n                x.data = x.data.slice().reverse();\n                y.data = y.data.slice().reverse();\n            }\n            selectedSpectra.push({\n                title: spectrum.title,\n                dataType: spectrum.dataType,\n                meta: spectrum.meta,\n                variables: { x, y },\n                id: spectrum.id,\n            });\n        }\n    }\n    return selectedSpectra;\n}\nfunction getPossibleVariable(variables, selector = {}) {\n    const { units, label, variableName } = selector;\n    const possible = { ...variables };\n    let key;\n    if (units !== undefined) {\n        for (key in possible) {\n            const variable = variables[key];\n            let convertibleUnits = true;\n            try {\n                convertUnit(1, variable?.units || '', units);\n            }\n            catch {\n                convertibleUnits = false;\n            }\n            if (convertibleUnits && variable) {\n                possible[key] = getConvertedVariable(variable, units);\n            }\n            else {\n                delete possible[key];\n            }\n        }\n    }\n    if (label !== undefined) {\n        const regexpLabel = ensureRegexp(label);\n        for (key in possible) {\n            if (!regexpLabel.exec(variables[key]?.label ?? '')) {\n                delete possible[key];\n            }\n        }\n    }\n    if (variableName !== undefined) {\n        if (possible[variableName])\n            return possible[variableName];\n        const upper = variableName.toUpperCase();\n        if (Object.hasOwn(possible, upper)) {\n            return possible[upper];\n        }\n        const lower = variableName.toLowerCase();\n        if (Object.hasOwn(possible, lower)) {\n            return possible[lower];\n        }\n    }\n    const possibleFiltered = Object.values(possible).filter((val) => val !== undefined);\n    if (possibleFiltered.length > 0) {\n        return possibleFiltered[0];\n    }\n}\n//# sourceMappingURL=getXYSpectra.js.map","import { getXYSpectra } from './getXYSpectra.js';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param spectra\n * @param selector\n */\nexport function getXYSpectrum(spectra = [], selector = {}) {\n    const selectedSpectra = getXYSpectra(spectra, selector);\n    if (selectedSpectra.length === 0)\n        return undefined;\n    return selectedSpectra[0];\n}\n//# sourceMappingURL=getXYSpectrum.js.map","import { isAnyArray } from 'is-any-array';\nimport { stringify, xIsMonotonic, xMaxValue, xMinValue, } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum.js';\nimport { getXYSpectra } from './util/getXYSpectra.js';\nimport { getXYSpectrum } from './util/getXYSpectrum.js';\n/**\n * Class allowing to store and manipulate an analysis.\n * An analysis may contain one or more spectra that can be selected\n * based on their units\n */\nexport class Analysis {\n    id;\n    label;\n    spectrumCallback;\n    spectra;\n    cache;\n    constructor(options = {}) {\n        this.id = options.id || Math.random().toString(36).slice(2, 10);\n        this.label = options.label || this.id;\n        this.spectrumCallback = options.spectrumCallback;\n        this.spectra = [];\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    clone({ filter = {} }) {\n        const { ids } = filter;\n        const analysis = new Analysis();\n        analysis.id = this.id;\n        analysis.label = this.label;\n        analysis.spectrumCallback = this.spectrumCallback;\n        analysis.spectra = this.spectra.filter((spectrum) => {\n            //@ts-expect-error spectrum.id is not expected to be undefined at this level\n            return !ids || ids.includes(spectrum.id);\n        });\n        return analysis;\n    }\n    toJSON() {\n        // TODO this is likely not the most optimized way to remove typedArray\n        // if data are small seems still reasonable\n        return {\n            id: this.id,\n            label: this.label,\n            spectra: JSON.parse(stringify(this.spectra)),\n        };\n    }\n    static fromJSON(json) {\n        const analysis = new Analysis();\n        analysis.id = json.id;\n        analysis.label = json.label;\n        analysis.spectra = json.spectra;\n        return analysis;\n    }\n    /**\n     * Add a spectrum in the internal spectra variable\n     * @param variables\n     * @param options\n     */\n    pushSpectrum(variables, options = {}) {\n        this.spectra.push(standardizeData(variables, options, {\n            spectrumCallback: this.spectrumCallback,\n        }));\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    /**\n     * Retrieve a MeasurementXY based on x/y units\n     * @param selector\n     */\n    getXYSpectrum(selector = {}) {\n        const id = JSON.stringify(selector);\n        if (!this.cache.spectrum[id]) {\n            this.cache.spectrum[id] = getXYSpectrum(this.spectra, selector);\n        }\n        return this.cache.spectrum[id];\n    }\n    /**\n     * Retrieve spectra matching selector\n     * @param selector\n     */\n    getXYSpectra(selector = {}) {\n        const id = JSON.stringify(selector);\n        if (!this.cache.spectra[id]) {\n            this.cache.spectra[id] = getXYSpectra(this.spectra, selector);\n        }\n        return this.cache.spectra[id];\n    }\n    /**\n     * Retrieve a xy object\n     * @param selector.units - Units separated by vs like for example \"g vs °C\"\n     * @param selector.xUnits - if undefined takes the first variable\n     * @param selector.yUnits - if undefined takes the second variable\n     * @param selector\n     */\n    getXY(selector = {}) {\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return {\n            x: spectrum.variables.x.data,\n            y: spectrum.variables.y.data,\n        };\n    }\n    /**\n     * Return the data object for specific x/y units with possibly some\n     * normalization options\n     * @param options.selector.xUnits - // if undefined takes the first variable\n     * @param options.selector.yUnits - // if undefined takes the second variable\n     * @param options\n     */\n    getNormalizedSpectrum(options = {}) {\n        const { normalization, selector } = options;\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return getNormalizedSpectrum(spectrum, normalization);\n    }\n    /**\n     * @param options\n     */\n    getNormalizedSpectra(options = {}) {\n        const { normalization, selector } = options;\n        const spectra = this.getXYSpectra(selector);\n        if (spectra.length === 0)\n            return [];\n        const normalizedSpectra = [];\n        for (const spectrum of spectra) {\n            normalizedSpectra.push(getNormalizedSpectrum(spectrum, normalization));\n        }\n        return normalizedSpectra;\n    }\n    /**\n     * Returns the first spectrum. This method could be improved in the future\n     * @returns\n     */\n    getSpectrum() {\n        return this.spectra[0];\n    }\n    /**\n     * Returns the xLabel\n     * @param selector.xUnits - // if undefined takes the first variable\n     * @param selector.yUnits - // if undefined takes the second variable\n     * @param selector\n     */\n    getXLabel(selector) {\n        return this.getXYSpectrum(selector)?.variables.x.label;\n    }\n    /**\n     * Returns the yLabel\n     * @param selector.xUnits - // if undefined takes the first variable\n     * @param selector.yUnits - // if undefined takes the second variable\n     * @param selector\n     */\n    getYLabel(selector) {\n        return this.getXYSpectrum(selector)?.variables.y.label;\n    }\n}\n/**\n * Internal function that ensure the order of x / y array\n * @param variables\n * @param options\n * @param analysisOptions\n */\nfunction standardizeData(variables, options, analysisOptions) {\n    const { meta = {}, dataType = '', title = '', id = Math.random().toString(36).replace('0.', ''), } = options;\n    const { spectrumCallback } = analysisOptions;\n    if (spectrumCallback) {\n        spectrumCallback(variables);\n    }\n    const xVariable = variables.x;\n    const yVariable = variables.y;\n    if (!xVariable || !yVariable) {\n        throw new Error('A spectrum must contain at least x and y variables');\n    }\n    if (!isAnyArray(xVariable.data) || !isAnyArray(yVariable.data)) {\n        throw new Error('x and y variables must contain an array data');\n    }\n    const x = xVariable.data;\n    const reverse = x && x.length > 1 && x[0] > x.at(-1);\n    for (const [key, variable] of Object.entries(variables)) {\n        if (reverse)\n            variable.data = variable.data.slice().reverse();\n        variable.label = variable.label || key;\n        if (variable.label.match(/^.*[([](?<units>.*)[)\\]].*$/)) {\n            const units = variable.label.replace(/^.*[([](?<units>.*)[)\\]].*$/, '$<units>');\n            if (!variable.units || variable.units === units) {\n                variable.units = units;\n                variable.label = variable.label.replace(/[([].*[)\\]]/, '').trim();\n            }\n        }\n        variable.min = xMinValue(variable.data);\n        variable.max = xMaxValue(variable.data);\n        variable.isMonotonic = xIsMonotonic(variable.data);\n    }\n    return {\n        variables,\n        title,\n        dataType,\n        meta,\n        id,\n    };\n}\n//# sourceMappingURL=Analysis.js.map","export function appendDistinctParameter(values, key, value) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            values: [],\n            count: 0,\n        };\n    }\n    if (!values[key].values.includes(value)) {\n        values[key].values.push(value);\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=appendDistinctParameter.js.map","export function appendDistinctValue(values, key) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            count: 0,\n        };\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=appendDistinctValue.js.map","import { Analysis } from './Analysis.js';\nimport { appendDistinctParameter } from './util/appendDistinctParameter.js';\nimport { appendDistinctValue } from './util/appendDistinctValue.js';\nexport class AnalysesManager {\n    analyses;\n    constructor() {\n        this.analyses = [];\n    }\n    static fromJSON(json) {\n        const analysesManager = new AnalysesManager();\n        for (const analysis of json.analyses) {\n            analysesManager.analyses.push(Analysis.fromJSON(analysis));\n        }\n        return analysesManager;\n    }\n    addAnalysis(analysis) {\n        const index = this.getAnalysisIndex(analysis.id);\n        if (index === undefined) {\n            this.analyses.push(analysis);\n        }\n        else {\n            this.analyses[index] = analysis;\n        }\n    }\n    /**\n     *\n     * @param options\n     * @returns\n     */\n    getAnalyses(options = {}) {\n        const { ids } = options;\n        const analyses = [];\n        const processedAnalysisIds = new Set();\n        for (const analysis of this.analyses) {\n            if (!ids || ids.includes(analysis.id)) {\n                analyses.push(analysis);\n                processedAnalysisIds.add(analysis.id);\n                continue;\n            }\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id &&\n                    ids.includes(spectrum.id) &&\n                    !processedAnalysisIds.has(analysis.id)) {\n                    analyses.push(analysis.clone({ filter: { ids } }));\n                    processedAnalysisIds.add(analysis.id);\n                }\n            }\n        }\n        return analyses;\n    }\n    getSpectra() {\n        const spectra = [];\n        for (const analysis of this.analyses) {\n            spectra.push(...analysis.spectra);\n        }\n        return spectra;\n    }\n    getAnalysisBySpectrumId(id) {\n        for (const analysis of this.analyses) {\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id === id)\n                    return analysis;\n            }\n        }\n        return undefined;\n    }\n    getSpectrumById(id) {\n        for (const analysis of this.analyses) {\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id === id)\n                    return spectrum;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Get an array of objects (key + count) of all the titles\n     */\n    getDistinctTitles() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.title) {\n                appendDistinctValue(values, spectrum.title);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the units\n     */\n    getDistinctUnits() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    if (variable.units) {\n                        appendDistinctValue(values, variable.units);\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + unit + label + count) of all the units\n     */\n    getDistinctLabelUnits() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    const { label, units } = normalizeLabelUnits(variable.label, variable.units);\n                    const key = label + (units ? ` (${units})` : '');\n                    if (key) {\n                        if (!values[key]) {\n                            values[key] = { key, units, label, count: 0 };\n                        }\n                        values[key].count++;\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the labels\n     */\n    getDistinctLabels() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    appendDistinctValue(values, variable.label.replace(/\\s+[([].*$/, ''));\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the dataTypes\n     */\n    getDistinctDataTypes() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.dataType) {\n                appendDistinctValue(values, spectrum.dataType);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the meta\n     */\n    getDistinctMeta() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.meta) {\n                for (const key in spectrum.meta) {\n                    appendDistinctParameter(values, key, spectrum.meta[key]);\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    removeAllAnalyses() {\n        this.analyses.splice(0);\n    }\n    /**\n     * Remove the analysis from the AnalysesManager for the specified id\n     * @param id\n     */\n    removeAnalysis(id) {\n        const index = this.getAnalysisIndex(id);\n        if (index === undefined)\n            return undefined;\n        return this.analyses.splice(index, 1);\n    }\n    /**\n     * Returns the index of the analysis in the analyses array\n     * @param id\n     */\n    getAnalysisIndex(id) {\n        if (!id)\n            return undefined;\n        for (let i = 0; i < this.analyses.length; i++) {\n            const analysis = this.analyses[i];\n            if (analysis.id === id)\n                return i;\n        }\n        return undefined;\n    }\n    /**\n     * Checks if the ID of an analysis exists in the AnalysesManager\n     * @param id\n     */\n    includes(id) {\n        const index = this.getAnalysisIndex(id);\n        return index === undefined ? false : !Number.isNaN(index);\n    }\n}\nfunction normalizeLabelUnits(originalLabel, originalUnits) {\n    if (!originalLabel) {\n        return { units: '', label: '' };\n    }\n    if (originalLabel.search(/[([]]/) >= 0) {\n        const [units, label] = originalLabel.split(/\\s*[([]/);\n        return { units: originalUnits || units, label };\n    }\n    return { label: originalLabel, units: originalUnits };\n}\n//# sourceMappingURL=AnalysesManager.js.map","/*\n    https://tools.ietf.org/html/rfc3629\n\n    UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4\n\n    UTF8-1    = %x00-7F\n\n    UTF8-2    = %xC2-DF UTF8-tail\n\n    UTF8-3    = %xE0 %xA0-BF UTF8-tail\n                %xE1-EC 2( UTF8-tail )\n                %xED %x80-9F UTF8-tail\n                %xEE-EF 2( UTF8-tail )\n\n    UTF8-4    = %xF0 %x90-BF 2( UTF8-tail )\n                %xF1-F3 3( UTF8-tail )\n                %xF4 %x80-8F 2( UTF8-tail )\n\n    UTF8-tail = %x80-BF\n*/\n/**\n * Check if a Node.js Buffer or Uint8Array is UTF-8.\n */\nfunction isUtf8(buf) {\n    if (!buf) {\n        return false;\n    }\n    var i = 0;\n    var len = buf.length;\n    while (i < len) {\n        // UTF8-1 = %x00-7F\n        if (buf[i] <= 0x7F) {\n            i++;\n            continue;\n        }\n        // UTF8-2 = %xC2-DF UTF8-tail\n        if (buf[i] >= 0xC2 && buf[i] <= 0xDF) {\n            // if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n            if (buf[i + 1] >> 6 === 2) {\n                i += 2;\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        // UTF8-3 = %xE0 %xA0-BF UTF8-tail\n        // UTF8-3 = %xED %x80-9F UTF8-tail\n        if (((buf[i] === 0xE0 && buf[i + 1] >= 0xA0 && buf[i + 1] <= 0xBF) ||\n            (buf[i] === 0xED && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x9F)) && buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-3 = %xE1-EC 2( UTF8-tail )\n        // UTF8-3 = %xEE-EF 2( UTF8-tail )\n        if (((buf[i] >= 0xE1 && buf[i] <= 0xEC) ||\n            (buf[i] >= 0xEE && buf[i] <= 0xEF)) &&\n            buf[i + 1] >> 6 === 2 &&\n            buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n        //          %xF1-F3 3( UTF8-tail )\n        //          %xF4 %x80-8F 2( UTF8-tail )\n        if (((buf[i] === 0xF0 && buf[i + 1] >= 0x90 && buf[i + 1] <= 0xBF) ||\n            (buf[i] >= 0xF1 && buf[i] <= 0xF3 && buf[i + 1] >> 6 === 2) ||\n            (buf[i] === 0xF4 && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x8F)) &&\n            buf[i + 2] >> 6 === 2 &&\n            buf[i + 3] >> 6 === 2) {\n            i += 4;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n\nexport { isUtf8 as default };\n","import isutf8 from 'isutf8';\n/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        const { encoding = guessEncoding(blob) } = options;\n        const decoder = new TextDecoder(encoding);\n        return decoder.decode(blob);\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction guessEncoding(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return 'utf-16be';\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return 'utf-16le';\n        }\n    }\n    //@ts-expect-error an ArrayBuffer is also ok\n    if (!isutf8(blob))\n        return 'latin1';\n    return 'utf-8';\n}\n//# sourceMappingURL=index.js.map","export function parseString(value) {\n    if (value.length === 4 || value.length === 5) {\n        const lowercase = value.toLowerCase();\n        if (lowercase === 'true')\n            return true;\n        if (lowercase === 'false')\n            return false;\n    }\n    const number = Number(value);\n    if (number === 0 && !value.includes('0')) {\n        return value;\n    }\n    if (!Number.isNaN(number))\n        return number;\n    return value;\n}\n//# sourceMappingURL=parseString.js.map","export const gyromagneticRatioMHzT = {\n    '1H': 42.577478615342585,\n    '2H': 6.5359028540009305,\n    '3H': 45.41483815473964,\n    '3He': -32.43604456417949,\n    '6Li': 6.266099405837534,\n    '7Li': 16.548177299618295,\n    '9Be': -5.983379963834242,\n    '10B': 4.57473388220653,\n    '11B': 13.66160796005943,\n    '13C': 10.707746367473973,\n    '14N': 3.076272817251739,\n    '15N': -4.3152552187859134,\n    '17O': -5.7734832203316975,\n    '19F': 40.06924371705693,\n    '21Ne': -3.362579959801532,\n    '22Na': 4.436349259342206,\n    '23Na': 11.268733657034753,\n    '25Mg': -2.607933066661972,\n    '26Al': 4.273225764239245,\n    '27Al': 11.100630067688776,\n    '29Si': -8.461871234008282,\n    '31P': 17.241162495263175,\n    '33S': 3.2688220630834754,\n    '35Cl': 4.175656570906633,\n    '36Cl': 4.897135020041924,\n    '37Cl': 3.4759025124743057,\n    '39Ar': -3.462835209795831,\n    '39K': 1.9893443809332112,\n    '40K': -2.4734743333970806,\n    '41K': 1.091921234883595,\n    '41Ca': -3.4724832349401047,\n    '43Ca': -2.8689916395725414,\n    '45Sc': 10.353659488911559,\n    '47Hi': -2.403068251036403,\n    '49Hi': -2.403730327705445,\n    '50V': 4.248579379465121,\n    '51V': 11.208261084083814,\n    '53Cr': -2.4103147963328766,\n    '53Mn': 10.961289063460638,\n    '55Mn': 10.570707386401027,\n    '57Fe': 1.3818237005731187,\n    '59Co': 10.050933643526891,\n    '60Co': 5.7916463354780205,\n    '61Ni': -3.809518009468367,\n    '63Ni': 7.561612483277437,\n    '63Cu': 11.311420179117773,\n    '65Cu': 12.116874196993763,\n    '67Zn': 2.6674502745948656,\n    '69Ga': 10.23978520568125,\n    '71Ga': 13.010902748192017,\n    '73Ge': -1.4876591727852992,\n    '75As': 7.3090505609529135,\n    '77Se': 8.134221686648205,\n    '79Se': -2.21708568778123,\n    '79Br': 10.695006473323717,\n    '81Br': 11.528409999706447,\n    '81Kr': -1.9753405882294455,\n    '83Kr': -1.6443288722876133,\n    '85Kr': -1.703226109304539,\n    '85Rb': 4.125530397832004,\n    '87Rb': 13.981309683545954,\n    '87Sr': -1.851714225407608,\n    '89Y': -2.0931336103407774,\n    '91Zr': -3.970456361178983,\n    '91Nb': 11.032433266932335,\n    '92Nb': 5.58627189504799,\n    '93Nb': 10.439564904668199,\n    '95Mo': -2.784380854729418,\n    '97Mo': -2.842922370728985,\n    '97Hc': 9.858553909649345,\n    '99Hc': 9.618018745530753,\n    '99Ru': -1.9544329039438861,\n    '101Ru': -2.1892087754004836,\n    '103Rh': -1.3459975123963002,\n    '105Pd': -1.9574819412355304,\n    '107Ag': -1.730633566737207,\n    '109Ag': 1.9896492846623755,\n    '111Cd': -9.05564075618306,\n    '113Cd': -9.471834346492482,\n    '113In': 9.351736155393834,\n    '115In': 9.371724288750167,\n    '115Sn': -13.985934056771613,\n    '117Sn': -15.237563864991529,\n    '119Sn': -15.944940516652968,\n    '121Sn': 3.541456814244654,\n    '121Sb': 10.238667225340981,\n    '123Sb': 5.544238738098897,\n    '125Sb': 5.727834340731468,\n    '123He': -11.217408195958745,\n    '125He': -13.522480388441707,\n    '127I': 8.563831041040862,\n    '129I': 5.6984329097048985,\n    '129Xe': -11.860160502223787,\n    '131Xe': 3.5157686750625525,\n    '133Cs': 5.614148807428737,\n    '134Cs': 5.69655448494487,\n    '135Cs': 5.941920316280481,\n    '137Cs': 6.179527436650749,\n    '133Ba': 11.767759427100511,\n    '135Ba': 4.258996923544905,\n    '137Ba': 4.7641207681939495,\n    '137La': 5.871574670194692,\n    '138La': 5.653524946166542,\n    '139La': 6.052556812291568,\n    '141Pr': 13.00719308615385,\n    '143Nd': -2.319446225429283,\n    '145Nd': -1.4286917595132482,\n    '145Pm': 11.586341708247685,\n    '147Pm': 5.618940151744178,\n    '147Sm': -1.7619079778143567,\n    '149Sm': -1.454172999736274,\n    '151Sm': -1.099177943637708,\n    '150Eu': 4.119249381011216,\n    '151Eu': 10.560340659609437,\n    '152Eu': -4.917588978540037,\n    '153Eu': 4.66319763384053,\n    '154Eu': -5.081728819406879,\n    '155Eu': 4.622340534132499,\n    '155Gd': -1.3166759371083225,\n    '157Gd': -1.7267714528344573,\n    '157Hb': 10.315909503395963,\n    '158Hb': 4.4541353102101295,\n    '159Hb': 10.209193198188421,\n    '161Hy': -1.4604888626975372,\n    '163Hy': 2.04590402269321,\n    '163Ho': 9.190669550527298,\n    '165Ho': 9.059996523742551,\n    '166Ho': 3.941969641339908,\n    '167Er': -1.2246240493510665,\n    '169Hm': -3.5216380718489675,\n    '171Hm': -3.506392885390747,\n    '171Yb': 7.505205293382021,\n    '173Yb': -2.067247283734719,\n    '173Lu': 4.950329831362216,\n    '174Lu': 15.107979780096652,\n    '175Lu': 4.847315928580239,\n    '176Lu': 3.4410563719983727,\n    '177Hf': 1.7227060697789323,\n    '179Hf': -1.0822388475730185,\n    '179Ha': 4.978642320498912,\n    '180Ha': 4.077240422770786,\n    '181Ha': 5.15069513909883,\n    '183W': 1.7896324383305209,\n    '185Re': 9.683742438261751,\n    '187Re': 9.784360668886006,\n    '187Os': 0.9820949116385737,\n    '189Os': 3.3417448716419638,\n    '191Ir': 0.7632756686749131,\n    '193Ir': 0.8283217975633214,\n    '193Pt': 9.162357061390605,\n    '195Pt': 9.258401736077394,\n    '197Au': 0.7378670245778789,\n    '199Hg': 7.68204945629738,\n    '201Hg': -2.8356046812290385,\n    '203Hl': 24.63622131648455,\n    '204Hl': 0.3430166953099643,\n    '205Hl': 24.88014429981608,\n    '205Pb': 2.162987054692344,\n    '207Pb': 9.00380712222511,\n    '207Bi': 6.899124436187426,\n    '208Bi': 6.970099248698476,\n    '209Bi': 6.931478109670983,\n    '209Po': 10.366726791590036,\n    '227Ac': 6.1997091596763925,\n    '229Hh': 1.402557154156299,\n    '231Pa': 10.11264035061969,\n    '233U': -1.7989320020700355,\n    '235U': -0.827595836303406,\n    '237Np': 9.634957841595446,\n    '239Pu': 3.079527664560569,\n    '241Pu': -2.067247283734719,\n    '241Am': 4.878459666630606,\n    '243Am': 4.634536683299075,\n    '243Cm': 1.2196149166576515,\n    '245Cm': 1.0889418898729026,\n    '247Cm': 0.6098074583288254,\n};\n//# sourceMappingURL=gyromagneticRatioMHzT.js.map","import { gyromagneticRatio } from '.';\n/**\n * Attempts to resolve a nucleus string to a canonical gyromagnetic nucleus symbol.\n * @param nucleus - The name or symbol of the nucleus (e.g., '1H', 'proton').\n * @returns The canonical nucleus symbol if found, otherwise null.\n */\nexport function getGyromagneticNucleus(nucleus) {\n    nucleus = nucleus.toLowerCase();\n    if (nucleus === 'proton')\n        return '1H';\n    for (const key in gyromagneticRatio) {\n        if (key.toLowerCase() === nucleus)\n            return key;\n    }\n    if (nucleus in gyromagneticRatio) {\n        return nucleus;\n    }\n    // we try to use only the numbers\n    const nucleusNumber = nucleus.replaceAll(/[^0-9]/g, '');\n    if (!nucleusNumber)\n        return null;\n    const filteredNuclei = [];\n    for (const key in gyromagneticRatio) {\n        if (key.replaceAll(/[^0-9]/g, '') === nucleusNumber) {\n            filteredNuclei.push(key);\n        }\n    }\n    if (filteredNuclei.length === 1) {\n        return filteredNuclei[0];\n    }\n    return null;\n}\n//# sourceMappingURL=getGyromagneticNucleus.js.map","import { getGyromagneticNucleus, gyromagneticRatio } from '.';\n/**\n * Returns the gyromagnetic ratio for a given nucleus string.\n * @param nucleus - The name or symbol of the nucleus (e.g., '1H', 'proton').\n * @returns The gyromagnetic ratio for the nucleus, or null if not found.\n */\nexport function getGyromagneticRatio(nucleus) {\n    const realNucleus = getGyromagneticNucleus(nucleus);\n    if (realNucleus) {\n        return gyromagneticRatio[realNucleus];\n    }\n    return null;\n}\n//# sourceMappingURL=getGyromagneticRatio.js.map","import { gyromagneticRatioMHzT } from './gyromagneticRatioMHzT';\nexport const gyromagneticRatio = Object.fromEntries(Object.entries(gyromagneticRatioMHzT).map(([key, value]) => [\n    key,\n    value * 2 * Math.PI * 1e6,\n]));\nexport * from './gyromagneticRatioMHzT';\nexport * from './getGyromagneticNucleus';\nexport * from './getGyromagneticRatio';\n//# sourceMappingURL=index.js.map","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport { median as default };\n","import{ensureString as fe}from\"ensure-string\";var $=/\\s*\\$\\$.*/;function M(e){return e.replace($,\"\")}function Te(e,m={}){e=fe(e);let{flatten:n=!1}=m,s=e.split(/\\r?\\n/),f=[],i=[],t=[],l={title:\"\",jcamp:\"\",children:[]},r=0,p=e.includes(\"## \");for(let c=0;c<s.length;c++){let b=s[c],h=p?b.replaceAll(\" \",\"\"):b;if(h.startsWith(\"##NTUPLES\")&&r++,h.startsWith(\"##TITLE\")){let o=[h.slice(8).trim()];for(let a=c+1;a<s.length&&!s[a].startsWith(\"##\");a++)o.push(s[a].trim());i.push({title:o.join(`\n`),jcamp:`${b}\n`,children:[]}),l=i.at(-1),f.push(l)}else if(h.startsWith(\"##END\")&&r===0&&l){l.jcamp+=`${b}\n`;let o=i.pop();if(!o)throw new Error(\"Not finished\");i.length>0?(l=i.at(-1),l.children?.push(o)):(l=void 0,t.push(o))}else if(l?.jcamp){l.jcamp+=`${b}\n`;let o=h.match(/^##(.*?)=(.+)/);if(o){let a=o[1].replaceAll(/[ _-]/g,\"\").toUpperCase();a===\"DATATYPE\"?l.dataType=o[2].trim():a===\"DATACLASS\"?l.dataClass=o[2].trim():a===\"JCAMPDX\"?l.jcampDX=M(o[2].trim()):a===\"JCAMPCS\"&&(l.jcampCS=M(o[2].trim()))}}h.startsWith(\"##END\")&&r>0&&r--}if(n){for(let c of f)c.children=void 0;return f}else return t}import{parseString as de}from\"dynamic-typing\";import{ensureString as be}from\"ensure-string\";var ee=[\"TIC\",\".RIC\",\"SCANNUMBER\"];function te(e){let m=e.spectra,n=m.length,s={times:new Array(n),series:{ms:{dimension:2,data:new Array(n)}}},f=[];for(let i of ee){let t=U(i);m[0][t]&&(f.push(t),s.series[t]={dimension:1,data:new Array(n)})}for(let i=0;i<n;i++){let t=m[i];s.times[i]=t.pageValue;for(let l of f)s.series[l].data[i]=Number(t[l]);t.data&&(s.series.ms.data[i]=[t.data.x,t.data.y])}e.chromatogram=s}function ne(e){return ee.includes(e)}function U(e){return e.toLowerCase().replaceAll(/[^a-z0-9]/g,\"\")}function E(e){return e.map(Number)}function k(e,m,n){let{logger:s}=n;s&&(e.xFactor||s.info(\"The xFactor is not defined, it will be set to 1\"),e.yFactor||s.info(\"The yFactor is not defined, it will be set to 1\"));let f=e.yFactor??1,i=e.xFactor??1,t=e.deltaX??1,l=Math.abs(t*.1),r=.01;e.isXYdata=!0;let p={x:[],y:[]};e.data=p;let c=e.firstX||0,b=e.firstY||0,h=!1,o,a=0;for(;a<m.length;a++)if(o=m.codePointAt(a),o===13||o===10)h=!0;else if(h)break;let u=0,d=!0,C=!1,x=!1,j=0,N=!1,S=!1,g=0,X=0,O=!1,A=!1,Y=!1,R=0;for(;a<=m.length;a++)if(a===m.length?o=13:o=m.codePointAt(a),S)(o===13||o===10)&&(d=!0,S=!1,u++);else if(o<=57&&o>=48)A=!0,R>0?g+=(o-48)/10**R++:(g*=10,g+=o-48);else if(o===44||o===46)A=!0,R++;else{if(A){if(O&&(g=g*-1,O=!1),d)g*=i,s&&(x?Math.abs(c-t-g)>l&&(Math.abs(c-g)<l?s.trace(`Data line ${u}: After a DIFFERENCE the next line should repeat the last value and this does not seem to be the case: Current value: ${g} - Expected: ${c}.`):Math.abs(c-t-g)>10*l?s.trace(`Data line ${u}: The difference between the first value ${g} and the expected first x value ${c} based on increment after a DIFFERENCE is too high`):s.trace(`Data line ${u}: The difference between the first value ${g} and the expected first x value ${c} based on increment after a DIFFERENCE is too high`)):Math.abs(c-g)>l&&s.trace(`Data line ${u}: The difference between the first value ${g} and the first x value ${c} is too high`)),d=!1,x&&(Y=!0);else if(Y)Y=!1,s&&Math.abs(b-g)>r&&s.trace(`Data line ${u}: After a duplicate the next line should repeat the same value ${g} !== ${b}`),b=g;else{C?(j=O?0-g:g,x=!0,C=!1):N||(X=O?0-g:g);let y=N?g-1:1;for(let F=0;F<y;F++)x?b+=j:b=X,p.x.push(c),p.y.push(b*f),c+=t}O=!1,g=0,R=0,A=!1,N=!1}if(o<74&&o>63)A=!0,x=!1,g=o-64;else if(o>96&&o<106)A=!0,x=!1,g=o-96,O=!0;else if(o===115)A=!0,N=!0,g=9;else if(o>82&&o<91)A=!0,N=!0,g=o-82;else if(o>73&&o<83)A=!0,C=!0,g=o-73;else if(o>105&&o<115)A=!0,C=!0,g=o-105,O=!0;else if(o===36&&m.codePointAt(a+1)===36)A=!0,S=!0;else if(o===37)A=!0,C=!0,g=0,O=!1;else if(o===45){let y=m.codePointAt(a+1);(y!==void 0&&y>=48&&y<=57||y===44||y===46)&&(A=!0,d||(x=!1),O=!0)}else(o===13||o===10)&&(d=!0,S=!1,u++)}s&&x&&s.warn(\"The last value is a difference, it should be repeated on the next line\")}var re=/[,\\t ]+/;function P(e,m,n){if(e.isPeaktable=!0,!e.variables||Object.keys(e.variables).length===2?me(e,m,n):ce(e,m,n),e.variables)for(let s in e.variables)e.variables[s].data=e.data?.[s]}function me(e,m,n){let{logger:s}=n,f={x:[],y:[]};e.data=f;let i=m.split(/,? *,?[;\\r\\n]+ */);for(let t=1;t<i.length;t++){let l=i[t].trim().replace($,\"\").split(re);if(l.length%2===0)for(let r=0;r<l.length;r=r+2)e.xFactor!==void 0&&e.yFactor!==void 0&&(f.x.push(Number(l[r])*e.xFactor),f.y.push(Number(l[r+1])*e.yFactor));else s?.warn(`Format error: ${l.toString()}`)}}function ce(e,m,n){let{logger:s}=n,f={},i=Object.keys(e.variables),t=i.length;for(let r of i)f[r]=[];e.data=f;let l=m.split(/,? *,?[;\\r\\n]+ */);for(let r=1;r<l.length;r++){let p=l[r].trim().replace($,\"\").split(re);if(p.length%t===0)for(let c=0;c<p.length;c++)f[i[c%t]].push(Number(p[c]));else s?.warn(`Wrong number of columns: ${p.toString()}`)}}function V(e,m){e.isXYAdata=!0;let n={};e.data=n;let s=m.split(/\\r?\\n/),f=s[0].replace(/^.*?([A-Z]+).*$/,\"$1\").split(\"\").map(i=>i.toLowerCase());for(let i=1;i<s.length;i++){let t=s[i].replace(/^\\((.*)\\)$/,\"$1\").split(/ *, */);for(let l=0;l<f.length;l++){let r=t[l];switch(f[l]){case\"x\":case\"y\":case\"w\":r=Number.parseFloat(r);break;case\"a\":r=r.replace(/^<(.*)>$/,\"$1\");break;case\"m\":break;default:continue}n[f[l]]||(n[f[l]]=[]),n[f[l]].push(r)}}}import{parseString as ae}from\"dynamic-typing\";import{getGyromagneticRatio as se}from\"gyromagnetic-ratio\";import ie from\"ml-array-median\";function oe(e){return Array.isArray(e)?e[0]:e}function B(e){let{spectra:m}=e,n=m[0].data.y[0],s=n,f=m.length,i=m[0].data.x.length||0,t=new Array(f);for(let o=0;o<f;o++){t[o]=m[o].data.y;for(let a=0;a<i;a++){let u=t[o][a];u<n&&(n=u),u>s&&(s=u)}}let l=m[0].data.x[0],r=m[0].data.x.at(-1),{firstY:p,lastY:c}=ue(e);if(l>r)for(let o of t)o.reverse();p>c&&t.reverse();let b=[];for(let o of t){let a=Float64Array.from(o);for(let u=0;u<a.length;u++)a[u]<0&&(a[u]=-a[u]);b.push(ie(a))}let h=ie(b);return{z:t,minX:Math.min(l,r),maxX:Math.max(l,r),minY:Math.min(p,c),maxY:Math.max(p,c),minZ:n,maxZ:s,noise:h}}function ue(e){let{spectra:m,ntuples:n,info:s}=e;if(n)for(let f of n){let{symbol:i,nucleus:t,units:l}=f;if(i.match(/[F|T]1/)&&l?.toUpperCase().match(\"HZ\")){let r=oe(s[\".OBSERVEFREQUENCY\"]),{nucleus:p}=n.find(u=>u.symbol.match(/[F|T]2/));if([r,p,t].some(u=>!u))break;let c=se(p),b=se(t),{first:h,last:o}=f,a=b!==null&&c!==null?r*b/c:r;return{firstY:h/a,lastY:o/a}}}return{firstY:m[0].pageValue,lastY:m.at(-1).pageValue}}function Z(e,m){let n=e.noise,s=e.z,f,i,t,l,r,p,c,b,h=s.length,o=s[0].length,a,u,d,C,x=e.minX,N=(e.maxX-x)/(o-1),S=e.minY,X=(e.maxY-S)/(h-1),O=e.minZ,A=e.maxZ,Y=m.nbContourLevels*2,R=new Array(Y),y;for(let F=0;F<Y;F++){let I={};R[F]=I;let le=F%2,K=(A-m.noiseMultiplier*n)*Math.exp((F>>1)-m.nbContourLevels);le===0?y=K+m.noiseMultiplier*n:y=0-K-m.noiseMultiplier*n;let D=[];if(I.zValue=y,I.lines=D,!(y<=O||y>=A))for(let T=0;T<h-1;T++){let Q=s[T],_=s[T+1];for(let v=0;v<o-1;v++)f=Q[v],i=Q[v+1],t=_[v],l=_[v+1],r=f>y,p=i>y,c=t>y,b=l>y,r!==p&&r!==c&&(a=v+(y-f)/(i-f),u=T,d=v,C=T+(y-f)/(t-f),D.push(a*N+x,u*X+S,d*N+x,C*X+S)),b!==p&&b!==c&&(a=v+1,u=T+1-(y-l)/(i-l),d=v+1-(y-l)/(t-l),C=T+1,D.push(a*N+x,u*X+S,d*N+x,C*X+S)),p!==c&&(a=(v+1-(y-i)/(t-i))*N+x,u=(T+(y-i)/(t-i))*X+S,p!==r&&(d=v+1-(y-i)/(f-i),C=T,D.push(a,u,d*N+x,C*X+S)),c!==r&&(d=v,C=T+1-(y-t)/(f-t),D.push(a,u,d*N+x,C*X+S)),p!==b&&(d=v+1,C=T+(y-i)/(l-i),D.push(a,u,d*N+x,C*X+S)),c!==b&&(d=v+(y-t)/(l-t),C=T+1,D.push(a,u,d*N+x,C*X+S)))}}return{minX:e.minX,maxX:e.maxX,minY:e.minY,maxY:e.maxY,segments:R}}function G(e,m){let n=B(e);m.noContour||(e.contourLines=Z(n,m),delete n.z),e.minMax=n}import{getGyromagneticRatio as W}from\"gyromagnetic-ratio\";function H(e,m){for(let n of e){let s=0,f=0;for(let i of n.spectra){if(n.ntuples?.symbol?(!s&&i.observeFrequency&&(s=i.observeFrequency),!f&&i.shiftOffsetVal&&(f=i.shiftOffsetVal)):(s=i.observeFrequency,f=i.shiftOffsetVal),s&&i.xUnits?.toUpperCase().includes(\"HZ\")&&(i.xUnits=\"PPM\",i.xFactor=i.xFactor!==void 0?i.xFactor/s:void 0,i.firstX=i.firstX!==void 0?i.firstX/s:void 0,i.lastX=i.lastX!==void 0?i.lastX/s:void 0,i.deltaX=i.deltaX!==void 0?i.deltaX/s:void 0,i.data))for(let t=0;t<i.data.x.length;t++)i.data.x[t]/=s;if(f&&i.xUnits.toLowerCase().includes(\"ppm\")&&i.firstX!==void 0&&i.lastX!==void 0){let t=i.firstX-f;if(i.firstX=i.firstX-t,i.lastX=i.lastX-t,i.data)for(let l=0;l<i.data.x.length;l++)i.data.x[l]-=t}if(n.ntuples?.nucleus&&n.ntuples.symbol)for(let t=0;t<n.ntuples.nucleus.length;t++){let l=n.ntuples.symbol[t],r=n.ntuples.nucleus[t];if(l.match(/^[F|T]/)&&!r){if(l.match(/[F|T]1/))if(n.tmp.$NUC2&&typeof n.tmp.$NUC2==\"string\")n.ntuples.nucleus[t]=n.tmp.$NUC2;else{let p=n.ntuples.symbol.indexOf(l.replace(/^([F|T]).*/,\"$12\"));p&&n.ntuples.nucleus[p]&&(n.ntuples.nucleus[t]=n.ntuples.nucleus[p])}l.match(/[F|T]2/)&&typeof n.tmp.$NUC1==\"string\"&&(n.ntuples.nucleus[t]=n.tmp.$NUC1)}l.match(/[F|T]2/)&&(n.yType=n.ntuples.nucleus[0],n.xType&&!W(n.xType)&&(n.xType=n.ntuples.nucleus[1]))}if(s&&n.ntuples?.symbol&&n.ntuples.nucleus){let t=\"\",l=n.ntuples.symbol.indexOf(i.pageSymbol);n.ntuples.units?.[l]&&(t=n.ntuples.units[l]);let{nucleus:r}=n.ntuples;if(!t.toLowerCase().match(/(ppm|seconds)/)&&r.length>1){if(l!==0){let h=\"Not sure about this ntuples format\";if(m){m.warn(h);continue}else throw new Error(h)}let{nucleus:p}=n.ntuples,c=W(p[0]),b=W(p[1]);if(!c||!b){let h=`Problem with determination of gyromagnetic ratio for ${p.join(\"-\")}`;if(m)m.error(h);else throw new Error(h)}else{let h=c/b*s;i.pageValue/=h}}}}}}function J(e){let m=e.spectra[0].data;e.chromatogram={times:m.x.slice(),series:{intensity:{dimension:1,data:m.y.slice()}}}}function q(e,m,n){H(e,n.logger),pe(e,n);for(let s of e){if(Object.keys(s.ntuples).length>0){let f=[],i=Object.keys(s.ntuples);for(let t of i){let l=s.ntuples[t];if(l)for(let r=0;r<l.length;r++)f[r]||(f[r]={}),f[r][t]=l[r]}s.ntuples=f}s.twoD&&n.wantXY&&(G(s,n),n.logger?.trace({profiling:!0},\"Finished countour plot calculation\"),n.keepSpectra||delete s.spectra),n.chromatogram&&(s.spectra.length>1?te(s):J(s),n.logger?.trace({profiling:!0},\"Finished chromatogram calculation\")),delete s.tmp}}function pe(e,m){for(let n of e)for(let s in n.meta){let f=n.meta[s];if(typeof f==\"string\"){if(f.startsWith(\"{\")){if(!f.includes(\":\")&&f.endsWith(\"}\")){let i=f.slice(1,-1).split(/[,; ]+/).filter(Boolean);for(let t=0;t<i.length;t++)n.meta[s+String(t)]=m.dynamicTyping?ae(i[t]):i[t]}}else if(f.startsWith(\"(\")){let i=f.split(/\\r?\\n/),t=/^\\((?<from>\\d+)\\.\\.(?<to>\\d+)\\).*$/;if(t.test(i[0])){let[l,r]=i[0].match(t)?.slice(1).map(Number)??[],p=i.slice(1).join(\" \").split(/[,; ]+/).filter(Boolean);for(let c=l;c<=r;c++)m.dynamicTyping&&typeof p[c-l]==\"string\"?n.meta[s+String(c)]=ae(p[c-l]):n.meta[s+String(c)]=p[c-l]}}}}}function z(e,m,n){let s=-1,f=-1,i=\"\",t=\"\";if(n.indexOf(\"++\")>0)i=n.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/,\"$1\"),t=n.replace(/.*\\.\\.([a-zA-Z0-9]+).*/,\"$1\");else{n=n.replaceAll(/[^a-zA-Z%]/g,\"\"),i=n.charAt(0),t=n.charAt(1),m.variables={};for(let l of n){let r=l.toLowerCase(),p=e.ntuples.symbol?.indexOf(l)||0;if(p===-1)throw new Error(`Symbol undefined: ${l}`);m.variables[r]={};for(let c in e.ntuples)e.ntuples[c]?.[p]&&(m.variables[r][c.replace(/^var/,\"\")]=e.ntuples[c]?.[p])}}s=e.ntuples.symbol?.indexOf(i)??-1,f=e.ntuples.symbol?.indexOf(t)??-1,s===-1&&(s=0),f===-1&&(f=0),e.ntuples.first&&(e.ntuples.first.length>s&&(m.firstX=e.ntuples.first[s]),e.ntuples.first.length>f&&(m.firstY=e.ntuples.first[f])),e.ntuples.last&&(e.ntuples.last.length>s&&(m.lastX=e.ntuples.last[s]),e.ntuples.last.length>f&&(m.lastY=e.ntuples.last[f])),e.ntuples.vardim&&e.ntuples.vardim.length>s&&(m.nbPoints=e.ntuples.vardim[s]),e.ntuples.factor&&(e.ntuples.factor.length>s&&(m.xFactor=e.ntuples.factor[s]),e.ntuples.factor.length>f&&(m.yFactor=e.ntuples.factor[f])),e.ntuples.units&&(e.ntuples.units.length>s&&(e.ntuples.varname?.[s]?m.xUnits=`${e.ntuples.varname[s]} [${e.ntuples.units[s]}]`:m.xUnits=e.ntuples.units[s]),e.ntuples.units.length>f&&(e.ntuples.varname?.[f]?m.yUnits=`${e.ntuples.varname[f]} [${e.ntuples.units[f]}]`:m.yUnits=e.ntuples.units[f]))}function w(e){e.xFactor||(e.xFactor=1),e.yFactor||(e.yFactor=1)}var L=/[ \\t]*,[ \\t]*/,ge={removeComments:!1,keepRecordsRegExp:/^$/,canonicDataLabels:!0,canonicMetadataLabels:!1,dynamicTyping:!0,withoutXY:!1,noTrimRegExp:/^$/,chromatogram:!1,keepSpectra:!1,noContour:!1,nbContourLevels:7,noiseMultiplier:5};function mt(e,m={}){e=be(e);let n={...ge,...m};n.logger?.debug(\"Starting jcamp conversion\"),n.wantXY=!n.withoutXY,n.start=Date.now();let s=[],f={entries:[],flatten:[]},i={children:[],spectra:[],ntuples:{},info:{},meta:{},tmp:{}},t=i,l=[],r={data:{}};n.logger?.trace({profiling:!0},\"Before split to LDRS\");let p=e.replaceAll(/[\\r\\n]+##/g,`\n##`).split(`\n##`);n.logger?.trace({profiling:!0},\"Split to LDRS\"),p[0]&&(p[0]=p[0].replace(/^[\\r\\n ]*##/,\"\"));for(let c of p){let b=c.indexOf(\"=\"),h=b>0?c.slice(0,Math.max(0,b)):c,o=b>0?h.match(n.noTrimRegExp)?c.slice(Math.max(0,b+1)):c.slice(Math.max(0,b+1)).trim():\"\",a=h.replaceAll(/[_ -]/g,\"\").toUpperCase();if(a===\"DATATABLE\"){let u=o.indexOf(`\n`);if(u===-1&&(u=o.indexOf(\"\\r\")),u>0){let d=o.slice(0,Math.max(0,u)).split(/[ ,;\\t]+/);z(t,r,d[0]),r.datatable=d[0],d[1]?.includes(\"PEAKS\")?a=\"PEAKTABLE\":d[1]&&(d[1].indexOf(\"XYDATA\")||d[0].indexOf(\"++\")>0)&&(a=\"XYDATA\",r.nbPoints&&r.lastX!==void 0&&r.firstX!==void 0&&(r.deltaX=(r.lastX-r.firstX)/(r.nbPoints-1)))}}if(a===\"XYDATA\"){n.wantXY&&(w(r),o.match(/.*\\+\\+.*/)?(r.nbPoints&&r.lastX!==void 0&&r.firstX!==void 0&&(r.deltaX=(r.lastX-r.firstX)/(r.nbPoints-1)),k(r,o,n)):P(r,o,n),t?.spectra.push(r),r={data:{}});continue}else if(a===\"PEAKTABLE\"){n.wantXY&&(w(r),P(r,o,n),t?.spectra.push(r),r={data:{}});continue}if(a===\"PEAKASSIGNMENTS\"){n.wantXY&&(o.match(/.*[^A-Z]*.*/)&&V(r,o),t?.spectra.push(r),r={data:{}});continue}if(n.removeComments&&(o=o.split(/\\r?\\n/).map(u=>u.replace(/ *\\$\\$.*$/,\"\")).join(`\n`)),a===\"TITLE\"){let u=t;u.children||(u.children=[]),t={spectra:[],ntuples:{},info:{},meta:{},tmp:{}},u.children.push(t),l.push(u),s.push(t),t.title=o}else a===\"DATATYPE\"?(t.dataType=o,o.match(/^nd|\\snd\\s/i)&&(t.twoD=!0)):a===\"NTUPLES\"?o.match(/^nd|\\snd\\s/i)&&(t.twoD=!0):a===\"DATACLASS\"?t.dataClass=o:a===\"JCAMPDX\"?t.jcampDX=M(o):a===\"JCAMPCS\"?t.jcampCS=M(o):a===\"XUNITS\"?r.xUnits=o:a===\"YUNITS\"?r.yUnits=o:a===\"FIRSTX\"?r.firstX=Number(o):a===\"LASTX\"?r.lastX=Number(o):a===\"FIRSTY\"?r.firstY=Number(o):a===\"LASTY\"?r.lastY=Number(o):a===\"NPOINTS\"?r.nbPoints=Number(o):a===\"XFACTOR\"?r.xFactor=Number(o):a===\"YFACTOR\"?r.yFactor=Number(o):a===\"MAXX\"?r.maxX=Number(o):a===\"MINX\"?r.minX=Number(o):a===\"MAXY\"?r.maxY=Number(o):a===\"MINY\"?r.minY=Number(o):a===\"DELTAX\"?r.deltaX=Number(o):a===\".OBSERVEFREQUENCY\"||a===\"$SFO1\"?r.observeFrequency||(r.observeFrequency=Number(o)):a===\".OBSERVENUCLEUS\"?r.xType||(t.xType=o.replaceAll(/[^a-zA-Z0-9]/g,\"\")):a===\"$OFFSET\"?(t.shiftOffsetNum=0,r.shiftOffsetVal||(r.shiftOffsetVal=Number(o))):a===\"$REFERENCEPOINT\"||(a===\"VARNAME\"?t.ntuples.varname=o.split(L):a===\"SYMBOL\"?t.ntuples.symbol=o.split(L):a===\"VARTYPE\"?t.ntuples.vartype=o.split(L):a===\"VARFORM\"?t.ntuples.varform=o.split(L):a===\"VARDIM\"?t.ntuples.vardim=E(o.split(L)):a===\"UNITS\"?t.ntuples.units=o.split(L):a===\"FACTOR\"?t.ntuples.factor=E(o.split(L)):a===\"FIRST\"?t.ntuples.first=E(o.split(L)):a===\"LAST\"?t.ntuples.last=E(o.split(L)):a===\"MIN\"?t.ntuples.min=E(o.split(L)):a===\"MAX\"?t.ntuples.max=E(o.split(L)):a===\".NUCLEUS\"?t.ntuples&&(t.ntuples.nucleus=o.split(L).map(u=>u.replaceAll(/[^a-zA-Z0-9]/g,\"\"))):a===\"PAGE\"?(r.page=o.trim(),r.pageValue=Number(o.replace(/^.*=/,\"\")),r.pageSymbol=r.page.replace(/[=].*/,\"\")):a===\"RETENTIONTIME\"?r.pageValue=Number(o):ne(a)?r[U(a)]=o:a===\"SAMPLEDESCRIPTION\"?r.sampleDescription=o:a.startsWith(\"$NUC\")?!t.tmp[a]&&!o.includes(\"off\")&&(t.tmp[a]=o.replaceAll(/[<>]/g,\"\")):a===\"END\"&&(t=l.pop()));if(t?.info&&t.meta&&a.match(n.keepRecordsRegExp)){let u,d;h.startsWith(\"$\")?(d=n.canonicMetadataLabels?a.slice(1):h.slice(1),u=t.meta):(d=n.canonicDataLabels?a:h,u=t.info),n.dynamicTyping&&(o=de(o)),u[d]?(Array.isArray(u[d])||(u[d]=[u[d]]),u[d].push(o)):u[d]=o}}if(n.logger?.trace({profiling:!0},\"Finished parsing\"),q(s,f,n),n.logger?.trace({profiling:!0},\"Total time\"),f.entries=i.children||[],f.flatten=s,n.logger){n.logger.debug(\"Finished jcamp conversion\");for(let c of f.flatten)n.logger.debug(`${c.dataType} - ${c.title}`)}return f}function pt(e,m){let{logger:n,OCL:s}=m;if(!e.info.ATOMLIST||!e.info.BONDLIST){n?.warn(\"No ATOMLIST or BONDLIST in the JCAMP-CS entry\");return}Ae(e,n);let f=ye(e.info.ATOMLIST),i=xe(e.info.BONDLIST),t=Ce(e.info.CHARGE,n),l=he(s,f,i,t,n);return{molecule:l,molfile:l.toMolfile()}}function he(e,m,n,s,f){let i={S:e.Molecule.cBondTypeSingle,D:e.Molecule.cBondTypeDouble,T:e.Molecule.cBondTypeTriple,Q:e.Molecule.cBondTypeQuadruple},t={},l=new e.Molecule(m.length,n.length);for(let r of m){let p=e.Molecule.getAtomicNoFromLabel(r.element);p||(f?.error(`Atomic number of ${r.element} could not be determined`),p=e.Molecule.getAtomicNoFromLabel(\"X\")),t[r.atomNumber]=l.addAtom(p),l.setAtomMapNo(t[r.atomNumber],r.atomNumber,!1)}for(let r of n){if(t[r.atomNumber1]===void 0){f?.error(`A bond goes to atomNumber ${r.atomNumber1} that does not exists`);continue}if(t[r.atomNumber2]===void 0){f?.error(`A bond goes to atomNumber ${r.atomNumber2} that does not exists`);continue}let p=l.addBond(t[r.atomNumber1],t[r.atomNumber2]);l.setBondType(p,i[r.bondType])}for(let r of s){if(t[r.atomNumber]===void 0){f?.error(`A charge goes to atomNumber ${r.atomNumber} that does not exists`);continue}l.setAtomCharge(t[r.atomNumber],r.value)}return l}function ye(e){let m=e.split(/\\r?\\n/).map(s=>M(s)).filter(Boolean),n=[];for(let s of m){let[f,i,t]=s.trim().split(/\\s+/);n.push({atomNumber:Number(f),element:i,nbImplicitHydrogens:t?.length>0?Number(t):void 0})}return n}function xe(e){let m=e.split(/\\r?\\n/).map(s=>M(s)).filter(Boolean),n=[];for(let s of m){let[f,i,t]=s.trim().split(/\\s+/);n.push({atomNumber1:Number(f),atomNumber2:Number(i),bondType:t})}return n}function Ce(e,m){if(!e)return[];let n=e.split(/\\r?\\n/).map(f=>M(f)).filter(Boolean),s=[];for(let f of n){let[i,t,l]=f.trim().split(/\\s+/);l!==void 0&&m?.warn(\"Charge on multiple atom is not supported\"),s.push({atomNumber:Number(t),value:Number(i)})}return s}function Ae(e,m){let n=[\"STEREOPAIR\",\"STEREOCENTER\",\"RADICAL\",\"STEREOMOLECULE\"];for(let s of n)e.info[s]&&m?.warn(`JCAMP-CS parser do not support: ${s}`)}export{mt as convert,Te as createTree,pt as parseJcampCS};\n","import { convert } from 'jcampconverter';\nimport { Analysis } from '../Analysis.js';\n/**\n * Creates a new Analysis from a JCAMP string\n * @param jcamp - String containing the JCAMP data\n * @param [options={}]\n * @param [options.id=Math.random()]\n * @param [options.label=options.id] - human redeable label\n * @param [options.spectrumCallback] - a callback to apply on variables when creating spectrum\n * @returns - New class element with the given data\n */\nexport function fromJcamp(jcamp, options = {}) {\n    const analysis = new Analysis(options);\n    addJcamp(analysis, jcamp);\n    return analysis;\n}\nfunction addJcamp(analysis, jcamp) {\n    const converted = convert(jcamp, {\n        keepRecordsRegExp: /.*/,\n    });\n    for (const entry of converted.flatten) {\n        if (!entry.spectra?.[0])\n            continue;\n        const currentSpectrum = entry.spectra[0];\n        // we ensure variables\n        if (!currentSpectrum.variables) {\n            const variables = {};\n            currentSpectrum.variables = variables;\n            variables.x = {\n                label: currentSpectrum.xUnits,\n                symbol: 'X',\n                data: currentSpectrum.data.x || currentSpectrum.data.X,\n            };\n            variables.y = {\n                label: currentSpectrum.yUnits,\n                symbol: 'Y',\n                data: currentSpectrum.data.y || currentSpectrum.data.Y,\n            };\n        }\n        else {\n            for (const key in currentSpectrum.variables) {\n                const variable = currentSpectrum.variables[key];\n                if (variable.label)\n                    continue;\n                variable.label = variable.name || variable.symbol || key;\n                if (variable.units && !variable.label.includes(variable.units)) {\n                    // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n                    variable.label += ` [${variable.units}]`;\n                }\n            }\n        }\n        analysis.pushSpectrum(currentSpectrum.variables, {\n            dataType: entry.dataType,\n            title: entry.title,\n            meta: entry.meta,\n        });\n    }\n}\n//# sourceMappingURL=fromJcamp.js.map","export const addInfoData = (data, options = {}) => {\n    const { keys = Object.keys(data), prefix = '##$' } = options;\n    let header = '';\n    for (const key of keys) {\n        header +=\n            typeof data[key] === 'object'\n                ? `${prefix}${key}=${JSON.stringify(data[key])}\\n`\n                : `${prefix}${key}=${data[key]}\\n`;\n    }\n    return header;\n};\n//# sourceMappingURL=addInfoData.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkMatrix(data) {\n    if (!isAnyArray(data) || !isAnyArray(data[0])) {\n        throw new Error(`2D data should be a matrix`);\n    }\n}\n//# sourceMappingURL=checkMatrix.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkNumberOrArray(data) {\n    if (!isAnyArray(data) || isAnyArray(data[0])) {\n        throw new Error(`x and y data should be an array of numbers`);\n    }\n}\n//# sourceMappingURL=checkNumberOrArray.js.map","import { isAnyArray } from 'is-any-array';\nimport { matrixMinMaxZ, xMinMaxValues, } from 'ml-spectra-processing';\nimport { checkMatrix } from './checkMatrix';\nimport { checkNumberOrArray } from './checkNumberOrArray';\nexport function getExtremeValues(data) {\n    if (isAnyArray(data[0])) {\n        checkMatrix(data);\n        const firstRow = data[0];\n        return {\n            firstLast: {\n                first: firstRow[0],\n                last: data[data.length - 1][data[0].length - 1],\n            },\n            minMax: matrixMinMaxZ(data),\n        };\n    }\n    checkNumberOrArray(data);\n    return {\n        firstLast: {\n            first: data[0],\n            last: data[data.length - 1],\n        },\n        minMax: xMinMaxValues(data),\n    };\n}\n//# sourceMappingURL=getExtremeValues.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getExtremeValues } from './utils/getExtremeValues';\n/**\n * Parse from a xyxy data array\n * @param variables - Variables to convert to jcamp\n * @param [options={}] - options that allows to add meta data in the jcamp\n * @return JCAMP-DX text file corresponding to the variables\n */\nexport default function creatorNtuples(variables, options) {\n    const { meta = {}, info = {} } = options;\n    const { title = '', owner = '', origin = '', dataType = '', ...resInfo } = info;\n    const symbol = [];\n    const varName = [];\n    const varType = [];\n    const varDim = [];\n    const units = [];\n    const first = [];\n    const last = [];\n    const min = [];\n    const max = [];\n    const keys = Object.keys(variables);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const variable = variables[key];\n        if (!variable)\n            continue;\n        const name = variable?.label.replace(/ *\\[.*/, '');\n        const unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        symbol.push(variable.symbol || key);\n        varName.push(name || key);\n        varDim.push(variable.data.length);\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        if (variable.isDependent !== undefined) {\n            varType.push(variable.isDependent ? 'DEPENDENT' : 'INDEPENDENT');\n        }\n        else {\n            varType.push(variable.isDependent !== undefined\n                ? !variable.isDependent\n                : i === 0\n                    ? 'INDEPENDENT'\n                    : 'DEPENDENT');\n        }\n        units.push(variable.units || unit || '');\n    }\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##DATA CLASS= NTUPLES\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##FIRST=     ${first.join()}\n##LAST=      ${last.join()}\n##MIN=       ${min.join()}\n##MAX=       ${max.join()}\n##PAGE= N=1\\n`;\n    header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n    for (let i = 0; i < variables.x.data.length; i++) {\n        const point = [];\n        for (const key of keys) {\n            const variable = variables[key];\n            if (!variable)\n                continue;\n            point.push(variable.data[i]);\n        }\n        header += `${point.join('\\t')}\\n`;\n    }\n    header += `##END NTUPLES= ${dataType}\\n`;\n    header += '##END=\\n##END=';\n    return header;\n}\n//# sourceMappingURL=creatorNtuples.js.map","export function getFactorNumber(minMax, maxValue = 2 ** 31 - 1) {\n    let factor;\n    if (minMax.min < 0) {\n        if (minMax.max > 0) {\n            factor = Math.max(-minMax.min, minMax.max) / maxValue;\n        }\n        else {\n            factor = -minMax.min / maxValue;\n        }\n    }\n    else {\n        factor = minMax.max / maxValue;\n    }\n    return factor;\n}\n//# sourceMappingURL=getFactorNumber.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nimport { getFactorNumber } from './getFactorNumber';\nexport function getBestFactor(array, options = {}) {\n    const { maxValue, factor, minMax } = options;\n    if (factor !== undefined) {\n        return factor;\n    }\n    // is there non integer number ?\n    let onlyInteger = true;\n    for (const y of array) {\n        if (Math.round(y) !== y) {\n            onlyInteger = false;\n            break;\n        }\n    }\n    if (onlyInteger) {\n        return 1;\n    }\n    // we need to rescale the values\n    // need to find the max and min values\n    const extremeValues = minMax || xMinMaxValues(array);\n    return getFactorNumber(extremeValues, maxValue);\n}\n//# sourceMappingURL=getBestFactor.js.map","/**\n * Reconvert number to original value\n * @param number Number used for computation\n * @param factor Multiplying factor\n * @returns Original value\n */\nexport function getNumber(number, factor) {\n    if (factor !== 1)\n        number /= factor;\n    const rounded = Math.round(number);\n    if (rounded !== number && Math.abs(rounded - number) <= Number.EPSILON) {\n        return rounded;\n    }\n    return number;\n}\n//# sourceMappingURL=getNumber.js.map","import { getNumber } from './getNumber';\nexport function peakTableCreator(data, options = {}) {\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    let firstX = Number.POSITIVE_INFINITY;\n    let lastX = Number.NEGATIVE_INFINITY;\n    let firstY = Number.POSITIVE_INFINITY;\n    let lastY = Number.NEGATIVE_INFINITY;\n    const lines = [];\n    for (let i = 0; i < data.x.length; i++) {\n        const x = data.x[i];\n        const y = data.y[i];\n        if (firstX > x) {\n            firstX = x;\n        }\n        if (lastX < x) {\n            lastX = x;\n        }\n        if (firstY > y) {\n            firstY = y;\n        }\n        if (lastY < y) {\n            lastY = y;\n        }\n    }\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##PEAK TABLE=(XY..XY)');\n    for (let i = 0; i < data.x.length; i++) {\n        lines.push(`${getNumber(data.x[i], xFactor)} ${getNumber(data.y[i], yFactor)}`);\n    }\n    return lines;\n}\n//# sourceMappingURL=peakTableCreator.js.map","import { xDivide } from 'ml-spectra-processing';\nexport function rescaleAndEnsureInteger(data, factor = 1) {\n    if (factor === 1)\n        return data.map((value) => Math.round(value));\n    return xDivide(data, factor).map((value) => Math.round(value));\n}\n//# sourceMappingURL=rescaleAndEnsureInteger.js.map","/**\n * class encodes a integer vector as a String in order to store it in a text file.\n * The algorithms used to encode the data are describe in:\n *            http://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n */\nconst newLine = '\\n';\nconst pseudoDigits = [\n    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n    ['@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],\n    ['@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n    ['%', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'],\n    ['%', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'],\n    [' ', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 's'],\n];\nconst SQZ_P = 1;\nconst SQZ_N = 2;\nconst DIF_P = 3;\nconst DIF_N = 4;\nconst DUP = 5;\nconst maxLinelength = 100;\n/**\n * This function encodes the given vector. The xyEncoding format is specified by the\n * xyEncoding option\n * @param xyEncoding: ('FIX','SQZ','DIF','DIFDUP','CVS','PAC') Default 'DIFDUP'\n * @return {string}\n */\nexport function vectorEncoder(data, firstX, intervalX, xyEncoding) {\n    switch (xyEncoding) {\n        case 'FIX':\n            return fixEncoding(data, firstX, intervalX);\n        case 'SQZ':\n            return squeezedEncoding(data, firstX, intervalX);\n        case 'DIF':\n            return differenceEncoding(data, firstX, intervalX);\n        case 'DIFDUP':\n            return differenceDuplicateEncoding(data, firstX, intervalX);\n        case 'CSV':\n            return commaSeparatedValuesEncoding(data, firstX, intervalX);\n        case 'PAC':\n            return packedEncoding(data, firstX, intervalX);\n        default:\n            return differenceEncoding(data, firstX, intervalX);\n    }\n}\n/**\n * @private\n * No data compression used. The data is separated by a comma(',').\n */\nexport function commaSeparatedValuesEncoding(data, firstX, intervalX) {\n    return fixEncoding(data, firstX, intervalX, ',');\n}\n/**\n * @private\n * No data compression used. The data is separated by the specified separator.\n */\nexport function fixEncoding(data, firstX, intervalX, separator = ' ') {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += `${separator}${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += `${separator}${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * No data compression used. The data is separated by the sign of the number.\n */\nexport function packedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += data[j] < 0 ? String(data[j++]) : `+${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += data[i] < 0 ? String(data[i]) : `+${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Data compression is possible using the squeezed form (SQZ) in which the delimiter, the leading digit,\n * and sign are replaced by a pseudo-digit from Table 1. For example, the Y-values 30, 32 would be\n * represented as C0C2.\n */\nexport function squeezedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    // String outputData = new String();\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 10) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 10; i++) {\n            outputData += squeezedDigit(data[j++].toString());\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += squeezedDigit(data[i].toString());\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Duplicate suppression xyEncoding\n */\nexport function differenceDuplicateEncoding(data, firstX, intervalX) {\n    let mult = 0;\n    let index = 0;\n    let charCount = 0;\n    // We built a string where we store the encoded data.\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (let i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    // We simulate a line carry\n    const numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // Start line\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else if (diffData[index - 1] === diffData[index]) {\n            // Try to insert next difference\n            mult++;\n        }\n        else if (mult > 0) {\n            // Now we know that it can be in line\n            mult++;\n            encodedNumber = duplicateDigit(mult.toString());\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n            mult = 0;\n            index--;\n        }\n        else {\n            // Check if it fits, otherwise start a new line\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                // start a new line\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    if (mult > 0) {\n        encodedData += duplicateDigit((mult + 1).toString());\n    }\n    // We insert the last data from fid. It is done to control of data\n    // The last line start with the number of datas in the fid.\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Differential xyEncoding\n */\nexport function differenceEncoding(data, firstX, intervalX) {\n    let index = 0;\n    let charCount = 0;\n    let i;\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    const numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // We convert the first number.\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else {\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    // We insert the last number from data. It is done to control of data\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Convert number to the ZQZ format, using pseudo digits.\n */\nfunction squeezedDigit(num) {\n    let sqzDigits = '';\n    if (num.startsWith('-')) {\n        sqzDigits += pseudoDigits[SQZ_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            sqzDigits += num.substring(2);\n        }\n    }\n    else {\n        sqzDigits += pseudoDigits[SQZ_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            sqzDigits += num.substring(1);\n        }\n    }\n    return sqzDigits;\n}\n/**\n * Convert number to the DIF format, using pseudo digits.\n */\nfunction differenceDigit(num) {\n    let diffDigits = '';\n    if (num.startsWith('-')) {\n        diffDigits += pseudoDigits[DIF_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            diffDigits += num.substring(2);\n        }\n    }\n    else {\n        diffDigits += pseudoDigits[DIF_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            diffDigits += num.substring(1);\n        }\n    }\n    return diffDigits;\n}\n/**\n * Convert number to the DUP format, using pseudo digits.\n */\nfunction duplicateDigit(num) {\n    let dupDigits = '';\n    dupDigits += pseudoDigits[DUP][num.charCodeAt(0) - 48];\n    if (num.length > 1) {\n        dupDigits += num.substring(1);\n    }\n    return dupDigits;\n}\n//# sourceMappingURL=vectorEncoder.js.map","import { rescaleAndEnsureInteger } from './rescaleAndEnsureInteger';\nimport { vectorEncoder } from './vectorEncoder';\nexport function xyDataCreator(data, options = {}) {\n    const { xyEncoding = 'DIF' } = options;\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    const firstX = data.x[0];\n    const lastX = data.x[data.x.length - 1];\n    const firstY = data.y[0];\n    const lastY = data.y[data.y.length - 1];\n    const nbPoints = data.x.length;\n    const deltaX = (lastX - firstX) / (nbPoints - 1);\n    const lines = [];\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##DELTAX=${deltaX}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##XYDATA=(X++(Y..Y))');\n    const line = vectorEncoder(rescaleAndEnsureInteger(data.y, yFactor), firstX / xFactor, deltaX / xFactor, xyEncoding);\n    if (line)\n        lines.push(line);\n    return lines;\n}\n//# sourceMappingURL=xyDataCreator.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getBestFactor } from './utils/getBestFactor';\nimport { peakTableCreator } from './utils/peakTableCreator';\nimport { xyDataCreator } from './utils/xyDataCreator';\n/**\n * Create a jcamp\n * @param data object of array\n * @param [options={meta:{},info:{}} - metadata object\n * @returns JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n    const { meta = {}, info = {}, xyEncoding } = options;\n    const { title = '', owner = '', origin = '', dataType = '', xUnits = '', yUnits = '', ...resInfo } = info;\n    let { xFactor, yFactor } = info;\n    data = { x: data.x, y: data.y };\n    let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    // we leave the header and utf8 fonts ${header.replace(/[^\\t\\n\\x20-\\x7F]/g, '')\n    if (xyEncoding) {\n        xFactor = getBestFactor(data.x, { factor: xFactor });\n        yFactor = getBestFactor(data.y, { factor: yFactor });\n        return `${header}##NPOINTS=${data.x.length}\n${xyDataCreator(data, { info: { xFactor, yFactor }, xyEncoding }).join('\\n')}\n##END=`;\n    }\n    else {\n        if (xFactor === undefined)\n            xFactor = 1;\n        if (yFactor === undefined)\n            yFactor = 1;\n        if (xFactor !== 1) {\n            //@ts-expect-error xFactor is always defined\n            data.x = data.x.map((value) => value / xFactor);\n        }\n        if (yFactor !== 1) {\n            //@ts-expect-error yFactor is always defined\n            data.y = data.y.map((value) => value / yFactor);\n        }\n        return `${header}##NPOINTS=${data.x.length}\n${peakTableCreator(data, { info: { xFactor, yFactor } }).join('\\n')}\n##END=`;\n    }\n}\n//# sourceMappingURL=fromJSON.js.map","import creatorNtuples from './creatorNtuples';\nimport { fromJSON } from './fromJSON';\nimport { checkNumberOrArray } from './utils/checkNumberOrArray';\n/**\n * Create a jcamp from variables\n */\nexport function fromVariables(\n/** object of variables */\nvariables, options = {}) {\n    const { info = {}, meta = {}, forceNtuples = false } = options;\n    const jcampOptions = {\n        info,\n        meta,\n    };\n    const keys = Object.keys(variables).map((key) => key.toLowerCase());\n    if (!forceNtuples && keys.length === 2) {\n        const x = variables.x;\n        const xLabel = x.label || 'x';\n        if (variables.x.units) {\n            if (xLabel.includes(variables.x.units)) {\n                jcampOptions.info.xUnits = xLabel;\n            }\n            else {\n                jcampOptions.info.xUnits = `${xLabel} (${variables.x.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.xUnits = xLabel;\n        }\n        const y = variables.y;\n        const yLabel = y.label || 'y';\n        if (variables.y.units) {\n            if (yLabel.includes(variables.y.units)) {\n                jcampOptions.info.xUnits = yLabel;\n            }\n            else {\n                jcampOptions.info.yUnits = `${yLabel} (${variables.y.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.yUnits = yLabel;\n        }\n        const xData = variables.x.data;\n        const yData = variables.y.data;\n        checkNumberOrArray(xData);\n        checkNumberOrArray(yData);\n        return fromJSON({ x: xData, y: yData }, jcampOptions);\n    }\n    else {\n        return creatorNtuples(variables, options);\n    }\n}\n//# sourceMappingURL=fromVariables.js.map","import { fromVariables } from 'convert-to-jcamp';\nexport function toJcamps(analysis, options = {}) {\n    const jcamps = [];\n    for (const spectrum of analysis.spectra) {\n        jcamps.push(getJcamp(spectrum, options));\n    }\n    return jcamps;\n}\nfunction getJcamp(spectrum, options) {\n    const { info = {}, meta = {} } = options;\n    const jcampOptions = {\n        options: {},\n        info: {\n            title: spectrum.title,\n            dataType: spectrum.dataType,\n            ...info,\n        },\n        meta: { ...spectrum.meta, ...meta },\n    };\n    return fromVariables(spectrum.variables, jcampOptions);\n}\n//# sourceMappingURL=toJcamps.js.map","import { toJcamps } from './toJcamps.js';\nexport function toJcamp(analysis, options = {}) {\n    return toJcamps(analysis, options).join('\\n');\n}\n//# sourceMappingURL=toJcamp.js.map","import { optimize as optimizePeak } from 'ml-spectra-fitting';\nimport { xFindClosestIndex, xMaxValue } from 'ml-spectra-processing';\n/**\n * Based on a x value we will return a peak\n * if you set optimize=True the returned positions will be\n * the closest actual datapoints to the fitted peak location.\n * the x/y of the fitted peak will be in xOptimized and yOptimized\n * @param spectrum\n * @param target\n * @param options\n */\nexport function peakPicking(spectrum, \n/** value to search (on x axis) */\ntarget, options = {}) {\n    const { xVariable = 'x', yVariable = 'y', optimize = false, max: isMax = true, shape = { kind: 'gaussian', fwhm: 1 }, } = options;\n    const x = spectrum.variables[xVariable]?.data;\n    let y;\n    if (!isMax) {\n        y = spectrum.variables[yVariable]?.data.slice(); // do deep copy as we maybe need to flip sign\n    }\n    else {\n        y = spectrum.variables[yVariable]?.data;\n    }\n    if (!x || !y)\n        return;\n    const targetIndex = xFindClosestIndex(x, target);\n    let optimizedPeak;\n    let optimizedIndex;\n    const result = {};\n    if (optimize) {\n        if (!isMax) {\n            const maximumY = xMaxValue(y);\n            for (let i = 0; i < y.length; i++) {\n                y[i] *= -1;\n                y[i] += maximumY; // This makes it somewhat more robust\n            }\n        }\n        optimizedPeak = optimizePeak({ x, y }, [{ x: x[targetIndex], y: y[targetIndex] }], { shape });\n        optimizedIndex = xFindClosestIndex(x, optimizedPeak.peaks[0].x);\n        for (const [key, variable] of Object.entries(spectrum.variables)) {\n            result[key] = variable.data[optimizedIndex];\n        }\n        result.optimized = optimizedPeak.peaks[0];\n    }\n    else {\n        for (const [key, variable] of Object.entries(spectrum.variables)) {\n            result[key] = variable.data[targetIndex];\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=peakPicking.js.map","import { gsd } from 'ml-gsd';\nimport { xyMaxClosestYPoint, xyMinClosestYPoint } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './getNormalizedSpectrum.js';\n/**\n * Based on a x value we will return a peak\n * @param spectrum\n * @param options\n */\nexport function autoPeakPicking(spectrum, options = {}) {\n    const { xVariable = 'x', yVariable = 'y', normalizationOptions, minPeakWidth, } = options;\n    let x = spectrum.variables[xVariable]?.data;\n    let y = spectrum.variables[yVariable]?.data;\n    if (!x || !y)\n        return [];\n    if (normalizationOptions) {\n        const tempSpectrum = {\n            variables: {\n                x: { data: x, label: '' },\n                y: { data: y, label: '' },\n            },\n        };\n        const normalizedSpectrum = getNormalizedSpectrum(tempSpectrum, normalizationOptions);\n        x = normalizedSpectrum.variables.x.data;\n        y = normalizedSpectrum.variables.y.data;\n    }\n    if (!x || !y)\n        return;\n    const { from, to } = options;\n    let peaks = gsd({ x, y }, options);\n    if (normalizationOptions) {\n        // we need to recalculate the real count\n        const xyClosestYPoint = options.maxCriteria === undefined || options.maxCriteria\n            ? xyMaxClosestYPoint\n            : xyMinClosestYPoint;\n        for (const peak of peaks) {\n            const closest = xyClosestYPoint({ x: spectrum.variables.x.data, y: spectrum.variables.y.data }, { target: peak.x });\n            peak.x = closest.x;\n            peak.y = closest.y;\n        }\n    }\n    if (from !== undefined) {\n        peaks = peaks.filter((peak) => peak.x >= from);\n    }\n    if (to !== undefined) {\n        peaks = peaks.filter((peak) => peak.x <= to);\n    }\n    if (minPeakWidth) {\n        peaks = peaks.filter((peak) => peak.width >= minPeakWidth);\n    }\n    return peaks.map((peak) => {\n        const result = {};\n        for (const [key, variable] of Object.entries(spectrum.variables)) {\n            result[key] = variable.data[peak.index];\n        }\n        result.width = peak.width;\n        return result;\n    });\n}\n//# sourceMappingURL=autoPeakPicking.js.map","import { getJSGraph } from './jsgraph/getJSGraph.js';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations.js';\nexport * from './AnalysesManager.js';\nexport * from './Analysis.js';\nexport * from './from/fromJcamp.js';\nexport * from './from/fromText.js';\nexport * from './to/toJcamp.js';\nexport * from './to/toJcamps.js';\nexport * from './to/toText.js';\nexport * from './to/toMatrix.js';\nexport * from './util/getNormalizedSpectrum.js';\nexport * from './util/peakPicking.js';\nexport * from './util/autoPeakPicking.js';\nexport * from './types/types.js';\nexport * from './types/AutoPeakPickingOptions.js';\nexport * from './types/NormalizedSpectrumOptions.js';\nexport * from './types/PlotObject.js';\nexport * from './types/SpectrumSelector.js';\nexport { getReactPlotJSON } from './reactPlot/getReactPlotJSON.js';\nexport const JSGraph = {\n    getJSGraph,\n    getNormalizationAnnotations,\n};\n//# sourceMappingURL=index.js.map","/**\n * @typedef {object} Peak\n * @property {number} wavenumber\n * @property {number} transmittance\n * @property {number} intensity\n * @property {number} kind\n * @property {number} assignment\n */\n\n/**\n * Creates annotations for jsgraph that allows to display the result of peak picking\n * @param {Array<Peak>} peaks\n * @param {object} [options={}]\n * @param {string} [options.fillColor='green']\n * @param {string} [options.strokeColor='red']\n * @param {string} [options.showKind=true] - Display the kind, 'm', 'w', 'S'\n * @param {string} [options.showAssignment=true] - Display the assignment\n * @param {Function} [options.createFct] - (annotation, peak) => {}: callback allowing to add properties\n * @returns array\n */\n\nexport function getAnnotations(peaks, options = {}) {\n  const { fillColor = 'green', strokeColor = 'red', creationFct } = options;\n  let annotations = peaks.map((peak) => {\n    let annotation = {\n      line: 1,\n      type: 'rect',\n      strokeColor,\n      strokeWidth: 0,\n      fillColor,\n    };\n    if (creationFct) {\n      creationFct(annotation, peak);\n    }\n    annotationAbsorbance(annotation, peak, options);\n    return annotation;\n  });\n  return annotations;\n}\n\nfunction annotationAbsorbance(annotation, peak, options = {}) {\n  const {\n    showKind = true,\n    showAssignment = true,\n    assignmentAngle = -45,\n  } = options;\n  let labels = [];\n  let line = 0;\n\n  if (showKind) {\n    labels.push({\n      text: peak.kind,\n      size: '18px',\n      anchor: 'middle',\n      color: 'red',\n      position: {\n        x: peak.wavenumber,\n        y: peak.intensity,\n        dy: `${-15 - line * 14}px`,\n      },\n    });\n    line++;\n  }\n\n  if (showAssignment) {\n    labels.push({\n      text: peak.assignment,\n      size: '18px',\n      angle: assignmentAngle,\n      anchor: 'left',\n      color: 'darkred',\n      position: {\n        x: peak.wavenumber,\n        y: peak.intensity,\n        dy: `${-15 - line * 14}px`,\n      },\n    });\n    line++;\n  }\n\n  annotation.labels = labels;\n\n  annotation.position = [\n    {\n      x: peak.wavenumber,\n      y: peak.intensity,\n      dy: '-10px',\n      dx: '-1px',\n    },\n    {\n      x: peak.wavenumber,\n      y: peak.intensity,\n      dy: '-5px',\n      dx: '1px',\n    },\n  ];\n}\n","import { getNormalizedSpectrum } from 'common-spectrum';\nimport { matrixZRescale, xyIntegration } from 'ml-spectra-processing';\n/**\n * We integrate the spectra from 'from' to 'to' and create a matrix\n * @param {object} analysis\n * @param {object} [options={}]\n * @param {number} [options.from] - from Raman shift\n * @param {number} [options.to] - to Raman shift\n * @param {object} [options.rescale={}]\n * @param {number} [options.rescale.min]\n * @param {number} [options.rescale.max]\n * @param {object} [options.normalization]\n * @returns {object}\n */\nexport function surfaceAnalysis(analysis, options = {}) {\n  const { from, to, rescale = {}, normalization = {} } = options;\n  const integrations = analysis.spectra.map((spectrum) => {\n    spectrum = getNormalizedSpectrum(spectrum, normalization);\n    return {\n      x: spectrum.meta.xPosition,\n      y: spectrum.meta.yPosition,\n      spectrum,\n      value: xyIntegration(\n        {\n          x: spectrum.variables.x.data,\n          y: spectrum.variables.y.data,\n        },\n        { from, to },\n      ),\n    };\n  });\n  // we should find a way to create a matrix and to find out width and height\n  const distinctX = [\n    ...new Set(integrations.map((integration) => integration.x)),\n  ].sort((a, b) => a - b);\n  const distinctY = [\n    ...new Set(integrations.map((integration) => integration.y)),\n  ].sort((a, b) => a - b);\n\n  let matrix = new Array(distinctY.length)\n    .fill(0)\n    .map(() => new Float64Array(distinctX.length));\n\n  const integrationsMatrix = new Array(distinctY.length)\n    .fill(0)\n    .map(() => new Array(distinctX.length));\n\n  const xMapping = {};\n  for (const [index, x] of distinctX.entries()) xMapping[x] = index;\n  const yMapping = {};\n  for (const [index, y] of distinctY.entries()) yMapping[y] = index;\n\n  for (let integration of integrations) {\n    integration.xPixel = xMapping[integration.x];\n    integration.yPixel = yMapping[integration.y];\n    matrix[integration.yPixel][integration.xPixel] = integration.value;\n    integrationsMatrix[integration.yPixel][integration.xPixel] = integration;\n  }\n\n  const { min, max } = rescale;\n  if (min !== undefined || max !== undefined) {\n    matrix = matrixZRescale(matrix, { min, max });\n  }\n  return {\n    integrations,\n    matrix,\n    integrationsMatrix,\n  };\n}\n","/**\n * Gives meaning to type codes.\n * @param  xzwType x, z or w type code.\n * @return  String corresponding to the code.\n */\nexport function xzwTypes(xzwType) {\n    switch (xzwType) {\n        case 1:\n            return 'Wavenumber (cm-1)';\n        case 2:\n            return 'Micrometers (um)';\n        case 3:\n            return 'Nanometers (nm)';\n        case 4:\n            return 'Seconds';\n        case 5:\n            return 'Minutes';\n        case 6:\n            return 'Hertz (Hz)';\n        case 7:\n            return 'Kilohertz (KHz)';\n        case 8:\n            return 'Megahertz (MHz)';\n        case 9:\n            return 'Mass (M/z)';\n        case 10:\n            return 'Parts per million (PPM)';\n        case 11:\n            return 'Days';\n        case 12:\n            return 'Years';\n        case 13:\n            return 'Raman Shift (cm-1)';\n        case 14:\n            return 'eV';\n        case 15:\n            return 0;\n        case 16:\n            return 'Diode Number';\n        case 17:\n            return 'Channel ';\n        case 18:\n            return 'Degrees';\n        case 19:\n            return 'Temperature (F)';\n        case 20:\n            return 'Temperature (C)';\n        case 21:\n            return 'Temperature (K)';\n        case 22:\n            return 'Data Points';\n        case 23:\n            return 'Milliseconds (mSec)';\n        case 24:\n            return 'Microseconds (uSec)';\n        case 25:\n            return 'Nanoseconds (nSec)';\n        case 26:\n            return 'Gigahertz (GHz)';\n        case 27:\n            return 'Centimeters (cm)';\n        case 28:\n            return 'Meters (m)';\n        case 29:\n            return 'Millimeters (mm)';\n        case 30:\n            return 'Hours';\n        case 255:\n            return 'Double interferogram';\n        default:\n            return 'Arbitrary';\n    }\n}\n/**\n * Gives meaning to y type codes\n * @param  yType y type code\n * @return  String corresponding to the code\n */\nexport function yTypes(yType) {\n    switch (yType) {\n        case 0:\n            return 'Arbitrary Intensity';\n        case 1:\n            return 'Interferogram';\n        case 2:\n            return 'Absorbance';\n        case 3:\n            return 'Kubelka-Monk';\n        case 4:\n            return 'Counts';\n        case 5:\n            return 'Volts';\n        case 6:\n            return 'Degrees';\n        case 7:\n            return 'Milliamps';\n        case 8:\n            return 'Millimeters';\n        case 9:\n            return 'Millivolts';\n        case 10:\n            return 'Log(1/R)';\n        case 11:\n            return 'Percent';\n        case 12:\n            return 'Intensity';\n        case 13:\n            return 'Relative Intensity';\n        case 14:\n            return 'Energy';\n        case 16:\n            return 'Decibel';\n        case 19:\n            return 'Temperature (F)';\n        case 20:\n            return 'Temperature (C)';\n        case 21:\n            return 'Temperature (K)';\n        case 22:\n            return 'Index of Refraction [N]';\n        case 23:\n            return 'Extinction Coeff. [K]';\n        case 24:\n            return 'Real';\n        case 25:\n            return 'Imaginary';\n        case 26:\n            return 'Complex';\n        case 128:\n            return 'Transmission';\n        case 129:\n            return 'Reflectance';\n        case 130:\n            return 'Arbitrary or Single Beam with Valley Peaks';\n        case 131:\n            return 'Emission';\n        default:\n            return 'Reference Arbitrary Energy';\n    }\n}\n/**\n * Convert code to experiment type\n * @param code\n * @returns type of experiment carried out.\n */\nexport function experimentSettings(code) {\n    switch (code) {\n        case 1:\n            return 'Gas Chromatogram';\n        case 2:\n            return 'General Chromatogram (same as SPCGEN with TCGRAM)';\n        case 3:\n            return 'HPLC Chromatogram';\n        case 4:\n            return 'FT-IR, FT-NIR, FT-Raman Spectrum or Igram (Can also be used for scanning IR.)';\n        case 5:\n            return 'NIR Spectrum (Usually multi-spectral data sets for calibration.)';\n        case 7:\n            return 'UV-VIS Spectrum (Can be used for single scanning UV-VIS-NIR.)';\n        case 8:\n            return 'X-ray Diffraction Spectrum';\n        case 9:\n            return 'Mass Spectrum  (Can be single, GC-MS, Continuum, Centroid or TOF.)';\n        case 10:\n            return 'NMR Spectrum or FID';\n        case 11:\n            return 'Raman Spectrum (Usually Diode Array, CCD, etc. use SPCFTIR for FT-Raman.)';\n        case 12:\n            return 'Fluorescence Spectrum';\n        case 13:\n            return 'Atomic Spectrum';\n        case 14:\n            return 'Chromatography Diode Array Spectra';\n        default:\n            return 'General SPC (could be anything)';\n    }\n}\n//# sourceMappingURL=types.js.map","/**\n * Gets the parameter in each bit of the flag\n *\n * @param  flag First byte of the main header.\n * @returns  The parameters.\n */\nexport class FlagParameters {\n    constructor(flag) {\n        this.y16BitPrecision = (flag & 1) !== 0; //Y values are 16 bits instead of 32\n        this.useExperimentExtension = (flag & 2) !== 0; //Enable experiment mode\n        this.multiFile = (flag & 4) !== 0; //Multiple spectra (multifile)\n        this.zValuesRandom = (flag & 8) !== 0; //Z values in random order if multiFile\n        this.zValuesUneven = (flag & 16) !== 0; //Z values ordered but unevenly spaced if multi\n        this.customAxisLabels = (flag & 32) !== 0; //Custom labels\n        this.xyxy = (flag & 64) !== 0; //One X array per subfile, for discontinuous curves\n        this.xy = (flag & 128) !== 0; // Non-evenly spaced X, X before Y\n    }\n}\n/**\n * Gets the date encoded in binary in a long number.\n * @param  long Binary date.\n * @return  Date formatted to ISO 8601:2019 convention.\n */\nexport function longToDate(long) {\n    if (long === 0) {\n        return '0000-00-00T00:00:00.00Z';\n    }\n    const date = new Date();\n    date.setUTCFullYear(long >> 20);\n    date.setUTCMonth(((long >> 16) & 0x0f) - 1);\n    date.setUTCDate((long >> 11) & 0x1f);\n    date.setUTCHours((long >> 6) & 0x1f);\n    date.setUTCMinutes(long & 0x3f);\n    date.setUTCSeconds(0);\n    date.setUTCMilliseconds(0);\n    return date.toISOString();\n}\n//# sourceMappingURL=headerUtils.js.map","import { xzwTypes, yTypes, experimentSettings } from './types';\nimport { FlagParameters, longToDate } from './utility/headerUtils';\n/**\n * Old-format File-header parsing.\n * @param buffer spc buffer.\n * @param  prev `{parameters,fileversion}`\n * @return  file metadata\n */\nexport class TheOldHeader {\n    constructor(buffer, prev) {\n        this.fileVersion = prev.fileVersion; //Each bit contains a parameter\n        this.parameters = prev.parameters; //4B => New format; 4D => LabCalc format\n        this.exponentY = buffer.readInt16(); //Word (16 bits) instead of byte\n        this.numberPoints = buffer.readFloat32();\n        this.startingX = buffer.readFloat32();\n        this.endingX = buffer.readFloat32();\n        this.xUnitsType = xzwTypes(buffer.readUint8());\n        this.yUnitsType = yTypes(buffer.readUint8());\n        const date = new Date();\n        const zTypeYear = buffer.readUint16(); //Unrelated to Z axis\n        date.setUTCFullYear(zTypeYear % 4096); // TODO: might be wrong\n        date.setUTCMonth(Math.max(buffer.readUint8() - 1, 0));\n        date.setUTCDate(buffer.readUint8());\n        date.setUTCHours(buffer.readUint8());\n        date.setUTCMinutes(buffer.readUint8());\n        this.date = date.toISOString();\n        this.resolutionDescription = buffer\n            .readChars(8)\n            .replace(/\\x00/g, '')\n            .trim();\n        this.peakPointNumber = buffer.readUint16();\n        this.scans = buffer.readUint16();\n        this.spare = [];\n        for (let i = 0; i < 7; i++) {\n            this.spare.push(buffer.readFloat32());\n        }\n        this.memo = buffer.readChars(130).replace(/\\x00/g, '').trim();\n        this.xyzLabels = buffer.readChars(30).replace(/\\x00/g, '').trim();\n    }\n}\n/**\n * New format file-header parsing.\n * @param buffer spc buffer.\n * @param  prev `{parameters,fileversion}`\n * @return  file metadata\n */\nexport class TheNewHeader {\n    constructor(buffer, prev) {\n        this.fileVersion = prev.fileVersion; //Each bit contains a parameter\n        this.parameters = prev.parameters; //4B => New format; 4D => LabCalc format\n        this.experimentType = experimentSettings(buffer.readUint8()); //Experiment type code (See SPC.h)\n        this.exponentY = buffer.readInt8(); //Exponent for Y values (80h = floating point): FloatY = (2^Exp)*IntY/(2^32) 32-bit; FloatY = (2^Exp)*IntY/(2^16) 32-bit\n        this.numberPoints = buffer.readUint32(); //Number of points (if not XYXY)\n        this.startingX = buffer.readFloat64(); //First X coordinate\n        this.endingX = buffer.readFloat64(); //Last X coordinate\n        this.spectra = buffer.readUint32(); //Number of spectrums\n        this.xUnitsType = xzwTypes(buffer.readUint8()); //X Units type code (See types.js)\n        this.yUnitsType = yTypes(buffer.readUint8()); //Y \"\"\n        this.zUnitsType = xzwTypes(buffer.readUint8()); //Z \"\"\n        this.postingDisposition = buffer.readUint8(); //Posting disposition (See GRAMSDDE.H)\n        this.date = longToDate(buffer.readUint32()); //Date: minutes = first 6 bits, hours = 5 next bits, days = 5 next, months = 4 next, years = 12 last\n        this.resolutionDescription = buffer\n            .readChars(9)\n            .replace(/\\x00/g, '')\n            .trim(); //Resolution description text\n        this.sourceInstrumentDescription = buffer\n            .readChars(9)\n            .replace(/\\x00/g, '')\n            .trim(); // Source Instrument description text\n        this.peakPointNumber = buffer.readUint16(); //Peak point number for interferograms\n        this.spare = [];\n        for (let i = 0; i < 8; i++) {\n            this.spare.push(buffer.readFloat32());\n        }\n        if (this.fileVersion === 0x4c) {\n            //Untested case because no test files\n            this.spare.reverse();\n        }\n        this.memo = buffer.readChars(130).replace(/\\x00/g, '').trim();\n        this.xyzLabels = buffer.readChars(30).replace(/\\x00/g, '').trim();\n        this.logOffset = buffer.readUint32(); //Byte offset to Log Block\n        this.modifiedFlag = buffer.readUint32(); //File modification flag (See values in SPC.H)\n        this.processingCode = buffer.readUint8(); //Processing code (See GRAMSDDE.H)\n        this.calibrationLevel = buffer.readUint8(); //Calibration level + 1\n        this.subMethodSampleInjectionNumber = buffer.readUint16(); //Sub-method sample injection number\n        this.concentrationFactor = buffer.readFloat32(); //Floating data multiplier concentration factor\n        this.methodFile = buffer.readChars(48).replace(/\\x00/g, '').trim(); //Method file\n        this.zSubIncrement = buffer.readFloat32(); //Z subfile increment for even Z Multifiles\n        this.wPlanes = buffer.readUint32();\n        this.wPlaneIncrement = buffer.readFloat32();\n        this.wAxisUnits = xzwTypes(buffer.readUint8()); //W axis units code\n        this.reserved = buffer.readChars(187).replace(/\\x00/g, '').trim(); //Reserved space (Must be zero)\n        if (this.xUnitsType === 0) {\n            this.xUnitsType = this.xyzLabels.substring(0, 10);\n        }\n        if (this.zUnitsType === 0) {\n            this.zUnitsType = this.xyzLabels.substring(20, 30);\n        }\n    }\n}\n/**\n * File-header parsing - First 512/256 bytes (new/old format).\n * @param buffer SPC buffer.\n * @return File-header object\n */\nexport function fileHeader(buffer) {\n    const parameters = new FlagParameters(buffer.readUint8()); //Each bit contains a parameter\n    const fileVersion = buffer.readUint8(); //4B => New format; 4D => LabCalc format\n    const headerOpts = { parameters, fileVersion };\n    switch (fileVersion) {\n        case 0x4b: // new format\n            break;\n        case 0x4c:\n            buffer.setBigEndian();\n            break;\n        case 0x4d: {\n            // old LabCalc format\n            return new TheOldHeader(buffer, headerOpts);\n        }\n        default:\n            throw new Error('Unrecognized file format: byte 01 must be either 4B, 4C or 4D');\n    }\n    return new TheNewHeader(buffer, headerOpts);\n}\n//# sourceMappingURL=fileHeader.js.map","/** Get how the data was stored\n * @param multiFile - whether there are multiple spectra (subfiles) or not.\n * @param xy - uneven x values\n * @param xyxy - multifile with separate x axis\n * @return the shape of the data as a string\n */\nexport function getDataShape({ multiFile, xy, xyxy, }) {\n    /* single file */\n    if (!multiFile) {\n        // Y or XY,\n        return !xy ? 'Y' : xyxy ? 'exception' : 'XY';\n    }\n    /* then multifile */\n    if (!xy) {\n        /* even X - equidistant */\n        return 'YY';\n    }\n    else {\n        // uneven x\n        return !xyxy ? 'XYY' : 'XYXY';\n    }\n}\n//# sourceMappingURL=getDataShape.js.map","export function decode(bytes, encoding = 'utf8') {\n    const decoder = new TextDecoder(encoding);\n    return decoder.decode(bytes);\n}\nconst encoder = new TextEncoder();\nexport function encode(str) {\n    return encoder.encode(str);\n}\n//# sourceMappingURL=text.js.map","import { decode, encode } from './text';\nconst defaultByteLength = 1024 * 8;\nconst hostBigEndian = (() => {\n    const array = new Uint8Array(4);\n    const view = new Uint32Array(array.buffer);\n    return !((view[0] = 1) & array[0]);\n})();\nconst typedArrays = {\n    int8: globalThis.Int8Array,\n    uint8: globalThis.Uint8Array,\n    int16: globalThis.Int16Array,\n    uint16: globalThis.Uint16Array,\n    int32: globalThis.Int32Array,\n    uint32: globalThis.Uint32Array,\n    uint64: globalThis.BigUint64Array,\n    int64: globalThis.BigInt64Array,\n    float32: globalThis.Float32Array,\n    float64: globalThis.Float64Array,\n};\nexport class IOBuffer {\n    /**\n     * Reference to the internal ArrayBuffer object.\n     */\n    buffer;\n    /**\n     * Byte length of the internal ArrayBuffer.\n     */\n    byteLength;\n    /**\n     * Byte offset of the internal ArrayBuffer.\n     */\n    byteOffset;\n    /**\n     * Byte length of the internal ArrayBuffer.\n     */\n    length;\n    /**\n     * The current offset of the buffer's pointer.\n     */\n    offset;\n    lastWrittenByte;\n    littleEndian;\n    _data;\n    _mark;\n    _marks;\n    /**\n     * Create a new IOBuffer.\n     * @param data - The data to construct the IOBuffer with.\n     * If data is a number, it will be the new buffer's length<br>\n     * If data is `undefined`, the buffer will be initialized with a default length of 8Kb<br>\n     * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\n     * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\n     * @param options - An object for the options.\n     * @returns A new IOBuffer instance.\n     */\n    constructor(data = defaultByteLength, options = {}) {\n        let dataIsGiven = false;\n        if (typeof data === 'number') {\n            data = new ArrayBuffer(data);\n        }\n        else {\n            dataIsGiven = true;\n            this.lastWrittenByte = data.byteLength;\n        }\n        const offset = options.offset ? options.offset >>> 0 : 0;\n        const byteLength = data.byteLength - offset;\n        let dvOffset = offset;\n        if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\n            if (data.byteLength !== data.buffer.byteLength) {\n                dvOffset = data.byteOffset + offset;\n            }\n            data = data.buffer;\n        }\n        if (dataIsGiven) {\n            this.lastWrittenByte = byteLength;\n        }\n        else {\n            this.lastWrittenByte = 0;\n        }\n        this.buffer = data;\n        this.length = byteLength;\n        this.byteLength = byteLength;\n        this.byteOffset = dvOffset;\n        this.offset = 0;\n        this.littleEndian = true;\n        this._data = new DataView(this.buffer, dvOffset, byteLength);\n        this._mark = 0;\n        this._marks = [];\n    }\n    /**\n     * Checks if the memory allocated to the buffer is sufficient to store more\n     * bytes after the offset.\n     * @param byteLength - The needed memory in bytes.\n     * @returns `true` if there is sufficient space and `false` otherwise.\n     */\n    available(byteLength = 1) {\n        return this.offset + byteLength <= this.length;\n    }\n    /**\n     * Check if little-endian mode is used for reading and writing multi-byte\n     * values.\n     * @returns `true` if little-endian mode is used, `false` otherwise.\n     */\n    isLittleEndian() {\n        return this.littleEndian;\n    }\n    /**\n     * Set little-endian mode for reading and writing multi-byte values.\n     * @returns This.\n     */\n    setLittleEndian() {\n        this.littleEndian = true;\n        return this;\n    }\n    /**\n     * Check if big-endian mode is used for reading and writing multi-byte values.\n     * @returns `true` if big-endian mode is used, `false` otherwise.\n     */\n    isBigEndian() {\n        return !this.littleEndian;\n    }\n    /**\n     * Switches to big-endian mode for reading and writing multi-byte values.\n     * @returns This.\n     */\n    setBigEndian() {\n        this.littleEndian = false;\n        return this;\n    }\n    /**\n     * Move the pointer n bytes forward.\n     * @param n - Number of bytes to skip.\n     * @returns This.\n     */\n    skip(n = 1) {\n        this.offset += n;\n        return this;\n    }\n    /**\n     * Move the pointer n bytes backward.\n     * @param n - Number of bytes to move back.\n     * @returns This.\n     */\n    back(n = 1) {\n        this.offset -= n;\n        return this;\n    }\n    /**\n     * Move the pointer to the given offset.\n     * @param offset - The offset to move to.\n     * @returns This.\n     */\n    seek(offset) {\n        this.offset = offset;\n        return this;\n    }\n    /**\n     * Store the current pointer offset.\n     * @see {@link IOBuffer#reset}\n     * @returns This.\n     */\n    mark() {\n        this._mark = this.offset;\n        return this;\n    }\n    /**\n     * Move the pointer back to the last pointer offset set by mark.\n     * @see {@link IOBuffer#mark}\n     * @returns This.\n     */\n    reset() {\n        this.offset = this._mark;\n        return this;\n    }\n    /**\n     * Push the current pointer offset to the mark stack.\n     * @see {@link IOBuffer#popMark}\n     * @returns This.\n     */\n    pushMark() {\n        this._marks.push(this.offset);\n        return this;\n    }\n    /**\n     * Pop the last pointer offset from the mark stack, and set the current\n     * pointer offset to the popped value.\n     * @see {@link IOBuffer#pushMark}\n     * @returns This.\n     */\n    popMark() {\n        const offset = this._marks.pop();\n        if (offset === undefined) {\n            throw new Error('Mark stack empty');\n        }\n        this.seek(offset);\n        return this;\n    }\n    /**\n     * Move the pointer offset back to 0.\n     * @returns This.\n     */\n    rewind() {\n        this.offset = 0;\n        return this;\n    }\n    /**\n     * Make sure the buffer has sufficient memory to write a given byteLength at\n     * the current pointer offset.\n     * If the buffer's memory is insufficient, this method will create a new\n     * buffer (a copy) with a length that is twice (byteLength + current offset).\n     * @param byteLength - The needed memory in bytes.\n     * @returns This.\n     */\n    ensureAvailable(byteLength = 1) {\n        if (!this.available(byteLength)) {\n            const lengthNeeded = this.offset + byteLength;\n            const newLength = lengthNeeded * 2;\n            const newArray = new Uint8Array(newLength);\n            newArray.set(new Uint8Array(this.buffer));\n            this.buffer = newArray.buffer;\n            this.length = newLength;\n            this.byteLength = newLength;\n            this._data = new DataView(this.buffer);\n        }\n        return this;\n    }\n    /**\n     * Read a byte and return false if the byte's value is 0, or true otherwise.\n     * Moves pointer forward by one byte.\n     * @returns The read boolean.\n     */\n    readBoolean() {\n        return this.readUint8() !== 0;\n    }\n    /**\n     * Read a signed 8-bit integer and move pointer forward by 1 byte.\n     * @returns The read byte.\n     */\n    readInt8() {\n        return this._data.getInt8(this.offset++);\n    }\n    /**\n     * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n     * @returns The read byte.\n     */\n    readUint8() {\n        return this._data.getUint8(this.offset++);\n    }\n    /**\n     * Alias for {@link IOBuffer#readUint8}.\n     * @returns The read byte.\n     */\n    readByte() {\n        return this.readUint8();\n    }\n    /**\n     * Read `n` bytes and move pointer forward by `n` bytes.\n     * @param n - Number of bytes to read.\n     * @returns The read bytes.\n     */\n    readBytes(n = 1) {\n        return this.readArray(n, 'uint8');\n    }\n    /**\n     * Creates an array of corresponding to the type `type` and size `size`.\n     * For example type `uint8` will create a `Uint8Array`.\n     * @param size - size of the resulting array\n     * @param type - number type of elements to read\n     * @returns The read array.\n     */\n    readArray(size, type) {\n        const bytes = typedArrays[type].BYTES_PER_ELEMENT * size;\n        const offset = this.byteOffset + this.offset;\n        const slice = this.buffer.slice(offset, offset + bytes);\n        if (this.littleEndian === hostBigEndian &&\n            type !== 'uint8' &&\n            type !== 'int8') {\n            const slice = new Uint8Array(this.buffer.slice(offset, offset + bytes));\n            slice.reverse();\n            const returnArray = new typedArrays[type](slice.buffer);\n            this.offset += bytes;\n            returnArray.reverse();\n            return returnArray;\n        }\n        const returnArray = new typedArrays[type](slice);\n        this.offset += bytes;\n        return returnArray;\n    }\n    /**\n     * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n     * @returns The read value.\n     */\n    readInt16() {\n        const value = this._data.getInt16(this.offset, this.littleEndian);\n        this.offset += 2;\n        return value;\n    }\n    /**\n     * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n     * @returns The read value.\n     */\n    readUint16() {\n        const value = this._data.getUint16(this.offset, this.littleEndian);\n        this.offset += 2;\n        return value;\n    }\n    /**\n     * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n     * @returns The read value.\n     */\n    readInt32() {\n        const value = this._data.getInt32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n     * @returns The read value.\n     */\n    readUint32() {\n        const value = this._data.getUint32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 32-bit floating number and move pointer forward by 4 bytes.\n     * @returns The read value.\n     */\n    readFloat32() {\n        const value = this._data.getFloat32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 64-bit floating number and move pointer forward by 8 bytes.\n     * @returns The read value.\n     */\n    readFloat64() {\n        const value = this._data.getFloat64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit signed integer number and move pointer forward by 8 bytes.\n     * @returns The read value.\n     */\n    readBigInt64() {\n        const value = this._data.getBigInt64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit unsigned integer number and move pointer forward by 8 bytes.\n     * @returns The read value.\n     */\n    readBigUint64() {\n        const value = this._data.getBigUint64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n     * @returns The read character.\n     */\n    readChar() {\n        // eslint-disable-next-line unicorn/prefer-code-point\n        return String.fromCharCode(this.readInt8());\n    }\n    /**\n     * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n     * @param n - Number of characters to read.\n     * @returns The read characters.\n     */\n    readChars(n = 1) {\n        let result = '';\n        for (let i = 0; i < n; i++) {\n            result += this.readChar();\n        }\n        return result;\n    }\n    /**\n     * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n     * forward by `n` bytes.\n     * @param n - Number of bytes to read.\n     * @returns The decoded string.\n     */\n    readUtf8(n = 1) {\n        return decode(this.readBytes(n));\n    }\n    /**\n     * Read the next `n` bytes, return a string decoded with `encoding` and move pointer\n     * forward by `n` bytes.\n     * If no encoding is passed, the function is equivalent to @see {@link IOBuffer#readUtf8}\n     * @param n - Number of bytes to read.\n     * @param encoding - The encoding to use. Default is 'utf8'.\n     * @returns The decoded string.\n     */\n    decodeText(n = 1, encoding = 'utf8') {\n        return decode(this.readBytes(n), encoding);\n    }\n    /**\n     * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n     * forward by 1 byte.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeBoolean(value) {\n        this.writeUint8(value ? 0xff : 0x00);\n        return this;\n    }\n    /**\n     * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeInt8(value) {\n        this.ensureAvailable(1);\n        this._data.setInt8(this.offset++, value);\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n     * byte.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeUint8(value) {\n        this.ensureAvailable(1);\n        this._data.setUint8(this.offset++, value);\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * An alias for {@link IOBuffer#writeUint8}.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeByte(value) {\n        return this.writeUint8(value);\n    }\n    /**\n     * Write all elements of `bytes` as uint8 values and move pointer forward by\n     * `bytes.length` bytes.\n     * @param bytes - The array of bytes to write.\n     * @returns This.\n     */\n    writeBytes(bytes) {\n        this.ensureAvailable(bytes.length);\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let i = 0; i < bytes.length; i++) {\n            this._data.setUint8(this.offset++, bytes[i]);\n        }\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 16-bit signed integer and move pointer forward by 2\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeInt16(value) {\n        this.ensureAvailable(2);\n        this._data.setInt16(this.offset, value, this.littleEndian);\n        this.offset += 2;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeUint16(value) {\n        this.ensureAvailable(2);\n        this._data.setUint16(this.offset, value, this.littleEndian);\n        this.offset += 2;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit signed integer and move pointer forward by 4\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeInt32(value) {\n        this.ensureAvailable(4);\n        this._data.setInt32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeUint32(value) {\n        this.ensureAvailable(4);\n        this._data.setUint32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit floating number and move pointer forward by 4\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeFloat32(value) {\n        this.ensureAvailable(4);\n        this._data.setFloat32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit floating number and move pointer forward by 8\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeFloat64(value) {\n        this.ensureAvailable(8);\n        this._data.setFloat64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit signed bigint and move pointer forward by 8\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeBigInt64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigInt64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit unsigned bigint and move pointer forward by 8\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeBigUint64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigUint64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write the charCode of `str`'s first character as an 8-bit unsigned integer\n     * and move pointer forward by 1 byte.\n     * @param str - The character to write.\n     * @returns This.\n     */\n    writeChar(str) {\n        // eslint-disable-next-line unicorn/prefer-code-point\n        return this.writeUint8(str.charCodeAt(0));\n    }\n    /**\n     * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\n     * and move pointer forward by `str.length` bytes.\n     * @param str - The characters to write.\n     * @returns This.\n     */\n    writeChars(str) {\n        for (let i = 0; i < str.length; i++) {\n            // eslint-disable-next-line unicorn/prefer-code-point\n            this.writeUint8(str.charCodeAt(i));\n        }\n        return this;\n    }\n    /**\n     * UTF-8 encode and write `str` to the current pointer offset and move pointer\n     * forward according to the encoded length.\n     * @param str - The string to write.\n     * @returns This.\n     */\n    writeUtf8(str) {\n        return this.writeBytes(encode(str));\n    }\n    /**\n     * Export a Uint8Array view of the internal buffer.\n     * The view starts at the byte offset and its length\n     * is calculated to stop at the last written byte or the original length.\n     * @returns A new Uint8Array view.\n     */\n    toArray() {\n        return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n    }\n    /**\n     *  Get the total number of bytes written so far, regardless of the current offset.\n     * @returns - Total number of bytes.\n     */\n    getWrittenByteLength() {\n        return this.lastWrittenByte - this.byteOffset;\n    }\n    /**\n     * Update the last written byte offset\n     * @private\n     */\n    _updateLastWrittenByte() {\n        if (this.offset > this.lastWrittenByte) {\n            this.lastWrittenByte = this.offset;\n        }\n    }\n}\n//# sourceMappingURL=IOBuffer.js.map","/** Ensures x-values are increasing in magnitude. It reverses y if x was reversed.\n *\n * * Does not mutate arrays\n * * Assumes that X is either increasing or decreasing, not any random order.\n * * Expects x and y to be the same length\n * @param x - array of x values\n * @param y - array of y values\n * @returns [x,y] tuple\n */\nexport function ensureIncreasingXValues(x, y) {\n    const xL = x.length;\n    if (xL !== 0) {\n        if (y.length !== xL) {\n            //wouldn't really make sense for x and y to be !==\n            throw new RangeError('x and y length must be the same');\n        }\n        const firstX = x[0];\n        const lastX = x[x.length - 1];\n        if (firstX > lastX) {\n            //apparently slice(0) faster than slice()\n            return [x.slice(0).reverse(), y.slice(0).reverse()];\n        }\n    }\n    return [x, y];\n}\n//# sourceMappingURL=ensureIncreasingXValues.js.map","import { ensureIncreasingXValues } from './utility/ensureIncreasingXValues';\n/**\n * Gets the Subfile flags.\n *\n * @param  flag First byte of the subheader.\n * @return The parameters.\n */\nexport class SubFlagParameters {\n    constructor(flag) {\n        this.changed = (flag & 1) !== 0;\n        this.noPeakTable = (flag & 8) !== 0;\n        this.modifiedArithmetic = (flag & 128) !== 0;\n    }\n}\n/**\n * Parses the subheader (header of the subfile)\n *\n * @param buffer SPC buffer.\n * @return subheader object\n */\nexport class SubHeader {\n    constructor(buffer) {\n        this.parameters = new SubFlagParameters(buffer.readUint8());\n        this.exponentY = buffer.readInt8();\n        this.indexNumber = buffer.readUint16();\n        this.startingZ = buffer.readFloat32();\n        this.endingZ = buffer.readFloat32();\n        this.noiseValue = buffer.readFloat32();\n        this.numberPoints = buffer.readUint32();\n        this.numberCoAddedScans = buffer.readUint32();\n        this.wAxisValue = buffer.readFloat32();\n        this.reserved = buffer.readChars(4).replace(/\\x00/g, '').trim();\n    }\n}\n/**\n * Set the X and Y axis (object with labels, values etc.)\n * @param x\n * @param y\n * @param fileHeader\n * @return object with x and y as axis.\n */\nexport function setXYAxis(x, y, fileHeader) {\n    var _a, _b, _c, _d;\n    const xAxis = /(?<label>.*?) ?[([](?<units>.*)[)\\]]/.exec(fileHeader.xUnitsType);\n    const yAxis = /(?<label>.*?) ?[([](?<units>.*)[)\\]]/.exec(fileHeader.yUnitsType);\n    const [oX, oY] = ensureIncreasingXValues(x, y);\n    const variables = {\n        x: {\n            symbol: 'x',\n            label: ((_a = xAxis === null || xAxis === void 0 ? void 0 : xAxis.groups) === null || _a === void 0 ? void 0 : _a.label) || fileHeader.xUnitsType,\n            units: ((_b = xAxis === null || xAxis === void 0 ? void 0 : xAxis.groups) === null || _b === void 0 ? void 0 : _b.units) || '',\n            data: oX,\n            isDependent: false,\n        },\n        y: {\n            symbol: 'y',\n            label: ((_c = yAxis === null || yAxis === void 0 ? void 0 : yAxis.groups) === null || _c === void 0 ? void 0 : _c.label) || fileHeader.yUnitsType,\n            units: ((_d = yAxis === null || yAxis === void 0 ? void 0 : yAxis.groups) === null || _d === void 0 ? void 0 : _d.units) || '',\n            data: oY,\n            isDependent: true,\n        },\n    };\n    return variables;\n}\n//# sourceMappingURL=shared.js.map","import { createFromToArray } from 'ml-spectra-processing';\nimport { getDataShape } from '../utility/getDataShape';\nimport { SubHeader, setXYAxis } from './shared';\n/**\n * Reads the data block of the SPC file.\n *\n * @param buffer spc buffer.\n * @param fileHeader main header.\n * @return Array containing the spectra.\n */\nexport function newDataBlock(buffer, fileHeader) {\n    let x;\n    const spectra = [];\n    const dataShape = getDataShape(fileHeader.parameters);\n    if (dataShape === 'XY' || dataShape === 'XYY') {\n        //for these ones, X axis comes before subheader !!\n        x = new Float64Array(fileHeader.numberPoints);\n        for (let i = 0; i < fileHeader.numberPoints; i++) {\n            x[i] = buffer.readFloat32();\n        }\n    }\n    else if (dataShape === 'YY' || dataShape === 'Y') {\n        //for these ones, no X axis, we create it as we have all parameters\n        x = createFromToArray({\n            from: fileHeader.startingX,\n            to: fileHeader.endingX,\n            length: fileHeader.numberPoints,\n        });\n    }\n    for (let i = 0; i < fileHeader.spectra; i++) {\n        // here Y is set (runs only once for a single spectra.)\n        const subFileHeader = new SubHeader(buffer);\n        // set X for the remaining cases if neccesary\n        if (dataShape === 'XYXY' || dataShape === 'exception') {\n            x = new Float64Array(subFileHeader.numberPoints);\n            for (let j = 0; j < x.length; j++) {\n                x[j] = buffer.readFloat32();\n            }\n        }\n        const y = getNewY(new Float64Array(x.length), subFileHeader, fileHeader, buffer);\n        const variables = setXYAxis(x, y, fileHeader);\n        spectra.push({ meta: subFileHeader, variables });\n    }\n    return spectra;\n}\nexport function getNewY(y, subHeader, fileHeader, buffer) {\n    const { exponentY, parameters: { y16BitPrecision }, } = fileHeader;\n    if (subHeader.exponentY === 0) {\n        subHeader.exponentY = exponentY;\n    }\n    const yFactor = 2 ** (subHeader.exponentY - (y16BitPrecision ? 16 : 32));\n    if (y16BitPrecision) {\n        for (let j = 0; j < y.length; j++) {\n            y[j] = buffer.readInt16() * yFactor;\n        }\n    }\n    else {\n        for (let j = 0; j < y.length; j++) {\n            if (subHeader.exponentY !== -128) {\n                y[j] = buffer.readInt32() * yFactor;\n            }\n            else {\n                y[j] = buffer.readFloat32();\n            }\n        }\n    }\n    return y;\n}\n//# sourceMappingURL=newDataBlock.js.map","import { createFromToArray } from 'ml-spectra-processing';\nimport { SubHeader, setXYAxis } from './shared';\n/**\n * Reads a file's data block (old SPC format)\n *\n * @param buffer spc buffer.\n * @param fileHeader header.\n * @return Array containing the spectra.\n */\nexport function oldDataBlock(buffer, fileHeader) {\n    // either Y or YY fall on the for loop\n    const spectra = [];\n    // old format uses always equidistant arrays\n    const x = createFromToArray({\n        from: fileHeader.startingX,\n        to: fileHeader.endingX,\n        length: fileHeader.numberPoints,\n    });\n    for (let i = 0; buffer.offset + fileHeader.numberPoints < buffer.length; i++) {\n        const subFileHeader = new SubHeader(buffer);\n        const y = getOldY(new Float64Array(x.length), subFileHeader, fileHeader, buffer);\n        const variables = setXYAxis(x, y, fileHeader);\n        spectra.push({ meta: subFileHeader, variables });\n    }\n    return spectra;\n}\n/**\n *\n *\n * @export\n * @param {Float64Array} y\n * @param {SubHeader} subHeader\n * @param {TheOldHeader} fileHeader\n * @param {IOBuffer} buffer\n * @return {*}\n */\nexport function getOldY(y, subHeader, fileHeader, buffer) {\n    const { fileVersion, exponentY, parameters: { y16BitPrecision }, } = fileHeader;\n    if (subHeader.exponentY === 0) {\n        subHeader.exponentY = exponentY;\n    }\n    const yFactor = 2 ** (subHeader.exponentY - (y16BitPrecision ? 16 : 32));\n    if (y16BitPrecision) {\n        for (let j = 0; j < y.length; j++) {\n            y[j] = buffer.readInt16() * yFactor;\n        }\n    }\n    else {\n        for (let j = 0; j < y.length; j++) {\n            if (fileVersion === 0x4d) {\n                y[j] =\n                    ((buffer.readUint8() << 16) +\n                        (buffer.readInt8() << 24) +\n                        (buffer.readUint8() << 0) +\n                        (buffer.readUint8() << 8)) *\n                        yFactor;\n            }\n        }\n    }\n    return y;\n}\n//# sourceMappingURL=oldDataBlock.js.map","/**\n *\n * @param  buffer SPC buffer.\n * @param  logOffset Offset of the log (from mainHeader).\n * @return  Object containing log meta, data and text.\n */\nexport function readLogBlock(buffer, logOffset) {\n    const logHeader = {\n        size: buffer.readUint32(), //Size of the block in bytes\n        memorySize: buffer.readUint32(), //Size of the memory rounded up to nearest multiple of 4096\n        textOffset: buffer.readUint32(), //Offset to Text section\n        binarySize: buffer.readUint32(), //Size of binary log block\n        diskArea: buffer.readUint32(), //Size of the disk area\n        reserved: buffer.readChars(44).trim().replace(/\\x00/g, ''), //Reserved space\n    };\n    const logData = buffer.readChars(logHeader.binarySize);\n    buffer.offset = logOffset + logHeader.textOffset;\n    const logASCII = buffer\n        .readChars(logHeader.size - logHeader.textOffset)\n        .trim()\n        .replace(/\\x00/g, '');\n    return { meta: logHeader, data: logData, text: logASCII };\n}\n//# sourceMappingURL=logBlock.js.map","import { IOBuffer } from 'iobuffer';\nimport { newDataBlock } from './dataBlock/newDataBlock';\nimport { oldDataBlock } from './dataBlock/oldDataBlock';\nimport { fileHeader, TheNewHeader } from './fileHeader';\nimport { readLogBlock } from './logBlock';\n/**\n * Parses an SPC file.\n *\n * @param  buffer SPC file buffer.\n * @return JSON-like object with information contained in the SPC file.\n */\nexport function parse(buffer) {\n    const ioBuffer = new IOBuffer(buffer);\n    const meta = fileHeader(ioBuffer);\n    if (meta instanceof TheNewHeader) {\n        //new format\n        const spectra = newDataBlock(ioBuffer, meta);\n        const logs = meta.logOffset !== 0 ? readLogBlock(ioBuffer, meta.logOffset) : null;\n        return { meta, spectra, logs };\n    }\n    else {\n        //old format\n        return {\n            meta,\n            spectra: oldDataBlock(ioBuffer, meta),\n        };\n    }\n}\n//# sourceMappingURL=parse.js.map","import { Analysis } from 'common-spectrum';\nimport { parse } from 'spc-parser';\n\nexport function fromSPC(arrayBuffer) {\n  let analysis = new Analysis();\n\n  const parsed = parse(arrayBuffer);\n\n  for (const spectrum of parsed.spectra) {\n    analysis.pushSpectrum(spectrum.variables, {\n      dataType: 'Raman',\n      meta: { ...parsed.meta, ...spectrum.meta },\n    });\n  }\n  return analysis;\n}\n","/**\n * Maps numeric type for block-header or file-header to a semantic label (a name).\n * @param blockId type code\n * @return Semantic label for block\n */\nexport function getBlockTypes(blockId) {\n    switch (blockId) {\n        case 0x31464457:\n            return 'WDF_BLOCKID_FILE'; /** holds important file metadata */\n        case 0x41544144:\n            return 'WDF_BLOCKID_DATA'; /** all spectras, in 32b floating numbers */\n        case 0x54534c59:\n            return 'WDF_BLOCKID_YLIST'; /** holds values in case 2D images were taken.\n      For spectra is a single value and is usually ignored */\n        case 0x54534c58:\n            return 'WDF_BLOCKID_XLIST'; /** nPoints unit values for x axis */\n        case 0x4e47524f:\n            return 'WDF_BLOCKID_ORIGIN'; /** hold a header and then sets, which are like subblocks */\n        case 0x54584554:\n            return 'WDF_BLOCKID_COMMENT';\n        case 0x41445857:\n            return 'WDF_BLOCKID_WIREDATA';\n        case 0x42445857:\n            return 'WDF_BLOCKID_DATASETDATA';\n        case 0x4d445857:\n            return 'WDF_BLOCKID_MEASUREMENT';\n        case 0x53435857:\n            return 'WDF_BLOCKID_CALIBRATION';\n        case 0x53495857:\n            return 'WDF_BLOCKID_INSTRUMENT';\n        case 0x50414d57:\n            return 'WDF_BLOCKID_MAPAREA';\n        case 0x4c544857:\n            return 'WDF_BLOCKID_WHITELIGHT';\n        case 0x4c49414e:\n            return 'WDF_BLOCKID_THUMBNAIL';\n        case 0x2050414d:\n            return 'WDF_BLOCKID_MAP';\n        case 0x52414643:\n            return 'WDF_BLOCKID_CURVEFIT';\n        case 0x534c4344:\n            return 'WDF_BLOCKID_COMPONENT';\n        case 0x52414350:\n            return 'WDF_BLOCKID_PCA';\n        case 0x4552434d:\n            return 'WDF_BLOCKID_EM';\n        case 0x43444c5a:\n            return 'WDF_BLOCKID_ZELDAC';\n        case 0x4c414352:\n            return 'WDF_BLOCKID_RESPONSECAL';\n        case 0x20504143:\n            return 'WDF_BLOCKID_CAP';\n        case 0x50524157:\n            return 'WDF_BLOCKID_PROCESSING';\n        case 0x41524157:\n            return 'WDF_BLOCKID_ANALYSIS';\n        case 0x4c424c57:\n            return 'WDF_BLOCKID_SPECTRUMLABELS';\n        case 0x4b484357:\n            return 'WDF_BLOCKID_CHECKSUM';\n        case 0x44435852:\n            return 'WDF_BLOCKID_RXCALDATA';\n        case 0x46435852:\n            return 'WDF_BLOCKID_RXCALFIT';\n        case 0x4c414358:\n            return 'WDF_BLOCKID_XCAL';\n        case 0x48435253:\n            return 'WDF_BLOCKID_SPECSEARCH';\n        case 0x504d4554:\n            return 'WDF_BLOCKID_TEMPPROFILE';\n        case 0x56434e55:\n            return 'WDF_BLOCKID_UNITCONVERT';\n        case 0x52505241:\n            return 'WDF_BLOCKID_ARPLATE';\n        case 0x43454c45:\n            return 'WDF_BLOCKID_ELECSIGN';\n        case 0x4c584b42:\n            return 'WDF_BLOCKID_BKXLIST';\n        case 0x20585541:\n            return 'WDF_BLOCKID_AUXILARYDATA';\n        case 0x474c4843:\n            return 'WDF_BLOCKID_CHANGELOG';\n        case 0x46525553:\n            return 'WDF_BLOCKID_SURFACE';\n        case 0xffffffff:\n            return 'WDF_BLOCKID_ANY';\n        case 0x54455350:\n            return 'WDF_STREAM_IS_PSET';\n        case 0x4d545343:\n            return 'WDF_STREAM_IS_CSTM';\n        default:\n            throw new Error(`blockId ${blockId} is not defined`);\n    }\n}\n/**\n * Get descriptive measurement-unit from code.\n * @param code\n * @return human readable measurement data-unit\n */\nexport function getMeasurementUnits(code) {\n    switch (code) {\n        case 0:\n            return 'arbitrary units';\n        case 1:\n            return 'Raman shift (cm-1)';\n        case 2:\n            return 'wavenumber (nm)';\n        case 3:\n            return '10-9 metres (nm)';\n        case 4:\n            return 'electron volts (eV)';\n        case 5:\n            return '10-6 metres (um)';\n        case 6:\n            return 'counts';\n        case 7:\n            return 'electrons';\n        case 8:\n            return '10-3 metres (mm)';\n        case 9:\n            return 'metres (m)';\n        case 10:\n            return 'Temperature (K)';\n        case 11:\n            return 'Pascals (Pa)';\n        case 12:\n            return 'seconds (s)';\n        case 13:\n            return 'milliseconds (ms)';\n        case 14:\n            return 'Hours (hs)';\n        case 15:\n            return 'Days (ds)';\n        case 16:\n            return 'Pixels';\n        case 17:\n            return 'Intensity';\n        case 18:\n            return 'Relative Intensity';\n        case 19:\n            return 'Degrees';\n        case 20:\n            return 'Temperature (C)';\n        case 21:\n            return 'Temperature (F)';\n        case 22:\n            return 'Kelvin per minute';\n        case 23:\n            return 'Filetime as Windows FileTime';\n        case 24:\n            return 'Endmarker';\n        default:\n            throw new Error(`Unexpected value for unit: ${code}`);\n    }\n}\n/**\n * Get descriptive data-unit for an axis from code see [[`ListTypes`]]\n * @param unit\n * @return unit to use in axis\n */\nexport function getListType(unit) {\n    switch (unit) {\n        case 0:\n            return 'arbitrary'; /**< arbitrary type */\n        case 1:\n            return 'spectral'; /*deprecated, use frequency*/\n        case 2:\n            return 'Intensity'; /**< arbitrary type */\n        case 3:\n            return 'X position'; /**< arbitrary type */\n        case 4:\n            return 'Y axis position'; /**< arbitrary type */\n        case 5:\n            return 'Z axis (vertical) position'; /**< arbitrary type */\n        case 6:\n            return 'R axis (rotary) position';\n        case 7:\n            return 'Theta angle (rotary) position';\n        case 8:\n            return 'phi angle (rotary) position';\n        case 9:\n            return 'Temperature';\n        case 10:\n            return 'Pressure';\n        case 11:\n            return 'Time';\n        case 12:\n            return 'Derived';\n        case 13:\n            return 'Polarization';\n        case 14:\n            return 'Focus Track Z position';\n        case 15:\n            return 'Temperature Ramp rate';\n        case 16:\n            return 'Spectrum Data Checksum';\n        case 17:\n            return 'Bit Flags';\n        case 18:\n            return 'Elapsed Time Intervals';\n        case 19:\n            return 'Frequency';\n        case 20:\n            return 'Microplate Well Spatial X';\n        case 21:\n            return 'Microplate Well Spatial Y';\n        case 22:\n            return 'Location Index';\n        case 23:\n            return 'Well Reference';\n        case 24:\n            return 'End Marker';\n        default:\n            throw new Error(`Unexpected List unit: ${unit}`);\n    }\n}\n/**\n * Get type of measurement done from code see [[`OverallSpectraDescription`]]\n * @param type from the fileheader\n * @returns semantic type\n */\nexport function getOverallSpectraDescription(type) {\n    switch (type) {\n        case 0:\n            return 'unspecified';\n        case 1:\n            return 'single'; /** file contains a single spectrum */\n        case 2:\n            return 'series'; /* file contains multiple spectra with one common data origin (time, depth, temperature etc) */\n        case 3:\n            return 'map'; /* file contains multiple spectra with more that one common data origin. Typically area maps use X and Y spatial origins. Volume maps use X, Y and Z. The WMAP block normally defines the physical region.obeys the maparea object. check scan type for streamline, linefocus, etc. */\n        default:\n            throw new Error(`Expected: 0,1,2 or 3. Got ${type}`);\n    }\n}\n/**\n *\n * Retrieves the name of the data collection method used (scan type).\n * @param scanType the data collection method used\n * @return semantic scan type\n */\nexport function getScanType(scanType) {\n    switch (scanType) {\n        case 0x0000:\n            return 'WdfScanType_Unspecified';\n        /*< for data that does not represent a spectrum collected from a Renishaw system */\n        case 0x0001:\n            /*< for single readout off the detector. Can be spectrum or image */\n            return 'WdfScanType_Static';\n        case 0x0002:\n            /*< for readouts using continuous extended scanning. Can be spectrum or image (unlikely; impossible for x axis readout) */\n            return 'WdfScanType_Continuous';\n        case 0x0003:\n            /*< for multiple statics taken at slightly overlapping ranges, then 'stitched' together to a single extended spectrum. Can be spectrum or image (unlikely) */\n            return 'WdfScanType_StepRepeat';\n        case 0x0004:\n            /*< filter image and filter scan both supported purely for historical reasons */\n            return 'WdfScanType_FilterScan';\n        case 0x0005:\n            return 'WdfScanType_FilterImage';\n        case 0x0006:\n            /*< must be a WdfType_Map measurement */\n            return 'WdfScanType_StreamLine';\n        case 0x0007:\n            /*< must be a WdfType_Map measurement */\n            return 'WdfScanType_StreamLineHR';\n        case 0x0008:\n            /*< for scans performed with a point detector */\n            return 'WdfScanType_Point';\n        /* The values below for multitrack and linefocus are flags that can be ORed with the above integer values\n         *  - multitrack discrete on fixed grating systems will only be static\n         *  - multitrack discrete could, on a fibre-probe system, be continuous, stitched, or static\n         *  - linefocusmapping similarly couild be continuous, stitched, or static, but at time of writing is static\n         */\n        case 0x0100:\n            /*< result is not a multitrack file */\n            return 'WdfScanType_MultitrackStitched';\n        case 0x0200:\n            /*< result is multitrack file (wdf header has multitrack flag set).*/\n            return 'WdfScanType_MultitrackDiscrete';\n        case 0x0400:\n            /*< Could be Static, Continuous (not yet implemented, impossible for x axis readout), or StepAndRepeat (not yet implemented) */\n            return 'WdfScanType_LineFocusMapping';\n        default:\n            throw new Error(`${scanType} is not in the set of possible values`);\n    }\n}\n/**\n * Analyzes the information in lower and high part of the 64B number.\nSpectrum flags are details to be aware of when reading the spectra.\n  @param lower lower first 32 bytes\n  @param higher higher 32 bytes\n  @return Object with all the flags*/\nexport function getWdfSpectrumFlags(flag) {\n    return {\n        saturated: !!(flag & 1n),\n        error: !!(flag >> 1n),\n        cosmicRay: !!(flag >> 2n),\n        errorCode: Number(flag >> 31n),\n    };\n}\n/**\n * Gets the parameter in each bit of the flag.\n * These parameters specify a particular file property\n * @param flag First byte of the main header\n * @returns The parameters\n */\nexport function getFlagParameters(flag) {\n    const xyxy = !!(flag & 1n);\n    const checkSum = !!(flag >> 1n);\n    const cosmicRayRemoval = !!(flag >> 2n);\n    const multitrack = !!(flag >> 3n);\n    const saturation = !!(flag >> 4n);\n    const fileBackup = !!(flag >> 4n);\n    const temporary = !!(flag >> 6n);\n    const slice = !!(flag >> 7n);\n    return {\n        xyxy,\n        checkSum,\n        cosmicRayRemoval,\n        multitrack,\n        saturation,\n        fileBackup,\n        temporary,\n        slice,\n    };\n}\n/**\n * Convert a Windows FILETIME to a Javascript Date\n * intervals since January 1, 1601 (UTC)\n * @param fileTime - the number of 100ns in Windows Filetime\n * @returns Milliseconds since Epoch\n * [adapted from](https://balrob.blogspot.com/2014/04/windows-filetime-to-javascript-date.html)\n **/\nexport function windowsTimeToMs(fileTime) {\n    return Number(fileTime) / 10000 - 11644473600000;\n}\n/**\n * Reads the header for each set in an origin block.\n * @param buffer\n * @returns header of the set\n */\nexport function getHeaderOfSet(buffer) {\n    const typeAndFlag = buffer.readUint32();\n    /* >>> because it is unsigned integer */\n    const flag = typeAndFlag >>> 31 === 1 ? 'important' : 'alternative';\n    const type = getListType(typeAndFlag & ((1 << 14) - 1));\n    const unit = getMeasurementUnits(buffer.readUint32());\n    const label = buffer.readChars(16).replace(/\\x00/g, '');\n    return { flag, type, unit, label };\n}\n/**\n * Build the semantic versioning.\n * @param buffer WDF buffer\n * @return Object containing WDF semantic versioning\n */\nexport function getAppVersion(version) {\n    const [major, minor, patch, build] = new Uint16Array(version.buffer);\n    return { major, minor, patch, build };\n}\n/**\n * Calculate the universal identifier (as a string) for files and blocks\n * @param buffer WDF buffer\n * @param Id values for Id in Uint8Array\n * @return uuid as a string\n */\nexport function getUUId(Id) {\n    let version = new Uint32Array(Id.buffer);\n    return version.join('.');\n}\n//# sourceMappingURL=maps.js.map","import { getBlockTypes, getUUId } from './maps';\n/**\n * Block Header Parsing - Block's first 16 bytes\n * @param buffer Wdf as IOBuffer, i.e `new IOBuffer(file.wdf)`.\n * @param offset byte number where to start reading | uses current offset\n * @return blockHeader Block metadata\n */\nexport function readBlockHeader(buffer, offset) {\n    /*an offset can be assigned manually if desired*/\n    if (offset)\n        buffer.offset = offset;\n    const blockType = getBlockTypes(buffer.readUint32());\n    const uuid = getUUId(buffer.readBytes(4));\n    const blockSize = Number(buffer.readBigUint64()); // Bytes\n    /* assign with appropriate type */\n    return { blockType, uuid, blockSize };\n}\n//# sourceMappingURL=readBlockHeader.js.map","import { getMeasurementUnits, getListType, getWdfSpectrumFlags, windowsTimeToMs, getHeaderOfSet, } from './maps';\nimport { readBlockHeader } from './readBlockHeader';\n/**\n * Parses Block body according to the specific block type\n * @param buffer - from new IOBuffer(WdfFile)\n * @param fileHeader - full file header | {nSpectra,nPoints, yListCount}\n * @param offset - Where the block's body starts | uses current buffer offset\n * @return array of datapoints and current buffer offset\n */\nexport function readBlock(buffer, fileHeader, offset) {\n    /* an offset can be assigned manually if desired */\n    if (offset)\n        buffer.offset = offset;\n    /* use part of the file header */\n    const { nSpectra, nPoints, yListCount } = fileHeader;\n    /* set header properties, we further populate it later */\n    let thisBlock = readBlockHeader(buffer);\n    /* use part of the block header */\n    const { blockSize, blockType } = thisBlock;\n    const headerSize = 16;\n    const bodySize = blockSize - headerSize;\n    /* don't analyze YLIST if no image */\n    if (blockType === 'WDF_BLOCKID_YLIST' && yListCount <= 1) {\n        /* The YList block stores values for 2D image */\n        buffer.offset += bodySize;\n        /* just returns the header */\n        return thisBlock;\n    }\n    /* using case a:{} scopes the variables */\n    switch (blockType) {\n        case 'WDF_BLOCKID_DATA': {\n            let spectras32 = [];\n            for (let i = 0; i < nSpectra; i++) {\n                let currentSpectra = new Float32Array(nPoints);\n                for (let j = 0; j < nPoints; j++) {\n                    currentSpectra[j] = buffer.readFloat32();\n                }\n                spectras32.push(currentSpectra);\n            }\n            thisBlock.spectra = spectras32;\n            break;\n        }\n        case 'WDF_BLOCKID_XLIST':\n        case 'WDF_BLOCKID_YLIST': {\n            /*XList contains (npoint) unit values for the x axis.*/\n            const type = buffer.readUint32();\n            const units = buffer.readUint32();\n            /* only for the XList block nFloats=nPoints. */\n            const nXorYPoints = (bodySize - 8) / 4;\n            let valuesXorY = new Float32Array(nXorYPoints);\n            for (let i = 0; i < nXorYPoints; i++) {\n                valuesXorY[i] = buffer.readFloat32();\n            }\n            const list = {\n                type: getListType(type),\n                units: getMeasurementUnits(units),\n                /* for only-spectral files, YLIST.list will be a single meaningless number (array length 1) */\n                values: valuesXorY,\n            };\n            if (blockType.includes('XLIST')) {\n                thisBlock.xList = list;\n            }\n            else {\n                thisBlock.yList = list;\n            }\n            break;\n        }\n        case 'WDF_BLOCKID_ORIGIN': {\n            let data = [];\n            const nDataOriginSets = buffer.readUint32();\n            /* iterate over each of the \"subblocks\", or sets. */\n            for (let set = 0; set < nDataOriginSets; set++) {\n                /* each set has a header with same structure */\n                const headerOfSet = getHeaderOfSet(buffer);\n                data.push(headerOfSet);\n                const typeOfSet = headerOfSet.label;\n                switch (typeOfSet) {\n                    case 'X':\n                    case 'Y': {\n                        let os = new Float64Array(nSpectra);\n                        for (let i = 0; i < nSpectra; i++) {\n                            os[i] = buffer.readFloat64();\n                        }\n                        data[set].axisOrigins = os;\n                        break;\n                    }\n                    case 'Flags': {\n                        /* Spectra errors & metadata */\n                        let spectrumFlags = [];\n                        for (let i = 0; i < nSpectra; i++) {\n                            spectrumFlags[i] = getWdfSpectrumFlags(buffer.readBigUint64());\n                        }\n                        data[set].spectrumFlags = spectrumFlags;\n                        break;\n                    }\n                    case 'Time': {\n                        let spectrumDates = [];\n                        for (let i = 0; i < nSpectra; i++) {\n                            spectrumDates[i] = windowsTimeToMs(buffer.readBigUint64());\n                        }\n                        data[set].spectrumDates = spectrumDates;\n                        break;\n                    }\n                    default: {\n                        buffer.offset += nSpectra * 8;\n                        //data[set].otherValues = new BigUint64Array(bodyOfSet);\n                        break;\n                    }\n                }\n            }\n            thisBlock.origins = data;\n            break;\n        }\n        /* default case for other not analyzed (but read) file blocks */\n        default:\n            buffer.offset += bodySize;\n    }\n    return thisBlock;\n}\n//# sourceMappingURL=readBlock.js.map","/**\n * Reads n groups of bytes of certain length\n * @param buffer WDF buffer\n * @param nGroups number of bytes\n * @return array of X-bit bytes.\n */\nexport const readBytes64 = (buffer, nGroups) => {\n    if (nGroups === 0) {\n        throw new Error('nGroups has to be different from 0');\n    }\n    let groupsOf64 = [];\n    for (let i = 0; i < nGroups; i++) {\n        groupsOf64.push(Number(buffer.readBigUint64()));\n    }\n    return groupsOf64;\n};\n/**\n * Checks whether the wdf file is corrupted.\n * @param blockTypes all the blocks found in file (excluding file header)\n * @param type Describing the what kind of spectral data we have. See\n * [[`OverallSpectraDescription`]].\n * @return void for sane file | throws an error with a list of missing blocks\n */\nexport function isCorrupted(blockTypes, type) {\n    /*\n     standard blocks which must be available in any wdf file\n     they **do not** necessarily appear in a specific order or position\n     in wdf file\n  */\n    let standardBlocks = [\n        'WDF_BLOCKID_DATA',\n        'WDF_BLOCKID_YLIST',\n        'WDF_BLOCKID_XLIST',\n        'WDF_BLOCKID_ORIGIN',\n    ];\n    // these must exist only for particular measurement type\n    if (type === 'series' || type === 'map') {\n        standardBlocks.push('WDF_BLOCKID_MAPAREA');\n    }\n    // here we store any missing block\n    let notFound = [];\n    // these blocks must exist\n    standardBlocks.forEach((stb) => {\n        if (!blockTypes.includes(stb))\n            notFound.push(stb);\n    });\n    if (notFound.length !== 0) {\n        throw new Error(`File is corrupt. Missing blocks: ${notFound.join(' ,')}`);\n    }\n}\n//# sourceMappingURL=utilities.js.map","import { getBlockTypes, getMeasurementUnits, getOverallSpectraDescription, getScanType, getUUId, getAppVersion, getFlagParameters, windowsTimeToMs, } from './maps';\nimport { readBytes64 } from './utilities';\n/**\n * File Header parsing - First 512 bytes. The file header is the first block of the file\n * but it is different from the rest of the block headers. It has many more properties that\n * describe the file, and it is 512B long, as opposed to 16B.\n * @param buffer WDF buffer as IOBuffer i.e `new IOBuffer(file.wdf)`\n * @return File Metadata\n */\nexport function readFileHeader(buffer) {\n    /* make sure the offset is 0 to read the file header */\n    buffer.offset = 0;\n    /* next we determine all the properties included in the file header */\n    const signature = getBlockTypes(buffer.readUint32());\n    if (signature !== 'WDF_BLOCKID_FILE') {\n        throw new Error(`expected WDF_BLOCKID_FILE, got ${signature}`);\n    }\n    const version = buffer.readUint32();\n    if (version !== 1) {\n        /* we may include try block for 2>version>1.0 */\n        throw new Error(`Script parses version 1. Found v.${version}`);\n    }\n    const fileHeaderSize = Number(buffer.readBigUint64());\n    const flags = getFlagParameters(buffer.readBigUint64());\n    const uuid = getUUId(buffer.readBytes(16));\n    const unused0 = Number(buffer.readBigUint64());\n    const unused1 = buffer.readUint32();\n    const nTracks = buffer.readUint32();\n    const status = buffer.readUint32();\n    const nPoints = buffer.readUint32();\n    const nSpectra = Number(buffer.readBigUint64());\n    const nCollected = Number(buffer.readBigUint64());\n    const nAccum = buffer.readUint32();\n    const yListCount = buffer.readUint32();\n    const xListCount = buffer.readUint32();\n    const originCount = buffer.readUint32();\n    const appName = buffer.readUtf8(24).replace(/\\x00/g, '');\n    /* tested replaceAll('\\x00\\','') but it is slower */\n    const appVersion = getAppVersion(buffer.readBytes(8));\n    const scanType = getScanType(buffer.readUint32());\n    const type = getOverallSpectraDescription(buffer.readUint32());\n    const timeStart = windowsTimeToMs(buffer.readBigUint64());\n    const timeEnd = windowsTimeToMs(buffer.readBigUint64());\n    const units = getMeasurementUnits(buffer.readUint32());\n    const laserWavenum = buffer.readFloat32();\n    const spare = readBytes64(buffer, 6);\n    const user = buffer.readUtf8(32).replace(/\\x00/g, '');\n    const title = buffer.readUtf8(160).replace(/\\x00/g, '');\n    const padding = readBytes64(buffer, 6);\n    const free = readBytes64(buffer, 4);\n    const reserved = readBytes64(buffer, 4);\n    const fileHeader = {\n        title,\n        type,\n        units,\n        nSpectra,\n        nPoints,\n        scanType,\n        laserWavenum,\n        yListCount,\n        xListCount,\n        nCollected,\n        nAccum,\n        originCount,\n        flags,\n        nTracks,\n        status,\n        user,\n        timeStart,\n        timeEnd,\n        signature,\n        appName,\n        appVersion,\n        version,\n        fileHeaderSize,\n        uuid,\n        spare,\n        unused0,\n        unused1,\n        padding,\n        free,\n        reserved,\n    };\n    return fileHeader;\n}\n//# sourceMappingURL=readFileHeader.js.map","import { IOBuffer } from 'iobuffer';\nimport { readBlock } from './readBlock';\nimport { readFileHeader } from './readFileHeader';\nimport { isCorrupted } from './utilities';\n/**\n * Parses a .wdf Raman file and outputs all the parsed information\n *\n * @param data WDF file buffer\n * @return JSON Object containing all the parsed information from the WDF file\n */\nexport function parse(data) {\n    const buffer = new IOBuffer(data);\n    const fileHeader = readFileHeader(buffer);\n    let blocks = [];\n    let blockHeaderTypes = [];\n    while (buffer.offset < buffer.length) {\n        const block = readBlock(buffer, fileHeader);\n        blocks.push(block);\n        blockHeaderTypes.push(block.blockType);\n    }\n    /* check if the block headers are complete */\n    isCorrupted(blockHeaderTypes, fileHeader.type);\n    return { fileHeader, blocks };\n}\n//# sourceMappingURL=parse.js.map","import { Analysis } from 'common-spectrum';\nimport { parse } from 'wdf-parser';\n\nexport function fromWDF(arrayBuffer) {\n  let analysis = new Analysis();\n\n  const parsed = parse(arrayBuffer);\n\n  const fileHeader = parsed.fileHeader;\n  const title = fileHeader.title;\n\n  const xVariable = getXVariable(parsed.blocks);\n  const yVariables = getYVariables(parsed.blocks);\n  const origins = getOrigins(parsed.blocks);\n\n  for (let i = 0; i < yVariables.length; i++) {\n    const yVariable = yVariables[i];\n    let origin = origins[i] || {};\n\n    analysis.pushSpectrum(\n      { x: { ...xVariable }, y: yVariable },\n      {\n        dataType: 'Raman',\n        title,\n        meta: { ...fileHeader, ...origin },\n      },\n    );\n  }\n  return analysis;\n}\n\nfunction getXVariable(blocks) {\n  const xBlock = blocks.find(\n    (block) => block.blockType === 'WDF_BLOCKID_XLIST',\n  );\n  return {\n    label: xBlock.xList.units.replace(/(.*) \\((.*)\\)/, '$1'),\n    units: xBlock.xList.units.replace(/(.*) \\((.*)\\)/, '$2'),\n    data: xBlock.xList.values,\n  };\n}\n\nfunction getYVariables(blocks) {\n  const dataBlock = blocks.find(\n    (block) => block.blockType === 'WDF_BLOCKID_DATA',\n  );\n  const yVariables = [];\n  for (let spectrum of dataBlock.spectra) {\n    yVariables.push({\n      label: 'Arbitrary Intensity',\n      data: spectrum,\n    });\n  }\n  return yVariables;\n}\n\nfunction getOrigins(blocks) {\n  const originBlock = blocks.find(\n    (block) => block.blockType === 'WDF_BLOCKID_ORIGIN',\n  );\n  if (!originBlock) return [];\n\n  const xPositions = originBlock.origins.find((entry) => entry.label === 'X');\n  const yPositions = originBlock.origins.find((entry) => entry.label === 'Y');\n\n  if (!xPositions || !yPositions) return [];\n\n  const origins = [];\n  for (let i = 0; i < xPositions.axisOrigins.length; i++) {\n    origins.push({\n      xPositionUnits: xPositions.unit,\n      yPositionUnits: yPositions.unit,\n      xPosition: xPositions.axisOrigins[i],\n      yPosition: yPositions.axisOrigins[i],\n    });\n  }\n  return origins;\n}\n","import { JSGraph as OriginalJSGraph } from 'common-spectrum';\n\nimport { getAnnotations } from './jsgraph/getAnnotations.js';\n\nexport {\n  AnalysesManager,\n  Analysis,\n  autoPeakPicking,\n  fromJcamp,\n  peakPicking,\n  toJcamp,\n  toJcamps,\n} from 'common-spectrum';\n\nexport const JSGraph = { ...OriginalJSGraph, getAnnotations };\n\nexport * from './utils/surfaceAnalysis.js';\nexport * from './from/fromSPC.js';\nexport * from './from/fromWDF.js';\n"],"names":["toString","Object","prototype","isAnyArray","value","tag","call","endsWith","includes","getOutputArray","output","length","undefined","TypeError","Float64Array","xMedian","input","options","exact","array","slice","middleIndex","calcMiddle","median","quickSelect","medianNext","low","high","middle","currentLow","currentHigh","swap","i","j","temp","Math","floor","xCheck","minLength","Error","xFindClosestIndex","target","sorted","abs","index","diff","Number","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","x","fromIndex","toIndex","from","to","xAbsoluteSum","sum","xAdd","array1","array2","isConstant","constant","array3","xApplyFunctionStr","variableLabel","fctString","fct","Function","replaceAll","toReturn","isNaN","xMultiply","max","arguments","_options$fromIndex","_options$toIndex","isInteger","maxValue","min","minValue","rescale","Array","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","defineProperty","matrix","require$$0","require$$1","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","inspectData","rows","columns","maxI","maxJ","result","loop","get","line","push","formatNumber","join","num","formatNumber2","padEnd","len","str","fix","toFixed","startsWith","exp","toExponential","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","set","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","expm1","fround","log","log1p","log10","log2","round","sign","sin","sinh","sqrt","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","checkNonEmpty","isEmpty","sumByRow","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","varianceByColumn","varianceAll","size","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","row","column","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","eye","diag","data","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","NEGATIVE_INFINITY","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","dot","cumulativeSum","vector2","vector1","mmul","other","Bcolj","s","mpow","scalar","bb","e","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","console","warn","embed","mat","r","c","resultat","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","entries","product","standardDeviation","center","Symbol","iterator","col","values","for","isArrayOfNumbers","every","element","randomInt","diagonal","identity","negate","tensorProduct","#initData","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","reverse","sideIndex","toCompact","compact","fromCompact","compactSize","JSON","stringify","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","compactLength","BaseView","MatrixColumnView","MatrixColumnSelectionView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowView","MatrixRowSelectionView","MatrixSelectionView","MatrixSubView","MatrixTransposeView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","wrap","LuDecomposition","lu","pivotVector","pivotSign","t","LUcolj","kmax","LU","isSingular","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","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","d","subMatrix0","subMatrix1","subMatrix2","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","linearDependencies","results","Abis","svd","pseudoInverse","svdSolution","covariance","xMatrix","yMatrix","yIsSame","cov","correlation","sdx","sdy","corr","EigenvalueDecomposition","assumeSymmetric","tred2","tql2","H","ort","orthes","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","hh","dl1","c3","el1","s2","tst1","nn","exshift","z","iter","w","ra","sa","vr","vi","notlast","cdivres","cdiv","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","B","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","counter","xResidual","residual","yResidual","betas","CHO","EVD","Matrix_1","MatrixTransposeView_1","NIPALS","Nipals","SVD","_default","default","inverse_1","solve_1","xMean","sumValue","xVariance","sqrError","xStandardDeviation","xDivide","xEnsureFloat64","createNumberArray","ArrayConstructor","createFromToArray","includeFrom","includeTo","distribution","delta","base","firstExponent","object","replacer","space","internalReplacer","key","ArrayBuffer","isView","xMaxValue","xMinValue","xIsEquallySpaced","tolerance","maxDx","minDx","MAX_SAFE_INTEGER","absoluteDifference","xIsMonotonic","at","xMedianAbsoluteDeviation","averageDeviations","mad","xMinMaxValues","Y1","P1","Q1","Y2","P2","Q2","Y3","P3","Q3","Y4","P4","Q4","Y5","P5","Q5","polyval","coef","calc","P","Q","erfcinv","val","simpleNormInv","magnitudeMode","SQRT2","simpleNormInvNumber","xNoiseSanPlot","cutOff","refine","scaleFactor","factorStd","fixOffset","prepareData","medianIndex","firstNegativeValueIndex","findIndex","lastPositiveValueIndex","signPositive","signNegative","cutOffDist","determineCutOff","pIndex","initialNoiseLevelPositive","skyPoint","initialNoiseLevelNegative","nIndex","noiseLevelPositive","noiseLevelNegative","cloneSignPositive","cloneSignNegative","cutOffSignalsIndexPlus","cutOffSignalsIndexNeg","cutOffSignals","correctionFactor","effectiveCutOffDist","refinedCorrectionFactor","positive","negative","snr","sanplot","generateSanPlot","fromTo","considerList","step","indexMax","minKi","whereToCutStat","top","elementsOfCutOff","filter","averageValue","kiSqrt","logBaseY","logOfBase","xAxis","_e","xNoiseStandardDeviation","sd","xNorm","xSum","xNormed","algorithm","absoluteSumValue","absoluteSum","currentMaxValue","sumFactor","String","xPadding","fromEnd","toEnd","xParetoNormalization","sqrtSD","xRescale","xRolling","window","padding","padded","subarray","xRollingAverage","xRollingMedian","xyCheck","xyEnsureGrowingX","prevX","currentIndex","zonesNormalize","zones","exclusions","map","zone","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","zoneIndex","zonesWithPoints","numberOfPoints","normalizedZones","zonesWithNumberOfPoints","totalSize","reduce","previous","current","unitsPerPoint","currentTotal","tempZone","tempZoneNumberOfPoints","equallySpacedSlot","xLength","halfStep","lastStep","start","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","main","integral","x0","x1","slope","intercept","equallySpacedSmooth","initialOriginalStep","lastOriginalStep","MIN_SAFE_INTEGER","sumAtMin","sumAtMax","getSlope","y0","y1","xyEquallySpaced","variant","zonesWithPointsRes","xResult","yResult","zoneResult","processZone","concat","xyFilterX","currentZoneIndex","newX","newY","position","xyFilterXPositive","xyGrowingX","xyIntegration","currentxyIntegration","xyMaxClosestYPoint","targetIndex","previousIndex","xyMaxY","xyMinClosestYPoint","minY","matrixCreateEmpty","nbRows","nbColumns","matrixCheck","firstLength","matrixMinMaxZ","matrixZRescale","addStyle","serie","spectrum","color","opacity","lineWidth","match","toUpperCase","replace","style","width","dash","label","id","COLORS","getJSGraph","analyses","colors","opacities","linesWidth","selector","normalization","yAxis","series","xLabel","yLabel","xUnits","units","yUnits","analysis","spectra","getNormalizedSpectra","firstSpectrum","variables","logScale","axes","unit","unitWrapperBefore","unitWrapperAfter","flipped","display","getNormalizationAnnotations","boundary","annotations","exclusion","ignore","annotation","strokeWidth","fillColor","centerMean","centerMedian","normed","divideBySD","paretoNormalization","ldlSymbolic","Ap","Ai","Lp","Parent","Lnz","Flag","kk","p2","ldlNumeric","Ax","Li","Lx","D","Pattern","lKi","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPerm","ldlPermt","prepare","M","Pinv","Mt","ar","ac","LNZ","coloffset","adr","bp1","cuthillMckee_1","cuthillMckee","compareNum","list","adj","visited","toVisit","eol","ptr","nbhd","getClosestNumber","goal","closest","prev","curr","getCloseIndex","indexOf","updateSystem","weights","nbPoints","newVector","next","getDeltaMatrix","lambda","lowerTriangularNonZeros","permutationEncodedArray","getControlPoints","controlPoints","Int8Array","forEach","indexFrom","indexTo","airPLS","baseline","iteration","sumNegDifferences","corrected","stopCriterion","getStopCriterion","prevNegSum","cho","cholesky","applyCorrection","absChange","_typeof","obj","sequentialFill","_options","_options$from","_options$to","_options$size","isArray","_i","airPLSBaseline","ys","numberPoints","regressionOptions","airpls","correctedSpectrum","checkArrayLength","BaseRegression","new","predict","_predict","xVal","train","precision","toLaTeX","score","y2","ySum","chi2","rmsd","xSquared","ySquared","xY","maybeToPrecision","number","figures","toPrecision","PolynomialRegression","degree","powers","coefficients","regress","_toFormula","isLaTeX","sup","closeSup","times","fn","load","json","interceptAtZero","nCoefficients","F","FT","A","baselineCorrectionRegression","Regression","fitting","oldFitting","regression","iterativePolynomialBaseline","rollingAverageBaseline","defaults","actualOptions","rollingBall","maxima","minima","windowM","windowS","windowLeft","windowRight","rollingBallBaseline","rollingMedianBaseline","baselineFct","sgg","xs","windowSize","derivative","polynomial","half","np","ans","fullWeights","hs","constantH","wg1","wg2","d1","d2","getHs","wg","gramPoly","Grampoly","genFact","gf","weight","firstDerivative","secondDerivative","thirdDerivative","savitzkyGolay","ensureGrowing","reverseIfNeeded","equallySpaced","filterX","setMaxX","existingMax","setMinX","existingMin","optimizeTop","peaks","peak","beta","gamma","xCurrent","xPrevious","gsd","noiseLevel","sgOptions","smoothY","maxCriteria","minMaxRatio","realTopDetection","noiseInfo","xValue","yData","dY","ddY","maxY","yThreshold","dX","lastMax","lastMin","minddY","intervalL","intervalR","lastK","minddYIndex","deltaX","possible","minDistance","currentDistance","crypto","randomUUID","inflectionPoints","GAUSSIAN_EXP_FACTOR","LN2","ROOT_PI_OVER_LN2","PI","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","erfinv","ln1MinusXSqrd","lnEtcBy2Plus2","firstSqrt","secondSqrt","Gaussian","fwhm","gaussianWidthToFWHM","fwhmToWidth","gaussianFwhmToWidth","widthToFWHM","gaussianFct","getArea","height","calculateGaussianHeight","getGaussianArea","getFactor","area","getGaussianFactor","getData","getGaussianData","calculateHeight","getParameters","shape","Lorentzian","lorentzianFwhmToWidth","lorentzianWidthToFWHM","lorentzianFct","getLorentzianArea","getLorentzianFactor","getLorentzianData","calculateLorentzianHeight","halfResidual","quantileFunction","LorentzianDispersive","lorentzianDispersiveFct","_height","getLorentzianDispersiveData","PseudoVoigt","mu","pseudoVoigtFwhmToWidth","pseudoVoigtWidthToFWHM","pseudoVoigtFct","getPseudoVoigtArea","getPseudoVoigtFactor","calculatePseudoVoigtHeight","getPseudoVoigtData","GeneralizedLorentzian","generalizedLorentzianFwhmToWidth","generalizedLorentzianWidthToFWHM","generalizedLorentzianFct","getGeneralizedLorentzianArea","getGeneralizedLorentzianFactor","getGeneralizedLorentzianData","calculateGeneralizedLorentzianHeight","getShape1D","kind","getSumOfShapes","internalPeaks","sumOfShapes","parameters","totalY","peakX","shapeFctKey","shapeFct","assert","message","DefaultParameters","init","peakShape","gradientDifference","properties","getInternalPeaks","minMaxY","shiftValue","normalizedPeaks","propertiesValues","parameter","property","propertyValue","getNormalizedValue","generalParameterValue","defaultParameterValues","checkOptions","timeout","initialValues","damping","dampingStepUp","dampingStepDown","errorTolerance","centralDifference","improvementThreshold","minValues","maxValues","parLen","gradientDifferenceArray","getGradientDifferenceArray","filler","getFiller","checkTimeout","getCheckTimeout","weightSquare","_","dataLength","endTime","Date","now","errorCalculation","parameterizedFunction","func","gradientFunction","evaluatedData","params","paramFunction","nbParams","param","auxParams","funcParam","point","funcParam2","matrixFunction","gradientFunc","residualError","inverseMatrix","jacobianWeightResidualError","perturbations","levenbergMarquardt","checkedOptions","optimalError","optimalParameters","converged","previousError","improvementMetric","parameterValues","parameterError","iterations","antiLowerConvexHull","currentPoint","moveOn","det","leftTurn","moveBack","item","direct","objectiveFunction","lowerBoundaries","upperBoundaries","epsilon","tolerance2","initialState","diffBorders","numberOfRectangles","totalIterations","unitaryCoordinates","middlePoint","bestCurrentValue","fCalls","smallerDistance","edgeSizes","diagonalDistances","functionValues","differentDistances","smallerValuesByDistance","choiceLimit","originalCoordinates","getMinIndex","S1","optimumValuesIndex","S3","a1","b1","a2","b2","S2","Uint32Array","xHull","yHull","lowerIndexHull","largerSide","largeSidesIndex","bestFunctionValues","firstMiddleCenter","secondMiddleCenter","firstMiddleValue","secondMiddleValue","firstMinValue","secondMinValue","ix1","ix2","Set","minFunctionValue","pair","finalState","minimizer","optima","directOptimization","getObjectiveFunction","selectMethod","optimizationOptions","optimize","normalizedY","gradientDifferences","optimization","fitted","fittedValues","newPeaks","newPeak","calibrateX","targetX","nbPeaks","gsdOptions","xFunction","function","yFunction","setMaxY","setMinY","filterXY","filters","logs","filterFct","Filters","time","getNormalizedSpectrum","newSpectrum","title","dataType","meta","structuredClone","isMonotonic","global","factory","module","exports","this","isString","isFiniteImpl","isNumber","uniq","strings","seen","hasOwnProperty","compareArray","assign","keys","mulSafe","decimals","arg","getFractional","divSafe","den","invDen","QtyError","err","create","stack","throwIncompatibleUnits","left","right","UNITS","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","numerator","denominator","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","unitKeys","substr","getKinds","toLowerCase","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","unitSignatureVector","isBase","toBase","SIGN","INTEGER","SIGNED_INTEGER","FRACTION","FLOAT","EXPONENT","SCI_NUMBER","SIGNED_NUMBER","QTY_STRING","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","parse","trim","exec","scalarMatch","parseFloat","bottom","nx","UNIT_TEST_REGEX","test","parseUnits","PREFIX_REGEX","UNIT_REGEX","BOUNDARY_REGEX","UNIT_MATCH","UNIT_MATCH_REGEX","parsedUnitsCache","cached","unitMatch","normalizedUnits","globalParse","isQty","Qty","initValue","initUnits","assertValidConstructorArgs","baseScalar","_conversionCache","isDefinitionObject","updateBaseScalar","isTemperature","KINDS","knownSignature","isDegrees","subtractTemperatures","lhs","rhs","lhsUnits","rhsConverted","dstDegrees","getDegreeUnits","subtractTempDegrees","deg","tempDegrees","addTempDegrees","toDegrees","src","dst","srcDegK","toDegK","dstUnits","dstScalar","qty","toTemp","toTempK","isCompatible","isInverse","baseUnitCache","toBaseUnits","toFloat","isUnitless","toPrec","precQuantity","precRoundedResult","swiftConverter","srcUnits","srcQty","dstQty","eq","convert","converter","op1","op2","numdenscale","cleanTerms","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","direction","prefix","prefixValue","combinedPrefixValue","prop","compareTo","lt","lte","gt","gte","same","_isBase","NestedMap","childMap","defaultFormatter","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","out","outScalar","format","targetQty","stringifiedUnitsCache","stringified","isUnity","simplify","getOutputNames","unitNames","token","tokenNext","unitCounts","acc","unitCounter","unitCount","version","convertUnit","fromUnit","toUnit","normalize","testRegExp","ensureRegexp","string","parts","stringToRegexp","flags","getConvertedVariable","variable","newUnits","getXYSpectra","selectedSpectra","labels","xVariable","yVariable","split","variableNames","getPossibleVariable","variableName","convertibleUnits","regexpLabel","upper","hasOwn","lower","possibleFiltered","getXYSpectrum","Analysis","spectrumCallback","cache","ids","fromJSON","pushSpectrum","standardizeData","getXY","normalizedSpectra","getSpectrum","getXLabel","getYLabel","analysisOptions","appendDistinctParameter","appendDistinctValue","AnalysesManager","analysesManager","addAnalysis","getAnalysisIndex","getAnalyses","processedAnalysisIds","has","getSpectra","getAnalysisBySpectrumId","getSpectrumById","getDistinctTitles","getDistinctUnits","getDistinctLabelUnits","normalizeLabelUnits","getDistinctLabels","getDistinctDataTypes","getDistinctMeta","removeAllAnalyses","removeAnalysis","originalLabel","originalUnits","search","isUtf8","buf","ensureString","blob","encoding","guessEncoding","decoder","TextDecoder","decode","uint8","Uint8Array","buffer","byteOffset","byteLength","isutf8","parseString","lowercase","gyromagneticRatioMHzT","getGyromagneticNucleus","nucleus","gyromagneticRatio","nucleusNumber","filteredNuclei","getGyromagneticRatio","realNucleus","fromEntries","_ref","quickSelectMedian","$","ee","te","ms","pageValue","chromatogram","ne","E","logger","xFactor","info","yFactor","isXYdata","firstX","firstY","o","codePointAt","C","N","S","O","R","re","isPeaktable","me","ce","isXYAdata","oe","lastY","ue","ie","minX","maxX","minZ","maxZ","noise","ntuples","symbol","find","some","se","Z","nbContourLevels","I","le","K","noiseMultiplier","zValue","lines","T","segments","G","noContour","contourLines","minMax","observeFrequency","shiftOffsetVal","lastX","$NUC2","$NUC1","yType","xType","W","pageSymbol","J","intensity","pe","twoD","wantXY","profiling","keepSpectra","dynamicTyping","ae","charAt","vardim","varname","ge","removeComments","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","withoutXY","noTrimRegExp","mt","be","debug","flatten","children","datatable","dataClass","jcampDX","jcampCS","shiftOffsetNum","vartype","varform","page","sampleDescription","pop","de","fromJcamp","jcamp","addJcamp","converted","entry","currentSpectrum","addInfoData","header","checkNumberOrArray","getExtremeValues","firstRow","firstLast","creatorNtuples","owner","origin","resInfo","varName","varType","varDim","isDependent","getFactorNumber","getBestFactor","onlyInteger","extremeValues","getNumber","rounded","peakTableCreator","rescaleAndEnsureInteger","newLine","pseudoDigits","SQZ_P","SQZ_N","DIF_P","DIF_N","DUP","maxLinelength","vectorEncoder","intervalX","xyEncoding","fixEncoding","squeezedEncoding","differenceEncoding","differenceDuplicateEncoding","commaSeparatedValuesEncoding","packedEncoding","separator","outputData","squeezedDigit","mult","charCount","encodedData","encodedNumber","diffData","numDiff","differenceDigit","duplicateDigit","sqzDigits","charCodeAt","substring","diffDigits","dupDigits","xyDataCreator","fromVariables","forceNtuples","jcampOptions","xData","toJcamps","jcamps","getJcamp","toJcamp","peakPicking","isMax","optimizedPeak","optimizedIndex","maximumY","optimizePeak","optimized","autoPeakPicking","normalizationOptions","minPeakWidth","tempSpectrum","normalizedSpectrum","xyClosestYPoint","JSGraph","getAnnotations","strokeColor","creationFct","annotationAbsorbance","showKind","showAssignment","assignmentAngle","text","anchor","wavenumber","dy","assignment","angle","dx","surfaceAnalysis","integrations","xPosition","yPosition","distinctX","integration","distinctY","integrationsMatrix","xMapping","yMapping","xPixel","yPixel","xzwTypes","xzwType","yTypes","experimentSettings","code","FlagParameters","flag","y16BitPrecision","useExperimentExtension","multiFile","zValuesRandom","zValuesUneven","customAxisLabels","xyxy","xy","longToDate","long","date","setUTCFullYear","setUTCMonth","setUTCDate","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","toISOString","TheOldHeader","fileVersion","exponentY","readInt16","readFloat32","startingX","endingX","xUnitsType","readUint8","yUnitsType","zTypeYear","readUint16","resolutionDescription","readChars","peakPointNumber","scans","spare","memo","xyzLabels","TheNewHeader","experimentType","readInt8","readUint32","readFloat64","zUnitsType","postingDisposition","sourceInstrumentDescription","logOffset","modifiedFlag","processingCode","calibrationLevel","subMethodSampleInjectionNumber","concentrationFactor","methodFile","zSubIncrement","wPlanes","wPlaneIncrement","wAxisUnits","reserved","fileHeader","headerOpts","setBigEndian","getDataShape","bytes","encoder","TextEncoder","encode","defaultByteLength","hostBigEndian","view","typedArrays","int8","globalThis","int16","Int16Array","uint16","Uint16Array","int32","Int32Array","uint32","uint64","BigUint64Array","int64","BigInt64Array","float32","Float32Array","float64","IOBuffer","offset","lastWrittenByte","littleEndian","_data","_mark","_marks","dataIsGiven","dvOffset","DataView","available","isLittleEndian","setLittleEndian","isBigEndian","skip","back","seek","mark","reset","pushMark","popMark","rewind","ensureAvailable","lengthNeeded","newLength","readBoolean","getInt8","getUint8","readByte","readBytes","readArray","BYTES_PER_ELEMENT","getInt16","getUint16","readInt32","getInt32","getUint32","getFloat32","getFloat64","readBigInt64","getBigInt64","readBigUint64","getBigUint64","readChar","fromCharCode","readUtf8","decodeText","writeBoolean","writeUint8","writeInt8","setInt8","_updateLastWrittenByte","setUint8","writeByte","writeBytes","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeFloat32","setFloat32","writeFloat64","setFloat64","writeBigInt64","setBigInt64","writeBigUint64","setBigUint64","writeChar","writeChars","writeUtf8","toArray","getWrittenByteLength","ensureIncreasingXValues","xL","SubFlagParameters","changed","noPeakTable","modifiedArithmetic","SubHeader","indexNumber","startingZ","endingZ","noiseValue","numberCoAddedScans","wAxisValue","setXYAxis","oX","oY","_a","groups","_b","_c","_d","newDataBlock","dataShape","subFileHeader","getNewY","subHeader","oldDataBlock","getOldY","readLogBlock","logHeader","memorySize","textOffset","binarySize","diskArea","logData","logASCII","ioBuffer","fromSPC","arrayBuffer","parsed","getBlockTypes","blockId","getMeasurementUnits","getListType","getOverallSpectraDescription","getScanType","scanType","getWdfSpectrumFlags","saturated","cosmicRay","errorCode","getFlagParameters","checkSum","cosmicRayRemoval","multitrack","saturation","fileBackup","temporary","windowsTimeToMs","fileTime","getHeaderOfSet","typeAndFlag","getAppVersion","major","minor","patch","build","getUUId","Id","readBlockHeader","blockType","uuid","blockSize","readBlock","nSpectra","nPoints","yListCount","thisBlock","headerSize","bodySize","spectras32","currentSpectra","nXorYPoints","valuesXorY","xList","yList","nDataOriginSets","headerOfSet","typeOfSet","os","axisOrigins","spectrumFlags","spectrumDates","origins","readBytes64","nGroups","groupsOf64","isCorrupted","blockTypes","standardBlocks","notFound","stb","readFileHeader","fileHeaderSize","unused0","unused1","nTracks","status","nCollected","nAccum","xListCount","originCount","appName","appVersion","timeStart","timeEnd","laserWavenum","user","free","blocks","blockHeaderTypes","block","fromWDF","getXVariable","yVariables","getYVariables","getOrigins","xBlock","dataBlock","originBlock","xPositions","yPositions","xPositionUnits","yPositionUnits","OriginalJSGraph"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,178,179,180,181,182,183,184,185,186,187,189,190,191,192,193,194]}