{"version":3,"file":"ir-spectrum.js","sources":["../node_modules/ml-spectra-processing/lib-esm/utils/createFromToArray.js","../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-spectra-processing/lib-esm/x/xMedian.js","../node_modules/ml-spectra-processing/lib-esm/x/xAdd.js","../node_modules/ml-spectra-processing/lib-esm/x/utils/getOutputArray.js","../node_modules/ml-spectra-processing/lib-esm/x/xCheck.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/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xIsEquallySpaced.js","../node_modules/ml-spectra-processing/lib-esm/x/xIsMonotone.js","../node_modules/ml-spectra-processing/lib-esm/x/xIsMonotoneIncreasing.js","../node_modules/ml-spectra-processing/lib-esm/x/xMean.js","../node_modules/ml-spectra-processing/lib-esm/x/xMedianAbsoluteDeviation.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib-esm/x/xNoiseStandardDeviation.js","../node_modules/ml-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/xVariance.js","../node_modules/ml-spectra-processing/lib-esm/x/xStandardDeviation.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/x/xApplyFunctionStr.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/xyMaxClosestYPoint.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMinClosestYPoint.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixMinMaxZ.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/transpose.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/common-spectrum/lib-esm/jsgraph/addStyle.js","../node_modules/common-spectrum/lib-esm/jsgraph/colors.js","../node_modules/common-spectrum/lib-esm/jsgraph/getJSGraph.js","../node_modules/common-spectrum/lib-esm/jsgraph/getNormalizationAnnotations.js","../node_modules/common-spectrum/lib-esm/util/appendDistinctParameter.js","../node_modules/common-spectrum/lib-esm/util/appendDistinctValue.js","../node_modules/common-spectrum/lib-esm/AnalysesManager.js","../node_modules/ml-signal-processing/lib-esm/filters/scaling/centerMean.js","../node_modules/ml-signal-processing/lib-esm/filters/scaling/centerMedian.js","../node_modules/ml-signal-processing/lib-esm/filters/x/fromTo.js","../node_modules/ml-signal-processing/lib-esm/filters/scaling/normed.js","../node_modules/ml-signal-processing/lib-esm/filters/scaling/divideBySD.js","../node_modules/ml-signal-processing/lib-esm/filters/scaling/rescale.js","../node_modules/ml-signal-processing/lib-esm/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/src/maybeToPrecision.js","../node_modules/ml-regression-base/src/checkArrayLength.js","../node_modules/ml-regression-base/src/index.js","../node_modules/ml-regression-polynomial/src/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/src/rollingBall.js","../node_modules/baselines/src/rollingBall.js","../node_modules/baselines/src/rollingMedian.js","../node_modules/ml-signal-processing/lib-esm/filters/baseline/airPLSBaseline.js","../node_modules/ml-signal-processing/lib-esm/filters/baseline/iterativePolynomialBaseline.js","../node_modules/ml-signal-processing/lib-esm/filters/baseline/rollingAverageBaseline.js","../node_modules/ml-signal-processing/lib-esm/filters/baseline/rollingBallBaseline.js","../node_modules/ml-signal-processing/lib-esm/filters/baseline/rollingMedianBaseline.js","../node_modules/ml-savitzky-golay-generalized/lib-esm/index.js","../node_modules/ml-signal-processing/lib-esm/filters/sg/firstDerivative.js","../node_modules/ml-signal-processing/lib-esm/filters/sg/secondDerivative.js","../node_modules/ml-signal-processing/lib-esm/filters/sg/thirdDerivative.js","../node_modules/ml-signal-processing/lib-esm/filters/sg/savitzkyGolay.js","../node_modules/ml-signal-processing/lib-esm/filters/x/ensureGrowing.js","../node_modules/ml-signal-processing/lib-esm/filters/x/equallySpaced.js","../node_modules/ml-signal-processing/lib-esm/filters/x/filterX.js","../node_modules/ml-peak-shape-generator/lib-esm/util/constants.js","../node_modules/ml-peak-shape-generator/lib-esm/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/getShape1D.js","../node_modules/ml-signal-processing/node_modules/ml-gsd/lib-esm/utils/appendShapeAndFWHM.js","../node_modules/ml-signal-processing/node_modules/ml-gsd/lib-esm/utils/optimizeTop.js","../node_modules/ml-signal-processing/node_modules/ml-gsd/lib-esm/gsd.js","../node_modules/ml-levenberg-marquardt/lib-esm/checkOptions.js","../node_modules/ml-levenberg-marquardt/lib-esm/errorCalculation.js","../node_modules/ml-levenberg-marquardt/lib-esm/gradientFunction.js","../node_modules/ml-levenberg-marquardt/lib-esm/step.js","../node_modules/ml-levenberg-marquardt/lib-esm/index.js","../node_modules/ml-signal-processing/lib-esm/filters/x/calibrateX.js","../node_modules/ml-signal-processing/lib-esm/filters/x/xFunction.js","../node_modules/ml-signal-processing/lib-esm/filters/scaling/yFunction.js","../node_modules/ml-signal-processing/lib-esm/filterXY.js","../node_modules/common-spectrum/lib-esm/util/getNormalizedSpectrum.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/lib-esm/util/convertUnit.js","../node_modules/common-spectrum/lib-esm/util/ensureRegexp.js","../node_modules/common-spectrum/lib-esm/util/getConvertedVariable.js","../node_modules/common-spectrum/lib-esm/util/getXYSpectra.js","../node_modules/common-spectrum/lib-esm/util/getXYSpectrum.js","../node_modules/common-spectrum/lib-esm/Analysis.js","../node_modules/isutf8/dist/index.esm.js","../node_modules/ensure-string/lib-esm/index.js","../node_modules/dynamic-typing/src/parseString.js","../node_modules/jcampconverter/lib-esm/complexChromatogram.js","../node_modules/jcampconverter/lib-esm/convertToFloatArray.js","../node_modules/jcampconverter/lib-esm/parse/fastParseXYData.js","../node_modules/jcampconverter/lib-esm/parse/parsePeakTable.js","../node_modules/jcampconverter/lib-esm/parse/parseXYA.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/jcampconverter/lib-esm/2d/convertTo3DZ.js","../node_modules/jcampconverter/lib-esm/2d/generateContourLines.js","../node_modules/jcampconverter/lib-esm/2d/add2D.js","../node_modules/gyromagnetic-ratio/lib-esm/index.js","../node_modules/jcampconverter/lib-esm/postProcessingNMR.js","../node_modules/jcampconverter/lib-esm/profiling.js","../node_modules/jcampconverter/lib-esm/simpleChromatogram.js","../node_modules/jcampconverter/lib-esm/postProcessing.js","../node_modules/jcampconverter/lib-esm/prepareNtuplesDatatable.js","../node_modules/jcampconverter/lib-esm/prepareSpectrum.js","../node_modules/jcampconverter/lib-esm/convert.js","../node_modules/common-spectrum/lib-esm/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-esm/to/toJcamps.js","../node_modules/common-spectrum/lib-esm/to/toJcamp.js","../node_modules/ml-spectra-fitting/lib-esm/shapes/getSumOfShapes.js","../node_modules/ml-spectra-fitting/lib-esm/util/assert.js","../node_modules/ml-spectra-fitting/lib-esm/util/internalPeaks/DefaultParameters.js","../node_modules/ml-spectra-fitting/lib-esm/util/internalPeaks/getInternalPeaks.js","../node_modules/ml-direct/src/util/antiLowerConvexHull.js","../node_modules/ml-direct/src/index.js","../node_modules/ml-spectra-fitting/lib-esm/util/wrappers/directOptimization.js","../node_modules/ml-spectra-fitting/lib-esm/util/selectMethod.js","../node_modules/ml-spectra-fitting/lib-esm/index.js","../node_modules/common-spectrum/lib-esm/util/peakPicking.js","../node_modules/common-spectrum/node_modules/ml-gsd/lib-esm/utils/appendShapeAndFWHM.js","../node_modules/common-spectrum/node_modules/ml-gsd/lib-esm/utils/optimizeTop.js","../node_modules/common-spectrum/node_modules/ml-gsd/lib-esm/gsd.js","../node_modules/common-spectrum/lib-esm/util/autoPeakPicking.js","../node_modules/common-spectrum/lib-esm/index.js","../src/jsgraph/getAnnotations.js","../src/from/utils/spectrumCallback.js","../src/from/fromJcamp.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.browser.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","../src/index.js"],"sourcesContent":["/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n *\n * @param options - options\n * @return - array of distributed numbers between \"from\" and \"to\"\n */\nexport function createFromToArray(options = {}) {\n    let { 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    let 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        let base = (to / from) ** (1 / div);\n        let 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('Please choose for the distribution either uniform or log. By default the distribution chosen is uniform.');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","const toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array).\n *\n * @param {any} value - Object to check.\n * @returns {boolean} True if the object is an array.\n */\nexport function isAnyArray(value) {\n    return toString.call(value).endsWith('Array]');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculates the median of an array\n *\n * @param input - Array containing values\n * @returns - median\n */\nexport function xMedian(input) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const array = input.slice();\n    let low = 0;\n    let high = array.length - 1;\n    let middle, ll, hh;\n    let median = calcMiddle(low, high);\n    while (true) {\n        if (high <= low) {\n            return array[median];\n        }\n        if (high === low + 1) {\n            if (array[low] > array[high]) {\n                swap(array, low, high);\n            }\n            return array[median];\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        ll = low + 1;\n        hh = high;\n        while (true) {\n            do\n                ll++;\n            while (array[low] > array[ll]);\n            do\n                hh--;\n            while (array[hh] > array[low]);\n            if (hh < ll) {\n                break;\n            }\n            swap(array, ll, hh);\n        }\n        // Swap middle item (in position low) back into correct position\n        swap(array, low, hh);\n        // Re-set active partition\n        if (hh <= median) {\n            low = ll;\n        }\n        if (hh >= median) {\n            high = hh - 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 ~~((i + j) / 2);\n}\n//# sourceMappingURL=xMedian.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 *\n * @param array1 - the first array\n * @param array2 - the second array or number\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('xAdd: size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    let 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","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 * Checks if input is of type array\n *\n * @param input - input\n */\nexport function xCheck(input) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n}\n//# sourceMappingURL=xCheck.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from '..';\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n *\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 Error('xDivide: size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = Number(array2);\n    }\n    let 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 Float64\n *\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","/**\n * Returns the closest index of a `target`\n *\n * @param array - array of numbers\n * @param target - target\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from './xFindClosestIndex';\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n *\n * @param x - array of numbers\n * @param options - Options\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex, from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the maximal value of an array of values\n *\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the minimal value of an array of values\n *\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","/**\n * Check if the values are separated always by the same difference\n *\n * @param array - Monotone growing array of number\n */\nexport function xIsEquallySpaced(array, options = {}) {\n    if (array.length < 3)\n        return true;\n    const { tolerance = 0.05 } = options;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < array.length - 1; ++i) {\n        let absoluteDifference = array[i + 1] - array[i];\n        if (absoluteDifference < minDx) {\n            minDx = absoluteDifference;\n        }\n        if (absoluteDifference > maxDx) {\n            maxDx = absoluteDifference;\n        }\n    }\n    return (maxDx - minDx) / maxDx < tolerance;\n}\n//# sourceMappingURL=xIsEquallySpaced.js.map","/**\n * Returns true if x is monotone\n *\n * @param array - array of numbers\n */\nexport function xIsMonotone(array) {\n    if (array.length <= 2) {\n        return true;\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 false;\n        }\n        return true;\n    }\n    if (array[0] < array[array.length - 1]) {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] >= array[i + 1])\n                return false;\n        }\n    }\n    else {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] <= array[i + 1])\n                return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=xIsMonotone.js.map","/**\n * Returns true if x is monotone\n *\n * @param array - array of numbers\n */\nexport function xIsMonotoneIncreasing(array) {\n    if (array.length < 2) {\n        return true;\n    }\n    for (let i = 0; i < array.length - 1; i++) {\n        if (array[i] >= array[i + 1])\n            return false;\n    }\n    return true;\n}\n//# sourceMappingURL=xIsMonotoneIncreasing.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the mean value of an array of values\n *\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 { xMedian } from './xMedian';\n/**\n * This function calculates the median absolute deviation (MAD)\n * https://en.wikipedia.org/wiki/Median_absolute_deviation\n * @param array\n */\nexport function xMedianAbsoluteDeviation(array) {\n    const median = xMedian(array);\n    const averageDeviations = new Float64Array(array.length);\n    for (let i = 0; i < array.length; i++) {\n        averageDeviations[i] = Math.abs(array[i] - median);\n    }\n    return {\n        median,\n        mad: xMedian(averageDeviations),\n    };\n}\n//# sourceMappingURL=xMedianAbsoluteDeviation.js.map","import { xCheck } from './xCheck';\n/**\n * Return min and max values of an array\n *\n * @param array - array of number\n * @returns - Object with 2 properties, min and max\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (let value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","import { xMedianAbsoluteDeviation } from '..';\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise\n * @param array\n * @returns noise level corresponding to one standard deviation\n */\nexport function xNoiseStandardDeviation(array) {\n    const { mad, median } = xMedianAbsoluteDeviation(array);\n    return { sd: mad / 0.6744897501960817, mad, median };\n}\n//# sourceMappingURL=xNoiseStandardDeviation.js.map","/**\n * This function calculate the norm of a vector\n *\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 *\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 './utils/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 array - 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.toLowerCase()) {\n        case 'absolute': {\n            let absoluteSumValue = absoluteSum(input) / value;\n            if (absoluteSumValue === 0) {\n                throw new Error('xNormed: 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            let currentMaxValue = xMaxValue(input);\n            if (currentMaxValue === 0) {\n                throw new Error('xNormed: 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            let sumFactor = xSum(input) / value;\n            if (sumFactor === 0) {\n                throw new Error('xNormed: 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(`norm: unknown algorithm: ${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';\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        if (array instanceof Float64Array) {\n            return array.slice();\n        }\n        else {\n            return Float64Array.from(array);\n        }\n    }\n    let result = new Float64Array(array.length + size * 2);\n    for (let i = 0; i < array.length; i++) {\n        result[i + size] = array[i];\n    }\n    let fromEnd = size + array.length;\n    let toEnd = 2 * size + array.length;\n    switch (algorithm.toLowerCase()) {\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[array.length - 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('xPadding: unknown algorithm');\n    }\n    return result;\n}\n//# sourceMappingURL=xPadding.js.map","import { isAnyArray } from 'is-any-array';\nimport { xMean } from './xMean';\n/** Finds the variance of the data\n *\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        let 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/** Finds the standard deviation for the data at hand\n *\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 { 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 *\n * @param array - array of number\n */\nexport function xParetoNormalization(array) {\n    xCheck(array);\n    let result = [];\n    const sqrtSD = Math.sqrt(xStandardDeviation(array));\n    for (let item of array) {\n        result.push(item / sqrtSD);\n    }\n    return result;\n}\n//# sourceMappingURL=xParetoNormalization.js.map","import { xCheck } from '..';\nimport { getOutputArray } from './utils/getOutputArray';\nimport { xMaxValue } from './xMaxValue';\nimport { xMinValue } from './xMinValue';\n/** Function used to rescale data\n *\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 *\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 Error('fct has to be a function');\n    const { window = 5, padding = {} } = options;\n    const { size = window - 1, algorithm, value } = padding;\n    array = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n    const newArray = [];\n    for (let i = 0; i < array.length - window + 1; i++) {\n        // we will send a view to the original buffer\n        newArray.push(fct(array.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 *\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 *\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","/**\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        .replace(/(?<before>^|\\W)(?<after>[\\da-z]{2,}\\()/g, '$<before>Math.$<after>')\n        .replace(/Math\\.Math/g, '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';\n/**\n * Throw an error in no an object of x,y arrays\n *\n * @param data - array of points {x,y,z}\n */\nexport function xyCheck(data, options = {}) {\n    const { minLength } = options;\n    if (typeof data !== 'object' || !isAnyArray(data.x) || !isAnyArray(data.y)) {\n        throw new Error('Data must be an object of x and y arrays');\n    }\n    if (data.x.length !== data.y.length) {\n        throw new Error('The x and y arrays must have the same length');\n    }\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 { xIsMonotoneIncreasing } from '../x/xIsMonotoneIncreasing';\nimport { xyCheck } from './xyCheck';\n/**\n * Filters x,y values to allow strictly growing values in x axis.\n *\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 (xIsMonotoneIncreasing(data.x))\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    let { from = Number.NEGATIVE_INFINITY, to = Number.POSITIVE_INFINITY, exclusions = [], } = options;\n    if (from > to)\n        [from, to] = [to, from];\n    zones = JSON.parse(JSON.stringify(zones)).map((zone) => zone.from > zone.to ? { from: zone.to, to: zone.from } : zone);\n    zones = zones.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    let beforeExclusionsZones = [currentZone];\n    for (let i = 1; i < zones.length; i++) {\n        let 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    let counter = 0;\n    for (let zoneIndex = 0; zoneIndex < beforeExclusionsZones.length; zoneIndex++) {\n        if (counter++ > 5)\n            break;\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 *\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 zones;\n    let returnZones = zonesNormalize(zones, options);\n    const totalSize = returnZones.reduce((previous, current) => {\n        return previous + (current.to - current.from);\n    }, 0);\n    let unitsPerPoint = totalSize / numberOfPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < returnZones.length - 1; i++) {\n        let zone = returnZones[i];\n        zone.numberOfPoints = Math.min(Math.round((zone.to - zone.from) / unitsPerPoint), numberOfPoints - currentTotal);\n        currentTotal += zone.numberOfPoints;\n    }\n    let zone = returnZones[returnZones.length - 1];\n    zone.numberOfPoints = numberOfPoints - currentTotal;\n    return returnZones;\n}\n//# sourceMappingURL=zonesWithPoints.js.map","/**\n * function that retrieves the getEquallySpacedData with the variant \"slot\"\n *\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @return 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    let xLength = x.length;\n    let step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    let halfStep = step / 2;\n    let lastStep = x[x.length - 1] - x[x.length - 2];\n    let start = from - halfStep;\n    // Changed Array to Float64Array\n    let 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 * @return 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 *\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @return - 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    let xLength = x.length;\n    let step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    let halfStep = step / 2;\n    // Changed Array to Float64Array\n    let output = new Float64Array(numberOfPoints);\n    let initialOriginalStep = x[1] - x[0];\n    let 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/createFromToArray';\nimport { zonesNormalize } from '../zones/zonesNormalize';\nimport { zonesWithPoints } from '../zones/zonesWithPoints';\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 *\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @return new object with x / y array with the equally spaced data.\n */\nexport function xyEquallySpaced(data, options = {}) {\n    let { x, y } = data;\n    let 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    });\n    let xResult = [];\n    let yResult = [];\n    for (let zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        let 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    let 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/zonesNormalize';\n/** Filter an array x/y based on various criteria x points are expected to be sorted\n *\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @return filtered array\n */\nexport function xyFilterX(data, options = {}) {\n    const { x, y } = data;\n    const { from = x[0], to = x[x.length - 1], zones = [{ from, to }], exclusions = [], } = options;\n    let normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    let currentZoneIndex = 0;\n    let newX = [];\n    let 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 *\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    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","import { xFindClosestIndex } from '../x/xFindClosestIndex';\nimport { xyCheck } from './xyCheck';\n/**\n * Find the closest maximum going up hill\n *\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    let { target, 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/xFindClosestIndex';\nimport { xyCheck } from './xyCheck';\n/**\n * Find the closest minimum going down hill\n *\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    let { target, 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","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix should 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 should has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","import { matrixCheck } from './matrixCheck';\n/**\n * Get min and max Z\n *\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 { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport { max as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isAnyArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","const indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\nexport function inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nexport function inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), value));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\n      }\n    }\n    return this;\n  };\n}\n","import { isAnyArray } from 'is-any-array';\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nexport function checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nexport function newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nexport function checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nexport function varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nexport function varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nexport function centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nexport function centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nexport function centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nexport function getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nexport function getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nexport function getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n","import { isAnyArray } from 'is-any-array';\nimport rescale from 'ml-array-rescale';\n\nimport { inspectMatrix, inspectMatrixWithOptions } from './inspect';\nimport { installMathOperations } from './mathOperations';\nimport {\n  sumByRow,\n  sumByColumn,\n  sumAll,\n  productByRow,\n  productByColumn,\n  productAll,\n  varianceByRow,\n  varianceByColumn,\n  varianceAll,\n  centerByRow,\n  centerByColumn,\n  centerAll,\n  scaleByRow,\n  scaleByColumn,\n  scaleAll,\n  getScaleByRow,\n  getScaleByColumn,\n  getScaleAll,\n} from './stat';\nimport {\n  checkRowVector,\n  checkRowIndex,\n  checkColumnIndex,\n  checkColumnVector,\n  checkRange,\n  checkNonEmpty,\n  checkRowIndices,\n  checkColumnIndices,\n} from './util';\n\nexport class AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    let result = 0;\n    if (type === 'max') {\n      return this.max();\n    } else if (type === 'frobenius') {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j < this.columns; j++) {\n          result = result + this.get(i, j) * this.get(i, j);\n        }\n      }\n      return Math.sqrt(result);\n    } else {\n      throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      resultat = resultat.setSubMatrix(c11, 0, 0);\n      resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n      resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n      resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n      return resultat.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min: min,\n          max: max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let row = 0; row < this.rows; row++) {\n      for (let column = 0; column < this.columns; column++) {\n        newMatrix.set(row, column, this.get(row, column));\n      }\n    }\n    return newMatrix;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      // eslint-disable-next-line no-constructor-return\n      return nRows.clone();\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      // Create an empty matrix\n      this.data = [];\n      if (Number.isInteger(nColumns) && nColumns >= 0) {\n        for (let i = 0; i < nRows; i++) {\n          this.data.push(new Float64Array(nColumns));\n        }\n      } else {\n        throw new TypeError('nColumns must be a positive integer');\n      }\n    } else if (isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { AbstractMatrix } from '../matrix';\n\nexport default class BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n","import BaseView from './base';\n\nexport default class MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n","export function hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let iter = 0;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          iter = iter + 1;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          iter = 0;\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nexport function solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n","export function addStyle(serie, spectrum, options = {}) {\n    let { color = '#A9A9A9', opacity = 1, lineWidth = 1 } = options;\n    // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n    if (color.match(/#[0-9A-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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkU3R5bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvanNncmFwaC9hZGRTdHlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLFVBQVUsUUFBUSxDQUN0QixLQUE4QixFQUM5QixRQUFrQixFQUNsQixVQUF3QixFQUFFO0lBRTFCLElBQUksRUFBRSxLQUFLLEdBQUcsU0FBUyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNoRSxpRUFBaUU7SUFDakUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7UUFDakMsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDckU7U0FBTTtRQUNMLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxXQUFXLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDL0Q7SUFDRCxLQUFLLENBQUMsS0FBSyxHQUFHO1FBQ1o7WUFDRSxJQUFJLEVBQUUsWUFBWTtZQUNsQixLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFO29CQUNKLEtBQUs7b0JBQ0wsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLElBQUksRUFBRSxDQUFDO2lCQUNSO2FBQ0Y7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRTtvQkFDSixLQUFLO29CQUNMLEtBQUssRUFBRSxTQUFTLEdBQUcsQ0FBQztvQkFDcEIsSUFBSSxFQUFFLENBQUM7aUJBQ1I7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUNGLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQzdDLENBQUMifQ==","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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzZ3JhcGgvY29sb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztDQUNWLENBQUMifQ==","import { xyFilterXPositive } from 'ml-spectra-processing';\nimport { addStyle } from './addStyle';\nimport { COLORS } from './colors';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n */\nexport function getJSGraph(analyses, options = {}) {\n    const { colors = COLORS, opacities = [1], linesWidth = [1], selector = {}, normalization, xAxis = {}, yAxis = {}, } = options;\n    let 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        let 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 the3 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            let 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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0SlNHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qc2dyYXBoL2dldEpTR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBdUJsQzs7R0FFRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBb0IsRUFBRSxVQUEwQixFQUFFO0lBQzNFLE1BQU0sRUFDSixNQUFNLEdBQUcsTUFBTSxFQUNmLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNmLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixRQUFRLEdBQUcsRUFBRSxFQUNiLGFBQWEsRUFDYixLQUFLLEdBQUcsRUFBRSxFQUNWLEtBQUssR0FBRyxFQUFFLEdBQ1gsR0FBRyxPQUFPLENBQUM7SUFDWixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN6QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3pCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDekIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUV6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0IsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1lBQzFDLFFBQVE7WUFDUixhQUFhO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxTQUFTO1FBQ25DLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqQyxrSUFBa0k7UUFFbEksSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3RELElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN0RCxJQUFJLENBQUMsTUFBTTtZQUFFLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEQsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRXRELEtBQUssTUFBTSxRQUFRLElBQUksT0FBTyxFQUFFO1lBQzlCLElBQUksS0FBSyxHQUE0QixFQUFFLENBQUM7WUFDeEMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBQ3hCLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ2hDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQ3hDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDN0MsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLElBQUksR0FBRztnQkFDWCxDQUFDLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDNUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7YUFDN0IsQ0FBQztZQUNGLEtBQUssQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLEtBQUssQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQWMsQ0FBQyxDQUFDO2FBQ3REO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQjtLQUNGO0lBRUQsT0FBTztRQUNMLElBQUksRUFBRTtZQUNKLENBQUMsRUFBRTtnQkFDRCxLQUFLLEVBQUUsTUFBTTtnQkFDYixJQUFJLEVBQUUsTUFBTTtnQkFDWixpQkFBaUIsRUFBRSxHQUFHO2dCQUN0QixnQkFBZ0IsRUFBRSxHQUFHO2dCQUNyQixPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsSUFBSTtnQkFDYixHQUFHLEtBQUs7YUFDVDtZQUNELENBQUMsRUFBRTtnQkFDRCxLQUFLLEVBQUUsTUFBTTtnQkFDYixJQUFJLEVBQUUsTUFBTTtnQkFDWixpQkFBaUIsRUFBRSxHQUFHO2dCQUN0QixnQkFBZ0IsRUFBRSxHQUFHO2dCQUNyQixPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsSUFBSTtnQkFDYixHQUFHLEtBQUs7YUFDVDtTQUNGO1FBQ0QsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDIn0=","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        let 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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Tm9ybWFsaXphdGlvbkFubm90YXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzZ3JhcGgvZ2V0Tm9ybWFsaXphdGlvbkFubm90YXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsU0FBNEIsRUFBRSxFQUM5QixRQUFRLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtJQUUvQyxJQUFJLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVqQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDckIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDekMsSUFBSSxVQUFVLEdBQUc7WUFDZixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRTtnQkFDUixFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDeEMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7YUFDdkM7WUFDRCxXQUFXLEVBQUUsQ0FBQztZQUNkLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQztRQUNGLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUM3QixXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLE1BQU07WUFDWixRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDakQsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7YUFDdEM7WUFDRCxXQUFXLEVBQUUsQ0FBQztZQUNkLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFO1FBQzNCLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRTtnQkFDUixFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDbkMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTthQUNsRDtZQUNELFdBQVcsRUFBRSxDQUFDO1lBQ2QsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQyxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMifQ==","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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kRGlzdGluY3RQYXJhbWV0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9hcHBlbmREaXN0aW5jdFBhcmFtZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQXFDLEVBQ3JDLEdBQVcsRUFDWCxLQUFhO0lBRWIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDWixHQUFHO1lBQ0gsTUFBTSxFQUFFLEVBQUU7WUFDVixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7S0FDSDtJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN2QyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoQztJQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QixDQUFDIn0=","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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kRGlzdGluY3RWYWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2FwcGVuZERpc3RpbmN0VmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxNQUFtQyxFQUNuQyxHQUFXO0lBRVgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDWixHQUFHO1lBQ0gsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDO0tBQ0g7SUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEIsQ0FBQyJ9","import { appendDistinctParameter } from './util/appendDistinctParameter';\nimport { appendDistinctValue } from './util/appendDistinctValue';\nexport class AnalysesManager {\n    constructor() {\n        this.analyses = [];\n    }\n    addAnalysis(analysis) {\n        let 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    getAnalyses(options = {}) {\n        const { ids } = options;\n        let analyses = [];\n        for (const analysis of this.analyses) {\n            if (!ids || ids.includes(analysis.id)) {\n                analyses.push(analysis);\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        let values = {};\n        for (let 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        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (let [, 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        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (let [, 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        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (let [, 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        let values = {};\n        for (let 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        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.meta) {\n                for (let 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     */\n    removeAnalysis(id) {\n        let 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     */\n    getAnalysisIndex(id) {\n        if (!id)\n            return undefined;\n        for (let i = 0; i < this.analyses.length; i++) {\n            let 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     */\n    includes(id) {\n        const index = this.getAnalysisIndex(id);\n        return index === undefined ? false : !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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5hbHlzZXNNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0FuYWx5c2VzTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU1qRSxNQUFNLE9BQU8sZUFBZTtJQUcxQjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBa0I7UUFDbkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUI7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxVQUE4QixFQUFFO1FBQ2pELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxRQUFRLEdBQWUsRUFBRSxDQUFDO1FBQzlCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3pCO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sVUFBVTtRQUNmLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUks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","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 */\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 */\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\r\n\r\n/*\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2013 Eric Arnebäck\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n*/\r\n\r\nfunction ldlSymbolic(\r\n  n /* A and L are n-by-n, where n >= 0 */,\r\n  Ap /* input of size n + 1, not modified */,\r\n  Ai /* input of size nz=Ap[n], not modified */,\r\n  Lp /* output of size n + 1, not defined on input */,\r\n  Parent /* output of size n, not defined on input */,\r\n  Lnz /* output of size n, not defined on input */,\r\n  Flag /* workspace of size n, not defn. on input or output */,\r\n) {\r\n  let i, k, p, kk, p2;\r\n\r\n  for (k = 0; k < n; k++) {\r\n    /* L(k,:) pattern: all nodes reachable in etree from nz in A(0:k-1,k) */\r\n    Parent[k] = -1; /* parent of k is not yet known */\r\n    Flag[k] = k; /* mark node k as visited */\r\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\r\n    kk = k; /* kth original, or permuted, column */\r\n    p2 = Ap[kk + 1];\r\n    for (p = Ap[kk]; p < p2; p++) {\r\n      /* A (i,k) is nonzero (original or permuted A) */\r\n      i = Ai[p];\r\n\r\n      if (i < k) {\r\n        /* follow path from i to root of etree, stop at flagged node */\r\n        for (; Flag[i] !== k; i = Parent[i]) {\r\n          /* find parent of i if not yet determined */\r\n          if (Parent[i] === -1) Parent[i] = k;\r\n          Lnz[i]++; /* L (k,i) is nonzero */\r\n          Flag[i] = k; /* mark i as visited */\r\n        }\r\n      }\r\n    }\r\n  }\r\n  /* construct Lp index array from Lnz column counts */\r\n  Lp[0] = 0;\r\n  for (k = 0; k < n; k++) {\r\n    Lp[k + 1] = Lp[k] + Lnz[k];\r\n  }\r\n}\r\n\r\nfunction ldlNumeric(\r\n  n /* A and L are n-by-n, where n >= 0 */,\r\n  Ap /* input of size n+1, not modified */,\r\n  Ai /* input of size nz=Ap[n], not modified */,\r\n  Ax /* input of size nz=Ap[n], not modified */,\r\n  Lp /* input of size n+1, not modified */,\r\n  Parent /* input of size n, not modified */,\r\n  Lnz /* output of size n, not defn. on input */,\r\n  Li /* output of size lnz=Lp[n], not defined on input */,\r\n  Lx /* output of size lnz=Lp[n], not defined on input */,\r\n  D /* output of size n, not defined on input */,\r\n  Y /* workspace of size n, not defn. on input or output */,\r\n  Pattern /* workspace of size n, not defn. on input or output */,\r\n  Flag /* workspace of size n, not defn. on input or output */,\r\n) {\r\n  let yi, lKi;\r\n  let i, k, p, kk, p2, len, top;\r\n  for (k = 0; k < n; k++) {\r\n    /* compute nonzero Pattern of kth row of L, in topological order */\r\n    Y[k] = 0.0; /* Y(0:k) is now all zero */\r\n    top = n; /* stack for pattern is empty */\r\n    Flag[k] = k; /* mark node k as visited */\r\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\r\n    kk = k; /* kth original, or permuted, column */\r\n    p2 = Ap[kk + 1];\r\n    for (p = Ap[kk]; p < p2; p++) {\r\n      i = Ai[p]; /* get A(i,k) */\r\n      if (i <= k) {\r\n        Y[i] += Ax[p]; /* scatter A(i,k) into Y (sum duplicates) */\r\n        for (len = 0; Flag[i] !== k; i = Parent[i]) {\r\n          Pattern[len++] = i; /* L(k,i) is nonzero */\r\n          Flag[i] = k; /* mark i as visited */\r\n        }\r\n        while (len > 0) Pattern[--top] = Pattern[--len];\r\n      }\r\n    }\r\n    /* compute numerical values kth row of L (a sparse triangular solve) */\r\n    D[k] = Y[k]; /* get D(k,k) and clear Y(k) */\r\n    Y[k] = 0.0;\r\n    for (; top < n; top++) {\r\n      i = Pattern[top]; /* Pattern[top:n-1] is pattern of L(:,k) */\r\n      yi = Y[i]; /* get and clear Y(i) */\r\n      Y[i] = 0.0;\r\n      p2 = Lp[i] + Lnz[i];\r\n      for (p = Lp[i]; p < p2; p++) {\r\n        Y[Li[p]] -= Lx[p] * yi;\r\n      }\r\n      lKi = yi / D[i]; /* the nonzero entry L(k,i) */\r\n      D[k] -= lKi * yi;\r\n      Li[p] = k; /* store L(k,i) in column form of L */\r\n      Lx[p] = lKi;\r\n      Lnz[i]++; /* increment count of nonzeros in col i */\r\n    }\r\n\r\n    if (D[k] === 0.0) return k; /* failure, D(k,k) is zero */\r\n  }\r\n\r\n  return n; /* success, diagonal of D is all nonzero */\r\n}\r\n\r\nfunction ldlLsolve(\r\n  n /* L is n-by-n, where n >= 0 */,\r\n  X /* size n. right-hand-side on input, soln. on output */,\r\n  Lp /* input of size n+1, not modified */,\r\n  Li /* input of size lnz=Lp[n], not modified */,\r\n  Lx /* input of size lnz=Lp[n], not modified */,\r\n) {\r\n  let j, p, p2;\r\n  for (j = 0; j < n; j++) {\r\n    p2 = Lp[j + 1];\r\n    for (p = Lp[j]; p < p2; p++) {\r\n      X[Li[p]] -= Lx[p] * X[j];\r\n    }\r\n  }\r\n}\r\nfunction ldlDsolve(\r\n  n /* D is n-by-n, where n >= 0 */,\r\n  X /* size n. right-hand-side on input, soln. on output */,\r\n  D /* input of size n, not modified */,\r\n) {\r\n  let j;\r\n  for (j = 0; j < n; j++) {\r\n    X[j] /= D[j];\r\n  }\r\n}\r\nfunction ldlLTsolve(\r\n  n /* L is n-by-n, where n >= 0 */,\r\n  X /* size n. right-hand-side on input, soln. on output */,\r\n  Lp /* input of size n+1, not modified */,\r\n  Li /* input of size lnz=Lp[n], not modified */,\r\n  Lx /* input of size lnz=Lp[n], not modified */,\r\n) {\r\n  let j, p, p2;\r\n  for (j = n - 1; j >= 0; j--) {\r\n    p2 = Lp[j + 1];\r\n    for (p = Lp[j]; p < p2; p++) {\r\n      X[j] -= Lx[p] * X[Li[p]];\r\n    }\r\n  }\r\n}\r\n\r\nfunction ldlPerm(\r\n  n /* size of X, B, and P */,\r\n  X /* output of size n. */,\r\n  B /* input of size n. */,\r\n  P /* input permutation array of size n. */,\r\n) {\r\n  let j;\r\n  for (j = 0; j < n; j++) {\r\n    X[j] = B[P[j]];\r\n  }\r\n}\r\n\r\nfunction ldlPermt(\r\n  n /* size of X, B, and P */,\r\n  X /* output of size n. */,\r\n  B /* input of size n. */,\r\n  P /* input permutation array of size n. */,\r\n) {\r\n  let j;\r\n  for (j = 0; j < n; j++) {\r\n    X[P[j]] = B[j];\r\n  }\r\n}\r\n\r\nfunction prepare(M, n, P) {\r\n  // if a permutation was specified, apply it.\r\n  if (P) {\r\n    let Pinv = new Array(n);\r\n\r\n    for (let k = 0; k < n; k++) {\r\n      Pinv[P[k]] = k;\r\n    }\r\n\r\n    let Mt = []; // scratch memory\r\n    // Apply permutation. We make M into P*M*P^T\r\n    for (let a = 0; a < M.length; ++a) {\r\n      let ar = Pinv[M[a][0]];\r\n      let ac = Pinv[M[a][1]];\r\n\r\n      // we only store the upper-diagonal elements(since we assume matrix is symmetric, we only need to store these)\r\n      // if permuted element is below diagonal, we simply transpose it.\r\n      if (ac < ar) {\r\n        let t = ac;\r\n        ac = ar;\r\n        ar = t;\r\n      }\r\n\r\n      Mt[a] = [];\r\n      Mt[a][0] = ar;\r\n      Mt[a][1] = ac;\r\n      Mt[a][2] = M[a][2];\r\n    }\r\n\r\n    M = Mt; // copy scratch memory.\r\n  } else {\r\n    // if P argument is null, we just use an identity permutation.\r\n    P = [];\r\n    for (let i = 0; i < n; ++i) {\r\n      P[i] = i;\r\n    }\r\n  }\r\n\r\n  // The sparse matrix we are decomposing is A.\r\n  // Now we shall create A from M.\r\n  let Ap = new Array(n + 1);\r\n  let Ai = new Array(M.length);\r\n  let Ax = new Array(M.length);\r\n\r\n  // count number of non-zero elements in columns.\r\n  let LNZ = [];\r\n  for (let i = 0; i < n; ++i) {\r\n    LNZ[i] = 0;\r\n  }\r\n  for (let a = 0; a < M.length; ++a) {\r\n    LNZ[M[a][1]]++;\r\n  }\r\n\r\n  Ap[0] = 0;\r\n  for (let i = 0; i < n; ++i) {\r\n    Ap[i + 1] = Ap[i] + LNZ[i];\r\n  }\r\n\r\n  let coloffset = [];\r\n  for (let a = 0; a < n; ++a) {\r\n    coloffset[a] = 0;\r\n  }\r\n\r\n  // go through all elements in M, and add them to sparse matrix A.\r\n  for (let i = 0; i < M.length; ++i) {\r\n    let e = M[i];\r\n    let col = e[1];\r\n\r\n    let adr = Ap[col] + coloffset[col];\r\n    Ai[adr] = e[0];\r\n    Ax[adr] = e[2];\r\n\r\n    coloffset[col]++;\r\n  }\r\n\r\n  let D = new Array(n);\r\n  let Y = new Array(n);\r\n  let Lp = new Array(n + 1);\r\n  let Parent = new Array(n);\r\n  let Lnz = new Array(n);\r\n  let Flag = new Array(n);\r\n  let Pattern = new Array(n);\r\n  let bp1 = new Array(n);\r\n  let x = new Array(n);\r\n  let d;\r\n\r\n  ldlSymbolic(n, Ap, Ai, Lp, Parent, Lnz, Flag);\r\n\r\n  let Lx = new Array(Lp[n]);\r\n  let Li = new Array(Lp[n]);\r\n\r\n  d = ldlNumeric(n, Ap, Ai, Ax, Lp, Parent, Lnz, Li, Lx, D, Y, Pattern, Flag);\r\n\r\n  if (d === n) {\r\n    return function (b) {\r\n      ldlPerm(n, bp1, b, P);\r\n      ldlLsolve(n, bp1, Lp, Li, Lx);\r\n      ldlDsolve(n, bp1, D);\r\n      ldlLTsolve(n, bp1, Lp, Li, Lx);\r\n      ldlPermt(n, x, bp1, P);\r\n\r\n      return x;\r\n    };\r\n  } else {\r\n    return null;\r\n  }\r\n}\r\n\r\nexport { prepare as default };\r\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';\r\n\r\nconst getClosestNumber = (array = [], goal = 0) => {\r\n  const closest = array.reduce((prev, curr) => {\r\n    return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;\r\n  });\r\n  return closest;\r\n};\r\n\r\nconst getCloseIndex = (array = [], goal = 0) => {\r\n  const closest = getClosestNumber(array, goal);\r\n  return array.indexOf(closest);\r\n};\r\n\r\nconst updateSystem = (matrix, y, weights) => {\r\n  let nbPoints = y.length;\r\n  let l = nbPoints - 1;\r\n  let newMatrix = new Array(matrix.length);\r\n  let newVector = new Float64Array(nbPoints);\r\n  for (let i = 0; i < l; i++) {\r\n    let w = weights[i];\r\n    let diag = i * 2;\r\n    let next = diag + 1;\r\n    newMatrix[diag] = matrix[diag].slice();\r\n    newMatrix[next] = matrix[next].slice();\r\n    if (w === 0) {\r\n      newVector[i] = 0;\r\n    } else {\r\n      newVector[i] = y[i] * w;\r\n      newMatrix[diag][2] += w;\r\n    }\r\n  }\r\n  newVector[l] = y[l] * weights[l];\r\n  newMatrix[l * 2] = matrix[l * 2].slice();\r\n  newMatrix[l * 2][2] += weights[l];\r\n\r\n  return [newMatrix, newVector];\r\n};\r\n\r\nconst getDeltaMatrix = (nbPoints, lambda) => {\r\n  let matrix = [];\r\n  let last = nbPoints - 1;\r\n  for (let i = 0; i < last; i++) {\r\n    matrix.push([i, i, lambda * 2]);\r\n    matrix.push([i + 1, i, -1 * lambda]);\r\n  }\r\n  matrix[0][2] = lambda;\r\n  matrix.push([last, last, lambda]);\r\n  return {\r\n    lowerTriangularNonZeros: matrix,\r\n    permutationEncodedArray: cuthillMckee(matrix, nbPoints),\r\n  };\r\n};\r\n\r\nexport { updateSystem, getDeltaMatrix, getCloseIndex, getClosestNumber };\r\n","import Cholesky from './choleskySolver';\r\nimport { updateSystem, getDeltaMatrix, getCloseIndex } from './utils';\r\n\r\n/**\r\n * Fit the baseline drift by iteratively changing weights of sum square error between the fitted baseline and original signals,\r\n * for further information about the parameters you can get the [paper of airPLS](https://github.com/zmzhang/airPLS/blob/master/airPLS_manuscript.pdf)\r\n * @param {Array<number>} x - x axis data useful when control points or zones are submitted\r\n * @param {Array<number>} y - Original data\r\n * @param {object} [options={}] - Options object\r\n * @param {number} [options.maxIterations = 100] - Maximal number of iterations if the method does not reach the stop criterion\r\n * @param {number} [options.factorCriterion = 0.001] - Factor of the sum of absolute value of original data, to compute stop criterion\r\n * @param {Array<number>} [options.weights = [1,1,...]] - Initial weights vector, default each point has the same weight\r\n * @param {number} [options.lambda = 100] - Factor of weights matrix in -> [I + lambda D'D]z = x\r\n * @param {Array<number>} [options.controlPoints = []] - Array of x axis values to force that baseline cross those points.\r\n * @param {Array<number>} [options.baseLineZones = []] - Array of x axis values (as from - to), to force that baseline cross those zones.\r\n * @returns {{corrected: Array<number>, error: number, iteration: number, baseline: Array<number>}}\r\n */\r\nfunction airPLS(x, y, options = {}) {\r\n  let {\r\n    maxIterations = 100,\r\n    lambda = 100,\r\n    factorCriterion = 0.001,\r\n    weights = new Array(y.length).fill(1),\r\n    controlPoints = [],\r\n    baseLineZones = [],\r\n  } = options;\r\n\r\n  if (controlPoints.length > 0) {\r\n    controlPoints.forEach((e, i, arr) => (arr[i] = getCloseIndex(x, e)));\r\n  }\r\n  if (baseLineZones.length > 0) {\r\n    baseLineZones.forEach((range) => {\r\n      let indexFrom = getCloseIndex(x, range.from);\r\n      let indexTo = getCloseIndex(x, range.to);\r\n      if (indexFrom > indexTo) [indexFrom, indexTo] = [indexTo, indexFrom];\r\n      for (let i = indexFrom; i < indexTo; i++) {\r\n        controlPoints.push(i);\r\n      }\r\n    });\r\n  }\r\n\r\n  let baseline, iteration;\r\n  let nbPoints = y.length;\r\n  let l = nbPoints - 1;\r\n  let sumNegDifferences = Number.MAX_SAFE_INTEGER;\r\n  let stopCriterion =\r\n    factorCriterion * y.reduce((sum, e) => Math.abs(e) + sum, 0);\r\n\r\n  let { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(\r\n    nbPoints,\r\n    lambda,\r\n  );\r\n\r\n  for (\r\n    iteration = 0;\r\n    iteration < maxIterations && Math.abs(sumNegDifferences) > stopCriterion;\r\n    iteration++\r\n  ) {\r\n    let [leftHandSide, rightHandSide] = updateSystem(\r\n      lowerTriangularNonZeros,\r\n      y,\r\n      weights,\r\n    );\r\n\r\n    let cho = Cholesky(leftHandSide, nbPoints, permutationEncodedArray);\r\n\r\n    baseline = cho(rightHandSide);\r\n\r\n    sumNegDifferences = 0;\r\n\r\n    let difference = y.map(calculateError);\r\n\r\n    let maxNegativeDiff = -1 * Number.MAX_SAFE_INTEGER;\r\n    for (let i = 1; i < l; i++) {\r\n      let diff = difference[i];\r\n      if (diff >= 0) {\r\n        weights[i] = 0;\r\n      } else {\r\n        weights[i] = Math.exp((iteration * diff) / sumNegDifferences);\r\n        if (maxNegativeDiff < diff) maxNegativeDiff = diff;\r\n      }\r\n    }\r\n\r\n    let value = Math.exp((iteration * maxNegativeDiff) / sumNegDifferences);\r\n    weights[0] = value;\r\n    weights[l] = value;\r\n    controlPoints.forEach((i) => (weights[i] = value));\r\n  }\r\n\r\n  return {\r\n    corrected: y.map((e, i) => e - baseline[i]),\r\n    baseline,\r\n    iteration,\r\n    error: sumNegDifferences,\r\n  };\r\n\r\n  function calculateError(e, i) {\r\n    let diff = e - baseline[i];\r\n    if (diff < 0) sumNegDifferences += diff;\r\n    return diff;\r\n  }\r\n}\r\n\r\nexport { airPLS as default };\r\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","export default function maybeToPrecision(value, digits) {\n  if (value < 0) {\n    value = 0 - value;\n    if (typeof digits === 'number') {\n      return `- ${value.toPrecision(digits)}`;\n    } else {\n      return `- ${value.toString()}`;\n    }\n  } else {\n    if (typeof digits === 'number') {\n      return value.toPrecision(digits);\n    } else {\n      return value.toString();\n    }\n  }\n}\n","import { isAnyArray } from 'is-any-array';\n\nexport default function checkArraySize(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","import { isAnyArray } from 'is-any-array';\n\nexport { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\n\nexport default class BaseRegression {\n  constructor() {\n    if (new.target === BaseRegression) {\n      throw new Error('BaseRegression must be subclassed');\n    }\n  }\n\n  predict(x) {\n    if (typeof x === 'number') {\n      return this._predict(x);\n    } else if (isAnyArray(x)) {\n      const y = [];\n      for (let i = 0; i < x.length; i++) {\n        y.push(this._predict(x[i]));\n      }\n      return y;\n    } else {\n      throw new TypeError('x must be a number or array');\n    }\n  }\n\n  _predict() {\n    throw new Error('_predict must be implemented');\n  }\n\n  train() {\n    // Do nothing for this package\n  }\n\n  toString() {\n    return '';\n  }\n\n  toLaTeX() {\n    return '';\n  }\n\n  /**\n   * Return the correlation coefficient of determination (r) and chi-square.\n   * @param {Array<number>} x\n   * @param {Array<number>} y\n   * @return {object}\n   */\n  score(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y) || x.length !== y.length) {\n      throw new Error('x and y must be arrays of the same length');\n    }\n\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\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\n    const r =\n      (n * xY - xSum * ySum) /\n      Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n\n    return {\n      r: r,\n      r2: r * r,\n      chi2: chi2,\n      rmsd: Math.sqrt(rmsd / n),\n    };\n  }\n}\n","import { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\nimport BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\n\nexport default class PolynomialRegression extends BaseRegression {\n  constructor(x, y, degree) {\n    super();\n    if (x === true) {\n      this.degree = y.degree;\n      this.powers = y.powers;\n      this.coefficients = y.coefficients;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y, degree);\n    }\n  }\n\n  _predict(x) {\n    let y = 0;\n    for (let k = 0; k < this.powers.length; k++) {\n      y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n    }\n    return y;\n  }\n\n  toJSON() {\n    return {\n      name: 'polynomialRegression',\n      degree: this.degree,\n      powers: this.powers,\n      coefficients: this.coefficients,\n    };\n  }\n\n  toString(precision) {\n    return this._toFormula(precision, false);\n  }\n\n  toLaTeX(precision) {\n    return this._toFormula(precision, true);\n  }\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\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        } else {\n          if (this.powers[k] === 1) {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x`;\n          } else {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x${sup}${this.powers[k]}${closeSup}`;\n          }\n        }\n\n        if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n          str = ` + ${str}`;\n        } else if (k !== this.coefficients.length - 1) {\n          str = ` ${str}`;\n        }\n      }\n      fn = str + fn;\n    }\n    if (fn.charAt(0) === '+') {\n      fn = fn.slice(1);\n    }\n\n    return `f(x) = ${fn}`;\n  }\n\n  static load(json) {\n    if (json.name !== 'polynomialRegression') {\n      throw new TypeError('not a polynomial regression model');\n    }\n    return new PolynomialRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y, degree) {\n  const n = x.length;\n  let powers;\n  if (Array.isArray(degree)) {\n    powers = degree;\n    degree = powers.length;\n  } else {\n    degree++;\n    powers = new Array(degree);\n    for (let k = 0; k < degree; k++) {\n      powers[k] = k;\n    }\n  }\n  const F = new Matrix(n, degree);\n  const Y = new Matrix([y]);\n  for (let k = 0; k < degree; k++) {\n    for (let i = 0; i < n; i++) {\n      if (powers[k] === 0) {\n        F.set(i, k, 1);\n      } else {\n        F.set(i, k, Math.pow(x[i], powers[k]));\n      }\n    }\n  }\n\n  const FT = new MatrixTransposeView(F);\n  const A = FT.mmul(F);\n  const B = FT.mmul(new MatrixTransposeView(Y));\n\n  pr.degree = degree - 1;\n  pr.powers = powers;\n  pr.coefficients = solve(A, B).to1DArray();\n}\n","import PolynomialRegression from 'ml-regression-polynomial';\r\n\r\n/**\r\n * Iterative regression-based baseline correction\r\n * @param {Array<number>} x - Independent axis variable\r\n * @param {Array<number>} y - Dependent axis variable\r\n * @param {object} [options] - Options object\r\n * @param {number} [options.maxIterations = 100] - Maximum number of allowed iterations\r\n * @param {function} [options.Regression = PolynomialRegression] - Regression class with a predict method\r\n * @param {*} [options.regressionOptions] - Options for regressionFunction\r\n * @param {number} [options.tolerance = 0.001] - Convergence error tolerance\r\n * @return {{corrected: Array<number>, delta: number, iteration: number, baseline: Array<number>}}\r\n */\r\nexport default function baselineCorrectionRegression(x, y, options = {}) {\r\n  let {\r\n    maxIterations = 100,\r\n    Regression = PolynomialRegression,\r\n    regressionOptions,\r\n    tolerance = 0.001,\r\n  } = options;\r\n\r\n  if (!regressionOptions && Regression === PolynomialRegression) {\r\n    regressionOptions = 3;\r\n  }\r\n\r\n  let baseline = y.slice();\r\n  let fitting = y.slice();\r\n  let oldFitting = y;\r\n  let iteration = 0;\r\n  let delta;\r\n  let regression;\r\n  while (iteration < maxIterations) {\r\n    // Calculate the fitting result\r\n    regression = new Regression(x, baseline, regressionOptions);\r\n\r\n    delta = 0;\r\n    for (let i = 0; i < baseline.length; i++) {\r\n      fitting[i] = regression.predict(x[i]);\r\n      if (baseline[i] > fitting[i]) {\r\n        baseline[i] = fitting[i];\r\n      }\r\n\r\n      delta += Math.abs((fitting[i] - oldFitting[i]) / oldFitting[i]);\r\n    }\r\n\r\n    // Stop criterion\r\n    if (delta < tolerance) {\r\n      break;\r\n    } else {\r\n      oldFitting = fitting.slice();\r\n      iteration++;\r\n    }\r\n  }\r\n\r\n  // removes baseline\r\n  let corrected = new Array(baseline.length);\r\n  for (let j = 0; j < baseline.length; j++) {\r\n    corrected[j] = y[j] - baseline[j];\r\n  }\r\n\r\n  return {\r\n    corrected,\r\n    delta,\r\n    iteration,\r\n    baseline,\r\n    regression: regression,\r\n  };\r\n}\r\n","import sequentialFill from 'ml-array-sequential-fill';\nimport baselineCorrection 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 = baselineCorrection(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';\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 * 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 * @export\n * @param {Array} spectrum\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 spectrum length\n */\nexport function rollingBall(spectrum, options = {}) {\n  if (!isAnyArray(spectrum)) {\n    throw new Error('Spectrum must be an array');\n  }\n\n  if (spectrum.length === 0) {\n    throw new TypeError('Spectrum must not be empty');\n  }\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\n  // windowM 4 percent of spectrum length\n  // windowS 8 percent of spectrum length\n  const {\n    windowM = Math.round(numberPoints * 0.04),\n    windowS = Math.round(numberPoints * 0.08),\n  } = options;\n\n  // fi(1) in original paper\n  for (let i = 0; i < spectrum.length; i++) {\n    let windowLeft = Math.max(0, i - windowM);\n    let windowRight = Math.min(i + windowM + 1, spectrum.length);\n\n    minima[i] = xMinValue(spectrum, {\n      fromIndex: windowLeft,\n      toIndex: windowRight,\n    });\n  }\n\n  // fi in original paper\n  for (let i = 0; i < minima.length; i++) {\n    let windowLeft = Math.max(0, i - windowM);\n    let windowRight = Math.min(i + windowM + 1, minima.length);\n    maxima[i] = xMaxValue(minima, {\n      fromIndex: windowLeft,\n      toIndex: windowRight,\n    });\n  }\n\n  for (let i = 0; i < minima.length; i++) {\n    let windowLeft = Math.max(0, i - windowS);\n    let windowRight = Math.min(i + windowS + 1, maxima.length);\n    baseline[i] = xMean(maxima.subarray(windowLeft, windowRight));\n  }\n\n  return baseline;\n}\n","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    let { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (typeof xs === 'undefined') {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    let half = Math.floor(windowSize / 2);\n    let np = ys.length;\n    let ans = new Float64Array(np);\n    let weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = Math.pow(xs, derivative);\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        let wg1 = weights[half - i - 1];\n        let wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    let wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return Math.pow(hs / count, derivative);\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else {\n        if (k === 0 && s === 0) {\n            Grampoly = 1;\n        }\n        else {\n            Grampoly = 0;\n        }\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * @private\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\n */\nfunction fullWeights(m, n, s) {\n    let weights = new Array(m);\n    let np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the first derivative using Savitzky–Golay filter.\n * @param data\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 */\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 */\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 */\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 { 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","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 { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport { gaussianFct, getGaussianFactor } from '../gaussian/Gaussian';\nimport { lorentzianFct, getLorentzianFactor } from '../lorentzian/Lorentzian';\nexport class PseudoVoigt {\n    constructor(options = {}) {\n        const { fwhm = 500, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this.fwhm, this.mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this.fwhm, height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this.fwhm,\n            mu: this.mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({ fwhm: this.fwhm, mu: this.mu, area });\n    }\n    getParameters() {\n        return ['fwhm', 'mu'];\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    let { fwhm = 1, mu = 0.5, area = 1 } = options;\n    return (2 * area) / (fwhm * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI));\n};\nexport const pseudoVoigtFct = (x, fwhm, mu) => {\n    return (1 - mu) * lorentzianFct(x, fwhm) + mu * gaussianFct(x, fwhm);\n};\nexport const pseudoVoigtWidthToFWHM = (width, mu = 0.5) => {\n    return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const pseudoVoigtFwhmToWidth = (fwhm, mu = 0.5) => {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const getPseudoVoigtArea = (options) => {\n    const { fwhm = 500, height = 1, mu = 0.5 } = options;\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\nexport const getPseudoVoigtFactor = (area = 0.9999, mu = 0.5) => {\n    return mu < 1 ? getLorentzianFactor(area) : getGaussianFactor(area);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    let { fwhm = 500, mu = 0.5 } = shape;\n    let { length, factor = getPseudoVoigtFactor(0.999, mu), height = calculatePseudoVoigtHeight({ fwhm, mu, area: 1 }), } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { Gaussian } from './gaussian/Gaussian';\nimport { Lorentzian } from './lorentzian/Lorentzian';\nimport { PseudoVoigt } from './pseudoVoigt/PseudoVoigt';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape1D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shape);\n        case 'lorentzian':\n            return new Lorentzian(shape);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shape);\n        default: {\n            throw Error(`Unknown distribution ${kind}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * Append 2 properties to the peaks, shape and fwhm\n */\nexport function appendShapeAndFWHM(peaks, options = {}) {\n    let { shape = { kind: 'gaussian' } } = options;\n    let shapeInstance = getShape1D(shape);\n    return peaks.map((peak) => ({\n        ...peak,\n        shape: { fwhm: shapeInstance.widthToFWHM(peak.width), ...shape },\n    }));\n}\n//# sourceMappingURL=appendShapeAndFWHM.js.map","/**\n * Correction of the x and y coordinates using a quadratic optimizations with the peak and its 3 closest neighbors to determine the true x,y values of the peak.\n * This process is done in place and is very fast.\n * @param data\n * @param peaks\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else {\n            if (y[currentIndex + 1] >= y[currentIndex] &&\n                y[currentIndex + 1] >= y[currentIndex + 2]) {\n                currentIndex++;\n            }\n            else {\n                if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n                    y[currentIndex - 2] >= y[currentIndex - 1]) {\n                    currentIndex -= 2;\n                }\n                else {\n                    if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n                        y[currentIndex + 2] >= y[currentIndex + 3]) {\n                        currentIndex += 2;\n                    }\n                }\n            }\n        }\n        // interpolation to a sin() function\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            let alpha = 20 * Math.log10(y[currentIndex - 1]);\n            let beta = 20 * Math.log10(y[currentIndex]);\n            let gamma = 20 * Math.log10(y[currentIndex + 1]);\n            let p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            peak.x = x[currentIndex] + (x[currentIndex] - x[currentIndex - 1]) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotoneIncreasing, xMinValue, xMaxValue, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { appendShapeAndFWHM } from './utils/appendShapeAndFWHM';\nimport { optimizeTop } from './utils/optimizeTop';\n/**\n * Global spectra deconvolution\n * @param  data - Object data with x and y arrays. Values in x has to be growing\n * @param {number} [options.broadRatio = 0.00] - If `broadRatio` is higher than 0, then all the peaks which second derivative\n * smaller than `broadRatio * maxAbsSecondDerivative` will be marked with the soft mask equal to true.\n\n */\nexport function gsd(data, options = {}) {\n    let { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, shape, noiseLevel, smoothY = false, maxCriteria = true, minMaxRatio = 0.00025, realTopDetection = false, } = options;\n    let { x, y } = data;\n    if (!xIsMonotoneIncreasing(x)) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    //rescale;\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    let equallySpaced = xIsEquallySpaced(x);\n    if (noiseLevel === undefined) {\n        if (equallySpaced) {\n            const noiseInfo = xNoiseStandardDeviation(y);\n            if (maxCriteria) {\n                noiseLevel = noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n            else {\n                noiseLevel = -noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n        }\n        else {\n            noiseLevel = 0;\n        }\n    }\n    else {\n        if (maxCriteria === false) {\n            noiseLevel *= -1;\n        }\n    }\n    if (maxCriteria === false) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] *= -1;\n        }\n    }\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    let yData = y;\n    let dY, ddY;\n    const { windowSize, polynomial } = sgOptions;\n    if (equallySpaced) {\n        if (smoothY) {\n            yData = sgg(y, x[1] - x[0], {\n                windowSize,\n                polynomial,\n                derivative: 0,\n            });\n        }\n        dY = sgg(y, x[1] - x[0], {\n            windowSize,\n            polynomial,\n            derivative: 1,\n        });\n        ddY = sgg(y, x[1] - x[0], {\n            windowSize,\n            polynomial,\n            derivative: 2,\n        });\n    }\n    else {\n        if (smoothY) {\n            yData = sgg(y, x, {\n                windowSize,\n                polynomial,\n                derivative: 0,\n            });\n        }\n        dY = sgg(y, x, {\n            windowSize,\n            polynomial,\n            derivative: 1,\n        });\n        ddY = sgg(y, x, {\n            windowSize,\n            polynomial,\n            derivative: 2,\n        });\n    }\n    const minY = xMinValue(yData);\n    const maxY = xMaxValue(yData);\n    if (minY > maxY || minY === maxY)\n        return [];\n    const yThreshold = minY + (maxY - minY) * minMaxRatio;\n    const dX = x[1] - x[0];\n    let lastMax = null;\n    let lastMin = null;\n    let minddY = [];\n    let intervalL = [];\n    let intervalR = [];\n    // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n    for (let i = 1; i < yData.length - 1; ++i) {\n        if ((dY[i] < dY[i - 1] && dY[i] <= dY[i + 1]) ||\n            (dY[i] <= dY[i - 1] && dY[i] < dY[i + 1])) {\n            lastMin = {\n                x: x[i],\n                index: i,\n            };\n            if (dX > 0 && lastMax !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Maximum in first derivative\n        if ((dY[i] >= dY[i - 1] && dY[i] > dY[i + 1]) ||\n            (dY[i] > dY[i - 1] && dY[i] >= dY[i + 1])) {\n            lastMax = {\n                x: x[i],\n                index: i,\n            };\n            if (dX < 0 && lastMin !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    let lastK = -1;\n    const peaks = [];\n    for (const minddYIndex of minddY) {\n        let deltaX = x[minddYIndex];\n        let possible = -1;\n        let k = lastK + 1;\n        let minDistance = Number.POSITIVE_INFINITY;\n        let currentDistance = 0;\n        while (possible === -1 && k < intervalL.length) {\n            currentDistance = Math.abs(deltaX - (intervalL[k].x + intervalR[k].x) / 2);\n            if (currentDistance < (intervalR[k].x - intervalL[k].x) / 2) {\n                possible = k;\n                lastK = k;\n            }\n            ++k;\n            // Not getting closer?\n            if (currentDistance >= minDistance) {\n                break;\n            }\n            minDistance = currentDistance;\n        }\n        if (possible !== -1) {\n            if (yData[minddYIndex] > yThreshold) {\n                let width = Math.abs(intervalR[possible].x - intervalL[possible].x);\n                peaks.push({\n                    x: deltaX,\n                    y: yData[minddYIndex],\n                    width,\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 appendShapeAndFWHM(peaks, { shape });\n}\n//# sourceMappingURL=gsd.js.map","import { isAnyArray } from 'is-any-array';\nexport default function checkOptions(data, parameterizedFunction, options) {\n    let { timeout, minValues, maxValues, initialValues, weights = 1, damping = 1e-2, dampingStepUp = 11, dampingStepDown = 9, maxIterations = 100, errorTolerance = 1e-7, centralDifference = false, gradientDifference = 10e-2, improvementThreshold = 1e-3, } = options;\n    if (damping <= 0) {\n        throw new Error('The damping option must be a positive number');\n    }\n    else if (!data.x || !data.y) {\n        throw new Error('The data parameter must have x and y elements');\n    }\n    else if (!isAnyArray(data.x) ||\n        data.x.length < 2 ||\n        !isAnyArray(data.y) ||\n        data.y.length < 2) {\n        throw new Error('The data parameter elements must be an array with more than 2 points');\n    }\n    else if (data.x.length !== data.y.length) {\n        throw new Error('The data parameter elements must have the same size');\n    }\n    let parameters = initialValues || new Array(parameterizedFunction.length).fill(1);\n    let nbPoints = data.y.length;\n    let parLen = parameters.length;\n    maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n    minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n    if (maxValues.length !== minValues.length) {\n        throw new Error('minValues and maxValues must be the same size');\n    }\n    if (!isAnyArray(parameters)) {\n        throw new Error('initialValues must be an array');\n    }\n    if (typeof gradientDifference === 'number') {\n        gradientDifference = new Array(parameters.length).fill(gradientDifference);\n    }\n    else if (isAnyArray(gradientDifference)) {\n        if (gradientDifference.length !== parLen) {\n            gradientDifference = new Array(parLen).fill(gradientDifference[0]);\n        }\n    }\n    else {\n        throw new Error('gradientDifference should be a number or array with length equal to the number of parameters');\n    }\n    let filler;\n    if (typeof weights === 'number') {\n        let value = 1 / weights ** 2;\n        filler = () => value;\n    }\n    else if (isAnyArray(weights)) {\n        if (weights.length < data.x.length) {\n            let value = 1 / weights[0] ** 2;\n            filler = () => value;\n        }\n        else {\n            filler = (i) => 1 / weights[i] ** 2;\n        }\n    }\n    else {\n        throw new Error('weights should be a number or array with length equal to the number of data points');\n    }\n    let checkTimeout;\n    if (timeout !== undefined) {\n        if (typeof timeout !== 'number') {\n            throw new Error('timeout should be a number');\n        }\n        let endTime = Date.now() + timeout * 1000;\n        checkTimeout = () => Date.now() > endTime;\n    }\n    else {\n        checkTimeout = () => false;\n    }\n    let weightSquare = new Array(data.x.length);\n    for (let i = 0; i < nbPoints; i++) {\n        weightSquare[i] = filler(i);\n    }\n    return {\n        checkTimeout,\n        minValues,\n        maxValues,\n        parameters,\n        weightSquare,\n        damping,\n        dampingStepUp,\n        dampingStepDown,\n        maxIterations,\n        errorTolerance,\n        centralDifference,\n        gradientDifference,\n        improvementThreshold,\n    };\n}\n//# sourceMappingURL=checkOptions.js.map","/**\n * the sum of the weighted squares of the errors (or weighted residuals) between the data.y\n * and the curve-fit function.\n * @ignore\n * @param {{x:ArrayLike<number>, y:ArrayLike<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {ArrayLike<number>} parameters - Array of current parameter values\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {ArrayLike<number>} weightSquare - Square of weights\n * @return {number}\n */\nexport default function errorCalculation(data, parameters, parameterizedFunction, weightSquare) {\n    let error = 0;\n    const func = parameterizedFunction(parameters);\n    for (let i = 0; i < data.x.length; i++) {\n        error += Math.pow(data.y[i] - func(data.x[i]), 2) / weightSquare[i];\n    }\n    return error;\n}\n//# sourceMappingURL=errorCalculation.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @ignore\n * @param {{x:ArrayLike<number>, y:ArrayLike<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {ArrayLike<number>} evaluatedData - Array of previous evaluated function values\n * @param {Array<number>} params - Array of previous parameter values\n * @param {number|array} gradientDifference - The step size to approximate the jacobian matrix\n * @param {boolean} centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Matrix}\n */\nexport default function gradientFunction(data, evaluatedData, params, gradientDifference, paramFunction, centralDifference) {\n    const nbParams = params.length;\n    const nbPoints = data.x.length;\n    let ans = Matrix.zeros(nbParams, nbPoints);\n    let rowIndex = 0;\n    for (let param = 0; param < nbParams; param++) {\n        if (gradientDifference[param] === 0)\n            continue;\n        let delta = gradientDifference[param];\n        let auxParams = params.slice();\n        auxParams[param] += delta;\n        let funcParam = paramFunction(auxParams);\n        if (!centralDifference) {\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (evaluatedData[point] - funcParam(data.x[point])) / delta);\n            }\n        }\n        else {\n            auxParams = params.slice();\n            auxParams[param] -= delta;\n            delta *= 2;\n            let funcParam2 = paramFunction(auxParams);\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta);\n            }\n        }\n        rowIndex++;\n    }\n    return ans;\n}\n//# sourceMappingURL=gradientFunction.js.map","import { inverse, Matrix } from 'ml-matrix';\nimport gradientFunction from './gradientFunction';\n/**\n * Matrix function over the samples\n * @ignore\n * @param {{x:ArrayLike<number>, y:ArrayLike<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {ArrayLike<number>} evaluatedData - Array of previous evaluated function values\n * @return {Matrix}\n */\nfunction matrixFunction(data, evaluatedData) {\n    const m = data.x.length;\n    let ans = new Matrix(m, 1);\n    for (let point = 0; point < m; point++) {\n        ans.set(point, 0, data.y[point] - evaluatedData[point]);\n    }\n    return ans;\n}\n/**\n * Iteration for Levenberg-Marquardt\n * @ignore\n * @param {{x:ArrayLike<number>, y:ArrayLike<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} params - Array of previous parameter values\n * @param {number} damping - Levenberg-Marquardt parameter\n * @param {number|array} gradientDifference - The step size to approximate the jacobian matrix\n * @param {boolean} centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n */\nexport default function step(data, params, damping, gradientDifference, parameterizedFunction, centralDifference, weights) {\n    let value = damping;\n    let identity = Matrix.eye(params.length, params.length, value);\n    const func = parameterizedFunction(params);\n    let evaluatedData = new Float64Array(data.x.length);\n    for (let i = 0; i < data.x.length; i++) {\n        evaluatedData[i] = func(data.x[i]);\n    }\n    let gradientFunc = gradientFunction(data, evaluatedData, params, gradientDifference, parameterizedFunction, centralDifference);\n    let residualError = matrixFunction(data, evaluatedData);\n    let inverseMatrix = inverse(identity.add(gradientFunc.mmul(gradientFunc.transpose().scale('row', { scale: weights }))));\n    let jacobianWeightResidualError = gradientFunc.mmul(residualError.scale('row', { scale: weights }));\n    let perturbations = inverseMatrix.mmul(jacobianWeightResidualError);\n    return {\n        perturbations,\n        jacobianWeightResidualError,\n    };\n}\n//# sourceMappingURL=step.js.map","import checkOptions from './checkOptions';\nimport errorCalculation from './errorCalculation';\nimport step from './step';\n/**\n * Curve fitting algorithm\n * @param {{x:ArrayLike<number>, y:ArrayLike<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {object} [options] - Options object\n * @param {number|ArrayLike<number>} [options.weights = 1] - weighting vector, if the length does not match with the number of data points, the vector is reconstructed with first value.\n * @param {number} [options.damping = 1e-2] - Levenberg-Marquardt parameter, small values of the damping parameter λ result in a Gauss-Newton update and large\nvalues of λ result in a gradient descent update\n * @param {number} [options.dampingStepDown = 9] - factor to reduce the damping (Levenberg-Marquardt parameter) when there is not an improvement when updating parameters.\n * @param {number} [options.dampingStepUp = 11] - factor to increase the damping (Levenberg-Marquardt parameter) when there is an improvement when updating parameters.\n * @param {number} [options.improvementThreshold = 1e-3] - the threshold to define an improvement through an update of parameters\n * @param {number|ArrayLike<number>} [options.gradientDifference = 10e-2] - The step size to approximate the jacobian matrix\n * @param {boolean} [options.centralDifference = false] - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {ArrayLike<number>} [options.minValues] - Minimum allowed values for parameters\n * @param {ArrayLike<number>} [options.maxValues] - Maximum allowed values for parameters\n * @param {ArrayLike<number>} [options.initialValues] - Array of initial parameter values\n * @param {number} [options.maxIterations = 100] - Maximum of allowed iterations\n * @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point.\n * @param {number} [options.timeout] - maximum time running before throw in seconds.\n * @return {{parameterValues: Array<number>, parameterError: number, iterations: number}}\n */\nexport function levenbergMarquardt(data, parameterizedFunction, options = {}) {\n    let { checkTimeout, minValues, maxValues, parameters, weightSquare, damping, dampingStepUp, dampingStepDown, maxIterations, errorTolerance, centralDifference, gradientDifference, improvementThreshold, } = checkOptions(data, parameterizedFunction, options);\n    let error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n    let optimalError = error;\n    let optimalParameters = parameters.slice();\n    let converged = error <= errorTolerance;\n    let iteration = 0;\n    for (; iteration < maxIterations && !converged; iteration++) {\n        let previousError = error;\n        let { perturbations, jacobianWeightResidualError } = step(data, parameters, damping, gradientDifference, parameterizedFunction, centralDifference, weightSquare);\n        for (let k = 0; k < parameters.length; k++) {\n            parameters[k] = Math.min(Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)), maxValues[k]);\n        }\n        error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n        if (isNaN(error))\n            break;\n        if (error < optimalError - errorTolerance) {\n            optimalError = error;\n            optimalParameters = parameters.slice();\n        }\n        let improvementMetric = (previousError - error) /\n            perturbations\n                .transpose()\n                .mmul(perturbations.mul(damping).add(jacobianWeightResidualError))\n                .get(0, 0);\n        if (improvementMetric > improvementThreshold) {\n            damping = Math.max(damping / dampingStepDown, 1e-7);\n        }\n        else {\n            damping = Math.min(damping * dampingStepUp, 1e7);\n        }\n        if (checkTimeout()) {\n            throw new Error(`The execution time is over to ${options.timeout} seconds`);\n        }\n        converged = error <= errorTolerance;\n    }\n    return {\n        parameterValues: optimalParameters,\n        parameterError: optimalError,\n        iterations: iteration,\n    };\n}\n//# sourceMappingURL=index.js.map","import { 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 */\nexport function calibrateX(data, options = {}) {\n    const { targetX = 0, nbPeaks = 1, from = data.x[0], to = data.x[data.x.length - 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    let 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 === 0)\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 { xEnsureFloat64 } from 'ml-spectra-processing';\nimport * as Filters from './filters/filters';\n/**\n * Apply filters on {x:[], y:[]}\n * @returns A very important number\n */\nexport function filterXY(data, filters) {\n    let result = {\n        data: { x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) },\n    };\n    const logs = [];\n    for (let filter of filters) {\n        const start = Date.now();\n        // eslint-disable-next-line import/namespace\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        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 { xIsMonotone, xMinValue, xMaxValue } from 'ml-spectra-processing';\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n    var _a;\n    let data = {\n        x: spectrum.variables.x.data,\n        y: spectrum.variables.y.data,\n    };\n    let 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    let { from = spectrum.variables.x.min, to = spectrum.variables.x.max, numberOfPoints, filters = [], exclusions = [], zones = [], } = options;\n    filters = JSON.parse(JSON.stringify(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    let { 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 = (_a = newSpectrum.variables.y.label) === null || _a === void 0 ? void 0 : _a.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.isMonotone = xIsMonotone(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.isMonotone = xIsMonotone(y);\n    return newSpectrum;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Tm9ybWFsaXplZFNwZWN0cnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZ2V0Tm9ybWFsaXplZFNwZWN0cnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUsxRSxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFFBQWtCLEVBQ2xCLFVBQXFDLEVBQUU7O0lBRXZDLElBQUksSUFBSSxHQUFHO1FBQ1QsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDNUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7S0FDN0IsQ0FBQztJQUNGLElBQUksV0FBVyxHQUFhO1FBQzFCLFNBQVMsRUFBRTtZQUNULENBQUMsRUFBRTtnQkFDRCxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDL0IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ2pDLEtBQUssRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLO2FBQ2xDO1lBQ0QsQ0FBQyxFQUFFO2dCQUNELElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUMvQixLQUFLLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDakMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUs7YUFDbEM7U0FDRjtLQUNGLENBQUM7SUFDRixJQUFJLFFBQVEsQ0FBQyxLQUFLO1FBQUUsV0FBVyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxD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","/*\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>\":[[\"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    /* concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"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\"], 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\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    \"<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    \"<ppt>\" :  [[\"ppt\"],1e-9, \"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.7.6\";\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.replace(/°C/g, 'tempC');\n    unit = unit.replace(/°F/g, 'tempF');\n    unit = unit.replace(/(^|\\W)K(\\W|$)/g, '$1tempK$2');\n    return unit;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydFVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9jb252ZXJ0VW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFjaEMsTUFBTSxVQUFVLFdBQVcsQ0FDekIsS0FBUSxFQUNSLFFBQWdCLEVBQ2hCLE1BQWM7SUFFZCxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0IsSUFBSSxRQUFRLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXRDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsdUJBQXVCO0lBQzdFLG9FQUFvRTtJQUNwRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsSUFBWTtJQUM3QixJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9","const testRegExp = /^\\/((?:\\\\\\/|[^/])+)\\/([migyu]{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 (err) {\n            return stringToRegexp(string);\n        }\n    }\n    else {\n        return stringToRegexp(string);\n    }\n}\nfunction stringToRegexp(string, flags = 'i') {\n    return new RegExp(string.replace(/[[\\]\\\\{}()+*?.$^|]/g, (match) => `\\\\${match}`), flags);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5zdXJlUmVnZXhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZW5zdXJlUmVnZXhwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxHQUFHLHVDQUF1QyxDQUFDO0FBRTNELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBdUI7SUFDbEQsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDOUMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxJQUFJLEtBQUssRUFBRTtRQUNULElBQUk7WUFDRixPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0I7S0FDRjtTQUFNO1FBQ0wsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0I7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxHQUFHO0lBQ2pELE9BQU8sSUFBSSxNQUFNLENBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUN0RSxLQUFLLENBQ04sQ0FBQztBQUNKLENBQUMifQ==","import { xIsMonotone, xMinValue, xMaxValue } from 'ml-spectra-processing';\nimport { convertUnit } from './convertUnit';\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        isMonotone: xIsMonotone(data),\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q29udmVydGVkVmFyaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9nZXRDb252ZXJ0ZWRWYXJpYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUkxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsUUFBMEIsRUFDMUIsUUFBZ0I7SUFFaEIsTUFBTSxJQUFJLEdBQ1IsUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsc0RBQXNEO1FBQ2hILENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7UUFDbEUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDcEIsT0FBTztRQUNMLEtBQUssRUFBRSxRQUFRO1FBQ2YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLFFBQVEsR0FBRyxDQUFDO1FBQzNFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtRQUNoQixHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDdkMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ3ZDLFVBQVUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDO0tBQzlCLENBQUM7QUFDSixDQUFDIn0=","/* eslint-disable @typescript-eslint/no-dynamic-delete */\nimport { convertUnit } from './convertUnit';\nimport { ensureRegexp } from './ensureRegexp';\nimport { getConvertedVariable } from './getConvertedVariable';\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 */\nexport function getXYSpectra(spectra = [], selector = {}) {\n    const selectedSpectra = [];\n    if (spectra.length < 1)\n        return selectedSpectra;\n    let { dataType, title, xUnits, yUnits, variables, xVariable = 'x', yVariable = 'y', units, labels, xLabel, yLabel, meta, index, } = 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 (let spectrum of spectra) {\n        let variableNames = Object.keys(spectrum.variables);\n        if (!(variableNames.length > 1))\n            continue;\n        // we filter on general spectrum information\n        if (dataType) {\n            if (!spectrum.dataType || !dataType.exec(spectrum.dataType)) {\n                continue;\n            }\n        }\n        if (title) {\n            if (!spectrum.title || !title.exec(spectrum.title)) {\n                continue;\n            }\n        }\n        if (meta && typeof meta === 'object') {\n            if (!spectrum.meta)\n                continue;\n            for (let key in spectrum.meta) {\n                if (!spectrum.meta[key])\n                    continue;\n                let value = ensureRegexp(spectrum.meta[key]);\n                if (!value.exec(spectrum.meta[key]))\n                    continue;\n            }\n        }\n        let x = getPossibleVariable(spectrum.variables, {\n            units: xUnits,\n            label: xLabel,\n            variableName: xVariable,\n        });\n        let y = getPossibleVariable(spectrum.variables, {\n            units: yUnits,\n            label: yLabel,\n            variableName: yVariable,\n        });\n        if (x && y) {\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    var _a, _b;\n    const { units, label, variableName } = selector;\n    let 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 === null || variable === void 0 ? void 0 : variable.units) || '', units);\n            }\n            catch (e) {\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((_b = (_a = variables[key]) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : '')) {\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.prototype.hasOwnProperty.call(possible, upper)) {\n            return possible[upper];\n        }\n        const lower = variableName.toLowerCase();\n        if (Object.prototype.hasOwnProperty.call(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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0WFlTcGVjdHJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZ2V0WFlTcGVjdHJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQVN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU5RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsVUFBMkIsRUFBRSxFQUM3QixXQUE2QixFQUFFO0lBRS9CLE1BQU0sZUFBZSxHQUFlLEVBQUUsQ0FBQztJQUV2QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU8sZUFBZSxDQUFDO0lBRS9DLElBQUksRUFDRixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FBRyxHQUFHLEVBQ2YsU0FBUyxHQUFHLEdBQUcsRUFDZixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLEtBQUssR0FDTixHQUFHLFFBQVEsQ0FBQztJQUViLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUN2QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDekI7SUFFRCxJQUFJLFFBQVEsRUFBRTtRQUNaLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDbkM7SUFFRCxJQUFJLEtBQUssRUFBRTtRQUNULEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDN0I7SUFFRCxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU07UUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVFLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ2hDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDN0M7SUFDRCxJQUFJLFNBQVMsRUFBRTtRQUNiLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBaUIsQ0FBQztZQUNyQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBaUIsQ0FBQztTQUN0QztLQUNGO0lBRUQsSUFBSSxNQUFNO1FBQUUsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxJQUFJLE1BQU07UUFBRSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFDLEtBQUssSUFBSSxRQUFRLElBQUksT0FBTyxFQUFFO1FBQzVCLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQUUsU0FBUztRQUUxQyw0Q0FBNEM7UUFDNUMsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFFLFFBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdkUsU0FBUzthQUNWO1NBQ0Y7UUFFRCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUUsS0FBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5RCxTQUFTO2FBQ1Y7U0FDRjtRQUVELElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQUUsU0FBUztZQUM3QixLQUFLLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztvQkFBRSxTQUFTO2dCQUNsQyxJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUFFLFNBQVM7YUFDL0M7U0FDRjtRQUVELElBQUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDOUMsS0FBSyxFQUFFLE1BQU07WUFDYixLQUFLLEVBQUUsTUFBTTtZQUNiLFlBQVksRUFBRSxTQUFTO1NBQ3hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDOUMsS0FBSyxFQUFFLE1BQU07WUFDYixLQUFLLEVBQUUsTUFBTTtZQUNiLFlBQVksRUFBRSxTQUFTO1NBQ3hCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO2dCQUMzQixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ25CLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTthQUNoQixDQUFDLENBQUM7U0FDSjtLQUNGO0lBQ0QsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQztBQU9ELFNBQVMsbUJBQW1CLENBQzFCLFNBQTRCLEVBQzVCLFdBQXFCLEVBQUU7O0lBRXZCLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUNoRCxJQUFJLFFBQVEsR0FBc0IsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQ25ELElBQUksR0FBMEIsQ0FBQztJQUMvQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDdkIsS0FBSyxHQUFHLElBQUksUUFBUSxFQUFFO1lBQ3BCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJO2dCQUNGLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsS0FBSyxLQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM5QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLGdCQUFnQixHQUFHLEtBQUssQ0FBQzthQUMxQjtZQUNELElBQUksZ0JBQWdCLElBQUksUUFBUSxFQUFFO2dCQUNoQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3ZEO2lCQUFNO2dCQUNMLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO1NBQ0Y7S0FDRjtJQUVELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUN2QixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsS0FBSyxHQUFHLElBQUksUUFBUSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQUEsTUFBQSxTQUFTLENBQUMsR0FBRyxDQUFDLDBDQUFFLEtBQUssbUNBQUksRUFBRSxDQUFDLEVBQUU7Z0JBQ2xELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO1NBQ0Y7S0FDRjtJQUVELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtRQUM5QixJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3pELE9BQU8sUUFBUSxDQUFDLEtBQThCLENBQUMsQ0FBQztTQUNqRDtRQUNELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDekQsT0FBTyxRQUFRLENBQUMsS0FBOEIsQ0FBQyxDQUFDO1NBQ2pEO0tBQ0Y7SUFFRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUNyRCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FDM0IsQ0FBQztJQUNGLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMvQixPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVCO0FBQ0gsQ0FBQyJ9","import { getXYSpectra } from './getXYSpectra';\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 */\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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0WFlTcGVjdHJ1bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2dldFhZU3BlY3RydW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixVQUEyQixFQUFFLEVBQzdCLFdBQTZCLEVBQUU7SUFFL0IsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4RCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ25ELE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUMifQ==","import { isAnyArray } from 'is-any-array';\nimport { xIsMonotone, xMinValue, xMaxValue } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum';\nimport { getXYSpectra } from './util/getXYSpectra';\nimport { getXYSpectrum } from './util/getXYSpectrum';\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    constructor(options = {}) {\n        this.id = options.id || Math.random().toString(36).substring(2, 10);\n        this.label = options.label || this.id;\n        this.spectrumCallback = options.spectrumCallback;\n        this.spectra = [];\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    /**\n     * Add a spectrum in the internal spectra variable\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 Spectrum based on x/y units\n     */\n    getXYSpectrum(selector = {}) {\n        let 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     */\n    getXYSpectra(selector = {}) {\n        let 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     */\n    getXY(selector = {}) {\n        let 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     */\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     */\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     */\n    getXLabel(selector) {\n        var _a;\n        return (_a = this.getXYSpectrum(selector)) === null || _a === void 0 ? void 0 : _a.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     */\n    getYLabel(selector) {\n        var _a;\n        return (_a = this.getXYSpectrum(selector)) === null || _a === void 0 ? void 0 : _a.variables.y.label;\n    }\n}\n/**\n * Internal function that ensure the order of x / y array\n */\nfunction standardizeData(variables, options, analysisOptions) {\n    let { meta = {}, dataType = '', title = '' } = options;\n    const { spectrumCallback } = analysisOptions;\n    if (spectrumCallback) {\n        spectrumCallback(variables);\n    }\n    let xVariable = variables.x;\n    let yVariable = variables.y;\n    if (!xVariable || !yVariable) {\n        throw Error('A spectrum must contain at least x and y variables');\n    }\n    if (!isAnyArray(xVariable.data) || !isAnyArray(yVariable.data)) {\n        throw Error('x and y variables must contain an array data');\n    }\n    let x = xVariable.data;\n    let reverse = x && x.length > 1 && x[0] > x[x.length - 1];\n    for (let [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.isMonotone = xIsMonotone(variable.data);\n    }\n    return {\n        variables,\n        title,\n        dataType,\n        meta,\n        id: Math.random().toString(36).replace('0.', ''),\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5hbHlzaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQW5hbHlzaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUsxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBY3JEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQVVuQixZQUFtQixVQUEyQixFQUFFO1FBQzlDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUNqQixTQUE0QixFQUM1QixVQUF1QyxFQUFFO1FBRXpDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLGVBQWUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFO1lBQ2xDLGdCQUFnQixFQUFF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","/*\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","/**\n * Dynamically type a string\n * @param {string} value String to dynamically type\n * @returns {boolean|string|number}\n */\nexport function parseString(value) {\n  if (value.length === 4 || value.length === 5) {\n    let lowercase = value.toLowerCase();\n\n    if (lowercase === 'true') return true;\n    if (lowercase === 'false') return false;\n  }\n  let number = Number(value);\n  if (number === 0 && !value.includes('0')) {\n    return value;\n  }\n  if (!Number.isNaN(number)) return number;\n  return value;\n}\n","const GC_MS_FIELDS = ['TIC', '.RIC', 'SCANNUMBER'];\nexport function complexChromatogram(result) {\n    let spectra = result.spectra;\n    let length = spectra.length;\n    let chromatogram = {\n        times: new Array(length),\n        series: {\n            ms: {\n                dimension: 2,\n                data: new Array(length),\n            },\n        },\n    };\n    let existingGCMSFields = [];\n    for (let i = 0; i < GC_MS_FIELDS.length; i++) {\n        let label = convertMSFieldToLabel(GC_MS_FIELDS[i]);\n        if (spectra[0][label]) {\n            existingGCMSFields.push(label);\n            chromatogram.series[label] = {\n                dimension: 1,\n                data: new Array(length),\n            };\n        }\n    }\n    for (let i = 0; i < length; i++) {\n        let spectrum = spectra[i];\n        chromatogram.times[i] = spectrum.pageValue;\n        for (let j = 0; j < existingGCMSFields.length; j++) {\n            chromatogram.series[existingGCMSFields[j]].data[i] = Number(spectrum[existingGCMSFields[j]]);\n        }\n        if (spectrum.data) {\n            chromatogram.series.ms.data[i] = [spectrum.data.x, spectrum.data.y];\n        }\n    }\n    result.chromatogram = chromatogram;\n}\nexport function isMSField(canonicDataLabel) {\n    return GC_MS_FIELDS.indexOf(canonicDataLabel) !== -1;\n}\nexport function convertMSFieldToLabel(value) {\n    return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n}\n//# sourceMappingURL=complexChromatogram.js.map","export default function convertToFloatArray(stringArray) {\n    let floatArray = [];\n    for (let i = 0; i < stringArray.length; i++) {\n        floatArray.push(Number(stringArray[i]));\n    }\n    return floatArray;\n}\n//# sourceMappingURL=convertToFloatArray.js.map","export default function fastParseXYData(spectrum, value) {\n    // TODO need to deal with result\n    //  console.log(value);\n    // we check if deltaX is defined otherwise we calculate it\n    let yFactor = spectrum.yFactor;\n    let deltaX = spectrum.deltaX;\n    spectrum.isXYdata = true;\n    let currentData = { x: [], y: [] };\n    spectrum.data = currentData;\n    let currentX = spectrum.firstX;\n    let currentY = spectrum.firstY;\n    // we skip the first line\n    //\n    let endLine = false;\n    let ascii;\n    let i = 0;\n    for (; i < value.length; i++) {\n        ascii = value.charCodeAt(i);\n        if (ascii === 13 || ascii === 10) {\n            endLine = true;\n        }\n        else if (endLine) {\n            break;\n        }\n    }\n    // we proceed taking the i after the first line\n    let newLine = true;\n    let isDifference = false;\n    let isLastDifference = false;\n    let lastDifference = 0;\n    let isDuplicate = false;\n    let inComment = false;\n    let currentValue = 0; // can be a difference or a duplicate\n    let lastValue = 0; // must be the real last value\n    let isNegative = false;\n    let inValue = false;\n    let skipFirstValue = false;\n    let decimalPosition = 0;\n    for (; i <= value.length; i++) {\n        if (i === value.length)\n            ascii = 13;\n        else\n            ascii = value.charCodeAt(i);\n        if (inComment) {\n            // we should ignore the text if we are after $$\n            if (ascii === 13 || ascii === 10) {\n                newLine = true;\n                inComment = false;\n            }\n        }\n        else {\n            // when is it a new value ?\n            // when it is not a digit, . or comma\n            // it is a number that is either new or we continue\n            // eslint-disable-next-line no-lonely-if\n            if (ascii <= 57 && ascii >= 48) {\n                // a number\n                inValue = true;\n                if (decimalPosition > 0) {\n                    currentValue += (ascii - 48) / Math.pow(10, decimalPosition++);\n                }\n                else {\n                    currentValue *= 10;\n                    currentValue += ascii - 48;\n                }\n            }\n            else if (ascii === 44 || ascii === 46) {\n                // a \",\" or \".\"\n                inValue = true;\n                decimalPosition++;\n            }\n            else {\n                if (inValue) {\n                    // need to process the previous value\n                    if (newLine) {\n                        newLine = false; // we don't check the X value\n                        // console.log(\"NEW LINE\",isDifference, lastDifference);\n                        // if new line and lastDifference, the first value is just a check !\n                        // that we don't check ...\n                        if (isLastDifference)\n                            skipFirstValue = true;\n                    }\n                    else {\n                        // need to deal with duplicate and differences\n                        // eslint-disable-next-line no-lonely-if\n                        if (skipFirstValue) {\n                            skipFirstValue = false;\n                        }\n                        else {\n                            if (isDifference) {\n                                lastDifference = isNegative ? 0 - currentValue : currentValue;\n                                isLastDifference = true;\n                                isDifference = false;\n                            }\n                            else if (!isDuplicate) {\n                                lastValue = isNegative ? 0 - currentValue : currentValue;\n                            }\n                            let duplicate = isDuplicate ? currentValue - 1 : 1;\n                            for (let j = 0; j < duplicate; j++) {\n                                if (isLastDifference) {\n                                    currentY += lastDifference;\n                                }\n                                else {\n                                    currentY = lastValue;\n                                }\n                                currentData.x.push(currentX);\n                                currentData.y.push(currentY * yFactor);\n                                currentX += deltaX;\n                            }\n                        }\n                    }\n                    isNegative = false;\n                    currentValue = 0;\n                    decimalPosition = 0;\n                    inValue = false;\n                    isDuplicate = false;\n                }\n                // positive SQZ digits @ A B C D E F G H I (ascii 64-73)\n                if (ascii < 74 && ascii > 63) {\n                    inValue = true;\n                    isLastDifference = false;\n                    currentValue = ascii - 64;\n                }\n                else if (ascii > 96 && ascii < 106) {\n                    // negative SQZ digits a b c d e f g h i (ascii 97-105)\n                    inValue = true;\n                    isLastDifference = false;\n                    currentValue = ascii - 96;\n                    isNegative = true;\n                }\n                else if (ascii === 115) {\n                    // DUP digits S T U V W X Y Z s (ascii 83-90, 115)\n                    inValue = true;\n                    isDuplicate = true;\n                    currentValue = 9;\n                }\n                else if (ascii > 82 && ascii < 91) {\n                    inValue = true;\n                    isDuplicate = true;\n                    currentValue = ascii - 82;\n                }\n                else if (ascii > 73 && ascii < 83) {\n                    // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n                    inValue = true;\n                    isDifference = true;\n                    currentValue = ascii - 73;\n                }\n                else if (ascii > 105 && ascii < 115) {\n                    // negative DIF digits j k l m n o p q r (ascii 106-114)\n                    inValue = true;\n                    isDifference = true;\n                    currentValue = ascii - 105;\n                    isNegative = true;\n                }\n                else if (ascii === 36 && value.charCodeAt(i + 1) === 36) {\n                    // $ sign, we need to check the next one\n                    inValue = true;\n                    inComment = true;\n                }\n                else if (ascii === 37) {\n                    // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n                    inValue = true;\n                    isDifference = true;\n                    currentValue = 0;\n                    isNegative = false;\n                }\n                else if (ascii === 45) {\n                    // a \"-\"\n                    // check if after there is a number, decimal or comma\n                    let ascii2 = value.charCodeAt(i + 1);\n                    if ((ascii2 >= 48 && ascii2 <= 57) ||\n                        ascii2 === 44 ||\n                        ascii2 === 46) {\n                        inValue = true;\n                        if (!newLine)\n                            isLastDifference = false;\n                        isNegative = true;\n                    }\n                }\n                else if (ascii === 13 || ascii === 10) {\n                    newLine = true;\n                    inComment = false;\n                }\n                // and now analyse the details ... space or tabulation\n                // if \"+\" we just don't care\n            }\n        }\n    }\n}\n//# sourceMappingURL=fastParseXYData.js.map","const removeCommentRegExp = /\\$\\$.*/;\nconst peakTableSplitRegExp = /[,\\t ]+/;\nexport default function parsePeakTable(spectrum, value, result) {\n    spectrum.isPeaktable = true;\n    if (!spectrum.variables || Object.keys(spectrum.variables) === 2) {\n        parseXY(spectrum, value, result);\n    }\n    else {\n        parseXYZ(spectrum, value, result);\n    }\n    // we will add the data in the variables\n    if (spectrum.variables) {\n        for (let key in spectrum.variables) {\n            spectrum.variables[key].data = spectrum.data[key];\n        }\n    }\n}\nfunction parseXY(spectrum, value, result) {\n    let currentData = { x: [], y: [] };\n    spectrum.data = currentData;\n    // counts for around 20% of the time\n    let lines = value.split(/,? *,?[;\\r\\n]+ */);\n    for (let i = 1; i < lines.length; i++) {\n        let values = lines[i]\n            .trim()\n            .replace(removeCommentRegExp, '')\n            .split(peakTableSplitRegExp);\n        if (values.length % 2 === 0) {\n            for (let j = 0; j < values.length; j = j + 2) {\n                // takes around 40% of the time to add and parse the 2 values nearly exclusively because of Number\n                currentData.x.push(Number(values[j]) * spectrum.xFactor);\n                currentData.y.push(Number(values[j + 1]) * spectrum.yFactor);\n            }\n        }\n        else {\n            result.logs.push(`Format error: ${values}`);\n        }\n    }\n}\nfunction parseXYZ(spectrum, value, result) {\n    let currentData = {};\n    let variables = Object.keys(spectrum.variables);\n    let numberOfVariables = variables.length;\n    variables.forEach((variable) => (currentData[variable] = []));\n    spectrum.data = currentData;\n    // counts for around 20% of the time\n    let lines = value.split(/,? *,?[;\\r\\n]+ */);\n    for (let i = 1; i < lines.length; i++) {\n        let values = lines[i]\n            .trim()\n            .replace(removeCommentRegExp, '')\n            .split(peakTableSplitRegExp);\n        if (values.length % numberOfVariables === 0) {\n            for (let j = 0; j < values.length; j++) {\n                // todo should try to find a xFactor (y, ...)\n                currentData[variables[j % numberOfVariables]].push(Number(values[j]));\n            }\n        }\n        else {\n            result.logs.push(`Format error: ${values}`);\n        }\n    }\n}\n//# sourceMappingURL=parsePeakTable.js.map","/*\n(5.4.4) ##РЕАК ASSIGNMENTS= (STRING). List\nof peak assignments for components or functional groups\nin the forms ##РЕАК ASSIGNMENTS= (ХУА),\n(XYW А), (ХУМА), (XYMW А). Each entry is surrounded Ьу parentheses and starts а new line. У, W (peak\nwidth), and М (multiplicity) values are optional. The\nsymbol А stands for а string detailing the assignment\nand must Ье enclosed Ьу angle brackets. If the peak width\nvalue is included, then the function used to calculate the\npeak width must Ье detailed in а $$ comment on the\nline(s) below ##PEAKASSIGNMENTS=. Priority OPTIONAL. N.B.: ##РЕАК ASSIGNMENTS= is the preferred method of transmitting peak information when\nthe assignments are known.\n */\nexport default function parseXYA(spectrum, value) {\n    spectrum.isXYAdata = true;\n    const currentData = {};\n    spectrum.data = currentData;\n    let lines = value.split(/\\r?\\n/);\n    const variables = lines[0]\n        .replace(/^.*?([A-Z]+).*$/, '$1')\n        .split('')\n        .map((variable) => variable.toLowerCase());\n    for (let i = 1; i < lines.length; i++) {\n        const fields = lines[i].replace(/^\\((.*)\\)$/, '$1').split(/ *, */);\n        for (let j = 0; j < variables.length; j++) {\n            let value = fields[j];\n            switch (variables[j]) {\n                case 'x':\n                case 'y':\n                case 'w':\n                    value = Number.parseFloat(value);\n                    break;\n                case 'a':\n                    value = value.replace(/^<(.*)>$/, '$1');\n                    break;\n                case 'm':\n                    break;\n                default:\n                    continue;\n            }\n            if (!currentData[variables[j]]) {\n                currentData[variables[j]] = [];\n            }\n            currentData[variables[j]].push(value);\n        }\n    }\n}\n//# sourceMappingURL=parseXYA.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 getMedian from 'ml-array-median';\nexport default function convertTo3DZ(spectra) {\n    let minZ = spectra[0].data.y[0];\n    let maxZ = minZ;\n    let ySize = spectra.length;\n    let xSize = spectra[0].data.x.length;\n    let z = new Array(ySize);\n    for (let i = 0; i < ySize; i++) {\n        z[i] = spectra[i].data.y;\n        for (let j = 0; j < xSize; j++) {\n            let value = z[i][j];\n            if (value < minZ)\n                minZ = value;\n            if (value > maxZ)\n                maxZ = value;\n        }\n    }\n    const firstX = spectra[0].data.x[0];\n    const lastX = spectra[0].data.x[spectra[0].data.x.length - 1]; // has to be -2 because it is a 1D array [x,y,x,y,...]\n    const firstY = spectra[0].pageValue;\n    const lastY = spectra[ySize - 1].pageValue;\n    // Because the min / max value are the only information about the matrix if we invert\n    // min and max we need to invert the array\n    if (firstX > lastX) {\n        for (let spectrum of z) {\n            spectrum.reverse();\n        }\n    }\n    if (firstY > lastY) {\n        z.reverse();\n    }\n    const medians = [];\n    for (let i = 0; i < z.length; i++) {\n        const row = Float64Array.from(z[i]);\n        for (let i = 0; i < row.length; i++) {\n            if (row[i] < 0)\n                row[i] = -row[i];\n        }\n        medians.push(getMedian(row));\n    }\n    const median = getMedian(medians);\n    return {\n        z,\n        minX: Math.min(firstX, lastX),\n        maxX: Math.max(firstX, lastX),\n        minY: Math.min(firstY, lastY),\n        maxY: Math.max(firstY, lastY),\n        minZ,\n        maxZ,\n        noise: median,\n    };\n}\n//# sourceMappingURL=convertTo3DZ.js.map","export default function generateContourLines(zData, options) {\n    let noise = zData.noise;\n    let z = zData.z;\n    let povarHeight0, povarHeight1, povarHeight2, povarHeight3;\n    let isOver0, isOver1, isOver2, isOver3;\n    let nbSubSpectra = z.length;\n    let nbPovars = z[0].length;\n    let pAx, pAy, pBx, pBy;\n    let x0 = zData.minX;\n    let xN = zData.maxX;\n    let dx = (xN - x0) / (nbPovars - 1);\n    let y0 = zData.minY;\n    let yN = zData.maxY;\n    let dy = (yN - y0) / (nbSubSpectra - 1);\n    let minZ = zData.minZ;\n    let maxZ = zData.maxZ;\n    // System.out.prvarln('y0 '+y0+' yN '+yN);\n    // -------------------------\n    // Povars attribution\n    //\n    // 0----1\n    // |  / |\n    // | /  |\n    // 2----3\n    //\n    // ---------------------d------\n    let iter = options.nbContourLevels * 2;\n    let contourLevels = new Array(iter);\n    let lineZValue;\n    for (let level = 0; level < iter; level++) {\n        // multiply by 2 for positif and negatif\n        let contourLevel = {};\n        contourLevels[level] = contourLevel;\n        let side = level % 2;\n        let factor = (maxZ - options.noiseMultiplier * noise) *\n            Math.exp((level >> 1) - options.nbContourLevels);\n        if (side === 0) {\n            lineZValue = factor + options.noiseMultiplier * noise;\n        }\n        else {\n            lineZValue = 0 - factor - options.noiseMultiplier * noise;\n        }\n        let lines = [];\n        contourLevel.zValue = lineZValue;\n        contourLevel.lines = lines;\n        if (lineZValue <= minZ || lineZValue >= maxZ)\n            continue;\n        for (let iSubSpectra = 0; iSubSpectra < nbSubSpectra - 1; iSubSpectra++) {\n            let subSpectra = z[iSubSpectra];\n            let subSpectraAfter = z[iSubSpectra + 1];\n            for (let povar = 0; povar < nbPovars - 1; povar++) {\n                povarHeight0 = subSpectra[povar];\n                povarHeight1 = subSpectra[povar + 1];\n                povarHeight2 = subSpectraAfter[povar];\n                povarHeight3 = subSpectraAfter[povar + 1];\n                isOver0 = povarHeight0 > lineZValue;\n                isOver1 = povarHeight1 > lineZValue;\n                isOver2 = povarHeight2 > lineZValue;\n                isOver3 = povarHeight3 > lineZValue;\n                // Example povar0 is over the plane and povar1 and\n                // povar2 are below, we find the varersections and add\n                // the segment\n                if (isOver0 !== isOver1 && isOver0 !== isOver2) {\n                    pAx =\n                        povar + (lineZValue - povarHeight0) / (povarHeight1 - povarHeight0);\n                    pAy = iSubSpectra;\n                    pBx = povar;\n                    pBy =\n                        iSubSpectra +\n                            (lineZValue - povarHeight0) / (povarHeight2 - povarHeight0);\n                    lines.push(pAx * dx + x0);\n                    lines.push(pAy * dy + y0);\n                    lines.push(pBx * dx + x0);\n                    lines.push(pBy * dy + y0);\n                }\n                // remove push does not help !!!!\n                if (isOver3 !== isOver1 && isOver3 !== isOver2) {\n                    pAx = povar + 1;\n                    pAy =\n                        iSubSpectra +\n                            1 -\n                            (lineZValue - povarHeight3) / (povarHeight1 - povarHeight3);\n                    pBx =\n                        povar +\n                            1 -\n                            (lineZValue - povarHeight3) / (povarHeight2 - povarHeight3);\n                    pBy = iSubSpectra + 1;\n                    lines.push(pAx * dx + x0);\n                    lines.push(pAy * dy + y0);\n                    lines.push(pBx * dx + x0);\n                    lines.push(pBy * dy + y0);\n                }\n                // test around the diagonal\n                if (isOver1 !== isOver2) {\n                    pAx =\n                        (povar +\n                            1 -\n                            (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n                            dx +\n                            x0;\n                    pAy =\n                        (iSubSpectra +\n                            (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n                            dy +\n                            y0;\n                    if (isOver1 !== isOver0) {\n                        pBx =\n                            povar +\n                                1 -\n                                (lineZValue - povarHeight1) / (povarHeight0 - povarHeight1);\n                        pBy = iSubSpectra;\n                        lines.push(pAx);\n                        lines.push(pAy);\n                        lines.push(pBx * dx + x0);\n                        lines.push(pBy * dy + y0);\n                    }\n                    if (isOver2 !== isOver0) {\n                        pBx = povar;\n                        pBy =\n                            iSubSpectra +\n                                1 -\n                                (lineZValue - povarHeight2) / (povarHeight0 - povarHeight2);\n                        lines.push(pAx);\n                        lines.push(pAy);\n                        lines.push(pBx * dx + x0);\n                        lines.push(pBy * dy + y0);\n                    }\n                    if (isOver1 !== isOver3) {\n                        pBx = povar + 1;\n                        pBy =\n                            iSubSpectra +\n                                (lineZValue - povarHeight1) / (povarHeight3 - povarHeight1);\n                        lines.push(pAx);\n                        lines.push(pAy);\n                        lines.push(pBx * dx + x0);\n                        lines.push(pBy * dy + y0);\n                    }\n                    if (isOver2 !== isOver3) {\n                        pBx =\n                            povar +\n                                (lineZValue - povarHeight2) / (povarHeight3 - povarHeight2);\n                        pBy = iSubSpectra + 1;\n                        lines.push(pAx);\n                        lines.push(pAy);\n                        lines.push(pBx * dx + x0);\n                        lines.push(pBy * dy + y0);\n                    }\n                }\n            }\n        }\n    }\n    return {\n        minX: zData.minX,\n        maxX: zData.maxX,\n        minY: zData.minY,\n        maxY: zData.maxY,\n        segments: contourLevels,\n    };\n}\n//# sourceMappingURL=generateContourLines.js.map","import convertTo3DZ from './convertTo3DZ';\nimport generateContourLines from './generateContourLines';\nexport default function add2D(result, options) {\n    let zData = convertTo3DZ(result.spectra);\n    if (!options.noContour) {\n        result.contourLines = generateContourLines(zData, options);\n        delete zData.z;\n    }\n    result.minMax = zData;\n}\n//# sourceMappingURL=add2D.js.map","export const gyromagneticRatio = {\n    '1H': 267.52218744e6,\n    '2H': 41.065e6,\n    '3H': 285.3508e6,\n    '3He': -203.789e6,\n    '7Li': 103.962e6,\n    '13C': 67.28284e6,\n    '14N': 19.331e6,\n    '15N': -27.116e6,\n    '17O': -36.264e6,\n    '19F': 251.662e6,\n    '23Na': 70.761e6,\n    '27Al': 69.763e6,\n    '29Si': -53.19e6,\n    '31P': 108.291e6,\n    '57Fe': 8.681e6,\n    '63Cu': 71.118e6,\n    '67Zn': 16.767e6,\n    '129Xe': -73.997e6,\n};\n//# sourceMappingURL=index.js.map","import { gyromagneticRatio } from 'gyromagnetic-ratio';\nexport default function postProcessingNMR(entriesFlat) {\n    // specific NMR functions\n    for (let entry of entriesFlat) {\n        let observeFrequency = 0;\n        let shiftOffsetVal = 0;\n        for (let spectrum of entry.spectra) {\n            if (entry.ntuples && entry.ntuples.symbol) {\n                if (!observeFrequency && spectrum.observeFrequency) {\n                    observeFrequency = spectrum.observeFrequency;\n                }\n                if (!shiftOffsetVal && spectrum.shiftOffsetVal) {\n                    shiftOffsetVal = spectrum.shiftOffsetVal;\n                }\n            }\n            else {\n                observeFrequency = spectrum.observeFrequency;\n                shiftOffsetVal = spectrum.shiftOffsetVal;\n            }\n            if (observeFrequency) {\n                if (spectrum.xUnits && spectrum.xUnits.toUpperCase().includes('HZ')) {\n                    spectrum.xUnits = 'PPM';\n                    spectrum.xFactor = spectrum.xFactor / observeFrequency;\n                    spectrum.firstX = spectrum.firstX / observeFrequency;\n                    spectrum.lastX = spectrum.lastX / observeFrequency;\n                    spectrum.deltaX = spectrum.deltaX / observeFrequency;\n                    for (let i = 0; i < spectrum.data.x.length; i++) {\n                        spectrum.data.x[i] /= observeFrequency;\n                    }\n                }\n            }\n            if (shiftOffsetVal && spectrum.xUnits.toLowerCase().includes('ppm')) {\n                let shift = spectrum.firstX - shiftOffsetVal;\n                spectrum.firstX = spectrum.firstX - shift;\n                spectrum.lastX = spectrum.lastX - shift;\n                for (let i = 0; i < spectrum.data.x.length; i++) {\n                    spectrum.data.x[i] -= shift;\n                }\n            }\n            // we will check if some nucleus are missing ...\n            if (entry.ntuples && entry.ntuples.nucleus && entry.ntuples.symbol) {\n                for (let i = 0; i < entry.ntuples.nucleus.length; i++) {\n                    let symbol = entry.ntuples.symbol[i];\n                    let nucleus = entry.ntuples.nucleus[i];\n                    if (symbol.startsWith('F') && !nucleus) {\n                        if (symbol === 'F1') {\n                            // if F1 is defined we will use F2\n                            if (entry.tmp.$NUC2) {\n                                entry.ntuples.nucleus[i] = entry.tmp.$NUC2;\n                            }\n                            else {\n                                let f2index = entry.ntuples.symbol.indexOf('F2');\n                                if (f2index && entry.ntuples.nucleus[f2index]) {\n                                    entry.ntuples.nucleus[i] = entry.ntuples.nucleus[f2index];\n                                }\n                            }\n                        }\n                        if (symbol === 'F2')\n                            entry.ntuples.nucleus[i] = entry.tmp.$NUC1;\n                    }\n                    if (symbol === 'F2') {\n                        entry.yType = entry.ntuples.nucleus[0];\n                    }\n                }\n            }\n            if (observeFrequency &&\n                entry.ntuples &&\n                entry.ntuples.symbol &&\n                entry.ntuples.nucleus) {\n                let unit = '';\n                let pageSymbolIndex = entry.ntuples.symbol.indexOf(spectrum.pageSymbol);\n                if (entry.ntuples.units && entry.ntuples.units[pageSymbolIndex]) {\n                    unit = entry.ntuples.units[pageSymbolIndex];\n                }\n                if (unit !== 'PPM') {\n                    if (pageSymbolIndex !== 0) {\n                        throw Error('Not sure about this ntuples format');\n                    }\n                    let ratio0 = gyromagneticRatio[entry.ntuples.nucleus[0]];\n                    let ratio1 = gyromagneticRatio[entry.ntuples.nucleus[1]];\n                    if (!ratio0 || !ratio1) {\n                        throw Error('Problem with determination of gyromagnetic ratio');\n                    }\n                    let ratio = (ratio0 / ratio1) * observeFrequency;\n                    spectrum.pageValue /= ratio;\n                }\n            }\n        }\n    }\n}\n//# sourceMappingURL=postProcessingNMR.js.map","export default function profiling(result, action, options) {\n    if (result.profiling) {\n        result.profiling.push({\n            action,\n            time: Date.now() - options.start,\n        });\n    }\n}\n//# sourceMappingURL=profiling.js.map","export default function simpleChromatogram(result) {\n    let data = result.spectra[0].data;\n    result.chromatogram = {\n        times: data.x.slice(),\n        series: {\n            intensity: {\n                dimension: 1,\n                data: data.y.slice(),\n            },\n        },\n    };\n}\n//# sourceMappingURL=simpleChromatogram.js.map","import add2D from './2d/add2D';\nimport { complexChromatogram } from './complexChromatogram';\nimport postProcessingNMR from './postProcessingNMR';\nimport profiling from './profiling';\nimport simpleChromatogram from './simpleChromatogram';\nexport default function postProcessing(entriesFlat, result, options) {\n    // converting Hz to ppm\n    postProcessingNMR(entriesFlat);\n    for (let entry of entriesFlat) {\n        if (Object.keys(entry.ntuples).length > 0) {\n            let newNtuples = [];\n            let keys = Object.keys(entry.ntuples);\n            for (let i = 0; i < keys.length; i++) {\n                let key = keys[i];\n                let values = entry.ntuples[key];\n                for (let j = 0; j < values.length; j++) {\n                    if (!newNtuples[j])\n                        newNtuples[j] = {};\n                    newNtuples[j][key] = values[j];\n                }\n            }\n            entry.ntuples = newNtuples;\n        }\n        if (entry.twoD && options.wantXY) {\n            add2D(entry, options);\n            profiling(result, 'Finished countour plot calculation', options);\n            if (!options.keepSpectra) {\n                delete entry.spectra;\n            }\n        }\n        // maybe it is a GC (HPLC) / MS. In this case we add a new format\n        if (options.chromatogram) {\n            if (entry.spectra.length > 1) {\n                complexChromatogram(entry);\n            }\n            else {\n                simpleChromatogram(entry);\n            }\n            profiling(result, 'Finished chromatogram calculation', options);\n        }\n        delete entry.tmp;\n    }\n}\n//# sourceMappingURL=postProcessing.js.map","export default function prepareNtuplesDatatable(currentEntry, spectrum, kind) {\n    let xIndex = -1;\n    let yIndex = -1;\n    let firstVariable = '';\n    let secondVariable = '';\n    if (kind.indexOf('++') > 0) {\n        firstVariable = kind.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/, '$1');\n        secondVariable = kind.replace(/.*\\.\\.([a-zA-Z0-9]+).*/, '$1');\n    }\n    else {\n        kind = kind.replace(/[^a-zA-Z]/g, '');\n        firstVariable = kind.charAt(0);\n        secondVariable = kind.charAt(1);\n        spectrum.variables = {};\n        for (let symbol of kind) {\n            let lowerCaseSymbol = symbol.toLowerCase();\n            let index = currentEntry.ntuples.symbol.indexOf(symbol);\n            if (index === -1)\n                throw Error(`Symbol undefined: ${symbol}`);\n            spectrum.variables[lowerCaseSymbol] = {};\n            for (let key in currentEntry.ntuples) {\n                if (currentEntry.ntuples[key][index]) {\n                    spectrum.variables[lowerCaseSymbol][key.replace(/^var/, '')] =\n                        currentEntry.ntuples[key][index];\n                }\n            }\n        }\n    }\n    xIndex = currentEntry.ntuples.symbol.indexOf(firstVariable);\n    yIndex = currentEntry.ntuples.symbol.indexOf(secondVariable);\n    if (xIndex === -1)\n        xIndex = 0;\n    if (yIndex === -1)\n        yIndex = 0;\n    if (currentEntry.ntuples.first) {\n        if (currentEntry.ntuples.first.length > xIndex) {\n            spectrum.firstX = currentEntry.ntuples.first[xIndex];\n        }\n        if (currentEntry.ntuples.first.length > yIndex) {\n            spectrum.firstY = currentEntry.ntuples.first[yIndex];\n        }\n    }\n    if (currentEntry.ntuples.last) {\n        if (currentEntry.ntuples.last.length > xIndex) {\n            spectrum.lastX = currentEntry.ntuples.last[xIndex];\n        }\n        if (currentEntry.ntuples.last.length > yIndex) {\n            spectrum.lastY = currentEntry.ntuples.last[yIndex];\n        }\n    }\n    if (currentEntry.ntuples.vardim &&\n        currentEntry.ntuples.vardim.length > xIndex) {\n        spectrum.nbPoints = currentEntry.ntuples.vardim[xIndex];\n    }\n    if (currentEntry.ntuples.factor) {\n        if (currentEntry.ntuples.factor.length > xIndex) {\n            spectrum.xFactor = currentEntry.ntuples.factor[xIndex];\n        }\n        if (currentEntry.ntuples.factor.length > yIndex) {\n            spectrum.yFactor = currentEntry.ntuples.factor[yIndex];\n        }\n    }\n    if (currentEntry.ntuples.units) {\n        if (currentEntry.ntuples.units.length > xIndex) {\n            if (currentEntry.ntuples.varname &&\n                currentEntry.ntuples.varname[xIndex]) {\n                spectrum.xUnits = `${currentEntry.ntuples.varname[xIndex]} [${currentEntry.ntuples.units[xIndex]}]`;\n            }\n            else {\n                spectrum.xUnits = currentEntry.ntuples.units[xIndex];\n            }\n        }\n        if (currentEntry.ntuples.units.length > yIndex) {\n            if (currentEntry.ntuples.varname &&\n                currentEntry.ntuples.varname[yIndex]) {\n                spectrum.yUnits = `${currentEntry.ntuples.varname[yIndex]} [${currentEntry.ntuples.units[yIndex]}]`;\n            }\n            else {\n                spectrum.yUnits = currentEntry.ntuples.units[yIndex];\n            }\n        }\n    }\n}\n//# sourceMappingURL=prepareNtuplesDatatable.js.map","export default function prepareSpectrum(spectrum) {\n    if (!spectrum.xFactor)\n        spectrum.xFactor = 1;\n    if (!spectrum.yFactor)\n        spectrum.yFactor = 1;\n}\n//# sourceMappingURL=prepareSpectrum.js.map","import { parseString } from 'dynamic-typing';\nimport { ensureString } from 'ensure-string';\nimport { isMSField, convertMSFieldToLabel } from './complexChromatogram';\nimport convertToFloatArray from './convertToFloatArray';\nimport fastParseXYData from './parse/fastParseXYData';\nimport parsePeakTable from './parse/parsePeakTable';\nimport parseXYA from './parse/parseXYA';\nimport postProcessing from './postProcessing';\nimport prepareNtuplesDatatable from './prepareNtuplesDatatable';\nimport prepareSpectrum from './prepareSpectrum';\nimport profiling from './profiling';\n// the following RegExp can only be used for XYdata, some peakTables have values with a \"E-5\" ...\nconst ntuplesSeparatorRegExp = /[ \\t]*,[ \\t]*/;\nconst defaultOptions = {\n    keepRecordsRegExp: /^$/,\n    canonicDataLabels: true,\n    canonicMetadataLabels: false,\n    dynamicTyping: true,\n    withoutXY: false,\n    chromatogram: false,\n    keepSpectra: false,\n    noContour: false,\n    nbContourLevels: 7,\n    noiseMultiplier: 5,\n    profiling: false,\n};\n/**\n * Conversion options\n * @typedef {object} ConvertOptions\n * @property {RegExp} [keepRecordsRegExp=/^$/] - By default we don't keep meta information.\n * @property {boolean} [canonicDataLabels=true] - Canonize the Labels (uppercase without symbol).\n * @property {boolean} [canonicMetadataLabels=false] - Canonize the metadata Labels (uppercase without symbol).\n * @property {boolean} [dynamicTyping=false] - Convert numbers to Number.\n * @property {boolean} [withoutXY=false] - Remove the XY data.\n * @property {boolean} [chromatogram=false] - Special post-processing for GC / HPLC / MS.\n * @property {boolean} [keepSpectra=false] - Force to keep the spectra in case of 2D.\n * @property {boolean} [noContour=false] - Don't calculate countour in case of 2D.\n * @property {number} [nbContourLevels=7] - Number of positive / negative contour levels to calculate.\n * @property {number} [noiseMultiplier=5] - Define for 2D the level as 5 times the median as default.\n * @property {boolean} [profiling=false] - Add profiling information.\n */\n/**\n *\n * @typedef {object} Ntuples\n * @property {string[]} [varname]\n * @property {string[]} [symbol]\n * @property {string[]} [vartype]\n * @property {string[]} [varform]\n * @property {number[]} [vardim]\n * @property {string[]} [units]\n * @property {number[]} [factor]\n * @property {number[]} [first]\n * @property {number[]} [last]\n * @property {number[]} [min]\n * @property {number[]} [max]\n * @property {string[]} [nucleus]\n */\n/**\n * @typedef { Record<string, any> } Spectrum\n * @property {Record<string, number[]>} [data]\n * @property {number} [firstX] - first X value\n * @property {number} [lastX] - last X value\n * @property {number} [deltaX] - distance between 2 consecutive x axis values\n * @property {number} [yFactor] - y axis scaling factor\n * @property {number} [xFactor] - x axis scaling factor\n * @property {number} [nbPoints] - Number of points\n */\n/**\n *\n * @typedef {object} Entry\n * @property {Spectrum[]} spectra\n * @property {Ntuples} ntuples\n * @property {object} meta\n * @property {object} info\n * @property {object} tmp\n * @property {string} [title]\n * @property {string} [dataType]\n * @property {string} [dataClass]\n * @property {boolean} [twoD]\n */\n/**\n *\n * @typedef { object } ConvertResult\n * @property { object[] | boolean } profiling\n * @property { string[] } logs\n * @property { object[] } entries\n * @property { Entry[] } flatten\n */\n/**\n * Parse a jcamp.\n * The data can be provide as a string or array buffer. In this later case\n * we will convert it first to a string before parsing.\n * @param {string|ArrayBuffer|Uint8Array} jcamp\n * @param {ConvertOptions} [options]\n * @returns {ConvertResult}\n */\nexport function convert(jcamp, options = {}) {\n    jcamp = ensureString(jcamp);\n    options = { ...defaultOptions, ...options };\n    options.wantXY = !options.withoutXY;\n    options.start = Date.now();\n    let entriesFlat = [];\n    let result = {\n        profiling: options.profiling ? [] : false,\n        logs: [],\n        entries: [],\n    };\n    let tmpResult = { children: [] };\n    let currentEntry = tmpResult;\n    let parentsStack = [];\n    let spectrum = {};\n    if (typeof jcamp !== 'string') {\n        throw new TypeError('the JCAMP should be a string');\n    }\n    profiling(result, 'Before split to LDRS', options);\n    let ldrs = jcamp.replace(/[\\r\\n]+##/g, '\\n##').split('\\n##');\n    profiling(result, 'Split to LDRS', options);\n    if (ldrs[0])\n        ldrs[0] = ldrs[0].replace(/^[\\r\\n ]*##/, '');\n    for (let ldr of ldrs) {\n        // This is a new LDR\n        let position = ldr.indexOf('=');\n        let dataLabel = position > 0 ? ldr.substring(0, position) : ldr;\n        let dataValue = position > 0 ? ldr.substring(position + 1).trim() : '';\n        let canonicDataLabel = dataLabel.replace(/[_ -]/g, '').toUpperCase();\n        if (canonicDataLabel === 'DATATABLE') {\n            let endLine = dataValue.indexOf('\\n');\n            if (endLine === -1)\n                endLine = dataValue.indexOf('\\r');\n            if (endLine > 0) {\n                // ##DATA TABLE= (X++(I..I)), XYDATA\n                // We need to find the variables\n                let infos = dataValue.substring(0, endLine).split(/[ ,;\\t]+/);\n                prepareNtuplesDatatable(currentEntry, spectrum, infos[0]);\n                spectrum.datatable = infos[0];\n                if (infos[1] && infos[1].indexOf('PEAKS') > -1) {\n                    canonicDataLabel = 'PEAKTABLE';\n                }\n                else if (infos[1] &&\n                    (infos[1].indexOf('XYDATA') || infos[0].indexOf('++') > 0)) {\n                    canonicDataLabel = 'XYDATA';\n                    if (spectrum.nbPoints) {\n                        spectrum.deltaX =\n                            (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n                    }\n                }\n            }\n        }\n        if (canonicDataLabel === 'XYDATA') {\n            if (options.wantXY) {\n                prepareSpectrum(spectrum);\n                // well apparently we should still consider it is a PEAK TABLE if there are no '++' after\n                if (dataValue.match(/.*\\+\\+.*/)) {\n                    // ex: (X++(Y..Y))\n                    if (spectrum.nbPoints) {\n                        spectrum.deltaX =\n                            (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n                    }\n                    fastParseXYData(spectrum, dataValue, result);\n                }\n                else {\n                    parsePeakTable(spectrum, dataValue, result);\n                }\n                currentEntry.spectra.push(spectrum);\n                spectrum = {};\n            }\n            continue;\n        }\n        else if (canonicDataLabel === 'PEAKTABLE') {\n            if (options.wantXY) {\n                prepareSpectrum(spectrum);\n                parsePeakTable(spectrum, dataValue, result);\n                currentEntry.spectra.push(spectrum);\n                spectrum = {};\n            }\n            continue;\n        }\n        if (canonicDataLabel === 'PEAKASSIGNMENTS') {\n            if (options.wantXY) {\n                if (dataValue.match(/.*([^A-Z]*).*/)) {\n                    // ex: (XYA)\n                    parseXYA(spectrum, dataValue);\n                }\n                currentEntry.spectra.push(spectrum);\n                spectrum = {};\n            }\n            continue;\n        }\n        if (canonicDataLabel === 'TITLE') {\n            let parentEntry = currentEntry;\n            if (!parentEntry.children) {\n                parentEntry.children = [];\n            }\n            currentEntry = {\n                spectra: [],\n                ntuples: {},\n                info: {},\n                meta: {},\n                tmp: {}, // tmp information we need to keep for postprocessing\n            };\n            parentEntry.children.push(currentEntry);\n            parentsStack.push(parentEntry);\n            entriesFlat.push(currentEntry);\n            currentEntry.title = dataValue;\n        }\n        else if (canonicDataLabel === 'DATATYPE') {\n            currentEntry.dataType = dataValue;\n            if (dataValue.match(/(^nd|\\snd\\s)/i)) {\n                currentEntry.twoD = true;\n            }\n        }\n        else if (canonicDataLabel === 'NTUPLES') {\n            if (dataValue.match(/(^nd|\\snd\\s)/i)) {\n                currentEntry.twoD = true;\n            }\n        }\n        else if (canonicDataLabel === 'DATACLASS') {\n            currentEntry.dataClass = dataValue;\n        }\n        else if (canonicDataLabel === 'XUNITS') {\n            spectrum.xUnits = dataValue;\n        }\n        else if (canonicDataLabel === 'YUNITS') {\n            spectrum.yUnits = dataValue;\n        }\n        else if (canonicDataLabel === 'FIRSTX') {\n            spectrum.firstX = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'LASTX') {\n            spectrum.lastX = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'FIRSTY') {\n            spectrum.firstY = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'LASTY') {\n            spectrum.lastY = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'NPOINTS') {\n            spectrum.nbPoints = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'XFACTOR') {\n            spectrum.xFactor = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'YFACTOR') {\n            spectrum.yFactor = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'MAXX') {\n            spectrum.maxX = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'MINX') {\n            spectrum.minX = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'MAXY') {\n            spectrum.maxY = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'MINY') {\n            spectrum.minY = Number(dataValue);\n        }\n        else if (canonicDataLabel === 'DELTAX') {\n            spectrum.deltaX = Number(dataValue);\n        }\n        else if (canonicDataLabel === '.OBSERVEFREQUENCY' ||\n            canonicDataLabel === '$SFO1') {\n            if (!spectrum.observeFrequency) {\n                spectrum.observeFrequency = Number(dataValue);\n            }\n        }\n        else if (canonicDataLabel === '.OBSERVENUCLEUS') {\n            if (!spectrum.xType) {\n                currentEntry.xType = dataValue.replace(/[^a-zA-Z0-9]/g, '');\n            }\n        }\n        else if (canonicDataLabel === '$OFFSET') {\n            // OFFSET for Bruker spectra\n            currentEntry.shiftOffsetNum = 0;\n            if (!spectrum.shiftOffsetVal) {\n                spectrum.shiftOffsetVal = Number(dataValue);\n            }\n        }\n        else if (canonicDataLabel === '$REFERENCEPOINT') {\n            // OFFSET for Varian spectra\n            // if we activate this part it does not work for ACD specmanager\n            //         } else if (canonicDataLabel=='.SHIFTREFERENCE') {   // OFFSET FOR Bruker Spectra\n            //                 var parts = dataValue.split(/ *, */);\n            //                 currentEntry.shiftOffsetNum = parseInt(parts[2].trim());\n            //                 spectrum.shiftOffsetVal = Number(parts[3].trim());\n        }\n        else if (canonicDataLabel === 'VARNAME') {\n            currentEntry.ntuples.varname = dataValue.split(ntuplesSeparatorRegExp);\n        }\n        else if (canonicDataLabel === 'SYMBOL') {\n            currentEntry.ntuples.symbol = dataValue.split(ntuplesSeparatorRegExp);\n        }\n        else if (canonicDataLabel === 'VARTYPE') {\n            currentEntry.ntuples.vartype = dataValue.split(ntuplesSeparatorRegExp);\n        }\n        else if (canonicDataLabel === 'VARFORM') {\n            currentEntry.ntuples.varform = dataValue.split(ntuplesSeparatorRegExp);\n        }\n        else if (canonicDataLabel === 'VARDIM') {\n            currentEntry.ntuples.vardim = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === 'UNITS') {\n            currentEntry.ntuples.units = dataValue.split(ntuplesSeparatorRegExp);\n        }\n        else if (canonicDataLabel === 'FACTOR') {\n            currentEntry.ntuples.factor = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === 'FIRST') {\n            currentEntry.ntuples.first = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === 'LAST') {\n            currentEntry.ntuples.last = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === 'MIN') {\n            currentEntry.ntuples.min = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === 'MAX') {\n            currentEntry.ntuples.max = convertToFloatArray(dataValue.split(ntuplesSeparatorRegExp));\n        }\n        else if (canonicDataLabel === '.NUCLEUS') {\n            if (currentEntry.ntuples) {\n                currentEntry.ntuples.nucleus = dataValue.split(ntuplesSeparatorRegExp);\n            }\n        }\n        else if (canonicDataLabel === 'PAGE') {\n            spectrum.page = dataValue.trim();\n            spectrum.pageValue = Number(dataValue.replace(/^.*=/, ''));\n            spectrum.pageSymbol = spectrum.page.replace(/[=].*/, '');\n        }\n        else if (canonicDataLabel === 'RETENTIONTIME') {\n            spectrum.pageValue = Number(dataValue);\n        }\n        else if (isMSField(canonicDataLabel)) {\n            spectrum[convertMSFieldToLabel(canonicDataLabel)] = dataValue;\n        }\n        else if (canonicDataLabel === 'SAMPLEDESCRIPTION') {\n            spectrum.sampleDescription = dataValue;\n        }\n        else if (canonicDataLabel.startsWith('$NUC')) {\n            if (!currentEntry.tmp[canonicDataLabel] && !dataValue.includes('off')) {\n                currentEntry.tmp[canonicDataLabel] = dataValue.replace(/[<>]/g, '');\n            }\n        }\n        else if (canonicDataLabel === 'END') {\n            currentEntry = parentsStack.pop();\n        }\n        if (currentEntry &&\n            currentEntry.info &&\n            currentEntry.meta &&\n            canonicDataLabel.match(options.keepRecordsRegExp)) {\n            let value = dataValue.trim();\n            let target, label;\n            if (dataLabel.startsWith('$')) {\n                label = options.canonicMetadataLabels\n                    ? canonicDataLabel.substring(1)\n                    : dataLabel.substring(1);\n                target = currentEntry.meta;\n            }\n            else {\n                label = options.canonicDataLabels ? canonicDataLabel : dataLabel;\n                target = currentEntry.info;\n            }\n            if (options.dynamicTyping) {\n                value = parseString(value);\n            }\n            if (target[label]) {\n                if (!Array.isArray(target[label])) {\n                    target[label] = [target[label]];\n                }\n                target[label].push(value);\n            }\n            else {\n                target[label] = value;\n            }\n        }\n    }\n    profiling(result, 'Finished parsing', options);\n    postProcessing(entriesFlat, result, options);\n    profiling(result, 'Total time', options);\n    /*\n    if (result.children && result.children.length>0) {\n      result = { ...result, ...result.children[0] };\n    }\n    */\n    result.entries = tmpResult.children;\n    result.flatten = entriesFlat;\n    return result;\n}\n//# sourceMappingURL=convert.js.map","import { convert } from 'jcampconverter';\nimport { Analysis } from '../Analysis';\n/**\n * Creates a new Analysis from a JCAMP string\n * @param {string} jcamp - String containing the JCAMP data\n * @param {object} [options={}]\n * @param {object} [options.id=Math.random()]\n * @param {string} [options.label=options.id] human redeable label\n * @param {string} [options.spectrumCallback] a callback to apply on variables when creating spectrum\n * @return {Analysis} - New class element with the given data\n */\nexport function fromJcamp(jcamp, options = {}) {\n    let analysis = new Analysis(options);\n    addJcamp(analysis, jcamp);\n    return analysis;\n}\nfunction addJcamp(analysis, jcamp) {\n    let converted = convert(jcamp, {\n        keepRecordsRegExp: /.*/,\n    });\n    for (let entry of converted.flatten) {\n        if (!entry.spectra || !entry.spectra[0])\n            continue;\n        let 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 (let 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                    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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUpjYW1wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zyb20vZnJvbUpjYW1wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3ZDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUEyQixFQUFFLE9BQU8sR0FBRyxFQUFFO0lBQ2pFLElBQUksUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUIsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLFFBQWtCLEVBQUUsS0FBMkI7SUFDL0QsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUM3QixpQkFBaUIsRUFBRSxJQUFJO0tBQ3hCLENBQUMsQ0FBQztJQUVILEtBQUssSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTtRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQUUsU0FBUztRQUNsRCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZDLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTtZQUM5QixNQUFNLFNBQVMsR0FBcUMsRUFBRSxDQUFDO1lBQ3ZELGVBQWUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQ3RDLFNBQVMsQ0FBQyxDQUFDLEdBQUc7Z0JBQ1osS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNO2dCQUM3QixNQUFNLEVBQUUsR0FBRztnQkFDWCxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZELENBQUM7WUFDRixTQUFTLENBQUMsQ0FBQyxHQUFHO2dCQUNaLEtBQUssRUFBRSxlQUFlLENBQUMsTUFBTTtnQkFDN0IsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2RCxDQUFDO1NBQ0g7YUFBTTtZQUNMLEtBQUssSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLFNBQVMsRUFBRTtnQkFDekMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxRQUFRLENBQUMsS0FBSztvQkFBRSxTQUFTO2dCQUM3QixRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUM7Z0JBQ3pELElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDOUQsUUFBUSxDQUFDLEtBQUssSUFBSSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQztpQkFDMUM7YUFDRjtTQUNGO1FBRUQsUUFBUSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFO1lBQy9DLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQyJ9","export const addInfoData = (data, keys = Object.keys(data), prefix = '##$') => {\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 = '' } = 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        let variable = variables[key];\n        if (!variable)\n            continue;\n        let name = variable?.label.replace(/ *\\[.*/, '');\n        let 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    const infoKeys = Object.keys(info).filter((e) => !['title', 'owner', 'origin', 'datatype'].includes(e.toLocaleLowerCase()));\n    header += addInfoData(info, infoKeys, '##');\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        let point = [];\n        for (let key of keys) {\n            let 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 (let 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    let lines = [];\n    for (let i = 0; i < data.x.length; i++) {\n        let x = data.x[i];\n        let 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);\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    let dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += 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 += 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    let dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = 0; i < 8; i++) {\n            outputData += data[j] < 0 ? data[j++] : `+${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (let i = j; i < dataLength; i++) {\n            outputData += data[i] < 0 ? 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    let dataLength = data.length;\n    while (j < dataLength - 10) {\n        outputData += 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 += 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    let 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    let 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    let diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    let 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    let firstX = data.x[0];\n    let lastX = data.x[data.x.length - 1];\n    let firstY = data.y[0];\n    let lastY = data.y[data.y.length - 1];\n    let nbPoints = data.x.length;\n    let deltaX = (lastX - firstX) / (nbPoints - 1);\n    let 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    let 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';\nconst infoDefaultKeys = [\n    'title',\n    'owner',\n    'origin',\n    'dataType',\n    'xUnits',\n    'yUnits',\n    'xFactor',\n    'yFactor',\n];\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    let { title = '', owner = '', origin = '', dataType = '', xUnits = '', yUnits = '', 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    const infoKeys = Object.keys(info).filter((keys) => !infoDefaultKeys.includes(keys));\n    header += addInfoData(info, infoKeys, '##');\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    let jcampOptions = {\n        info,\n        meta,\n    };\n    let keys = Object.keys(variables).map((key) => key.toLowerCase());\n    if (!forceNtuples && keys.length === 2) {\n        let x = variables.x;\n        let 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        let y = variables.y;\n        let 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    let jcamps = [];\n    for (let 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    let 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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9KY2FtcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG8vdG9KY2FtcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBU2pELE1BQU0sVUFBVSxRQUFRLENBQUMsUUFBa0IsRUFBRSxVQUEyQixFQUFFO0lBQ3hFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixLQUFLLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7UUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDMUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsUUFBa0IsRUFBRSxPQUF3QjtJQUM1RCxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXpDLElBQUksWUFBWSxHQUFHO1FBQ2pCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsSUFBSSxFQUFFO1lBQ0osS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixHQUFHLElBQUk7U0FDUjtRQUNELElBQUksRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtLQUNwQyxDQUFDO0lBRUYsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN6RCxDQUFDIn0=","import { toJcamps } from './toJcamps';\nexport function toJcamp(analysis, options = {}) {\n    return toJcamps(analysis, options).join('\\n');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9KY2FtcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90by90b0pjYW1wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFNdEMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxRQUFrQixFQUFFLFVBQTJCLEVBQUU7SUFDdkUsT0FBTyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxDQUFDIn0=","/**\n * This function returns the sumOfShapes function\n * This function gives sumOfShapes access to the peak list and the associated data\n * @param parameters - parameters\n */\nexport function getSumOfShapes(internalPeaks) {\n    return function sumOfShapes(parameters) {\n        return (x) => {\n            let totalY = 0;\n            for (const peak of internalPeaks) {\n                const peakX = parameters[peak.fromIndex];\n                const y = parameters[peak.fromIndex + 1];\n                for (let i = 2; i < parameters.length; i++) {\n                    //@ts-expect-error Not simply to solve the issue\n                    peak.shapeFct[peak.parameters[i]] = parameters[peak.fromIndex + i];\n                }\n                totalY += y * peak.shapeFct.fct(x - peakX);\n            }\n            return totalY;\n        };\n    };\n}\n//# sourceMappingURL=getSumOfShapes.js.map","/**\n * Asserts that value is truthy.\n *\n * @param value - Value to check.\n * @param message - Optional error message to throw.\n */\nexport function assert(value, message) {\n    if (!value) {\n        throw new Error(message ? message : 'unreachable');\n    }\n}\n//# sourceMappingURL=assert.js.map","export const DefaultParameters = {\n    x: {\n        init: (peak) => peak.x,\n        min: (peak, peakShape) => peak.x - peakShape.fwhm * 2,\n        max: (peak, peakShape) => peak.x + peakShape.fwhm * 2,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    y: {\n        init: (peak) => peak.y,\n        min: (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};\n//# sourceMappingURL=DefaultParameters.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { assert } from '../assert';\nimport { DefaultParameters } from './DefaultParameters';\nconst properties = ['init', 'min', 'max', 'gradientDifference'];\n/**\n * Return an array of internalPeaks that contains the exact init, min, max values based on the options\n * @param peaks\n * @param options\n * @returns\n */\nexport function getInternalPeaks(peaks, minMaxY, options = {}) {\n    let index = 0;\n    let internalPeaks = [];\n    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 (let parameter of parameters) {\n            for (let property of properties) {\n                // check if the property is specified in the peak\n                let propertyValue = peak?.parameters?.[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","/**\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 * Math.pow(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, 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 += Math.pow(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';\n/** Algorithm to select the method.\n * @param optimizationOptions - Optimization options\n * @returns - The algorithm and optimization options\n */\nexport function selectMethod(optimizationOptions = {}) {\n    let { kind = 'lm', options } = optimizationOptions;\n    switch (kind) {\n        case 'lm':\n        case 'levenbergMarquardt':\n            return {\n                algorithm: levenbergMarquardt,\n                optimizationOptions: {\n                    damping: 1.5,\n                    maxIterations: 100,\n                    errorTolerance: 1e-8,\n                    ...options,\n                },\n            };\n        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';\nimport { getInternalPeaks } from './util/internalPeaks/getInternalPeaks';\nimport { selectMethod } from './util/selectMethod';\n/**\n * Fits a set of points to the sum of a set of bell functions.\n *\n * @param data - An object containing the x and y data to be fitted.\n * @param peaks - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Options for optimize\n * @returns - An object with fitting error and the list of optimized parameters { parameters: [ {x, y, width} ], error } if the kind of shape is pseudoVoigt mu parameter is optimized.\n */\nexport function optimize(data, peaks, options = {}) {\n    // rescale data\n    let temp = xMinMaxValues(data.y);\n    const minMaxY = { ...temp, range: temp.max - temp.min };\n    const internalPeaks = getInternalPeaks(peaks, minMaxY, options);\n    // need to rescale what is related to Y\n    const { baseline: shiftValue = minMaxY.min } = options;\n    let 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    let { algorithm, optimizationOptions } = selectMethod(options.optimization);\n    let sumOfShapes = getSumOfShapes(internalPeaks);\n    let fitted = algorithm({ x: data.x, y: normalizedY }, sumOfShapes, {\n        minValues,\n        maxValues,\n        initialValues,\n        gradientDifference: gradientDifferences,\n        ...optimizationOptions,\n    });\n    const fittedValues = fitted.parameterValues;\n    let newPeaks = [];\n    for (let peak of internalPeaks) {\n        const { 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 { optimize as optimizePeak } from 'ml-spectra-fitting';\nimport { xFindClosestIndex, xMaxValue } from 'ml-spectra-processing';\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 */\nexport function peakPicking(spectrum, \n/** value to search (on x axis) */\ntarget, options = {}) {\n    var _a, _b, _c;\n    const { xVariable = 'x', yVariable = 'y', optimize = false, max: isMax = true, shape = { kind: 'gaussian', fwhm: 1 }, } = options;\n    const x = (_a = spectrum.variables[xVariable]) === null || _a === void 0 ? void 0 : _a.data;\n    let y;\n    if (!isMax) {\n        y = (_b = spectrum.variables[yVariable]) === null || _b === void 0 ? void 0 : _b.data.slice(); // do deep copy as we maybe need to flip sign\n    }\n    else {\n        y = (_c = spectrum.variables[yVariable]) === null || _c === void 0 ? void 0 : _c.data;\n    }\n    if (!x || !y)\n        return;\n    let targetIndex;\n    targetIndex = xFindClosestIndex(x, target);\n    let optimizedPeak;\n    let optimizedIndex;\n    const result = {};\n    if (optimize) {\n        if (!isMax) {\n            let 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 (let [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 (let [key, variable] of Object.entries(spectrum.variables)) {\n            result[key] = variable.data[targetIndex];\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVha1BpY2tpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9wZWFrUGlja2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxJQUFJLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUtyRTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsUUFBa0I7QUFDbEIsa0NBQWtDO0FBQ2xDLE1BQWMsRUFDZCxVQUE4QixFQUFFOztJQUVoQyxNQUFNLEVBQ0osU0FBUyxHQUFHLEdBQUcsRUFDZixTQUFTLEdBQUcsR0FBRyxFQUNmLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUNqQixLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FDdEMsR0FBRyxPQUFPLENBQUM7SUFFWixNQUFNLENBQUMsR0FBRyxNQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLDBDQUFFLElBQUksQ0FBQztJQUM5QyxJQUFJLENBQUMsQ0FBQztJQUNOLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixDQUFDLEdBQUcsTUFBQSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQywwQ0FBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyw2Q0FBNkM7S0FDL0Y7U0FBTTtRQUNMLENBQUMsR0FBRyxNQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLDBDQUFFLElBQUksQ0FBQztLQUN6QztJQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTztJQUNyQixJQUFJLFdBQVcsQ0FBQztJQUNoQixXQUFXLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLElBQUksYUFBYSxDQUFDO0lBQ2xCLElBQUksY0FBYyxDQUFDO0lBRW5CLE1BQU0sTUFBTSxHQUdSLEVBQUUsQ0FBQztJQUNQLElBQUksUUFBUSxFQUFFO1FBQ1osSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxxQ0FBcUM7YUFDeEQ7U0FDRjtRQUVELGFBQWEsR0FBRyxZQUFZLENBQzFCLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUNSLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUMxQyxFQUFFLEtBQUssRUFBRSxDQUNWLENBQUM7UUFFRixjQUFjLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEUsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzlELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsTUFBTSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzNDO1NBQU07UUFDTCxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDOUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDMUM7S0FDRjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMifQ==","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * Append 2 properties to the peaks, shape and fwhm\n */\nexport function appendShapeAndFWHM(peaks, options = {}) {\n    let { shape = { kind: 'gaussian' } } = options;\n    let shapeInstance = getShape1D(shape);\n    return peaks.map((peak) => ({\n        ...peak,\n        shape: { fwhm: shapeInstance.widthToFWHM(peak.width), ...shape },\n    }));\n}\n//# sourceMappingURL=appendShapeAndFWHM.js.map","/**\n * Correction of the x and y coordinates using a quadratic optimizations with the peak and its 3 closest neighbors to determine the true x,y values of the peak.\n * This process is done in place and is very fast.\n * @param data\n * @param peaks\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else {\n            if (y[currentIndex + 1] >= y[currentIndex] &&\n                y[currentIndex + 1] >= y[currentIndex + 2]) {\n                currentIndex++;\n            }\n            else {\n                if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n                    y[currentIndex - 2] >= y[currentIndex - 1]) {\n                    currentIndex -= 2;\n                }\n                else {\n                    if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n                        y[currentIndex + 2] >= y[currentIndex + 3]) {\n                        currentIndex += 2;\n                    }\n                }\n            }\n        }\n        // interpolation to a sin() function\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            let alpha = 20 * Math.log10(y[currentIndex - 1]);\n            let beta = 20 * Math.log10(y[currentIndex]);\n            let gamma = 20 * Math.log10(y[currentIndex + 1]);\n            let p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            peak.x = x[currentIndex] + (x[currentIndex] - x[currentIndex - 1]) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotoneIncreasing, xMinValue, xMaxValue, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { appendShapeAndFWHM } from './utils/appendShapeAndFWHM';\nimport { optimizeTop } from './utils/optimizeTop';\n/**\n * Global spectra deconvolution\n * @param  data - Object data with x and y arrays. Values in x has to be growing\n * @param {number} [options.broadRatio = 0.00] - If `broadRatio` is higher than 0, then all the peaks which second derivative\n * smaller than `broadRatio * maxAbsSecondDerivative` will be marked with the soft mask equal to true.\n\n */\nexport function gsd(data, options = {}) {\n    let { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, shape, noiseLevel, smoothY = false, maxCriteria = true, minMaxRatio = 0.00025, realTopDetection = false, } = options;\n    let { x, y } = data;\n    if (!xIsMonotoneIncreasing(x)) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    //rescale;\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    let equallySpaced = xIsEquallySpaced(x);\n    if (noiseLevel === undefined) {\n        if (equallySpaced) {\n            const noiseInfo = xNoiseStandardDeviation(y);\n            if (maxCriteria) {\n                noiseLevel = noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n            else {\n                noiseLevel = -noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n        }\n        else {\n            noiseLevel = 0;\n        }\n    }\n    else {\n        if (maxCriteria === false) {\n            noiseLevel *= -1;\n        }\n    }\n    if (maxCriteria === false) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] *= -1;\n        }\n    }\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    let yData = y;\n    let dY, ddY;\n    const { windowSize, polynomial } = sgOptions;\n    if (equallySpaced) {\n        if (smoothY) {\n            yData = sgg(y, x[1] - x[0], {\n                windowSize,\n                polynomial,\n                derivative: 0,\n            });\n        }\n        dY = sgg(y, x[1] - x[0], {\n            windowSize,\n            polynomial,\n            derivative: 1,\n        });\n        ddY = sgg(y, x[1] - x[0], {\n            windowSize,\n            polynomial,\n            derivative: 2,\n        });\n    }\n    else {\n        if (smoothY) {\n            yData = sgg(y, x, {\n                windowSize,\n                polynomial,\n                derivative: 0,\n            });\n        }\n        dY = sgg(y, x, {\n            windowSize,\n            polynomial,\n            derivative: 1,\n        });\n        ddY = sgg(y, x, {\n            windowSize,\n            polynomial,\n            derivative: 2,\n        });\n    }\n    const minY = xMinValue(yData);\n    const maxY = xMaxValue(yData);\n    if (minY > maxY || minY === maxY)\n        return [];\n    const yThreshold = minY + (maxY - minY) * minMaxRatio;\n    const dX = x[1] - x[0];\n    let lastMax = null;\n    let lastMin = null;\n    let minddY = [];\n    let intervalL = [];\n    let intervalR = [];\n    // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n    for (let i = 1; i < yData.length - 1; ++i) {\n        if ((dY[i] < dY[i - 1] && dY[i] <= dY[i + 1]) ||\n            (dY[i] <= dY[i - 1] && dY[i] < dY[i + 1])) {\n            lastMin = {\n                x: x[i],\n                index: i,\n            };\n            if (dX > 0 && lastMax !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Maximum in first derivative\n        if ((dY[i] >= dY[i - 1] && dY[i] > dY[i + 1]) ||\n            (dY[i] > dY[i - 1] && dY[i] >= dY[i + 1])) {\n            lastMax = {\n                x: x[i],\n                index: i,\n            };\n            if (dX < 0 && lastMin !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    let lastK = -1;\n    const peaks = [];\n    for (const minddYIndex of minddY) {\n        let deltaX = x[minddYIndex];\n        let possible = -1;\n        let k = lastK + 1;\n        let minDistance = Number.POSITIVE_INFINITY;\n        let currentDistance = 0;\n        while (possible === -1 && k < intervalL.length) {\n            currentDistance = Math.abs(deltaX - (intervalL[k].x + intervalR[k].x) / 2);\n            if (currentDistance < (intervalR[k].x - intervalL[k].x) / 2) {\n                possible = k;\n                lastK = k;\n            }\n            ++k;\n            // Not getting closer?\n            if (currentDistance >= minDistance) {\n                break;\n            }\n            minDistance = currentDistance;\n        }\n        if (possible !== -1) {\n            if (yData[minddYIndex] > yThreshold) {\n                let width = Math.abs(intervalR[possible].x - intervalL[possible].x);\n                peaks.push({\n                    x: deltaX,\n                    y: yData[minddYIndex],\n                    width,\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 appendShapeAndFWHM(peaks, { shape });\n}\n//# sourceMappingURL=gsd.js.map","import { gsd } from 'ml-gsd';\nimport { xyMaxClosestYPoint, xyMinClosestYPoint } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './getNormalizedSpectrum';\n/** Based on a x value we will return a peak*/\nexport function autoPeakPicking(spectrum, options = {}) {\n    var _a, _b;\n    const { xVariable = 'x', yVariable = 'y', normalizationOptions, minPeakWidth, } = options;\n    let x = (_a = spectrum.variables[xVariable]) === null || _a === void 0 ? void 0 : _a.data;\n    let y = (_b = spectrum.variables[yVariable]) === null || _b === void 0 ? void 0 : _b.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    let { 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 (let 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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b1BlYWtQaWNraW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvYXV0b1BlYWtQaWNraW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEUsOENBQThDO0FBQzlDLE1BQU0sVUFBVSxlQUFlLENBQzdCLFFBQWtCLEVBQ2xCLFVBQWtDLEVBQUU7O0lBRXBDLE1BQU0sRUFDSixTQUFTLEdBQUcsR0FBRyxFQUNmLFNBQVMsR0FBRyxHQUFHLEVBQ2Ysb0JBQW9CLEVBQ3BCLFlBQVksR0FDYixHQUFHLE9BQU8sQ0FBQztJQUVaLElBQUksQ0FBQyxHQUFHLE1BQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsMENBQUUsSUFBSSxDQUFDO0lBQzVDLElBQUksQ0FBQyxHQUFHLE1BQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsMENBQUUsSUFBSSxDQUFDO0lBQzVDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFeEIsSUFBSSxvQkFBb0IsRUFBRTtRQUN4QixNQUFNLFlBQVksR0FBYTtZQUM3QixTQUFTLEVBQUU7Z0JBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUN6QixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7YUFDMUI7U0FDRixDQUFDO1FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FDOUMsWUFBWSxFQUNaLG9CQUFvQixDQUNyQixDQUFDO1FBQ0YsQ0FBQyxH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","import { getJSGraph } from './jsgraph/getJSGraph';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations';\nexport * from './AnalysesManager';\nexport * from './Analysis';\nexport * from './from/fromJcamp';\nexport * from './from/fromText';\nexport * from './to/toJcamp';\nexport * from './to/toJcamps';\nexport * from './to/toText';\nexport * from './util/getNormalizedSpectrum';\nexport * from './util/peakPicking';\nexport * from './util/autoPeakPicking';\nexport * from './types/types';\nexport * from './types/AutoPeakPickingOptions';\nexport * from './types/NormalizedSpectrumOptions';\nexport * from './types/PlotObject';\nexport * from './types/SpectrumSelector';\nexport { getReactPlotJSON } from './reactPlot/getReactPlotJSON';\nexport const JSGraph = {\n    getJSGraph,\n    getNormalizationAnnotations,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXBGLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHdCQUF3QixDQUFDO0FBRXZDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxtQ0FBbUMsQ0FBQztBQUVsRCxjQUFjLG9CQUFvQixDQUFDO0FBRW5DLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ3JCLFVBQVU7SUFDViwyQkFBMkI7Q0FDNUIsQ0FBQyJ9","/**\n * @typedef {Object} Peak\n * @property {number} wavenumber\n * @property {number} transmittance\n * @property {number} absorbance\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 * @param {string} [options.mode='t100'] 't100'=transmittance in %, 't'=transmittance, 'a'=absorbance\n * @returns array\n */\n\nexport function getAnnotations(peaks, options = {}) {\n  const {\n    fillColor = 'green',\n    strokeColor = 'red',\n    creationFct,\n    mode = 't100',\n  } = 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    switch (mode) {\n      case 'a':\n        annotationAbsorbance(annotation, peak, options);\n        break;\n      case 't':\n        annotationTransmittance(annotation, peak, 1, options);\n        break;\n      case 't100':\n        annotationTransmittance(annotation, peak, 100, options);\n        break;\n      default:\n    }\n    return annotation;\n  });\n  return annotations;\n}\n\nfunction annotationTransmittance(annotation, peak, factor = 1, options = {}) {\n  const { showKind = true, showAssignment = true } = 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.transmittance * factor,\n        dy: `${23 + line * 14}px`,\n      },\n    });\n    line++;\n  }\n\n  if (showAssignment) {\n    labels.push({\n      text: peak.assignment,\n      size: '18px',\n      anchor: 'middle',\n      color: 'darkred',\n      position: {\n        x: peak.wavenumber,\n        y: peak.transmittance * factor,\n        dy: `${23 + line * 14}px`,\n      },\n    });\n    line++;\n  }\n\n  annotation.labels = labels;\n  annotation.position = [\n    {\n      x: peak.wavenumber,\n      y: peak.transmittance * factor,\n      dy: '10px',\n      dx: '-1px',\n    },\n    {\n      x: peak.wavenumber,\n      y: peak.transmittance * factor,\n      dy: '5px',\n      dx: '1px',\n    },\n  ];\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.absorbance,\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.absorbance,\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.absorbance,\n      dy: '-10px',\n      dx: '-1px',\n    },\n    {\n      x: peak.wavenumber,\n      y: peak.absorbance,\n      dy: '-5px',\n      dx: '1px',\n    },\n  ];\n}\n","export function spectrumCallback(variables) {\n  // we add missing absorbance / transmittance\n  // variable a = absorbance\n  // variable t = transmittance\n  let yVariable = variables.y;\n  let absorbance = true;\n  if (yVariable.label.toLowerCase().includes('trans')) {\n    absorbance = false;\n  }\n  if (absorbance) {\n    variables.a = { ...yVariable, symbol: 'a', data: yVariable.data.slice() };\n    variables.t = {\n      data: yVariable.data.map((absorbance) => 10 ** -absorbance * 100),\n      label: 'Transmittance (%)',\n      symbol: 't',\n      units: '',\n    };\n  } else {\n    const factor =\n      yVariable.label.includes('%') ||\n      yVariable.label.toLowerCase().includes('percent')\n        ? 100\n        : 1;\n\n    variables.a = {\n      data: yVariable.data.map(\n        (transmittance) => -Math.log10(transmittance / factor),\n      ),\n      symbol: 'a',\n      label: 'Absorbance',\n      units: '',\n    };\n    if (factor === 100) {\n      variables.t = { ...yVariable, symbol: 't' };\n      variables.t.data = variables.t.data.slice();\n    } else {\n      variables.t = {\n        units: '',\n        label: 'Transmittance (%)',\n        symbol: 't',\n        data: yVariable.data.map((transmittance) => transmittance * 100),\n      };\n    }\n  }\n}\n","import { fromJcamp as commonFromJcamp } from 'common-spectrum';\n\nimport { spectrumCallback } from './utils/spectrumCallback';\n\n/**\n * Creates a new Analysis from a SPC buffer\n * @param {ArrayBuffer|string} jcamp\n * @param {object} [options={}]\n * @param {string|number} [options.id=Math.random()]\n * @param {string} [options.label=options.id] human redeable label\n * @param {string} [options.spectrumCallback] a callback to apply on variables when creating spectrum. Default will add a and t\n * @return {Analysis} - New class element with the given data\n */\nexport function fromJcamp(jcamp, options = {}) {\n  return commonFromJcamp(jcamp, { ...options, spectrumCallback });\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","// eslint-disable-next-line import/no-unassigned-import\nimport './text-encoding-polyfill';\nexport 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.browser.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     * @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\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     */\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     */\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     */\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     */\n    back(n = 1) {\n        this.offset -= n;\n        return this;\n    }\n    /**\n     * Move the pointer to the given offset.\n     * @param offset\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     */\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     */\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     */\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     */\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     */\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\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 = 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     */\n    readBoolean() {\n        return this.readUint8() !== 0;\n    }\n    /**\n     * Read a signed 8-bit integer and move pointer forward by 1 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     */\n    readUint8() {\n        return this._data.getUint8(this.offset++);\n    }\n    /**\n     * Alias for {@link IOBuffer#readUint8}.\n     */\n    readByte() {\n        return this.readUint8();\n    }\n    /**\n     * Read `n` bytes and move pointer forward by `n` 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     */\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     */\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     */\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     */\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     */\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     */\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     */\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     */\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     */\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     */\n    readChar() {\n        return String.fromCharCode(this.readInt8());\n    }\n    /**\n     * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\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     */\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     */\n    decodeText(n = 1, encoding = 'utf-8') {\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     */\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     */\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     */\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     */\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     */\n    writeBytes(bytes) {\n        this.ensureAvailable(bytes.length);\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     */\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     */\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     */\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     */\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     */\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     */\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     */\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     */\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     */\n    writeChar(str) {\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     */\n    writeChars(str) {\n        for (let i = 0; i < str.length; i++) {\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     */\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     */\n    toArray() {\n        return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\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    let 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 = Math.pow(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    let 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 = Math.pow(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    let logHeader = {\n        size: buffer.readUint32(),\n        memorySize: buffer.readUint32(),\n        textOffset: buffer.readUint32(),\n        binarySize: buffer.readUint32(),\n        diskArea: buffer.readUint32(),\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\nimport { spectrumCallback } from './utils/spectrumCallback';\n\n/**\n * Creates a new Analysis from a SPC buffer\n * @param {ArrayBuffer} buffer\n * @param {object} [options={}]\n * @param {object} [options.id=Math.random()]\n * @param {string} [options.label=options.id] human redeable label\n * @param {string} [options.spectrumCallback] a callback to apply on variables when creating spectrum. Default will add a and t\n * @return {Analysis} - New class element with the given data\n */\n\nexport function fromSPC(buffer, options = {}) {\n  let analysis = new Analysis({ ...options, spectrumCallback });\n  let result = parse(buffer);\n\n  if (result.meta) delete result.meta.parameters;\n\n  for (let spectrum of result.spectra) {\n    if (spectrum.meta) delete spectrum.meta.parameters;\n    analysis.pushSpectrum(spectrum.variables, {\n      dataType: 'IR SPECTRUM',\n      title: '',\n      meta: { ...result.meta, ...spectrum.meta },\n    });\n  }\n  return analysis;\n}\n","import { JSGraph as OriginalJSGraph } from 'common-spectrum';\n\nimport { getAnnotations } from './jsgraph/getAnnotations';\n\nexport {\n  Analysis,\n  AnalysesManager,\n  toJcamp,\n  peakPicking,\n  autoPeakPicking,\n} from 'common-spectrum';\n\nexport { fromJcamp } from './from/fromJcamp';\nexport { fromSPC } from './from/fromSPC';\n\nexport const JSGraph = { ...OriginalJSGraph, getAnnotations };\n"],"names":["createFromToArray","options","from","to","length","includeFrom","includeTo","distribution","array","Float64Array","div","delta","index","base","firstExponent","Math","log","Error","toString","Object","prototype","isAnyArray","value","call","endsWith","xMedian","input","TypeError","slice","low","high","middle","ll","hh","median","calcMiddle","swap","i","j","temp","xAdd","array1","array2","isConstant","constant","array3","getOutputArray","output","undefined","xCheck","xDivide","Number","xEnsureFloat64","xFindClosestIndex","target","sorted","abs","diff","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","x","fromIndex","toIndex","xMaxValue","maxValue","xMinValue","minValue","xIsEquallySpaced","tolerance","maxDx","minDx","MAX_SAFE_INTEGER","absoluteDifference","xIsMonotone","xIsMonotoneIncreasing","xMean","sumValue","xMedianAbsoluteDeviation","averageDeviations","mad","xMinMaxValues","min","max","xNoiseStandardDeviation","sd","xNorm","result","element","sqrt","xSum","xNormed","algorithm","toLowerCase","absoluteSumValue","absoluteSum","currentMaxValue","factor","sumFactor","xPadding","size","fromEnd","toEnd","xVariance","values","unbiased","mean","sqrError","xStandardDeviation","xParetoNormalization","sqrtSD","item","push","xRescale","currentMin","currentMax","RangeError","xRolling","fct","window","padding","newArray","subarray","xRollingAverage","xRollingMedian","xApplyFunctionStr","variableLabel","fctString","Function","replace","toReturn","isNaN","xyCheck","data","minLength","y","xyEnsureGrowingX","Array","prevX","NEGATIVE_INFINITY","currentIndex","zonesNormalize","zones","exclusions","JSON","parse","stringify","map","zone","sort","a","b","filter","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","results","counter","zoneIndex","zonesWithPoints","numberOfPoints","returnZones","totalSize","reduce","previous","current","unitsPerPoint","currentTotal","round","equallySpacedSlot","xLength","step","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","add","getSlope","y0","y1","xyEquallySpaced","variant","normalizedZones","zonesWithPointsRes","xResult","yResult","zoneResult","processZone","concat","xyFilterX","currentZoneIndex","newX","newY","position","xyFilterXPositive","xyMaxClosestYPoint","targetIndex","previousIndex","xyMaxY","xyMinClosestYPoint","minY","matrixCheck","firstLength","matrixMinMaxZ","matrix","nbRows","nbColumns","column","row","arguments","_options$fromIndex","_options$toIndex","isInteger","rescale","_options$min","autoMinMax","_options$max","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","inspectData","rows","columns","maxI","maxJ","loop","get","line","formatNumber","join","num","formatNumber2","padEnd","len","str","fix","toFixed","startsWith","exp","toExponential","installMathOperations","AbstractMatrix","Matrix","addS","addM","set","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","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","floor","fround","log1p","log10","log2","sign","sin","sinh","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","checkNonEmpty","isEmpty","sumByRow","sum","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","cols","variance","sum1","sum2","varianceByColumn","varianceAll","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","eye","diag","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","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","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","s","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","r1","c1","r2","c2","console","warn","embed","mat","r","c","resultat","blockMult","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","product","standardDeviation","center","Symbol","for","isArrayOfNumbers","every","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","BaseView","MatrixTransposeView","WrapperMatrix2D","LuDecomposition","lu","pivotVector","pivotSign","t","LUcolj","kmax","LU","isSingular","col","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","e","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","addStyle","serie","spectrum","color","opacity","lineWidth","match","toUpperCase","style","width","dash","label","id","COLORS","getJSGraph","analyses","colors","opacities","linesWidth","selector","normalization","xAxis","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","appendDistinctParameter","key","includes","appendDistinctValue","AnalysesManager","addAnalysis","getAnalysisIndex","getAnalyses","ids","getSpectra","getAnalysisBySpectrumId","getSpectrumById","getDistinctTitles","title","keys","getDistinctUnits","variable","entries","getDistinctLabelUnits","normalizeLabelUnits","getDistinctLabels","getDistinctDataTypes","dataType","getDistinctMeta","meta","removeAllAnalyses","removeAnalysis","originalLabel","originalUnits","search","split","centerMean","centerMedian","fromTo","normed","divideBySD","paretoNormalization","ldlSymbolic","Ap","Ai","Lp","Parent","Lnz","Flag","kk","p2","ldlNumeric","Ax","Li","Lx","D","Pattern","yi","lKi","top","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPerm","B","P","ldlPermt","prepare","M","Pinv","Mt","ar","ac","LNZ","coloffset","adr","bp1","d","cuthillMckee_1","cuthillMckee","compareNum","list","adj","visited","toVisit","eol","ptr","nbhd","u","getClosestNumber","goal","closest","prev","curr","getCloseIndex","indexOf","updateSystem","weights","nbPoints","newVector","w","next","getDeltaMatrix","lambda","lowerTriangularNonZeros","permutationEncodedArray","airPLS","maxIterations","factorCriterion","controlPoints","baseLineZones","forEach","arr","range","indexFrom","indexTo","baseline","iteration","sumNegDifferences","stopCriterion","cho","Cholesky","difference","calculateError","maxNegativeDiff","corrected","error","_typeof","obj","iterator","sequentialFill","_options","_options$from","_options$to","_options$size","isArray","_i","airPLSBaseline","ys","numberPoints","regressionOptions","airpls","correctedSpectrum","maybeToPrecision","digits","toPrecision","checkArraySize","BaseRegression","new","predict","_predict","train","toLaTeX","score","y2","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","regress","precision","_toFormula","isLaTeX","sup","closeSup","times","fn","charAt","load","json","pr","F","FT","A","baselineCorrectionRegression","Regression","fitting","oldFitting","regression","iterativePolynomialBaseline","baselineCorrection","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","equallySpaced","filterX","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","PseudoVoigt","mu","pseudoVoigtFwhmToWidth","pseudoVoigtWidthToFWHM","pseudoVoigtFct","getPseudoVoigtArea","getPseudoVoigtFactor","calculatePseudoVoigtHeight","getPseudoVoigtData","getShape1D","kind","appendShapeAndFWHM","peaks","shapeInstance","peak","optimizeTop","beta","gamma","gsd","sgOptions","noiseLevel","smoothY","maxCriteria","minMaxRatio","realTopDetection","noiseInfo","yData","dY","ddY","maxY","yThreshold","dX","lastMax","lastMin","minddY","intervalL","intervalR","lastK","minddYIndex","deltaX","possible","minDistance","currentDistance","inflectionPoints","checkOptions","parameterizedFunction","timeout","minValues","maxValues","initialValues","damping","dampingStepUp","dampingStepDown","errorTolerance","centralDifference","gradientDifference","improvementThreshold","parameters","parLen","filler","checkTimeout","endTime","Date","now","weightSquare","errorCalculation","func","gradientFunction","evaluatedData","params","paramFunction","nbParams","param","auxParams","funcParam","point","funcParam2","matrixFunction","gradientFunc","residualError","inverseMatrix","jacobianWeightResidualError","perturbations","levenbergMarquardt","optimalError","optimalParameters","converged","previousError","improvementMetric","parameterValues","parameterError","iterations","calibrateX","targetX","nbPeaks","gsdOptions","xFunction","function","yFunction","filterXY","filters","logs","filterFct","Filters","time","getNormalizedSpectrum","newSpectrum","isMonotone","global","factory","module","exports","this","isString","String","isFiniteImpl","isNumber","uniq","strings","seen","hasOwnProperty","compareArray","assign","properties","mulSafe","decimals","arg","getFractional","divSafe","den","invDen","val","QtyError","err","create","message","stack","throwIncompatibleUnits","left","right","UNITS","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","scalar","numerator","denominator","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","unitKeys","substr","getKinds","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","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","newUnits","getXYSpectra","selectedSpectra","xVariable","yVariable","labels","variableNames","getPossibleVariable","variableName","convertibleUnits","regexpLabel","upper","lower","possibleFiltered","getXYSpectrum","Analysis","substring","spectrumCallback","cache","pushSpectrum","standardizeData","getXY","normalizedSpectra","getSpectrum","getXLabel","getYLabel","analysisOptions","reverse","isUtf8","buf","ensureString","blob","ArrayBuffer","isView","encoding","guessEncoding","decoder","TextDecoder","decode","uint8","Uint8Array","buffer","byteOffset","byteLength","isutf8","parseString","lowercase","number","GC_MS_FIELDS","complexChromatogram","chromatogram","ms","dimension","existingGCMSFields","convertMSFieldToLabel","pageValue","isMSField","canonicDataLabel","convertToFloatArray","stringArray","floatArray","fastParseXYData","yFactor","isXYdata","currentData","currentX","firstX","currentY","firstY","endLine","ascii","charCodeAt","newLine","isDifference","isLastDifference","lastDifference","isDuplicate","inComment","lastValue","isNegative","inValue","skipFirstValue","decimalPosition","duplicate","ascii2","removeCommentRegExp","peakTableSplitRegExp","parsePeakTable","isPeaktable","parseXY","parseXYZ","lines","xFactor","numberOfVariables","parseXYA","isXYAdata","fields","_ref","quickSelectMedian","convertTo3DZ","minZ","maxZ","ySize","xSize","z","lastX","lastY","medians","getMedian","minX","maxX","noise","generateContourLines","zData","povarHeight0","povarHeight1","povarHeight2","povarHeight3","isOver0","isOver1","isOver2","isOver3","nbSubSpectra","nbPovars","pAx","pAy","pBx","pBy","xN","dx","yN","dy","iter","nbContourLevels","contourLevels","lineZValue","level","contourLevel","side","noiseMultiplier","zValue","iSubSpectra","subSpectra","subSpectraAfter","povar","segments","add2D","noContour","contourLines","minMax","gyromagneticRatio","postProcessingNMR","entriesFlat","entry","observeFrequency","shiftOffsetVal","ntuples","symbol","nucleus","$NUC2","f2index","$NUC1","yType","pageSymbolIndex","pageSymbol","ratio0","ratio1","ratio","profiling","action","simpleChromatogram","intensity","postProcessing","newNtuples","twoD","wantXY","keepSpectra","prepareNtuplesDatatable","currentEntry","xIndex","yIndex","firstVariable","secondVariable","lowerCaseSymbol","vardim","varname","prepareSpectrum","ntuplesSeparatorRegExp","defaultOptions","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","dynamicTyping","withoutXY","jcamp","tmpResult","children","parentsStack","ldrs","ldr","dataLabel","dataValue","infos","datatable","parentEntry","info","dataClass","xType","shiftOffsetNum","vartype","varform","page","sampleDescription","pop","flatten","fromJcamp","addJcamp","converted","currentSpectrum","addInfoData","header","checkNumberOrArray","getExtremeValues","firstRow","firstLast","creatorNtuples","owner","origin","varName","varType","varDim","isDependent","infoKeys","toLocaleLowerCase","getFactorNumber","getBestFactor","onlyInteger","extremeValues","getNumber","rounded","peakTableCreator","rescaleAndEnsureInteger","pseudoDigits","SQZ_P","SQZ_N","DIF_P","DIF_N","DUP","maxLinelength","vectorEncoder","intervalX","xyEncoding","fixEncoding","squeezedEncoding","differenceEncoding","differenceDuplicateEncoding","commaSeparatedValuesEncoding","packedEncoding","separator","outputData","dataLength","squeezedDigit","mult","charCount","encodedData","encodedNumber","diffData","numDiff","differenceDigit","duplicateDigit","sqzDigits","diffDigits","dupDigits","xyDataCreator","infoDefaultKeys","fromJSON","fromVariables","forceNtuples","jcampOptions","xData","toJcamps","jcamps","getJcamp","toJcamp","getSumOfShapes","internalPeaks","sumOfShapes","totalY","peakX","shapeFct","assert","DefaultParameters","init","peakShape","getInternalPeaks","minMaxY","shiftValue","normalizedPeaks","propertiesValues","parameter","property","propertyValue","getNormalizedValue","generalParameterValue","defaultParameterValues","antiLowerConvexHull","currentPoint","moveOn","det","leftTurn","moveBack","direct","objectiveFunction","lowerBoundaries","upperBoundaries","epsilon","tolerance2","initialState","diffBorders","numberOfRectangles","totalIterations","unitaryCoordinates","middlePoint","bestCurrentValue","fCalls","smallerDistance","edgeSizes","diagonalDistances","functionValues","differentDistances","smallerValuesByDistance","choiceLimit","originalCoordinates","getMinIndex","S1","findIndex","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","peakPicking","isMax","optimizedPeak","optimizedIndex","maximumY","optimizePeak","optimized","autoPeakPicking","normalizationOptions","minPeakWidth","tempSpectrum","normalizedSpectrum","xyClosestYPoint","JSGraph","getAnnotations","strokeColor","creationFct","mode","annotationAbsorbance","annotationTransmittance","showKind","showAssignment","text","anchor","wavenumber","transmittance","assignment","assignmentAngle","absorbance","angle","commonFromJcamp","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","Int8Array","int16","Int16Array","uint16","Uint16Array","int32","Int32Array","uint32","uint64","BigUint64Array","int64","BigInt64Array","float32","Float32Array","float64","IOBuffer","dataIsGiven","lastWrittenByte","offset","dvOffset","littleEndian","_data","DataView","_mark","_marks","available","isLittleEndian","setLittleEndian","isBigEndian","skip","back","seek","mark","reset","pushMark","popMark","rewind","ensureAvailable","lengthNeeded","newLength","readBoolean","getInt8","getUint8","readByte","readBytes","readArray","BYTES_PER_ELEMENT","returnArray","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","ensureIncreasingXValues","xL","SubFlagParameters","changed","noPeakTable","modifiedArithmetic","SubHeader","indexNumber","startingZ","endingZ","noiseValue","numberCoAddedScans","wAxisValue","setXYAxis","oX","oY","groups","newDataBlock","dataShape","subFileHeader","getNewY","subHeader","oldDataBlock","getOldY","readLogBlock","logHeader","memorySize","textOffset","binarySize","diskArea","logData","logASCII","ioBuffer","fromSPC","OriginalJSGraph"],"mappings":"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