{"version":3,"file":"ir-spectrum.esm.js","sources":["../node_modules/is-any-array/lib/index.js","../node_modules/ml-spectra-processing/lib/x/getOutputArray.js","../node_modules/ml-spectra-processing/lib/x/xMedian.js","../node_modules/ml-spectra-processing/lib/x/xCheck.js","../node_modules/ml-spectra-processing/lib/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib/x/xAbsoluteSum.js","../node_modules/ml-spectra-processing/lib/x/xAdd.js","../node_modules/ml-spectra-processing/lib/x/xApplyFunctionStr.js","../node_modules/ml-spectra-processing/lib/x/xBinning.js","../node_modules/ml-matrix/matrix.js","../node_modules/ml-matrix/matrix.mjs","../node_modules/ml-spectra-processing/lib/x/xMean.js","../node_modules/ml-spectra-processing/lib/x/xVariance.js","../node_modules/ml-spectra-processing/lib/x/xStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xDivide.js","../node_modules/ml-spectra-processing/lib/x/xEnsureFloat64.js","../node_modules/ml-spectra-processing/lib/utils/isLittleEndian.js","../node_modules/ml-spectra-processing/lib/x/utils/radixSortOrder.js","../node_modules/ml-spectra-processing/lib/x/xGetSortOrder.js","../node_modules/fft.js/lib/fft.js","../node_modules/ml-spectra-processing/lib/utils/createArray.js","../node_modules/ml-spectra-processing/lib/utils/createFromToArray.js","../node_modules/ml-spectra-processing/lib/utils/stringify.js","../node_modules/ml-spectra-processing/lib/x/xSubtract.js","../node_modules/ml-spectra-processing/lib/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib/x/xMinValue.js","../node_modules/ml-spectra-processing/lib/x/xIsEquallySpaced.js","../node_modules/ml-spectra-processing/lib/x/xIsMonotonic.js","../node_modules/ml-spectra-processing/lib/x/xMaxAbsoluteValue.js","../node_modules/ml-spectra-processing/lib/x/xMedianAbsoluteDeviation.js","../node_modules/ml-spectra-processing/lib/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib/x/utils/simpleNormInvMagnitude.js","../node_modules/ml-spectra-processing/lib/x/utils/erfcinv.js","../node_modules/ml-spectra-processing/lib/x/utils/simpleNormInvRaw.js","../node_modules/ml-spectra-processing/lib/x/xNoiseSanPlot.js","../node_modules/ml-spectra-processing/lib/x/xNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xNorm.js","../node_modules/ml-spectra-processing/lib/x/xSum.js","../node_modules/ml-spectra-processing/lib/x/xNormed.js","../node_modules/ml-spectra-processing/lib/x/xPadding.js","../node_modules/ml-spectra-processing/lib/x/xParetoNormalization.js","../node_modules/ml-spectra-processing/lib/x/xRescale.js","../node_modules/ml-spectra-processing/lib/x/xRolling.js","../node_modules/ml-spectra-processing/lib/x/xRollingAverage.js","../node_modules/ml-spectra-processing/lib/x/xRollingMedian.js","../node_modules/ml-spectra-processing/lib/x/xSequentialFillFromStep.js","../node_modules/ml-spectra-processing/lib/x/xSequentialFillFromTo.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCholeskySolver.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCuthillMckee.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxZ.js","../node_modules/ml-spectra-processing/lib/xy/xyCheck.js","../node_modules/ml-spectra-processing/lib/xy/xyEnsureGrowingX.js","../node_modules/ml-spectra-processing/lib/zones/zonesNormalize.js","../node_modules/ml-spectra-processing/lib/zones/zonesWithPoints.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSlot.js","../node_modules/ml-spectra-processing/lib/xy/utils/integral.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSmooth.js","../node_modules/ml-spectra-processing/lib/xy/xyEquallySpaced.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterX.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterXPositive.js","../node_modules/ml-spectra-processing/lib/xy/xyGrowingX.js","../node_modules/ml-spectra-processing/lib/xy/xyInterpolateLinear.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxClosestYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyMinClosestYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xySortX.js","../node_modules/ml-spectra-processing/lib/xy/xyUniqueX.js","../node_modules/common-spectrum/lib/jsgraph/addStyle.js","../node_modules/common-spectrum/lib/jsgraph/colors.js","../node_modules/common-spectrum/lib/jsgraph/getJSGraph.js","../node_modules/common-spectrum/lib/jsgraph/getNormalizationAnnotations.js","../node_modules/ml-signal-processing/lib/filters/scaling/centerMean.js","../node_modules/ml-signal-processing/lib/filters/scaling/centerMedian.js","../node_modules/ml-signal-processing/lib/filters/x/fromTo.js","../node_modules/ml-signal-processing/lib/filters/scaling/normed.js","../node_modules/ml-signal-processing/lib/filters/scaling/divideBySD.js","../node_modules/ml-signal-processing/lib/filters/scaling/rescale.js","../node_modules/ml-signal-processing/lib/filters/scaling/paretoNormalization.js","../node_modules/ml-airpls/lib/utils.js","../node_modules/ml-airpls/lib/index.js","../node_modules/baselines/src/airPLS.js","../node_modules/ml-regression-base/lib-esm/checkArrayLength.js","../node_modules/ml-regression-base/lib-esm/BaseRegression.js","../node_modules/ml-regression-base/lib-esm/maybeToPrecision.js","../node_modules/ml-regression-polynomial/lib/index.js","../node_modules/ml-baseline-correction-regression/src/index.js","../node_modules/baselines/src/iterativePolynomial.js","../node_modules/baselines/src/rollingAverage.js","../node_modules/ml-rolling-ball-baseline/lib/rollingBall.js","../node_modules/baselines/src/rollingBall.js","../node_modules/baselines/src/rollingMedian.js","../node_modules/ml-signal-processing/lib/filters/baseline/airPLSBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/iterativePolynomialBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingAverageBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingBallBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingMedianBaseline.js","../node_modules/ml-savitzky-golay-generalized/lib/spacing.js","../node_modules/ml-savitzky-golay-generalized/lib/validate.js","../node_modules/ml-savitzky-golay-generalized/lib/weights.js","../node_modules/ml-savitzky-golay-generalized/lib/sgg.js","../node_modules/ml-savitzky-golay-generalized/lib/sggPair.js","../node_modules/ml-signal-processing/lib/filters/sg/firstDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/secondDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/thirdDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/savitzkyGolay.js","../node_modules/ml-signal-processing/lib/filters/x/ensureGrowing.js","../node_modules/ml-signal-processing/lib/filters/x/reverseIfNeeded.js","../node_modules/ml-signal-processing/lib/filters/x/equallySpaced.js","../node_modules/ml-signal-processing/lib/filters/x/filterX.js","../node_modules/ml-signal-processing/lib/filters/x/setMaxX.js","../node_modules/ml-signal-processing/lib/filters/x/setMinX.js","../node_modules/ml-gsd/lib/algorithms/getMinMaxIntervals.js","../node_modules/ml-gsd/lib/algorithms/tryMatchOneIntervalWithMinData.js","../node_modules/ml-gsd/lib/algorithms/autoAlgorithm.js","../node_modules/ml-gsd/lib/algorithms/getPeaksFromIntervals.js","../node_modules/ml-gsd/lib/algorithms/xGetCrossZeroPoints.js","../node_modules/ml-gsd/lib/algorithms/firstDerivative.js","../node_modules/ml-gsd/lib/algorithms/secondDerivative.js","../node_modules/ml-gsd/lib/utils/optimizeTop.js","../node_modules/ml-gsd/lib/gsd.js","../node_modules/ml-peak-shape-generator/lib/util/constants.js","../node_modules/ml-peak-shape-generator/lib/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/lorentzianDispersive/LorentzianDispersive.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/pseudoVoigt/computeFactor.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/pseudoVoigtTCH/PseudoVoigtTCH.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/generalizedLorentzian/GeneralizedLorentzian.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/splitGaussian/SplitGaussian.js","../node_modules/ml-peak-shape-generator/lib/shapes/1d/getShape1D.js","../node_modules/ml-spectra-fitting/lib/shapes/getSumOfShapes.js","../node_modules/ml-spectra-fitting/lib/util/assert.js","../node_modules/ml-spectra-fitting/lib/util/buildOptimizationLayout.js","../node_modules/ml-spectra-fitting/lib/util/reconstructPeaks.js","../node_modules/ml-spectra-fitting/lib/util/getFixedParametersResult.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/DefaultParameters.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/getInternalPeaks.js","../node_modules/ml-levenberg-marquardt/lib/check_options.js","../node_modules/ml-levenberg-marquardt/lib/error_calculation.js","../node_modules/ml-levenberg-marquardt/lib/gradient_function.js","../node_modules/ml-levenberg-marquardt/lib/step.js","../node_modules/ml-levenberg-marquardt/lib/levenberg_marquardt.js","../node_modules/ml-direct/src/util/antiLowerConvexHull.js","../node_modules/ml-direct/src/index.js","../node_modules/ml-spectra-fitting/lib/util/wrappers/directOptimization.js","../node_modules/ml-spectra-fitting/lib/util/selectMethod.js","../node_modules/ml-spectra-fitting/lib/index.js","../node_modules/ml-signal-processing/lib/filters/x/calibrateX.js","../node_modules/ml-signal-processing/lib/filters/x/xFunction.js","../node_modules/ml-signal-processing/lib/filters/scaling/yFunction.js","../node_modules/ml-signal-processing/lib/filters/y/setMaxY.js","../node_modules/ml-signal-processing/lib/filters/y/setMinY.js","../node_modules/ml-signal-processing/lib/filterXY.js","../node_modules/common-spectrum/lib/util/getNormalizedSpectrum.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/lib/util/convertUnit.js","../node_modules/common-spectrum/lib/util/ensureRegexp.js","../node_modules/common-spectrum/lib/util/getConvertedVariable.js","../node_modules/common-spectrum/lib/util/getXYSpectra.js","../node_modules/common-spectrum/lib/util/getXYSpectrum.js","../node_modules/common-spectrum/lib/Analysis.js","../node_modules/common-spectrum/lib/util/appendDistinctParameter.js","../node_modules/common-spectrum/lib/util/appendDistinctValue.js","../node_modules/common-spectrum/lib/AnalysesManager.js","../node_modules/ensure-string/lib/index.js","../node_modules/dynamic-typing/lib/parseString.js","../node_modules/gyromagnetic-ratio/lib-esm/gyromagneticRatioMHzT.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticNucleus.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticRatio.js","../node_modules/gyromagnetic-ratio/lib-esm/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib/index.js","../node_modules/jcampconverter/dist/jcampconverter.js","../node_modules/common-spectrum/lib/from/fromJcamp.js","../node_modules/xy-parser/lib/parse.js","../node_modules/xy-parser/lib/index.js","../node_modules/convert-to-jcamp/lib/utils/addInfoData.js","../node_modules/convert-to-jcamp/lib/utils/checkMatrix.js","../node_modules/convert-to-jcamp/lib/utils/checkNumberOrArray.js","../node_modules/convert-to-jcamp/lib/utils/getExtremeValues.js","../node_modules/convert-to-jcamp/lib/creatorNtuples.js","../node_modules/convert-to-jcamp/lib/utils/getFactorNumber.js","../node_modules/convert-to-jcamp/lib/utils/getBestFactor.js","../node_modules/convert-to-jcamp/lib/utils/getNumber.js","../node_modules/convert-to-jcamp/lib/utils/peakTableCreator.js","../node_modules/convert-to-jcamp/lib/utils/rescaleAndEnsureInteger.js","../node_modules/convert-to-jcamp/lib/utils/vectorEncoder.js","../node_modules/convert-to-jcamp/lib/utils/xyDataCreator.js","../node_modules/convert-to-jcamp/lib/fromJSON.js","../node_modules/convert-to-jcamp/lib/fromVariables.js","../node_modules/common-spectrum/lib/to/toJcamps.js","../node_modules/common-spectrum/lib/to/toJcamp.js","../node_modules/common-spectrum/lib/util/peakPicking.js","../node_modules/common-spectrum/lib/util/autoPeakPicking.js","../node_modules/common-spectrum/lib/index.js","../lib/convertPeak.js","../lib/jsgraph/getAnnotations.js","../lib/from/utils/isTransmittance.js","../lib/from/utils/spectrumCallback.js","../lib/from/fromJcamp.js","../node_modules/spc-parser/lib/galactic/utility/getDataShape.js","../node_modules/iobuffer/lib/text.js","../node_modules/iobuffer/lib/iobuffer.js","../node_modules/spc-parser/lib/galactic/dataBlock/shared.js","../node_modules/spc-parser/lib/galactic/dataBlock/newDataBlock.js","../node_modules/spc-parser/lib/galactic/dataBlock/oldDataBlock.js","../node_modules/spc-parser/lib/galactic/types.js","../node_modules/spc-parser/lib/galactic/utility/headerUtils.js","../node_modules/spc-parser/lib/galactic/fileHeader.js","../node_modules/spc-parser/lib/galactic/logBlock.js","../node_modules/spc-parser/lib/galactic/parse.js","../node_modules/spc-parser/lib/uvProbe/buildVariables.js","../node_modules/spc-parser/lib/uvProbe/parseFlat.js","../node_modules/cfb/cfb.js","../node_modules/spc-parser/lib/uvProbe/pageTexts.js","../node_modules/spc-parser/lib/uvProbe/parseOle.js","../node_modules/spc-parser/lib/parse.js","../lib/from/fromSPC.js","../lib/from/fromText.js","../lib/index.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function\n * @param output - undefined or a new array\n * @param length - length of the output array\n * @returns\n */\nexport function getOutputArray(output, length) {\n    if (output !== undefined) {\n        if (!isAnyArray(output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        if (output.length !== length) {\n            throw new TypeError('the output array does not have the correct length');\n        }\n        return output;\n    }\n    else {\n        return new Float64Array(length);\n    }\n}\n//# sourceMappingURL=getOutputArray.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculates the median of an array.\n * @param input - array containing values.\n * @param options - options.\n * @returns median.\n */\nexport function xMedian(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    const { exact = false, fromIndex = 0, toIndex = input.length, } = options || {};\n    const array = input.slice(fromIndex, toIndex);\n    if (array.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const middleIndex = calcMiddle(0, array.length - 1);\n    const median = quickSelect(array, middleIndex);\n    if (array.length % 2 === 1 || !exact) {\n        return median;\n    }\n    const medianNext = quickSelect(array, middleIndex + 1);\n    return (median + medianNext) / 2;\n}\nfunction quickSelect(array, middleIndex) {\n    let low = 0;\n    let high = array.length - 1;\n    let middle = 0;\n    let currentLow = 0;\n    let currentHigh = 0;\n    while (true) {\n        if (high <= low) {\n            return array[middleIndex];\n        }\n        if (high === low + 1) {\n            if (array[low] > array[high]) {\n                swap(array, low, high);\n            }\n            return array[middleIndex];\n        }\n        // Find median of low, middle and high items; swap into position low\n        middle = calcMiddle(low, high);\n        if (array[middle] > array[high])\n            swap(array, middle, high);\n        if (array[low] > array[high])\n            swap(array, low, high);\n        if (array[middle] > array[low])\n            swap(array, middle, low);\n        // Swap low item (now in position middle) into position (low+1)\n        swap(array, middle, low + 1);\n        // Nibble from each end towards middle, swapping items when stuck\n        currentLow = low + 1;\n        currentHigh = high;\n        while (true) {\n            do\n                currentLow++;\n            while (array[low] > array[currentLow]);\n            do\n                currentHigh--;\n            while (array[currentHigh] > array[low]);\n            if (currentHigh < currentLow) {\n                break;\n            }\n            swap(array, currentLow, currentHigh);\n        }\n        // Swap middle item (in position low) back into correct position\n        swap(array, low, currentHigh);\n        // Re-set active partition\n        if (currentHigh <= middleIndex) {\n            low = currentLow;\n        }\n        if (currentHigh >= middleIndex) {\n            high = currentHigh - 1;\n        }\n    }\n}\nfunction swap(array, i, j) {\n    const temp = array[j];\n    array[j] = array[i];\n    array[i] = temp;\n}\nfunction calcMiddle(i, j) {\n    return Math.floor((i + j) / 2);\n}\n//# sourceMappingURL=xMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - array to check.\n * @param options - additional checks.\n */\nexport function xCheck(input, options = {}) {\n    const { minLength = 1 } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    if (typeof input[0] !== 'number') {\n        throw new TypeError('input must contain numbers');\n    }\n    if (input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n * @param array - array of numbers.\n * @param target - target value.\n * @param options - options.\n * @returns closest index.\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from \"./xFindClosestIndex.js\";\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n * @param x - array of numbers\n * @param options - options.\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex } = options;\n    const { from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\nexport function xAbsoluteSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sum = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sum += Math.abs(array[i]);\n    }\n    return sum;\n}\n//# sourceMappingURL=xAbsoluteSum.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param array1 - the first array\n * @param array2 - the second array or number\n * @returns the result of the addition\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xAdd.js.map","/**\n * Will apply a function on each element of the array described as a string\n * By default we will use as variable 'x'\n * In front of sequence of lowercase we will add 'Math.'. This allows to write\n * `sin(x) + cos(x)` and it will be replace internally by (x) => (Math.sin(x) + Math.cos(x))\n * @param array\n * @param options\n * @returns\n */\nexport function xApplyFunctionStr(array, options = {}) {\n    const { variableLabel = 'x', fctString = variableLabel } = options;\n    const fct = new Function(variableLabel, `return Number(${fctString\n        .replaceAll(/(?<before>^|\\W)(?<after>[\\da-z]{2,}\\()/g, '$<before>Math.$<after>')\n        .replaceAll('Math.Math', 'Math')})`);\n    const toReturn = new Float64Array(array.length);\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 { xCheck } from \"./xCheck.js\";\n/**\n * Downsample an array by averaging consecutive non-overlapping points (binning).\n * Either specify a fixed `binSize` or a target `numberOfPoints`.\n * @param array - input array.\n * @param options - options.\n * @returns downsampled array.\n */\nexport function xBinning(array, options = {}) {\n    xCheck(array);\n    const { binSize, numberOfPoints, keepFirstAndLast = true } = options;\n    const { length } = array;\n    if (numberOfPoints !== undefined) {\n        if (binSize !== undefined) {\n            throw new RangeError('binSize and numberOfPoints are mutually exclusive');\n        }\n        if (!Number.isInteger(numberOfPoints) || numberOfPoints <= 0) {\n            throw new RangeError('numberOfPoints must be a positive integer');\n        }\n        if (numberOfPoints > length) {\n            throw new RangeError('numberOfPoints must be <= array.length');\n        }\n        return binByNumberOfPoints(array, numberOfPoints, keepFirstAndLast);\n    }\n    const effectiveBinSize = binSize ?? 10;\n    if (!Number.isInteger(effectiveBinSize) || effectiveBinSize <= 0) {\n        throw new RangeError('binSize must be a positive integer');\n    }\n    if (effectiveBinSize === 1) {\n        return Float64Array.from(array);\n    }\n    if (keepFirstAndLast) {\n        if (length <= 2) {\n            return Float64Array.from(array);\n        }\n        const innerLength = length - 2;\n        const innerBinCount = Math.ceil(innerLength / effectiveBinSize);\n        const output = new Float64Array(innerBinCount + 2);\n        output[0] = array[0];\n        output[output.length - 1] = array[length - 1];\n        for (let i = 0, j = 1; i < innerLength; i += effectiveBinSize, j++) {\n            const start = i + 1;\n            const end = Math.min(start + effectiveBinSize, length - 1);\n            let sum = 0;\n            for (let k = start; k < end; k++) {\n                sum += array[k];\n            }\n            output[j] = sum / (end - start);\n        }\n        return output;\n    }\n    const outputLength = Math.ceil(length / effectiveBinSize);\n    const output = new Float64Array(outputLength);\n    for (let i = 0, j = 0; i < length; i += effectiveBinSize, j++) {\n        const end = Math.min(i + effectiveBinSize, length);\n        let sum = 0;\n        for (let k = i; k < end; k++) {\n            sum += array[k];\n        }\n        output[j] = sum / (end - i);\n    }\n    return output;\n}\nfunction binByNumberOfPoints(array, numberOfPoints, keepFirstAndLast) {\n    const { length } = array;\n    const output = new Float64Array(numberOfPoints);\n    if (keepFirstAndLast) {\n        if (numberOfPoints < 2) {\n            throw new RangeError('numberOfPoints must be >= 2 when keepFirstAndLast is true');\n        }\n        output[0] = array[0];\n        output[numberOfPoints - 1] = array[length - 1];\n        if (numberOfPoints === 2) {\n            return output;\n        }\n        const innerLength = length - 2;\n        const innerBins = numberOfPoints - 2;\n        for (let j = 0; j < innerBins; j++) {\n            const start = 1 + Math.floor((j * innerLength) / innerBins);\n            const end = 1 + Math.floor(((j + 1) * innerLength) / innerBins);\n            let sum = 0;\n            for (let k = start; k < end; k++) {\n                sum += array[k];\n            }\n            output[j + 1] = sum / (end - start);\n        }\n        return output;\n    }\n    for (let j = 0; j < numberOfPoints; j++) {\n        const start = Math.floor((j * length) / numberOfPoints);\n        const end = Math.floor(((j + 1) * length) / numberOfPoints);\n        let sum = 0;\n        for (let k = start; k < end; k++) {\n            sum += array[k];\n        }\n        output[j] = sum / (end - start);\n    }\n    return output;\n}\n//# sourceMappingURL=xBinning.js.map","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nfunction isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n\n/**\n * Computes the maximum of the given values.\n *\n * @param input\n * @param options\n */\nfunction max(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { fromIndex = 0, toIndex = input.length } = options;\n    if (fromIndex < 0 ||\n        fromIndex >= input.length ||\n        !Number.isInteger(fromIndex)) {\n        throw new Error('fromIndex must be a positive integer smaller than length');\n    }\n    if (toIndex <= fromIndex ||\n        toIndex > input.length ||\n        !Number.isInteger(toIndex)) {\n        throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n    }\n    let maxValue = input[fromIndex];\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (input[i] > maxValue)\n            maxValue = input[i];\n    }\n    return maxValue;\n}\n\n/**\n * Computes the minimum of the given values.\n */\nfunction min(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { fromIndex = 0, toIndex = input.length } = options;\n    if (fromIndex < 0 ||\n        fromIndex >= input.length ||\n        !Number.isInteger(fromIndex)) {\n        throw new Error('fromIndex must be a positive integer smaller than length');\n    }\n    if (toIndex <= fromIndex ||\n        toIndex > input.length ||\n        !Number.isInteger(toIndex)) {\n        throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n    }\n    let minValue = input[fromIndex];\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (input[i] < minValue)\n            minValue = input[i];\n    }\n    return minValue;\n}\n\n/**\n * Rescale an array into a range.\n */\nfunction rescale(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    else if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    let output;\n    if (options.output !== undefined) {\n        if (!isAnyArray(options.output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        output = options.output;\n    }\n    else {\n        output = new Array(input.length);\n    }\n    const currentMin = min(input);\n    const currentMax = max(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: minValue = options.autoMinMax ? currentMin : 0, max: maxValue = options.autoMinMax ? currentMax : 1, } = options;\n    if (minValue >= maxValue) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (maxValue - minValue) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + minValue;\n    }\n    return output;\n}\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nfunction newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nfunction checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n\nfunction sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nfunction centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nfunction centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nfunction centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nfunction getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nfunction getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nfunction getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n\nclass AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  applyAlongAxis(callback, by) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    const result = [];\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          result.push(callback.call(this, this.getRow(i), i));\n        }\n        break;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          result.push(callback.call(this, this.getColumn(i), i));\n        }\n        break;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n    return result;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isDistance() {\n    if (!this.isSymmetric()) return false;\n\n    for (let i = 0; i < this.rows; i++) {\n      if (this.get(i, i) !== 0) return false;\n    }\n\n    return true;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    switch (type) {\n      case 'max':\n        return this.max();\n      case 'frobenius':\n        return Math.sqrt(this.dot(this));\n      default:\n        throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  gram() {\n    const rows = this.rows;\n    const n = this.columns;\n\n    // The Gram matrix `thisᵀ · this` is symmetric, so only its upper triangle is\n    // accumulated (then mirrored) and the transpose is never materialized.\n    // Row-streaming rank-1 updates read each row of `this` contiguously and skip\n    // zero entries, so the cost scales with the number of non-zeros: it is as\n    // fast as the dense version on dense matrices (the skip never fires) and far\n    // faster on sparse ones.\n    const gramData = new Float64Array(n * n);\n    for (let r = 0; r < rows; r++) {\n      for (let i = 0; i < n; i++) {\n        const value = this.get(r, i);\n        if (value === 0) continue;\n        const offset = i * n;\n        for (let j = i; j < n; j++) {\n          gramData[offset + j] += value * this.get(r, j);\n        }\n      }\n    }\n\n    const result = new Matrix(n, n);\n    for (let i = 0; i < n; i++) {\n      const offset = i * n;\n      for (let j = i; j < n; j++) {\n        const value = gramData[offset + j];\n        result.set(i, j, value);\n        result.set(j, i, value);\n      }\n    }\n    return result;\n  }\n\n  transposeMultiply(other) {\n    other = Matrix.checkMatrix(other);\n    if (this.rows !== other.rows) {\n      throw new RangeError(\n        'the number of rows of the two matrices must be equal',\n      );\n    }\n    const n = this.columns;\n    const p = other.columns;\n\n    const result = new Matrix(n, p);\n    const otherRow = new Float64Array(p);\n    for (let r = 0; r < this.rows; r++) {\n      for (let j = 0; j < p; j++) {\n        otherRow[j] = other.get(r, j);\n      }\n      for (let i = 0; i < n; i++) {\n        const value = this.get(r, i);\n        if (value === 0) continue;\n        const resultRow = result.data[i];\n        for (let j = 0; j < p; j++) {\n          resultRow[j] += value * otherRow[j];\n        }\n      }\n    }\n    return result;\n  }\n\n  mmulByTranspose(scale) {\n    let m = this.rows;\n    let n = this.columns;\n\n    if (scale !== undefined && scale.length !== n) {\n      throw new RangeError('scale must have one value per column');\n    }\n\n    let result = new Matrix(m, m);\n\n    // result = this · diag(scale) · thisᵀ is symmetric, so only the upper\n    // triangle is computed and mirrored, and the transpose is never\n    // materialized. `scale` (one factor per column) is folded into one operand.\n    let rowj = new Float64Array(n);\n    for (let j = 0; j < m; j++) {\n      if (scale === undefined) {\n        for (let k = 0; k < n; k++) {\n          rowj[k] = this.get(j, k);\n        }\n      } else {\n        for (let k = 0; k < n; k++) {\n          rowj[k] = scale[k] * this.get(j, k);\n        }\n      }\n\n      for (let i = j; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * rowj[k];\n        }\n\n        result.set(i, j, s);\n        result.set(j, i, s);\n      }\n    }\n    return result;\n  }\n\n  mpow(scalar) {\n    if (!this.isSquare()) {\n      throw new RangeError('Matrix must be square');\n    }\n    if (!Number.isInteger(scalar) || scalar < 0) {\n      throw new RangeError('Exponent must be a non-negative integer');\n    }\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\n    let result = Matrix.eye(this.rows);\n    let bb = this;\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\n    for (let e = scalar; e >= 1; e /= 2) {\n      if ((e & 1) !== 0) {\n        result = result.mmul(bb);\n      }\n      bb = bb.mmul(bb);\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      result = result.setSubMatrix(c11, 0, 0);\n      result = result.setSubMatrix(c12, c11.rows, 0);\n      result = result.setSubMatrix(c21, 0, c11.columns);\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min,\n          max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  concat(other, by = 'row') {\n    other = Matrix.checkMatrix(other);\n    switch (by) {\n      case 'row': {\n        if (this.columns !== other.columns) {\n          throw new RangeError(\n            'both matrices must have the same number of columns',\n          );\n        }\n        const result = new Matrix(this.rows + other.rows, this.columns);\n        result.setSubMatrix(this, 0, 0);\n        result.setSubMatrix(other, this.rows, 0);\n        return result;\n      }\n      case 'column': {\n        if (this.rows !== other.rows) {\n          throw new RangeError(\n            'both matrices must have the same number of rows',\n          );\n        }\n        const result = new Matrix(this.rows, this.columns + other.columns);\n        result.setSubMatrix(this, 0, 0);\n        result.setSubMatrix(other, 0, this.columns);\n        return result;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n  }\n\n  /**\n   * @template {AbstractMatrix} M\n   * @param {AbstractMatrix} from\n   * @param {M} to\n   * @return {M}\n   */\n  static copy(from, to) {\n    for (const [row, column, value] of from.entries()) {\n      to.set(row, column, value);\n    }\n\n    return to;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray(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  [Symbol.iterator]() {\n    return this.entries();\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield [row, column, value]\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *entries() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield [row, col, this.get(row, col)];\n      }\n    }\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield value\n   * @returns {Generator<number, void, void>}\n   */\n  *values() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield this.get(row, col);\n      }\n    }\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n  /**\n   * @type {Float64Array[]}\n   */\n  data;\n\n  /**\n   * Init an empty matrix\n   * @param {number} nRows\n   * @param {number} nColumns\n   */\n  #initData(nRows, nColumns) {\n    this.data = [];\n\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\n      for (let i = 0; i < nRows; i++) {\n        this.data.push(new Float64Array(nColumns));\n      }\n    } else {\n      throw new TypeError('nColumns must be a positive integer');\n    }\n\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      this.#initData(nRows.rows, nRows.columns);\n      Matrix.copy(nRows, this);\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      this.#initData(nRows, nColumns);\n    } else if (isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n\n      this.rows = nRows;\n      this.columns = nColumns;\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n  /** @type {Matrix} */\n  #matrix;\n\n  get size() {\n    return this.#matrix.size;\n  }\n\n  get rows() {\n    return this.#matrix.rows;\n  }\n\n  get columns() {\n    return this.#matrix.columns;\n  }\n\n  get diagonalSize() {\n    return this.rows;\n  }\n\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isSymmetricMatrix(value) {\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static zeros(diagonalSize) {\n    return new this(diagonalSize);\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static ones(diagonalSize) {\n    return new this(diagonalSize).fill(1);\n  }\n\n  /**\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n   * @return {this}\n   */\n  constructor(diagonalSize) {\n    super();\n\n    if (Matrix.isMatrix(diagonalSize)) {\n      if (!diagonalSize.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n\n      this.#matrix = Matrix.copy(\n        diagonalSize,\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\n      );\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\n    } else {\n      this.#matrix = new Matrix(diagonalSize);\n\n      if (!this.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n    }\n  }\n\n  clone() {\n    const matrix = new SymmetricMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  toMatrix() {\n    return new Matrix(this);\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.#matrix.get(rowIndex, columnIndex);\n  }\n  set(rowIndex, columnIndex, value) {\n    // symmetric set\n    this.#matrix.set(rowIndex, columnIndex, value);\n    this.#matrix.set(columnIndex, rowIndex, value);\n\n    return this;\n  }\n\n  removeCross(index) {\n    // symmetric remove side\n    this.#matrix.removeRow(index);\n    this.#matrix.removeColumn(index);\n\n    return this;\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    const row = array.slice();\n    row.splice(index, 1);\n\n    this.#matrix.addRow(index, row);\n    this.#matrix.addColumn(index, array);\n\n    return this;\n  }\n\n  /**\n   * @param {Mask[]} mask\n   */\n  applyMask(mask) {\n    if (mask.length !== this.diagonalSize) {\n      throw new RangeError('Mask size do not match with matrix size');\n    }\n\n    // prepare sides to remove from matrix from mask\n    /** @type {number[]} */\n    const sidesToRemove = [];\n    for (const [index, passthroughs] of mask.entries()) {\n      if (passthroughs) continue;\n      sidesToRemove.push(index);\n    }\n    // to remove from highest to lowest for no mutation shifting\n    sidesToRemove.reverse();\n\n    // remove sides\n    for (const sideIndex of sidesToRemove) {\n      this.removeCross(sideIndex);\n    }\n\n    return this;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * iterate from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 1 2 3 4\n   * B 2 5 6 7\n   * C 3 6 8 9\n   * D 4 7 9 10\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n   *\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n\n    /** @type {number[]} */\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   * @return {SymmetricMatrix}\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n    // compactSize = (sideSize * (sideSize + 1)) / 2\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new SymmetricMatrix(diagonalSize);\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return matrix;\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield [row, column, value]\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightEntries() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield [row, col, value];\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield value\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightValues() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield value;\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isDistanceMatrix(value) {\n    return (\n      SymmetricMatrix.isSymmetricMatrix(value) &&\n      value.klassSubType === 'DistanceMatrix'\n    );\n  }\n\n  constructor(sideSize) {\n    super(sideSize);\n\n    if (!this.isDistance()) {\n      throw new TypeError('Provided arguments do no produce a distance matrix');\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    // distance matrix diagonal is 0\n    if (rowIndex === columnIndex) value = 0;\n\n    return super.set(rowIndex, columnIndex, value);\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    // ensure distance\n    array = array.slice();\n    array[index] = 0;\n\n    return super.addCross(index, array);\n  }\n\n  toSymmetricMatrix() {\n    return new SymmetricMatrix(this);\n  }\n\n  clone() {\n    const matrix = new DistanceMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      if (row === col) continue;\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * no diagonal (only zeros)\n   * iterable from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 0 1 2 3\n   * B 1 0 4 5\n   * C 2 4 0 6\n   * D 3 5 6 0\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n   *\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n    /** @type {number[]} */\n    const compact = new Array(compactLength);\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n\n    if (compactSize === 0) {\n      return new this(0);\n    }\n\n    // compactSize in Natural integer range ]0;∞]\n    // compactSize = (sideSize * (sideSize - 1)) / 2\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new this(diagonalSize);\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return matrix;\n  }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n\nclass MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n  constructor(matrix, columnIndices) {\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, matrix.rows, columnIndices.length);\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n  }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n  }\n}\n\nclass MatrixFlipRowView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n  }\n}\n\nclass MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n  constructor(matrix, rowIndices) {\n    checkRowIndices(matrix, rowIndices);\n    super(matrix, rowIndices.length, matrix.columns);\n    this.rowIndices = rowIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n  }\n}\n\nclass MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    checkRowIndices(matrix, rowIndices);\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, rowIndices.length, columnIndices.length);\n    this.rowIndices = rowIndices;\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n\nclass MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n\nclass MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n\nfunction wrap(array, options) {\n  if (isAnyArray(array)) {\n    if (array[0] && isAnyArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n\nclass LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n\n/**\n * Transpose a square matrix in place, without allocating a copy.\n * Used to restore the logical layout of decomposition outputs that were\n * accumulated in transposed storage for cache-sequential inner loops.\n * @param {import('../matrix').default} matrix - square matrix, mutated in place\n * @returns {import('../matrix').default} the same matrix\n */\nfunction transposeSquareInPlace(matrix) {\n  const data = matrix.data;\n  const n = matrix.rows;\n  for (let i = 0; i < n; i++) {\n    const rowI = data[i];\n    for (let j = i + 1; j < n; j++) {\n      const tmp = rowI[j];\n      rowI[j] = data[j][i];\n      data[j][i] = tmp;\n    }\n  }\n  return matrix;\n}\n\nfunction hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n\nclass QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n\nclass SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    // Work on the transpose of the input so the hot inner loops (which iterate\n    // over rows for a fixed column) scan memory sequentially in the row-major\n    // backing store. `at` holds the transpose: at.get(j, i) === a.get(i, j)\n    // where `a` is the logical m x n working matrix.\n    let swapped = false;\n    let at;\n    if (m < n) {\n      if (!autoTranspose) {\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        at = value.transpose();\n      } else {\n        at = value.clone();\n        m = value.columns;\n        n = value.rows;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      at = value.transpose();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    // U and V are stored transposed during the computation so the inner loops\n    // (which always vary the row index) scan memory sequentially. They are\n    // transposed back to their logical layout before being returned.\n    // Ut.get(j, i) === U.get(i, j) and Vt.get(j, i) === V.get(i, j).\n    let U = new Matrix(nu, m);\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], at.get(k, i));\n        }\n        if (s[k] !== 0) {\n          if (at.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            at.set(k, i, at.get(k, i) / s[k]);\n          }\n          at.set(k, k, at.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 += at.get(k, i) * at.get(j, i);\n          }\n          t = -t / at.get(k, k);\n          for (let i = k; i < m; i++) {\n            at.set(j, i, at.get(j, i) + t * at.get(k, i));\n          }\n        }\n        e[j] = at.get(j, k);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(k, i, at.get(k, i));\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] * at.get(j, i);\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              at.set(j, i, at.get(j, i) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(k, i, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = at.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = at.get(p - 1, nrt);\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(j, i, 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(k, i) * U.get(j, i);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(j, i, U.get(j, i) + t * U.get(k, i));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(k, i, -U.get(k, i));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(k, i, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(k, i, 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(k, i) * V.get(j, i);\n            }\n            t = -t / V.get(k, k + 1);\n            for (let i = k + 1; i < n; i++) {\n              V.set(j, i, V.get(j, i) + t * V.get(k, i));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(k, i, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(j, i) + sn * V.get(p - 1, i);\n                V.set(p - 1, i, -sn * V.get(j, i) + cs * V.get(p - 1, i));\n                V.set(j, i, 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(j, i) + sn * U.get(k - 1, i);\n                U.set(k - 1, i, -sn * U.get(j, i) + cs * U.get(k - 1, i));\n                U.set(j, i, 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(j, i) + sn * V.get(j + 1, i);\n                V.set(j + 1, i, -sn * V.get(j, i) + cs * V.get(j + 1, i));\n                V.set(j, i, 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(j, i) + sn * U.get(j + 1, i);\n                U.set(j + 1, i, -sn * U.get(j, i) + cs * U.get(j + 1, i));\n                U.set(j, i, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(k, i, -V.get(k, i));\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(k + 1, i);\n                V.set(k + 1, i, V.get(k, i));\n                V.set(k, i, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(k + 1, i);\n                U.set(k + 1, i, U.get(k, i));\n                U.set(k, i, t);\n              }\n            }\n            k++;\n          }\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    // Restore the logical (row-major) layout of the singular vectors, which were\n    // accumulated in transposed storage for cache-sequential inner loops. V is\n    // always square and U is square whenever the input is, so this is done in\n    // place (no allocation) in the common case.\n    U = U.isSquare() ? transposeSquareInPlace(U) : U.transpose();\n    V = transposeSquareInPlace(V);\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n\nfunction inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n\nfunction determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    if (matrix.columns === 0) {\n      return 1;\n    }\n\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    // The residual scales with the row it explains; the coefficients don't.\n    let scale = Matrix.abs(b).max() || 1;\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max() / scale;\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isEmpty()) {\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n    // (0xn)*(nx0)*(0xn) = 0xn\n    // (nx0)*(0xn)*(nx0) = nx0\n    return matrix.transpose();\n  }\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  // Singular values scale with the matrix, so the cutoff must too. Same\n  // tolerance as SVD.rank, and the `rcond * max(s)` rule used by LAPACK.\n  const cutoff = threshold * Math.max(matrix.rows, matrix.columns) * s[0];\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > cutoff) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transposeMultiply(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transposeMultiply(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n\nclass EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    if (matrix.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      // tred2/tql2 access V almost exclusively down columns (the row index\n      // varies in the hot loops). Storing V transposed turns those into\n      // sequential row scans of the row-major backing store; we transpose it\n      // back to the logical layout before returning. V.get(j, i) holds the\n      // logical V(i, j).\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(j, i, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n      // V is square; restore the logical layout in place (no allocation).\n      transposeSquareInPlace(V);\n    } else {\n      // The non-symmetric path (orthes/hqr2) has two O(n^3) phases with opposite\n      // memory-layout preferences (the QR sweep favours column-major eigenvectors\n      // while the back-transform favours row-major), so a single transposed\n      // storage cannot help both. It is left in the original row-major layout.\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(j, n - 1);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(j, i - 1);\n        V.set(j, i, 0);\n        V.set(i, j, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(i, j, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(j, k) * d[k];\n          e[k] += V.get(j, k) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(j, k, V.get(j, k) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(j, i - 1);\n        V.set(j, i, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(i, n - 1, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(i + 1, k) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(i + 1, k) * V.get(j, k);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(j, k, V.get(j, k) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(i + 1, k, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(j, n - 1);\n    V.set(j, n - 1, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      do {\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(i + 1, k);\n            V.set(i + 1, k, s * V.get(i, k) + c * h);\n            V.set(i, k, c * V.get(i, k) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(i, j);\n        V.set(i, j, V.get(k, j));\n        V.set(k, j, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        // eslint-disable-next-line no-multi-assign\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          // eslint-disable-next-line no-multi-assign\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n\nclass CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &&= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = positiveDefinite;\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n\nclass nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (isAnyArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n//# sourceMappingURL=matrix.js.map\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the mean value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMean(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue / (toIndex - fromIndex + 1);\n}\n//# sourceMappingURL=xMean.js.map","import { isAnyArray } from 'is-any-array';\nimport { xMean } from \"./xMean.js\";\n/**\n * Finds the variance of the data\n * @param values - the values of the array\n * @param options - options\n * @returns variance\n */\nexport function xVariance(values, options = {}) {\n    if (!isAnyArray(values)) {\n        throw new TypeError('input must be an array');\n    }\n    const { unbiased = true, mean = xMean(values) } = options;\n    let sqrError = 0;\n    for (let i = 0; i < values.length; i++) {\n        const x = values[i] - mean;\n        sqrError += x * x;\n    }\n    if (unbiased) {\n        return sqrError / (values.length - 1);\n    }\n    else {\n        return sqrError / values.length;\n    }\n}\n//# sourceMappingURL=xVariance.js.map","import { xVariance } from \"./xVariance.js\";\n/**\n * Finds the standard deviation for the data at hand\n * @param values - values in the data\n * @param options - options\n * @returns standard deviation\n */\nexport function xStandardDeviation(values, options = {}) {\n    return Math.sqrt(xVariance(values, options));\n}\n//# sourceMappingURL=xStandardDeviation.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array or number\n * @param options - options\n */\nexport function xDivide(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new RangeError('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xDivide.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Returns a copy of the data as a Float64Array.\n * @param array - array of numbers\n */\nexport function xEnsureFloat64(array) {\n    xCheck(array);\n    if (array instanceof Float64Array) {\n        return array.slice(0);\n    }\n    return Float64Array.from(array);\n}\n//# sourceMappingURL=xEnsureFloat64.js.map","const LITTLE_ENDIAN = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n/**\n * Check whether the host stores multi-byte values least significant byte first.\n * Needed whenever a typed array is reinterpreted through another view, because\n * the position of the words of a value then depends on the platform.\n * @returns true on a little-endian host.\n */\nexport function isLittleEndian() {\n    return LITTLE_ENDIAN;\n}\n//# sourceMappingURL=isLittleEndian.js.map","import { isLittleEndian } from \"../../utils/isLittleEndian.js\";\n// Internal helpers: not re-exported from `x/index.ts`, so they stay out of the public API.\n// The counting pass costs O(radix) whatever the length, so the digit stays narrow until the\n// array is long enough to amortize a wide one.\nconst SMALL_DIGIT_BITS = 8;\nconst LARGE_DIGIT_BITS = 16;\nconst LARGE_ARRAY_LENGTH = 1 << LARGE_DIGIT_BITS;\n/**\n * Length from which ordering through the radix beats a comparator, for a caller that has to\n * build the keys and read the values back through the order. The measured crossover is around\n * 150 values on both V8 and JavaScriptCore, whether the values come from a typed array, a\n * plain array or the x of an array of points.\n */\nexport const RADIX_ORDER_MIN_LENGTH = 1 << SMALL_DIGIT_BITS;\n/**\n * Orders the values by their full 64 bits, as an LSD radix sort.\n * @param array - the values to order.\n * @param descending - order from the largest to the smallest.\n * @returns the indices of the values, in order.\n */\nexport function radixSortOrderExact(array, descending) {\n    const values = ensureFloat64(array);\n    const length = values.length;\n    let order = new Uint32Array(length);\n    if (length < 2)\n        return order;\n    const digitBits = getDigitBits(length);\n    const radix = 1 << digitBits;\n    const digitMask = radix - 1;\n    const words = new Uint32Array(values.buffer, values.byteOffset, length * 2);\n    const flip = descending ? 0xffffffff : 0;\n    const highWord = isLittleEndian() ? 1 : 0;\n    const lowWord = 1 - highWord;\n    let keysLow = new Uint32Array(length);\n    let keysHigh = new Uint32Array(length);\n    for (let i = 0; i < length; i++) {\n        const high = words[i * 2 + highWord];\n        const low = words[i * 2 + lowWord];\n        // Monotonic unsigned key of the double: a negative flips every bit, a positive only the\n        // sign bit. Complementing that key reverses the order.\n        if ((high & 0x80000000) === 0) {\n            keysHigh[i] = high ^ 0x80000000 ^ flip;\n            keysLow[i] = low ^ flip;\n        }\n        else {\n            keysHigh[i] = ~high ^ flip;\n            keysLow[i] = ~low ^ flip;\n        }\n        order[i] = i;\n    }\n    let nextOrder = new Uint32Array(length);\n    let nextLow = new Uint32Array(length);\n    let nextHigh = new Uint32Array(length);\n    const counts = new Uint32Array(radix);\n    for (let shift = 0; shift < 64; shift += digitBits) {\n        const onHigh = shift >= 32;\n        const wordShift = onHigh ? shift - 32 : shift;\n        const keys = onHigh ? keysHigh : keysLow;\n        counts.fill(0);\n        for (let i = 0; i < length; i++) {\n            counts[(keys[i] >>> wordShift) & digitMask]++;\n        }\n        // A digit shared by every value would make this pass the identity.\n        if (counts[(keys[0] >>> wordShift) & digitMask] === length)\n            continue;\n        cumulate(counts);\n        for (let i = 0; i < length; i++) {\n            const low = keysLow[i];\n            const high = keysHigh[i];\n            const at = counts[((onHigh ? high : low) >>> wordShift) & digitMask]++;\n            nextOrder[at] = order[i];\n            nextLow[at] = low;\n            nextHigh[at] = high;\n        }\n        // A destructuring swap makes JavaScriptCore give up the typed array specialization of\n        // these variables, which costs 8x on the whole sort.\n        let swap = order;\n        order = nextOrder;\n        nextOrder = swap;\n        swap = keysLow;\n        keysLow = nextLow;\n        nextLow = swap;\n        swap = keysHigh;\n        keysHigh = nextHigh;\n        nextHigh = swap;\n    }\n    return order;\n}\n/**\n * Orders the values by the high word of each double, as an LSD radix sort. Values differing by\n * less than their 2^-20 relative resolution share a key and keep their input order.\n * @param array - the values to order.\n * @param descending - order from the largest to the smallest.\n * @returns the indices of the values, in order.\n */\nexport function radixSortOrderApproximate(array, descending) {\n    const values = ensureFloat64(array);\n    const length = values.length;\n    let order = new Uint32Array(length);\n    if (length < 2)\n        return order;\n    const digitBits = getDigitBits(length);\n    const radix = 1 << digitBits;\n    const digitMask = radix - 1;\n    const words = new Uint32Array(values.buffer, values.byteOffset, length * 2);\n    const flip = descending ? 0xffffffff : 0;\n    const highWord = isLittleEndian() ? 1 : 0;\n    let keys = new Uint32Array(length);\n    for (let i = 0; i < length; i++) {\n        const high = words[i * 2 + highWord];\n        keys[i] = ((high & 0x80000000) === 0 ? high ^ 0x80000000 : ~high) ^ flip;\n        order[i] = i;\n    }\n    let nextOrder = new Uint32Array(length);\n    let nextKeys = new Uint32Array(length);\n    const counts = new Uint32Array(radix);\n    for (let shift = 0; shift < 32; shift += digitBits) {\n        counts.fill(0);\n        for (let i = 0; i < length; i++) {\n            counts[(keys[i] >>> shift) & digitMask]++;\n        }\n        if (counts[(keys[0] >>> shift) & digitMask] === length)\n            continue;\n        cumulate(counts);\n        for (let i = 0; i < length; i++) {\n            const key = keys[i];\n            const at = counts[(key >>> shift) & digitMask]++;\n            nextOrder[at] = order[i];\n            nextKeys[at] = key;\n        }\n        // See radixSortOrderExact: a destructuring swap is 8x slower on JavaScriptCore.\n        let swap = order;\n        order = nextOrder;\n        nextOrder = swap;\n        swap = keys;\n        keys = nextKeys;\n        nextKeys = swap;\n    }\n    return order;\n}\n/**\n * Turns the counts of each digit into the position its first entry goes to.\n * @param counts - counts per digit, replaced in place by the start offsets.\n */\nfunction cumulate(counts) {\n    let start = 0;\n    for (let i = 0; i < counts.length; i++) {\n        const count = counts[i];\n        counts[i] = start;\n        start += count;\n    }\n}\n/**\n * Picks the digit width, keeping the radix no wider than the array it scans.\n * @param length - number of values to order.\n * @returns the number of bits of one digit.\n */\nfunction getDigitBits(length) {\n    return length >= LARGE_ARRAY_LENGTH ? LARGE_DIGIT_BITS : SMALL_DIGIT_BITS;\n}\n/**\n * Returns the values as a Float64Array, without copying one that already is.\n * @param array - values.\n * @returns the values, readable as doubles.\n */\nfunction ensureFloat64(array) {\n    return array instanceof Float64Array ? array : Float64Array.from(array);\n}\n//# sourceMappingURL=radixSortOrder.js.map","import { radixSortOrderExact } from \"./utils/radixSortOrder.js\";\n/**\n * Returns the indices that order the values, without moving them.\n * The sort is a radix sort over the full 64 bits of each double: it costs a fixed number of\n * linear passes instead of the n log n comparisons of `Array.prototype.sort`, and orders\n * exactly, NaN, infinities, subnormals and the two zeros included.\n * The sort is stable, so equal values keep their input order.\n * @param array - values to order.\n * @param options - options.\n * @returns the indices of the values, in order.\n */\nexport function xGetSortOrder(array, options = {}) {\n    const { descending = false } = options;\n    return radixSortOrderExact(array, descending);\n}\n//# sourceMappingURL=xGetSortOrder.js.map","'use strict';\n\nfunction FFT(size) {\n  this.size = size | 0;\n  if (this.size <= 1 || (this.size & (this.size - 1)) !== 0)\n    throw new Error('FFT size must be a power of two and bigger than 1');\n\n  this._csize = size << 1;\n\n  // NOTE: Use of `var` is intentional for old V8 versions\n  var table = new Array(this.size * 2);\n  for (var i = 0; i < table.length; i += 2) {\n    const angle = Math.PI * i / this.size;\n    table[i] = Math.cos(angle);\n    table[i + 1] = -Math.sin(angle);\n  }\n  this.table = table;\n\n  // Find size's power of two\n  var power = 0;\n  for (var t = 1; this.size > t; t <<= 1)\n    power++;\n\n  // Calculate initial step's width:\n  //   * If we are full radix-4 - it is 2x smaller to give inital len=8\n  //   * Otherwise it is the same as `power` to give len=4\n  this._width = power % 2 === 0 ? power - 1 : power;\n\n  // Pre-compute bit-reversal patterns\n  this._bitrev = new Array(1 << this._width);\n  for (var j = 0; j < this._bitrev.length; j++) {\n    this._bitrev[j] = 0;\n    for (var shift = 0; shift < this._width; shift += 2) {\n      var revShift = this._width - shift - 2;\n      this._bitrev[j] |= ((j >>> shift) & 3) << revShift;\n    }\n  }\n\n  this._out = null;\n  this._data = null;\n  this._inv = 0;\n}\nmodule.exports = FFT;\n\nFFT.prototype.fromComplexArray = function fromComplexArray(complex, storage) {\n  var res = storage || new Array(complex.length >>> 1);\n  for (var i = 0; i < complex.length; i += 2)\n    res[i >>> 1] = complex[i];\n  return res;\n};\n\nFFT.prototype.createComplexArray = function createComplexArray() {\n  const res = new Array(this._csize);\n  for (var i = 0; i < res.length; i++)\n    res[i] = 0;\n  return res;\n};\n\nFFT.prototype.toComplexArray = function toComplexArray(input, storage) {\n  var res = storage || this.createComplexArray();\n  for (var i = 0; i < res.length; i += 2) {\n    res[i] = input[i >>> 1];\n    res[i + 1] = 0;\n  }\n  return res;\n};\n\nFFT.prototype.completeSpectrum = function completeSpectrum(spectrum) {\n  var size = this._csize;\n  var half = size >>> 1;\n  for (var i = 2; i < half; i += 2) {\n    spectrum[size - i] = spectrum[i];\n    spectrum[size - i + 1] = -spectrum[i + 1];\n  }\n};\n\nFFT.prototype.transform = function transform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._transform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.realTransform = function realTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._realTransform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.inverseTransform = function inverseTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 1;\n  this._transform4();\n  for (var i = 0; i < out.length; i++)\n    out[i] /= this.size;\n  this._out = null;\n  this._data = null;\n};\n\n// radix-4 implementation\n//\n// NOTE: Uses of `var` are intentional for older V8 version that do not\n// support both `let compound assignments` and `const phi`\nFFT.prototype._transform4 = function _transform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform2(outOff, off, step);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform4(outOff, off, step);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var quarterLen = len >>> 2;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      // Full case\n      var limit = outOff + quarterLen;\n      for (var i = outOff, k = 0; i < limit; i += 2, k += step) {\n        const A = i;\n        const B = A + quarterLen;\n        const C = B + quarterLen;\n        const D = C + quarterLen;\n\n        // Original values\n        const Ar = out[A];\n        const Ai = out[A + 1];\n        const Br = out[B];\n        const Bi = out[B + 1];\n        const Cr = out[C];\n        const Ci = out[C + 1];\n        const Dr = out[D];\n        const Di = out[D + 1];\n\n        // Middle values\n        const MAr = Ar;\n        const MAi = Ai;\n\n        const tableBr = table[k];\n        const tableBi = inv * table[k + 1];\n        const MBr = Br * tableBr - Bi * tableBi;\n        const MBi = Br * tableBi + Bi * tableBr;\n\n        const tableCr = table[2 * k];\n        const tableCi = inv * table[2 * k + 1];\n        const MCr = Cr * tableCr - Ci * tableCi;\n        const MCi = Cr * tableCi + Ci * tableCr;\n\n        const tableDr = table[3 * k];\n        const tableDi = inv * table[3 * k + 1];\n        const MDr = Dr * tableDr - Di * tableDi;\n        const MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        const T0r = MAr + MCr;\n        const T0i = MAi + MCi;\n        const T1r = MAr - MCr;\n        const T1i = MAi - MCi;\n        const T2r = MBr + MDr;\n        const T2i = MBi + MDi;\n        const T3r = inv * (MBr - MDr);\n        const T3i = inv * (MBi - MDi);\n\n        // Final values\n        const FAr = T0r + T2r;\n        const FAi = T0i + T2i;\n\n        const FCr = T0r - T2r;\n        const FCi = T0i - T2i;\n\n        const FBr = T1r + T3i;\n        const FBi = T1i - T3r;\n\n        const FDr = T1r - T3i;\n        const FDi = T1i + T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n        out[C] = FCr;\n        out[C + 1] = FCi;\n        out[D] = FDr;\n        out[D + 1] = FDi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleTransform2 = function _singleTransform2(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const evenI = data[off + 1];\n  const oddR = data[off + step];\n  const oddI = data[off + step + 1];\n\n  const leftR = evenR + oddR;\n  const leftI = evenI + oddI;\n  const rightR = evenR - oddR;\n  const rightI = evenI - oddI;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = leftI;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = rightI;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleTransform4 = function _singleTransform4(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Ai = data[off + 1];\n  const Br = data[off + step];\n  const Bi = data[off + step + 1];\n  const Cr = data[off + step2];\n  const Ci = data[off + step2 + 1];\n  const Dr = data[off + step3];\n  const Di = data[off + step3 + 1];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T0i = Ai + Ci;\n  const T1r = Ar - Cr;\n  const T1i = Ai - Ci;\n  const T2r = Br + Dr;\n  const T2i = Bi + Di;\n  const T3r = inv * (Br - Dr);\n  const T3i = inv * (Bi - Di);\n\n  // Final values\n  const FAr = T0r + T2r;\n  const FAi = T0i + T2i;\n\n  const FBr = T1r + T3i;\n  const FBi = T1i - T3r;\n\n  const FCr = T0r - T2r;\n  const FCi = T0i - T2i;\n\n  const FDr = T1r - T3i;\n  const FDi = T1i + T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = FAi;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = FCi;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n\n// Real input radix-4 implementation\nFFT.prototype._realTransform4 = function _realTransform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform2(outOff, off >>> 1, step >>> 1);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform4(outOff, off >>> 1, step >>> 1);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var halfLen = len >>> 1;\n    var quarterLen = halfLen >>> 1;\n    var hquarterLen = quarterLen >>> 1;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      for (var i = 0, k = 0; i <= hquarterLen; i += 2, k += step) {\n        var A = outOff + i;\n        var B = A + quarterLen;\n        var C = B + quarterLen;\n        var D = C + quarterLen;\n\n        // Original values\n        var Ar = out[A];\n        var Ai = out[A + 1];\n        var Br = out[B];\n        var Bi = out[B + 1];\n        var Cr = out[C];\n        var Ci = out[C + 1];\n        var Dr = out[D];\n        var Di = out[D + 1];\n\n        // Middle values\n        var MAr = Ar;\n        var MAi = Ai;\n\n        var tableBr = table[k];\n        var tableBi = inv * table[k + 1];\n        var MBr = Br * tableBr - Bi * tableBi;\n        var MBi = Br * tableBi + Bi * tableBr;\n\n        var tableCr = table[2 * k];\n        var tableCi = inv * table[2 * k + 1];\n        var MCr = Cr * tableCr - Ci * tableCi;\n        var MCi = Cr * tableCi + Ci * tableCr;\n\n        var tableDr = table[3 * k];\n        var tableDi = inv * table[3 * k + 1];\n        var MDr = Dr * tableDr - Di * tableDi;\n        var MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        var T0r = MAr + MCr;\n        var T0i = MAi + MCi;\n        var T1r = MAr - MCr;\n        var T1i = MAi - MCi;\n        var T2r = MBr + MDr;\n        var T2i = MBi + MDi;\n        var T3r = inv * (MBr - MDr);\n        var T3i = inv * (MBi - MDi);\n\n        // Final values\n        var FAr = T0r + T2r;\n        var FAi = T0i + T2i;\n\n        var FBr = T1r + T3i;\n        var FBi = T1i - T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n\n        // Output final middle point\n        if (i === 0) {\n          var FCr = T0r - T2r;\n          var FCi = T0i - T2i;\n          out[C] = FCr;\n          out[C + 1] = FCi;\n          continue;\n        }\n\n        // Do not overwrite ourselves\n        if (i === hquarterLen)\n          continue;\n\n        // In the flipped case:\n        // MAi = -MAi\n        // MBr=-MBi, MBi=-MBr\n        // MCr=-MCr\n        // MDr=MDi, MDi=MDr\n        var ST0r = T1r;\n        var ST0i = -T1i;\n        var ST1r = T0r;\n        var ST1i = -T0i;\n        var ST2r = -inv * T3i;\n        var ST2i = -inv * T3r;\n        var ST3r = -inv * T2i;\n        var ST3i = -inv * T2r;\n\n        var SFAr = ST0r + ST2r;\n        var SFAi = ST0i + ST2i;\n\n        var SFBr = ST1r + ST3i;\n        var SFBi = ST1i - ST3r;\n\n        var SA = outOff + quarterLen - i;\n        var SB = outOff + halfLen - i;\n\n        out[SA] = SFAr;\n        out[SA + 1] = SFAi;\n        out[SB] = SFBr;\n        out[SB + 1] = SFBi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleRealTransform2 = function _singleRealTransform2(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const oddR = data[off + step];\n\n  const leftR = evenR + oddR;\n  const rightR = evenR - oddR;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = 0;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleRealTransform4 = function _singleRealTransform4(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Br = data[off + step];\n  const Cr = data[off + step2];\n  const Dr = data[off + step3];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T1r = Ar - Cr;\n  const T2r = Br + Dr;\n  const T3r = inv * (Br - Dr);\n\n  // Final values\n  const FAr = T0r + T2r;\n\n  const FBr = T1r;\n  const FBi = -T3r;\n\n  const FCr = T0r - T2r;\n\n  const FDr = T1r;\n  const FDi = T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = 0;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n","export function createNumberArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\nexport function createDoubleArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\n//# sourceMappingURL=createArray.js.map","/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n * @param options - options.\n * @returns array of distributed numbers between \"from\" and \"to\".\n */\nexport function createFromToArray(options = {}) {\n    const { from = 0, to = 1, length = 1000, includeFrom = true, includeTo = true, distribution = 'uniform', } = options;\n    const array = new Float64Array(length);\n    let div = length;\n    if (includeFrom && includeTo) {\n        div = length - 1;\n    }\n    else if ((!includeFrom && includeTo) || (includeFrom && !includeTo)) {\n        div = length;\n    }\n    else if (!includeFrom && !includeTo) {\n        div = length + 1;\n    }\n    const delta = (to - from) / div;\n    if (distribution === 'uniform') {\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * index;\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * (index + 1);\n                index++;\n            }\n        }\n    }\n    else if (distribution === 'log') {\n        const base = (to / from) ** (1 / div);\n        const firstExponent = Math.log(from) / Math.log(base);\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index);\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index + 1);\n                index++;\n            }\n        }\n    }\n    else {\n        throw new Error('distribution must be uniform or log');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Stringify an object and convert all typed arrays to arrays\n * @param object - object to stringify.\n * @param replacer - optional replacer function.\n * @param space - optional indentation.\n * @returns JSON string.\n */\nexport function stringify(object, replacer, space) {\n    const internalReplacer = (key, value) => {\n        if (ArrayBuffer.isView(value)) {\n            value = Array.from(value);\n        }\n        if (replacer) {\n            return replacer(key, value);\n        }\n        return value;\n    };\n    return JSON.stringify(object, internalReplacer, space);\n}\n//# sourceMappingURL=stringify.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xSubtract the first array by the second array or a constant value from each element of the first array\n * @param array1 - the array that will be rotated\n * @param array2 - second array or number\n * @returns array after subtraction\n */\nexport function xSubtract(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] - constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] - array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xSubtract.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the minimal value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","/**\n * Check if the values are separated always by the same difference\n * @param array - monotone growing array of number.\n * @param options - options.\n */\nexport function xIsEquallySpaced(array, options = {}) {\n    if (array.length < 3)\n        return true;\n    const { tolerance = 0.05 } = options;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < array.length - 1; ++i) {\n        const absoluteDifference = array[i + 1] - array[i];\n        if (absoluteDifference < minDx) {\n            minDx = absoluteDifference;\n        }\n        if (absoluteDifference > maxDx) {\n            maxDx = absoluteDifference;\n        }\n    }\n    return (maxDx - minDx) / maxDx < tolerance;\n}\n//# sourceMappingURL=xIsEquallySpaced.js.map","/**\n * Returns true if x is monotonic.\n * @param array - array of numbers.\n * @returns 1 if monotonic increasing, -1 if monotonic decreasing, 0 if not monotonic.\n */\nexport function xIsMonotonic(array) {\n    if (array.length < 2) {\n        return 1;\n    }\n    if (array[0] === array[1]) {\n        // maybe a constant series\n        for (let i = 1; i < array.length - 1; i++) {\n            if (array[i] !== array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    if (array[0] < array.at(-1)) {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] >= array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    else {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] <= array[i + 1])\n                return 0;\n        }\n        return -1;\n    }\n}\n//# sourceMappingURL=xIsMonotonic.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxAbsoluteValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = Math.abs(array[fromIndex]);\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] >= 0) {\n            if (array[i] > maxValue) {\n                maxValue = array[i];\n            }\n        }\n        else if (-array[i] > maxValue) {\n            maxValue = -array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxAbsoluteValue.js.map","import { xMedian } from \"./xMedian.js\";\n/**\n * This function calculates the median absolute deviation (MAD).\n * https://en.wikipedia.org/wiki/Median_absolute_deviation\n * @param array - array of numbers.\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.js\";\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns object with 2 properties, min and max.\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (let i = 1; i < array.length; i++) {\n        const value = array[i];\n        if (value < min)\n            min = value;\n        else if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","/**\n * Applies the Rayleigh inverse cumulative distribution for a single value.\n * @param input - cumulative probability value.\n * @returns the inverse value for the Rayleigh distribution.\n */\nexport function simpleNormInvMagnitude(input) {\n    return -Math.sqrt(-2 * Math.log(1 - input));\n}\n//# sourceMappingURL=simpleNormInvMagnitude.js.map","/*\nAdapted from: https://github.com/compute-io/erfcinv/blob/aa116e23883839359e310ad41a7c42f72815fc1e/lib/number.js\n\nThe MIT License (MIT)\n\nCopyright (c) 2014-2015 The Compute.io Authors. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the \"Software\") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/* eslint-disable no-loss-of-precision */\n// Coefficients for erfcinv on [0, 0.5]:\nconst Y1 = 8.91314744949340820313e-2;\nconst P1 = [\n    -5.38772965071242932965e-3, 8.22687874676915743155e-3,\n    2.19878681111168899165e-2, -3.65637971411762664006e-2,\n    -1.26926147662974029034e-2, 3.34806625409744615033e-2,\n    -8.36874819741736770379e-3, -5.08781949658280665617e-4,\n];\nconst Q1 = [\n    8.86216390456424707504e-4, -2.33393759374190016776e-3,\n    7.95283687341571680018e-2, -5.27396382340099713954e-2,\n    -7.1228902341542847553e-1, 6.62328840472002992063e-1, 1.56221558398423026363,\n    -1.56574558234175846809, -9.70005043303290640362e-1, 1,\n];\n// Coefficients for erfcinv for 0.5 > 1-x >= 0:\nconst Y2 = 2.249481201171875;\nconst P2 = [\n    -3.67192254707729348546, 2.11294655448340526258e1, 1.7445385985570866523e1,\n    -4.46382324441786960818e1, -1.88510648058714251895e1,\n    1.76447298408374015486e1, 8.37050328343119927838, 1.05264680699391713268e-1,\n    -2.02433508355938759655e-1,\n];\nconst Q2 = [\n    1.72114765761200282724, -2.26436933413139721736e1, 1.08268667355460159008e1,\n    4.85609213108739935468e1, -2.01432634680485188801e1,\n    -2.86608180499800029974e1, 3.9713437953343869095, 6.24264124854247537712, 1,\n];\n// Coefficients for erfcinv for sqrt( -log(1-x)):\nconst Y3 = 8.07220458984375e-1;\nconst P3 = [\n    -6.81149956853776992068e-10, 2.85225331782217055858e-8,\n    -6.79465575181126350155e-7, 2.14558995388805277169e-3,\n    2.90157910005329060432e-2, 1.42869534408157156766e-1,\n    3.37785538912035898924e-1, 3.87079738972604337464e-1,\n    1.17030156341995252019e-1, -1.63794047193317060787e-1,\n    -1.31102781679951906451e-1,\n];\nconst Q3 = [\n    1.105924229346489121e-2, 1.52264338295331783612e-1, 8.48854343457902036425e-1,\n    2.59301921623620271374, 4.77846592945843778382, 5.38168345707006855425,\n    3.46625407242567245975, 1,\n];\nconst Y4 = 9.3995571136474609375e-1;\nconst P4 = [\n    2.66339227425782031962e-12, -2.30404776911882601748e-10,\n    4.60469890584317994083e-6, 1.57544617424960554631e-4,\n    1.87123492819559223345e-3, 9.50804701325919603619e-3,\n    1.85573306514231072324e-2, -2.22426529213447927281e-3,\n    -3.50353787183177984712e-2,\n];\nconst Q4 = [\n    7.64675292302794483503e-5, 2.63861676657015992959e-3,\n    3.41589143670947727934e-2, 2.20091105764131249824e-1,\n    7.62059164553623404043e-1, 1.3653349817554063097, 1,\n];\nconst Y5 = 9.8362827301025390625e-1;\nconst P5 = [\n    9.9055709973310326855e-17, -2.81128735628831791805e-14,\n    4.62596163522878599135e-9, 4.49696789927706453732e-7,\n    1.49624783758342370182e-5, 2.09386317487588078668e-4,\n    1.05628862152492910091e-3, -1.12951438745580278863e-3,\n    -1.67431005076633737133e-2,\n];\nconst Q5 = [\n    2.82243172016108031869e-7, 2.75335474764726041141e-5,\n    9.64011807005165528527e-4, 1.60746087093676504695e-2,\n    1.38151865749083321638e-1, 5.91429344886417493481e-1, 1,\n];\n/**\n * Evaluates a polynomial at x using Horner's method.\n * @param c - array of polynomial coefficients.\n * @param x - evaluation point.\n * @returns polynomial value.\n */\nfunction polyval(c, x) {\n    let p = 0;\n    for (const coef of c) {\n        p = p * x + coef;\n    }\n    return p;\n}\n/**\n * Calculates a rational approximation.\n * @private\n * @param x - input value.\n * @param v - shift value.\n * @param P - array of numerator polynomial coefficients.\n * @param Q - array of denominator polynomial coefficients.\n * @param Y - scale factor.\n * @returns rational approximation.\n */\nfunction calc(x, v, P, Q, Y) {\n    const s = x - v;\n    const r = polyval(P, s) / polyval(Q, s);\n    return Y * x + r * x;\n}\n/**\n * Evaluates the complementary inverse error function for an input value.\n * @private\n * @param x - input value.\n * @returns evaluated complementary inverse error function.\n */\nexport default function erfcinv(x) {\n    let sign = false;\n    let val;\n    let q;\n    let g;\n    let r;\n    // [1] Special cases...\n    // NaN:\n    if (Number.isNaN(x)) {\n        return Number.NaN;\n    }\n    // x not on the interval: [0,2]\n    if (x < 0 || x > 2) {\n        throw new RangeError(`erfcinv()::invalid input argument. Value must be on the interval [0,2]. Value: \\`${x}\\`.`);\n    }\n    if (x === 0) {\n        return Number.POSITIVE_INFINITY;\n    }\n    if (x === 2) {\n        return Number.NEGATIVE_INFINITY;\n    }\n    if (x === 1) {\n        return 0;\n    }\n    // [2] Get the sign and make use of `erfc` reflection formula: `erfc(-z)=2 - erfc(z)`...\n    if (x > 1) {\n        q = 2 - x;\n        x = 1 - q;\n        sign = true;\n    }\n    else {\n        q = x;\n        x = 1 - x;\n    }\n    // [3] |x| <= 0.5\n    if (x <= 0.5) {\n        g = x * (x + 10);\n        r = polyval(P1, x) / polyval(Q1, x);\n        val = g * Y1 + g * r;\n        return sign ? -val : val;\n    }\n    // [4] 1-|x| >= 0.25\n    if (q >= 0.25) {\n        g = Math.sqrt(-2 * Math.log(q));\n        q = q - 0.25;\n        r = polyval(P2, q) / polyval(Q2, q);\n        val = g / (Y2 + r);\n        return sign ? -val : val;\n    }\n    q = Math.sqrt(-Math.log(q));\n    // [5] q < 3\n    if (q < 3) {\n        return calc(q, 1.125, P3, Q3, Y3);\n    }\n    // [6] q < 6\n    if (q < 6) {\n        return calc(q, 3, P4, Q4, Y4);\n    }\n    // Note that the smallest number in JavaScript is 5e-324. Math.sqrt( -Math.log( 5e-324 ) ) ~27.2844\n    return calc(q, 6, P5, Q5, Y5);\n    // Note that in the boost library, they are able to go to much smaller values, as 128 bit long doubles support ~1e-5000; something which JavaScript does not natively support.\n}\n//# sourceMappingURL=erfcinv.js.map","import erfcinv from \"./erfcinv.js\";\n/**\n * Applies the inverse of the normal cumulative distribution for a single value.\n * @param input - cumulative probability value.\n * @returns the inverse value for the normal distribution.\n */\nexport function simpleNormInvRaw(input) {\n    return -1 * Math.SQRT2 * erfcinv(2 * input);\n}\n//# sourceMappingURL=simpleNormInvRaw.js.map","import { isAnyArray } from 'is-any-array';\nimport { createFromToArray } from \"../utils/index.js\";\nimport { simpleNormInvMagnitude } from \"./utils/simpleNormInvMagnitude.js\";\nimport { simpleNormInvRaw } from \"./utils/simpleNormInvRaw.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * Determine noise level by san plot methodology (https://doi.org/10.1002/mrc.4882)\n * @param array - real or magnitude spectra data.\n * @param options - options\n * @returns noise level\n */\nexport function xNoiseSanPlot(array, options = {}) {\n    const { mask, cutOffFromPositive = true, refine = true, magnitudeMode = false, scaleFactor = 1, factorStd = 5, fixOffset = true, } = options;\n    const input = prepareData(array, { scaleFactor, mask });\n    if (fixOffset && !magnitudeMode) {\n        const medianIndex = Math.floor(input.length / 2);\n        const median = input.length % 2 === 0\n            ? 0.5 * (input[medianIndex - 1] + input[medianIndex])\n            : input[medianIndex];\n        for (let i = 0; i < input.length; i++) {\n            input[i] -= median;\n        }\n    }\n    const firstNegativeValueIndex = input.at(-1) >= 0\n        ? input.length\n        : input.findIndex((e) => e < 0);\n    let lastPositiveValueIndex = firstNegativeValueIndex - 1;\n    for (let i = lastPositiveValueIndex; i >= 0; i--) {\n        if (input[i] > 0) {\n            lastPositiveValueIndex = i;\n            break;\n        }\n    }\n    const signPositive = input.slice(0, lastPositiveValueIndex + 1);\n    const signNegative = createNegativeSign(input, firstNegativeValueIndex);\n    const skyPoint = signPositive[0];\n    const cutOff = options.cutOff ??\n        (cutOffFromPositive\n            ? determineCutOff(signPositive, { magnitudeMode })\n            : null);\n    const noiseLevelPositive = calculateNoiseLevel(signPositive, {\n        factorStd,\n        refine,\n        magnitudeMode,\n        cutOff,\n    });\n    const noiseLevelNegative = calculateNoiseLevel(signNegative, {\n        factorStd,\n        refine,\n        magnitudeMode,\n        cutOff,\n    });\n    return {\n        positive: noiseLevelPositive,\n        negative: noiseLevelNegative,\n        snr: skyPoint / noiseLevelPositive,\n        sanplot: generateSanPlot(input, {\n            fromTo: {\n                positive: { from: 0, to: lastPositiveValueIndex },\n                negative: { from: firstNegativeValueIndex, to: input.length },\n            },\n        }),\n        percentiles: {\n            positive: getPercentiles(signPositive),\n            negative: getPercentiles(signNegative),\n        },\n    };\n}\nfunction calculateNoiseLevel(sign, options) {\n    const { factorStd, refine, magnitudeMode, cutOff } = options;\n    if (sign.length === 0)\n        return 0;\n    const simpleNormInvValue = magnitudeMode\n        ? simpleNormInvMagnitude\n        : simpleNormInvRaw;\n    const cutOffDist = cutOff || determineCutOff(sign, { magnitudeMode });\n    let noiseLevel = sign[Math.floor(sign.length * cutOffDist)];\n    let cloneSign = sign.slice();\n    let cutOffSignalsIndex = -1;\n    if (refine) {\n        const cutOffSignals = noiseLevel * factorStd;\n        cutOffSignalsIndex = sign.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndex > -1) {\n            cloneSign = sign.slice(cutOffSignalsIndex);\n            noiseLevel = cloneSign[Math.floor(cloneSign.length * cutOffDist)];\n        }\n    }\n    if (refine && cutOffSignalsIndex > -1) {\n        const effectiveCutOffDist = (cutOffDist * cloneSign.length + cutOffSignalsIndex) /\n            (cloneSign.length + cutOffSignalsIndex);\n        const refinedCorrectionFactor = -1 * simpleNormInvValue(effectiveCutOffDist / 2);\n        noiseLevel /= refinedCorrectionFactor;\n    }\n    else {\n        const correctionFactor = -simpleNormInvValue(cutOffDist / 2);\n        noiseLevel /= correctionFactor;\n    }\n    return noiseLevel;\n}\n/**\n * Estimates where the \"noise region\" begins in a SAN-plot-style sorted\n * intensity series (Sheberstov et al., Magn. Reson. Chem. 2020, 58, 466-472,\n * https://doi.org/10.1002/mrc.4882).\n *\n * `signPositive` is expected to already be sorted by decreasing absolute\n * magnitude (the paper's S+ or S- series). For each quantile fraction `i`\n * (fraction of points at or beyond that position, counting from the tail),\n * we invert the Gaussian (or Rayleigh, in magnitude mode) order-statistics\n * relationship to get a local estimate of the noise standard deviation\n * (sigma). This estimate is only expected to be stable/flat once we are\n * fully inside the true noise region; in the signal and artifact regions\n * it will be biased and noisy. We therefore scan candidate quantile windows\n * and pick the one where the sigma estimates are most self-consistent\n * (lowest variance) - a proxy for \"where the noise region reliably starts\".\n * @param signPositive - an array of positive numbers.\n * @param options - optional parameters to configure the cut-off determination.\n * @param options.magnitudeMode - if true, uses magnitude mode for normalization. Default is false.\n * @param options.considerList - an object specifying the range and step for consideration.\n * @param options.considerList.from - the starting point of the range. Default is 0.5.\n * @param options.considerList.step - the step size for the range. Default is 0.1.\n * @param options.considerList.to - the ending point of the range. Default is 0.9.\n * @returns the optimal cut-off point as a number.\n */\nfunction determineCutOff(signPositive, options = {}) {\n    const { magnitudeMode = false, considerList = { from: 0.5, step: 0.1, to: 0.9 }, } = options;\n    const inverseQuantileFn = magnitudeMode\n        ? simpleNormInvMagnitude\n        : simpleNormInvRaw;\n    const indexMax = signPositive.length - 1;\n    // Ensure the configurable scan range stays inside the valid quantile domain.\n    const { from, to, step } = considerList;\n    const safeFrom = Math.min(Math.max(from, 0.001), 0.999);\n    const safeTo = Math.min(Math.max(to, 0.001), 0.999);\n    const safeStep = Math.max(0.001, Math.min(0.999, step));\n    const normalizedFrom = Math.min(safeFrom, safeTo);\n    const normalizedTo = Math.max(safeFrom, safeTo);\n    // For each quantile fraction, compute a local sigma estimate by inverting\n    // the theoretical relationship between order statistics and the assumed\n    // noise distribution (Gaussian or Rayleigh).\n    const sigmaEstimates = [];\n    const startQuantile = Math.max(0.001, normalizedFrom - safeStep / 2);\n    const endQuantile = Math.min(0.999, normalizedTo + safeStep / 2);\n    for (let quantileFraction = startQuantile; quantileFraction <= endQuantile; quantileFraction += 0.01) {\n        const index = Math.max(0, Math.min(indexMax, Math.round(indexMax * quantileFraction)));\n        const sigma = -signPositive[index] / inverseQuantileFn(quantileFraction / 2);\n        // Skip non-finite sigma estimates\n        if (Number.isFinite(sigma)) {\n            sigmaEstimates.push([quantileFraction, Math.abs(sigma)]);\n        }\n    }\n    const halfWindow = safeStep / 2;\n    let bestVariance = Number.MAX_SAFE_INTEGER;\n    let bestQuantileFraction = 0.5;\n    for (let windowCenter = normalizedFrom; windowCenter <= normalizedTo; windowCenter += safeStep) {\n        const windowFloor = windowCenter - halfWindow;\n        const windowTop = windowCenter + halfWindow;\n        let count = 0;\n        let sum = 0;\n        // First pass: compute mean\n        for (const [q, absSigma] of sigmaEstimates) {\n            if (q > windowFloor && q < windowTop) {\n                sum += absSigma;\n                count++;\n            }\n        }\n        // Guard against empty windows.\n        if (count === 0)\n            continue;\n        const meanSigma = sum / count;\n        // Second pass: compute variance\n        let variance = 0;\n        for (const [q, absSigma] of sigmaEstimates) {\n            if (q > windowFloor && q < windowTop) {\n                variance += (absSigma - meanSigma) ** 2;\n            }\n        }\n        if (variance < bestVariance) {\n            bestVariance = variance;\n            bestQuantileFraction = windowCenter;\n        }\n    }\n    return bestQuantileFraction;\n}\n/**\n * Generates a SAN plot from the given array based on the specified options.\n * @param array - the input array of numbers to be processed.\n * @param options - an optional object containing configuration options.\n * @param options.logBaseY - the logarithmic base for the Y-axis. Defaults to 2.\n * @param options.fromTo - an object specifying the range for each key. Each key maps to an object with `from` and `to` properties.\n * @returns an object where each key maps to a DataXY object containing the processed data.\n */\nfunction generateSanPlot(array, options = {}) {\n    const { fromTo, logBaseY = 2 } = options;\n    const sanplot = {};\n    for (const key in fromTo) {\n        const { from, to } = fromTo[key];\n        sanplot[key] =\n            from !== to\n                ? scale(array.slice(from, to), {\n                    logBaseY,\n                })\n                : { x: [], y: [] };\n        if (key === 'negative') {\n            sanplot[key].y.reverse();\n        }\n    }\n    return sanplot;\n}\n/**\n * Scales the input array based on the provided options.\n * @param array - the input array to be scaled.\n * @param options - an optional object containing scaling options.\n * @param options.logBaseY - if provided, the array values will be scaled using the logarithm of this base.\n * @returns an object containing the scaled x and y arrays.\n */\nfunction scale(array, options = {}) {\n    const { log10, abs } = Math;\n    const { logBaseY } = options;\n    if (logBaseY) {\n        array = array.slice(0);\n        const logOfBase = log10(logBaseY);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = log10(abs(array[i])) / logOfBase;\n        }\n    }\n    const xAxis = createFromToArray({\n        from: 0,\n        to: array.length - 1,\n        length: array.length,\n    });\n    return { x: xAxis, y: array };\n}\nfunction createNegativeSign(array, from) {\n    const length = array.length - from;\n    const result = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        result[i] = -array[array.length - 1 - i];\n    }\n    return result;\n}\n/**\n * Calculates intensity percentiles ranging from the 0th to the 100th percentile\n * (in 1 percentile increments) from a pre-sorted array.\n * @param sorted - a pre-sorted array of numbers.\n * @returns An array where index `p` contains the `p`th percentile.\n */\nfunction getPercentiles(sorted) {\n    const result = new Array(101).fill(0);\n    if (sorted.length === 0)\n        return result;\n    const maxIndex = sorted.length - 1;\n    for (let percentile = 0; percentile <= 100; percentile++) {\n        const ratio = percentile / 100;\n        const index = maxIndex - Math.floor(ratio * maxIndex);\n        result[percentile] = sorted[index];\n    }\n    return result;\n}\n/**\n * Prepares and processes the input data array based on the provided options.\n * @param array - The input array of numbers to be processed.\n * @param options - The configuration options for processing the data.\n * @returns A new Float64Array containing the processed data, scaled by the\n *          scaleFactor and sorted in descending order.\n */\nfunction prepareData(array, options) {\n    const { scaleFactor, mask } = options;\n    const input = xEnsureFloat64(isAnyArray(mask) && mask.length === array.length\n        ? array.filter((_e, i) => !mask[i])\n        : array);\n    if (scaleFactor > 1) {\n        for (let i = 0; i < input.length; i++) {\n            input[i] *= scaleFactor;\n        }\n    }\n    input.sort();\n    input.reverse();\n    return input;\n}\n//# sourceMappingURL=xNoiseSanPlot.js.map","import { xMedianAbsoluteDeviation } from \"./xMedianAbsoluteDeviation.js\";\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 - array of numbers.\n * @returns noise level corresponding to one standard deviation.\n */\nexport function xNoiseStandardDeviation(array) {\n    const { mad, median } = xMedianAbsoluteDeviation(array);\n    return { sd: mad / 0.6744897501960817, mad, median };\n}\n//# sourceMappingURL=xNoiseStandardDeviation.js.map","/**\n * This function calculate the norm of a vector.\n * @example xNorm([3, 4]) -> 5\n * @param array - array\n * @returns - calculated norm\n */\nexport function xNorm(array) {\n    let result = 0;\n    for (let i = 0; i < array.length; i++) {\n        const element = array[i];\n        result += element * element;\n    }\n    return Math.sqrt(result);\n}\n//# sourceMappingURL=xNorm.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Calculate the sum of the values\n * @param array - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns sum value on the specified range.\n */\nexport function xSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xSum.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xSum } from \"./xSum.js\";\n/**\n * Divides the data with either the sum, the absolute sum or the maximum of the data\n * @param input - array containing values.\n * @param options - options.\n * @returns normalized data.\n */\nexport function xNormed(input, options = {}) {\n    const { algorithm = 'absolute', value = 1 } = options;\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    if (input.length === 0) {\n        throw new Error('input must not be empty');\n    }\n    switch (algorithm) {\n        case 'absolute': {\n            const absoluteSumValue = absoluteSum(input) / value;\n            if (absoluteSumValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / absoluteSumValue;\n            }\n            return output;\n        }\n        case 'max': {\n            const currentMaxValue = xMaxValue(input);\n            if (currentMaxValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            const factor = value / currentMaxValue;\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] * factor;\n            }\n            return output;\n        }\n        case 'sum': {\n            const sumFactor = xSum(input) / value;\n            if (sumFactor === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / sumFactor;\n            }\n            return output;\n        }\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\nfunction absoluteSum(input) {\n    let sumValue = 0;\n    for (let i = 0; i < input.length; i++) {\n        sumValue += Math.abs(input[i]);\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xNormed.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * Pads an array symmetrically on both sides.\n * @param array - the array that will be padded\n * @param options - options\n * @returns padded Float64Array\n */\nexport function xPadding(array, options = {}) {\n    const { size = 0, value = 0, algorithm } = options;\n    xCheck(array);\n    if (!algorithm) {\n        return xEnsureFloat64(array);\n    }\n    const result = new Float64Array(array.length + size * 2);\n    for (let i = 0; i < array.length; i++) {\n        result[i + size] = array[i];\n    }\n    const fromEnd = size + array.length;\n    const toEnd = 2 * size + array.length;\n    switch (algorithm) {\n        case 'value':\n            for (let i = 0; i < size; i++) {\n                result[i] = value;\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = value;\n            }\n            break;\n        case 'duplicate':\n            for (let i = 0; i < size; i++) {\n                result[i] = array[0];\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = array.at(-1);\n            }\n            break;\n        case 'circular':\n            for (let i = 0; i < size; i++) {\n                result[i] =\n                    array[(array.length - (size % array.length) + i) % array.length];\n            }\n            for (let i = 0; i < size; i++) {\n                result[i + fromEnd] = array[i % array.length];\n            }\n            break;\n        default:\n            throw new Error(`unknown algorithm ${String(algorithm)}`);\n    }\n    return result;\n}\n//# sourceMappingURL=xPadding.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Pareto scaling, which uses the square root of standard deviation as the scaling factor, circumvents the amplification of noise by retaining a small portion of magnitude information.\n * Noda, I. (2008). Scaling techniques to enhance two-dimensional correlation spectra. Journal of Molecular Structure, 883, 216-227.\n * DOI: 10.1016/j.molstruc.2007.12.026\n * @param array - array of number\n */\nexport function xParetoNormalization(array) {\n    xCheck(array);\n    const result = new Float64Array(array.length);\n    const sqrtSD = Math.sqrt(xStandardDeviation(array));\n    for (let i = 0; i < array.length; i++) {\n        result[i] = array[i] / sqrtSD;\n    }\n    return result;\n}\n//# sourceMappingURL=xParetoNormalization.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xMinValue } from \"./xMinValue.js\";\n/**\n * Function used to rescale data\n * @param input - input for the rescale\n * @param options - options\n * @returns rescaled data\n */\nexport function xRescale(input, options = {}) {\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    const currentMin = xMinValue(input);\n    const currentMax = xMaxValue(input);\n    if (currentMin === currentMax) {\n        throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n    }\n    const { min = 0, max = 1 } = options;\n    if (min >= max) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + min;\n    }\n    return output;\n}\n//# sourceMappingURL=xRescale.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xPadding } from \"./xPadding.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param fct - callback function that from an array returns a value\n * @param options - options\n */\nexport function xRolling(array, fct, options = {}) {\n    xCheck(array);\n    if (typeof fct !== 'function') {\n        throw new TypeError('fct must be a function');\n    }\n    const { window = 5, padding = {} } = options;\n    const { size = window - 1, algorithm, value } = padding;\n    const padded = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n    const newArray = [];\n    for (let i = 0; i < padded.length - window + 1; i++) {\n        // we will send a view to the original buffer\n        newArray.push(fct(padded.subarray(i, i + window)));\n    }\n    return newArray;\n}\n//# sourceMappingURL=xRolling.js.map","import { xMean } from \"./xMean.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - option\n */\nexport function xRollingAverage(array, options = {}) {\n    return xRolling(array, xMean, options);\n}\n//# sourceMappingURL=xRollingAverage.js.map","import { xMedian } from \"./xMedian.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - options\n */\nexport function xRollingMedian(array, options = {}) {\n    return xRolling(array, xMedian, options);\n}\n//# sourceMappingURL=xRollingMedian.js.map","import { createNumberArray } from \"../utils/index.js\";\nexport function xSequentialFillFromStep(parameters, options = {}) {\n    const { from, step, size } = parameters;\n    const { ArrayConstructor = Float64Array } = options;\n    const result = createNumberArray(ArrayConstructor, size);\n    for (let i = 0; i < size; i++) {\n        result[i] = from + i * step;\n    }\n    return result;\n}\n//# sourceMappingURL=xSequentialFillFromStep.js.map","import { xSequentialFillFromStep } from \"./xSequentialFillFromStep.js\";\nexport function xSequentialFillFromTo(parameters, options = {}) {\n    const { from, to, size } = parameters;\n    const step = size <= 1 ? 0 : (to - from) / (size - 1);\n    return xSequentialFillFromStep({ from, step, size }, options);\n}\n//# sourceMappingURL=xSequentialFillFromTo.js.map","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix must contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('all rows must has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","/*\nThe MIT License (MIT)\n\nCopyright (c) 2013 Eric Arnebäck\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n/**\n * Solves a system of linear equations using the Cholesky decomposition method.\n * It is a direct conversion to TS from {@link https://github.com/scijs/cholesky-solve}\n * @param nonZerosArray - the matrix in triplet form (array of arrays), where each sub-array contains three elements: row index, column index, and value.\n * @param dimension - the order of the matrix (number of rows/columns).\n * @param permutationEncoded - optional permutation array. If provided, it will be used to permute the matrix.\n * @returns a function that takes a right-hand side vector `b` and returns the solution vector `x`, or `null` if the decomposition fails.\n */\nexport function matrixCholeskySolver(nonZerosArray, dimension, permutationEncoded) {\n    if (permutationEncoded) {\n        const pinv = new Int32Array(dimension);\n        for (let k = 0; k < dimension; k++) {\n            pinv[permutationEncoded[k]] = k;\n        }\n        // Build a permuted copy (kept as plain arrays for compatibility)\n        const mt = new Array(nonZerosArray.length);\n        for (let a = 0; a < nonZerosArray.length; ++a) {\n            const [r, c, value] = nonZerosArray[a];\n            const ar = pinv[r];\n            const ac = pinv[c];\n            mt[a] = ac < ar ? [ac, ar, value] : [ar, ac, value];\n        }\n        nonZerosArray = mt;\n    }\n    else {\n        // use a typed identity permutation\n        const p = new Int32Array(dimension);\n        for (let i = 0; i < dimension; ++i) {\n            p[i] = i;\n        }\n        permutationEncoded = p;\n    }\n    const nnz = nonZerosArray.length;\n    const ap = new Int32Array(dimension + 1);\n    const ai = new Int32Array(nnz);\n    const ax = new Float64Array(nnz);\n    const lnz = new Int32Array(dimension);\n    for (let idx = 0; idx < nnz; idx++) {\n        const col = nonZerosArray[idx][1];\n        lnz[col]++;\n    }\n    ap[0] = 0;\n    for (let i = 0; i < dimension; ++i) {\n        ap[i + 1] = ap[i] + lnz[i];\n    }\n    const colOffset = new Int32Array(dimension);\n    for (let idx = 0; idx < nnz; idx++) {\n        const e = nonZerosArray[idx];\n        const col = e[1];\n        const adr = ap[col] + colOffset[col];\n        ai[adr] = e[0];\n        ax[adr] = e[2];\n        colOffset[col]++;\n    }\n    const d = new Float64Array(dimension);\n    const y = new Float64Array(dimension);\n    const lp = new Int32Array(dimension + 1);\n    const parent = new Int32Array(dimension);\n    const lnzArray = new Int32Array(dimension);\n    const flag = new Int32Array(dimension);\n    const pattern = new Int32Array(dimension);\n    const bp1 = new Float64Array(dimension);\n    const x = new Float64Array(dimension);\n    ldlSymbolic(dimension, ap, ai, lp, parent, lnzArray, flag);\n    const nz = lp[dimension];\n    const lx = new Float64Array(nz);\n    const li = new Int32Array(nz);\n    const result = ldlNumeric(dimension, ap, ai, ax, lp, parent, lnzArray, li, lx, d, y, pattern, flag);\n    if (result === dimension) {\n        return (b) => {\n            ldlPerm(dimension, bp1, b, permutationEncoded);\n            ldlLsolve(dimension, bp1, lp, li, lx);\n            ldlDsolve(dimension, bp1, d);\n            ldlLTsolve(dimension, bp1, lp, li, lx);\n            ldlPermt(dimension, x, bp1, permutationEncoded);\n            return x;\n        };\n    }\n    else {\n        return null;\n    }\n}\nfunction ldlSymbolic(dimension, ap, ai, lp, parent, lnz, flag) {\n    const apLoc = ap;\n    const aiLoc = ai;\n    const parentLoc = parent;\n    const lnzLoc = lnz;\n    const flagLoc = flag;\n    for (let k = 0; k < dimension; k++) {\n        parentLoc[k] = -1;\n        flagLoc[k] = k;\n        lnzLoc[k] = 0;\n        const kk = k;\n        const p2 = apLoc[kk + 1];\n        for (let p = apLoc[kk]; p < p2; p++) {\n            let i = aiLoc[p];\n            if (i < k) {\n                for (; flagLoc[i] !== k; i = parentLoc[i]) {\n                    if (parentLoc[i] === -1)\n                        parentLoc[i] = k;\n                    lnzLoc[i]++;\n                    flagLoc[i] = k;\n                }\n            }\n        }\n    }\n    lp[0] = 0;\n    for (let k = 0; k < dimension; k++) {\n        lp[k + 1] = lp[k] + lnz[k];\n    }\n}\nfunction ldlNumeric(dimension, ap, ai, ax, lp, parent, lnz, li, lx, d, y, pattern, flag) {\n    const apLoc = ap;\n    const aiLoc = ai;\n    const axLoc = ax;\n    const lpLoc = lp;\n    const parentLoc = parent;\n    const lnzLoc = lnz;\n    const liLoc = li;\n    const lxLoc = lx;\n    const dLoc = d;\n    const yLoc = y;\n    const patternLoc = pattern;\n    const flagLoc = flag;\n    let yi, lKi;\n    for (let k = 0; k < dimension; k++) {\n        yLoc[k] = 0;\n        let top = dimension;\n        flagLoc[k] = k;\n        lnzLoc[k] = 0;\n        const kk = k;\n        const p2col = apLoc[kk + 1];\n        for (let p = apLoc[kk]; p < p2col; p++) {\n            let i = aiLoc[p];\n            if (i <= k) {\n                yLoc[i] += axLoc[p];\n                let len = 0;\n                for (; flagLoc[i] !== k; i = parentLoc[i]) {\n                    patternLoc[len++] = i;\n                    flagLoc[i] = k;\n                }\n                while (len > 0)\n                    patternLoc[--top] = patternLoc[--len];\n            }\n        }\n        dLoc[k] = yLoc[k];\n        yLoc[k] = 0;\n        for (; top < dimension; top++) {\n            const i = patternLoc[top];\n            yi = yLoc[i];\n            yLoc[i] = 0;\n            const p2 = lpLoc[i] + lnzLoc[i];\n            let p;\n            for (p = lpLoc[i]; p < p2; p++) {\n                yLoc[liLoc[p]] -= lxLoc[p] * yi;\n            }\n            lKi = yi / dLoc[i];\n            dLoc[k] -= lKi * yi;\n            liLoc[p] = k;\n            lxLoc[p] = lKi;\n            lnzLoc[i]++;\n        }\n        if (dLoc[k] === 0)\n            return k;\n    }\n    return dimension;\n}\nfunction ldlLsolve(dimension, x, lp, li, lx) {\n    const lpLoc = lp;\n    const liLoc = li;\n    const lxLoc = lx;\n    const xLoc = x;\n    for (let j = 0; j < dimension; j++) {\n        const p2 = lpLoc[j + 1];\n        for (let p = lpLoc[j]; p < p2; p++) {\n            xLoc[liLoc[p]] -= lxLoc[p] * xLoc[j];\n        }\n    }\n}\nfunction ldlDsolve(dimension, x, d) {\n    const xLoc = x;\n    const dLoc = d;\n    for (let j = 0; j < dimension; j++) {\n        xLoc[j] /= dLoc[j];\n    }\n}\nfunction ldlLTsolve(dimension, x, lp, li, lx) {\n    const lpLoc = lp;\n    const liLoc = li;\n    const lxLoc = lx;\n    const xLoc = x;\n    for (let j = dimension - 1; j >= 0; j--) {\n        const p2 = lpLoc[j + 1];\n        for (let p = lpLoc[j]; p < p2; p++) {\n            xLoc[j] -= lxLoc[p] * xLoc[liLoc[p]];\n        }\n    }\n}\nfunction ldlPerm(dimension, x, b, permutationEncoded) {\n    const perm = permutationEncoded;\n    const xLoc = x;\n    const bLoc = b;\n    for (let j = 0; j < dimension; j++) {\n        xLoc[j] = bLoc[perm[j]];\n    }\n}\nfunction ldlPermt(dimension, x, b, permutationEncoded) {\n    const perm = permutationEncoded;\n    const xLoc = x;\n    const bLoc = b;\n    for (let j = 0; j < dimension; j++) {\n        xLoc[perm[j]] = bLoc[j];\n    }\n}\n//# sourceMappingURL=matrixCholeskySolver.js.map","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2013 Mikola Lysenko\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n/**\n * The reverse Cuthill-Mckee method is a fast and effective preconditioner for reducing the bandwidth of sparse linear systems.\n * When solving a positive semidefinite linear system using Cholesky factorization, it greatly reduces fill-in.\n * It is a direct conversion to TS from {@link github.com/mikolalysenko/cuthill-mckee}\n * @param list - lower triangular non zeros from a symmetric sparse matrix.\n * @param dimension - matrix dimension\n * @returns A Float64Array where the value at each index represents the new position of the node\n *          in the bandwidth-reduced ordering.\n */\nexport function matrixCuthillMckee(list, dimension) {\n    const adj = new Array(dimension);\n    const visited = new Array(dimension).fill(false);\n    for (let i = 0; i < dimension; ++i) {\n        adj[i] = [];\n    }\n    for (const l of list) {\n        adj[l[0]].push(l[1]);\n    }\n    const toVisit = new Float64Array(dimension);\n    let eol = 0;\n    let ptr = 0;\n    for (let i = 0; i < dimension; ++i) {\n        if (visited[i]) {\n            continue;\n        }\n        toVisit[eol++] = i;\n        visited[i] = true;\n        while (ptr < eol) {\n            const v = toVisit[ptr++];\n            const nbhd = Float64Array.from(adj[v]);\n            nbhd.sort();\n            for (const u of nbhd) {\n                if (visited[u]) {\n                    continue;\n                }\n                visited[u] = true;\n                toVisit[eol++] = u;\n            }\n        }\n    }\n    const result = new Float64Array(dimension);\n    for (let i = 0; i < dimension; ++i) {\n        result[toVisit[i]] = i;\n    }\n    return result;\n}\n//# sourceMappingURL=matrixCuthillMckee.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Get min and max Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Verify that `data` is an object of x,y arrays.\n * Throws an error if it's not.\n * @param data - data to check.\n * @param options - options.\n * @param options.minLength - minimum required length.\n */\nexport function xyCheck(data, options = {}) {\n    const { minLength } = options;\n    if (data === null ||\n        typeof data !== 'object' ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.x) ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.y)) {\n        throw new Error('data must be an object of x and y arrays');\n    }\n    // @ts-expect-error Typechecking\n    if (data.x.length !== data.y.length) {\n        throw new Error('the x and y arrays must have the same length');\n    }\n    // @ts-expect-error Typechecking\n    if (minLength && data.x.length < minLength) {\n        throw new Error(`data.x must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyCheck.js.map","import { xIsMonotonic } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Filters x,y values to allow strictly growing values in x-axis.\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @returns filtered data with strictly increasing x values.\n */\nexport function xyEnsureGrowingX(data) {\n    xyCheck(data);\n    if (xIsMonotonic(data.x) === 1)\n        return data;\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    let prevX = Number.NEGATIVE_INFINITY;\n    let currentIndex = 0;\n    for (let index = 0; index < x.length; index++) {\n        if (prevX < x[index]) {\n            if (currentIndex < index) {\n                x[currentIndex] = x[index];\n                y[currentIndex] = y[index];\n            }\n            currentIndex++;\n            prevX = x[index];\n        }\n    }\n    x.length = currentIndex;\n    y.length = currentIndex;\n    return { x, y };\n}\n//# sourceMappingURL=xyEnsureGrowingX.js.map","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n * - deal with exclusions zones\n * - if no zones is specified add one between -Infinity and +Infinity\n * @param zones - array of zones\n * @param options - options\n * @returns array of zones\n */\nexport function zonesNormalize(zones = [], options = {}) {\n    const { exclusions = [] } = options;\n    let { from = Number.NEGATIVE_INFINITY, to = Number.POSITIVE_INFINITY } = options;\n    if (from > to)\n        [from, to] = [to, from];\n    zones = zones.map((zone) => zone.from > zone.to ? { from: zone.to, to: zone.from } : { ...zone });\n    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    const beforeExclusionsZones = [currentZone];\n    for (let i = 1; i < zones.length; i++) {\n        const zone = zones[i];\n        if (zone.from <= currentZone.to) {\n            if (currentZone.to < zone.to) {\n                currentZone.to = zone.to;\n            }\n        }\n        else {\n            currentZone = zone;\n            beforeExclusionsZones.push(currentZone);\n        }\n    }\n    if (exclusions.length === 0)\n        return beforeExclusionsZones;\n    const normalizedExclusions = zonesNormalize(exclusions);\n    let currentExclusionIndex = 0;\n    const results = [];\n    for (let zoneIndex = 0; zoneIndex < beforeExclusionsZones.length; zoneIndex++) {\n        const zone = beforeExclusionsZones[zoneIndex];\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        while (currentExclusionIndex < normalizedExclusions.length &&\n            normalizedExclusions[currentExclusionIndex].to <= zone.from) {\n            currentExclusionIndex++;\n        }\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        if (zone.to < normalizedExclusions[currentExclusionIndex].from) {\n            // no problems, not yet in exclusion\n            results.push(zone);\n            continue;\n        }\n        if (normalizedExclusions[currentExclusionIndex].to >= zone.to) {\n            // could be totally excluded\n            if (normalizedExclusions[currentExclusionIndex].from <= zone.from) {\n                continue;\n            }\n            results.push({\n                from: normalizedExclusions[currentExclusionIndex].to,\n                to: zone.to,\n            });\n        }\n        // we cut in the middle, we need to create more zones, annoying !\n        if (normalizedExclusions[currentExclusionIndex].from > zone.from) {\n            results.push({\n                from: zone.from,\n                to: normalizedExclusions[currentExclusionIndex].from,\n            });\n        }\n        zone.from = normalizedExclusions[currentExclusionIndex].to;\n        zoneIndex--;\n    }\n    return results;\n}\n//# sourceMappingURL=zonesNormalize.js.map","import { zonesNormalize } from \"./zonesNormalize.js\";\n/**\n * Add the number of points per zone to reach a specified total\n * @param zones - array of zones\n * @param numberOfPoints - total number of points to distribute between zones\n * @param options - options\n * @returns array of zones with points\n */\nexport function zonesWithPoints(zones = [], \n/**\n * total number of points to distribute between zones\n * @default 10\n */\nnumberOfPoints = 10, options = {}) {\n    if (zones.length === 0)\n        return [];\n    const normalizedZones = zonesNormalize(zones, options);\n    const zonesWithNumberOfPoints = [];\n    const totalSize = normalizedZones.reduce((previous, current) => {\n        return previous + (current.to - current.from);\n    }, 0);\n    const unitsPerPoint = totalSize / numberOfPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < normalizedZones.length - 1; i++) {\n        const tempZone = normalizedZones[i];\n        const tempZoneNumberOfPoints = Math.min(Math.round((tempZone.to - tempZone.from) / unitsPerPoint), numberOfPoints - currentTotal);\n        zonesWithNumberOfPoints.push({\n            ...tempZone,\n            numberOfPoints: tempZoneNumberOfPoints,\n        });\n        currentTotal += tempZoneNumberOfPoints;\n    }\n    zonesWithNumberOfPoints.push({\n        ...normalizedZones.at(-1),\n        numberOfPoints: numberOfPoints - currentTotal,\n    });\n    return zonesWithNumberOfPoints;\n}\n//# sourceMappingURL=zonesWithPoints.js.map","/**\n * Function that retrieves the getEquallySpacedData with the variant \"slot\".\n * @param x - x coordinates.\n * @param y - y coordinates.\n * @param from - start of the output x range.\n * @param to - end of the output x range.\n * @param numberOfPoints - number of output points.\n * @returns array of y values equally spaced with the variant \"slot\".\n */\nexport default function equallySpacedSlot(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    if (xLength < 2) {\n        return Float64Array.from(x);\n    }\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    const lastStep = x.at(-1) - x.at(-2);\n    const start = from - halfStep;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    // Init main variables\n    let min = start;\n    let max = start + step;\n    let previousX = -Number.MAX_VALUE;\n    let previousY = 0;\n    let nextX = x[0];\n    let nextY = y[0];\n    let frontOutsideSpectra = 0;\n    let backOutsideSpectra = true;\n    let currentValue = 0;\n    // for slot algorithm\n    let currentPoints = 0;\n    let i = 1; // index of input\n    let j = 0; // index of output\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        while (previousX - max > 0) {\n            // no overlap with original point, just consume current value\n            if (backOutsideSpectra) {\n                currentPoints++;\n                backOutsideSpectra = false;\n            }\n            output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n            j++;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            currentValue = 0;\n            currentPoints = 0;\n        }\n        if (previousX > min) {\n            currentValue += previousY;\n            currentPoints++;\n        }\n        if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n            currentPoints--;\n        }\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else {\n            nextX += lastStep;\n            nextY = 0;\n            frontOutsideSpectra++;\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=equallySpacedSlot.js.map","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param x0 - first x coordinate.\n * @param x1 - second x coordinate.\n * @param slope - slope of the line.\n * @param intercept - y-intercept of the line.\n * @returns integral value.\n */\nexport default function integral(\n/** first coordinate of point */\nx0, \n/** second coordinate of point */\nx1, \n/** slope of the line */\nslope, \n/** intercept of the line on the y axis */\nintercept) {\n    return (0.5 * slope * x1 * x1 +\n        intercept * x1 -\n        (0.5 * slope * x0 * x0 + intercept * x0));\n}\n//# sourceMappingURL=integral.js.map","import integral from \"./integral.js\";\n/**\n * Function that retrieves the getEquallySpacedData with the variant \"smooth\".\n * @param x - x coordinates.\n * @param y - y coordinates.\n * @param from - start of the output x range.\n * @param to - end of the output x range.\n * @param numberOfPoints - number of output points.\n * @returns array of y values equally spaced with the variant \"smooth\".\n */\nexport default function equallySpacedSmooth(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    const initialOriginalStep = x[1] - x[0];\n    const lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n    // Init main variables\n    let min = from - halfStep;\n    let max = from + halfStep;\n    let previousX = Number.MIN_SAFE_INTEGER;\n    let previousY = 0;\n    let nextX = x[0] - initialOriginalStep;\n    let nextY = 0;\n    let currentValue = 0;\n    let slope = 0;\n    let intercept = 0;\n    let sumAtMin = 0;\n    let sumAtMax = 0;\n    let i = 0; // index of input\n    let j = 0; // index of output\n    let add = 0;\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        if (previousX <= min && min <= nextX) {\n            add = integral(0, min - previousX, slope, previousY);\n            sumAtMin = currentValue + add;\n        }\n        while (nextX - max >= 0) {\n            // no overlap with original point, just consume current value\n            add = integral(0, max - previousX, slope, previousY);\n            sumAtMax = currentValue + add;\n            output[j++] = (sumAtMax - sumAtMin) / step;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            sumAtMin = sumAtMax;\n        }\n        currentValue += integral(previousX, nextX, slope, intercept);\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else if (i === xLength) {\n            nextX += lastOriginalStep;\n            nextY = 0;\n        }\n        slope = getSlope(previousX, previousY, nextX, nextY);\n        intercept = -slope * previousX + previousY;\n    }\n    return output;\n}\nfunction getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n}\n//# sourceMappingURL=equallySpacedSmooth.js.map","import { createFromToArray } from \"../utils/index.js\";\nimport { zonesNormalize, zonesWithPoints } from \"../zones/index.js\";\nimport equallySpacedSlot from \"./utils/equallySpacedSlot.js\";\nimport equallySpacedSmooth from \"./utils/equallySpacedSmooth.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Resample a spectrum to equally spaced x points.\n * When `exclusions` are provided they take precedence and `zones` is ignored.\n * @param data - object containing x and y arrays\n * @param options - options\n * @returns resampled spectrum with equally spaced x values\n */\nexport function xyEquallySpaced(data, options = {}) {\n    const { x, y } = data;\n    const xLength = x.length;\n    const { from = x[0], to = x[xLength - 1], variant = 'smooth', numberOfPoints = 100, exclusions = [], zones = [{ from, to }], } = options;\n    if (from > to) {\n        throw new RangeError('from should be larger than to');\n    }\n    xyCheck(data);\n    if (numberOfPoints < 2) {\n        throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n    }\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    const zonesWithPointsRes = zonesWithPoints(normalizedZones, numberOfPoints, {\n        from,\n        to,\n    }).filter((zone) => zone.numberOfPoints);\n    let xResult = [];\n    let yResult = [];\n    for (const zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        const zoneResult = processZone(Array.from(x), Array.from(y), zone.from, zone.to, zone.numberOfPoints, variant);\n        xResult = xResult.concat(zoneResult.x);\n        yResult = yResult.concat(zoneResult.y);\n    }\n    return { x: xResult, y: yResult };\n}\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n    if (numberOfPoints < 1) {\n        throw new RangeError('the number of points must be at least 1');\n    }\n    const output = variant === 'slot'\n        ? Array.from(equallySpacedSlot(x, y, from, to, numberOfPoints))\n        : Array.from(equallySpacedSmooth(x, y, from, to, numberOfPoints));\n    return {\n        x: Array.from(createFromToArray({\n            from,\n            to,\n            length: numberOfPoints,\n        })),\n        y: output,\n    };\n}\n//# sourceMappingURL=xyEquallySpaced.js.map","import { zonesNormalize } from \"../zones/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns filtered array\n */\nexport function xyFilterX(data, options = {}) {\n    const { x, y } = data;\n    if (x.length === 0) {\n        return {\n            x: Array.from(x),\n            y: Array.from(y),\n        };\n    }\n    const { from = x[0], to = x.at(-1), zones = [{ from, to }], exclusions = [], } = options;\n    // @ts-expect-error -- x.at(-1) returns number | undefined but array is guaranteed non-empty here\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    let currentZoneIndex = 0;\n    const newX = [];\n    const newY = [];\n    let position = 0;\n    while (position < x.length) {\n        if (x[position] <= normalizedZones[currentZoneIndex].to &&\n            x[position] >= normalizedZones[currentZoneIndex].from) {\n            newX.push(x[position]);\n            newY.push(y[position]);\n        }\n        else if (x[position] > normalizedZones[currentZoneIndex].to) {\n            currentZoneIndex++;\n            if (!normalizedZones[currentZoneIndex])\n                break;\n        }\n        position++;\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterX.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Filter out all the points for which x <= 0. Useful to display log scale data\n * @param data - data\n * @returns an object with the filtered data.\n */\nexport function xyFilterXPositive(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    if (x === undefined || y === undefined) {\n        return { x: newX, y: newY };\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (x[i] > 0) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyFilterXPositive.js.map","/**\n * Order object of array, x has to be monotone. Ensure x is growing\n * @param data - object of kind {x:[], y:[]}.\n * @returns data with x in ascending order (reversed in-place if descending).\n */\nexport function xyGrowingX(data) {\n    const { x, y } = data;\n    if (x.length !== y.length) {\n        throw new TypeError('length of x and y must be identical');\n    }\n    if (x.length < 2 || x[0] < x.at(-1))\n        return data;\n    return {\n        x: x.toReversed(),\n        y: y.toReversed(),\n    };\n}\n//# sourceMappingURL=xyGrowingX.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Interpolate y values at target x positions using linear interpolation.\n * This is useful for upsampling or resampling data to specific x positions.\n * Both the input data and target x values must be sorted in ascending order.\n * Uses a two-pointer approach with O(n + m) complexity.\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param xTarget - target x positions where y values should be interpolated.\n * @returns interpolated y values at target x positions.\n */\nexport function xyInterpolateLinear(data, xTarget) {\n    xyCheck(data);\n    const { x, y } = data;\n    if (x.length === 0) {\n        return new Float64Array(0);\n    }\n    const result = new Float64Array(xTarget.length);\n    let sparseIndex = 0;\n    for (let i = 0; i < xTarget.length; i++) {\n        const targetX = xTarget[i];\n        // Move sparse index forward while we can\n        while (sparseIndex < x.length - 1 && x[sparseIndex + 1] < targetX) {\n            sparseIndex++;\n        }\n        // Handle edge cases\n        if (sparseIndex === 0 && targetX <= x[0]) {\n            // Before first point\n            if (x.length === 1) {\n                result[i] = y[0];\n            }\n            else {\n                // Extrapolate using first two points\n                const t = (targetX - x[0]) / (x[1] - x[0]);\n                result[i] = y[0] * (1 - t) + y[1] * t;\n            }\n        }\n        else if (sparseIndex >= x.length - 1) {\n            // After last point\n            result[i] = y[x.length - 1];\n        }\n        else {\n            // Normal interpolation between two points\n            const leftIdx = sparseIndex;\n            const rightIdx = sparseIndex + 1;\n            const t = (targetX - x[leftIdx]) / (x[rightIdx] - x[leftIdx]);\n            result[i] = y[leftIdx] * (1 - t) + y[rightIdx] * t;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyInterpolateLinear.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest maximum going up hill\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns an object with the x/y value.\n */\nexport function xyMaxClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let xyMaxY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] > xyMaxY) {\n            currentIndex--;\n        }\n        else if (currentIndex < x.length - 1 && y[currentIndex + 1] > xyMaxY) {\n            currentIndex++;\n        }\n        xyMaxY = y[currentIndex];\n    }\n    return {\n        x: x[currentIndex],\n        y: y[currentIndex],\n        index: currentIndex,\n    };\n}\n//# sourceMappingURL=xyMaxClosestYPoint.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest minimum going down hill\n * @param data - object that contains property x (an ordered increasing array) and y (an array).\n * @param options - options.\n * @returns an object with the x/y value.\n */\nexport function xyMinClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let minY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] < minY) {\n            currentIndex--;\n        }\n        else if (currentIndex < x.length - 1 && y[currentIndex + 1] < minY) {\n            currentIndex++;\n        }\n        minY = y[currentIndex];\n    }\n    return {\n        x: x[currentIndex],\n        y: y[currentIndex],\n        index: currentIndex,\n    };\n}\n//# sourceMappingURL=xyMinClosestYPoint.js.map","import { xGetSortOrder, xIsMonotonic } from \"../x/index.js\";\nimport { RADIX_ORDER_MIN_LENGTH } from \"../x/utils/radixSortOrder.js\";\n/**\n * This function performs a quick sort of the x array while transforming the y array to preserve the coordinates.\n * @param data - object that contains property x (Array) and y (Array).\n * @returns the points, ascending by x.\n */\nexport function xySortX(data) {\n    const { x, y } = data;\n    if (xIsMonotonic(x) && x.length > 1) {\n        const floatX = Float64Array.from(x);\n        const floatY = Float64Array.from(y);\n        if (floatX.at(-1) < floatX[0]) {\n            floatX.reverse();\n            floatY.reverse();\n        }\n        return {\n            x: floatX,\n            y: floatY,\n        };\n    }\n    const response = {\n        x: new Float64Array(x.length),\n        y: new Float64Array(y.length),\n    };\n    if (x.length >= RADIX_ORDER_MIN_LENGTH) {\n        const order = xGetSortOrder(x);\n        for (let i = 0; i < order.length; i++) {\n            const at = order[i];\n            response.x[i] = x[at];\n            response.y[i] = y[at];\n        }\n        return response;\n    }\n    const xyObject = Array.from(x, (val, index) => ({\n        x: val,\n        y: y[index],\n    }));\n    xyObject.sort((a, b) => a.x - b.x);\n    for (let i = 0; i < x.length; i++) {\n        response.x[i] = xyObject[i].x;\n        response.y[i] = xyObject[i].y;\n    }\n    return response;\n}\n//# sourceMappingURL=xySortX.js.map","import { xyCheck } from \"./xyCheck.js\";\nimport { xySortX } from \"./xySortX.js\";\n/**\n * Ensure x values are unique\n * @param data - object that contains property x (Array) and y (Array).\n * @param options - object containing a property algorithm (can be 'sum' or 'average', the latter being the default value), and a property isSorted (boolean indicating if the x-array is sorted).\n */\nexport function xyUniqueX(data, options = {}) {\n    xyCheck(data);\n    if (data.x.length === 0) {\n        return { x: [], y: [] };\n    }\n    const { algorithm = 'average', isSorted = true } = options;\n    if (!isSorted) {\n        data = xySortX(data);\n    }\n    switch (algorithm) {\n        case 'average':\n            return average(data);\n        case 'sum':\n            return sum(data);\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\n/**\n * Averages duplicate x values by averaging their y values.\n * @param data - input.\n * @returns result.\n */\nfunction average(data) {\n    const x = [];\n    const y = [];\n    let cumulativeY = data.y[0];\n    let divider = 1;\n    for (let i = 1; i < data.x.length; i++) {\n        if (!(data.x[i] === data.x[i - 1])) {\n            x.push(data.x[i - 1]);\n            y.push(cumulativeY / divider);\n            cumulativeY = 0;\n            divider = 0;\n        }\n        cumulativeY += data.y[i];\n        divider++;\n    }\n    x.push(data.x.at(-1));\n    y.push(cumulativeY / divider);\n    return { x, y };\n}\n/**\n * Merges duplicate x values by summing their y values.\n * @param data - input.\n * @returns result.\n */\nfunction sum(data) {\n    const x = [];\n    const y = [];\n    let cumulativeY = data.y[0];\n    for (let i = 1; i < data.x.length; i++) {\n        if (!(data.x[i] === data.x[i - 1])) {\n            x.push(data.x[i - 1]);\n            y.push(cumulativeY);\n            cumulativeY = 0;\n        }\n        cumulativeY += data.y[i];\n    }\n    x.push(data.x.at(-1));\n    y.push(cumulativeY);\n    return { x, y };\n}\n//# sourceMappingURL=xyUniqueX.js.map","export function addStyle(serie, spectrum, options = {}) {\n    let { color = '#A9A9A9' } = options;\n    const { opacity = 1, lineWidth = 1 } = options;\n    if (color.match(/#[\\da-f]{6}$/i)) {\n        color = (color + ((opacity * 255) >> 0).toString(16)).toUpperCase();\n    }\n    else {\n        color = color.replace(/rgb ?\\((.*)\\)/, `rgba($1,${opacity})`);\n    }\n    serie.style = [\n        {\n            name: 'unselected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth,\n                    dash: 1,\n                },\n            },\n        },\n        {\n            name: 'selected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth + 2,\n                    dash: 1,\n                },\n            },\n        },\n    ];\n    serie.name = spectrum.label || spectrum.id;\n}\n//# sourceMappingURL=addStyle.js.map","export const COLORS = [\n    '#FFB300',\n    '#803E75',\n    '#FF6800',\n    '#A6BDD7',\n    '#C10020',\n    '#CEA262',\n    '#817066',\n    '#007D34',\n    '#F6768E',\n    '#00538A',\n    '#FF7A5C',\n    '#53377A',\n    '#FF8E00',\n    '#B32851',\n    '#F4C800',\n    '#7F180D',\n    '#93AA00',\n    '#593315',\n    '#F13A13',\n    '#232C16',\n];\n//# sourceMappingURL=colors.js.map","import { xyFilterXPositive } from 'ml-spectra-processing';\nimport { addStyle } from './addStyle.js';\nimport { COLORS } from './colors.js';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param analyses\n * @param options\n */\nexport function getJSGraph(analyses, options = {}) {\n    const { colors = COLORS, opacities = [1], linesWidth = [1], selector = {}, normalization, xAxis = {}, yAxis = {}, } = options;\n    const series = [];\n    let xLabel = xAxis.label;\n    let yLabel = yAxis.label;\n    let xUnits = xAxis.units;\n    let yUnits = yAxis.units;\n    for (let i = 0; i < analyses.length; i++) {\n        const analysis = analyses[i];\n        const spectra = analysis.getNormalizedSpectra({\n            selector,\n            normalization,\n        });\n        if (spectra.length === 0)\n            continue;\n        const firstSpectrum = spectra[0];\n        // todo: if many spectra are available and not xUnits / yUnits are specified we should ensure that all the spectra are compatible\n        if (!xLabel)\n            xLabel = firstSpectrum.variables.x.label;\n        if (!yLabel)\n            yLabel = firstSpectrum.variables.y.label;\n        if (!xUnits)\n            xUnits = firstSpectrum.variables.x.units;\n        if (!yUnits)\n            yUnits = firstSpectrum.variables.y.units;\n        for (const spectrum of spectra) {\n            const serie = {};\n            addStyle(serie, analysis, {\n                color: colors[i % colors.length],\n                opacity: opacities[i % opacities.length],\n                lineWidth: linesWidth[i % linesWidth.length],\n            });\n            serie.data = {\n                x: spectrum.variables.x.data,\n                y: spectrum.variables.y.data,\n            };\n            serie.id = spectrum.id;\n            if (xAxis.logScale) {\n                serie.data = xyFilterXPositive(serie.data);\n            }\n            series.push(serie);\n        }\n    }\n    return {\n        axes: {\n            x: {\n                label: xLabel,\n                unit: xUnits,\n                unitWrapperBefore: '(',\n                unitWrapperAfter: ')',\n                flipped: false,\n                display: true,\n                ...xAxis,\n            },\n            y: {\n                label: yLabel,\n                unit: yUnits,\n                unitWrapperBefore: '(',\n                unitWrapperAfter: ')',\n                flipped: false,\n                display: true,\n                ...yAxis,\n            },\n        },\n        series,\n    };\n}\n//# sourceMappingURL=getJSGraph.js.map","const defaultBoundary = { y: { min: '0px', max: '2000px' } };\nexport function getNormalizationAnnotations(filter = {}, boundary = defaultBoundary) {\n    const { from, to } = filter;\n    let { exclusions = [] } = filter;\n    let annotations = [];\n    exclusions = exclusions.filter((exclusion) => !exclusion.ignore);\n    annotations = exclusions.map((exclusion) => {\n        const annotation = {\n            type: 'rect',\n            position: [\n                { x: exclusion.from, y: boundary.y.min },\n                { x: exclusion.to, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        };\n        return annotation;\n    });\n    if (from !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: Number.MIN_SAFE_INTEGER, y: boundary.y.min },\n                { x: from, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    if (to !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: to, y: boundary.y.min },\n                { x: Number.MAX_SAFE_INTEGER, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    return annotations;\n}\n//# sourceMappingURL=getNormalizationAnnotations.js.map","import { xMean } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n */\nexport function centerMean(data) {\n    const { y } = data;\n    const mean = xMean(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= mean;\n    }\n    return { data };\n}\n//# sourceMappingURL=centerMean.js.map","import { xMedian } from 'ml-spectra-processing';\n/**\n * Center the median\n * @param data\n */\nexport function centerMedian(data) {\n    const { y } = data;\n    const median = xMedian(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= median;\n    }\n    return { data };\n}\n//# sourceMappingURL=centerMedian.js.map","import { xGetFromToIndex } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function fromTo(data, options = {}) {\n    const { fromIndex, toIndex } = xGetFromToIndex(data.x, options);\n    return {\n        data: {\n            x: data.x.subarray(fromIndex, toIndex + 1),\n            y: data.y.subarray(fromIndex, toIndex + 1),\n        },\n    };\n}\n//# sourceMappingURL=fromTo.js.map","import { xNormed } from 'ml-spectra-processing';\n/**\n * Norm the Y values\n * @param data\n * @param options\n */\nexport function normed(data, options = {}) {\n    xNormed(data.y, { ...options, output: data.y });\n    return { data };\n}\n//# sourceMappingURL=normed.js.map","import { xStandardDeviation } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n */\nexport function divideBySD(data) {\n    const { y } = data;\n    const sd = xStandardDeviation(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] /= sd;\n    }\n    return { data };\n}\n//# sourceMappingURL=divideBySD.js.map","import { xRescale } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n * @param options\n */\nexport function rescale(data, options = {}) {\n    xRescale(data.y, { ...options, output: data.y });\n    return { data };\n}\n//# sourceMappingURL=rescale.js.map","import { xParetoNormalization } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n */\nexport function paretoNormalization(data) {\n    return {\n        data: {\n            x: data.x,\n            y: xParetoNormalization(data.y),\n        },\n    };\n}\n//# sourceMappingURL=paretoNormalization.js.map","import { matrixCuthillMckee } from 'ml-spectra-processing';\n/**\n * Updates the system matrix with new weights and computes the weighted right-hand side vector.\n * @param matrix - The lower triangular non-zeros matrix in triplet format.\n * @param y - The original data vector.\n * @param weights - The weights vector.\n * @returns A tuple of the updated matrix and the weighted right-hand side vector.\n */\nexport function updateSystem(matrix, y, weights) {\n    const nbPoints = y.length;\n    const l = nbPoints - 1;\n    const newMatrix = new Array(matrix.length);\n    const newVector = new Float64Array(nbPoints);\n    for (let i = 0; i < l; i++) {\n        const w = weights[i];\n        const diag = i * 2;\n        const next = diag + 1;\n        newMatrix[diag] = matrix[diag].slice();\n        newMatrix[next] = matrix[next].slice();\n        if (w === 0) {\n            newVector[i] = 0;\n        }\n        else {\n            newVector[i] = y[i] * w;\n            newMatrix[diag][2] += w;\n        }\n    }\n    newVector[l] = y[l] * weights[l];\n    newMatrix[l * 2] = matrix[l * 2].slice();\n    newMatrix[l * 2][2] += weights[l];\n    return [newMatrix, newVector];\n}\n/**\n * Constructs the delta matrix and applies Cuthill-McKee permutation.\n * @param nbPoints - Number of data points.\n * @param lambda - Smoothing parameter.\n * @returns An object containing the lower triangular non-zeros matrix and the permutation array.\n */\nexport function getDeltaMatrix(nbPoints, lambda) {\n    const matrix = [];\n    const last = nbPoints - 1;\n    for (let i = 0; i < last; i++) {\n        matrix.push([i, i, lambda * 2], [i + 1, i, -1 * lambda]);\n    }\n    matrix[0][2] = lambda;\n    matrix.push([last, last, lambda]);\n    return {\n        lowerTriangularNonZeros: matrix,\n        permutationEncodedArray: matrixCuthillMckee(matrix, nbPoints),\n    };\n}\n//# sourceMappingURL=utils.js.map","import { matrixCholeskySolver, xAbsoluteSum, xBinning, xFindClosestIndex, xNoiseSanPlot, xSubtract, xyInterpolateLinear, } from 'ml-spectra-processing';\nimport { getDeltaMatrix, updateSystem } from \"./utils.js\";\n/**\n * Fit the baseline drift by iteratively changing weights of sum square error between the fitted baseline and original signals,\n * for further information about the parameters you can get the {@link https://github.com/zmzhang/airPLS/blob/main/airPLS_manuscript.pdf paper of airPLS}.\n * @param x - X axis data useful when control points or zones are submitted.\n * @param y - Original data.\n * @param options - Options object.\n * @returns An object containing the corrected data, baseline, iteration count, and error.\n */\nexport default function airPLS(x, y, options = {}) {\n    const { xWork, yWork, optionsWork, shouldDownsample } = getDownSampleData(x, y, options);\n    const { weights, controlPoints } = getControlPoints(xWork, yWork, optionsWork);\n    const { maxIterations = 100, lambda = 10, tolerance = 0.001 } = optionsWork;\n    let baseline = [];\n    let iteration;\n    let sumNegDifferences = Number.MAX_SAFE_INTEGER;\n    const corrected = Float64Array.from(yWork);\n    const stopCriterion = getStopCriterion(yWork, tolerance);\n    const { length } = yWork;\n    const { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(length, lambda);\n    let threshold = 1;\n    const l = length - 1;\n    let prevNegSum = Number.MAX_SAFE_INTEGER;\n    for (iteration = 0; iteration < maxIterations && Math.abs(sumNegDifferences) > stopCriterion; iteration++) {\n        const [leftHandSide, rightHandSide] = updateSystem(lowerTriangularNonZeros, yWork, weights);\n        const cho = matrixCholeskySolver(leftHandSide, length, permutationEncodedArray);\n        if (cho === null) {\n            throw new Error('Cholesky decomposition failed');\n        }\n        baseline = cho(rightHandSide);\n        sumNegDifferences = applyCorrection(yWork, baseline, corrected);\n        if (iteration === 1) {\n            const { positive } = xNoiseSanPlot(corrected);\n            threshold = positive;\n        }\n        else {\n            const absChange = Math.abs(prevNegSum / sumNegDifferences);\n            if (absChange < 1.01 && absChange > 0.99) {\n                break;\n            }\n        }\n        prevNegSum = sumNegDifferences + 0;\n        for (let i = 1; i < l; i++) {\n            const diff = Math.abs(corrected[i]);\n            if (controlPoints[i] < 1 && diff > threshold * 2) {\n                weights[i] = 0;\n            }\n            else {\n                weights[i] = Math.exp(-((diff / threshold) ** 2));\n            }\n        }\n        weights[0] = 1;\n        weights[l] = 1;\n    }\n    // Interpolate results back to original resolution if downsampling was applied\n    let finalBaseline = baseline;\n    let finalCorrected = corrected;\n    if (shouldDownsample) {\n        finalBaseline = xyInterpolateLinear({ x: xWork, y: baseline }, x);\n        finalCorrected = xSubtract(y, finalBaseline);\n    }\n    return {\n        corrected: finalCorrected,\n        baseline: finalBaseline,\n        iteration,\n        error: sumNegDifferences,\n    };\n}\nfunction applyCorrection(y, baseline, corrected) {\n    let sumNegDifferences = 0;\n    for (let i = 0; i < y.length; i++) {\n        const diff = y[i] - baseline[i];\n        if (diff < 0)\n            sumNegDifferences += diff;\n        corrected[i] = diff;\n    }\n    return sumNegDifferences;\n}\nfunction getDownSampleData(x, y, options = {}) {\n    const { autoDownsample = false, maxResolution = 5000, controlPoints, } = options;\n    const shouldDownsample = autoDownsample && y.length > maxResolution;\n    if (!shouldDownsample) {\n        return { xWork: x, yWork: y, optionsWork: options, shouldDownsample };\n    }\n    const binSize = getDownsampleFactor(y.length, maxResolution);\n    const xWork = xBinning(x, {\n        binSize,\n        keepFirstAndLast: true,\n    });\n    const yWork = xBinning(y, {\n        binSize,\n        keepFirstAndLast: true,\n    });\n    let optionsWork = options;\n    // Downsample controlPoints if provided, to match downsampled x and y\n    if (controlPoints) {\n        const downsampledControlPoints = new Int8Array(xWork.length);\n        for (let i = 0; i < x.length; i++) {\n            if (controlPoints[i] > 0) {\n                const closestIndex = xFindClosestIndex(xWork, x[i]);\n                downsampledControlPoints[closestIndex] = 1;\n            }\n        }\n        optionsWork = {\n            ...options,\n            controlPoints: downsampledControlPoints,\n        };\n    }\n    return { xWork, yWork, optionsWork, shouldDownsample };\n}\nfunction getStopCriterion(y, tolerance) {\n    const sum = xAbsoluteSum(y);\n    return tolerance * sum;\n}\nfunction getControlPoints(x, y, options = {}) {\n    const { length } = x;\n    const { controlPoints = Int8Array.from({ length }).fill(0) } = options;\n    const { zones = [], weights = Float64Array.from({ length }).fill(1) } = options;\n    if (x.length !== y.length) {\n        throw new RangeError('Y should match the length with X');\n    }\n    else if (controlPoints.length !== x.length) {\n        throw new RangeError('controlPoints should match the length with X');\n    }\n    else if (weights.length !== x.length) {\n        throw new RangeError('weights should match the length with X');\n    }\n    for (const range of zones) {\n        let indexFrom = xFindClosestIndex(x, range.from);\n        let indexTo = xFindClosestIndex(x, range.to);\n        if (indexFrom > indexTo)\n            [indexFrom, indexTo] = [indexTo, indexFrom];\n        for (let i = indexFrom; i < indexTo; i++) {\n            controlPoints[i] = 1;\n        }\n    }\n    return {\n        weights,\n        controlPoints,\n    };\n}\n/**\n * Calculate the downsampling factor to reduce data to target resolution.\n * @param originalLength - Original data length.\n * @param targetResolution - Target number of points.\n * @returns Downsampling factor.\n */\nfunction getDownsampleFactor(originalLength, targetResolution) {\n    return Math.max(1, Math.ceil(originalLength / targetResolution));\n}\n//# sourceMappingURL=index.js.map","import airpls from 'ml-airpls';\nimport { xSequentialFillFromTo } from 'ml-spectra-processing/x';\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 = xSequentialFillFromTo({\n      from: 0,\n      to: numberPoints - 1,\n      size: numberPoints,\n    });\n  }\n  let output = airpls(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { isAnyArray } from 'is-any-array';\n/**\n * Check that x and y are arrays with the same length.\n * @param x - first array\n * @param y - second array\n * @throws if x or y are not the same length, or if they are not arrays\n */\nexport function checkArrayLength(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y)) {\n        throw new TypeError('x and y must be arrays');\n    }\n    if (x.length !== y.length) {\n        throw new RangeError('x and y arrays must have the same length');\n    }\n}\n//# sourceMappingURL=checkArrayLength.js.map","import { isAnyArray } from 'is-any-array';\nimport { checkArrayLength } from './checkArrayLength';\nexport class BaseRegression {\n    constructor() {\n        if (new.target === BaseRegression) {\n            throw new Error('BaseRegression must be subclassed');\n        }\n    }\n    predict(x) {\n        if (typeof x === 'number') {\n            return this._predict(x);\n        }\n        else if (isAnyArray(x)) {\n            const y = [];\n            for (const xVal of x) {\n                y.push(this._predict(xVal));\n            }\n            return y;\n        }\n        else {\n            throw new TypeError('x must be a number or array');\n        }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _predict(x) {\n        throw new Error('_predict must be implemented');\n    }\n    train() {\n        // Do nothing for this package\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toString(precision) {\n        return '';\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toLaTeX(precision) {\n        return '';\n    }\n    /**\n     * Return the correlation coefficient of determination (r) and chi-square.\n     * @param x - explanatory variable\n     * @param y - response variable\n     * @return - Object with further statistics.\n     */\n    score(x, y) {\n        checkArrayLength(x, y);\n        const n = x.length;\n        const y2 = new Array(n);\n        for (let i = 0; i < n; i++) {\n            y2[i] = this._predict(x[i]);\n        }\n        let xSum = 0;\n        let ySum = 0;\n        let chi2 = 0;\n        let rmsd = 0;\n        let xSquared = 0;\n        let ySquared = 0;\n        let xY = 0;\n        for (let i = 0; i < n; i++) {\n            xSum += y2[i];\n            ySum += y[i];\n            xSquared += y2[i] * y2[i];\n            ySquared += y[i] * y[i];\n            xY += y2[i] * y[i];\n            if (y[i] !== 0) {\n                chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n            }\n            rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n        }\n        const r = (n * xY - xSum * ySum) /\n            Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n        return {\n            r,\n            r2: r * r,\n            chi2,\n            rmsd: Math.sqrt(rmsd / n),\n        };\n    }\n}\n//# sourceMappingURL=BaseRegression.js.map","/**\n * Cast `number` to string. Optionally `digits` specifies significant figures.\n * @param number\n * @param figures\n * @returns - A string representation of `number`.\n */\nexport function maybeToPrecision(number, figures) {\n    if (number < 0) {\n        number = 0 - number;\n        if (typeof figures === 'number') {\n            return `- ${number.toPrecision(figures)}`;\n        }\n        else {\n            return `- ${number.toString()}`;\n        }\n    }\n    else if (typeof figures === 'number') {\n        return number.toPrecision(figures);\n    }\n    else {\n        return number.toString();\n    }\n}\n//# sourceMappingURL=maybeToPrecision.js.map","import { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\nimport { BaseRegression, checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\nexport class PolynomialRegression extends BaseRegression {\n    degree;\n    powers;\n    coefficients;\n    /**\n     * Build a polynomial regression model from the given data set.\n     * @param x - independent or explanatory variable\n     * @param y - dependent or response variable\n     * @param degree - degree of the polynomial regression, or array of powers to be used. When degree is an array, intercept at zero is forced to false/ignored.\n     * @param options - regression options\n     * @example `new PolynomialRegression(x, y, 2)`, in this case, you can pass the option `interceptAtZero`, if you need it.\n     * @example `new PolynomialRegression(x, y, [1, 3, 5])`\n     * Each of the degrees corresponds to a column, so if you have them switched, just do:\n     * @example `new PolynomialRegression(x, y, [3, 1, 5])`\n     */\n    constructor(x, y, degree, options = {}) {\n        super();\n        // @ts-expect-error internal use only\n        if (x === true) {\n            // @ts-expect-error internal use only\n            this.degree = y.degree;\n            // @ts-expect-error internal use only\n            this.powers = y.powers;\n            // @ts-expect-error internal use only\n            this.coefficients = y.coefficients;\n        }\n        else {\n            checkArrayLength(x, y);\n            const result = regress(x, y, degree, options);\n            this.degree = result.degree;\n            this.powers = result.powers;\n            this.coefficients = result.coefficients;\n        }\n    }\n    _predict(x) {\n        const { coefficients, powers } = this;\n        let y = 0;\n        for (let k = 0; k < powers.length; k++) {\n            const coefficient = coefficients[k] ?? 0;\n            const power = powers[k] ?? 0;\n            y += coefficient * x ** power;\n        }\n        return y;\n    }\n    toJSON() {\n        return {\n            name: 'polynomialRegression',\n            degree: this.degree,\n            powers: this.powers,\n            coefficients: this.coefficients,\n        };\n    }\n    toString(precision) {\n        return this._toFormula(precision, false);\n    }\n    toLaTeX(precision) {\n        return this._toFormula(precision, true);\n    }\n    _toFormula(precision, isLaTeX) {\n        let sup = '^';\n        let closeSup = '';\n        let times = ' * ';\n        if (isLaTeX) {\n            sup = '^{';\n            closeSup = '}';\n            times = '';\n        }\n        let fn = '';\n        let str = '';\n        for (let k = 0; k < this.coefficients.length; k++) {\n            str = '';\n            const coefficient = this.coefficients[k] ?? 0;\n            const power = this.powers[k] ?? 0;\n            if (coefficient !== 0) {\n                if (power === 0) {\n                    str = maybeToPrecision(coefficient, precision);\n                }\n                else if (power === 1) {\n                    str = `${maybeToPrecision(coefficient, precision) + times}x`;\n                }\n                else {\n                    str = `${maybeToPrecision(coefficient, precision) + times}x${sup}${power}${closeSup}`;\n                }\n                if (coefficient > 0 && k !== this.coefficients.length - 1) {\n                    str = ` + ${str}`;\n                }\n                else if (k !== this.coefficients.length - 1) {\n                    str = ` ${str}`;\n                }\n            }\n            fn = str + fn;\n        }\n        if (fn.startsWith('+')) {\n            fn = fn.slice(1);\n        }\n        return `f(x) = ${fn}`;\n    }\n    static load(json) {\n        if (json.name !== 'polynomialRegression') {\n            throw new TypeError('not a polynomial regression model');\n        }\n        // @ts-expect-error internal use only\n        return new PolynomialRegression(true, json);\n    }\n}\n/**\n * Perform a polynomial regression on the given data set.\n * This is an internal function.\n * @param x - independent or explanatory variable\n * @param y - dependent or response variable\n * @param degree - degree of the polynomial regression\n * @param options - regression options\n * @returns degree, powers and coefficients of the fitted polynomial\n */\nfunction regress(x, y, degree, options = {}) {\n    const n = x.length;\n    let { interceptAtZero = false } = options;\n    let powers = [];\n    if (Array.isArray(degree)) {\n        powers = degree;\n        interceptAtZero = false;\n    }\n    else if (typeof degree === 'number') {\n        if (interceptAtZero) {\n            powers = new Array(degree);\n            for (let k = 0; k < degree; k++) {\n                powers[k] = k + 1;\n            }\n        }\n        else {\n            powers = new Array(degree + 1);\n            for (let k = 0; k <= degree; k++) {\n                powers[k] = k;\n            }\n        }\n    }\n    const nCoefficients = powers.length;\n    const F = new Matrix(n, nCoefficients);\n    const Y = new Matrix([Array.from(y)]);\n    for (let k = 0; k < nCoefficients; k++) {\n        const power = powers[k] ?? 0;\n        for (let i = 0; i < n; i++) {\n            if (power === 0) {\n                F.set(i, k, 1);\n            }\n            else {\n                F.set(i, k, (x[i] ?? 0) ** power);\n            }\n        }\n    }\n    const FT = new MatrixTransposeView(F);\n    const A = FT.mmul(F);\n    const B = FT.mmul(new MatrixTransposeView(Y));\n    return {\n        coefficients: solve(A, B).to1DArray(),\n        degree: Math.max(...powers),\n        powers,\n    };\n}\n//# sourceMappingURL=index.js.map","import { PolynomialRegression } from 'ml-regression-polynomial';\n\n/**\n * Iterative regression-based baseline correction\n * @param {Array<number>} x - Independent axis variable\n * @param {Array<number>} y - Dependent axis variable\n * @param {object} [options] - Options object\n * @param {number} [options.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regressionOptions] - Options for regressionFunction\n * @param {number} [options.tolerance = 0.001] - Convergence error tolerance\n * @return {{corrected: Array<number>, delta: number, iteration: number, baseline: Array<number>}}\n */\nexport function baselineCorrectionRegression(x, y, options = {}) {\n  let {\n    maxIterations = 100,\n    Regression = PolynomialRegression,\n    regressionOptions,\n    tolerance = 0.001,\n  } = options;\n\n  if (!regressionOptions && Regression === PolynomialRegression) {\n    regressionOptions = 3;\n  }\n\n  let baseline = y.slice();\n  let fitting = y.slice();\n  let oldFitting = y;\n  let iteration = 0;\n  let delta;\n  let regression;\n  while (iteration < maxIterations) {\n    // Calculate the fitting result\n    regression = new Regression(x, baseline, regressionOptions);\n\n    delta = 0;\n    for (let i = 0; i < baseline.length; i++) {\n      fitting[i] = regression.predict(x[i]);\n      if (baseline[i] > fitting[i]) {\n        baseline[i] = fitting[i];\n      }\n\n      delta += Math.abs((fitting[i] - oldFitting[i]) / oldFitting[i]);\n    }\n\n    // Stop criterion\n    if (delta < tolerance) {\n      break;\n    } else {\n      oldFitting = fitting.slice();\n      iteration++;\n    }\n  }\n\n  // removes baseline\n  let corrected = new Array(baseline.length);\n  for (let j = 0; j < baseline.length; j++) {\n    corrected[j] = y[j] - baseline[j];\n  }\n\n  return {\n    corrected,\n    delta,\n    iteration,\n    baseline,\n    regression,\n  };\n}\n","import { baselineCorrectionRegression } from 'ml-baseline-correction-regression';\nimport { xSequentialFillFromTo } from 'ml-spectra-processing/x';\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 = xSequentialFillFromTo({\n      from: 0,\n      to: numberPoints - 1,\n      size: numberPoints,\n    });\n  }\n\n  let output = baselineCorrectionRegression(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { xRollingAverage } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingAverageBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = { ...defaults, ...options };\n  let baseline = xRollingAverage(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","import { isAnyArray } from 'is-any-array';\nimport { xMaxValue, xMean, xMinValue } from 'ml-spectra-processing';\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 * @param spectrum - Input spectrum.\n * @param options - Rolling ball options.\n * @returns The computed baseline.\n */\nexport function rollingBall(spectrum, options = {}) {\n    if (!isAnyArray(spectrum)) {\n        throw new Error('Spectrum must be an array');\n    }\n    if (spectrum.length === 0) {\n        throw new TypeError('Spectrum must not be empty');\n    }\n    const numberPoints = spectrum.length;\n    const maxima = new Float64Array(numberPoints);\n    const minima = new Float64Array(numberPoints);\n    const baseline = new Float64Array(numberPoints);\n    // windowM 4 percent of spectrum length\n    // windowS 8 percent of spectrum length\n    const { windowM = Math.round(numberPoints * 0.04), windowS = Math.round(numberPoints * 0.08), } = options;\n    // fi(1) in original paper\n    for (let i = 0; i < spectrum.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, spectrum.length);\n        minima[i] = xMinValue(spectrum, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    // fi in original paper\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, minima.length);\n        maxima[i] = xMaxValue(minima, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowS);\n        const windowRight = Math.min(i + windowS + 1, maxima.length);\n        baseline[i] = xMean(maxima.subarray(windowLeft, windowRight));\n    }\n    return baseline;\n}\n//# sourceMappingURL=rollingBall.js.map","import { rollingBall } from 'ml-rolling-ball-baseline';\n\n/**\n * Rolling ball baseline correction algorithm.\n * From the abstract of (1):\n * \"This algorithm behaves equivalently to traditional polynomial backgrounds in simple spectra,\n * [...] and is considerably more robust for multiple overlapping peaks, rapidly varying background [...]\n *\n * The baseline is the trace one gets by rolling a ball below a spectrum. Algorithm has three steps:\n * Finding the minima in each window, find maxima among minima and then smooth over them by averaging.\n *\n * Algorithm described in (1), but in the implementation here the window width does not change.\n *\n * Reference:\n * (1) Kneen, M. A.; Annegarn, H. J.\n *     Algorithm for Fitting XRF, SEM and PIXE X-Ray Spectra Backgrounds.\n *     Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms 1996, 109–110, 209–213.\n *     https://doi.org/10.1016/0168-583X(95)00908-6.\n * (2) Kristian Hovde Liland, Bjørn-Helge Mevik, Roberto Canteri: baseline.\n *     https://cran.r-project.org/web/packages/baseline/index.html\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {Number} [options.windowM] - width of local window for minimization/maximization, defaults to 4% of the spectrum length\n * @param {Number} [options.windowS] - width of local window for smoothing, defaults to 8% of the specturm length\n * @returns {BaselineOutput}\n */\nexport function rollingBallBaseline(ys, options = {}) {\n  const baseline = rollingBall(ys, options);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","import { xRollingMedian } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingMedianBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = { ...defaults, ...options };\n  let baseline = xRollingMedian(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","//@ts-expect-error no type definition for baselines\nimport { airPLSBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function airPLSBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=airPLSBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { iterativePolynomialBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function iterativePolynomialBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=iterativePolynomialBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingAverageBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingAverageBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingAverageBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingBallBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingBallBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingBallBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingMedianBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingMedianBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingMedianBaseline.js.map","/**\n * The spacing of an x axis over a window, which every derivative divides by.\n */\n/**\n * The mean spacing of `h` over the window centred on `center`.\n *\n * The sum of consecutive differences telescopes, so only the two ends of the\n * window are read instead of every point.\n * @param h - The x values.\n * @param center - Index the window is centred on.\n * @param half - Half the window size.\n * @returns The mean spacing.\n */\nexport function meanGap(h, center, half) {\n    const lo = Math.max(center - half, 0);\n    const hi = Math.min(center + half - 1, h.length - 2);\n    return (h[hi + 1] - h[lo]) / (hi - lo + 1);\n}\n/**\n * A spacing raised to a derivative order.\n *\n * Orders 1 and 2 are spelled out because `x ** 1` is far slower than `x`.\n * @param spacing - The mean spacing.\n * @param derivative - The order.\n * @returns The divisor for that order.\n */\nexport function raise(spacing, derivative) {\n    if (derivative === 1)\n        return spacing;\n    if (derivative === 2)\n        return spacing * spacing;\n    return spacing ** derivative;\n}\n//# sourceMappingURL=spacing.js.map","/**\n * The argument checks `sgg` and `sggDerivatives` share.\n */\nimport { isAnyArray } from 'is-any-array';\n/**\n * Throw unless the arguments describe a filter that can be applied.\n * @param ys - Array of y values.\n * @param xs - Array of x values, or a constant spacing.\n * @param windowSize - Number of points in the window.\n * @param polynomial - Polynomial grade.\n * @param derivatives - Every derivative order asked for.\n */\nexport function checkArguments(ys, xs, windowSize, polynomial, derivatives) {\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 (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    for (const derivative of derivatives) {\n        if (derivative < 0 || !Number.isInteger(derivative)) {\n            throw new RangeError('Derivative should be a positive integer');\n        }\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}\n//# sourceMappingURL=validate.js.map","/**\n * The Savitzky-Golay weight matrix, and a bounded cache of recent ones.\n *\n * The matrix depends only on the window size, the polynomial order and the\n * derivative, never on the data, so it is a constant across a run of spectra.\n * Building one costs thousands of recursive `gramPoly` calls.\n */\n/**\n * How many weight matrices are kept.\n *\n * Two at least: a derivative pair asks for the same window twice, so one slot\n * would always be overwritten before it was read back.\n *\n * Bounds the cache at `KEPT_WEIGHTS * windowSize ** 2 * 8` bytes: 2.5 kB at\n * windowSize 9, 319 kB at windowSize 101.\n */\nconst KEPT_WEIGHTS = 4;\n/** The shape each kept matrix was built for, three numbers per slot. */\nconst keptShapes = new Int32Array(KEPT_WEIGHTS * 3).fill(-1);\n/** The matrices themselves, in the same slots. */\nconst keptWeights = new Array(KEPT_WEIGHTS);\n/** The slot the next matrix built will land in, oldest first. */\nlet nextSlot = 0;\n/**\n * The weight matrix for a window, built once per shape rather than once per\n * call.\n *\n * Slots are compared on the three numbers, not on a key built from them, so\n * there is no string allocation per call. The caller must not mutate the\n * result.\n * @param windowSize - Number of points in the window.\n * @param polynomial - Polynomial grade.\n * @param derivative - Derivative order.\n * @returns The weight vectors, one per position in the window.\n */\nexport function cachedWeights(windowSize, polynomial, derivative) {\n    for (let slot = 0; slot < KEPT_WEIGHTS; slot++) {\n        const at = slot * 3;\n        if (keptShapes[at] === windowSize &&\n            keptShapes[at + 1] === polynomial &&\n            keptShapes[at + 2] === derivative) {\n            const known = keptWeights[slot];\n            if (known !== undefined)\n                return known;\n        }\n    }\n    const built = fullWeights(windowSize, polynomial, derivative);\n    const at = nextSlot * 3;\n    keptShapes[at] = windowSize;\n    keptShapes[at + 1] = polynomial;\n    keptShapes[at + 2] = derivative;\n    keptWeights[nextSlot] = built;\n    nextSlot = (nextSlot + 1) % KEPT_WEIGHTS;\n    return built;\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else if (k === 0 && s === 0) {\n        Grampoly = 1;\n    }\n    else {\n        Grampoly = 0;\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * Compute the full weights matrix for every position inside the window.\n * @param m - Number of points.\n * @param n - Polynomial grade.\n * @param s - Derivative.\n * @returns Array of Float64Array weight vectors, one per position in the window.\n */\nfunction fullWeights(m, n, s) {\n    const weights = new Array(m);\n    const np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=weights.js.map","/**\n * The Savitzky-Golay filter, for one derivative order.\n */\nimport { isAnyArray } from 'is-any-array';\nimport { meanGap, raise } from \"./spacing.js\";\nimport { checkArguments } from \"./validate.js\";\nimport { cachedWeights } from \"./weights.js\";\n/**\n * Apply Savitzky Golay algorithm.\n * @param ys - Array of y values.\n * @param xs - Array of X or deltaX.\n * @param options - Options controlling window size, derivative and polynomial order.\n * @returns Array containing the new ys (same length).\n */\nexport function sgg(ys, xs, options = {}) {\n    const { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    checkArguments(ys, xs, windowSize, polynomial, [derivative]);\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const ans = new Float64Array(np);\n    const weights = cachedWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = raise(xs, derivative);\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        const wg1 = weights[half - i - 1];\n        const wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = raise(meanGap(xs, half - i - 1, half), derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = raise(meanGap(xs, np - half + i, half), derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    const wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = raise(meanGap(xs, i - half - 1, half), derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\n//# sourceMappingURL=sgg.js.map","/**\n * Two derivatives of one spectrum, in a single pass.\n */\nimport { isAnyArray } from 'is-any-array';\nimport { meanGap, raise } from \"./spacing.js\";\nimport { checkArguments } from \"./validate.js\";\nimport { cachedWeights } from \"./weights.js\";\n/**\n * Apply the Savitzky Golay algorithm for two derivative orders at once.\n *\n * Each y value is read once and multiplied into both accumulators, and the\n * window spacing is measured once and raised twice, where calling `sgg` twice\n * repeats both. Peak picking wants the first and second derivative of the same\n * trace, which is what the default asks for.\n *\n * Two and not a list: an accumulator per order behind a loop costs more than\n * sharing the reads saves, so a general version measured slower than calling\n * `sgg` repeatedly. Ask for more than two by calling this and `sgg`.\n * @param ys - Array of y values.\n * @param xs - Array of X or deltaX.\n * @param options - Options controlling window size, derivatives and polynomial order.\n * @returns The two derivative arrays, in the order requested.\n */\nexport function sggPair(ys, xs, options = {}) {\n    const { windowSize = 9, derivatives = [1, 2], polynomial = 3 } = options;\n    const [firstOrder, secondOrder] = derivatives;\n    checkArguments(ys, xs, windowSize, polynomial, derivatives);\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const first = new Float64Array(np);\n    const second = new Float64Array(np);\n    const firstWeights = cachedWeights(windowSize, polynomial, firstOrder);\n    const secondWeights = cachedWeights(windowSize, polynomial, secondOrder);\n    const constantH = !isAnyArray(xs);\n    const firstConstant = constantH ? raise(xs, firstOrder) : 0;\n    const secondConstant = constantH ? raise(xs, secondOrder) : 0;\n    for (let i = 0; i < half; i++) {\n        const low = half - i - 1;\n        const high = np - half + i;\n        const lowFirst = firstWeights[low];\n        const lowSecond = secondWeights[low];\n        const highFirst = firstWeights[half + i + 1];\n        const highSecond = secondWeights[half + i + 1];\n        let lowFirstSum = 0;\n        let lowSecondSum = 0;\n        let highFirstSum = 0;\n        let highSecondSum = 0;\n        for (let l = 0; l < windowSize; l++) {\n            const atLow = ys[l];\n            const atHigh = ys[np - windowSize + l];\n            lowFirstSum += lowFirst[l] * atLow;\n            lowSecondSum += lowSecond[l] * atLow;\n            highFirstSum += highFirst[l] * atHigh;\n            highSecondSum += highSecond[l] * atHigh;\n        }\n        const lowGap = constantH ? 0 : meanGap(xs, low, half);\n        const highGap = constantH ? 0 : meanGap(xs, high, half);\n        first[low] =\n            lowFirstSum / (constantH ? firstConstant : raise(lowGap, firstOrder));\n        second[low] =\n            lowSecondSum / (constantH ? secondConstant : raise(lowGap, secondOrder));\n        first[high] =\n            highFirstSum / (constantH ? firstConstant : raise(highGap, firstOrder));\n        second[high] =\n            highSecondSum /\n                (constantH ? secondConstant : raise(highGap, secondOrder));\n    }\n    // The loop this exists for: one load of each sample feeds both sums, and one\n    // spacing measurement feeds both divisors. The constant-spacing case is a\n    // second loop rather than a test inside this one, and the orders are raised\n    // inline rather than through a call, because both cost more per point than\n    // the sharing saves.\n    const firstCentre = firstWeights[half];\n    const secondCentre = secondWeights[half];\n    if (constantH) {\n        for (let i = windowSize; i <= np; i++) {\n            const from = i - windowSize;\n            let firstSum = 0;\n            let secondSum = 0;\n            for (let l = 0; l < windowSize; l++) {\n                const value = ys[from + l];\n                firstSum += firstCentre[l] * value;\n                secondSum += secondCentre[l] * value;\n            }\n            const into = i - half - 1;\n            first[into] = firstSum / firstConstant;\n            second[into] = secondSum / secondConstant;\n        }\n    }\n    else {\n        const firstIsOne = firstOrder === 1;\n        const firstIsTwo = firstOrder === 2;\n        const secondIsOne = secondOrder === 1;\n        const secondIsTwo = secondOrder === 2;\n        for (let i = windowSize; i <= np; i++) {\n            const from = i - windowSize;\n            let firstSum = 0;\n            let secondSum = 0;\n            for (let l = 0; l < windowSize; l++) {\n                const value = ys[from + l];\n                firstSum += firstCentre[l] * value;\n                secondSum += secondCentre[l] * value;\n            }\n            const into = i - half - 1;\n            const gap = meanGap(xs, into, half);\n            first[into] =\n                firstSum /\n                    (firstIsOne ? gap : firstIsTwo ? gap * gap : gap ** firstOrder);\n            second[into] =\n                secondSum /\n                    (secondIsOne ? gap : secondIsTwo ? gap * gap : gap ** secondOrder);\n        }\n    }\n    return [first, second];\n}\n//# sourceMappingURL=sggPair.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the first derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function firstDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 1 }) } };\n}\n//# sourceMappingURL=firstDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the second derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function secondDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 2 }) } };\n}\n//# sourceMappingURL=secondDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the third derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function thirdDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 3 }) } };\n}\n//# sourceMappingURL=thirdDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Apply the Savitzky Golay Generalized Filter\n * @param data\n * @param options\n */\nexport function savitzkyGolay(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, options) } };\n}\n//# sourceMappingURL=savitzkyGolay.js.map","import { xyEnsureGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * https://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function ensureGrowing(data) {\n    return { data: xyEnsureGrowingX(data) };\n}\n//# sourceMappingURL=ensureGrowing.js.map","import { xyGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * https://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function reverseIfNeeded(data) {\n    return { data: xyGrowingX(data) };\n}\n//# sourceMappingURL=reverseIfNeeded.js.map","import { xyEquallySpaced } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function equallySpaced(data, options = {}) {\n    return { data: xyEquallySpaced(data, options) };\n}\n//# sourceMappingURL=equallySpaced.js.map","import { xyFilterX } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function filterX(data, options = {}) {\n    return {\n        data: xyFilterX(data, options),\n    };\n}\n//# sourceMappingURL=filterX.js.map","import { xAdd, xMaxValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMaxX(data, options = {}) {\n    const { max = 1 } = options;\n    const existingMax = xMaxValue(data.x);\n    if (existingMax === max) {\n        return { data };\n    }\n    return {\n        data: {\n            x: xAdd(data.x, max - existingMax),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=setMaxX.js.map","import { xAdd, xMinValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMinX(data, options = {}) {\n    const { min = 0 } = options;\n    const existingMin = xMinValue(data.x);\n    if (existingMin === min) {\n        return { data };\n    }\n    return {\n        data: {\n            x: xAdd(data.x, min - existingMin),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=setMinX.js.map","/**\n * Compute the `[left, right]` intervals around each peak by locating\n * consecutive extrema (minima / maxima) of the first derivative.\n * @param y - Spectrum y values.\n * @param x - Spectrum x values.\n * @param dY - First derivative of `y`.\n * @param dX - Sign of the x step (positive for increasing x, negative otherwise).\n * @returns `intervalL` / `intervalR` arrays defining each peak's inflection-point bounds.\n */\nexport function getMinMaxIntervalsDy(y, x, dY, dX) {\n    let lastMax = null;\n    let lastMin = null;\n    const intervalL = [];\n    const intervalR = [];\n    for (let i = 1; i < y.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    }\n    return { intervalL, intervalR };\n}\n//# sourceMappingURL=getMinMaxIntervals.js.map","/**\n * Find the `minData` index closest to the center of one interval,\n * above the intensity threshold and bounded by the half-width.\n * @param options - Interval, candidate indices and spectrum data.\n * @returns The picked candidate (`possible`) and the last visited index (`lastIndex`).\n */\nexport function tryMatchOneIntervalWithMinData(options) {\n    const { x, lastK, minData, yThreshold, intervalWidth, intervalCenter, yData, } = options;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let possible = -1;\n    let newLastIndex = lastK;\n    for (let k = newLastIndex + 1; k < minData.length; k++) {\n        const centerIndex = minData[k];\n        if (yData[centerIndex] <= yThreshold) {\n            continue;\n        }\n        const deltaX = x[centerIndex];\n        const currentDistance = Math.abs(deltaX - intervalCenter);\n        if (currentDistance < intervalWidth) {\n            if (currentDistance < minDistance) {\n                possible = k;\n            }\n            newLastIndex = k;\n        }\n        if (currentDistance >= minDistance)\n            break;\n        minDistance = currentDistance;\n    }\n    return { lastIndex: newLastIndex, possible };\n}\n//# sourceMappingURL=tryMatchOneIntervalWithMinData.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\n/**\n * Peak detection that combines first-derivative zero-crossings and\n * second-derivative local minima to find peaks inside each interval.\n * @param input - Spectrum values together with its first and second derivatives.\n * @returns The detected peaks.\n */\nexport function autoAlgorithm(input) {\n    const { x, y, yData, dY, ddY, dX, yThreshold } = input;\n    const minddY = [];\n    const crossDy = [];\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    for (let i = 1; i < y.length - 1; ++i) {\n        if ((dY[i] < 0 && dY[i + 1] > 0) || (dY[i] > 0 && dY[i + 1] < 0)) {\n            // push the index of the element closer to zero\n            crossDy.push(Math.abs(dY[i]) < Math.abs(dY[i + 1]) ? i : i + 1);\n        }\n        // Handle exact zero\n        if (dY[i] === 0 &&\n            dY[i] < Math.abs(dY[i + 1]) &&\n            dY[i] < Math.abs(dY[i - 1])) {\n            crossDy.push(i);\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    const peaks = [];\n    let lastK = -1;\n    let lastJ = -1;\n    for (let i = 0; i < intervalL.length; i++) {\n        const intervalWidth = (intervalR[i].x - intervalL[i].x) / 2;\n        const intervalCenter = (intervalR[i].x + intervalL[i].x) / 2;\n        let yIndex = -1;\n        let match = tryMatchOneIntervalWithMinData({\n            x,\n            yData,\n            lastK,\n            yThreshold,\n            intervalWidth,\n            intervalCenter,\n            minData: crossDy,\n        });\n        lastK = match.lastIndex;\n        if (match.possible !== -1) {\n            yIndex = crossDy[match.possible];\n        }\n        else {\n            match = tryMatchOneIntervalWithMinData({\n                x,\n                yData,\n                yThreshold,\n                lastK: lastJ,\n                intervalWidth,\n                intervalCenter,\n                minData: minddY,\n            });\n            if (match.possible !== -1) {\n                yIndex = minddY[match.possible];\n            }\n            lastJ = match.lastIndex;\n        }\n        if (yIndex !== -1) {\n            const width = Math.abs(intervalR[i].x - intervalL[i].x);\n            peaks.push({\n                id: crypto.randomUUID(),\n                x: x[yIndex],\n                y: y[yIndex],\n                width,\n                index: yIndex,\n                ddY: ddY[yIndex],\n                inflectionPoints: {\n                    from: intervalL[i],\n                    to: intervalR[i],\n                },\n            });\n        }\n    }\n    return peaks;\n}\n//# sourceMappingURL=autoAlgorithm.js.map","import { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\n/**\n * Build the list of detected peaks by matching each `[left, right]` interval\n * with the best candidate index from `minData`.\n * @param options - Intervals, candidate indices and spectrum data.\n * @returns The detected peaks.\n */\nexport function getPeakFromIntervals(options) {\n    let lastK = -1;\n    const peaks = [];\n    const { x, ddY, yData, yThreshold, intervalR, intervalL, minData } = options;\n    for (let i = 0; i < intervalL.length; i++) {\n        const intervalWidth = (intervalR[i].x - intervalL[i].x) / 2;\n        const intervalCenter = (intervalR[i].x + intervalL[i].x) / 2;\n        const { possible, lastIndex } = tryMatchOneIntervalWithMinData({\n            x,\n            lastK,\n            minData,\n            yThreshold,\n            intervalWidth,\n            intervalCenter,\n            yData,\n        });\n        if (possible !== -1) {\n            const centerIndex = minData[possible];\n            const width = Math.abs(intervalR[i].x - intervalL[i].x);\n            peaks.push({\n                id: crypto.randomUUID(),\n                x: x[centerIndex],\n                y: yData[centerIndex],\n                width,\n                index: centerIndex,\n                ddY: ddY[centerIndex],\n                inflectionPoints: {\n                    from: intervalL[i],\n                    to: intervalR[i],\n                },\n            });\n        }\n        lastK = lastIndex;\n    }\n    return peaks;\n}\n//# sourceMappingURL=getPeaksFromIntervals.js.map","/**\n * Finds the indices where the first derivative crosses zero (sign change),\n * which are potential peak positions. This function does not detect zero-crossings\n * in regions with consecutive zero values in the derivative (flat regions).\n * @param input - Object containing the y values and their first derivative (dY).\n * @returns Array of indices where the first derivative crosses zero (excluding consecutive zeros).\n */\nexport function xGetCrossZeroPoints(input) {\n    const { y, dY } = input;\n    const crossDy = [];\n    for (let i = 1; i < y.length - 1; ++i) {\n        if (isLessAndGreaterThanZero(dY[i], dY[i + 1])) {\n            // push the index of the element closer to zero\n            crossDy.push(Math.abs(dY[i]) < Math.abs(dY[i + 1]) ? i : i + 1);\n        }\n        else if (\n        // Handle exact zero\n        dY[i] === 0 &&\n            isLessAndGreaterThanZero(dY[i - 1], dY[i + 1])) {\n            crossDy.push(i);\n        }\n    }\n    return crossDy;\n}\nfunction isLessAndGreaterThanZero(back, next) {\n    return (back < 0 && next > 0) || (back > 0 && next < 0);\n}\n//# sourceMappingURL=xGetCrossZeroPoints.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\nimport { xGetCrossZeroPoints } from \"./xGetCrossZeroPoints.js\";\n/**\n * Detect peaks using zero-crossings of the first derivative.\n * @param input - Spectrum values and its first/second derivatives.\n * @returns The detected peaks.\n */\nexport function firstDerivative(input) {\n    const { y, x, dY, dX, yData, yThreshold, ddY } = input;\n    const crossDy = xGetCrossZeroPoints(input);\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    return getPeakFromIntervals({\n        minData: crossDy,\n        intervalL,\n        intervalR,\n        x,\n        yData,\n        yThreshold,\n        ddY,\n    });\n}\n//# sourceMappingURL=firstDerivative.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\n/**\n * Detect peaks using local minima of the second derivative (inflection points).\n * @param input - Spectrum values and its first/second derivatives.\n * @returns The detected peaks.\n */\nexport function secondDerivative(input) {\n    const { x, y, yData, dY, ddY, dX, yThreshold } = input;\n    const minddY = [];\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n    for (let i = 1; i < y.length - 1; ++i) {\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    return getPeakFromIntervals({\n        minData: minddY,\n        intervalL,\n        intervalR,\n        x,\n        yData,\n        yThreshold,\n        ddY,\n    });\n}\n//# sourceMappingURL=secondDerivative.js.map","/**\n * Refine the `x` and `y` coordinates of each peak by running a quadratic\n * interpolation over the peak and its 3 closest neighbors.\n * The correction is performed in place.\n * @param data - Object with `x` and `y` arrays.\n * @param peaks - Peaks to refine (mutated in place).\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else if (y[currentIndex + 1] >= y[currentIndex] &&\n            y[currentIndex + 1] >= y[currentIndex + 2]) {\n            currentIndex++;\n        }\n        else if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n            y[currentIndex - 2] >= y[currentIndex - 1]) {\n            currentIndex -= 2;\n        }\n        else if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n            y[currentIndex + 2] >= y[currentIndex + 3]) {\n            currentIndex += 2;\n        }\n        // Quadratic interpolation on log-intensities to refine the peak top.\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            const alpha = Math.log10(y[currentIndex - 1]);\n            const beta = Math.log10(y[currentIndex]);\n            const gamma = Math.log10(y[currentIndex + 1]);\n            const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            const xCurrent = x[currentIndex];\n            const xPrevious = x[currentIndex - 1];\n            peak.x = xCurrent + (xCurrent - xPrevious) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","import { sgg, sggPair } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotonic, xMaxAbsoluteValue, xMaxValue, xMinMaxValues, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { autoAlgorithm } from \"./algorithms/autoAlgorithm.js\";\nimport { firstDerivative } from \"./algorithms/firstDerivative.js\";\nimport { secondDerivative } from \"./algorithms/secondDerivative.js\";\nimport { optimizeTop } from \"./utils/optimizeTop.js\";\n/**\n * Global spectra deconvolution.\n * @param data - Object with `x` and `y` arrays. `x` must be monotone increasing.\n * @param options - Peak detection options.\n * @returns The detected peaks, sorted by ascending `x`.\n */\nexport function gsd(data, options = {}) {\n    let { noiseLevel } = options;\n    const { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, smoothY = false, maxCriteria = true, maxAbsoluteRatio = 0, minMaxRatio = 0.00025, realTopDetection = false, peakDetectionAlgorithm = 'second', } = options;\n    if (maxAbsoluteRatio < 0 || maxAbsoluteRatio > 1) {\n        throw new Error('maxAbsoluteRatio must be between 0 and 1');\n    }\n    const { x } = data;\n    let { y } = data;\n    if (xIsMonotonic(x) !== 1) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    // Copy so the `maxCriteria` / clipping loops below don't mutate the caller's array.\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    const isEquallySpaced = xIsEquallySpaced(x);\n    if (noiseLevel === undefined) {\n        if (isEquallySpaced) {\n            const noiseInfo = xNoiseStandardDeviation(y);\n            if (maxCriteria) {\n                noiseLevel = noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n            else {\n                noiseLevel = -noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n        }\n        else {\n            noiseLevel = 0;\n        }\n    }\n    else if (!maxCriteria) {\n        noiseLevel *= -1;\n    }\n    if (!maxCriteria) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] = -y[i];\n        }\n    }\n    const maxAbsoluteValue = maxAbsoluteRatio > 0 ? maxAbsoluteRatio * xMaxAbsoluteValue(y) : noiseLevel;\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    const xValue = isEquallySpaced ? x[1] - x[0] : x;\n    const yData = smoothY\n        ? sgg(y, xValue, {\n            ...sgOptions,\n            derivative: 0,\n        })\n        : y;\n    const { min: minY, max: maxY } = xMinMaxValues(yData);\n    if (minY > maxY || minY === maxY)\n        return [];\n    const [dY, ddY] = sggPair(y, xValue, {\n        windowSize: sgOptions.windowSize,\n        polynomial: sgOptions.polynomial,\n        derivatives: [1, 2],\n    });\n    const yThreshold = xMaxValue([\n        noiseLevel,\n        minY + (maxY - minY) * minMaxRatio,\n        maxAbsoluteValue,\n    ]);\n    const dX = x[1] - x[0];\n    const peakData = { x, y, yData, dY, ddY, dX, yThreshold };\n    let peaks = [];\n    if (peakDetectionAlgorithm === 'first') {\n        peaks = firstDerivative(peakData);\n    }\n    else if (peakDetectionAlgorithm === 'second') {\n        peaks = secondDerivative(peakData);\n    }\n    else {\n        peaks = autoAlgorithm(peakData);\n    }\n    if (realTopDetection) {\n        optimizeTop({ x, y: yData }, peaks);\n    }\n    for (const peak of peaks) {\n        if (!maxCriteria) {\n            peak.y *= -1;\n            peak.ddY = peak.ddY * -1;\n        }\n    }\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\n//# sourceMappingURL=gsd.js.map","export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\n/**\n * A pseudo-Voigt is a gaussian plus a lorentzian. Beyond 3.74 fwhm from the\n * centre the gaussian part is down to 1.4e-17 — too small to change a shape of\n * height one — while the lorentzian part is still 1.8e-2 and fades much more\n * slowly. Past that distance the gaussian is skipped: the `Math.exp` it costs\n * cannot change the result, and most points of a wide window lie out there.\n *\n * The limit is stored squared, so the test is `(x / fwhm)² > 14`, which saves a\n * square root. The same value works for every mixing ratio `mu`, except `mu = 1`\n * where the shape is a pure gaussian: with no lorentzian part left, skipping\n * would return zero instead of a very small number, so that case is never\n * skipped.\n */\nexport const GAUSSIAN_CUTOFF = 14;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_LN2 = Math.sqrt(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\n/**\n * Approximate inverse error function.\n * @param x - value in the range (-1, 1).\n * @returns erfinv(x).\n * @see https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n */\nexport default function erfinv(x) {\n    const a = 0.147;\n    if (x === 0)\n        return 0;\n    const ln1MinusXSqrd = Math.log(1 - x * x);\n    const lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    const firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    const secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2, ROOT_LN2, ROOT_PI_OVER_LN2, } from \"../../../util/constants.js\";\nimport erfinv from \"../../../util/erfinv.js\";\nexport class Gaussian {\n    kind = 'gaussian';\n    /**\n     * Full width at half maximum.\n     * @default 500\n     */\n    fwhm;\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    /**\n     * Descriptor of this shape, so `JSON.stringify` round-trips through `getShape1D`.\n     * @returns the shape descriptor.\n     */\n    toJSON() {\n        return { kind: this.kind, fwhm: this.fwhm };\n    }\n    derivative(x) {\n        const { fct, dx, dFwhm } = gaussianDerivative(x, this.fwhm);\n        return { fct, dx, parameters: [dFwhm] };\n    }\n}\n/**\n * Calculate the peak height for a given area and fwhm.\n * @param options - fwhm, area, and optional sd.\n * @returns the peak height.\n */\nexport function calculateGaussianHeight(options) {\n    const { area = 1, sd } = options;\n    let { fwhm = 500 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (2 * area) / ROOT_PI_OVER_LN2 / fwhm;\n}\n/**\n * Evaluate the gaussian function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @returns the intensity at x.\n */\nexport function gaussianFct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * (x / fwhm) ** 2);\n}\n/**\n * Analytical value and partial derivatives of the gaussian function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`) and `fwhm` (`dFwhm`).\n */\nexport function gaussianDerivative(x, fwhm) {\n    const fct = gaussianFct(x, fwhm);\n    const dx = ((2 * GAUSSIAN_EXP_FACTOR * x) / (fwhm * fwhm)) * fct;\n    const dFwhm = ((-2 * GAUSSIAN_EXP_FACTOR * x * x) / (fwhm * fwhm * fwhm)) * fct;\n    return { fct, dx, dFwhm };\n}\n/**\n * Convert inflection-point width to full width at half maximum.\n * @param width - width between inflection points.\n * @returns full width at half maximum.\n */\nexport function gaussianWidthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\n/**\n * Convert full width at half maximum to inflection-point width.\n * @param fwhm - full width at half maximum.\n * @returns width between inflection points.\n */\nexport function gaussianFwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\n/**\n * Calculate the area under a gaussian peak.\n * @param options - fwhm, height, and optional sd.\n * @returns the area.\n */\nexport function getGaussianArea(options) {\n    const { sd, height = 1 } = options;\n    let { fwhm = 500 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\n/**\n * Calculate the width factor corresponding to a given area coverage fraction.\n * @param area - target area fraction (0–1). Defaults to `0.9999`.\n * @returns the factor by which to multiply fwhm to cover the given area.\n */\nexport function getGaussianFactor(area = 0.9999) {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    return erfinv(area) / ROOT_LN2;\n}\n/**\n * Generate an intensity array for a gaussian shape.\n * @param shape - gaussian shape parameters (fwhm, sd).\n * @param options - sampling options (length, factor, height).\n * @returns Float64Array of intensity values.\n */\nexport function getGaussianData(shape = {}, options = {}) {\n    const { sd } = shape;\n    let { fwhm = 500 } = shape;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    const { factor = getGaussianFactor(), height = calculateGaussianHeight({ fwhm }), } = options;\n    let { length } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), 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        const value = gaussianFct(i - center, fwhm) * height;\n        data[i] = value;\n        data[length - 1 - i] = value;\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","import { ROOT_THREE } from \"../../../util/constants.js\";\nexport class Lorentzian {\n    kind = 'lorentzian';\n    /**\n     * Full width at half maximum.\n     * @default 500\n     */\n    fwhm;\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    /**\n     * Descriptor of this shape, so `JSON.stringify` round-trips through `getShape1D`.\n     * @returns the shape descriptor.\n     */\n    toJSON() {\n        return { kind: this.kind, fwhm: this.fwhm };\n    }\n    derivative(x) {\n        const { fct, dx, dFwhm } = lorentzianDerivative(x, this.fwhm);\n        return { fct, dx, parameters: [dFwhm] };\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};\n/**\n * Analytical value and partial derivatives of the lorentzian function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`) and `fwhm` (`dFwhm`).\n */\nexport function lorentzianDerivative(x, fwhm) {\n    const denominator = 4 * x * x + fwhm * fwhm;\n    const fct = (fwhm * fwhm) / denominator;\n    const dx = (-8 * x * fwhm * fwhm) / (denominator * denominator);\n    const dFwhm = (8 * fwhm * x * x) / (denominator * denominator);\n    return { fct, dx, dFwhm };\n}\nexport const lorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const lorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nconst lorentzianQuantile = (p) => Math.tan(Math.PI * (p - 0.5));\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    return ((lorentzianQuantile(1 - halfResidual) - lorentzianQuantile(halfResidual)) /\n        2);\n};\nexport const getLorentzianData = (shape = {}, options = {}) => {\n    const { fwhm = 500 } = shape;\n    const { factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    let { length } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), 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        const value = lorentzianFct(i - center, fwhm) * height;\n        data[i] = value;\n        data[length - 1 - i] = value;\n    }\n    return data;\n};\n//# sourceMappingURL=Lorentzian.js.map","import { calculateLorentzianHeight, getLorentzianFactor, lorentzianFwhmToWidth, lorentzianWidthToFWHM, } from \"../lorentzian/Lorentzian.js\";\nexport class LorentzianDispersive {\n    kind = 'lorentzianDispersive';\n    /**\n     * Full width at half maximum.\n     * @default 500\n     */\n    fwhm;\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianDispersiveFct(x, this.fwhm);\n    }\n    getArea() {\n        return 0;\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianDispersiveData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n    /**\n     * Descriptor of this shape, so `JSON.stringify` round-trips through `getShape1D`.\n     * @returns the shape descriptor.\n     */\n    toJSON() {\n        return { kind: this.kind, fwhm: this.fwhm };\n    }\n    derivative(x) {\n        const { fct, dx, dFwhm } = lorentzianDispersiveDerivative(x, this.fwhm);\n        return { fct, dx, parameters: [dFwhm] };\n    }\n}\nexport const lorentzianDispersiveFct = (x, fwhm) => {\n    return (2 * fwhm * x) / (4 * x ** 2 + fwhm ** 2);\n};\n/**\n * Analytical value and partial derivatives of the dispersive lorentzian function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`) and `fwhm` (`dFwhm`).\n */\nexport function lorentzianDispersiveDerivative(x, fwhm) {\n    const denominator = 4 * x * x + fwhm * fwhm;\n    const fct = (2 * fwhm * x) / denominator;\n    const dx = (2 * fwhm * (fwhm * fwhm - 4 * x * x)) / (denominator * denominator);\n    const dFwhm = (2 * x * (4 * x * x - fwhm * fwhm)) / (denominator * denominator);\n    return { fct, dx, dFwhm };\n}\nexport const getLorentzianDispersiveData = (shape = {}, options = {}) => {\n    const { fwhm = 500 } = shape;\n    const { factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    let { length } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), 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        const value = lorentzianDispersiveFct(i - center, fwhm) * height;\n        data[i] = value;\n        data[length - 1 - i] = -value;\n    }\n    return data;\n};\n//# sourceMappingURL=LorentzianDispersive.js.map","import { getGaussianFactor } from \"../gaussian/Gaussian.js\";\nimport { getLorentzianFactor } from \"../lorentzian/Lorentzian.js\";\n/**\n * Find the k factor for a pseudo-Voigt distribution such that the\n * cumulative probability pPseudoVoigt(k, mu) equals `pTarget`.\n *\n * Uses a simple bisection search (with exponential bracketing) to\n * invert the pseudo-Voigt cumulative function. Special cases:\n * - mu === 1 -> reduces to the gaussian case\n * - mu === 0 -> reduces to the lorentzian case\n * @param pTarget - Target cumulative probability in (0,1)\n * @param mu - Gaussian fraction in [0,1]\n * @param tol - Convergence tolerance\n * @param maxIter - Maximum number of bisection iterations\n * @returns the factor k such that pPseudoVoigt(k, mu) ~= pTarget\n */\nexport function pseudoVoigtFindFactor(pTarget, mu, tol = 1e-9, maxIter = 200) {\n    if (pTarget <= 0 || pTarget >= 1) {\n        throw new RangeError('pTarget must be in (0,1)');\n    }\n    if (mu === 1) {\n        return getGaussianFactor(pTarget);\n    }\n    else if (mu === 0) {\n        return getLorentzianFactor(pTarget);\n    }\n    // bisection\n    let lo = 0;\n    let hi = 10;\n    let it = 0;\n    while (pPseudoVoigt(hi, mu) < pTarget && it++ < 200)\n        hi *= 2;\n    for (let i = 0; i < maxIter; i++) {\n        const mid = 0.5 * (lo + hi);\n        const val = pPseudoVoigt(mid, mu);\n        if (Math.abs(val - pTarget) < tol)\n            return mid;\n        if (val < pTarget) {\n            lo = mid;\n        }\n        else {\n            hi = mid;\n        }\n    }\n    return 0.5 * (lo + hi);\n}\nfunction erf(x) {\n    const sign = x < 0 ? -1 : 1;\n    x = Math.abs(x);\n    const a1 = 0.254829592;\n    const a2 = -0.284496736;\n    const a3 = 1.421413741;\n    const a4 = -1.453152027;\n    const a5 = 1.061405429;\n    const p = 0.3275911;\n    const t = 1 / (1 + p * x);\n    const y = 1 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);\n    return sign * y;\n}\nconst sqrtLn2 = Math.sqrt(Math.log(2));\nfunction pGaussian(k) {\n    return erf(k * sqrtLn2);\n}\nfunction pLorentz(k) {\n    return (2 / Math.PI) * Math.atan(k);\n}\nfunction pPseudoVoigt(k, mu) {\n    return (1 - mu) * pLorentz(k) + mu * pGaussian(k);\n}\n//# sourceMappingURL=computeFactor.js.map","import { GAUSSIAN_CUTOFF, GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from \"../../../util/constants.js\";\nimport { gaussianFct } from \"../gaussian/Gaussian.js\";\nimport { lorentzianFct } from \"../lorentzian/Lorentzian.js\";\nimport { pseudoVoigtFindFactor } from \"./computeFactor.js\";\nexport class PseudoVoigt {\n    kind = 'pseudoVoigt';\n    fwhm;\n    /**\n     * Ratio of gaussian contribution in the shape\n     * @default 0.5\n     */\n    mu;\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, this.mu);\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    /**\n     * Descriptor of this shape, so `JSON.stringify` round-trips through `getShape1D`.\n     * @returns the shape descriptor.\n     */\n    toJSON() {\n        return { kind: this.kind, fwhm: this.fwhm, mu: this.mu };\n    }\n    derivative(x) {\n        const { fct, dx, dFwhm, dMu } = pseudoVoigtDerivative(x, this.fwhm, this.mu);\n        return { fct, dx, parameters: [dFwhm, dMu] };\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    const { 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    // at mu = 1 the shape *is* the gaussian: there is no lorentzian half left to\n    // carry the tail, so the gaussian is evaluated however far out it is asked for\n    if (mu === 1)\n        return gaussianFct(x, fwhm);\n    const lorentzian = (1 - mu) * lorentzianFct(x, fwhm);\n    const z = x / fwhm;\n    if (z * z > GAUSSIAN_CUTOFF)\n        return lorentzian;\n    return lorentzian + mu * gaussianFct(x, fwhm);\n};\n/**\n * Analytical value and partial derivatives of the pseudo-Voigt function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @param mu - ratio of gaussian contribution in the shape.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`), `fwhm` (`dFwhm`) and `mu` (`dMu`).\n */\nexport function pseudoVoigtDerivative(x, fwhm, mu) {\n    // gaussian and lorentzian derivative math is inlined (rather than calling\n    // gaussianDerivative / lorentzianDerivative) to allocate a single object on\n    // this hot path; the sub-calls would allocate three.\n    //\n    // Past {@link GAUSSIAN_CUTOFF} the gaussian half has underflowed, so it is\n    // dropped here under the same condition as in `pseudoVoigtFct` — including its\n    // mu = 1 exemption, so the two stay consistent — which also settles what the\n    // derivatives are out there: `dx` and `dFwhm` keep only their lorentzian\n    // halves, and `dMu` becomes `-lorentz`, the value the shape loses by trading\n    // its lorentzian half for a gaussian one that contributes nothing.\n    const z = x / fwhm;\n    const e = mu !== 1 && z * z > GAUSSIAN_CUTOFF\n        ? 0\n        : Math.exp(GAUSSIAN_EXP_FACTOR * z * z);\n    const denominator = 4 * x * x + fwhm * fwhm;\n    const lorentz = (fwhm * fwhm) / denominator;\n    const dEdt = ((2 * GAUSSIAN_EXP_FACTOR * x) / (fwhm * fwhm)) * e;\n    const dLdt = (-8 * x * fwhm * fwhm) / (denominator * denominator);\n    const dEdfwhm = ((-2 * GAUSSIAN_EXP_FACTOR * x * x) / (fwhm * fwhm * fwhm)) * e;\n    const dLdfwhm = (8 * fwhm * x * x) / (denominator * denominator);\n    return {\n        fct: (1 - mu) * lorentz + mu * e,\n        dx: (1 - mu) * dLdt + mu * dEdt,\n        dFwhm: (1 - mu) * dLdfwhm + mu * dEdfwhm,\n        dMu: e - lorentz,\n    };\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 pseudoVoigtFindFactor(area, mu);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    const { fwhm = 500, mu = 0.5 } = shape;\n    const { factor = getPseudoVoigtFactor(0.999, mu) } = options;\n    let { length, 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), 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        const value = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[i] = value;\n        data[length - 1 - i] = value;\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { GAUSSIAN_CUTOFF, GAUSSIAN_EXP_FACTOR, } from \"../../../util/constants.js\";\nimport { calculatePseudoVoigtHeight, getPseudoVoigtArea, getPseudoVoigtData, getPseudoVoigtFactor, pseudoVoigtFct, pseudoVoigtFwhmToWidth, pseudoVoigtWidthToFWHM, } from \"../pseudoVoigt/PseudoVoigt.js\";\n/**\n * TCH-style pseudo-Voigt where gaussian and lorentzian widths are independent.\n * The effective fwhm and mixing parameter mu are derived from fwhmG and fwhmL\n * via the Thompson–Cox–Hastings approximation.\n */\nexport class PseudoVoigtTCH {\n    kind = 'pseudoVoigtTCH';\n    _fwhmG;\n    _fwhmL;\n    _fwhm;\n    _mu;\n    _lorentzianWidthFraction;\n    constructor(options = {}) {\n        const { fwhmG, fwhmL, fwhm, mu = 0.5 } = options;\n        this._mu = mu;\n        this._fwhm = 0;\n        this._fwhmG = 0;\n        this._fwhmL = 0;\n        this._lorentzianWidthFraction = lorentzianWidthFraction(1 - mu);\n        if (fwhmG !== undefined && fwhmL !== undefined) {\n            this._fwhmG = fwhmG;\n            this.fwhmL = fwhmL;\n        }\n        else if (fwhm !== undefined) {\n            this.fwhm = fwhm;\n        }\n    }\n    set fwhmG(value) {\n        const effectiveFwhm = computeEffectiveWidth(value, this._fwhmL);\n        const lorentzianFraction = this._fwhmL / effectiveFwhm;\n        this._fwhm = effectiveFwhm;\n        this._mu =\n            1 -\n                (1.36603 * lorentzianFraction -\n                    0.47719 * lorentzianFraction * lorentzianFraction +\n                    0.11116 * lorentzianFraction * lorentzianFraction * lorentzianFraction);\n        this._fwhmG = value;\n        this._lorentzianWidthFraction = lorentzianFraction;\n    }\n    get fwhmG() {\n        return this._fwhmG;\n    }\n    set fwhmL(value) {\n        const effectiveFwhm = computeEffectiveWidth(this._fwhmG, value);\n        const lorentzianFraction = value / effectiveFwhm;\n        this._fwhm = effectiveFwhm;\n        this._mu =\n            1 -\n                (1.36603 * lorentzianFraction -\n                    0.47719 * lorentzianFraction * lorentzianFraction +\n                    0.11116 * lorentzianFraction * lorentzianFraction * lorentzianFraction);\n        this._fwhmL = value;\n        this._lorentzianWidthFraction = lorentzianFraction;\n    }\n    get fwhmL() {\n        return this._fwhmL;\n    }\n    set mu(value) {\n        const lorentzianFraction = lorentzianWidthFraction(1 - value);\n        this._lorentzianWidthFraction = lorentzianFraction;\n        this._fwhmL = this._fwhm * lorentzianFraction;\n        this._fwhmG = this._fwhm * gaussianWidthFraction(lorentzianFraction);\n        this._mu = value;\n    }\n    get mu() {\n        return this._mu;\n    }\n    set fwhm(value) {\n        const lorentzianFraction = this._lorentzianWidthFraction || lorentzianWidthFraction(1 - this._mu);\n        this._fwhmL = value * lorentzianFraction;\n        this._fwhmG = value * gaussianWidthFraction(lorentzianFraction);\n        this._fwhm = value;\n    }\n    get fwhm() {\n        return this._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, this._mu);\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({\n            fwhm: this._fwhm,\n            mu: this._mu,\n            area,\n        });\n    }\n    getParameters() {\n        return ['fwhmG', 'fwhmL'];\n    }\n    /**\n     * Descriptor of this shape, so `JSON.stringify` round-trips through `getShape1D`.\n     * The component widths are emitted rather than `fwhm`/`mu`, because they are\n     * the state this shape is defined by: `getParameters` reports them and\n     * `derivative` differentiates with respect to them. The effective width and\n     * the mixing ratio are re-derived from them exactly.\n     * @returns the shape descriptor.\n     */\n    toJSON() {\n        return { kind: this.kind, fwhmG: this._fwhmG, fwhmL: this._fwhmL };\n    }\n    derivative(x) {\n        const { fct, dx, dFwhmG, dFwhmL } = pseudoVoigtTCHDerivative(x, this._fwhmG, this._fwhmL);\n        return { fct, dx, parameters: [dFwhmG, dFwhmL] };\n    }\n}\n/**\n * Analytical value and partial derivatives of the TCH pseudo-Voigt function centered at x=0.\n * The effective fwhm `F` and mixing `mu` are functions of `fwhmG` and `fwhmL`, so the\n * derivatives chain `∂fct/∂F` and `∂fct/∂mu` through `∂F/∂·` and `∂mu/∂·`.\n * @param x - position at which to evaluate.\n * @param fwhmG - full width at half maximum of the gaussian component.\n * @param fwhmL - full width at half maximum of the lorentzian component.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`), `fwhmG` (`dFwhmG`) and `fwhmL` (`dFwhmL`).\n */\nexport function pseudoVoigtTCHDerivative(x, fwhmG, fwhmL) {\n    const effectiveFwhm = computeEffectiveWidth(fwhmG, fwhmL);\n    const w = effectiveFwhm ** 5; // the polynomial under the 1/5 power\n    // ∂w/∂fwhmG and ∂w/∂fwhmL (derivatives of the TCH width polynomial).\n    const dwDfwhmG = 5 * fwhmG ** 4 +\n        10.77076 * fwhmG ** 3 * fwhmL +\n        7.28529 * fwhmG ** 2 * fwhmL ** 2 +\n        8.94326 * fwhmG * fwhmL ** 3 +\n        0.07842 * fwhmL ** 4;\n    const dwDfwhmL = 2.69269 * fwhmG ** 4 +\n        4.85686 * fwhmG ** 3 * fwhmL +\n        13.41489 * fwhmG ** 2 * fwhmL ** 2 +\n        0.31368 * fwhmG * fwhmL ** 3 +\n        5 * fwhmL ** 4;\n    // F = w^0.2  =>  ∂F/∂· = 0.2 * F / w * ∂w/∂·\n    const dFwhmDfwhmG = (0.2 * effectiveFwhm * dwDfwhmG) / w;\n    const dFwhmDfwhmL = (0.2 * effectiveFwhm * dwDfwhmL) / w;\n    // lorentzian width fraction L = fwhmL / F\n    const lorentzianFraction = fwhmL / effectiveFwhm;\n    const dLorentzianFractionDfwhmG = (-fwhmL / (effectiveFwhm * effectiveFwhm)) * dFwhmDfwhmG;\n    const dLorentzianFractionDfwhmL = 1 / effectiveFwhm - (fwhmL / (effectiveFwhm * effectiveFwhm)) * dFwhmDfwhmL;\n    // mu = 1 - (1.36603 L - 0.47719 L^2 + 0.11116 L^3)\n    const dPolyDfraction = 1.36603 -\n        0.95438 * lorentzianFraction +\n        0.33348 * lorentzianFraction * lorentzianFraction;\n    const dMuDfwhmG = -dPolyDfraction * dLorentzianFractionDfwhmG;\n    const dMuDfwhmL = -dPolyDfraction * dLorentzianFractionDfwhmL;\n    const mu = 1 -\n        (1.36603 * lorentzianFraction -\n            0.47719 * lorentzianFraction * lorentzianFraction +\n            0.11116 * lorentzianFraction * lorentzianFraction * lorentzianFraction);\n    // pseudoVoigt value and its ∂/∂x, ∂/∂F (dFwhm), ∂/∂mu (dMu) at the effective\n    // fwhm, inlined to allocate a single object on this hot path.\n    //\n    // Past {@link GAUSSIAN_CUTOFF} the gaussian half has underflowed and is\n    // dropped under the same condition as in `pseudoVoigtFct` — which this shape's\n    // own `fct` delegates to, so the value and its derivatives stay consistent out\n    // there. `fwhmL = 0` gives `mu = 1`, the pure gaussian that is never dropped.\n    const z = x / effectiveFwhm;\n    const e = mu !== 1 && z * z > GAUSSIAN_CUTOFF\n        ? 0\n        : Math.exp(GAUSSIAN_EXP_FACTOR * z * z);\n    const denominator2 = 4 * x * x + effectiveFwhm * effectiveFwhm;\n    const lorentz = (effectiveFwhm * effectiveFwhm) / denominator2;\n    const dEdt = ((2 * GAUSSIAN_EXP_FACTOR * x) / (effectiveFwhm * effectiveFwhm)) * e;\n    const dLdt = (-8 * x * effectiveFwhm * effectiveFwhm) / (denominator2 * denominator2);\n    const dEdfwhm = ((-2 * GAUSSIAN_EXP_FACTOR * x * x) /\n        (effectiveFwhm * effectiveFwhm * effectiveFwhm)) *\n        e;\n    const dLdfwhm = (8 * effectiveFwhm * x * x) / (denominator2 * denominator2);\n    const dFwhm = (1 - mu) * dLdfwhm + mu * dEdfwhm;\n    const dMu = e - lorentz;\n    return {\n        fct: (1 - mu) * lorentz + mu * e,\n        dx: (1 - mu) * dLdt + mu * dEdt,\n        dFwhmG: dFwhm * dFwhmDfwhmG + dMu * dMuDfwhmG,\n        dFwhmL: dFwhm * dFwhmDfwhmL + dMu * dMuDfwhmL,\n    };\n}\n/**\n * Compute the effective FWHM from gaussian and lorentzian component widths\n * using the Thompson–Cox–Hastings approximation.\n * @param fwhmG - gaussian component FWHM.\n * @param fwhmL - lorentzian component FWHM.\n * @returns effective combined FWHM.\n */\nfunction computeEffectiveWidth(fwhmG, fwhmL) {\n    return ((fwhmG ** 5 +\n        2.69269 * fwhmG ** 4 * fwhmL +\n        2.42843 * fwhmG ** 3 * fwhmL ** 2 +\n        4.47163 * fwhmG ** 2 * fwhmL ** 3 +\n        0.07842 * fwhmG * fwhmL ** 4 +\n        fwhmL ** 5) **\n        0.2);\n}\n/**\n * Solve for the lorentzian width fraction fwhmL/fwhm given lorentzianFraction = 1 - mu,\n * using Newton's method on: 1.36603·x - 0.47719·x² + 0.11116·x³ = lorentzianFraction.\n * @param lorentzianFraction - TCH lorentzian mixing parameter (= 1 - mu).\n * @returns the lorentzian width fraction fwhmL/fwhm.\n */\nfunction lorentzianWidthFraction(lorentzianFraction) {\n    let fraction = lorentzianFraction;\n    for (let i = 0; i < 6; i++) {\n        const f = 1.36603 * fraction -\n            0.47719 * fraction * fraction +\n            0.11116 * fraction * fraction * fraction -\n            lorentzianFraction;\n        const df = 1.36603 - 2 * 0.47719 * fraction + 3 * 0.11116 * fraction * fraction;\n        fraction -= f / df;\n    }\n    return fraction;\n}\n/**\n * Solve for the gaussian width fraction fwhmG/fwhm that pairs with a given\n * lorentzian width fraction fwhmL/fwhm. Writing fwhmG = g·fwhm and\n * fwhmL = q·fwhm in {@link computeEffectiveWidth} makes fwhm cancel, so `g` is\n * the root of the TCH width polynomial evaluated at 1. Solving it — rather than\n * taking `1 - q` — is what keeps `computeEffectiveWidth(fwhmG, fwhmL)` equal to\n * `fwhm`, and therefore keeps `fct` and `derivative` describing one same curve.\n * @param lorentzianFraction - the lorentzian width fraction fwhmL/fwhm.\n * @returns the gaussian width fraction fwhmG/fwhm.\n */\nfunction gaussianWidthFraction(lorentzianFraction) {\n    const q = lorentzianFraction;\n    let g = 1 - q;\n    for (let i = 0; i < 8; i++) {\n        const f = g ** 5 +\n            2.69269 * g ** 4 * q +\n            2.42843 * g ** 3 * q ** 2 +\n            4.47163 * g ** 2 * q ** 3 +\n            0.07842 * g * q ** 4 +\n            q ** 5 -\n            1;\n        const df = 5 * g ** 4 +\n            10.77076 * g ** 3 * q +\n            7.28529 * g ** 2 * q ** 2 +\n            8.94326 * g * q ** 3 +\n            0.07842 * q ** 4;\n        if (df === 0)\n            break;\n        g -= f / df;\n    }\n    return g;\n}\n//# sourceMappingURL=PseudoVoigtTCH.js.map","import { ROOT_THREE } from \"../../../util/constants.js\";\n/**\n * This shape is a linear combination of rational function (n|n+2), for n = 0 (lorentzian function) and n = 2\n * the parameter that combines those two functions is `gamma` and it is called the kurtosis parameter, it is an\n * implementation of generalized lorentzian shape published by Stanislav Sykora in the SMASH 2010. DOI:10.3247/SL3nmr10.006\n * {@link https://www.ebyte.it/stan/Talk_ML_UserMeeting_SMASH_2010_GeneralizedLorentzian.html}\n */\nexport class GeneralizedLorentzian {\n    kind = 'generalizedLorentzian';\n    /**\n     * Full width at half maximum.\n     * @default 500\n     */\n    fwhm;\n    /**\n     * kurtosis parameter of the shape, between -1 to 2\n     * @default 1\n     */\n    gamma;\n    constructor(options = {}) {\n        const { fwhm = 500, gamma = 0.5 } = options;\n        this.fwhm = fwhm;\n        this.gamma = gamma;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return generalizedLorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return generalizedLorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return generalizedLorentzianFct(x, this.fwhm, this.gamma);\n    }\n    getArea(height = 1) {\n        return getGeneralizedLorentzianArea({\n            fwhm: this.fwhm,\n            height,\n            gamma: this.gamma,\n        });\n    }\n    getFactor(area) {\n        return getGeneralizedLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getGeneralizedLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        const { gamma, fwhm } = this;\n        return calculateGeneralizedLorentzianHeight({ fwhm, area, gamma });\n    }\n    getParameters() {\n        return ['fwhm', 'gamma'];\n    }\n    /**\n     * Descriptor of this shape, so `JSON.stringify` round-trips through `getShape1D`.\n     * @returns the shape descriptor.\n     */\n    toJSON() {\n        return { kind: this.kind, fwhm: this.fwhm, gamma: this.gamma };\n    }\n    derivative(x) {\n        const { fct, dx, dFwhm, dGamma } = generalizedLorentzianDerivative(x, this.fwhm, this.gamma);\n        return { fct, dx, parameters: [dFwhm, dGamma] };\n    }\n}\nexport const calculateGeneralizedLorentzianHeight = ({ fwhm = 1, gamma = 1, area = 1, }) => {\n    return (area / fwhm / (3.14159 - 0.420894 * gamma)) * 2;\n};\n/**\n * Calculate the area under a generalized Lorentzian peak (integral from Mathematica).\n * @param options - shape parameters including fwhm, height, and gamma.\n * @returns the area under the peak.\n */\nexport const getGeneralizedLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1, gamma = 1 } = options;\n    return (height * fwhm * (3.14159 - 0.420894 * gamma)) / 2;\n};\nexport const generalizedLorentzianFct = (x, fwhm, gamma) => {\n    const u = ((2 * x) / fwhm) ** 2;\n    return (1 - gamma) / (1 + u) + (gamma * (1 + u / 2)) / (1 + u + u ** 2);\n};\n/**\n * Analytical value and partial derivatives of the generalized lorentzian function centered at x=0.\n * @param x - position at which to evaluate.\n * @param fwhm - full width at half maximum.\n * @param gamma - kurtosis parameter of the shape.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`), `fwhm` (`dFwhm`) and `gamma` (`dGamma`).\n */\nexport function generalizedLorentzianDerivative(x, fwhm, gamma) {\n    const u = ((2 * x) / fwhm) ** 2;\n    const lorentzian = 1 / (1 + u); // A\n    const rational = (1 + u / 2) / (1 + u + u * u); // B\n    const fct = (1 - gamma) * lorentzian + gamma * rational;\n    // dA/du and dB/du\n    const dLorentzianDu = -1 / ((1 + u) * (1 + u));\n    const denominator = 1 + u + u * u;\n    const dRationalDu = -(0.5 + 2 * u + 0.5 * u * u) / (denominator * denominator);\n    const dFctDu = (1 - gamma) * dLorentzianDu + gamma * dRationalDu;\n    const duDx = (8 * x) / (fwhm * fwhm);\n    const duDfwhm = (-8 * x * x) / (fwhm * fwhm * fwhm);\n    const dx = dFctDu * duDx;\n    const dFwhm = dFctDu * duDfwhm;\n    const dGamma = rational - lorentzian; // B - A\n    return { fct, dx, dFwhm, dGamma };\n}\nexport const generalizedLorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const generalizedLorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nconst generalizedLorentzianQuantile = (p) => Math.tan(Math.PI * (p - 0.5));\nexport const getGeneralizedLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    return ((generalizedLorentzianQuantile(1 - halfResidual) -\n        generalizedLorentzianQuantile(halfResidual)) /\n        2);\n};\nexport const getGeneralizedLorentzianData = (shape = {}, options = {}) => {\n    const { fwhm = 500, gamma = 1 } = shape;\n    const { factor = getGeneralizedLorentzianFactor(), height = calculateGeneralizedLorentzianHeight({ fwhm, area: 1, gamma }), } = options;\n    let { length } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), 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        const value = generalizedLorentzianFct(i - center, fwhm, gamma) * height;\n        data[i] = value;\n        data[length - 1 - i] = value;\n    }\n    return data;\n};\n//# sourceMappingURL=GeneralizedLorentzian.js.map","import { ROOT_PI_OVER_LN2 } from \"../../../util/constants.js\";\nimport { gaussianDerivative, gaussianFct, gaussianFwhmToWidth, gaussianWidthToFWHM, getGaussianFactor, } from \"../gaussian/Gaussian.js\";\nexport class SplitGaussian {\n    kind = 'splitGaussian';\n    /**\n     * Full width at half maximum of the lower-x half (x <= 0).\n     * @default 500\n     */\n    fwhmLow;\n    /**\n     * Full width at half maximum of the higher-x half (x > 0).\n     * @default 500\n     */\n    fwhmHigh;\n    constructor(options = {}) {\n        const { fwhmLow = 500, fwhmHigh = 500 } = options;\n        this.fwhmLow = fwhmLow;\n        this.fwhmHigh = fwhmHigh;\n    }\n    /**\n     * Full width at half maximum of the peak. The half-maximum crossings are at\n     * `-fwhmLow / 2` and `fwhmHigh / 2`, so the width between them is the mean of\n     * both halves.\n     * @returns the full width at half maximum.\n     */\n    get fwhm() {\n        return (this.fwhmLow + this.fwhmHigh) / 2;\n    }\n    /**\n     * Set the full width at half maximum. Both halves are scaled by the same\n     * ratio, so their mean becomes `value` while the asymmetry between them is\n     * preserved. A peak with no width has no ratio to preserve, so both halves\n     * take `value` and the peak stays symmetric.\n     * @param value - the new full width at half maximum.\n     */\n    set fwhm(value) {\n        const { fwhm } = this;\n        if (fwhm === 0) {\n            this.fwhmLow = value;\n            this.fwhmHigh = value;\n            return;\n        }\n        const ratio = value / fwhm;\n        this.fwhmLow *= ratio;\n        this.fwhmHigh *= ratio;\n    }\n    /**\n     * Convert a full width at half maximum to the width between the inflection\n     * points. For this peak's own fwhm the result is exactly `σlow + σhigh`.\n     * @param fwhm - full width at half maximum. Defaults to the peak's fwhm.\n     * @returns the width between the inflection points.\n     */\n    fwhmToWidth(fwhm = this.fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    /**\n     * Convert a width between the inflection points back to a full width at half\n     * maximum. A single width does not encode the asymmetry, so it cannot recover\n     * `fwhmLow` and `fwhmHigh` individually.\n     * @param width - width between the inflection points.\n     * @returns the corresponding full width at half maximum.\n     */\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fct(x) {\n        return splitGaussianFct(x, this.fwhmLow, this.fwhmHigh);\n    }\n    getArea(height = calculateSplitGaussianHeight({\n        fwhmLow: this.fwhmLow,\n        fwhmHigh: this.fwhmHigh,\n    })) {\n        return getSplitGaussianArea({\n            fwhmLow: this.fwhmLow,\n            fwhmHigh: this.fwhmHigh,\n            height,\n        });\n    }\n    getFactor(area) {\n        return getGaussianFactor(area);\n    }\n    getData(options = {}) {\n        return getSplitGaussianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateSplitGaussianHeight({\n            fwhmLow: this.fwhmLow,\n            fwhmHigh: this.fwhmHigh,\n            area,\n        });\n    }\n    getParameters() {\n        return ['fwhmLow', 'fwhmHigh'];\n    }\n    /**\n     * Descriptor of this shape, so `JSON.stringify` round-trips through `getShape1D`.\n     * @returns the shape descriptor.\n     */\n    toJSON() {\n        return {\n            kind: this.kind,\n            fwhmLow: this.fwhmLow,\n            fwhmHigh: this.fwhmHigh,\n        };\n    }\n    derivative(x) {\n        const { fct, dx, dFwhmLow, dFwhmHigh } = splitGaussianDerivative(x, this.fwhmLow, this.fwhmHigh);\n        return { fct, dx, parameters: [dFwhmLow, dFwhmHigh] };\n    }\n}\n/**\n * Calculate the peak height for a given area and both half-widths.\n * @param options - fwhmLow, fwhmHigh and area.\n * @returns the peak height.\n */\nexport function calculateSplitGaussianHeight(options) {\n    const { fwhmLow = 500, fwhmHigh = 500, area = 1 } = options;\n    return (4 * area) / ROOT_PI_OVER_LN2 / (fwhmLow + fwhmHigh);\n}\n/**\n * Evaluate the split (asymmetric) gaussian function centered at x=0.\n * The lower-x half (x <= 0) uses `fwhmLow`, the higher-x half (x > 0) uses `fwhmHigh`.\n * @param x - position at which to evaluate.\n * @param fwhmLow - full width at half maximum of the lower-x half.\n * @param fwhmHigh - full width at half maximum of the higher-x half.\n * @returns the intensity at x.\n */\nexport function splitGaussianFct(x, fwhmLow, fwhmHigh) {\n    return x <= 0 ? gaussianFct(x, fwhmLow) : gaussianFct(x, fwhmHigh);\n}\n/**\n * Analytical value and partial derivatives of the split gaussian function centered at x=0.\n * Each half's fwhm only affects its own side, so the off-side derivative is 0.\n * @param x - position at which to evaluate.\n * @param fwhmLow - full width at half maximum of the lower-x half.\n * @param fwhmHigh - full width at half maximum of the higher-x half.\n * @returns the value `fct` and its partial derivatives with respect to `x` (`dx`), `fwhmLow` (`dFwhmLow`) and `fwhmHigh` (`dFwhmHigh`).\n */\nexport function splitGaussianDerivative(x, fwhmLow, fwhmHigh) {\n    if (x <= 0) {\n        const { fct, dx, dFwhm } = gaussianDerivative(x, fwhmLow);\n        return { fct, dx, dFwhmLow: dFwhm, dFwhmHigh: 0 };\n    }\n    const { fct, dx, dFwhm } = gaussianDerivative(x, fwhmHigh);\n    return { fct, dx, dFwhmLow: 0, dFwhmHigh: dFwhm };\n}\n/**\n * Calculate the area under a split gaussian peak.\n * @param options - fwhmLow, fwhmHigh and height.\n * @returns the area.\n */\nexport function getSplitGaussianArea(options) {\n    const { fwhmLow = 500, fwhmHigh = 500, height = 1 } = options;\n    return (height * ROOT_PI_OVER_LN2 * (fwhmLow + fwhmHigh)) / 4;\n}\n/**\n * Generate an intensity array for a split gaussian shape.\n * @param shape - split gaussian shape parameters (fwhmLow, fwhmHigh).\n * @param options - sampling options (length, factor, height).\n * @returns Float64Array of intensity values.\n */\nexport function getSplitGaussianData(shape = {}, options = {}) {\n    const { fwhmLow = 500, fwhmHigh = 500 } = shape;\n    const { factor = getGaussianFactor(), height = calculateSplitGaussianHeight({ fwhmLow, fwhmHigh }), } = options;\n    let { length } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(Math.max(fwhmLow, fwhmHigh) * factor), 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 < length; i++) {\n        data[i] = splitGaussianFct(i - center, fwhmLow, fwhmHigh) * height;\n    }\n    return data;\n}\n//# sourceMappingURL=SplitGaussian.js.map","import { Gaussian } from \"./gaussian/Gaussian.js\";\nimport { GeneralizedLorentzian } from \"./generalizedLorentzian/GeneralizedLorentzian.js\";\nimport { Lorentzian } from \"./lorentzian/Lorentzian.js\";\nimport { LorentzianDispersive } from \"./lorentzianDispersive/LorentzianDispersive.js\";\nimport { PseudoVoigt } from \"./pseudoVoigt/PseudoVoigt.js\";\nimport { PseudoVoigtTCH } from \"./pseudoVoigtTCH/PseudoVoigtTCH.js\";\nimport { SplitGaussian } from \"./splitGaussian/SplitGaussian.js\";\nexport function getShape1D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shape);\n        case 'lorentzian':\n            return new Lorentzian(shape);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shape);\n        case 'pseudoVoigtTCH':\n            return new PseudoVoigtTCH(shape);\n        case 'lorentzianDispersive':\n            return new LorentzianDispersive(shape);\n        case 'generalizedLorentzian':\n            return new GeneralizedLorentzian(shape);\n        case 'splitGaussian':\n            return new SplitGaussian(shape);\n        default:\n            throw new Error(`Unknown distribution ${kind}`);\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","/**\n * This function returns the sumOfShapes function\n * This function gives sumOfShapes access to the peak list and the associated data\n * @param internalPeaks\n */\nexport function getSumOfShapes(internalPeaks) {\n    return function sumOfShapes(parameters) {\n        for (const peak of internalPeaks) {\n            for (let i = 2; i < peak.parameters.length; i++) {\n                const shapeFctKey = peak.parameters[i];\n                peak.shapeFct[shapeFctKey] = parameters[peak.fromIndex + i];\n            }\n        }\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                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 * @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 || 'unreachable');\n    }\n}\n//# sourceMappingURL=assert.js.map","import { xMean } from 'ml-spectra-processing';\nimport { assert } from \"./assert.js\";\n/**\n * Build an optimization layout mapping actual per-peak parameter slots\n * to optimizer variables. The layout describes slots, grouped/shared\n * variables, variable bounds/initials, and provides a helper to\n * materialize actual peak parameter values from a variable vector.\n * @param internalPeaks - normalized internal peaks with parameter indices\n * @param peaks - original peak objects (for per-peak optimize flags)\n * @param options - user `OptimizeOptions`, may contain `linkedParameters`\n * @param yScale - y normalization factor (used when converting offsets)\n * @returns an `OptimizationLayout` describing variables and slots\n */\nexport function buildOptimizationLayout(internalPeaks, peaks, options, yScale = 1) {\n    const slots = buildParameterSlots(internalPeaks, peaks, options);\n    const variables = buildOptimizationVariables(slots, options.linkedParameters, yScale);\n    const variableMin = new Float64Array(variables.length);\n    const variableMax = new Float64Array(variables.length);\n    const variableInit = new Float64Array(variables.length);\n    const variableGrad = new Float64Array(variables.length);\n    const freeIndices = [];\n    for (let i = 0; i < variables.length; i++) {\n        const variable = variables[i];\n        variableMin[i] = variable.min;\n        variableMax[i] = variable.max;\n        variableInit[i] = variable.init;\n        variableGrad[i] = variable.gradientDifference;\n        if (variable.optimize) {\n            freeIndices.push(i);\n        }\n    }\n    return {\n        slots,\n        variables,\n        freeIndices,\n        variableMin,\n        variableMax,\n        variableInit,\n        variableGrad,\n        variableToPeakValues(variableValues) {\n            const actualValues = new Array(slots.length);\n            for (let i = 0; i < variables.length; i++) {\n                const variableValue = variableValues[i];\n                const members = variables[i].members;\n                for (const member of members) {\n                    actualValues[member.actualIndex] =\n                        variableValue * member.factor + member.offset;\n                }\n            }\n            return actualValues;\n        },\n    };\n}\n/**\n * Builds concrete parameter slots for each peak parameter.\n * @param internalPeaks - normalized peaks containing parameter metadata\n * @param peaks - original peaks used to resolve optimize flags\n * @param options - optimization options with parameter settings\n * @returns flattened parameter slots across all peaks\n */\nfunction buildParameterSlots(internalPeaks, peaks, options) {\n    const slots = [];\n    for (let peakIndex = 0; peakIndex < internalPeaks.length; peakIndex++) {\n        const internalPeak = internalPeaks[peakIndex];\n        for (let i = 0; i < internalPeak.parameters.length; i++) {\n            const parameter = internalPeak.parameters[i];\n            slots.push({\n                actualIndex: internalPeak.fromIndex + i,\n                peakIndex,\n                peakId: internalPeak.id,\n                parameter,\n                init: internalPeak.propertiesValues.init[i],\n                min: internalPeak.propertiesValues.min[i],\n                max: internalPeak.propertiesValues.max[i],\n                gradientDifference: internalPeak.propertiesValues.gradientDifference[i],\n                optimize: getOptimizeFlag(peaks[peakIndex], parameter, options),\n            });\n        }\n    }\n    return slots;\n}\n/**\n * Builds optimization variables from concrete parameter slots.\n * @param slots - flattened per-peak parameter slots\n * @param linkedParameters - optional linked parameter groups\n * @param yScale - y normalization factor for y-offset conversion\n * @returns sorted optimization variables ready for the optimizer\n */\nfunction buildOptimizationVariables(slots, linkedParameters, yScale) {\n    const groupedActualIndices = new Set();\n    const variables = [];\n    const slotLookup = new Map();\n    const idToIndices = new Map();\n    for (const slot of slots) {\n        slotLookup.set(getSlotKey(slot.peakIndex, slot.parameter), slot);\n        if (slot.peakId) {\n            const indices = idToIndices.get(slot.peakId) ?? [];\n            if (!indices.includes(slot.peakIndex)) {\n                indices.push(slot.peakIndex);\n            }\n            idToIndices.set(slot.peakId, indices);\n        }\n    }\n    for (const linkedParameter of linkedParameters ?? []) {\n        variables.push(buildLinkedVariable(linkedParameter, slotLookup, groupedActualIndices, idToIndices, yScale));\n    }\n    for (const slot of slots) {\n        if (groupedActualIndices.has(slot.actualIndex)) {\n            continue;\n        }\n        variables.push({\n            sortKey: slot.actualIndex,\n            parameter: slot.parameter,\n            init: slot.init,\n            min: slot.min,\n            max: slot.max,\n            gradientDifference: slot.gradientDifference,\n            optimize: slot.optimize,\n            members: [\n                {\n                    actualIndex: slot.actualIndex,\n                    peakIndex: slot.peakIndex,\n                    parameter: slot.parameter,\n                    factor: 1,\n                    offset: 0,\n                },\n            ],\n        });\n    }\n    variables.sort((a, b) => a.sortKey - b.sortKey);\n    return variables.map(({ sortKey: _sortKey, ...variable }) => variable);\n}\nfunction buildLinkedVariable(linkedParameter, slotLookup, groupedActualIndices, idToIndices, yScale) {\n    if (linkedParameter.peaks.length === 0) {\n        throw new Error(`Linked parameter for ${linkedParameter.parameter} must contain at least one peak`);\n    }\n    const resolvedMembers = linkedParameter.peaks.map((peak) => {\n        const slot = resolveLinkedSlot(peak, linkedParameter.parameter, slotLookup, idToIndices);\n        if (groupedActualIndices.has(slot.actualIndex)) {\n            throw new Error(`Peak ${String(peak.id)} parameter ${linkedParameter.parameter} is already linked`);\n        }\n        return {\n            slot,\n            factor: getFactor(peak, linkedParameter.parameter),\n            offset: getOffset(peak, linkedParameter.parameter, yScale),\n        };\n    });\n    const memberActualIndices = new Set();\n    for (const member of resolvedMembers) {\n        if (memberActualIndices.has(member.slot.actualIndex)) {\n            throw new Error(`Linked parameter for ${linkedParameter.parameter} contains the same peak more than once`);\n        }\n        memberActualIndices.add(member.slot.actualIndex);\n    }\n    const firstMember = resolvedMembers[0];\n    let sharedMin = Number.NEGATIVE_INFINITY;\n    let sharedMax = Number.POSITIVE_INFINITY;\n    const optimize = firstMember.slot.optimize;\n    const sharedInitCandidates = [];\n    for (const member of resolvedMembers) {\n        if (member.slot.optimize !== optimize) {\n            throw new Error(`Linked parameter ${linkedParameter.parameter} must use a consistent optimize flag across all members`);\n        }\n        if (member.slot.min > member.slot.max) {\n            throw new Error(`Linked parameter ${linkedParameter.parameter} has incompatible bounds across its members`);\n        }\n        const variableBounds = getMemberVariableBounds(member);\n        sharedMin = Math.max(sharedMin, variableBounds.min);\n        sharedMax = Math.min(sharedMax, variableBounds.max);\n        sharedInitCandidates.push((member.slot.init - member.offset) / member.factor);\n    }\n    if (sharedMin > sharedMax) {\n        throw new Error(`Linked parameter ${linkedParameter.parameter} has incompatible bounds across its members`);\n    }\n    for (const member of resolvedMembers) {\n        groupedActualIndices.add(member.slot.actualIndex);\n    }\n    return {\n        sortKey: Math.min(...resolvedMembers.map((member) => member.slot.actualIndex)),\n        parameter: linkedParameter.parameter,\n        init: xMean(sharedInitCandidates),\n        min: sharedMin,\n        max: sharedMax,\n        gradientDifference: Math.min(...resolvedMembers.map((m) => Math.abs(m.slot.gradientDifference))),\n        optimize,\n        members: resolvedMembers.map((member) => ({\n            actualIndex: member.slot.actualIndex,\n            peakIndex: member.slot.peakIndex,\n            parameter: member.slot.parameter,\n            factor: member.factor,\n            offset: member.offset,\n        })),\n    };\n}\nfunction resolveLinkedSlot(peak, parameter, slotLookup, idToIndices) {\n    const peakIndex = typeof peak.id === 'number'\n        ? peak.id\n        : resolvePeakIndexById(peak.id, idToIndices);\n    if (!Number.isInteger(peakIndex) || peakIndex < 0) {\n        throw new Error(`Invalid peak reference ${String(peak.id)}`);\n    }\n    const slot = slotLookup.get(getSlotKey(peakIndex, parameter));\n    if (!slot) {\n        throw new Error(`Unknown parameter ${parameter} for peak ${String(peak.id)}`);\n    }\n    return slot;\n}\nfunction resolvePeakIndexById(peakId, idToIndices) {\n    const indices = idToIndices.get(peakId);\n    if (!indices || indices.length === 0) {\n        throw new Error(`Unknown peak id ${peakId}`);\n    }\n    if (new Set(indices).size > 1) {\n        throw new Error(`Peak id ${peakId} is ambiguous because it is used by multiple peaks`);\n    }\n    return indices[0];\n}\nfunction getFactor(peak, parameter) {\n    const factor = peak.factor ?? 1;\n    if (!Number.isFinite(factor) || factor === 0) {\n        throw new Error(`Linked parameter ${parameter} must use a non-zero finite factor`);\n    }\n    return factor;\n}\nfunction getOffset(peak, parameter, yScale) {\n    const offset = peak.offset ?? 0;\n    if (!Number.isFinite(offset)) {\n        throw new Error(`Linked parameter ${parameter} must use a finite offset`);\n    }\n    if (parameter === 'y') {\n        return offset / yScale;\n    }\n    return offset;\n}\nfunction getMemberVariableBounds(member) {\n    const transformedMin = (member.slot.min - member.offset) / member.factor;\n    const transformedMax = (member.slot.max - member.offset) / member.factor;\n    return {\n        min: Math.min(transformedMin, transformedMax),\n        max: Math.max(transformedMin, transformedMax),\n    };\n}\nfunction getOptimizeFlag(peak, parameter, options) {\n    assert(peak);\n    let optimizeFlag = true;\n    const perPeakParam = peak.parameters?.[parameter];\n    const globalParam = options.parameters?.[parameter];\n    if (perPeakParam?.optimize !== undefined) {\n        if (typeof perPeakParam.optimize === 'function') {\n            optimizeFlag = perPeakParam.optimize(peak);\n        }\n        else {\n            const { optimize = true } = perPeakParam;\n            optimizeFlag = optimize;\n        }\n    }\n    else if (globalParam?.optimize !== undefined) {\n        if (typeof globalParam.optimize === 'function') {\n            optimizeFlag = globalParam.optimize(peak);\n        }\n        else {\n            const { optimize = true } = globalParam;\n            optimizeFlag = optimize;\n        }\n    }\n    return optimizeFlag;\n}\nfunction getSlotKey(peakIndex, parameter) {\n    return `${peakIndex}:${parameter}`;\n}\n//# sourceMappingURL=buildOptimizationLayout.js.map","/**\n * Reconstruct user-facing peak objects from internal peaks and a full\n * actual-parameter vector.\n * @template T - original Peak type\n * @param internalPeaks - internal peaks produced by `getInternalPeaks`\n * @param actualValues - flattened actual parameter values (not normalized for Y)\n * @param yScale - normalization factor previously applied to Y values\n * @returns array of optimized peaks with reconstructed shapes and ids\n */\nexport function reconstructPeaks(internalPeaks, actualValues, yScale) {\n    const newPeaks = [];\n    for (const peak of internalPeaks) {\n        const { id, shape, parameters, fromIndex } = peak;\n        let newPeak = { x: 0, y: 0, shape };\n        if (id) {\n            newPeak = { ...newPeak, id };\n        }\n        newPeak.x = actualValues[fromIndex];\n        newPeak.y = actualValues[fromIndex + 1] * yScale;\n        for (let i = 2; i < parameters.length; i++) {\n            //@ts-expect-error should be fixed once\n            newPeak.shape[parameters[i]] = actualValues[fromIndex + i];\n        }\n        newPeaks.push(newPeak);\n    }\n    return newPeaks;\n}\n//# sourceMappingURL=reconstructPeaks.js.map","import { reconstructPeaks } from \"./reconstructPeaks.js\";\n/**\n * Build result when no parameters are free to optimize.\n * Computes the fit error using the provided `globalInit` parameter vector\n * and reconstructs the output peak objects from `internalPeaks`.\n * @template T - input Peak type\n * @param internalPeaks - internal representation of peaks (with parameter indices)\n * @param normalizedY - observed Y values normalized by the global scale\n * @param x - X axis values\n * @param globalInit - full parameter vector (actual-space) used to evaluate the model\n * @param baseSumOfShapes - function that returns the spectrum function given parameters\n * @param yScale - the scale factor used to normalize Y (used to reconstruct peak amplitudes)\n * @returns an object containing `error`, `iterations` (0) and the reconstructed `peaks`\n */\nexport function getFixedParametersResult(internalPeaks, normalizedY, x, globalInit, baseSumOfShapes, yScale) {\n    const fct = baseSumOfShapes(globalInit);\n    let error = 0;\n    for (let i = 0; i < normalizedY.length; i++) {\n        error += (normalizedY[i] - fct(x[i])) ** 2;\n    }\n    return {\n        error,\n        iterations: 0,\n        peaks: reconstructPeaks(internalPeaks, globalInit, yScale),\n    };\n}\n//# sourceMappingURL=getFixedParametersResult.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    fwhmG: {\n        init: (peak, peakShape) => peakShape.fwhm * 0.6,\n        min: (peak, peakShape) => peakShape.fwhm * 0.6 * 0.25,\n        max: (peak, peakShape) => peakShape.fwhm * 0.6 * 4,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 0.6 * 2e-3,\n    },\n    fwhmL: {\n        init: (peak, peakShape) => peakShape.fwhm * 0.4,\n        min: (peak, peakShape) => peakShape.fwhm * 0.4 * 0.25,\n        max: (peak, peakShape) => peakShape.fwhm * 0.4 * 4,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 0.4 * 2e-3,\n    },\n    mu: {\n        init: (peak, peakShape) => peakShape.mu,\n        min: () => 0,\n        max: () => 1,\n        gradientDifference: () => 0.01,\n    },\n    gamma: {\n        init: (peak, peakShape) => peakShape.gamma || 0.5,\n        min: () => -1,\n        max: () => 2,\n        gradientDifference: () => 0.01,\n    },\n};\n//# sourceMappingURL=DefaultParameters.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { assert } from \"../assert.js\";\nimport { DefaultParameters } from \"./DefaultParameters.js\";\nconst properties = ['init', 'min', 'max', 'gradientDifference'];\n/**\n * Return an array of internalPeaks that contains the exact init, min, max values based on the options\n * @param peaks\n * @param minMaxY\n * @param yScale\n * @param options\n * @returns\n */\nexport function getInternalPeaks(peaks, yScale, options = {}) {\n    let index = 0;\n    const internalPeaks = [];\n    for (const originalPeak of peaks) {\n        const normalizedPeak = {\n            ...originalPeak,\n            y: originalPeak.y / yScale,\n        };\n        const peak = normalizedPeak;\n        const { id, shape = options.shape || { kind: 'gaussian' } } = peak;\n        const shapeFct = getShape1D(shape);\n        const parameters = ['x', 'y', ...shapeFct.getParameters()];\n        const propertiesValuesInternal = {\n            min: [],\n            max: [],\n            init: [],\n            gradientDifference: [],\n        };\n        for (const parameter of parameters) {\n            for (const property of properties) {\n                // check if the property is specified in the peak\n                let propertyValue = peak?.parameters?.[parameter]?.[property];\n                if (propertyValue !== undefined) {\n                    propertyValue = getNormalizedValue(propertyValue, parameter, property, yScale);\n                    propertiesValuesInternal[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 !== undefined) {\n                    if (typeof generalParameterValue === 'number') {\n                        generalParameterValue = getNormalizedValue(generalParameterValue, parameter, property, yScale);\n                        propertiesValuesInternal[property].push(generalParameterValue);\n                        continue;\n                    }\n                    else {\n                        // callbacks receive user-provided peak values (not Y-normalized)\n                        let value = generalParameterValue(originalPeak);\n                        value = getNormalizedValue(value, parameter, property, yScale);\n                        propertiesValuesInternal[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                propertiesValuesInternal[property].push(\n                //@ts-expect-error parameters and shape instance are guaranteed to be present in the defaultParameterValues function\n                defaultParameterValues(peak, shapeFct));\n            }\n        }\n        const fromIndex = index;\n        const toIndex = fromIndex + parameters.length - 1;\n        index += toIndex - fromIndex + 1;\n        const propertiesValues = {\n            min: propertiesValuesInternal.min,\n            max: propertiesValuesInternal.max,\n            init: propertiesValuesInternal.init,\n            gradientDifference: propertiesValuesInternal.gradientDifference,\n        };\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, yScale) {\n    if (parameter === 'y') {\n        if (property === 'gradientDifference') {\n            return value;\n        }\n        else {\n            return value / yScale;\n        }\n    }\n    return value;\n}\n//# sourceMappingURL=getInternalPeaks.js.map","import { isAnyArray } from 'is-any-array';\nexport default function checkOptions(data, options) {\n    const { timeout, initialValues, weights = 1, damping = 1e-2, dampingStepUp = 11, dampingStepDown = 9, maxIterations = 100, errorTolerance = 1e-7, centralDifference = false, gradientDifference = 10e-2, improvementThreshold = 1e-3, } = options;\n    let { minValues, maxValues } = options;\n    if (damping <= 0) {\n        throw new Error('The damping option must be a positive number');\n    }\n    else if (!data.x || !data.y) {\n        throw new Error('The data parameter must have x and y elements');\n    }\n    else if (!isAnyArray(data.x) ||\n        data.x.length < 2 ||\n        !isAnyArray(data.y) ||\n        data.y.length < 2) {\n        throw new Error('The data parameter elements must be an array with more than 2 points');\n    }\n    else if (data.x.length !== data.y.length) {\n        throw new Error('The data parameter elements must have the same size');\n    }\n    if (!(initialValues && initialValues.length > 0)) {\n        throw new Error('The initialValues option is mandatory and must be an array');\n    }\n    const parameters = Array.from(initialValues);\n    const parLen = parameters.length;\n    maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n    minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n    if (maxValues.length !== minValues.length) {\n        throw new Error('minValues and maxValues must be the same size');\n    }\n    const gradientDifferenceArray = getGradientDifferenceArray(gradientDifference, parameters);\n    const filler = getFiller(weights, data.x.length);\n    const checkTimeout = getCheckTimeout(timeout);\n    const weightSquare = Array.from({ length: data.x.length }, (_, i) => filler(i));\n    return {\n        checkTimeout,\n        minValues,\n        maxValues,\n        parameters,\n        weightSquare,\n        damping,\n        dampingStepUp,\n        dampingStepDown,\n        maxIterations,\n        errorTolerance,\n        centralDifference,\n        gradientDifference: gradientDifferenceArray,\n        improvementThreshold,\n    };\n}\nfunction getGradientDifferenceArray(gradientDifference, parameters) {\n    if (typeof gradientDifference === 'number') {\n        return new Array(parameters.length).fill(gradientDifference);\n    }\n    else if (isAnyArray(gradientDifference)) {\n        const parLen = parameters.length;\n        if (gradientDifference.length !== parLen) {\n            return new Array(parLen).fill(gradientDifference[0]);\n        }\n        return Array.from(gradientDifference);\n    }\n    throw new Error('gradientDifference should be a number or array with length equal to the number of parameters');\n}\nfunction getFiller(weights, dataLength) {\n    if (typeof weights === 'number') {\n        const value = 1 / weights ** 2;\n        return () => value;\n    }\n    else if (isAnyArray(weights)) {\n        if (weights.length < dataLength) {\n            const value = 1 / weights[0] ** 2;\n            return () => value;\n        }\n        return (i) => 1 / weights[i] ** 2;\n    }\n    throw new Error('weights should be a number or array with length equal to the number of data points');\n}\nfunction getCheckTimeout(timeout) {\n    if (timeout !== undefined) {\n        if (typeof timeout !== 'number') {\n            throw new Error('timeout should be a number');\n        }\n        const endTime = Date.now() + timeout * 1000;\n        return () => Date.now() > endTime;\n    }\n    else {\n        return () => false;\n    }\n}\n//# sourceMappingURL=check_options.js.map","/**\n * the sum of the weighted squares of the errors (or weighted residuals) between the data.y\n * and the curve-fit function.\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameters - Array of current parameter values\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weightSquare - Square of weights (must be same length as data.x)\n */\nexport default function errorCalculation(data, parameters, parameterizedFunction, weightSquare) {\n    let error = 0;\n    const func = parameterizedFunction(parameters);\n    for (let i = 0; i < data.x.length; i++) {\n        error += (data.y[i] - func(data.x[i])) ** 2 / weightSquare[i];\n    }\n    return error;\n}\n//# sourceMappingURL=error_calculation.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @param data Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n * @param params - Array of previous parameter values\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param paramFunction - The parameters and returns a function with the independent variable as a parameter\n */\nexport default function gradientFunction(data, evaluatedData, params, gradientDifference, paramFunction, centralDifference) {\n    const nbParams = params.length;\n    const nbPoints = data.x.length;\n    const ans = Matrix.zeros(nbParams, nbPoints);\n    let rowIndex = 0;\n    for (let param = 0; param < nbParams; param++) {\n        if (gradientDifference[param] === 0)\n            continue;\n        let delta = gradientDifference[param];\n        let auxParams = params.slice();\n        auxParams[param] += delta;\n        const funcParam = paramFunction(auxParams);\n        if (!centralDifference) {\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (evaluatedData[point] - funcParam(data.x[point])) / delta);\n            }\n        }\n        else {\n            auxParams = params.slice();\n            auxParams[param] -= delta;\n            delta *= 2;\n            const funcParam2 = paramFunction(auxParams);\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta);\n            }\n        }\n        rowIndex++;\n    }\n    return ans;\n}\n//# sourceMappingURL=gradient_function.js.map","import { CholeskyDecomposition, Matrix, inverse } from 'ml-matrix';\nimport gradientFunction from \"./gradient_function.js\";\n/**\n * Builds the (nbParams x nbPoints) Jacobian of the residuals from an analytical\n * model gradient. The residual is `y - model`, so the residual Jacobian is the\n * negative of the model gradient — matching the sign convention produced by the\n * finite-difference `gradientFunction`.\n * @param data - points to fit\n * @param params - current parameter values\n * @param jacobianFunction - returns, for an x, the model partials over params\n */\nfunction analyticalGradient(data, params, jacobianFunction) {\n    const nbParams = params.length;\n    const nbPoints = data.x.length;\n    const ans = Matrix.zeros(nbParams, nbPoints);\n    const gradient = jacobianFunction(params);\n    for (let point = 0; point < nbPoints; point++) {\n        const partials = gradient(data.x[point]);\n        for (let param = 0; param < nbParams; param++) {\n            ans.set(param, point, -partials[param]);\n        }\n    }\n    return ans;\n}\n/**\n * Matrix function over the samples\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n */\nfunction matrixFunction(data, evaluatedData) {\n    const m = data.x.length;\n    const ans = new Matrix(m, 1);\n    for (let point = 0; point < m; point++) {\n        ans.set(point, 0, data.y[point] - evaluatedData[point]);\n    }\n    return ans;\n}\n/**\n * Iteration for Levenberg-Marquardt\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param params - Array of previous parameter values\n * @param damping - Levenberg-Marquardt parameter\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weights - scale the gradient and residual error by weights\n * @param jacobianFunction - optional analytical Jacobian, replaces finite differences when provided\n */\nexport default function step(data, params, damping, gradientDifference, parameterizedFunction, centralDifference, weights, jacobianFunction) {\n    const func = parameterizedFunction(params);\n    const evaluatedData = new Float64Array(data.x.length);\n    for (let i = 0; i < data.x.length; i++) {\n        evaluatedData[i] = func(data.x[i]);\n    }\n    const gradientFunc = jacobianFunction\n        ? analyticalGradient(data, params, jacobianFunction)\n        : gradientFunction(data, evaluatedData, params, gradientDifference, parameterizedFunction, centralDifference);\n    const residualError = matrixFunction(data, evaluatedData);\n    const hessianApproximation = gradientFunc.mmulByTranspose(weights);\n    for (let i = 0; i < params.length; i++) {\n        hessianApproximation.set(i, i, hessianApproximation.get(i, i) + damping);\n    }\n    const jacobianWeightResidualError = gradientFunc.mmul(residualError.scale('row', { scale: weights }));\n    // (damping * I + Jᵀ W J) is symmetric positive-definite for damping > 0, so a\n    // Cholesky solve is faster and more numerically stable than forming the full\n    // inverse and multiplying. Fall back to the inverse only in the rare case the\n    // approximated Hessian is not positive-definite.\n    const cholesky = new CholeskyDecomposition(hessianApproximation);\n    const perturbations = cholesky.isPositiveDefinite()\n        ? cholesky.solve(jacobianWeightResidualError)\n        : inverse(hessianApproximation).mmul(jacobianWeightResidualError);\n    return {\n        perturbations,\n        jacobianWeightResidualError,\n    };\n}\n//# sourceMappingURL=step.js.map","import checkOptions from \"./check_options.js\";\nimport errorCalculation from \"./error_calculation.js\";\nimport step from \"./step.js\";\n/**\n * Curve fitting algorithm\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameterizedFunction - Takes an array of parameters and returns a function with the independent variable as its sole argument\n * @param options - Options object\n */\nexport function levenbergMarquardt(data, parameterizedFunction, options) {\n    const checkedOptions = checkOptions(data, options);\n    const { checkTimeout, minValues, maxValues, parameters, weightSquare, dampingStepUp, dampingStepDown, maxIterations, errorTolerance, centralDifference, gradientDifference, improvementThreshold, } = checkedOptions;\n    let damping = checkedOptions.damping;\n    const { jacobianFunction } = 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        const previousError = error;\n        const { perturbations, jacobianWeightResidualError } = step(data, parameters, damping, gradientDifference, parameterizedFunction, centralDifference, weightSquare, jacobianFunction);\n        for (let k = 0; k < parameters.length; k++) {\n            parameters[k] = Math.min(Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)), maxValues[k]);\n        }\n        error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n        if (isNaN(error))\n            break;\n        if (error < optimalError - errorTolerance) {\n            optimalError = error;\n            optimalParameters = parameters.slice();\n        }\n        const improvementMetric = (previousError - error) /\n            perturbations\n                .transpose()\n                .mmul(perturbations.mul(damping).add(jacobianWeightResidualError))\n                .get(0, 0);\n        if (improvementMetric > improvementThreshold) {\n            damping = Math.max(damping / dampingStepDown, 1e-7);\n        }\n        else {\n            damping = Math.min(damping * dampingStepUp, 1e7);\n        }\n        if (checkTimeout()) {\n            throw new Error(`The execution time is over to ${options.timeout} seconds`);\n        }\n        converged = error <= errorTolerance;\n    }\n    return {\n        parameterValues: optimalParameters,\n        parameterError: optimalError,\n        iterations: iteration,\n    };\n}\n//# sourceMappingURL=levenberg_marquardt.js.map","/**\n * Preparata, F. P., & Shamos, M. I. (2012). Computational geometry: an introduction. Springer Science & Business Media.\n * @param {Array} x - The array with x coordinates of the points.\n * @param {Array} y - The array with y coordinates of the points.\n * @return {Array} The indices of the points of anticlockwise lower convex hull\n * @private\n */\nexport default function antiLowerConvexHull(x, y) {\n  if (x.length !== y.length) {\n    throw new RangeError('X and Y vectors has different dimensions');\n  }\n\n  const nbPoints = x.length - 1;\n  if (nbPoints === 0) return [0];\n  if (nbPoints === 1) return [0, 1];\n\n  let currentPoint = 0;\n  let result = new Array(x.length).fill(true);\n  while (true) {\n    const a = currentPoint;\n    const b = moveOn(currentPoint, nbPoints, result);\n    const c = moveOn(moveOn(currentPoint, nbPoints, result), nbPoints, result);\n\n    const det =\n      x[c] * (y[a] - y[b]) + x[a] * (y[b] - y[c]) + x[b] * (y[c] - y[a]);\n\n    const leftTurn = det >= 0;\n\n    if (leftTurn) {\n      currentPoint = b;\n    } else {\n      result[b] = false;\n      currentPoint = moveBack(currentPoint, nbPoints, result);\n    }\n    if (c === nbPoints) break;\n  }\n\n  return result\n    .map((item, index) => (item === false ? false : index))\n    .filter((item) => item !== false);\n}\n\n/**\n * @param {number} currentPoint - The index of the current point to make the move\n * @param {number} nbPoints - The total number of points in the array\n * @param {Array} vector - The array with the points\n * @return {number} the index of the point after the move\n * @private\n */\n\nfunction moveBack(currentPoint, nbPoints, vector) {\n  let counter = currentPoint - 1;\n  while (vector[counter] === false) counter--;\n  return currentPoint === 0 ? nbPoints : counter;\n}\n\nfunction moveOn(currentPoint, nbPoints, vector) {\n  let counter = currentPoint + 1;\n  while (vector[counter] === false) counter++;\n  return currentPoint === nbPoints ? 0 : counter;\n}\n","import { xNorm, xMaxValue, xMinValue } from 'ml-spectra-processing';\n\nimport antiLowerConvexHull from './util/antiLowerConvexHull';\n\n/**\n * Performs a global optimization of required parameters\n * It will return an object containing:\n * - `minFunctionValue`: The minimum value found for the objetive function\n * - `optima`: Array of Array of values for all the variables where the function reach its minimum value\n * - `iterations`: Number of iterations performed in the process\n * - `finalState`: Internal state allowing to continue optimization (initialState)\n * @param {function} objectiveFunction Function to evaluate. It should accept an array of variables\n * @param {Array} lowerBoundaries Array containing for each variable the lower boundary\n * @param {Array} upperBoundaries Array containing for each variable the higher boundary\n * @param {Object} [options={}]\n * @param {number} [options.iterations] - Number of iterations.\n * @param {number} [options.epsilon] - Tolerance to choose best current value.\n * @param {number} [options.tolerance] - Minimum tollerance of the function.\n * @param {number} [options.tolerance2] - Minimum tollerance of the function.\n * @param {Object} [options.initialState={}}] - finalState of previous optimization.\n * @return {Object} {finalState, iterations, minFunctionValue}\n * */\n\nexport default function direct(\n  objectiveFunction,\n  lowerBoundaries,\n  upperBoundaries,\n  options = {},\n) {\n  const {\n    iterations = 50,\n    epsilon = 1e-4,\n    tolerance = 1e-16,\n    tolerance2 = 1e-12,\n    initialState = {},\n  } = options;\n\n  if (\n    objectiveFunction === undefined ||\n    lowerBoundaries === undefined ||\n    upperBoundaries === undefined\n  ) {\n    throw new RangeError('There is something undefined');\n  }\n\n  lowerBoundaries = new Float64Array(lowerBoundaries);\n  upperBoundaries = new Float64Array(upperBoundaries);\n\n  if (lowerBoundaries.length !== upperBoundaries.length) {\n    throw new Error(\n      'Lower bounds and Upper bounds for x are not of the same length',\n    );\n  }\n\n  //-------------------------------------------------------------------------\n  //                        STEP 1. Initialization\n  //-------------------------------------------------------------------------\n  let n = lowerBoundaries.length;\n  let diffBorders = upperBoundaries.map((x, i) => x - lowerBoundaries[i]);\n\n  let {\n    numberOfRectangles = 0,\n    totalIterations = 0,\n    unitaryCoordinates = [new Float64Array(n).fill(0.5)],\n    middlePoint = new Float64Array(n).map((value, index) => {\n      return (\n        lowerBoundaries[index] +\n        unitaryCoordinates[0][index] * diffBorders[index]\n      );\n    }),\n    bestCurrentValue = objectiveFunction(middlePoint),\n    fCalls = 1,\n    smallerDistance = 0,\n    edgeSizes = [new Float64Array(n).fill(0.5)],\n    diagonalDistances = [Math.sqrt(n * 0.5 ** 2)],\n    functionValues = [bestCurrentValue],\n    differentDistances = diagonalDistances,\n    smallerValuesByDistance = [bestCurrentValue],\n    choiceLimit = undefined,\n  } = initialState;\n  if (\n    initialState.originalCoordinates &&\n    initialState.originalCoordinates.length > 0\n  ) {\n    bestCurrentValue = xMinValue(functionValues);\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n    );\n\n    unitaryCoordinates = initialState.originalCoordinates.slice();\n    for (let j = 0; j < unitaryCoordinates.length; j++) {\n      for (let i = 0; i < lowerBoundaries.length; i++) {\n        unitaryCoordinates[j][i] =\n          (unitaryCoordinates[j][i] - lowerBoundaries[i]) / diffBorders[i];\n      }\n    }\n  }\n\n  let iteration = 0;\n  //-------------------------------------------------------------------------\n  //                          Iteration loop\n  //-------------------------------------------------------------------------\n\n  while (iteration < iterations) {\n    //----------------------------------------------------------------------\n    //  STEP 2. Identify the set S of all potentially optimal rectangles\n    //----------------------------------------------------------------------\n\n    let S1 = [];\n    let idx = differentDistances.findIndex(\n      // eslint-disable-next-line no-loop-func\n      (e) => e === diagonalDistances[smallerDistance],\n    );\n    let counter = 0;\n    for (let i = idx; i < differentDistances.length; i++) {\n      for (let f = 0; f < functionValues.length; f++) {\n        if (\n          (functionValues[f] === smallerValuesByDistance[i]) &\n          (diagonalDistances[f] === differentDistances[i])\n        ) {\n          S1[counter++] = f;\n        }\n      }\n    }\n\n    let optimumValuesIndex, S3;\n    if (differentDistances.length - idx > 1) {\n      let a1 = diagonalDistances[smallerDistance];\n      let b1 = functionValues[smallerDistance];\n      let a2 = differentDistances[differentDistances.length - 1];\n      let b2 = smallerValuesByDistance[differentDistances.length - 1];\n      let slope = (b2 - b1) / (a2 - a1);\n      let constant = b1 - slope * a1;\n      let S2 = new Uint32Array(counter);\n      counter = 0;\n      for (let i = 0; i < S2.length; i++) {\n        let j = S1[i];\n        if (\n          functionValues[j] <=\n          slope * diagonalDistances[j] + constant + tolerance2\n        ) {\n          S2[counter++] = j;\n        }\n      }\n\n      let xHull = [];\n      let yHull = [];\n      for (let i = 0; i < counter; i++) {\n        xHull.push(diagonalDistances[S2[i]]);\n        yHull.push(functionValues[S2[i]]);\n      }\n\n      let lowerIndexHull = antiLowerConvexHull(xHull, yHull);\n\n      S3 = [];\n      for (let i = 0; i < lowerIndexHull.length; i++) {\n        S3.push(S2[lowerIndexHull[i]]);\n      }\n    } else {\n      S3 = S1.slice(0, counter);\n    }\n    optimumValuesIndex = S3;\n    //--------------------------------------------------------------\n    // STEPS 3,5: Select any rectangle j in S\n    //--------------------------------------------------------------\n    for (let k = 0; k < optimumValuesIndex.length; k++) {\n      let j = optimumValuesIndex[k];\n      let largerSide = xMaxValue(edgeSizes[j]);\n      let largeSidesIndex = new Uint32Array(edgeSizes[j].length);\n      counter = 0;\n      for (let i = 0; i < edgeSizes[j].length; i++) {\n        if (Math.abs(edgeSizes[j][i] - largerSide) < tolerance) {\n          largeSidesIndex[counter++] = i;\n        }\n      }\n      let delta = (2 * largerSide) / 3;\n      let bestFunctionValues = [];\n      for (let r = 0; r < counter; r++) {\n        let i = largeSidesIndex[r];\n        let firstMiddleCenter = unitaryCoordinates[j].slice();\n        let secondMiddleCenter = unitaryCoordinates[j].slice();\n        firstMiddleCenter[i] += delta;\n        secondMiddleCenter[i] -= delta;\n        let firstMiddleValue = new Float64Array(firstMiddleCenter.length);\n        let secondMiddleValue = new Float64Array(secondMiddleCenter.length);\n        for (let i = 0; i < firstMiddleCenter.length; i++) {\n          firstMiddleValue[i] =\n            lowerBoundaries[i] + firstMiddleCenter[i] * diffBorders[i];\n          secondMiddleValue[i] =\n            lowerBoundaries[i] + secondMiddleCenter[i] * diffBorders[i];\n        }\n        let firstMinValue = objectiveFunction(firstMiddleValue);\n        let secondMinValue = objectiveFunction(secondMiddleValue);\n        fCalls += 2;\n        bestFunctionValues.push({\n          minValue: Math.min(firstMinValue, secondMinValue),\n          index: r,\n        });\n        // [Math.min(firstMinValue, secondMinValue), r];\n        unitaryCoordinates.push(firstMiddleCenter, secondMiddleCenter);\n        functionValues.push(firstMinValue, secondMinValue);\n      }\n\n      let b = bestFunctionValues.sort((a, b) => a.minValue - b.minValue);\n      for (let r = 0; r < counter; r++) {\n        let u = largeSidesIndex[b[r].index];\n        let ix1 = numberOfRectangles + 2 * (b[r].index + 1) - 1;\n        let ix2 = numberOfRectangles + 2 * (b[r].index + 1);\n        edgeSizes[j][u] = delta / 2;\n        edgeSizes[ix1] = edgeSizes[j].slice();\n        edgeSizes[ix2] = edgeSizes[j].slice();\n        diagonalDistances[j] = xNorm(edgeSizes[j]);\n        diagonalDistances[ix1] = diagonalDistances[j];\n        diagonalDistances[ix2] = diagonalDistances[j];\n      }\n      numberOfRectangles += 2 * counter;\n    }\n\n    //--------------------------------------------------------------\n    //                  Update\n    //--------------------------------------------------------------\n\n    bestCurrentValue = xMinValue(functionValues);\n\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n      iteration,\n    );\n\n    differentDistances = Array.from(new Set(diagonalDistances));\n    differentDistances = differentDistances.sort((a, b) => a - b);\n\n    smallerValuesByDistance = [];\n    for (let i = 0; i < differentDistances.length; i++) {\n      let minIndex;\n      let minValue = Number.POSITIVE_INFINITY;\n      for (let k = 0; k < diagonalDistances.length; k++) {\n        if (diagonalDistances[k] === differentDistances[i]) {\n          if (functionValues[k] < minValue) {\n            minValue = functionValues[k];\n            minIndex = k;\n          }\n        }\n      }\n      smallerValuesByDistance.push(functionValues[minIndex]);\n    }\n\n    let currentMin = [];\n    for (let j = 0; j < functionValues.length; j++) {\n      if (functionValues[j] === bestCurrentValue) {\n        let temp = [];\n        for (let i = 0; i < lowerBoundaries.length; i++) {\n          temp.push(\n            lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i],\n          );\n        }\n        currentMin.push(temp);\n      }\n    }\n    iteration += 1;\n  }\n  //--------------------------------------------------------------\n  //                  Saving results\n  //--------------------------------------------------------------\n\n  let result = {};\n  result.minFunctionValue = bestCurrentValue;\n  result.iterations = iteration;\n  let originalCoordinates = [];\n  for (let j = 0; j < numberOfRectangles + 1; j++) {\n    let pair = [];\n    for (let i = 0; i < lowerBoundaries.length; i++) {\n      pair.push(lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i]);\n    }\n    originalCoordinates.push(pair);\n  }\n\n  result.finalState = {\n    numberOfRectangles,\n    totalIterations: (totalIterations += iterations),\n    originalCoordinates,\n    middlePoint,\n    fCalls,\n    smallerDistance,\n    edgeSizes,\n    diagonalDistances,\n    functionValues,\n    differentDistances,\n    smallerValuesByDistance,\n    choiceLimit,\n  };\n\n  let minimizer = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    if (functionValues[i] === bestCurrentValue) {\n      minimizer.push(originalCoordinates[i]);\n    }\n  }\n\n  result.optima = minimizer;\n  return result;\n}\n\nfunction getMinIndex(\n  functionValues,\n  diagonalDistances,\n  choiceLimit,\n  bestCurrentValue,\n) {\n  let item = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    item[i] =\n      Math.abs(functionValues[i] - (bestCurrentValue + choiceLimit)) /\n      diagonalDistances[i];\n  }\n  const min = xMinValue(item);\n  let result = item.findIndex((x) => x === min);\n  return result;\n}\n","import direct from 'ml-direct';\n/**\n * Run a direct optimization on the provided data using a sum-of-shapes model.\n * @param data - The observed x/y data to fit.\n * @param sumOfShapes - A function returning the model prediction for a given parameter vector.\n * @param options - Optimization bounds and solver options.\n * @returns The optimized parameter values, the final objective error, and the number of iterations.\n */\nexport function directOptimization(data, sumOfShapes, options) {\n    const { minValues, maxValues, maxIterations, epsilon, tolerance, tolerance2, initialState, } = options;\n    const objectiveFunction = getObjectiveFunction(data, sumOfShapes);\n    const result = direct(objectiveFunction, \n    // direct internally converts ArrayLike to Float64Array,\n    // so we can safely cast minValues and maxValues to number[]\n    minValues, maxValues, {\n        iterations: maxIterations,\n        epsilon,\n        tolerance,\n        tolerance2,\n        initialState,\n    });\n    const { optima, minFunctionValue, iterations } = result;\n    return {\n        parameterError: minFunctionValue,\n        iterations,\n        parameterValues: optima[0],\n    };\n}\nfunction getObjectiveFunction(data, sumOfShapes) {\n    const { x, y } = data;\n    const nbPoints = x.length;\n    return (parameters) => {\n        const fct = sumOfShapes(parameters);\n        let error = 0;\n        for (let i = 0; i < nbPoints; i++) {\n            error += (y[i] - fct(x[i])) ** 2;\n        }\n        return error;\n    };\n}\n//# sourceMappingURL=directOptimization.js.map","import { levenbergMarquardt } from 'ml-levenberg-marquardt';\nimport { directOptimization } from \"./wrappers/directOptimization.js\";\n/**\n * Algorithm to select the method.\n * @param optimizationOptions - Optimization options\n * @returns - The algorithm and optimization options\n */\nexport function selectMethod(optimizationOptions = {}) {\n    const { kind = 'lm', options } = optimizationOptions;\n    switch (kind) {\n        case 'lm':\n        case 'levenbergMarquardt':\n            return {\n                algorithm: levenbergMarquardt,\n                optimizationOptions: {\n                    damping: 1.5,\n                    maxIterations: 100,\n                    errorTolerance: 1e-8,\n                    ...options,\n                },\n            };\n        case 'direct': {\n            return {\n                algorithm: directOptimization,\n                optimizationOptions: {\n                    maxIterations: 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 { xMaxAbsoluteValue } from 'ml-spectra-processing';\nimport { getSumOfShapes } from \"./shapes/getSumOfShapes.js\";\nimport { buildOptimizationLayout } from \"./util/buildOptimizationLayout.js\";\nimport { getFixedParametersResult } from \"./util/getFixedParametersResult.js\";\nimport { getInternalPeaks } from \"./util/internalPeaks/getInternalPeaks.js\";\nimport { reconstructPeaks } from \"./util/reconstructPeaks.js\";\nimport { selectMethod } from \"./util/selectMethod.js\";\n/**\n * Fits a set of points to the sum of a set of bell functions.\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 so the maximum Y value becomes 1\n    const max = xMaxAbsoluteValue(data.y);\n    const yScale = max === 0 ? 1 : max;\n    const internalPeaks = getInternalPeaks(peaks, yScale, options);\n    // need to rescale what is related to Y\n    const normalizedY = new Float64Array(data.y.length);\n    for (let i = 0; i < data.y.length; i++) {\n        normalizedY[i] = data.y[i] / yScale;\n    }\n    const optimizationLayout = buildOptimizationLayout(internalPeaks, peaks, options, yScale);\n    const { freeIndices, variableMin, variableMax, variableInit, variableGrad, variables, } = optimizationLayout;\n    const { algorithm, optimizationOptions } = selectMethod(options.optimization);\n    const baseSumOfShapes = getSumOfShapes(internalPeaks);\n    const sumOfShapesForVariables = (variableValues) => {\n        return baseSumOfShapes(optimizationLayout.variableToPeakValues(variableValues));\n    };\n    if (freeIndices.length === 0) {\n        return getFixedParametersResult(internalPeaks, normalizedY, data.x, optimizationLayout.variableToPeakValues(variableInit), baseSumOfShapes, yScale);\n    }\n    // prepare arrays to pass to the algorithm (reduced if needed)\n    let minValues;\n    let maxValues;\n    let initialValues;\n    let gradientDifferences;\n    let sumOfShapesToUse = sumOfShapesForVariables;\n    if (freeIndices.length === variables.length) {\n        // nothing to reduce\n        minValues = variableMin;\n        maxValues = variableMax;\n        initialValues = variableInit;\n        gradientDifferences = variableGrad;\n    }\n    else {\n        // wrapper that maps reduced (free) parameters into the full parameter vector\n        const sumOfShapesForReduced = (reducedParameters) => {\n            const full = new Float64Array(variables.length);\n            full.set(variableInit);\n            for (let k = 0; k < freeIndices.length; k++) {\n                full[freeIndices[k]] = reducedParameters[k];\n            }\n            return sumOfShapesForVariables(full);\n        };\n        minValues = new Float64Array(freeIndices.length);\n        maxValues = new Float64Array(freeIndices.length);\n        initialValues = new Float64Array(freeIndices.length);\n        gradientDifferences = new Float64Array(freeIndices.length);\n        for (let j = 0; j < freeIndices.length; j++) {\n            const i = freeIndices[j];\n            minValues[j] = variableMin[i];\n            maxValues[j] = variableMax[i];\n            initialValues[j] = variableInit[i];\n            gradientDifferences[j] = variableGrad[i];\n        }\n        sumOfShapesToUse = sumOfShapesForReduced;\n    }\n    const fitted = algorithm({ x: data.x, y: normalizedY }, sumOfShapesToUse, {\n        minValues,\n        maxValues,\n        initialValues,\n        gradientDifference: gradientDifferences,\n        ...optimizationOptions,\n    });\n    let fittedVariableValues;\n    if (freeIndices.length === variables.length) {\n        fittedVariableValues = fitted.parameterValues;\n    }\n    else {\n        const full = variableInit.slice();\n        for (let k = 0; k < freeIndices.length; k++) {\n            full[freeIndices[k]] = fitted.parameterValues[k];\n        }\n        fittedVariableValues = full;\n    }\n    const fittedValues = optimizationLayout.variableToPeakValues(fittedVariableValues);\n    return {\n        error: fitted.parameterError,\n        iterations: fitted.iterations,\n        peaks: reconstructPeaks(internalPeaks, fittedValues, yScale),\n    };\n}\n//# sourceMappingURL=index.js.map","import { gsd } from 'ml-gsd';\nimport { xAdd, xFindClosestIndex, xMean } from 'ml-spectra-processing';\n/**\n * Filter that allows to calibrateX the x axis based on the presence of peaks\n * @param data\n * @param options\n */\nexport function calibrateX(data, options = {}) {\n    const { targetX = 0, nbPeaks = 1, from = data.x[0], to = data.x.at(-1), gsd: gsdOptions = {\n        minMaxRatio: 0.1,\n        realTopDetection: true,\n        smoothY: true,\n        sgOptions: {\n            windowSize: 7,\n            polynomial: 3,\n        },\n    }, } = options;\n    const fromIndex = xFindClosestIndex(data.x, from);\n    const toIndex = xFindClosestIndex(data.x, to);\n    let peaks = gsd({\n        x: data.x.subarray(fromIndex, toIndex),\n        y: data.y.subarray(fromIndex, toIndex),\n    }, gsdOptions);\n    peaks.sort((a, b) => b.y - a.y);\n    peaks = peaks.slice(0, nbPeaks);\n    if (peaks.length < nbPeaks)\n        return { data };\n    const middle = xMean(peaks.map((peak) => peak.x));\n    return { data: { x: xAdd(data.x, targetX - middle), y: data.y } };\n}\n//# sourceMappingURL=calibrateX.js.map","import { xApplyFunctionStr } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function xFunction(data, options = {}) {\n    return {\n        data: {\n            x: xApplyFunctionStr(data.x, {\n                variableLabel: 'x',\n                fctString: options.function,\n            }),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=xFunction.js.map","import { xApplyFunctionStr } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function yFunction(data, options = {}) {\n    return {\n        data: {\n            x: data.x,\n            y: xApplyFunctionStr(data.y, {\n                variableLabel: 'y',\n                fctString: options.function,\n            }),\n        },\n    };\n}\n//# sourceMappingURL=yFunction.js.map","import { xAdd, xMaxValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMaxY(data, options = {}) {\n    const { max = 1 } = options;\n    const existingMax = xMaxValue(data.y);\n    if (existingMax === max) {\n        return { data };\n    }\n    return {\n        data: {\n            x: data.x,\n            y: xAdd(data.y, max - existingMax),\n        },\n    };\n}\n//# sourceMappingURL=setMaxY.js.map","import { xAdd, xMinValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMinY(data, options = {}) {\n    const { min = 0 } = options;\n    const existingMin = xMinValue(data.y);\n    if (existingMin === min) {\n        return { data };\n    }\n    return {\n        data: {\n            x: data.x,\n            y: xAdd(data.y, min - existingMin),\n        },\n    };\n}\n//# sourceMappingURL=setMinY.js.map","import { xEnsureFloat64, xyGrowingX } from 'ml-spectra-processing';\nimport * as Filters from \"./filters/filters.js\";\n/**\n * Apply filters on {x:[], y:[]}\n * @param data\n * @param filters\n * @returns\n */\nexport function filterXY(data, filters) {\n    let result = {\n        data: xyGrowingX({ x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) }),\n    };\n    const logs = [];\n    for (const filter of filters) {\n        const start = Date.now();\n        if (!filter.name) {\n            // we ignore empty filter names\n            continue;\n        }\n        const filterFct = Filters[filter.name];\n        if (!filterFct) {\n            throw new Error(`Unknown filter: ${filter.name}`);\n        }\n        // @ts-expect-error some method have options and some other ones don't have any options\n        result = filterFct(result.data, filter.options);\n        result.data = xyGrowingX(result.data);\n        logs.push({\n            name: filter.name,\n            time: Date.now() - start,\n        });\n    }\n    return { logs, data: result.data };\n}\n//# sourceMappingURL=filterXY.js.map","import { filterXY } from 'ml-signal-processing';\nimport { xIsMonotonic, xMaxValue, xMinValue } from 'ml-spectra-processing';\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n    const data = {\n        x: spectrum.variables.x.data,\n        y: spectrum.variables.y.data,\n    };\n    const newSpectrum = {\n        variables: {\n            x: {\n                data: spectrum.variables.x.data,\n                units: spectrum.variables.x.units,\n                label: spectrum.variables.x.label,\n            },\n            y: {\n                data: spectrum.variables.y.data,\n                units: spectrum.variables.y.units,\n                label: spectrum.variables.y.label,\n            },\n        },\n    };\n    if (spectrum.title)\n        newSpectrum.title = spectrum.title;\n    if (spectrum.dataType)\n        newSpectrum.dataType = spectrum.dataType;\n    if (spectrum.meta)\n        newSpectrum.meta = spectrum.meta;\n    if (spectrum.id)\n        newSpectrum.id = spectrum.id;\n    const { from = spectrum.variables.x.min, to = spectrum.variables.x.max, numberOfPoints, applyRangeSelectionFirst = false, exclusions = [], zones = [], } = options;\n    let { filters = [] } = options;\n    filters = structuredClone(filters);\n    if (numberOfPoints) {\n        if (applyRangeSelectionFirst) {\n            filters.unshift({\n                name: 'equallySpaced',\n                options: { from, to, exclusions, zones, numberOfPoints },\n            });\n        }\n        else {\n            filters.push({\n                name: 'equallySpaced',\n                options: { from, to, exclusions, zones, numberOfPoints },\n            });\n        }\n    }\n    else if (applyRangeSelectionFirst) {\n        filters.unshift({\n            name: 'filterX',\n            options: { from, to, exclusions, zones },\n        });\n    }\n    else {\n        filters.push({\n            name: 'filterX',\n            options: { from, to, exclusions, zones },\n        });\n    }\n    const { x, y } = filterXY(data, filters).data;\n    // filters change the y axis, we get rid of the units\n    // TODO we should deal correctly with this problem\n    if (filters.length > 1) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label = newSpectrum.variables.y.label?.replace(/\\s*\\[.*]/, '');\n    }\n    newSpectrum.variables.x.data = x;\n    newSpectrum.variables.x.min = xMinValue(x);\n    newSpectrum.variables.x.max = xMaxValue(x);\n    newSpectrum.variables.x.isMonotonic = xIsMonotonic(x);\n    newSpectrum.variables.y.data = y;\n    newSpectrum.variables.y.min = xMinValue(y);\n    newSpectrum.variables.y.max = xMaxValue(y);\n    newSpectrum.variables.y.isMonotonic = xIsMonotonic(y);\n    return newSpectrum;\n}\n//# sourceMappingURL=getNormalizedSpectrum.js.map","/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Qty = factory());\n})(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"t\",\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-imp\", \"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<Gal>\" : [[\"Gal\"], 1e-2, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* molar_concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"molar_concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"molar_concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\",\"Joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<electronvolt>\" : [[\"eV\", \"electronvolt\", \"electronvolts\"], 1.602176634E-19, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<arcminute>\" :[[\"arcmin\",\"arcminute\",\"arcminutes\"], Math.PI / 10800.0, \"angle\", [\"<radian>\"]],\n    \"<arcsecond>\" :[[\"arcsec\",\"arcsecond\",\"arcseconds\"], Math.PI / 648000.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppb>\" :  [[\"ppb\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-12, \"prefix_only\", [\"<1>\"]],\n    \"<ppq>\" :  [[\"ppq\"],1e-15, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.8.0\";\n\n  return Qty;\n\n}));\n","import Qty from 'js-quantities';\nexport function convertUnit(array, fromUnit, toUnit) {\n    fromUnit = normalize(fromUnit);\n    toUnit = normalize(toUnit);\n    if (fromUnit === toUnit)\n        return array;\n    const convert = Qty.swiftConverter(fromUnit, toUnit); // Configures converter\n    //@ts-expect-error convert does not allowed typed array but it works\n    return convert(array);\n}\nfunction normalize(unit) {\n    unit = unit.replaceAll('°C', 'tempC');\n    unit = unit.replaceAll('°F', 'tempF');\n    unit = unit.replaceAll(/(^|\\W)K(\\W|$)/g, '$1tempK$2');\n    return unit;\n}\n//# sourceMappingURL=convertUnit.js.map","const testRegExp = /^\\/((?:\\\\\\/|[^/])+)\\/([gimuy]{0,5})?$/;\nexport function ensureRegexp(string) {\n    if (typeof string !== 'string')\n        return string;\n    const parts = testRegExp.exec(string);\n    if (parts) {\n        try {\n            return new RegExp(parts[1], parts[2]);\n        }\n        catch {\n            return stringToRegexp(string);\n        }\n    }\n    else {\n        return stringToRegexp(string);\n    }\n}\nfunction stringToRegexp(string, flags = 'i') {\n    return new RegExp(string.replaceAll(/[$()*+.?[\\\\\\]^{|}]/g, (match) => `\\\\${match}`), flags);\n}\n//# sourceMappingURL=ensureRegexp.js.map","import { xIsMonotonic, xMaxValue, xMinValue } from 'ml-spectra-processing';\nimport { convertUnit } from './convertUnit.js';\nexport function getConvertedVariable(variable, newUnits) {\n    const data = variable.units !== undefined && variable.units !== newUnits // would be nice if convertUnit would allow typedArray\n        ? convertUnit(Array.from(variable.data), variable.units, newUnits)\n        : variable.data;\n    return {\n        units: newUnits,\n        label: variable.label.replace(`[${variable.units || ''}]`, `[${newUnits}]`),\n        data: data || [],\n        min: data ? xMinValue(data) : undefined,\n        max: data ? xMaxValue(data) : undefined,\n        isMonotonic: xIsMonotonic(data),\n    };\n}\n//# sourceMappingURL=getConvertedVariable.js.map","/* eslint-disable @typescript-eslint/no-dynamic-delete */\nimport { convertUnit } from './convertUnit.js';\nimport { ensureRegexp } from './ensureRegexp.js';\nimport { getConvertedVariable } from './getConvertedVariable.js';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param spectra\n * @param selector\n */\nexport function getXYSpectra(spectra = [], selector = {}) {\n    const selectedSpectra = [];\n    if (spectra.length === 0)\n        return selectedSpectra;\n    const { variables, units, labels, meta, index } = selector;\n    let { dataType, title, xUnits, yUnits, xVariable = 'x', yVariable = 'y', xLabel, yLabel, } = selector;\n    if (index !== undefined) {\n        return [spectra[index]];\n    }\n    if (dataType) {\n        dataType = ensureRegexp(dataType);\n    }\n    if (title) {\n        title = ensureRegexp(title);\n    }\n    if (units && !xUnits && !yUnits)\n        [yUnits, xUnits] = units.split(/\\s*vs\\s*/);\n    if (labels && !xLabel && !yLabel) {\n        [yLabel, xLabel] = labels.split(/\\s*vs\\s*/);\n    }\n    if (variables) {\n        const parts = variables.split(/\\s*vs\\s*/);\n        if (parts.length === 2) {\n            xVariable = parts[1];\n            yVariable = parts[0];\n        }\n    }\n    if (xLabel)\n        xLabel = ensureRegexp(xLabel);\n    if (yLabel)\n        yLabel = ensureRegexp(yLabel);\n    for (const spectrum of spectra) {\n        const variableNames = Object.keys(spectrum.variables);\n        if (!(variableNames.length > 1))\n            continue;\n        // we filter on general spectrum information\n        if (dataType &&\n            (!spectrum.dataType || !dataType.exec(spectrum.dataType))) {\n            continue;\n        }\n        if (title && (!spectrum.title || !title.exec(spectrum.title))) {\n            continue;\n        }\n        if (meta && typeof meta === 'object') {\n            if (!spectrum.meta)\n                continue;\n            for (const key in spectrum.meta) {\n                if (!spectrum.meta[key])\n                    continue;\n                const value = ensureRegexp(spectrum.meta[key]);\n                if (!value.exec(spectrum.meta[key]))\n                    continue;\n            }\n        }\n        const x = getPossibleVariable(spectrum.variables, {\n            units: xUnits,\n            label: xLabel,\n            variableName: xVariable,\n        });\n        const y = getPossibleVariable(spectrum.variables, {\n            units: yUnits,\n            label: yLabel,\n            variableName: yVariable,\n        });\n        if (x && y) {\n            // should we reverse the x-axis?\n            if (x.data[0] > x.data.at(-1)) {\n                x.data = x.data.toReversed();\n                y.data = y.data.toReversed();\n            }\n            selectedSpectra.push({\n                title: spectrum.title,\n                dataType: spectrum.dataType,\n                meta: spectrum.meta,\n                variables: { x, y },\n                id: spectrum.id,\n            });\n        }\n    }\n    return selectedSpectra;\n}\nfunction getPossibleVariable(variables, selector = {}) {\n    const { units, label, variableName } = selector;\n    const possible = { ...variables };\n    let key;\n    if (units !== undefined) {\n        for (key in possible) {\n            const variable = variables[key];\n            let convertibleUnits = true;\n            try {\n                convertUnit(1, variable?.units || '', units);\n            }\n            catch {\n                convertibleUnits = false;\n            }\n            if (convertibleUnits && variable) {\n                possible[key] = getConvertedVariable(variable, units);\n            }\n            else {\n                delete possible[key];\n            }\n        }\n    }\n    if (label !== undefined) {\n        const regexpLabel = ensureRegexp(label);\n        for (key in possible) {\n            if (!regexpLabel.exec(variables[key]?.label ?? '')) {\n                delete possible[key];\n            }\n        }\n    }\n    if (variableName !== undefined) {\n        if (possible[variableName])\n            return possible[variableName];\n        const upper = variableName.toUpperCase();\n        if (Object.hasOwn(possible, upper)) {\n            return possible[upper];\n        }\n        const lower = variableName.toLowerCase();\n        if (Object.hasOwn(possible, lower)) {\n            return possible[lower];\n        }\n    }\n    const possibleFiltered = Object.values(possible).filter((val) => val !== undefined);\n    if (possibleFiltered.length > 0) {\n        return possibleFiltered[0];\n    }\n}\n//# sourceMappingURL=getXYSpectra.js.map","import { getXYSpectra } from './getXYSpectra.js';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param spectra\n * @param selector\n */\nexport function getXYSpectrum(spectra = [], selector = {}) {\n    const selectedSpectra = getXYSpectra(spectra, selector);\n    if (selectedSpectra.length === 0)\n        return undefined;\n    return selectedSpectra[0];\n}\n//# sourceMappingURL=getXYSpectrum.js.map","import { isAnyArray } from 'is-any-array';\nimport { stringify, xIsMonotonic, xMaxValue, xMinValue, } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum.js';\nimport { getXYSpectra } from './util/getXYSpectra.js';\nimport { getXYSpectrum } from './util/getXYSpectrum.js';\n/**\n * Class allowing to store and manipulate an analysis.\n * An analysis may contain one or more spectra that can be selected\n * based on their units\n */\nexport class Analysis {\n    id;\n    label;\n    spectrumCallback;\n    spectra;\n    cache;\n    constructor(options = {}) {\n        this.id = options.id || Math.random().toString(36).slice(2, 10);\n        this.label = options.label || this.id;\n        this.spectrumCallback = options.spectrumCallback;\n        this.spectra = [];\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    clone({ filter }) {\n        const { ids } = filter;\n        const analysis = new Analysis();\n        analysis.id = this.id;\n        analysis.label = this.label;\n        analysis.spectrumCallback = this.spectrumCallback;\n        analysis.spectra = this.spectra.filter((spectrum) => {\n            //@ts-expect-error spectrum.id is not expected to be undefined at this level\n            return !ids || ids.includes(spectrum.id);\n        });\n        return analysis;\n    }\n    toJSON() {\n        // TODO this is likely not the most optimized way to remove typedArray\n        // if data are small seems still reasonable\n        return {\n            id: this.id,\n            label: this.label,\n            spectra: JSON.parse(stringify(this.spectra)),\n        };\n    }\n    static fromJSON(json) {\n        const analysis = new Analysis();\n        analysis.id = json.id;\n        analysis.label = json.label;\n        analysis.spectra = json.spectra;\n        return analysis;\n    }\n    /**\n     * Add a spectrum in the internal spectra variable\n     * @param variables\n     * @param options\n     */\n    pushSpectrum(variables, options = {}) {\n        this.spectra.push(standardizeData(variables, options, {\n            spectrumCallback: this.spectrumCallback,\n        }));\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    /**\n     * Retrieve a MeasurementXY based on x/y units\n     * @param selector\n     */\n    getXYSpectrum(selector = {}) {\n        const id = JSON.stringify(selector);\n        if (!this.cache.spectrum[id]) {\n            this.cache.spectrum[id] = getXYSpectrum(this.spectra, selector);\n        }\n        return this.cache.spectrum[id];\n    }\n    /**\n     * Retrieve spectra matching selector\n     * @param selector\n     */\n    getXYSpectra(selector = {}) {\n        const id = JSON.stringify(selector);\n        if (!this.cache.spectra[id]) {\n            this.cache.spectra[id] = getXYSpectra(this.spectra, selector);\n        }\n        return this.cache.spectra[id];\n    }\n    /**\n     * Retrieve a xy object\n     * @param selector.units - Units separated by vs like for example \"g vs °C\"\n     * @param selector.xUnits - if undefined takes the first variable\n     * @param selector.yUnits - if undefined takes the second variable\n     * @param selector\n     */\n    getXY(selector = {}) {\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return {\n            x: spectrum.variables.x.data,\n            y: spectrum.variables.y.data,\n        };\n    }\n    /**\n     * Return the data object for specific x/y units with possibly some\n     * normalization options\n     * @param options.selector.xUnits - // if undefined takes the first variable\n     * @param options.selector.yUnits - // if undefined takes the second variable\n     * @param options\n     */\n    getNormalizedSpectrum(options = {}) {\n        const { normalization, selector } = options;\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return getNormalizedSpectrum(spectrum, normalization);\n    }\n    /**\n     * @param options\n     */\n    getNormalizedSpectra(options = {}) {\n        const { normalization, selector } = options;\n        const spectra = this.getXYSpectra(selector);\n        if (spectra.length === 0)\n            return [];\n        const normalizedSpectra = [];\n        for (const spectrum of spectra) {\n            normalizedSpectra.push(getNormalizedSpectrum(spectrum, normalization));\n        }\n        return normalizedSpectra;\n    }\n    /**\n     * Returns the first spectrum. This method could be improved in the future\n     * @returns\n     */\n    getSpectrum() {\n        return this.spectra[0];\n    }\n    /**\n     * Returns the xLabel\n     * @param selector.xUnits - // if undefined takes the first variable\n     * @param selector.yUnits - // if undefined takes the second variable\n     * @param selector\n     */\n    getXLabel(selector) {\n        return this.getXYSpectrum(selector)?.variables.x.label;\n    }\n    /**\n     * Returns the yLabel\n     * @param selector.xUnits - // if undefined takes the first variable\n     * @param selector.yUnits - // if undefined takes the second variable\n     * @param selector\n     */\n    getYLabel(selector) {\n        return this.getXYSpectrum(selector)?.variables.y.label;\n    }\n}\n/**\n * Internal function that ensure the order of x / y array\n * @param variables\n * @param options\n * @param analysisOptions\n */\nfunction standardizeData(variables, options, analysisOptions) {\n    const { meta = {}, dataType = '', title = '', id = Math.random().toString(36).replace('0.', ''), } = options;\n    const { spectrumCallback } = analysisOptions;\n    if (spectrumCallback) {\n        spectrumCallback(variables);\n    }\n    const xVariable = variables.x;\n    const yVariable = variables.y;\n    if (!xVariable || !yVariable) {\n        throw new Error('A spectrum must contain at least x and y variables');\n    }\n    if (!isAnyArray(xVariable.data) || !isAnyArray(yVariable.data)) {\n        throw new Error('x and y variables must contain an array data');\n    }\n    const x = xVariable.data;\n    const reverse = x && x.length > 1 && x[0] > x.at(-1);\n    for (const [key, variable] of Object.entries(variables)) {\n        if (reverse)\n            variable.data = variable.data.toReversed();\n        variable.label = variable.label || key;\n        if (variable.label.match(/^.*[([](?<units>.*)[)\\]].*$/)) {\n            const units = variable.label.replace(/^.*[([](?<units>.*)[)\\]].*$/, '$<units>');\n            if (!variable.units || variable.units === units) {\n                variable.units = units;\n                variable.label = variable.label.replace(/[([].*[)\\]]/, '').trim();\n            }\n        }\n        variable.min = xMinValue(variable.data);\n        variable.max = xMaxValue(variable.data);\n        variable.isMonotonic = xIsMonotonic(variable.data);\n    }\n    return {\n        variables,\n        title,\n        dataType,\n        meta,\n        id,\n    };\n}\n//# sourceMappingURL=Analysis.js.map","export function appendDistinctParameter(values, key, value) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            values: [],\n            count: 0,\n        };\n    }\n    if (!values[key].values.includes(value)) {\n        values[key].values.push(value);\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=appendDistinctParameter.js.map","export function appendDistinctValue(values, key) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            count: 0,\n        };\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=appendDistinctValue.js.map","import { Analysis } from './Analysis.js';\nimport { appendDistinctParameter } from './util/appendDistinctParameter.js';\nimport { appendDistinctValue } from './util/appendDistinctValue.js';\nexport class AnalysesManager {\n    analyses;\n    constructor() {\n        this.analyses = [];\n    }\n    static fromJSON(json) {\n        const analysesManager = new AnalysesManager();\n        for (const analysis of json.analyses) {\n            analysesManager.analyses.push(Analysis.fromJSON(analysis));\n        }\n        return analysesManager;\n    }\n    addAnalysis(analysis) {\n        const index = this.getAnalysisIndex(analysis.id);\n        if (index === undefined) {\n            this.analyses.push(analysis);\n        }\n        else {\n            this.analyses[index] = analysis;\n        }\n    }\n    /**\n     *\n     * @param options\n     * @returns\n     */\n    getAnalyses(options = {}) {\n        const { ids } = options;\n        const analyses = [];\n        const processedAnalysisIds = new Set();\n        for (const analysis of this.analyses) {\n            if (!ids || ids.includes(analysis.id)) {\n                analyses.push(analysis);\n                processedAnalysisIds.add(analysis.id);\n                continue;\n            }\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id &&\n                    ids.includes(spectrum.id) &&\n                    !processedAnalysisIds.has(analysis.id)) {\n                    analyses.push(analysis.clone({ filter: { ids } }));\n                    processedAnalysisIds.add(analysis.id);\n                }\n            }\n        }\n        return analyses;\n    }\n    getSpectra() {\n        const spectra = [];\n        for (const analysis of this.analyses) {\n            spectra.push(...analysis.spectra);\n        }\n        return spectra;\n    }\n    getAnalysisBySpectrumId(id) {\n        for (const analysis of this.analyses) {\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id === id)\n                    return analysis;\n            }\n        }\n        return undefined;\n    }\n    getSpectrumById(id) {\n        for (const analysis of this.analyses) {\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id === id)\n                    return spectrum;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Get an array of objects (key + count) of all the titles\n     */\n    getDistinctTitles() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.title) {\n                appendDistinctValue(values, spectrum.title);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the units\n     */\n    getDistinctUnits() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    if (variable.units) {\n                        appendDistinctValue(values, variable.units);\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + unit + label + count) of all the units\n     */\n    getDistinctLabelUnits() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    const { label, units } = normalizeLabelUnits(variable.label, variable.units);\n                    const key = label + (units ? ` (${units})` : '');\n                    if (key) {\n                        if (!values[key]) {\n                            values[key] = { key, units, label, count: 0 };\n                        }\n                        values[key].count++;\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the labels\n     */\n    getDistinctLabels() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    appendDistinctValue(values, variable.label.replace(/\\s+[([].*$/, ''));\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the dataTypes\n     */\n    getDistinctDataTypes() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.dataType) {\n                appendDistinctValue(values, spectrum.dataType);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the meta\n     */\n    getDistinctMeta() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.meta) {\n                for (const key in spectrum.meta) {\n                    appendDistinctParameter(values, key, spectrum.meta[key]);\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    removeAllAnalyses() {\n        this.analyses.splice(0);\n    }\n    /**\n     * Remove the analysis from the AnalysesManager for the specified id\n     * @param id\n     */\n    removeAnalysis(id) {\n        const index = this.getAnalysisIndex(id);\n        if (index === undefined)\n            return undefined;\n        return this.analyses.splice(index, 1);\n    }\n    /**\n     * Returns the index of the analysis in the analyses array\n     * @param id\n     */\n    getAnalysisIndex(id) {\n        if (!id)\n            return undefined;\n        for (let i = 0; i < this.analyses.length; i++) {\n            const analysis = this.analyses[i];\n            if (analysis.id === id)\n                return i;\n        }\n        return undefined;\n    }\n    /**\n     * Checks if the ID of an analysis exists in the AnalysesManager\n     * @param id\n     */\n    includes(id) {\n        const index = this.getAnalysisIndex(id);\n        return index === undefined ? false : !Number.isNaN(index);\n    }\n}\nfunction normalizeLabelUnits(originalLabel, originalUnits) {\n    if (!originalLabel) {\n        return { units: '', label: '' };\n    }\n    if (originalLabel.search(/[([]]/) >= 0) {\n        const [units, label] = originalLabel.split(/\\s*[([]/);\n        return { units: originalUnits || units, label };\n    }\n    return { label: originalLabel, units: originalUnits };\n}\n//# sourceMappingURL=AnalysesManager.js.map","/**\n * 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        if (options.encoding) {\n            return new TextDecoder(options.encoding).decode(blob);\n        }\n        else {\n            return decodeText(blob);\n        }\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction decodeText(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 new TextDecoder('utf-16be').decode(uint8);\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return new TextDecoder('utf-16le').decode(uint8);\n        }\n    }\n    try {\n        return new TextDecoder('utf-8', { fatal: true }).decode(uint8);\n    }\n    catch {\n        return new TextDecoder('latin1').decode(uint8);\n    }\n}\n//# sourceMappingURL=index.js.map","export function parseString(value) {\n    if (value.length === 4 || value.length === 5) {\n        const lowercase = value.toLowerCase();\n        if (lowercase === 'true')\n            return true;\n        if (lowercase === 'false')\n            return false;\n    }\n    const number = Number(value);\n    if (number === 0 && !value.includes('0')) {\n        return value;\n    }\n    if (!Number.isNaN(number))\n        return number;\n    return value;\n}\n//# sourceMappingURL=parseString.js.map","export const gyromagneticRatioMHzT = {\n    '1H': 42.577478615342585,\n    '2H': 6.5359028540009305,\n    '3H': 45.41483815473964,\n    '3He': -32.43604456417949,\n    '6Li': 6.266099405837534,\n    '7Li': 16.548177299618295,\n    '9Be': -5.983379963834242,\n    '10B': 4.57473388220653,\n    '11B': 13.66160796005943,\n    '13C': 10.707746367473973,\n    '14N': 3.076272817251739,\n    '15N': -4.3152552187859134,\n    '17O': -5.7734832203316975,\n    '19F': 40.06924371705693,\n    '21Ne': -3.362579959801532,\n    '22Na': 4.436349259342206,\n    '23Na': 11.268733657034753,\n    '25Mg': -2.607933066661972,\n    '26Al': 4.273225764239245,\n    '27Al': 11.100630067688776,\n    '29Si': -8.461871234008282,\n    '31P': 17.241162495263175,\n    '33S': 3.2688220630834754,\n    '35Cl': 4.175656570906633,\n    '36Cl': 4.897135020041924,\n    '37Cl': 3.4759025124743057,\n    '39Ar': -3.462835209795831,\n    '39K': 1.9893443809332112,\n    '40K': -2.4734743333970806,\n    '41K': 1.091921234883595,\n    '41Ca': -3.4724832349401047,\n    '43Ca': -2.8689916395725414,\n    '45Sc': 10.353659488911559,\n    '47Hi': -2.403068251036403,\n    '49Hi': -2.403730327705445,\n    '50V': 4.248579379465121,\n    '51V': 11.208261084083814,\n    '53Cr': -2.4103147963328766,\n    '53Mn': 10.961289063460638,\n    '55Mn': 10.570707386401027,\n    '57Fe': 1.3818237005731187,\n    '59Co': 10.050933643526891,\n    '60Co': 5.7916463354780205,\n    '61Ni': -3.809518009468367,\n    '63Ni': 7.561612483277437,\n    '63Cu': 11.311420179117773,\n    '65Cu': 12.116874196993763,\n    '67Zn': 2.6674502745948656,\n    '69Ga': 10.23978520568125,\n    '71Ga': 13.010902748192017,\n    '73Ge': -1.4876591727852992,\n    '75As': 7.3090505609529135,\n    '77Se': 8.134221686648205,\n    '79Se': -2.21708568778123,\n    '79Br': 10.695006473323717,\n    '81Br': 11.528409999706447,\n    '81Kr': -1.9753405882294455,\n    '83Kr': -1.6443288722876133,\n    '85Kr': -1.703226109304539,\n    '85Rb': 4.125530397832004,\n    '87Rb': 13.981309683545954,\n    '87Sr': -1.851714225407608,\n    '89Y': -2.0931336103407774,\n    '91Zr': -3.970456361178983,\n    '91Nb': 11.032433266932335,\n    '92Nb': 5.58627189504799,\n    '93Nb': 10.439564904668199,\n    '95Mo': -2.784380854729418,\n    '97Mo': -2.842922370728985,\n    '97Hc': 9.858553909649345,\n    '99Hc': 9.618018745530753,\n    '99Ru': -1.9544329039438861,\n    '101Ru': -2.1892087754004836,\n    '103Rh': -1.3459975123963002,\n    '105Pd': -1.9574819412355304,\n    '107Ag': -1.730633566737207,\n    '109Ag': 1.9896492846623755,\n    '111Cd': -9.05564075618306,\n    '113Cd': -9.471834346492482,\n    '113In': 9.351736155393834,\n    '115In': 9.371724288750167,\n    '115Sn': -13.985934056771613,\n    '117Sn': -15.237563864991529,\n    '119Sn': -15.944940516652968,\n    '121Sn': 3.541456814244654,\n    '121Sb': 10.238667225340981,\n    '123Sb': 5.544238738098897,\n    '125Sb': 5.727834340731468,\n    '123He': -11.217408195958745,\n    '125He': -13.522480388441707,\n    '127I': 8.563831041040862,\n    '129I': 5.6984329097048985,\n    '129Xe': -11.860160502223787,\n    '131Xe': 3.5157686750625525,\n    '133Cs': 5.614148807428737,\n    '134Cs': 5.69655448494487,\n    '135Cs': 5.941920316280481,\n    '137Cs': 6.179527436650749,\n    '133Ba': 11.767759427100511,\n    '135Ba': 4.258996923544905,\n    '137Ba': 4.7641207681939495,\n    '137La': 5.871574670194692,\n    '138La': 5.653524946166542,\n    '139La': 6.052556812291568,\n    '141Pr': 13.00719308615385,\n    '143Nd': -2.319446225429283,\n    '145Nd': -1.4286917595132482,\n    '145Pm': 11.586341708247685,\n    '147Pm': 5.618940151744178,\n    '147Sm': -1.7619079778143567,\n    '149Sm': -1.454172999736274,\n    '151Sm': -1.099177943637708,\n    '150Eu': 4.119249381011216,\n    '151Eu': 10.560340659609437,\n    '152Eu': -4.917588978540037,\n    '153Eu': 4.66319763384053,\n    '154Eu': -5.081728819406879,\n    '155Eu': 4.622340534132499,\n    '155Gd': -1.3166759371083225,\n    '157Gd': -1.7267714528344573,\n    '157Hb': 10.315909503395963,\n    '158Hb': 4.4541353102101295,\n    '159Hb': 10.209193198188421,\n    '161Hy': -1.4604888626975372,\n    '163Hy': 2.04590402269321,\n    '163Ho': 9.190669550527298,\n    '165Ho': 9.059996523742551,\n    '166Ho': 3.941969641339908,\n    '167Er': -1.2246240493510665,\n    '169Hm': -3.5216380718489675,\n    '171Hm': -3.506392885390747,\n    '171Yb': 7.505205293382021,\n    '173Yb': -2.067247283734719,\n    '173Lu': 4.950329831362216,\n    '174Lu': 15.107979780096652,\n    '175Lu': 4.847315928580239,\n    '176Lu': 3.4410563719983727,\n    '177Hf': 1.7227060697789323,\n    '179Hf': -1.0822388475730185,\n    '179Ha': 4.978642320498912,\n    '180Ha': 4.077240422770786,\n    '181Ha': 5.15069513909883,\n    '183W': 1.7896324383305209,\n    '185Re': 9.683742438261751,\n    '187Re': 9.784360668886006,\n    '187Os': 0.9820949116385737,\n    '189Os': 3.3417448716419638,\n    '191Ir': 0.7632756686749131,\n    '193Ir': 0.8283217975633214,\n    '193Pt': 9.162357061390605,\n    '195Pt': 9.258401736077394,\n    '197Au': 0.7378670245778789,\n    '199Hg': 7.68204945629738,\n    '201Hg': -2.8356046812290385,\n    '203Hl': 24.63622131648455,\n    '204Hl': 0.3430166953099643,\n    '205Hl': 24.88014429981608,\n    '205Pb': 2.162987054692344,\n    '207Pb': 9.00380712222511,\n    '207Bi': 6.899124436187426,\n    '208Bi': 6.970099248698476,\n    '209Bi': 6.931478109670983,\n    '209Po': 10.366726791590036,\n    '227Ac': 6.1997091596763925,\n    '229Hh': 1.402557154156299,\n    '231Pa': 10.11264035061969,\n    '233U': -1.7989320020700355,\n    '235U': -0.827595836303406,\n    '237Np': 9.634957841595446,\n    '239Pu': 3.079527664560569,\n    '241Pu': -2.067247283734719,\n    '241Am': 4.878459666630606,\n    '243Am': 4.634536683299075,\n    '243Cm': 1.2196149166576515,\n    '245Cm': 1.0889418898729026,\n    '247Cm': 0.6098074583288254,\n};\n//# sourceMappingURL=gyromagneticRatioMHzT.js.map","import { gyromagneticRatio } from '.';\n/**\n * Attempts to resolve a nucleus string to a canonical gyromagnetic nucleus symbol.\n * @param nucleus - The name or symbol of the nucleus (e.g., '1H', 'proton').\n * @returns The canonical nucleus symbol if found, otherwise null.\n */\nexport function getGyromagneticNucleus(nucleus) {\n    nucleus = nucleus.toLowerCase();\n    if (nucleus === 'proton')\n        return '1H';\n    for (const key in gyromagneticRatio) {\n        if (key.toLowerCase() === nucleus)\n            return key;\n    }\n    if (nucleus in gyromagneticRatio) {\n        return nucleus;\n    }\n    // we try to use only the numbers\n    const nucleusNumber = nucleus.replaceAll(/[^0-9]/g, '');\n    if (!nucleusNumber)\n        return null;\n    const filteredNuclei = [];\n    for (const key in gyromagneticRatio) {\n        if (key.replaceAll(/[^0-9]/g, '') === nucleusNumber) {\n            filteredNuclei.push(key);\n        }\n    }\n    if (filteredNuclei.length === 1) {\n        return filteredNuclei[0];\n    }\n    return null;\n}\n//# sourceMappingURL=getGyromagneticNucleus.js.map","import { getGyromagneticNucleus, gyromagneticRatio } from '.';\n/**\n * Returns the gyromagnetic ratio for a given nucleus string.\n * @param nucleus - The name or symbol of the nucleus (e.g., '1H', 'proton').\n * @returns The gyromagnetic ratio for the nucleus, or null if not found.\n */\nexport function getGyromagneticRatio(nucleus) {\n    const realNucleus = getGyromagneticNucleus(nucleus);\n    if (realNucleus) {\n        return gyromagneticRatio[realNucleus];\n    }\n    return null;\n}\n//# sourceMappingURL=getGyromagneticRatio.js.map","import { gyromagneticRatioMHzT } from './gyromagneticRatioMHzT';\nexport const gyromagneticRatio = Object.fromEntries(Object.entries(gyromagneticRatioMHzT).map(([key, value]) => [\n    key,\n    value * 2 * Math.PI * 1e6,\n]));\nexport * from './gyromagneticRatioMHzT';\nexport * from './getGyromagneticNucleus';\nexport * from './getGyromagneticRatio';\n//# sourceMappingURL=index.js.map","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","/// <reference path=\"median-quickselect.d.ts\" />\nimport { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\nexport default function median(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    return quickSelectMedian(input.slice());\n}\n//# sourceMappingURL=index.js.map","import{ensureString as me}from\"ensure-string\";var $=/\\s*\\$\\$.*/;function E(e,m=/\\r\\n/.exec(e)?`\\r\n`:`\n`){return e.split(m).map(o=>o.replace($,\"\")).filter(Boolean).join(m).trim()}function Le(e,m={}){e=me(e);let{flatten:t=!1}=m,o=e.split(/\\r?\\n/),f=[],i=[],n=[],l={title:\"\",jcamp:\"\",children:[]},s=0,c=e.includes(\"## \");for(let u=0;u<o.length;u++){let b=o[u],p=c?b.replaceAll(\" \",\"\"):b;if(p.startsWith(\"##NTUPLES\")&&s++,p.startsWith(\"##TITLE\")){let r=[p.slice(8).trim()];for(let a=u+1;a<o.length&&!o[a].startsWith(\"##\");a++)r.push(o[a].trim());l={title:r.join(`\n`),jcamp:`${b}\n`,children:[]},i.push(l),f.push(l)}else if(p.startsWith(\"##END\")&&s===0&&l){l.jcamp+=`${b}\n`;let r=i.pop();if(!r)throw new Error(\"Not finished\");l=i.at(-1),l!==void 0?l.children?.push(r):n.push(r)}else if(l?.jcamp){l.jcamp+=`${b}\n`;let r=p.match(/^##(.*?)=(.+)/);if(r){let a=r[1].replaceAll(/[ _-]/g,\"\").toUpperCase();a===\"DATATYPE\"?l.dataType=r[2].trim():a===\"DATACLASS\"?l.dataClass=r[2].trim():a===\"JCAMPDX\"?l.jcampDX=E(r[2].trim()):a===\"JCAMPCS\"&&(l.jcampCS=E(r[2].trim()))}}p.startsWith(\"##END\")&&s>0&&s--}if(t){for(let u of f)u.children=void 0;return f}else return n}import{parseString as be}from\"dynamic-typing\";import{ensureString as ge}from\"ensure-string\";var te=new Set([\"TIC\",\".RIC\",\"SCANNUMBER\"]);function ne(e){let m=e.spectra,t=m.length,o={times:new Array(t),series:{ms:{dimension:2,data:new Array(t)}}},f=[];for(let i of te){let n=k(i);m[0][n]&&(f.push(n),o.series[n]={dimension:1,data:new Array(t)})}for(let i=0;i<t;i++){let n=m[i];o.times[i]=n.pageValue;for(let l of f)o.series[l].data[i]=Number(n[l]);n.data&&(o.series.ms.data[i]=[n.data.x,n.data.y])}e.chromatogram=o}function re(e){return te.has(e)}function k(e){return e.toLowerCase().replaceAll(/[^a-z0-9]/g,\"\")}function O(e){return e.map(Number)}function V(e,m,t){let{logger:o}=t;o&&(e.xFactor||o.info(\"The xFactor is not defined, it will be set to 1\"),e.yFactor||o.info(\"The yFactor is not defined, it will be set to 1\"));let f=e.yFactor??1,i=e.xFactor??1,n=e.deltaX??1,l=Math.abs(n*.1),s=.01;e.isXYdata=!0;let c={x:[],y:[]};e.data=c;let u=e.firstX||0,b=e.firstY||0,p=!1,r,a=0;for(;a<m.length;a++)if(r=m.codePointAt(a),r===13||r===10)p=!0;else if(p)break;let d=0,g=!0,A=!1,x=!1,I=0,S=!1,C=!1,h=0,X=0,L=!1,N=!1,Y=!1,F=0;for(;a<=m.length;a++)if(a===m.length?r=13:r=m.codePointAt(a),C)(r===13||r===10)&&(g=!0,C=!1,d++);else if(r<=57&&r>=48)N=!0,F>0?h+=(r-48)/10**F++:(h*=10,h+=r-48);else if(r===44||r===46)N=!0,F++;else{if(N){if(L&&(h=h*-1,L=!1),g)h*=i,o&&(x?Math.abs(u-n-h)>l&&(Math.abs(u-h)<l?o.trace(`Data line ${d}: After a DIFFERENCE the next line should repeat the last value and this does not seem to be the case: Current value: ${h} - Expected: ${u}.`):Math.abs(u-n-h)>10*l?o.trace(`Data line ${d}: The difference between the first value ${h} and the expected first x value ${u} based on increment after a DIFFERENCE is too high`):o.trace(`Data line ${d}: The difference between the first value ${h} and the expected first x value ${u} based on increment after a DIFFERENCE is too high`)):Math.abs(u-h)>l&&o.trace(`Data line ${d}: The difference between the first value ${h} and the first x value ${u} is too high`)),g=!1,x&&(Y=!0);else if(Y)Y=!1,o&&Math.abs(b-h)>s&&o.trace(`Data line ${d}: After a duplicate the next line should repeat the same value ${h} !== ${b}`),b=h;else{A?(I=L?0-h:h,x=!0,A=!1):S||(X=L?0-h:h);let y=S?h-1:1;for(let M=0;M<y;M++)x?b+=I:b=X,c.x.push(u),c.y.push(b*f),u+=n}L=!1,h=0,F=0,N=!1,S=!1}if(r<74&&r>63)N=!0,x=!1,h=r-64;else if(r>96&&r<106)N=!0,x=!1,h=r-96,L=!0;else if(r===115)N=!0,S=!0,h=9;else if(r>82&&r<91)N=!0,S=!0,h=r-82;else if(r>73&&r<83)N=!0,A=!0,h=r-73;else if(r>105&&r<115)N=!0,A=!0,h=r-105,L=!0;else if(r===36&&m.codePointAt(a+1)===36)N=!0,C=!0;else if(r===37)N=!0,A=!0,h=0,L=!1;else if(r===45){let y=m.codePointAt(a+1);(y!==void 0&&y>=48&&y<=57||y===44||y===46)&&(N=!0,g||(x=!1),L=!0)}else(r===13||r===10)&&(g=!0,C=!1,d++)}o&&x&&o.warn(\"The last value is a difference, it should be repeated on the next line\")}var oe=/[,\\t ]+/;function w(e,m,t){if(e.isPeaktable=!0,!e.variables||Object.keys(e.variables).length===2?ue(e,m,t):ce(e,m,t),e.variables)for(let o in e.variables)e.variables[o].data=e.data?.[o]}function ue(e,m,t){let{logger:o}=t,f={x:[],y:[]};e.data=f;let i=m.split(/,? *,?[;\\r\\n]+ */);for(let n=1;n<i.length;n++){let l=i[n].trim().replace($,\"\").split(oe);if(l.length%2===0)for(let s=0;s<l.length;s=s+2)e.xFactor!==void 0&&e.yFactor!==void 0&&(f.x.push(Number(l[s])*e.xFactor),f.y.push(Number(l[s+1])*e.yFactor));else o?.warn(`Format error: ${l.toString()}`)}}function ce(e,m,t){let{logger:o}=t,f={},i=Object.keys(e.variables),n=i.length;for(let s of i)f[s]=[];e.data=f;let l=m.split(/,? *,?[;\\r\\n]+ */);for(let s=1;s<l.length;s++){let c=l[s].trim().replace($,\"\").split(oe);if(c.length%n===0)for(let u=0;u<c.length;u++)f[i[u%n]].push(Number(c[u]));else o?.warn(`Wrong number of columns: ${c.toString()}`)}}function B(e,m){e.isXYAdata=!0;let t={};e.data=t;let o=m.split(/\\r?\\n/),f=o[0].replace(/^.*?([A-Z]+).*$/,\"$1\").split(\"\").map(i=>i.toLowerCase());for(let i=1;i<o.length;i++){let n=o[i].replace(/^\\((.*)\\)$/,\"$1\").split(/ *, */);for(let l=0;l<f.length;l++){let s=n[l];switch(f[l]){case\"x\":case\"y\":case\"w\":s=Number.parseFloat(s);break;case\"a\":s=s.replace(/^<(.*)>$/,\"$1\");break;case\"m\":break;default:continue}t[f[l]]||(t[f[l]]=[]),t[f[l]].push(s)}}}import{parseString as le}from\"dynamic-typing\";import{getGyromagneticRatio as ie}from\"gyromagnetic-ratio\";import ae from\"ml-array-median\";function se(e){return Array.isArray(e)?e[0]:e}function Z(e){let{spectra:m}=e,t=m[0].data.y[0],o=t,f=m.length,i=m[0].data.x.length||0,n=new Array(f);for(let r=0;r<f;r++){n[r]=m[r].data.y;for(let a=0;a<i;a++){let d=n[r][a];d<t&&(t=d),d>o&&(o=d)}}let l=m[0].data.x[0],s=m[0].data.x.at(-1),{firstY:c,lastY:u}=pe(e);if(l>s)for(let r of n)r.reverse();c>u&&n.reverse();let b=[];for(let r=0;r<n.length;r++){let a=Float64Array.from(n[r]);for(let d=0;d<a.length;d++)a[d]<0&&(a[d]=-a[d]);b.push(ae(a))}let p=ae(b);return{z:n,minX:Math.min(l,s),maxX:Math.max(l,s),minY:Math.min(c,u),maxY:Math.max(c,u),minZ:t,maxZ:o,noise:p}}function pe(e){let{spectra:m,ntuples:t,info:o}=e;if(t)for(let f of t){let{symbol:i,nucleus:n,units:l}=f;if(i.match(/[F|T]1/)&&l?.toUpperCase().match(\"HZ\")){let s=se(o[\".OBSERVEFREQUENCY\"]),{nucleus:c}=t.find(d=>d.symbol.match(/[F|T]2/));if([s,c,n].some(d=>!d))break;let u=ie(c),b=ie(n),{first:p,last:r}=f,a=b!==null&&u!==null?s*b/u:s;return{firstY:p/a,lastY:r/a}}}return{firstY:m[0].pageValue,lastY:m.at(-1).pageValue}}function H(e,m){let t=e.noise,o=e.z,f,i,n,l,s,c,u,b,p=o.length,r=o[0].length,a,d,g,A,x=e.minX,S=(e.maxX-x)/(r-1),C=e.minY,X=(e.maxY-C)/(p-1),L=e.minZ,N=e.maxZ,Y=m.nbContourLevels*2,F=new Array(Y),y;for(let M=0;M<Y;M++){let U={};F[M]=U;let fe=M%2,Q=(N-m.noiseMultiplier*t)*Math.exp((M>>1)-m.nbContourLevels);fe===0?y=Q+m.noiseMultiplier*t:y=0-Q-m.noiseMultiplier*t;let D=[];if(U.zValue=y,U.lines=D,!(y<=L||y>=N))for(let v=0;v<p-1;v++){let _=o[v],ee=o[v+1];for(let T=0;T<r-1;T++)f=_[T],i=_[T+1],n=ee[T],l=ee[T+1],s=f>y,c=i>y,u=n>y,b=l>y,s!==c&&s!==u&&(a=T+(y-f)/(i-f),d=v,g=T,A=v+(y-f)/(n-f),D.push(a*S+x,d*X+C,g*S+x,A*X+C)),b!==c&&b!==u&&(a=T+1,d=v+1-(y-l)/(i-l),g=T+1-(y-l)/(n-l),A=v+1,D.push(a*S+x,d*X+C,g*S+x,A*X+C)),c!==u&&(a=(T+1-(y-i)/(n-i))*S+x,d=(v+(y-i)/(n-i))*X+C,c!==s&&(g=T+1-(y-i)/(f-i),A=v,D.push(a,d,g*S+x,A*X+C)),u!==s&&(g=T,A=v+1-(y-n)/(f-n),D.push(a,d,g*S+x,A*X+C)),c!==b&&(g=T+1,A=v+(y-i)/(l-i),D.push(a,d,g*S+x,A*X+C)),u!==b&&(g=T+(y-n)/(l-n),A=v+1,D.push(a,d,g*S+x,A*X+C)))}}return{minX:e.minX,maxX:e.maxX,minY:e.minY,maxY:e.maxY,segments:F}}function G(e,m){let t=Z(e);m.noContour||(e.contourLines=H(t,m),delete t.z),e.minMax=t}import{getGyromagneticRatio as W}from\"gyromagnetic-ratio\";function z(e,m){for(let t of e){let o=0,f=0;for(let i of t.spectra){if(t.ntuples?.symbol?(!o&&i.observeFrequency&&(o=i.observeFrequency),!f&&i.shiftOffsetVal&&(f=i.shiftOffsetVal)):(o=i.observeFrequency,f=i.shiftOffsetVal),o&&i.xUnits?.toUpperCase().includes(\"HZ\")&&(i.xUnits=\"PPM\",i.xFactor=i.xFactor!==void 0?i.xFactor/o:void 0,i.firstX=i.firstX!==void 0?i.firstX/o:void 0,i.lastX=i.lastX!==void 0?i.lastX/o:void 0,i.deltaX=i.deltaX!==void 0?i.deltaX/o:void 0,i.data))for(let n=0;n<i.data.x.length;n++)i.data.x[n]/=o;if(f&&i.xUnits.toLowerCase().includes(\"ppm\")&&i.firstX!==void 0&&i.lastX!==void 0){let n=i.firstX-f;if(i.firstX=i.firstX-n,i.lastX=i.lastX-n,i.data)for(let l=0;l<i.data.x.length;l++)i.data.x[l]-=n}if(t.ntuples?.nucleus&&t.ntuples.symbol)for(let n=0;n<t.ntuples.nucleus.length;n++){let l=t.ntuples.symbol[n],s=t.ntuples.nucleus[n];if(l.match(/^[F|T]/)&&!s){if(l.match(/[F|T]1/))if(t.tmp.$NUC2&&typeof t.tmp.$NUC2==\"string\")t.ntuples.nucleus[n]=t.tmp.$NUC2;else{let c=t.ntuples.symbol.indexOf(l.replace(/^([F|T]).*/,\"$12\"));c&&t.ntuples.nucleus[c]&&(t.ntuples.nucleus[n]=t.ntuples.nucleus[c])}l.match(/[F|T]2/)&&typeof t.tmp.$NUC1==\"string\"&&(t.ntuples.nucleus[n]=t.tmp.$NUC1)}l.match(/[F|T]2/)&&(t.yType=t.ntuples.nucleus[0],t.xType&&!W(t.xType)&&(t.xType=t.ntuples.nucleus[1]))}if(o&&t.ntuples?.symbol&&t.ntuples.nucleus){let n=\"\",l=t.ntuples.symbol.indexOf(i.pageSymbol);t.ntuples.units?.[l]&&(n=t.ntuples.units[l]);let{nucleus:s}=t.ntuples;if(!n.toLowerCase().match(/(ppm|seconds)/)&&s.length>1){if(l!==0){let p=\"Not sure about this ntuples format\";if(m){m.warn(p);continue}else throw new Error(p)}let{nucleus:c}=t.ntuples,u=W(c[0]),b=W(c[1]);if(!u||!b){let p=`Problem with determination of gyromagnetic ratio for ${c.join(\"-\")}`;if(m)m.error(p);else throw new Error(p)}else{let p=u/b*o;i.pageValue/=p}}}}}}function J(e){let m=e.spectra[0].data;e.chromatogram={times:m.x.slice(),series:{intensity:{dimension:1,data:m.y.slice()}}}}function q(e,m,t){z(e,t.logger),de(e,t);for(let o of e){if(Object.keys(o.ntuples).length>0){let f=[],i=Object.keys(o.ntuples);for(let n of i){let l=o.ntuples[n];if(l)for(let s=0;s<l.length;s++)f[s]||(f[s]={}),f[s][n]=l[s]}o.ntuples=f}o.twoD&&t.wantXY&&(G(o,t),t.logger?.trace({profiling:!0},\"Finished countour plot calculation\"),t.keepSpectra||delete o.spectra),t.chromatogram&&(o.spectra.length>1?ne(o):J(o),t.logger?.trace({profiling:!0},\"Finished chromatogram calculation\")),delete o.tmp}}function de(e,m){for(let t of e)for(let o in t.meta){let f=t.meta[o];if(typeof f==\"string\"){if(f.startsWith(\"{\")){if(!f.includes(\":\")&&f.endsWith(\"}\")){let i=f.slice(1,-1).split(/[,; ]+/).filter(Boolean);for(let n=0;n<i.length;n++)t.meta[o+String(n)]=m.dynamicTyping?le(i[n]):i[n]}}else if(f.startsWith(\"(\")){let i=f.split(/\\r?\\n/),n=/^\\((?<from>\\d+)\\.\\.(?<to>\\d+)\\).*$/;if(n.test(i[0])){let[l,s]=i[0].match(n)?.slice(1).map(Number)??[],c=i.slice(1).join(\" \").split(/[,; ]+/).filter(Boolean);for(let u=l;u<=s;u++)m.dynamicTyping&&typeof c[u-l]==\"string\"?t.meta[o+String(u)]=le(c[u-l]):t.meta[o+String(u)]=c[u-l]}}}}}function K(e,m,t){let o=-1,f=-1,i=\"\",n=\"\";if(t.indexOf(\"++\")>0)i=t.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/,\"$1\"),n=t.replace(/.*\\.\\.([a-zA-Z0-9]+).*/,\"$1\");else{t=t.replaceAll(/[^a-zA-Z%]/g,\"\"),i=t.charAt(0),n=t.charAt(1),m.variables={};for(let l of t){let s=l.toLowerCase(),c=e.ntuples.symbol?.indexOf(l)||0;if(c===-1)throw new Error(`Symbol undefined: ${l}`);m.variables[s]={};for(let u in e.ntuples)e.ntuples[u]?.[c]&&(m.variables[s][u.replace(/^var/,\"\")]=e.ntuples[u]?.[c])}}o=e.ntuples.symbol?.indexOf(i)??-1,f=e.ntuples.symbol?.indexOf(n)??-1,o===-1&&(o=0),f===-1&&(f=0),e.ntuples.first&&(e.ntuples.first.length>o&&(m.firstX=e.ntuples.first[o]),e.ntuples.first.length>f&&(m.firstY=e.ntuples.first[f])),e.ntuples.last&&(e.ntuples.last.length>o&&(m.lastX=e.ntuples.last[o]),e.ntuples.last.length>f&&(m.lastY=e.ntuples.last[f])),e.ntuples.vardim&&e.ntuples.vardim.length>o&&(m.nbPoints=e.ntuples.vardim[o]),e.ntuples.factor&&(e.ntuples.factor.length>o&&(m.xFactor=e.ntuples.factor[o]),e.ntuples.factor.length>f&&(m.yFactor=e.ntuples.factor[f])),e.ntuples.units&&(e.ntuples.units.length>o&&(e.ntuples.varname?.[o]?m.xUnits=`${e.ntuples.varname[o]} [${e.ntuples.units[o]}]`:m.xUnits=e.ntuples.units[o]),e.ntuples.units.length>f&&(e.ntuples.varname?.[f]?m.yUnits=`${e.ntuples.varname[f]} [${e.ntuples.units[f]}]`:m.yUnits=e.ntuples.units[f]))}function j(e){e.xFactor||(e.xFactor=1),e.yFactor||(e.yFactor=1)}var R=/[ \\t]*,[ \\t]*/,he={removeComments:!1,keepRecordsRegExp:/^$/,canonicDataLabels:!0,canonicMetadataLabels:!1,dynamicTyping:!0,withoutXY:!1,noTrimRegExp:/^$/,chromatogram:!1,keepSpectra:!1,noContour:!1,nbContourLevels:7,noiseMultiplier:5};function pt(e,m={}){e=ge(e);let t={...he,...m};t.logger?.debug(\"Starting jcamp conversion\"),t.wantXY=!t.withoutXY,t.start=Date.now();let o=[],f={entries:[],flatten:[]},i={children:[],spectra:[],ntuples:{},info:{},meta:{},tmp:{}},n=i,l=[],s={data:{}};t.logger?.trace({profiling:!0},\"Before split to LDRS\");let c=e.replaceAll(/[\\r\\n]+##/g,`\n##`).split(`\n##`);t.logger?.trace({profiling:!0},\"Split to LDRS\"),c[0]&&(c[0]=c[0].replace(/^[\\r\\n ]*##/,\"\"));for(let u of c){let b=u.indexOf(\"=\"),p=b>0?u.slice(0,Math.max(0,b)):u,r=b>0?p.match(t.noTrimRegExp)?u.slice(Math.max(0,b+1)):u.slice(Math.max(0,b+1)).trim():\"\",a=p.replaceAll(/[_ -]/g,\"\").toUpperCase();if(a===\"DATATABLE\"){let d=r.indexOf(`\n`);if(d===-1&&(d=r.indexOf(\"\\r\")),d>0){let g=r.slice(0,Math.max(0,d)).split(/[ ,;\\t]+/);K(n,s,g[0]),s.datatable=g[0],g[1]?.includes(\"PEAKS\")?a=\"PEAKTABLE\":g[1]&&(g[1].indexOf(\"XYDATA\")||g[0].indexOf(\"++\")>0)&&(a=\"XYDATA\",s.nbPoints&&s.lastX!==void 0&&s.firstX!==void 0&&(s.deltaX=(s.lastX-s.firstX)/(s.nbPoints-1)))}}if(a===\"XYDATA\"){t.wantXY&&(j(s),r.match(/.*\\+\\+.*/)?(s.nbPoints&&s.lastX!==void 0&&s.firstX!==void 0&&(s.deltaX=(s.lastX-s.firstX)/(s.nbPoints-1)),V(s,r,t)):w(s,r,t),n?.spectra.push(s),s={data:{}});continue}else if(a===\"PEAKTABLE\"){t.wantXY&&(j(s),w(s,r,t),n?.spectra.push(s),s={data:{}});continue}if(a===\"PEAKASSIGNMENTS\"){t.wantXY&&(r.match(/.*[^A-Z]*.*/)&&B(s,r),n?.spectra.push(s),s={data:{}});continue}if(t.removeComments&&(r=r.split(/\\r?\\n/).map(d=>d.replace(/ *\\$\\$.*$/,\"\")).join(`\n`)),a===\"TITLE\"){let d=n;d.children||(d.children=[]),n={spectra:[],ntuples:{},info:{},meta:{},tmp:{}},d.children.push(n),l.push(d),o.push(n),n.title=r}else a===\"DATATYPE\"?(n.dataType=r,r.match(/^nd|\\snd\\s/i)&&(n.twoD=!0)):a===\"NTUPLES\"?r.match(/^nd|\\snd\\s/i)&&(n.twoD=!0):a===\"DATACLASS\"?n.dataClass=r:a===\"JCAMPDX\"?n.jcampDX=E(r):a===\"JCAMPCS\"?n.jcampCS=E(r):a===\"XUNITS\"?s.xUnits=r:a===\"YUNITS\"?s.yUnits=r:a===\"FIRSTX\"?s.firstX=Number(r):a===\"LASTX\"?s.lastX=Number(r):a===\"FIRSTY\"?s.firstY=Number(r):a===\"LASTY\"?s.lastY=Number(r):a===\"NPOINTS\"?s.nbPoints=Number(r):a===\"XFACTOR\"?s.xFactor=Number(r):a===\"YFACTOR\"?s.yFactor=Number(r):a===\"MAXX\"?s.maxX=Number(r):a===\"MINX\"?s.minX=Number(r):a===\"MAXY\"?s.maxY=Number(r):a===\"MINY\"?s.minY=Number(r):a===\"DELTAX\"?s.deltaX=Number(r):a===\".OBSERVEFREQUENCY\"||a===\"$SFO1\"?s.observeFrequency||(s.observeFrequency=Number(r)):a===\".OBSERVENUCLEUS\"?s.xType||(n.xType=r.replaceAll(/[^a-zA-Z0-9]/g,\"\")):a===\"$OFFSET\"?(n.shiftOffsetNum=0,s.shiftOffsetVal||(s.shiftOffsetVal=Number(r))):a===\"$REFERENCEPOINT\"||(a===\"VARNAME\"?n.ntuples.varname=r.split(R):a===\"SYMBOL\"?n.ntuples.symbol=r.split(R):a===\"VARTYPE\"?n.ntuples.vartype=r.split(R):a===\"VARFORM\"?n.ntuples.varform=r.split(R):a===\"VARDIM\"?n.ntuples.vardim=O(r.split(R)):a===\"UNITS\"?n.ntuples.units=r.split(R):a===\"FACTOR\"?n.ntuples.factor=O(r.split(R)):a===\"FIRST\"?n.ntuples.first=O(r.split(R)):a===\"LAST\"?n.ntuples.last=O(r.split(R)):a===\"MIN\"?n.ntuples.min=O(r.split(R)):a===\"MAX\"?n.ntuples.max=O(r.split(R)):a===\".NUCLEUS\"?n.ntuples&&(n.ntuples.nucleus=r.split(R).map(d=>d.replaceAll(/[^a-zA-Z0-9]/g,\"\"))):a===\"PAGE\"?(s.page=r.trim(),s.pageValue=Number(r.replace(/^.*=/,\"\")),s.pageSymbol=s.page.replace(/[=].*/,\"\")):a===\"RETENTIONTIME\"?s.pageValue=Number(r):re(a)?s[k(a)]=r:a===\"SAMPLEDESCRIPTION\"?s.sampleDescription=r:a.startsWith(\"$NUC\")?!n.tmp[a]&&!r.includes(\"off\")&&(n.tmp[a]=r.replaceAll(/[<>]/g,\"\")):a===\"END\"&&(n=l.pop()));if(n?.info&&n.meta&&a.match(t.keepRecordsRegExp)){let d,g;p.startsWith(\"$\")?(g=t.canonicMetadataLabels?a.slice(1):p.slice(1),d=n.meta):(g=t.canonicDataLabels?a:p,d=n.info),t.dynamicTyping&&(r=be(r)),d[g]?(Array.isArray(d[g])||(d[g]=[d[g]]),d[g].push(r)):d[g]=r}}if(t.logger?.trace({profiling:!0},\"Finished parsing\"),q(o,f,t),t.logger?.trace({profiling:!0},\"Total time\"),f.entries=i.children||[],f.flatten=o,t.logger){t.logger.debug(\"Finished jcamp conversion\");for(let u of f.flatten)t.logger.debug(`${u.dataType} - ${u.title}`)}return f}function gt(e,m){let{logger:t,OCL:o}=m;if(!e.info.ATOMLIST||!e.info.BONDLIST){t?.warn(\"No ATOMLIST or BONDLIST in the JCAMP-CS entry\");return}Te(e,t);let f=xe(e.info.ATOMLIST),i=Ae(e.info.BONDLIST),n=Ne(e.info.CHARGE,t),l=Se(e.info.XYRASTER,t),s=Ce(e.info.STEREOCENTER,t),c=ye(o,{atoms:f,bonds:i,charges:n,xyRasters:l,stereocenters:s},t);return{molecule:c,molfile:c.toMolfile()}}function ye(e,m,t){let{atoms:o,bonds:f,charges:i,xyRasters:n,stereocenters:l}=m,s={S:e.Molecule.cBondTypeSingle,D:e.Molecule.cBondTypeDouble,T:e.Molecule.cBondTypeTriple,Q:e.Molecule.cBondTypeQuadruple},c={},u=new e.Molecule(o.length,f.length);for(let p of o){let r=e.Molecule.getAtomicNoFromLabel(p.element);r||(t?.error(`Atomic number of ${p.element} could not be determined`),r=e.Molecule.getAtomicNoFromLabel(\"X\")),c[p.atomNumber]=u.addAtom(r),u.setAtomMapNo(c[p.atomNumber],p.atomNumber,!1)}for(let p of f){if(c[p.atomNumber1]===void 0){t?.error(`A bond goes from atomNumber ${p.atomNumber1} that does not exists`);continue}if(c[p.atomNumber2]===void 0){t?.error(`A bond goes to atomNumber ${p.atomNumber2} that does not exists`);continue}let r=u.addBond(c[p.atomNumber1],c[p.atomNumber2]);u.setBondType(r,s[p.bondType])}for(let p of i){if(c[p.atomNumber]===void 0){t?.error(`A charge goes to atomNumber ${p.atomNumber} that does not exists`);continue}u.setAtomCharge(c[p.atomNumber],p.value)}let b=n.length===0||l.length>0;for(let p of n){if(c[p.atomNumber]===void 0){t?.error(`A XYRASTER goes to atomNumber ${p.atomNumber} that does not exists`);continue}u.setAtomX(c[p.atomNumber],p.x),u.setAtomY(c[p.atomNumber],p.y),u.setAtomZ(c[p.atomNumber],p.z)}u.ensureHelperArrays(e.Molecule.cHelperParities);for(let p of l){let{atomNumber:r,type:a}=p,d=c[r];if(d===void 0){t?.error(`A stereocenter goes to atomNumber ${r} that does not exists`);continue}if(!u.isAtomStereoCenter(d)){t?.warn(`Want to set chirality of atom number ${r} but it is not a stereocenter`);continue}if(u.getAtomParity(d)!==e.Molecule.cAtomParityUnknown){t?.debug(`Atom number ${r} already has a parity defined based on 3D coordinates`);continue}let x=a===\"P\"?e.Molecule.cAtomParity1:e.Molecule.cAtomParity2;u.setAtomParity(c[r],x,!1)}return u.ensureHelperArrays(e.Molecule.cHelperParities),b&&u.inventCoordinates({keepHydrogens:!0}),u}function xe(e){let m=P(e),t=[];for(let o of m){let[f,i,n]=o.trim().split(/\\s+/);t.push({atomNumber:Number(f),element:i,nbImplicitHydrogens:n?.length>0?Number(n):void 0})}return t}function Ae(e){let m=P(e),t=[];for(let o of m){let[f,i,n]=o.trim().split(/\\s+/);t.push({atomNumber1:Number(f),atomNumber2:Number(i),bondType:n})}return t}function Ne(e,m){if(!e)return[];let t=P(e),o=[];for(let f of t){let[i,n,l]=f.trim().split(/\\s+/);l!==void 0&&m?.warn(\"Charge on multiple atom is not supported\"),o.push({atomNumber:Number(n),value:Number(i)})}return o}function Se(e,m){if(!e)return[];let t=P(e),o=[];for(let f of t){let[i,n,l,s]=f.trim().split(/\\s+/);if(i===void 0){m?.warn(\"XYRASTER without atom number is not supported\");continue}o.push({atomNumber:Number(i),x:Number(n),y:Number(l),z:s!==void 0?Number(s):0})}return o}function Ce(e,m){if(!e)return[];let t=P(e),o=[];for(let f of t){let[i,n]=f.trim().split(/\\s+/);if(![\"P\",\"M\"].includes(n)){m?.warn(`Stereocenter type ${n} is not supported`);continue}o.push({atomNumber:Number(i),type:n})}return o}function P(e){return e.split(/\\r?\\n/).map(m=>E(m)).filter(Boolean)}function Te(e,m){let t=[\"STEREOPAIR\",\"STEREOCENTER\",\"RADICAL\",\"STEREOMOLECULE\"];for(let o of t)e.info[o]&&m?.warn(`JCAMP-CS parser do not support: ${o}`)}export{pt as convert,Le as createTree,gt as parseJcampCS,E as removeComment,$ as removeCommentRegExp};\n","import { convert } from 'jcampconverter';\nimport { Analysis } from '../Analysis.js';\n/**\n * Creates a new Analysis from a JCAMP string.\n * @param jcamp - String containing the JCAMP data\n * @param options - Options for the analysis\n * @returns New Analysis instance with the parsed data\n */\nexport function fromJcamp(jcamp, options = {}) {\n    const analysis = new Analysis(options);\n    addJcamp(analysis, jcamp);\n    return analysis;\n}\nfunction addJcamp(analysis, jcamp) {\n    const converted = convert(jcamp, {\n        keepRecordsRegExp: /.*/,\n    });\n    for (const entry of converted.flatten) {\n        if (!entry.spectra?.[0])\n            continue;\n        const currentSpectrum = entry.spectra[0];\n        // we ensure variables\n        if (!currentSpectrum.variables) {\n            const variables = {};\n            currentSpectrum.variables = variables;\n            variables.x = {\n                label: currentSpectrum.xUnits,\n                symbol: 'X',\n                data: currentSpectrum.data.x || currentSpectrum.data.X,\n            };\n            variables.y = {\n                label: currentSpectrum.yUnits,\n                symbol: 'Y',\n                data: currentSpectrum.data.y || currentSpectrum.data.Y,\n            };\n        }\n        else {\n            for (const key in currentSpectrum.variables) {\n                const variable = currentSpectrum.variables[key];\n                if (variable.label)\n                    continue;\n                variable.label = variable.name || variable.symbol || key;\n                if (variable.units && !variable.label.includes(variable.units)) {\n                    // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n                    variable.label += ` [${variable.units}]`;\n                }\n            }\n        }\n        analysis.pushSpectrum(currentSpectrum.variables, {\n            dataType: entry.dataType,\n            title: entry.title,\n            meta: entry.meta,\n        });\n    }\n}\n//# sourceMappingURL=fromJcamp.js.map","import { ensureString } from 'ensure-string';\nimport { xIsMonotonic, xMaxValue, xyUniqueX } from 'ml-spectra-processing';\n/**\n * General internal parsing function\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns parsed text file with column information\n */\nexport function parse(text, options = {}) {\n    const { rescale = false, uniqueX = false, bestGuess = false, \n    //@ts-expect-error old library used this property and we want to throw an error so that people are forced to migrate\n    keepInfo, } = options;\n    let { xColumn = 0, yColumn = 1, numberColumns = Number.MAX_SAFE_INTEGER, maxNumberColumns = Number.MAX_SAFE_INTEGER, minNumberColumns = 2, } = options;\n    if (keepInfo !== undefined) {\n        throw new Error('keepInfo has been deprecated, please use the new method parseXYAndKeepInfo');\n    }\n    text = ensureString(text);\n    maxNumberColumns = Math.max(maxNumberColumns, xColumn + 1, yColumn + 1);\n    minNumberColumns = Math.max(xColumn + 1, yColumn + 1, minNumberColumns);\n    const lines = text.split(/[\\n\\r]+/);\n    let matrix = [];\n    const info = [];\n    let position = 0;\n    for (let line of lines) {\n        line = line.trim();\n        // we will consider only lines that contains only numbers\n        if (/\\d+/.test(line) && /^[\\d\\t +,.;Ee-]+$/.test(line)) {\n            let fields = line.split(/,[\\t ;]+|[\\t ;]+/);\n            if (fields.length === 1) {\n                fields = line.split(/[\\t ,;]+/);\n            }\n            if (fields &&\n                fields.length >= minNumberColumns && // we filter lines that have not enough or too many columns\n                fields.length <= maxNumberColumns) {\n                matrix.push(fields.map((value) => Number.parseFloat(value.replace(',', '.'))));\n                position++;\n            }\n        }\n        else if (line) {\n            info.push({ position, value: line });\n        }\n    }\n    if (bestGuess) {\n        if (matrix[0]?.length === 3 &&\n            options.xColumn === undefined &&\n            options.yColumn === undefined) {\n            // is the first column a sequential number?\n            let skipFirstColumn = true;\n            for (let i = 0; i < matrix.length - 1; i++) {\n                const currentFirst = matrix[i][0];\n                const nextFirst = matrix[i + 1][0];\n                if (Math.abs(currentFirst - nextFirst) !== 1) {\n                    skipFirstColumn = false;\n                }\n            }\n            if (skipFirstColumn) {\n                xColumn = 1;\n                yColumn = 2;\n            }\n        }\n        if (matrix[0] && matrix[0].length > 3) {\n            const xs = [];\n            for (const row of matrix) {\n                for (let i = xColumn; i < row.length; i += 2) {\n                    xs.push(row[i]);\n                }\n            }\n            if (xIsMonotonic(xs)) {\n                numberColumns = 2;\n            }\n        }\n    }\n    if (numberColumns) {\n        const newMatrix = [];\n        for (const row of matrix) {\n            for (let i = 0; i < row.length; i += numberColumns) {\n                newMatrix.push(row.slice(i, i + numberColumns));\n            }\n        }\n        matrix = newMatrix;\n    }\n    let result = {\n        x: matrix.map((row) => row[xColumn]),\n        y: matrix.map((row) => row[yColumn]),\n    };\n    if (uniqueX) {\n        result = xyUniqueX(result, { algorithm: 'sum' });\n    }\n    if (rescale) {\n        const maxY = xMaxValue(result.y);\n        const yValues = result.y;\n        for (let i = 0; i < yValues.length; i++) {\n            yValues[i] = yValues[i] / maxY;\n        }\n    }\n    return {\n        info,\n        data: result,\n    };\n}\n//# sourceMappingURL=parse.js.map","import { parse } from \"./parse.js\";\nexport * from \"./ParseXYOptions.js\";\n/**\n * Parse a text-file and convert it to an object {x:[], y:[]}\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns - The parsed data\n */\nexport function parseXY(text, options = {}) {\n    return parse(text, options).data;\n}\n/**\n * Parse a text-file and returns the parsed data and information about the columns\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns - The parsed data with information about the columns\n */\nexport function parseXYAndKeepInfo(text, options = {}) {\n    return parse(text, options);\n}\n//# sourceMappingURL=index.js.map","export const addInfoData = (data, options = {}) => {\n    const { keys = Object.keys(data), prefix = '##$' } = options;\n    let header = '';\n    for (const key of keys) {\n        header +=\n            typeof data[key] === 'object'\n                ? `${prefix}${key}=${JSON.stringify(data[key])}\\n`\n                : `${prefix}${key}=${data[key]}\\n`;\n    }\n    return header;\n};\n//# sourceMappingURL=addInfoData.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkMatrix(data) {\n    if (!isAnyArray(data) || !isAnyArray(data[0])) {\n        throw new Error(`2D data should be a matrix`);\n    }\n}\n//# sourceMappingURL=checkMatrix.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkNumberOrArray(data) {\n    if (!isAnyArray(data) || isAnyArray(data[0])) {\n        throw new Error(`x and y data should be an array of numbers`);\n    }\n}\n//# sourceMappingURL=checkNumberOrArray.js.map","import { isAnyArray } from 'is-any-array';\nimport { matrixMinMaxZ } from 'ml-spectra-processing/matrix';\nimport { xMinMaxValues } from 'ml-spectra-processing/x';\nimport { checkMatrix } from \"./checkMatrix.js\";\nimport { checkNumberOrArray } from \"./checkNumberOrArray.js\";\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.js\";\nimport { getExtremeValues } from \"./utils/getExtremeValues.js\";\n/**\n * Parse from a xyxy data array\n * @param variables - Variables to convert to jcamp\n * @param [options={}] - options that allows to add meta data in the jcamp\n * @return JCAMP-DX text file corresponding to the variables\n */\nexport default function creatorNtuples(variables, options) {\n    const { meta = {}, info = {} } = options;\n    const { title = '', owner = '', origin = '', dataType = '', ...resInfo } = info;\n    const symbol = [];\n    const varName = [];\n    const varType = [];\n    const varDim = [];\n    const units = [];\n    const first = [];\n    const last = [];\n    const min = [];\n    const max = [];\n    const keys = Object.keys(variables);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const variable = variables[key];\n        if (!variable)\n            continue;\n        const name = variable?.label.replace(/ *\\[.*/, '');\n        const unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        symbol.push(variable.symbol || key);\n        varName.push(name || key);\n        varDim.push(variable.data.length);\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        if (variable.isDependent !== undefined) {\n            varType.push(variable.isDependent ? 'DEPENDENT' : 'INDEPENDENT');\n        }\n        else {\n            varType.push(variable.isDependent !== undefined\n                ? !variable.isDependent\n                : i === 0\n                    ? 'INDEPENDENT'\n                    : 'DEPENDENT');\n        }\n        units.push(variable.units || unit || '');\n    }\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##DATA CLASS= NTUPLES\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##FIRST=     ${first.join()}\n##LAST=      ${last.join()}\n##MIN=       ${min.join()}\n##MAX=       ${max.join()}\n##PAGE= N=1\\n`;\n    header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n    for (let i = 0; i < variables.x.data.length; i++) {\n        const point = [];\n        for (const key of keys) {\n            const variable = variables[key];\n            if (!variable)\n                continue;\n            point.push(variable.data[i]);\n        }\n        header += `${point.join('\\t')}\\n`;\n    }\n    header += `##END NTUPLES= ${dataType}\\n`;\n    header += '##END=\\n##END=';\n    return header;\n}\n//# sourceMappingURL=creatorNtuples.js.map","export function getFactorNumber(minMax, maxValue = 2 ** 31 - 1) {\n    let factor;\n    if (minMax.min < 0) {\n        if (minMax.max > 0) {\n            factor = Math.max(-minMax.min, minMax.max) / maxValue;\n        }\n        else {\n            factor = -minMax.min / maxValue;\n        }\n    }\n    else {\n        factor = minMax.max / maxValue;\n    }\n    return factor;\n}\n//# sourceMappingURL=getFactorNumber.js.map","import { xMinMaxValues } from 'ml-spectra-processing/x';\nimport { getFactorNumber } from \"./getFactorNumber.js\";\nexport function getBestFactor(array, options = {}) {\n    const { maxValue, factor, minMax } = options;\n    if (factor !== undefined) {\n        return factor;\n    }\n    // is there non integer number ?\n    let onlyInteger = true;\n    for (const y of array) {\n        if (Math.round(y) !== y) {\n            onlyInteger = false;\n            break;\n        }\n    }\n    if (onlyInteger) {\n        return 1;\n    }\n    // we need to rescale the values\n    // need to find the max and min values\n    const extremeValues = minMax || xMinMaxValues(array);\n    return getFactorNumber(extremeValues, maxValue);\n}\n//# sourceMappingURL=getBestFactor.js.map","/**\n * Reconvert number to original value\n * @param number Number used for computation\n * @param factor Multiplying factor\n * @returns Original value\n */\nexport function getNumber(number, factor) {\n    if (factor !== 1)\n        number /= factor;\n    const rounded = Math.round(number);\n    if (rounded !== number && Math.abs(rounded - number) <= Number.EPSILON) {\n        return rounded;\n    }\n    return number;\n}\n//# sourceMappingURL=getNumber.js.map","import { getNumber } from \"./getNumber.js\";\nexport function peakTableCreator(data, options = {}) {\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    let firstX = Number.POSITIVE_INFINITY;\n    let lastX = Number.NEGATIVE_INFINITY;\n    let firstY = Number.POSITIVE_INFINITY;\n    let lastY = Number.NEGATIVE_INFINITY;\n    const lines = [];\n    for (let i = 0; i < data.x.length; i++) {\n        const x = data.x[i];\n        const y = data.y[i];\n        if (firstX > x) {\n            firstX = x;\n        }\n        if (lastX < x) {\n            lastX = x;\n        }\n        if (firstY > y) {\n            firstY = y;\n        }\n        if (lastY < y) {\n            lastY = y;\n        }\n    }\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##PEAK TABLE=(XY..XY)');\n    for (let i = 0; i < data.x.length; i++) {\n        lines.push(`${getNumber(data.x[i], xFactor)} ${getNumber(data.y[i], yFactor)}`);\n    }\n    return lines;\n}\n//# sourceMappingURL=peakTableCreator.js.map","import { xDivide } from 'ml-spectra-processing/x';\nexport function rescaleAndEnsureInteger(data, factor = 1) {\n    if (factor === 1)\n        return data.map((value) => Math.round(value));\n    return xDivide(data, factor).map((value) => Math.round(value));\n}\n//# sourceMappingURL=rescaleAndEnsureInteger.js.map","/**\n * class encodes a integer vector as a String in order to store it in a text file.\n * The algorithms used to encode the data are describe in:\n *            http://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n */\nconst newLine = '\\n';\nconst pseudoDigits = [\n    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n    ['@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],\n    ['@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n    ['%', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'],\n    ['%', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'],\n    [' ', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 's'],\n];\nconst SQZ_P = 1;\nconst SQZ_N = 2;\nconst DIF_P = 3;\nconst DIF_N = 4;\nconst DUP = 5;\nconst maxLinelength = 100;\n/**\n * This function encodes the given vector. The xyEncoding format is specified by the\n * xyEncoding option\n * @param xyEncoding: ('FIX','SQZ','DIF','DIFDUP','CVS','PAC') Default 'DIFDUP'\n * @return {string}\n */\nexport function vectorEncoder(data, firstX, intervalX, xyEncoding) {\n    switch (xyEncoding) {\n        case 'FIX':\n            return fixEncoding(data, firstX, intervalX);\n        case 'SQZ':\n            return squeezedEncoding(data, firstX, intervalX);\n        case 'DIF':\n            return differenceEncoding(data, firstX, intervalX);\n        case 'DIFDUP':\n            return differenceDuplicateEncoding(data, firstX, intervalX);\n        case 'CSV':\n            return commaSeparatedValuesEncoding(data, firstX, intervalX);\n        case 'PAC':\n            return packedEncoding(data, firstX, intervalX);\n        case undefined:\n        default:\n            return differenceEncoding(data, firstX, intervalX);\n    }\n}\n/**\n * @private\n * No data compression used. The data is separated by a comma(',').\n */\nexport function commaSeparatedValuesEncoding(data, firstX, intervalX) {\n    return fixEncoding(data, firstX, intervalX, ',');\n}\n/**\n * @private\n * No data compression used. The data is separated by the specified separator.\n */\nexport function fixEncoding(data, firstX, intervalX, separator = ' ') {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += `${separator}${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += `${separator}${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * No data compression used. The data is separated by the sign of the number.\n */\nexport function packedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += data[j] < 0 ? String(data[j++]) : `+${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += data[i] < 0 ? String(data[i]) : `+${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Data compression is possible using the squeezed form (SQZ) in which the delimiter, the leading digit,\n * and sign are replaced by a pseudo-digit from Table 1. For example, the Y-values 30, 32 would be\n * represented as C0C2.\n */\nexport function squeezedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    // String outputData = new String();\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 10) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 10; i++) {\n            outputData += squeezedDigit(data[j++].toString());\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += squeezedDigit(data[i].toString());\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Duplicate suppression xyEncoding\n */\nexport function differenceDuplicateEncoding(data, firstX, intervalX) {\n    let mult = 0;\n    let index = 0;\n    let charCount = 0;\n    // We built a string where we store the encoded data.\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (let i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    // We simulate a line carry\n    const numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // Start line\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else if (diffData[index - 1] === diffData[index]) {\n            // Try to insert next difference\n            mult++;\n        }\n        else if (mult > 0) {\n            // Now we know that it can be in line\n            mult++;\n            encodedNumber = duplicateDigit(mult.toString());\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n            mult = 0;\n            index--;\n        }\n        else {\n            // Check if it fits, otherwise start a new line\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                // start a new line\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    if (mult > 0) {\n        encodedData += duplicateDigit((mult + 1).toString());\n    }\n    // We insert the last data from fid. It is done to control of data\n    // The last line start with the number of datas in the fid.\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Differential xyEncoding\n */\nexport function differenceEncoding(data, firstX, intervalX) {\n    let index = 0;\n    let charCount = 0;\n    let i;\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    const numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // We convert the first number.\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else {\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    // We insert the last number from data. It is done to control of data\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Convert number to the ZQZ format, using pseudo digits.\n */\nfunction squeezedDigit(num) {\n    let sqzDigits = '';\n    if (num.startsWith('-')) {\n        sqzDigits += pseudoDigits[SQZ_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            sqzDigits += num.substring(2);\n        }\n    }\n    else {\n        sqzDigits += pseudoDigits[SQZ_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            sqzDigits += num.substring(1);\n        }\n    }\n    return sqzDigits;\n}\n/**\n * Convert number to the DIF format, using pseudo digits.\n */\nfunction differenceDigit(num) {\n    let diffDigits = '';\n    if (num.startsWith('-')) {\n        diffDigits += pseudoDigits[DIF_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            diffDigits += num.substring(2);\n        }\n    }\n    else {\n        diffDigits += pseudoDigits[DIF_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            diffDigits += num.substring(1);\n        }\n    }\n    return diffDigits;\n}\n/**\n * Convert number to the DUP format, using pseudo digits.\n */\nfunction duplicateDigit(num) {\n    let dupDigits = '';\n    dupDigits += pseudoDigits[DUP][num.charCodeAt(0) - 48];\n    if (num.length > 1) {\n        dupDigits += num.substring(1);\n    }\n    return dupDigits;\n}\n//# sourceMappingURL=vectorEncoder.js.map","import { rescaleAndEnsureInteger } from \"./rescaleAndEnsureInteger.js\";\nimport { vectorEncoder } from \"./vectorEncoder.js\";\nexport function xyDataCreator(data, options = {}) {\n    const { xyEncoding = 'DIF' } = options;\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    const firstX = data.x[0];\n    const lastX = data.x[data.x.length - 1];\n    const firstY = data.y[0];\n    const lastY = data.y[data.y.length - 1];\n    const nbPoints = data.x.length;\n    const deltaX = (lastX - firstX) / (nbPoints - 1);\n    const lines = [];\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##DELTAX=${deltaX}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##XYDATA=(X++(Y..Y))');\n    const line = vectorEncoder(rescaleAndEnsureInteger(data.y, yFactor), firstX / xFactor, deltaX / xFactor, xyEncoding);\n    if (line)\n        lines.push(line);\n    return lines;\n}\n//# sourceMappingURL=xyDataCreator.js.map","import { addInfoData } from \"./utils/addInfoData.js\";\nimport { getBestFactor } from \"./utils/getBestFactor.js\";\nimport { peakTableCreator } from \"./utils/peakTableCreator.js\";\nimport { xyDataCreator } from \"./utils/xyDataCreator.js\";\n/**\n * Create a jcamp\n * @param data object of array\n * @param [options={meta:{},info:{}} - metadata object\n * @returns JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n    const { meta = {}, info = {}, xyEncoding } = options;\n    const { title = '', owner = '', origin = '', dataType = '', xUnits = '', yUnits = '', ...resInfo } = info;\n    let { xFactor, yFactor } = info;\n    data = { x: data.x, y: data.y };\n    let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    // we leave the header and utf8 fonts ${header.replace(/[^\\t\\n\\x20-\\x7F]/g, '')\n    if (xyEncoding) {\n        xFactor = getBestFactor(data.x, { factor: xFactor });\n        yFactor = getBestFactor(data.y, { factor: yFactor });\n        return `${header}##NPOINTS=${data.x.length}\n${xyDataCreator(data, { info: { xFactor, yFactor }, xyEncoding }).join('\\n')}\n##END=`;\n    }\n    else {\n        if (xFactor === undefined)\n            xFactor = 1;\n        if (yFactor === undefined)\n            yFactor = 1;\n        if (xFactor !== 1) {\n            //@ts-expect-error xFactor is always defined\n            data.x = data.x.map((value) => value / xFactor);\n        }\n        if (yFactor !== 1) {\n            //@ts-expect-error yFactor is always defined\n            data.y = data.y.map((value) => value / yFactor);\n        }\n        return `${header}##NPOINTS=${data.x.length}\n${peakTableCreator(data, { info: { xFactor, yFactor } }).join('\\n')}\n##END=`;\n    }\n}\n//# sourceMappingURL=fromJSON.js.map","import creatorNtuples from \"./creatorNtuples.js\";\nimport { fromJSON } from \"./fromJSON.js\";\nimport { checkNumberOrArray } from \"./utils/checkNumberOrArray.js\";\n/**\n * Create a jcamp from variables\n */\nexport function fromVariables(\n/** object of variables */\nvariables, options = {}) {\n    const { info = {}, meta = {}, forceNtuples = false } = options;\n    const jcampOptions = {\n        info,\n        meta,\n    };\n    const keys = Object.keys(variables).map((key) => key.toLowerCase());\n    if (!forceNtuples && keys.length === 2) {\n        const x = variables.x;\n        const xLabel = x.label || 'x';\n        if (variables.x.units) {\n            if (xLabel.includes(variables.x.units)) {\n                jcampOptions.info.xUnits = xLabel;\n            }\n            else {\n                jcampOptions.info.xUnits = `${xLabel} (${variables.x.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.xUnits = xLabel;\n        }\n        const y = variables.y;\n        const yLabel = y.label || 'y';\n        if (variables.y.units) {\n            if (yLabel.includes(variables.y.units)) {\n                jcampOptions.info.xUnits = yLabel;\n            }\n            else {\n                jcampOptions.info.yUnits = `${yLabel} (${variables.y.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.yUnits = yLabel;\n        }\n        const xData = variables.x.data;\n        const yData = variables.y.data;\n        checkNumberOrArray(xData);\n        checkNumberOrArray(yData);\n        return fromJSON({ x: xData, y: yData }, jcampOptions);\n    }\n    else {\n        return creatorNtuples(variables, options);\n    }\n}\n//# sourceMappingURL=fromVariables.js.map","import { fromVariables } from 'convert-to-jcamp';\nexport function toJcamps(analysis, options = {}) {\n    const jcamps = [];\n    for (const spectrum of analysis.spectra) {\n        jcamps.push(getJcamp(spectrum, options));\n    }\n    return jcamps;\n}\nfunction getJcamp(spectrum, options) {\n    const { info = {}, meta = {} } = options;\n    const jcampOptions = {\n        options: {},\n        info: {\n            title: spectrum.title,\n            dataType: spectrum.dataType,\n            ...info,\n        },\n        meta: { ...spectrum.meta, ...meta },\n    };\n    return fromVariables(spectrum.variables, jcampOptions);\n}\n//# sourceMappingURL=toJcamps.js.map","import { toJcamps } from './toJcamps.js';\n/**\n * Convert an Analysis to a single JCAMP string (all spectra joined).\n * @param analysis - The analysis to convert\n * @param options - Options for the JCAMP output\n * @returns JCAMP string\n */\nexport function toJcamp(analysis, options = {}) {\n    return toJcamps(analysis, options).join('\\n');\n}\n//# sourceMappingURL=toJcamp.js.map","import { optimize as optimizePeak } from 'ml-spectra-fitting';\nimport { xFindClosestIndex, xMaxValue } from 'ml-spectra-processing';\n/**\n * Based on a x value we will return a peak\n * if you set optimize=True the returned positions will be\n * the closest actual datapoints to the fitted peak location.\n * the x/y of the fitted peak will be in xOptimized and yOptimized\n * @param spectrum\n * @param target\n * @param options\n */\nexport function peakPicking(spectrum, \n/** value to search (on x axis) */\ntarget, options = {}) {\n    const { xVariable = 'x', yVariable = 'y', optimize = false, max: isMax = true, shape = { kind: 'gaussian', fwhm: 1 }, } = options;\n    const x = spectrum.variables[xVariable]?.data;\n    let y;\n    if (!isMax) {\n        y = spectrum.variables[yVariable]?.data.slice(); // do deep copy as we maybe need to flip sign\n    }\n    else {\n        y = spectrum.variables[yVariable]?.data;\n    }\n    if (!x || !y)\n        return;\n    const targetIndex = xFindClosestIndex(x, target);\n    let optimizedPeak;\n    let optimizedIndex;\n    const result = {};\n    if (optimize) {\n        if (!isMax) {\n            const maximumY = xMaxValue(y);\n            for (let i = 0; i < y.length; i++) {\n                y[i] *= -1;\n                y[i] += maximumY; // This makes it somewhat more robust\n            }\n        }\n        optimizedPeak = optimizePeak({ x, y }, [{ x: x[targetIndex], y: y[targetIndex] }], { shape });\n        optimizedIndex = xFindClosestIndex(x, optimizedPeak.peaks[0].x);\n        for (const [key, variable] of Object.entries(spectrum.variables)) {\n            result[key] = variable.data[optimizedIndex];\n        }\n        result.optimized = optimizedPeak.peaks[0];\n    }\n    else {\n        for (const [key, variable] of Object.entries(spectrum.variables)) {\n            result[key] = variable.data[targetIndex];\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=peakPicking.js.map","import { gsd } from 'ml-gsd';\nimport { xyMaxClosestYPoint, xyMinClosestYPoint } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './getNormalizedSpectrum.js';\n/**\n * Based on a x value we will return a peak\n * @param spectrum\n * @param options\n */\nexport function autoPeakPicking(spectrum, options = {}) {\n    const { xVariable = 'x', yVariable = 'y', normalizationOptions, minPeakWidth, maxCriteria, } = options;\n    let x = spectrum.variables[xVariable]?.data;\n    let y = spectrum.variables[yVariable]?.data;\n    if (!x || !y)\n        return [];\n    if (normalizationOptions) {\n        const tempSpectrum = {\n            variables: {\n                x: { data: x, label: '' },\n                y: { data: y, label: '' },\n            },\n        };\n        const normalizedSpectrum = getNormalizedSpectrum(tempSpectrum, normalizationOptions);\n        x = normalizedSpectrum.variables.x.data;\n        y = normalizedSpectrum.variables.y.data;\n    }\n    if (!x || !y)\n        return;\n    const { from, to } = options;\n    let peaks = gsd({ x, y }, options);\n    if (normalizationOptions) {\n        // we need to recalculate the real count\n        const xyClosestYPoint = maxCriteria === undefined || maxCriteria\n            ? xyMaxClosestYPoint\n            : xyMinClosestYPoint;\n        for (const peak of peaks) {\n            const closest = xyClosestYPoint({ x: spectrum.variables.x.data, y: spectrum.variables.y.data }, { target: peak.x });\n            peak.x = closest.x;\n            peak.y = closest.y;\n        }\n    }\n    if (from !== undefined) {\n        peaks = peaks.filter((peak) => peak.x >= from);\n    }\n    if (to !== undefined) {\n        peaks = peaks.filter((peak) => peak.x <= to);\n    }\n    if (minPeakWidth) {\n        peaks = peaks.filter((peak) => peak.width >= minPeakWidth);\n    }\n    return peaks.map((peak) => {\n        const result = {};\n        for (const [key, variable] of Object.entries(spectrum.variables)) {\n            result[key] = variable.data[peak.index];\n        }\n        result.width = peak.width;\n        return result;\n    });\n}\n//# sourceMappingURL=autoPeakPicking.js.map","import { getJSGraph } from './jsgraph/getJSGraph.js';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations.js';\nexport * from './AnalysesManager.js';\nexport * from './Analysis.js';\nexport * from './from/fromJcamp.js';\nexport * from './from/fromText.js';\nexport * from './to/toJcamp.js';\nexport * from './to/toJcamps.js';\nexport * from './to/toText.js';\nexport * from './to/toMatrix.js';\nexport * from './util/getNormalizedSpectrum.js';\nexport * from './util/peakPicking.js';\nexport * from './util/autoPeakPicking.js';\nexport * from './types/types.js';\nexport * from './types/NormalizedSpectrumOptions.js';\nexport * from './types/SpectrumSelector.js';\nexport { getReactPlotJSON } from './reactPlot/getReactPlotJSON.js';\nexport const JSGraph = {\n    getJSGraph,\n    getNormalizationAnnotations,\n};\n//# sourceMappingURL=index.js.map","/**\n * Converts a peak from common-spectrum format to IR-specific format.\n * @param peak - Peak object with x, a, t properties.\n * @param spectrum - Spectrum containing variable metadata.\n * @returns Converted peak with wavenumber, absorbance, transmittance, and kind.\n */\nexport function convertPeak(peak, spectrum) {\n    const tVariable = spectrum.variables.t;\n    return {\n        wavenumber: peak.x,\n        absorbance: peak.a,\n        transmittance: peak.t / 100,\n        kind: getPeakKind(peak.t, tVariable?.min ?? 0, tVariable?.max ?? 100),\n    };\n}\nfunction getPeakKind(transmittance, minTransmittance, maxTransmittance) {\n    const position = (maxTransmittance - transmittance) / (maxTransmittance - minTransmittance);\n    if (position < 0.33) {\n        return 'w';\n    }\n    else if (position < 0.66) {\n        return 'm';\n    }\n    return 'S';\n}\n//# sourceMappingURL=convertPeak.js.map","/**\n * Creates annotations for jsgraph that allows to display the result of peak picking.\n * @param peaks - Array of peaks with wavenumber, transmittance, absorbance, kind.\n * @param options - Display options for the annotations.\n * @returns Array of annotation objects for jsgraph.\n */\nexport function getAnnotations(peaks, options = {}) {\n    const { fillColor = 'green', strokeColor = 'red', creationFct, mode = 't100', } = options;\n    const annotations = peaks.map((peak) => {\n        const 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}\nfunction annotationTransmittance(annotation, peak, factor = 1, options = {}) {\n    const { showKind = true, showAssignment = true } = options;\n    const labels = [];\n    let line = 0;\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    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    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}\nfunction annotationAbsorbance(annotation, peak, options = {}) {\n    const { showKind = true, showAssignment = true, assignmentAngle = -45, } = options;\n    const labels = [];\n    let line = 0;\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    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    annotation.labels = labels;\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//# sourceMappingURL=getAnnotations.js.map","import { xMaxValue } from 'ml-spectra-processing';\n/** Any spelling built on the word itself: `TRANSMITTANCE`, `%Transmission`. */\nconst spelledOut = /trans/i;\n/** The abbreviated forms, which share no substring with `transmittance`. */\nconst abbreviated = /^\\s*%?\\s*t\\s*%?\\s*$/i;\n/**\n * Checks whether a variable holds a transmittance rather than an absorbance.\n * Spectrometers spell the unit in many ways and `%T` is as common as\n * `TRANSMITTANCE`, so both the label and the units are tested.\n * @param variable - Variable to inspect, usually the y of an IR spectrum.\n * @returns True when the data is a transmittance.\n */\nexport function isTransmittance(variable) {\n    const { label, units } = variable;\n    for (const value of [label, units]) {\n        if (!value)\n            continue;\n        if (spelledOut.test(value) || abbreviated.test(value))\n            return true;\n    }\n    return false;\n}\n/**\n * Checks whether a transmittance is expressed as a percentage rather than as a\n * fraction of 1. The label and the units are tested first; when neither says\n * so, the data decides, since a fraction never goes much above 1.\n * @param variable - Variable known to hold a transmittance.\n * @returns True when the data runs from 0 to 100.\n */\nexport function isPercent(variable) {\n    const { label, units, data } = variable;\n    for (const value of [label, units]) {\n        if (!value)\n            continue;\n        if (value.includes('%') || value.toLowerCase().includes('percent')) {\n            return true;\n        }\n    }\n    return data !== undefined && data.length > 0 && xMaxValue(data) > 2;\n}\n//# sourceMappingURL=isTransmittance.js.map","import { isPercent, isTransmittance } from \"./isTransmittance.js\";\n/**\n * Callback that adds absorbance (a) and transmittance (t) variables to the spectrum.\n * If the y variable is absorbance, transmittance is computed and vice versa.\n * @param variables - Spectrum variables with at least x and y defined.\n * @returns The modified variables with a and t added.\n */\nexport function spectrumCallback(variables) {\n    // we add missing absorbance / transmittance\n    // variable a = absorbance\n    // variable t = transmittance\n    const yVariable = variables.y;\n    if (!isTransmittance(yVariable)) {\n        variables.a = {\n            ...yVariable,\n            symbol: 'a',\n            data: yVariable.data.slice(),\n        };\n        variables.t = {\n            data: yVariable.data.map((absorbance) => 10 ** -absorbance * 100),\n            label: 'Transmittance (%)',\n            symbol: 't',\n            units: '',\n        };\n    }\n    else {\n        const factor = isPercent(yVariable) ? 100 : 1;\n        variables.a = {\n            data: yVariable.data.map((transmittance) => -Math.log10(transmittance / factor)),\n            symbol: 'a',\n            label: 'Absorbance',\n            units: '',\n        };\n        const { label, units, data } = yVariable;\n        if (isPercent({ label, units })) {\n            variables.t = { ...yVariable, symbol: 't', data: data.slice() };\n        }\n        else {\n            variables.t = {\n                units: '',\n                label: 'Transmittance (%)',\n                symbol: 't',\n                data: factor === 100\n                    ? data.slice()\n                    : data.map((transmittance) => transmittance * 100),\n            };\n        }\n    }\n    return variables;\n}\n//# sourceMappingURL=spectrumCallback.js.map","import { fromJcamp as commonFromJcamp } from 'common-spectrum';\nimport { spectrumCallback as defaultSpectrumCallback } from \"./utils/spectrumCallback.js\";\n/**\n * Creates a new Analysis from a JCAMP string or buffer.\n * @param jcamp - JCAMP data as a string or ArrayBuffer.\n * @param options - Options for the analysis.\n * @returns New Analysis element with the given data.\n */\nexport function fromJcamp(jcamp, options = {}) {\n    const { spectrumCallback = defaultSpectrumCallback, ...rest } = options;\n    return commonFromJcamp(jcamp, { ...rest, spectrumCallback });\n}\n//# sourceMappingURL=fromJcamp.js.map","/**\n * Get how the data was stored.\n * @param flagParameters - flag parameters from the file header.\n * @param flagParameters.multiFile - whether there are multiple spectra (subfiles) or not.\n * @param flagParameters.xy - uneven x values.\n * @param flagParameters.xyxy - multifile with separate x axis.\n * @returns 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","/**\n * Decode bytes to text\n * @param bytes - Bytes to decode\n * @param encoding - Text encoding\n * @returns The decoded text\n */\nexport function decode(bytes, encoding = 'utf8') {\n    const decoder = new TextDecoder(encoding);\n    return decoder.decode(bytes);\n}\nconst encoder = new TextEncoder();\n/**\n * Encode text to utf8\n * @param str - Text to encode\n * @returns The encoded bytes\n */\nexport function encode(str) {\n    return encoder.encode(str);\n}\n//# sourceMappingURL=text.js.map","import { decode, encode } from \"./text.js\";\nconst defaultByteLength = 1024 * 8;\nconst hostBigEndian = (() => {\n    const array = new Uint8Array(4);\n    const view = new Uint32Array(array.buffer);\n    return !((view[0] = 1) & array[0]);\n})();\nconst typedArrays = {\n    int8: globalThis.Int8Array,\n    uint8: globalThis.Uint8Array,\n    int16: globalThis.Int16Array,\n    uint16: globalThis.Uint16Array,\n    int32: globalThis.Int32Array,\n    uint32: globalThis.Uint32Array,\n    uint64: globalThis.BigUint64Array,\n    int64: globalThis.BigInt64Array,\n    float32: globalThis.Float32Array,\n    float64: globalThis.Float64Array,\n};\nexport class IOBuffer {\n    /**\n     * Reference to the internal ArrayBuffer object.\n     */\n    buffer;\n    /**\n     * Byte length of the internal ArrayBuffer.\n     */\n    byteLength;\n    /**\n     * Byte offset of the internal ArrayBuffer.\n     */\n    byteOffset;\n    /**\n     * Byte length of the internal ArrayBuffer.\n     */\n    length;\n    /**\n     * The current offset of the buffer's pointer.\n     */\n    offset;\n    lastWrittenByte;\n    littleEndian;\n    _data;\n    _mark;\n    _marks;\n    /**\n     * Create a new IOBuffer.\n     * @param data - The data to construct the IOBuffer with.\n     * If data is a number, it will be the new buffer's length<br>\n     * If data is `undefined`, the buffer will be initialized with a default length of 8Kb<br>\n     * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\n     * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\n     * @param options - An object for the options.\n     * @returns A new IOBuffer instance.\n     */\n    constructor(data = defaultByteLength, options = {}) {\n        let dataIsGiven = false;\n        if (typeof data === 'number') {\n            data = new ArrayBuffer(data);\n        }\n        else {\n            dataIsGiven = true;\n            this.lastWrittenByte = data.byteLength;\n        }\n        const offset = options.offset ? options.offset >>> 0 : 0;\n        const byteLength = data.byteLength - offset;\n        let dvOffset = offset;\n        if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\n            if (data.byteLength !== data.buffer.byteLength) {\n                dvOffset = data.byteOffset + offset;\n            }\n            data = data.buffer;\n        }\n        if (dataIsGiven) {\n            this.lastWrittenByte = byteLength;\n        }\n        else {\n            this.lastWrittenByte = 0;\n        }\n        this.buffer = data;\n        this.length = byteLength;\n        this.byteLength = byteLength;\n        this.byteOffset = dvOffset;\n        this.offset = 0;\n        this.littleEndian = true;\n        this._data = new DataView(this.buffer, dvOffset, byteLength);\n        this._mark = 0;\n        this._marks = [];\n    }\n    /**\n     * Checks if the memory allocated to the buffer is sufficient to store more\n     * bytes after the offset.\n     * @param byteLength - The needed memory in bytes.\n     * @returns `true` if there is sufficient space and `false` otherwise.\n     */\n    available(byteLength = 1) {\n        return this.offset + byteLength <= this.length;\n    }\n    /**\n     * Check if little-endian mode is used for reading and writing multi-byte\n     * values.\n     * @returns `true` if little-endian mode is used, `false` otherwise.\n     */\n    isLittleEndian() {\n        return this.littleEndian;\n    }\n    /**\n     * Set little-endian mode for reading and writing multi-byte values.\n     * @returns This.\n     */\n    setLittleEndian() {\n        this.littleEndian = true;\n        return this;\n    }\n    /**\n     * Check if big-endian mode is used for reading and writing multi-byte values.\n     * @returns `true` if big-endian mode is used, `false` otherwise.\n     */\n    isBigEndian() {\n        return !this.littleEndian;\n    }\n    /**\n     * Switches to big-endian mode for reading and writing multi-byte values.\n     * @returns This.\n     */\n    setBigEndian() {\n        this.littleEndian = false;\n        return this;\n    }\n    /**\n     * Move the pointer n bytes forward.\n     * @param n - Number of bytes to skip.\n     * @returns This.\n     */\n    skip(n = 1) {\n        this.offset += n;\n        return this;\n    }\n    /**\n     * Move the pointer n bytes backward.\n     * @param n - Number of bytes to move back.\n     * @returns This.\n     */\n    back(n = 1) {\n        this.offset -= n;\n        return this;\n    }\n    /**\n     * Move the pointer to the given offset.\n     * @param offset - The offset to move to.\n     * @returns This.\n     */\n    seek(offset) {\n        this.offset = offset;\n        return this;\n    }\n    /**\n     * Store the current pointer offset.\n     * @see {@link IOBuffer#reset}\n     * @returns This.\n     */\n    mark() {\n        this._mark = this.offset;\n        return this;\n    }\n    /**\n     * Move the pointer back to the last pointer offset set by mark.\n     * @see {@link IOBuffer#mark}\n     * @returns This.\n     */\n    reset() {\n        this.offset = this._mark;\n        return this;\n    }\n    /**\n     * Push the current pointer offset to the mark stack.\n     * @see {@link IOBuffer#popMark}\n     * @returns This.\n     */\n    pushMark() {\n        this._marks.push(this.offset);\n        return this;\n    }\n    /**\n     * Pop the last pointer offset from the mark stack, and set the current\n     * pointer offset to the popped value.\n     * @see {@link IOBuffer#pushMark}\n     * @returns This.\n     */\n    popMark() {\n        const offset = this._marks.pop();\n        if (offset === undefined) {\n            throw new Error('Mark stack empty');\n        }\n        this.seek(offset);\n        return this;\n    }\n    /**\n     * Move the pointer offset back to 0.\n     * @returns This.\n     */\n    rewind() {\n        this.offset = 0;\n        return this;\n    }\n    /**\n     * Make sure the buffer has sufficient memory to write a given byteLength at\n     * the current pointer offset.\n     * If the buffer's memory is insufficient, this method will create a new\n     * buffer (a copy) with a length that is twice (byteLength + current offset).\n     * @param byteLength - The needed memory in bytes.\n     * @returns This.\n     */\n    ensureAvailable(byteLength = 1) {\n        if (!this.available(byteLength)) {\n            const lengthNeeded = this.offset + byteLength;\n            const newLength = lengthNeeded * 2;\n            const newArray = new Uint8Array(newLength);\n            newArray.set(new Uint8Array(this.buffer));\n            this.buffer = newArray.buffer;\n            this.length = newLength;\n            this.byteLength = newLength;\n            this._data = new DataView(this.buffer);\n        }\n        return this;\n    }\n    /**\n     * Read a byte and return false if the byte's value is 0, or true otherwise.\n     * Moves pointer forward by one byte.\n     * @returns The read boolean.\n     */\n    readBoolean() {\n        return this.readUint8() !== 0;\n    }\n    /**\n     * Read a signed 8-bit integer and move pointer forward by 1 byte.\n     * @returns The read byte.\n     */\n    readInt8() {\n        return this._data.getInt8(this.offset++);\n    }\n    /**\n     * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n     * @returns The read byte.\n     */\n    readUint8() {\n        return this._data.getUint8(this.offset++);\n    }\n    /**\n     * Alias for {@link IOBuffer#readUint8}.\n     * @returns The read byte.\n     */\n    readByte() {\n        return this.readUint8();\n    }\n    /**\n     * Read `n` bytes and move pointer forward by `n` bytes.\n     * @param n - Number of bytes to read.\n     * @returns The read bytes.\n     */\n    readBytes(n = 1) {\n        return this.readArray(n, 'uint8');\n    }\n    /**\n     * Creates an array of corresponding to the type `type` and size `size`.\n     * For example, type `uint8` will create a `Uint8Array`.\n     * @param size - size of the resulting array\n     * @param type - number type of elements to read\n     * @returns The read array.\n     */\n    readArray(size, type) {\n        const bytes = typedArrays[type].BYTES_PER_ELEMENT * size;\n        const offset = this.byteOffset + this.offset;\n        const slice = this.buffer.slice(offset, offset + bytes);\n        if (this.littleEndian === hostBigEndian &&\n            type !== 'uint8' &&\n            type !== 'int8') {\n            const slice = new Uint8Array(this.buffer.slice(offset, offset + bytes));\n            slice.reverse();\n            const returnArray = new typedArrays[type](slice.buffer);\n            this.offset += bytes;\n            returnArray.reverse();\n            return returnArray;\n        }\n        const returnArray = new typedArrays[type](slice);\n        this.offset += bytes;\n        return returnArray;\n    }\n    /**\n     * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n     * @returns The read value.\n     */\n    readInt16() {\n        const value = this._data.getInt16(this.offset, this.littleEndian);\n        this.offset += 2;\n        return value;\n    }\n    /**\n     * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n     * @returns The read value.\n     */\n    readUint16() {\n        const value = this._data.getUint16(this.offset, this.littleEndian);\n        this.offset += 2;\n        return value;\n    }\n    /**\n     * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n     * @returns The read value.\n     */\n    readInt32() {\n        const value = this._data.getInt32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n     * @returns The read value.\n     */\n    readUint32() {\n        const value = this._data.getUint32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 32-bit floating number and move pointer forward by 4 bytes.\n     * @returns The read value.\n     */\n    readFloat32() {\n        const value = this._data.getFloat32(this.offset, this.littleEndian);\n        this.offset += 4;\n        return value;\n    }\n    /**\n     * Read a 64-bit floating number and move pointer forward by 8 bytes.\n     * @returns The read value.\n     */\n    readFloat64() {\n        const value = this._data.getFloat64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit signed integer number and move pointer forward by 8 bytes.\n     * @returns The read value.\n     */\n    readBigInt64() {\n        const value = this._data.getBigInt64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 64-bit unsigned integer number and move pointer forward by 8 bytes.\n     * @returns The read value.\n     */\n    readBigUint64() {\n        const value = this._data.getBigUint64(this.offset, this.littleEndian);\n        this.offset += 8;\n        return value;\n    }\n    /**\n     * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n     * @returns The read character.\n     */\n    readChar() {\n        // eslint-disable-next-line unicorn/prefer-code-point\n        return String.fromCharCode(this.readInt8());\n    }\n    /**\n     * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n     * @param n - Number of characters to read.\n     * @returns The read characters.\n     */\n    readChars(n = 1) {\n        let result = '';\n        for (let i = 0; i < n; i++) {\n            result += this.readChar();\n        }\n        return result;\n    }\n    /**\n     * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n     * forward by `n` bytes.\n     * @param n - Number of bytes to read.\n     * @returns The decoded string.\n     */\n    readUtf8(n = 1) {\n        return decode(this.readBytes(n));\n    }\n    /**\n     * Read the next `n` bytes, return a string decoded with `encoding` and move pointer\n     * forward by `n` bytes.\n     * If no encoding is passed, the function is equivalent to @see {@link IOBuffer#readUtf8}\n     * @param n - Number of bytes to read.\n     * @param encoding - The encoding to use. Default is 'utf8'.\n     * @returns The decoded string.\n     */\n    decodeText(n = 1, encoding = 'utf8') {\n        return decode(this.readBytes(n), encoding);\n    }\n    /**\n     * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n     * forward by 1 byte.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeBoolean(value) {\n        this.writeUint8(value ? 0xff : 0x00);\n        return this;\n    }\n    /**\n     * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeInt8(value) {\n        this.ensureAvailable(1);\n        this._data.setInt8(this.offset++, value);\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n     * byte.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeUint8(value) {\n        this.ensureAvailable(1);\n        this._data.setUint8(this.offset++, value);\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * An alias for {@link IOBuffer#writeUint8}.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeByte(value) {\n        return this.writeUint8(value);\n    }\n    /**\n     * Write all elements of `bytes` as uint8 values and move pointer forward by\n     * `bytes.length` bytes.\n     * @param bytes - The array of bytes to write.\n     * @returns This.\n     */\n    writeBytes(bytes) {\n        this.ensureAvailable(bytes.length);\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let i = 0; i < bytes.length; i++) {\n            this._data.setUint8(this.offset++, bytes[i]);\n        }\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 16-bit signed integer and move pointer forward by 2\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeInt16(value) {\n        this.ensureAvailable(2);\n        this._data.setInt16(this.offset, value, this.littleEndian);\n        this.offset += 2;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeUint16(value) {\n        this.ensureAvailable(2);\n        this._data.setUint16(this.offset, value, this.littleEndian);\n        this.offset += 2;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit signed integer and move pointer forward by 4\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeInt32(value) {\n        this.ensureAvailable(4);\n        this._data.setInt32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeUint32(value) {\n        this.ensureAvailable(4);\n        this._data.setUint32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 32-bit floating number and move pointer forward by 4\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeFloat32(value) {\n        this.ensureAvailable(4);\n        this._data.setFloat32(this.offset, value, this.littleEndian);\n        this.offset += 4;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit floating number and move pointer forward by 8\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeFloat64(value) {\n        this.ensureAvailable(8);\n        this._data.setFloat64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit signed bigint and move pointer forward by 8\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeBigInt64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigInt64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write `value` as a 64-bit unsigned bigint and move pointer forward by 8\n     * bytes.\n     * @param value - The value to write.\n     * @returns This.\n     */\n    writeBigUint64(value) {\n        this.ensureAvailable(8);\n        this._data.setBigUint64(this.offset, value, this.littleEndian);\n        this.offset += 8;\n        this._updateLastWrittenByte();\n        return this;\n    }\n    /**\n     * Write the charCode of `str`'s first character as an 8-bit unsigned integer\n     * and move pointer forward by 1 byte.\n     * @param str - The character to write.\n     * @returns This.\n     */\n    writeChar(str) {\n        // eslint-disable-next-line unicorn/prefer-code-point\n        return this.writeUint8(str.charCodeAt(0));\n    }\n    /**\n     * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\n     * and move pointer forward by `str.length` bytes.\n     * @param str - The characters to write.\n     * @returns This.\n     */\n    writeChars(str) {\n        for (let i = 0; i < str.length; i++) {\n            // eslint-disable-next-line unicorn/prefer-code-point\n            this.writeUint8(str.charCodeAt(i));\n        }\n        return this;\n    }\n    /**\n     * UTF-8 encode and write `str` to the current pointer offset and move pointer\n     * forward according to the encoded length.\n     * @param str - The string to write.\n     * @returns This.\n     */\n    writeUtf8(str) {\n        return this.writeBytes(encode(str));\n    }\n    /**\n     * Export a Uint8Array view of the internal buffer.\n     * The view starts at the byte offset and its length\n     * is calculated to stop at the last written byte or the original length.\n     * @returns A new Uint8Array view.\n     */\n    toArray() {\n        return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n    }\n    /**\n     *  Get the total number of bytes written so far, regardless of the current offset.\n     * @returns - Total number of bytes.\n     */\n    getWrittenByteLength() {\n        return this.lastWrittenByte - this.byteOffset;\n    }\n    /**\n     * Update the last written byte offset\n     * @private\n     */\n    _updateLastWrittenByte() {\n        if (this.offset > this.lastWrittenByte) {\n            this.lastWrittenByte = this.offset;\n        }\n    }\n}\n//# sourceMappingURL=iobuffer.js.map","import { xySortX } from 'ml-spectra-processing';\n/**\n * Gets the Subfile flags.\n * @param flag - First byte of the subheader.\n * @returns The parameters.\n */\nexport function parseSubFlagParameters(flag) {\n    return {\n        changed: (flag & 1) !== 0,\n        noPeakTable: (flag & 8) !== 0,\n        modifiedArithmetic: (flag & 128) !== 0,\n    };\n}\n/**\n * Parses the subheader (header of the subfile).\n * @param buffer - SPC buffer.\n * @returns subheader object.\n */\nexport function parseSubHeader(buffer) {\n    return {\n        parameters: parseSubFlagParameters(buffer.readUint8()),\n        exponentY: buffer.readInt8(),\n        indexNumber: buffer.readUint16(),\n        startingZ: buffer.readFloat32(),\n        endingZ: buffer.readFloat32(),\n        noiseValue: buffer.readFloat32(),\n        numberPoints: buffer.readUint32(),\n        numberCoAddedScans: buffer.readUint32(),\n        wAxisValue: buffer.readFloat32(),\n        reserved: buffer.readChars(4).replaceAll('\\u0000', '').trim(),\n    };\n}\n/**\n * Set the X and Y axis (object with labels, values etc.)\n * @param x - X values array.\n * @param y - Y values array.\n * @param fileHeader - main file header.\n * @returns object with x and y as axis.\n */\nexport function setXYAxis(x, y, fileHeader) {\n    const xAxis = /(?<label>.*?) ?[([](?<units>.*)[)\\]]/.exec(fileHeader.xUnitsType);\n    const yAxis = /(?<label>.*?) ?[([](?<units>.*)[)\\]]/.exec(fileHeader.yUnitsType);\n    const { x: oX, y: oY } = xySortX({ x, y });\n    const variables = {\n        x: {\n            symbol: 'x',\n            label: xAxis?.groups?.label || fileHeader.xUnitsType,\n            units: xAxis?.groups?.units || '',\n            data: oX,\n            isDependent: false,\n        },\n        y: {\n            symbol: 'y',\n            label: yAxis?.groups?.label || fileHeader.yUnitsType,\n            units: yAxis?.groups?.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.js\";\nimport { parseSubHeader, setXYAxis } from \"./shared.js\";\n/**\n * Reads the data block of the SPC file.\n * @param buffer - spc buffer.\n * @param fileHeader - main header.\n * @returns Array containing the spectra.\n */\nexport function newDataBlock(buffer, fileHeader) {\n    let x;\n    const spectra = [];\n    const dataShape = getDataShape(fileHeader.parameters);\n    if (dataShape === 'XY' || dataShape === 'XYY') {\n        //for these ones, X axis comes before subheader !!\n        x = new Float64Array(fileHeader.numberPoints);\n        for (let i = 0; i < fileHeader.numberPoints; i++) {\n            x[i] = buffer.readFloat32();\n        }\n    }\n    else if (dataShape === 'YY' || dataShape === 'Y') {\n        //for these ones, no X axis, we create it as we have all parameters\n        x = createFromToArray({\n            from: fileHeader.startingX,\n            to: fileHeader.endingX,\n            length: fileHeader.numberPoints,\n        });\n    }\n    for (let i = 0; i < fileHeader.spectra; i++) {\n        // here Y is set (runs only once for a single spectra.)\n        const subFileHeader = parseSubHeader(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}\n/**\n * Reads Y values from the buffer for new format SPC files.\n * @param y - output Y array to fill.\n * @param subHeader - subfile header.\n * @param fileHeader - main file header.\n * @param buffer - SPC buffer.\n * @returns the filled Y array.\n */\nexport function getNewY(y, subHeader, fileHeader, buffer) {\n    const { exponentY, parameters: { y16BitPrecision }, } = fileHeader;\n    if (subHeader.exponentY === 0) {\n        subHeader.exponentY = exponentY;\n    }\n    const yFactor = 2 ** (subHeader.exponentY - (y16BitPrecision ? 16 : 32));\n    if (y16BitPrecision) {\n        for (let j = 0; j < y.length; j++) {\n            y[j] = buffer.readInt16() * yFactor;\n        }\n    }\n    else {\n        for (let j = 0; j < y.length; j++) {\n            if (subHeader.exponentY !== -128) {\n                y[j] = buffer.readInt32() * yFactor;\n            }\n            else {\n                y[j] = buffer.readFloat32();\n            }\n        }\n    }\n    return y;\n}\n//# sourceMappingURL=newDataBlock.js.map","import { createFromToArray } from 'ml-spectra-processing';\nimport { parseSubHeader, setXYAxis } from \"./shared.js\";\n/**\n * Reads a file's data block (old SPC format)\n * @param buffer - spc buffer.\n * @param fileHeader - header.\n * @returns Array containing the spectra.\n */\nexport function oldDataBlock(buffer, fileHeader) {\n    // either Y or YY fall on the for loop\n    const spectra = [];\n    // old format uses always equidistant arrays\n    const x = createFromToArray({\n        from: fileHeader.startingX,\n        to: fileHeader.endingX,\n        length: fileHeader.numberPoints,\n    });\n    for (let i = 0; buffer.offset + fileHeader.numberPoints < buffer.length; i++) {\n        const subFileHeader = parseSubHeader(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 * Reads Y values from the buffer for old format SPC files.\n * @param y - output Y array to fill.\n * @param subHeader - subfile header.\n * @param fileHeader - main file header.\n * @param buffer - SPC buffer.\n * @returns the filled Y array.\n */\nexport function getOldY(y, subHeader, fileHeader, buffer) {\n    const { fileVersion, exponentY, parameters: { y16BitPrecision }, } = fileHeader;\n    if (subHeader.exponentY === 0) {\n        subHeader.exponentY = exponentY;\n    }\n    const yFactor = 2 ** (subHeader.exponentY - (y16BitPrecision ? 16 : 32));\n    if (y16BitPrecision) {\n        for (let j = 0; j < y.length; j++) {\n            y[j] = buffer.readInt16() * yFactor;\n        }\n    }\n    else {\n        for (let j = 0; j < y.length; j++) {\n            if (fileVersion === 0x4d) {\n                y[j] =\n                    ((buffer.readUint8() << 16) +\n                        (buffer.readInt8() << 24) +\n                        (buffer.readUint8() << 0) +\n                        (buffer.readUint8() << 8)) *\n                        yFactor;\n            }\n        }\n    }\n    return y;\n}\n//# sourceMappingURL=oldDataBlock.js.map","/**\n * Gives meaning to type codes.\n * @param  xzwType - x, z or w type code.\n * @returns  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 * @returns  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 - experiment type 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 * @param flag - First byte of the main header.\n * @returns The parameters.\n */\nexport function parseFlagParameters(flag) {\n    return {\n        y16BitPrecision: (flag & 1) !== 0,\n        useExperimentExtension: (flag & 2) !== 0,\n        multiFile: (flag & 4) !== 0,\n        zValuesRandom: (flag & 8) !== 0,\n        zValuesUneven: (flag & 16) !== 0,\n        customAxisLabels: (flag & 32) !== 0,\n        xyxy: (flag & 64) !== 0,\n        xy: (flag & 128) !== 0,\n    };\n}\n/** A date outside this range means the packing was guessed wrong. */\nconst minimumYear = 1900;\nconst maximumYear = 2200;\n/**\n * Gets the date encoded in binary in a long number.\n * The SPC specification packs it as year/month/day/hour/minute, but Renishaw\n * WiRE writes an MS-DOS date/time with a zero-indexed month instead, so the\n * layout is chosen from whichever one yields a plausible date.\n * @param  long - Binary date.\n * @returns  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 specification = unpackSpecificationDate(long);\n    if (isPlausible(specification)) {\n        return toISOString(specification);\n    }\n    const dos = unpackDosDate(long);\n    if (isPlausible(dos)) {\n        return toISOString(dos);\n    }\n    return toISOString(specification);\n}\n/**\n * Unpacks the date as described by the SPC specification.\n * @param long - Binary date.\n * @returns The calendar fields.\n */\nfunction unpackSpecificationDate(long) {\n    return {\n        year: long >>> 20,\n        month: (long >>> 16) & 0x0f,\n        day: (long >>> 11) & 0x1f,\n        hour: (long >>> 6) & 0x1f,\n        minute: long & 0x3f,\n        second: 0,\n    };\n}\n/**\n * Unpacks the date as an MS-DOS date/time, the layout Renishaw WiRE writes.\n * Its month field is zero-indexed, unlike in MS-DOS itself.\n * @param long - Binary date.\n * @returns The calendar fields.\n */\nfunction unpackDosDate(long) {\n    return {\n        year: 1980 + (long >>> 25),\n        month: ((long >>> 21) & 0x0f) + 1,\n        day: (long >>> 16) & 0x1f,\n        hour: (long >>> 11) & 0x1f,\n        minute: (long >>> 5) & 0x3f,\n        second: (long & 0x1f) * 2,\n    };\n}\n/**\n * Checks that every field is in range and the year could be an acquisition date.\n * @param fields - The calendar fields.\n * @returns True when the fields describe a plausible date.\n */\nfunction isPlausible(fields) {\n    return (fields.year >= minimumYear &&\n        fields.year <= maximumYear &&\n        fields.month >= 1 &&\n        fields.month <= 12 &&\n        fields.day >= 1 &&\n        fields.day <= 31 &&\n        fields.hour <= 23 &&\n        fields.minute <= 59 &&\n        fields.second <= 59);\n}\n/**\n * Formats the fields as UTC, without the year clamping of the `Date` constructor.\n * @param fields - The calendar fields.\n * @returns Date formatted to ISO 8601:2019 convention.\n */\nfunction toISOString(fields) {\n    const date = new Date(0);\n    date.setUTCFullYear(fields.year, fields.month - 1, fields.day);\n    date.setUTCHours(fields.hour, fields.minute, fields.second, 0);\n    return date.toISOString();\n}\n//# sourceMappingURL=headerUtils.js.map","import { experimentSettings, xzwTypes, yTypes } from \"./types.js\";\nimport { longToDate, parseFlagParameters } from \"./utility/headerUtils.js\";\n/**\n * Old-format File-header parsing.\n * @param buffer - spc buffer.\n * @param prev - `{parameters, fileVersion}`.\n * @returns file metadata.\n */\nfunction parseOldHeader(buffer, prev) {\n    const exponentY = buffer.readInt16(); //Word (16 bits) instead of byte\n    const numberPoints = buffer.readFloat32();\n    const startingX = buffer.readFloat32();\n    const endingX = buffer.readFloat32();\n    const xUnitsType = xzwTypes(buffer.readUint8());\n    const yUnitsType = yTypes(buffer.readUint8());\n    const zTypeYear = buffer.readUint16(); //Unrelated to Z axis\n    const month = buffer.readUint8();\n    const day = buffer.readUint8();\n    const hour = buffer.readUint8();\n    const minute = buffer.readUint8();\n    const date = new Date(0);\n    date.setUTCFullYear(zTypeYear % 4096, Math.max(month - 1, 0), day); // TODO: might be wrong\n    date.setUTCHours(hour, minute, 0, 0);\n    const resolutionDescription = buffer\n        .readChars(8)\n        .replaceAll('\\u0000', '')\n        .trim();\n    const peakPointNumber = buffer.readUint16();\n    const scans = buffer.readUint16();\n    const spare = [];\n    for (let i = 0; i < 7; i++) {\n        spare.push(buffer.readFloat32());\n    }\n    const memo = buffer.readChars(130).replaceAll('\\u0000', '').trim();\n    const xyzLabels = buffer.readChars(30).replaceAll('\\u0000', '').trim();\n    return {\n        kind: 'old',\n        fileVersion: prev.fileVersion, //Each bit contains a parameter\n        parameters: prev.parameters, //4B => New format; 4D => LabCalc format\n        exponentY,\n        numberPoints,\n        startingX,\n        endingX,\n        xUnitsType,\n        yUnitsType,\n        date: date.toISOString(),\n        resolutionDescription,\n        peakPointNumber,\n        scans,\n        spare,\n        memo,\n        xyzLabels,\n    };\n}\n/**\n * New format file-header parsing.\n * @param buffer - spc buffer.\n * @param prev - `{parameters, fileVersion}`.\n * @returns file metadata.\n */\nfunction parseNewHeader(buffer, prev) {\n    const experimentType = experimentSettings(buffer.readUint8()); //Experiment type code (See SPC.h)\n    const 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    const numberPoints = buffer.readUint32(); //Number of points (if not XYXY)\n    const startingX = buffer.readFloat64(); //First X coordinate\n    const endingX = buffer.readFloat64(); //Last X coordinate\n    const spectra = buffer.readUint32(); //Number of spectrums\n    let xUnitsType = xzwTypes(buffer.readUint8()); //X Units type code (See types.js)\n    const yUnitsType = yTypes(buffer.readUint8()); //Y \"\"\n    let zUnitsType = xzwTypes(buffer.readUint8()); //Z \"\"\n    const postingDisposition = buffer.readUint8(); //Posting disposition (See GRAMSDDE.H)\n    const date = longToDate(buffer.readUint32()); //Date: minutes = first 6 bits, hours = 5 next bits, days = 5 next, months = 4 next, years = 12 last\n    const resolutionDescription = buffer\n        .readChars(9)\n        .replaceAll('\\u0000', '')\n        .trim(); //Resolution description text\n    const sourceInstrumentDescription = buffer\n        .readChars(9)\n        .replaceAll('\\u0000', '')\n        .trim(); // Source Instrument description text\n    const peakPointNumber = buffer.readUint16(); //Peak point number for interferograms\n    let spare = [];\n    for (let i = 0; i < 8; i++) {\n        spare.push(buffer.readFloat32());\n    }\n    if (prev.fileVersion === 0x4c) {\n        //Untested case because no test files\n        spare = spare.toReversed();\n    }\n    const memo = buffer.readChars(130).replaceAll('\\u0000', '').trim();\n    const xyzLabels = buffer.readChars(30).replaceAll('\\u0000', '').trim();\n    const logOffset = buffer.readUint32(); //Byte offset to Log Block\n    const modifiedFlag = buffer.readUint32(); //File modification flag (See values in SPC.H)\n    const processingCode = buffer.readUint8(); //Processing code (See GRAMSDDE.H)\n    const calibrationLevel = buffer.readUint8(); //Calibration level + 1\n    const subMethodSampleInjectionNumber = buffer.readUint16(); //Sub-method sample injection number\n    const concentrationFactor = buffer.readFloat32(); //Floating data multiplier concentration factor\n    const methodFile = buffer.readChars(48).replaceAll('\\u0000', '').trim(); //Method file\n    const zSubIncrement = buffer.readFloat32(); //Z subfile increment for even Z Multifiles\n    const wPlanes = buffer.readUint32();\n    const wPlaneIncrement = buffer.readFloat32();\n    const wAxisUnits = xzwTypes(buffer.readUint8()); //W axis units code\n    const reserved = buffer.readChars(187).replaceAll('\\u0000', '').trim(); //Reserved space (Must be zero)\n    if (xUnitsType === 0) {\n        xUnitsType = xyzLabels.slice(0, 10);\n    }\n    if (zUnitsType === 0) {\n        zUnitsType = xyzLabels.slice(20, 30);\n    }\n    return {\n        kind: 'new',\n        fileVersion: prev.fileVersion, //Each bit contains a parameter\n        parameters: prev.parameters, //4B => New format; 4D => LabCalc format\n        experimentType,\n        exponentY,\n        numberPoints,\n        startingX,\n        endingX,\n        spectra,\n        xUnitsType,\n        yUnitsType,\n        zUnitsType,\n        postingDisposition,\n        date,\n        resolutionDescription,\n        sourceInstrumentDescription,\n        peakPointNumber,\n        spare,\n        memo,\n        xyzLabels,\n        logOffset,\n        modifiedFlag,\n        processingCode,\n        calibrationLevel,\n        subMethodSampleInjectionNumber,\n        concentrationFactor,\n        methodFile,\n        zSubIncrement,\n        wPlanes,\n        wPlaneIncrement,\n        wAxisUnits,\n        reserved,\n    };\n}\n/**\n * File-header parsing - First 512/256 bytes (new/old format).\n * @param buffer - SPC buffer.\n * @returns File-header object.\n */\nexport function fileHeader(buffer) {\n    const parameters = parseFlagParameters(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 parseOldHeader(buffer, headerOpts);\n        }\n        default:\n            throw new Error('Unrecognized file format: byte 01 must be either 4B, 4C or 4D');\n    }\n    return parseNewHeader(buffer, headerOpts);\n}\n//# sourceMappingURL=fileHeader.js.map","/**\n * Reads the log block from an SPC file.\n * @param  buffer - SPC buffer.\n * @param  logOffset - Offset of the log (from mainHeader).\n * @returns  Object containing log meta, data and text.\n */\nexport function readLogBlock(buffer, logOffset) {\n    const logHeader = {\n        size: buffer.readUint32(), //Size of the block in bytes\n        memorySize: buffer.readUint32(), //Size of the memory rounded up to nearest multiple of 4096\n        textOffset: buffer.readUint32(), //Offset to Text section\n        binarySize: buffer.readUint32(), //Size of binary log block\n        diskArea: buffer.readUint32(), //Size of the disk area\n        reserved: buffer.readChars(44).trim().replaceAll('\\u0000', ''), //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        .replaceAll('\\u0000', '');\n    return { meta: logHeader, data: logData, text: logASCII };\n}\n//# sourceMappingURL=logBlock.js.map","import { newDataBlock } from \"./dataBlock/newDataBlock.js\";\nimport { oldDataBlock } from \"./dataBlock/oldDataBlock.js\";\nimport { fileHeader } from \"./fileHeader.js\";\nimport { readLogBlock } from \"./logBlock.js\";\n/**\n * Parses a Thermo Galactic GRAMS SPC file (`0x4B`/`0x4C`/`0x4D`).\n * @param ioBuffer - SPC buffer positioned at the start of the file.\n * @returns JSON-like object with information contained in the SPC file.\n */\nexport function parseGalactic(ioBuffer) {\n    const meta = fileHeader(ioBuffer);\n    if (meta.kind === 'new') {\n        const spectra = newDataBlock(ioBuffer, meta);\n        const logs = meta.logOffset !== 0 ? readLogBlock(ioBuffer, meta.logOffset) : null;\n        return { meta, spectra, logs };\n    }\n    return {\n        meta,\n        spectra: oldDataBlock(ioBuffer, meta),\n    };\n}\n//# sourceMappingURL=parse.js.map","import { xySortX } from 'ml-spectra-processing';\n/**\n * Builds increasing-X measurement variables for UVProbe absorbance spectra.\n * @param x - wavelength values (nm).\n * @param y - absorbance values.\n * @returns The `x`/`y` measurement variables with increasing wavelength.\n */\nexport function buildVariables(x, y) {\n    const { x: oX, y: oY } = xySortX({ x, y });\n    return {\n        x: {\n            symbol: 'x',\n            label: 'Wavelength',\n            units: 'nm',\n            data: oX,\n            isDependent: false,\n        },\n        y: {\n            symbol: 'y',\n            label: 'Absorbance',\n            units: '',\n            data: oY,\n            isDependent: true,\n        },\n    };\n}\n//# sourceMappingURL=buildVariables.js.map","import { createFromToArray } from 'ml-spectra-processing';\nimport { buildVariables } from \"./buildVariables.js\";\nconst startingXOffset = 10;\nconst endingXOffset = 14;\n/**\n * Parses the flat (raw single-spectrum) Shimadzu UVProbe `.spc` variant.\n *\n * The header is proprietary; the point count is a `uint16` stored immediately\n * before the `float32` absorbance block, and the wavelength range is two\n * `float32` near the start of the file. Layout reverse-engineered from sample files.\n * @param bytes - the whole file as bytes.\n * @returns The spectrum and its metadata.\n */\nexport function parseUVProbeFlat(bytes) {\n    const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n    const startingX = view.getFloat32(startingXOffset, true);\n    const endingX = view.getFloat32(endingXOffset, true);\n    const located = findData(view, bytes.length);\n    if (!located) {\n        throw new Error('UVProbe flat: could not locate the data block');\n    }\n    const { numberPoints, dataStart } = located;\n    const y = new Float64Array(numberPoints);\n    for (let i = 0; i < numberPoints; i++) {\n        y[i] = view.getFloat32(dataStart + i * 4, true);\n    }\n    const rawX = createFromToArray({\n        from: startingX,\n        to: endingX,\n        length: numberPoints,\n    });\n    const x = rawX instanceof Float64Array ? rawX : Float64Array.from(rawX);\n    const meta = {\n        kind: 'flat',\n        numberPoints,\n        date: readDate(bytes),\n        properties: {},\n    };\n    return { meta, spectra: [{ meta, variables: buildVariables(x, y) }] };\n}\n/**\n * Detects the flat UVProbe variant by its structural signature: a locatable\n * data block whose point count exactly fills the file (see {@link findData}).\n * @param bytes - the whole file as bytes.\n * @returns True when the bytes look like a UVProbe flat file.\n */\nexport function isUVProbeFlat(bytes) {\n    if (bytes.length < endingXOffset + 4)\n        return false;\n    const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n    return findData(view, bytes.length) !== null;\n}\n/**\n * Finds the point count and start of the data block.\n *\n * The count is the `uint16` `n` for which the remaining `n` `float32` values\n * fill the file exactly: `offset + 2 + n * 4 === fileLength`.\n * @param view - data view over the whole file.\n * @param fileLength - total file length in bytes.\n * @returns The number of points and the byte offset, or null when not found.\n */\nfunction findData(view, fileLength) {\n    for (let offset = 2; offset < 300; offset++) {\n        const numberPoints = view.getUint16(offset, true);\n        if (numberPoints > 1 && offset + 2 + numberPoints * 4 === fileLength) {\n            return { numberPoints, dataStart: offset + 2 };\n        }\n    }\n    return null;\n}\n/**\n * Reads the `MM/DD/YY` date and `HH:MM:SS` time from the header.\n * @param bytes - the whole file as bytes.\n * @returns ISO date string, or undefined when not found.\n */\nfunction readDate(bytes) {\n    let header = '';\n    for (const byte of bytes.subarray(0, 256)) {\n        header += String.fromCodePoint(byte);\n    }\n    const date = /(?<month>\\d{2})\\/(?<day>\\d{2})\\/(?<year>\\d{2})/.exec(header);\n    const time = /(?<hour>\\d{2}):(?<minute>\\d{2}):(?<second>\\d{2})/.exec(header);\n    if (!date?.groups)\n        return undefined;\n    const { month, day, year } = date.groups;\n    const t = time?.groups ?? { hour: '00', minute: '00', second: '00' };\n    return `20${year}-${month}-${day}T${t.hour}:${t.minute}:${t.second}.000Z`;\n}\n//# sourceMappingURL=parseFlat.js.map","/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global module, require:false, process:false, Buffer:false, Uint8Array:false, Uint16Array:false */\n\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nfunction Base64_encode(input) {\n\tvar o = \"\";\n\tvar c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n\tfor (var i = 0; i < input.length; ) {\n\t\tc1 = input.charCodeAt(i++);\n\t\te1 = (c1 >> 2);\n\t\tc2 = input.charCodeAt(i++);\n\t\te2 = ((c1 & 3) << 4) | (c2 >> 4);\n\t\tc3 = input.charCodeAt(i++);\n\t\te3 = ((c2 & 15) << 2) | (c3 >> 6);\n\t\te4 = (c3 & 63);\n\t\tif (isNaN(c2)) e3 = e4 = 64;\n\t\telse if (isNaN(c3)) e4 = 64;\n\t\to += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n\t}\n\treturn o;\n}\nfunction Base64_decode(input) {\n\tvar o = \"\";\n\tvar c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n\tinput = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n\tfor (var i = 0; i < input.length;) {\n\t\te1 = Base64_map.indexOf(input.charAt(i++));\n\t\te2 = Base64_map.indexOf(input.charAt(i++));\n\t\tc1 = (e1 << 2) | (e2 >> 4);\n\t\to += String.fromCharCode(c1);\n\t\te3 = Base64_map.indexOf(input.charAt(i++));\n\t\tc2 = ((e2 & 15) << 4) | (e3 >> 2);\n\t\tif (e3 !== 64) o += String.fromCharCode(c2);\n\t\te4 = Base64_map.indexOf(input.charAt(i++));\n\t\tc3 = ((e3 & 3) << 6) | e4;\n\t\tif (e4 !== 64) o += String.fromCharCode(c3);\n\t}\n\treturn o;\n}\nvar has_buf = (function() { return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node; })();\n\nvar Buffer_from = (function() {\n\tif(typeof Buffer !== 'undefined') {\n\t\tvar nbfs = !Buffer.from;\n\t\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\t\treturn nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t}\n\treturn function() {};\n})();\n\n\nfunction new_raw_buf(len) {\n\t/* jshint -W056 */\n\tif(has_buf) {\n\t\tif(Buffer.alloc) return Buffer.alloc(len);\n\t\tvar b = new Buffer(len); b.fill(0); return b;\n\t}\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s) {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x){ return x.charCodeAt(0) & 0xff; });\n};\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\nvar __toBuffer = function(bufs) { var x = []; for(var i = 0; i < bufs[0].length; ++i) { x.push.apply(x, bufs[0][i]); } return x; };\nvar ___toBuffer = __toBuffer;\nvar __utf16le = function(b,s,e) { var ss=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join(\"\").replace(chr0,''); };\nvar ___utf16le = __utf16le;\nvar __hexlify = function(b,s,l) { var ss=[]; for(var i=s; i<s+l; ++i) ss.push((\"0\" + b[i].toString(16)).slice(-2)); return ss.join(\"\"); };\nvar ___hexlify = __hexlify;\nvar __bconcat = function(bufs) {\n\tif(Array.isArray(bufs[0])) return [].concat.apply([], bufs);\n\tvar maxlen = 0, i = 0;\n\tfor(i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;\n\tvar o = new Uint8Array(maxlen);\n\tfor(i = 0, maxlen = 0; i < bufs.length; maxlen += bufs[i].length, ++i) o.set(bufs[i], maxlen);\n\treturn o;\n};\nvar bconcat = __bconcat;\n\n\nif(has_buf) {\n\t__utf16le = function(b,s,e) {\n\t\tif(!Buffer.isBuffer(b)) return ___utf16le(b,s,e);\n\t\treturn b.toString('utf16le',s,e).replace(chr0,'')/*.replace(chr1,'!')*/;\n\t};\n\t__hexlify = function(b,s,l) { return Buffer.isBuffer(b) ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); };\n\t__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat((bufs[0])) : ___toBuffer(bufs);};\n\ts2a = function(s) { return Buffer_from(s, \"binary\"); };\n\tbconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : __bconcat(bufs); };\n}\n\n\nvar __readUInt8 = function(b, idx) { return b[idx]; };\nvar __readUInt16LE = function(b, idx) { return b[idx+1]*(1<<8)+b[idx]; };\nvar __readInt16LE = function(b, idx) { var u = b[idx+1]*(1<<8)+b[idx]; return (u < 0x8000) ? u : (0xffff - u + 1) * -1; };\nvar __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b, idx) { return (b[idx+3]<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\n\nfunction ReadShift(size, t) {\n\tvar oI, oS, type = 0;\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); break;\n\t\tcase 2: oI = (t !== 'i' ? __readUInt16LE : __readInt16LE)(this, this.l); break;\n\t\tcase 4: oI = __readInt32LE(this, this.l); break;\n\t\tcase 16: type = 2; oS = __hexlify(this, this.l, size);\n\t}\n\tthis.l += size; if(type === 0) return oI; return oS;\n}\n\nvar __writeUInt32LE = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE  = function(b, val, idx) { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\n\nfunction WriteShift(t, val, f) {\n\tvar size = 0, i = 0;\n\tswitch(f) {\n\t\tcase \"hex\": for(; i < t; ++i) {\nthis[this.l++] = parseInt(val.slice(2*i, 2*i+2), 16)||0;\n\t\t} return this;\n\t\tcase \"utf16le\":\nvar end = this.l + t;\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = cc & 0xff;\n\t\t\t\tthis[this.l++] = cc >> 8;\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t}\nswitch(t) {\n\t\tcase  1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase  2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase  4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr, fld) {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos) {\n\tblob.l = pos;\n\tblob.read_shift = ReadShift;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction new_buf(sz) {\n\tvar o = (new_raw_buf(sz));\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32 = (function() {\nvar CRC32 = {};\nCRC32.version = '1.2.1';\n/*global Int32Array */\nfunction signed_crc_table() {\n\tvar c = 0, table = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0],  T2 = TT[1],  T3 = TT[2],  T4 = TT[3],  T5 = TT[4];\nvar T6 = TT[5],  T7 = TT[6],  T8 = TT[7],  T9 = TT[8],  Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B, seed) {\n\tvar C = seed ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str, seed) {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\nreturn CRC32;\n})();\n/* [MS-CFB] v20171201 */\nvar CFB = (function _CFB(){\nvar exports = {};\nexports.version = '1.2.2';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l, r) {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p) {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p) {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n   high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n   add 1980 to stored year\n   stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf, date) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf) {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob) {\n\tprep_blob(blob, 0);\n\tvar o = {};\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs;\nfunction get_fs() { return fs || (fs = require('fs')); }\nfunction parse(file, options) {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif((file[0] | 0x20) == 0x6d && (file[1]|0x20) == 0x69) return parse_mad(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob = file.slice(0,512);\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = file.slice(0,ssz); prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nsector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files = {}, Paths = [], FileIndex = [], FullPaths = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob) {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob, mver) {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file, ssz) {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI, FP, Paths) {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad = [], q = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry, payload, mini) {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size));\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0));\n\treturn (bconcat(o).slice(0, entry.size));\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n    DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {\n\tvar q = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tif(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors, start, fat_addrs, ssz, chkd) {\n\tvar buf = [], buf_chain = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors, dir_start, fat_addrs, ssz) {\n\tvar sl = sectors.length, sector_list = ([]);\n\tvar chkd = [], buf = [], buf_chain = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])});\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob = sector.slice(i, i+128);\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o = ({\n\t\t\tname:  name,\n\t\t\ttype:  blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL:     blob.read_shift(4, 'i'),\n\t\t\tR:     blob.read_shift(4, 'i'),\n\t\t\tC:     blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size));\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob, offset) {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename, options) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob, options) {\n\tvar type = options && options.type;\n\tif(!type) {\n\t\tif(has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n\t}\n\tswitch(type || \"base64\") {\n\t\tcase \"file\": return read_file(blob, options);\n\t\tcase \"base64\": return parse(s2a(Base64_decode(blob)), options);\n\t\tcase \"binary\": return parse(s2a(blob), options);\n\t}\n\treturn parse(blob, options);\n}\n\nfunction init_cfb(cfb, opts) {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 });\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb) {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb, f) {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\t// Track which names exist\n\tvar fullPaths = Object.create ? Object.create(null) : {};\n\tvar data = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tfullPaths[cfb.FullPaths[i]] = true;\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = fullPaths[dad];\n\t\twhile(!s) {\n\t\t\twhile(dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);\n\n\t\t\tdata.push([dad, ({\n\t\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\t\ttype: 1,\n\t\t\t\tclsid: HEADER_CLSID,\n\t\t\t\tct: now, mt: now,\n\t\t\t\tcontent: null\n\t\t\t})]);\n\n\t\t\t// Add name to set\n\t\t\tfullPaths[dad] = true;\n\n\t\t\tdad = dirname(data[i][0]);\n\t\t\ts = fullPaths[dad];\n\t\t}\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name =  filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb, options) {\n\tvar _opts = options || {};\n\t/* MAD is order-sensitive, skip rebuild and sort */\n\tif(_opts.fileType == 'mad') return write_mad(cfb, _opts);\n\trebuild_cfb(cfb);\n\tswitch(_opts.fileType) {\n\t\tcase 'zip': return write_zip(cfb, _opts);\n\t\t//case 'mad': return write_mad(cfb, _opts);\n\t}\n\tvar L = (function(cfb){\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\n\t\t\tvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L =  [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w) {\n\t\tfor(T += w; i<T-1; ++i) o.write_shift(-4, i+1);\n\t\tif(w) { ++i; o.write_shift(-4, ENDOFCHAIN); }\n\t};\n\tT = i = 0;\n\tfor(T+=L[1]; i<T; ++i) o.write_shift(-4, consts.DIFSECT);\n\tfor(T+=L[2]; i<T; ++i) o.write_shift(-4, consts.FATSECT);\n\tchainit(L[3]);\n\tchainit(L[4]);\n\tvar j = 0, flen = 0;\n\tvar file = cfb.FileIndex[0];\n\tfor(; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\nflen = file.content.length;\n\t\tif(flen < 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x01FF) >> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\nflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm = (i === 0 && _opts.root) || file.name;\n\t\tif(_nm.length > 32) {\n\t\t\tconsole.error(\"Name \" + _nm + \" will be truncated to \" + _nm.slice(0,32));\n\t\t\t_nm = _nm.slice(0, 32);\n\t\t}\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\nif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 511) & -512;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\nif(file.size > 0 && file.size < 0x1000) {\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 63) & -64;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tif (has_buf) {\n\t\to.l = o.length;\n\t} else {\n\t\t// When using Buffer, already 0-filled\n\t\twhile(o.l < o.length) o.write_shift(1, 0);\n\t}\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb, path) {\n\tvar UCFullPaths = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath = path.toUpperCase();\n\tvar w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb, filename, options) {\n\tget_fs();\n\tvar o = _write(cfb, options);\nfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o) {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb, options) {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type || \"buffer\") {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o)); return o;\n\t\tcase \"binary\": return typeof o == \"string\" ? o : a2s(o);\n\t\tcase \"base64\": return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\t\tcase \"buffer\": if(has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\t\t\t/* falls through */\n\t\tcase \"array\": return typeof o == \"string\" ? s2a(o) : o;\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/*  LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [   3,   4,   5,   6,   7,   8,   9,  10,  11,  13 , 15,  17,  19,  23,  27,  31,  35,  43,  51,  59,  67,  83,  99, 115, 131, 163, 195, 227, 258 ];\n\n/*  DST_ID = [  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13,  14,  15,  16,  17,  18,  19,   20,   21,   22,   23,   24,   25,   26,    27,    28,    29 ]; */\nvar DST_LN = [  1,  2,  3,  4,  5,  7,  9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<<n)-1);\n\tvar v = buf[h] >>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* helpers for unaligned bit writes */\nfunction write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;\n\tif(w <= 5) buf[h] |= (v & 7) << w;\n\telse {\n\t\tbuf[h] |= (v << w) & 0xFF;\n\t\tbuf[h+1] = (v&7) >> (8-w);\n\t}\n\treturn bl + 3;\n}\n\nfunction write_bits_1(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv = (v&1) << w;\n\tbuf[h] |= v;\n\treturn bl + 1;\n}\nfunction write_bits_8(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |=  v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v;\n\treturn bl + 8;\n}\nfunction write_bits_16(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |=  v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v & 0xFF;\n\tbuf[h+2] = v >>> 8;\n\treturn bl + 16;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < L; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX) {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count  = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<<cleni)] = (cleni&15) | (i<<4);\n\t\t}\n\t}\n\treturn maxlen;\n}\n\n/* Fixed Huffman */\nvar fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);\nvar fix_dmap = use_typed_arrays ? new Uint16Array(32)  : zero_fill_array(32);\nif(!use_typed_arrays) {\n\tfor(var i = 0; i < 512; ++i) fix_lmap[i] = 0;\n\tfor(i = 0; i < 32; ++i) fix_dmap[i] = 0;\n}\n(function() {\n\tvar dlens = [];\n\tvar i = 0;\n\tfor(;i<32; i++) dlens.push(5);\n\tbuild_tree(dlens, fix_dmap, 32);\n\n\tvar clens = [];\n\ti = 0;\n\tfor(; i<=143; i++) clens.push(8);\n\tfor(; i<=255; i++) clens.push(9);\n\tfor(; i<=279; i++) clens.push(7);\n\tfor(; i<=287; i++) clens.push(8);\n\tbuild_tree(clens, fix_lmap, 288);\n})();var _deflateRaw = (function _deflateRawIIFE() {\n\tvar DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n\tvar j = 0, k = 0;\n\tfor(; j < DST_LN.length - 1; ++j) {\n\t\tfor(; k < DST_LN[j+1]; ++k) DST_LN_RE[k] = j;\n\t}\n\tfor(;k < 32768; ++k) DST_LN_RE[k] = 29;\n\n\tvar LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\tfor(j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n\t\tfor(; k < LEN_LN[j+1]; ++k) LEN_LN_RE[k] = j;\n\t}\n\n\tfunction write_stored(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t}\n\n\t/* Fixed Huffman */\n\tfunction write_huff_fixed(data, out) {\n\t\tvar bl = 0;\n\t\tvar boff = 0;\n\t\tvar addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\t\twhile(boff < data.length) {\n\t\t\tvar L = /* data.length - boff; */ Math.min(0xFFFF, data.length - boff);\n\n\t\t\t/* write a stored block for short data */\n\t\t\tif(L < 10) {\n\t\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\t\t\t\tif(bl & 7) bl += 8 - (bl & 7);\n\t\t\t\tout.l = (bl / 8) | 0;\n\t\t\t\tout.write_shift(2, L);\n\t\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t\t\tbl = out.l * 8;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\t\t\tvar hash = 0;\n\t\t\twhile(L-- > 0) {\n\t\t\t\tvar d = data[boff];\n\t\t\t\thash = ((hash << 5) ^ d) & 0x7FFF;\n\n\t\t\t\tvar match = -1, mlen = 0;\n\n\t\t\t\tif((match = addrs[hash])) {\n\t\t\t\t\tmatch |= boff & ~0x7FFF;\n\t\t\t\t\tif(match > boff) match -= 0x8000;\n\t\t\t\t\tif(match < boff) while(data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;\n\t\t\t\t}\n\n\t\t\t\tif(mlen > 2) {\n\t\t\t\t\t/* Copy Token  */\n\t\t\t\t\td = LEN_LN_RE[mlen];\n\t\t\t\t\tif(d <= 22) bl = write_bits_8(out, bl, bitswap8[d+1]>>1) - 1;\n\t\t\t\t\telse {\n\t\t\t\t\t\twrite_bits_8(out, bl, 3);\n\t\t\t\t\t\tbl += 5;\n\t\t\t\t\t\twrite_bits_8(out, bl, bitswap8[d-23]>>5);\n\t\t\t\t\t\tbl += 3;\n\t\t\t\t\t}\n\t\t\t\t\tvar len_eb = (d < 8) ? 0 : ((d - 4)>>2);\n\t\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, mlen - LEN_LN[d]);\n\t\t\t\t\t\tbl += len_eb;\n\t\t\t\t\t}\n\n\t\t\t\t\td = DST_LN_RE[boff - match];\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]>>3);\n\t\t\t\t\tbl -= 3;\n\n\t\t\t\t\tvar dst_eb = d < 4 ? 0 : (d-2)>>1;\n\t\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, boff - match - DST_LN[d]);\n\t\t\t\t\t\tbl += dst_eb;\n\t\t\t\t\t}\n\t\t\t\t\tfor(var q = 0; q < mlen; ++q) {\n\t\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t\thash = ((hash << 5) ^ data[boff]) & 0x7FFF;\n\t\t\t\t\t\t++boff;\n\t\t\t\t\t}\n\t\t\t\t\tL-= mlen - 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* Literal Token */\n\t\t\t\t\tif(d <= 143) d = d + 48;\n\t\t\t\t\telse bl = write_bits_1(out, bl, 1);\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]);\n\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t++boff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbl = write_bits_8(out, bl, 0) - 1;\n\t\t}\n\t\tout.l = ((bl + 7)/8)|0;\n\t\treturn out.l;\n\t}\n\treturn function _deflateRaw(data, out) {\n\t\tif(data.length < 8) return write_stored(data, out);\n\t\treturn write_huff_fixed(data, out);\n\t};\n})();\n\nfunction _deflate(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n}\n/* modified inflate function also moves original read head */\n\nvar dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_cmap = use_typed_arrays ? new Uint16Array(128)   : zero_fill_array(128);\nvar dyn_len_1 = 1, dyn_len_2 = 1;\n\n/* 5.5.3 Expanding Huffman Codes */\nfunction dyn(data, boff) {\n\t/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n\tvar _HLIT = read_bits_5(data, boff) + 257; boff += 5;\n\tvar _HDIST = read_bits_5(data, boff) + 1; boff += 5;\n\tvar _HCLEN = read_bits_4(data, boff) + 4; boff += 4;\n\tvar w = 0;\n\n\t/* grab and store code lengths */\n\tvar clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n\tvar ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\tvar maxlen = 1;\n\tvar bl_count =  use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar L = clens.length; /* 19 */\n\tfor(var i = 0; i < _HCLEN; ++i) {\n\t\tclens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n\t\tif(maxlen < w) maxlen = w;\n\t\tbl_count[w]++;\n\t\tboff += 3;\n\t}\n\n\t/* build code tree */\n\tvar ccode = 0;\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;\n\tfor(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n\t/* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bitswap8[ctree[i]]>>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<<cleni)] = (cleni&7) | (i<<3);\n\t\t}\n\t}\n\n\t/* read literal and dist codes at once */\n\tvar hcodes = [];\n\tmaxlen = 1;\n\tfor(; hcodes.length < _HLIT + _HDIST;) {\n\t\tccode = dyn_cmap[read_bits_7(data, boff)];\n\t\tboff += ccode & 7;\n\t\tswitch((ccode >>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(sz > 0) {\n\t\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\t\twhile(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t} else if((header >> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt + 100); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\tif(usz) return [outbuf, (boff+7)>>>3];\n\treturn [outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file, options) {\n\tvar blob = file;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex = [], FullPaths = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(blob.slice(blob.l+namelen, blob.l+namelen+efsz));\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob, csz, usz, o, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(blob.slice(blob.l, blob.l + efsz));\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif(((EF||{})[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break; // TODO: scan for magic number\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\tvar _crc32 = CRC32.buf(data, 0);\n\tif((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb, options) {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = CRC32.buf(fi.content, 0);\n\n\t\tvar outbuf = fi.content;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4,  (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4,  (flags & 8) ? 0 : fi.content.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: extra fields? */\n\n\t\t/* TODO: encryption header ? */\n\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, fi.content.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, fi.content.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out)), bconcat(cdirs), o]));\n}\nvar ContentTypeMap = ({\n\t\"htm\": \"text/html\",\n\t\"xml\": \"text/xml\",\n\n\t\"gif\": \"image/gif\",\n\t\"jpg\": \"image/jpeg\",\n\t\"png\": \"image/png\",\n\n\t\"mso\": \"application/x-mso\",\n\t\"thmx\": \"application/vnd.ms-officetheme\",\n\t\"sh33tj5\": \"application/octet-stream\"\n});\n\nfunction get_content_type(fi, fp) {\n\tif(fi.ctype) return fi.ctype;\n\n\tvar ext = fi.name || \"\", m = ext.match(/\\.([^\\.]+)$/);\n\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n\tif(fp) {\n\t\tm = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n\t\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\t}\n\n\treturn \"application/octet-stream\";\n}\n\n/* 76 character chunks TODO: intertwine encoding */\nfunction write_base64_76(bstr) {\n\tvar data = Base64_encode(bstr);\n\tvar o = [];\n\tfor(var i = 0; i < data.length; i+= 76) o.push(data.slice(i, i+76));\n\treturn o.join(\"\\r\\n\") + \"\\r\\n\";\n}\n\n/*\nRules for QP:\n\t- escape =## applies for all non-display characters and literal \"=\"\n\t- space or tab at end of line must be encoded\n\t- \\r\\n newlines can be preserved, but bare \\r and \\n must be escaped\n\t- lines must not exceed 76 characters, use soft breaks =\\r\\n\n\nTODO: Some files from word appear to write line extensions with bare equals:\n\n```\n<table class=3DMsoTableGrid border=3D1 cellspacing=3D0 cellpadding=3D0 width=\n=\"70%\"\n```\n*/\nfunction write_quoted_printable(text) {\n\tvar encoded = text.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF=]/g, function(c) {\n\t\tvar w = c.charCodeAt(0).toString(16).toUpperCase();\n\t\treturn \"=\" + (w.length == 1 ? \"0\" + w : w);\n\t});\n\n\tencoded = encoded.replace(/ $/mg, \"=20\").replace(/\\t$/mg, \"=09\");\n\n\tif(encoded.charAt(0) == \"\\n\") encoded = \"=0D\" + encoded.slice(1);\n\tencoded = encoded.replace(/\\r(?!\\n)/mg, \"=0D\").replace(/\\n\\n/mg, \"\\n=0A\").replace(/([^\\r\\n])\\n/mg, \"$1=0A\");\n\n\tvar o = [], split = encoded.split(\"\\r\\n\");\n\tfor(var si = 0; si < split.length; ++si) {\n\t\tvar str = split[si];\n\t\tif(str.length == 0) { o.push(\"\"); continue; }\n\t\tfor(var i = 0; i < str.length;) {\n\t\t\tvar end = 76;\n\t\t\tvar tmp = str.slice(i, i + end);\n\t\t\tif(tmp.charAt(end - 1) == \"=\") end --;\n\t\t\telse if(tmp.charAt(end - 2) == \"=\") end -= 2;\n\t\t\telse if(tmp.charAt(end - 3) == \"=\") end -= 3;\n\t\t\ttmp = str.slice(i, i + end);\n\t\t\ti += end;\n\t\t\tif(i < str.length) tmp += \"=\";\n\t\t\to.push(tmp);\n\t\t}\n\t}\n\n\treturn o.join(\"\\r\\n\");\n}\nfunction parse_quoted_printable(data) {\n\tvar o = [];\n\n\t/* unify long lines */\n\tfor(var di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\twhile(di <= data.length && line.charAt(line.length - 1) == \"=\") line = line.slice(0, line.length - 1) + data[++di];\n\t\to.push(line);\n\t}\n\n\t/* decode */\n\tfor(var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) { return String.fromCharCode(parseInt($$.slice(1), 16)); });\n\treturn s2a(o.join(\"\\r\\n\"));\n}\n\n\nfunction parse_mime(cfb, data, root) {\n\tvar fname = \"\", cte = \"\", ctype = \"\", fdata;\n\tvar di = 0;\n\tfor(;di < 10; ++di) {\n\t\tvar line = data[di];\n\t\tif(!line || line.match(/^\\s*$/)) break;\n\t\tvar m = line.match(/^(.*?):\\s*([^\\s].*)$/);\n\t\tif(m) switch(m[1].toLowerCase()) {\n\t\t\tcase \"content-location\": fname = m[2].trim(); break;\n\t\t\tcase \"content-type\": ctype = m[2].trim(); break;\n\t\t\tcase \"content-transfer-encoding\": cte = m[2].trim(); break;\n\t\t}\n\t}\n\t++di;\n\tswitch(cte.toLowerCase()) {\n\t\tcase 'base64': fdata = s2a(Base64_decode(data.slice(di).join(\"\"))); break;\n\t\tcase 'quoted-printable': fdata = parse_quoted_printable(data.slice(di)); break;\n\t\tdefault: throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n\t}\n\tvar file = cfb_add(cfb, fname.slice(root.length), fdata, {unsafe: true});\n\tif(ctype) file.ctype = ctype;\n}\n\nfunction parse_mad(file, options) {\n\tif(a2s(file.slice(0,13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n\tvar root = (options && options.root || \"\");\n\t// $FlowIgnore\n\tvar data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n\tvar di = 0, row = \"\";\n\n\t/* if root is not specified, scan for the common prefix */\n\tfor(di = 0; di < data.length; ++di) {\n\t\trow = data[di];\n\t\tif(!/^Content-Location:/i.test(row)) continue;\n\t\trow = row.slice(row.indexOf(\"file\"));\n\t\tif(!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n\t\tif(row.slice(0, root.length) == root) continue;\n\t\twhile(root.length > 0) {\n\t\t\troot = root.slice(0, root.length - 1);\n\t\t\troot = root.slice(0, root.lastIndexOf(\"/\") + 1);\n\t\t\tif(row.slice(0,root.length) == root) break;\n\t\t}\n\t}\n\n\tvar mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n\tif(!mboundary) throw new Error(\"MAD cannot find boundary\");\n\tvar boundary = \"--\" + (mboundary[1] || \"\");\n\n\tvar FileIndex = [], FullPaths = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o);\n\tvar start_di, fcnt = 0;\n\tfor(di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\tif(line !== boundary && line !== boundary + \"--\") continue;\n\t\tif(fcnt++) parse_mime(o, data.slice(start_di, di), root);\n\t\tstart_di = di;\n\t}\n\treturn o;\n}\n\nfunction write_mad(cfb, options) {\n\tvar opts = options || {};\n\tvar boundary = opts.boundary || \"SheetJS\";\n\tboundary = '------=' + boundary;\n\n\tvar out = [\n\t\t'MIME-Version: 1.0',\n\t\t'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"',\n\t\t'',\n\t\t'',\n\t\t''\n\t];\n\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tfor(var i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length);\n\t\tfi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\n\t\t/* Normalize filename */\n\t\tfp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function(c) {\n\t\t\treturn \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n\t\t}).replace(/[\\u0080-\\uFFFF]/g, function(u) {\n\t\t\treturn \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n\t\t});\n\n\t\t/* Extract content as binary string */\n\t\tvar ca = fi.content;\n\t\t// $FlowIgnore\n\t\tvar cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n\n\t\t/* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\t\tvar dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;\n\t\tfor(var csl = 0; csl <= L; ++csl) if((cc=cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n\t\tvar qp = dispcnt >= L * 4 / 5;\n\n\t\tout.push(boundary);\n\t\tout.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n\t\tout.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n\t\tout.push('Content-Type: ' + get_content_type(fi, fp));\n\t\tout.push('');\n\n\t\tout.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n\t}\n\tout.push(boundary + '--\\r\\n');\n\treturn out.join(\"\\r\\n\");\n}\nfunction cfb_new(opts) {\n\tvar o = ({});\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb, name, content, opts) {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2});\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\nfile.content = (content);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb, name) {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb, old_name, new_name) {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb) { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nif(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; }\n","import { IOBuffer } from 'iobuffer';\n/**\n * Parses a single `PageTextsN` stream from a UVProbe OLE file.\n * @param content - raw stream bytes.\n * @returns The section title and its key/value properties.\n */\nexport function parsePageText(content) {\n    const buffer = new IOBuffer(content);\n    buffer.readUint32(); // unknown flag (always 1 in observed files)\n    buffer.readUint32(); // page index\n    const title = readDotNetString(buffer).replace(/^\\[(?<inner>.*)\\]$/, '$<inner>');\n    const count = buffer.readUint32();\n    const properties = {};\n    for (let i = 0; i < count; i++) {\n        const key = readDotNetString(buffer).replace(/:\\s*$/, '');\n        properties[key] = readDotNetString(buffer);\n    }\n    return { title, properties };\n}\n/**\n * Reads a .NET `BinaryWriter` string: a 7-bit-encoded length prefix followed by\n * that many latin1 bytes.\n * @param buffer - the buffer positioned at the length prefix.\n * @returns The decoded string.\n */\nfunction readDotNetString(buffer) {\n    return buffer.decodeText(read7BitLength(buffer), 'latin1');\n}\n/**\n * Reads a .NET 7-bit-encoded (LEB128-style) length prefix.\n * @param buffer - the buffer positioned at the length prefix.\n * @returns The decoded length.\n */\nfunction read7BitLength(buffer) {\n    let result = 0;\n    let shift = 0;\n    let byte;\n    do {\n        byte = buffer.readUint8();\n        result |= (byte & 0x7f) << shift;\n        shift += 7;\n    } while ((byte & 0x80) !== 0);\n    return result;\n}\n//# sourceMappingURL=pageTexts.js.map","import * as CFB from 'cfb';\nimport { buildVariables } from \"./buildVariables.js\";\nimport { parsePageText } from \"./pageTexts.js\";\n/** Days between the OLE automation epoch (1899-12-30) and the Unix epoch. */\nconst oleDateEpochOffset = 25569;\nconst millisecondsPerDay = 86400000;\n/**\n * Parses the OLE2 compound-document Shimadzu UVProbe `.spc` variant.\n *\n * Wavelength and absorbance are stored as `float64` arrays in the `X Data.1`\n * and `Y Data.1` streams; metadata lives in the `PageTextsN` and\n * `DataSetHistory` streams.\n * @param bytes - the whole file as bytes.\n * @returns The spectrum and its metadata.\n */\nexport function parseUVProbeOle(bytes) {\n    const container = CFB.read(bytes, { type: 'buffer' });\n    const x = readDoubles(findStream(container, 'X Data.1'));\n    const y = readDoubles(findStream(container, 'Y Data.1'));\n    if (x.length !== y.length) {\n        throw new Error('UVProbe OLE: X and Y streams have different lengths');\n    }\n    const history = tryStream(container, 'DataSetHistory');\n    const meta = {\n        kind: 'ole',\n        numberPoints: x.length,\n        title: history && readTitle(history),\n        date: history && readDate(history),\n        properties: readProperties(container),\n    };\n    return { meta, spectra: [{ meta, variables: buildVariables(x, y) }] };\n}\n/**\n * Reads a stream as a `Float64Array` of little-endian doubles.\n * @param content - raw stream bytes.\n * @returns The decoded values.\n */\nfunction readDoubles(content) {\n    const count = Math.floor(content.length / 8);\n    const view = new DataView(content.buffer, content.byteOffset, content.byteLength);\n    const values = new Float64Array(count);\n    for (let i = 0; i < count; i++) {\n        values[i] = view.getFloat64(i * 8, true);\n    }\n    return values;\n}\n/**\n * Collects every `PageTextsN` stream into property sections keyed by title.\n * @param container - the parsed OLE container.\n * @returns Sections of key/value properties.\n */\nfunction readProperties(container) {\n    const properties = {};\n    for (const entry of container.FileIndex) {\n        if (/^PageTexts\\d+$/.test(entry.name) && entry.content) {\n            const { title, properties: sectionProperties } = parsePageText(toUint8Array(entry.content));\n            properties[title] = sectionProperties;\n        }\n    }\n    return properties;\n}\n/**\n * Extracts the sample title from the history stream.\n * @param history - raw `DataSetHistory` bytes.\n * @returns The sample title, or undefined.\n */\nfunction readTitle(history) {\n    let text = '';\n    for (const byte of history)\n        text += String.fromCodePoint(byte);\n    const match = /Created new data set:\\s*(?<name>.*?)\\s*-\\s*RawData/.exec(text);\n    return match?.groups?.name;\n}\n/**\n * Reads the acquisition date stored as an OLE automation date in the history stream.\n * @param history - raw `DataSetHistory` bytes.\n * @returns ISO date string, or undefined.\n */\nfunction readDate(history) {\n    if (history.length < 16)\n        return undefined;\n    const view = new DataView(history.buffer, history.byteOffset, history.byteLength);\n    const serial = view.getFloat64(8, true);\n    if (!Number.isFinite(serial) || serial <= 0)\n        return undefined;\n    const milliseconds = Math.round((serial - oleDateEpochOffset) * millisecondsPerDay);\n    return new Date(milliseconds).toISOString();\n}\n/**\n * Finds a required stream by name.\n * @param container - the parsed OLE container.\n * @param name - stream name.\n * @returns The stream bytes.\n */\nfunction findStream(container, name) {\n    const content = tryStream(container, name);\n    if (!content)\n        throw new Error(`UVProbe OLE: missing stream \"${name}\"`);\n    return content;\n}\n/**\n * Finds an optional stream by name.\n * @param container - the parsed OLE container.\n * @param name - stream name.\n * @returns The stream bytes, or undefined when absent.\n */\nfunction tryStream(container, name) {\n    const entry = CFB.find(container, name);\n    return entry?.content ? toUint8Array(entry.content) : undefined;\n}\n/**\n * Normalizes cfb stream content to a `Uint8Array`.\n * @param content - cfb stream content.\n * @returns The content as a `Uint8Array`.\n */\nfunction toUint8Array(content) {\n    return content instanceof Uint8Array ? content : Uint8Array.from(content);\n}\n//# sourceMappingURL=parseOle.js.map","import { IOBuffer } from 'iobuffer';\nimport { parseGalactic } from \"./galactic/parse.js\";\nimport { isUVProbeFlat, parseUVProbeFlat } from \"./uvProbe/parseFlat.js\";\nimport { parseUVProbeOle } from \"./uvProbe/parseOle.js\";\n/** OLE2 / Microsoft Compound File Binary magic number. */\nconst oleMagic = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];\nconst galacticVersions = new Set([0x4b, 0x4c, 0x4d]);\n/**\n * Parses an SPC file, auto-detecting the format:\n * Thermo Galactic GRAMS SPC, or Shimadzu UVProbe (OLE2 or flat) `.spc`.\n * @param buffer - SPC file buffer.\n * @returns JSON-like object with the spectra and metadata of the file.\n */\nexport function parse(buffer) {\n    const bytes = toBytes(buffer);\n    if (isOle(bytes)) {\n        return parseUVProbeOle(bytes);\n    }\n    if (galacticVersions.has(bytes[1])) {\n        return parseGalactic(new IOBuffer(bytes));\n    }\n    if (isUVProbeFlat(bytes)) {\n        return parseUVProbeFlat(bytes);\n    }\n    throw new Error('Unsupported SPC file: not an OLE2 compound document, a Thermo Galactic SPC, or a Shimadzu UVProbe flat file');\n}\n/**\n * Checks for the OLE2 compound-file magic number.\n * @param bytes - file bytes.\n * @returns True when the file is an OLE2 compound document.\n */\nfunction isOle(bytes) {\n    if (bytes.length < oleMagic.length)\n        return false;\n    for (let i = 0; i < oleMagic.length; i++) {\n        if (bytes[i] !== oleMagic[i])\n            return false;\n    }\n    return true;\n}\n/**\n * Normalizes any accepted input into a `Uint8Array` view over its bytes.\n * @param buffer - the input data.\n * @returns A `Uint8Array` over the same bytes.\n */\nfunction toBytes(buffer) {\n    if (buffer instanceof IOBuffer) {\n        return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n    }\n    if (ArrayBuffer.isView(buffer)) {\n        return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n    }\n    return new Uint8Array(buffer);\n}\n//# sourceMappingURL=parse.js.map","import { Analysis } from 'common-spectrum';\nimport { parse } from 'spc-parser';\nimport { spectrumCallback as defaultSpectrumCallback } from \"./utils/spectrumCallback.js\";\n/**\n * Creates a new Analysis from an SPC buffer.\n * @param buffer - SPC file buffer.\n * @param options - Options for the analysis.\n * @returns New Analysis element with the given data.\n */\nexport function fromSPC(buffer, options = {}) {\n    const { spectrumCallback = defaultSpectrumCallback, ...rest } = options;\n    const analysis = new Analysis({ ...rest, spectrumCallback });\n    const result = parse(buffer);\n    const resultMeta = { ...result.meta };\n    delete resultMeta.parameters;\n    for (const spectrum of result.spectra) {\n        const { parameters: _spectrumParameters, ...spectrumMeta } = spectrum.meta ?? {};\n        analysis.pushSpectrum(spectrum.variables, {\n            dataType: 'IR SPECTRUM',\n            title: '',\n            meta: { ...resultMeta, ...spectrumMeta },\n        });\n    }\n    return analysis;\n}\n//# sourceMappingURL=fromSPC.js.map","import { Analysis } from 'common-spectrum';\nimport { parseXYAndKeepInfo } from 'xy-parser';\n/**\n * Creates a new Analysis from text data (CSV, TSV, etc.).\n * @param data - Text data containing x,y values.\n * @param options - Options for parsing and analysis creation.\n * @returns New Analysis element with the given data.\n */\nexport function fromText(data, options = {}) {\n    const { info = {}, parser = {}, dataType = 'IR spectrum', title = '', ...rest } = options;\n    const analysis = new Analysis(rest);\n    const parsed = parseXYAndKeepInfo(data, parser);\n    const variables = {\n        x: {\n            data: parsed.data.x,\n            units: info.xUnits || '',\n            label: info.xLabel || '',\n        },\n        y: {\n            data: parsed.data.y,\n            units: info.yUnits || '',\n            label: info.yLabel || '',\n        },\n    };\n    analysis.pushSpectrum(variables, { dataType, title });\n    return analysis;\n}\n//# sourceMappingURL=fromText.js.map","import { JSGraph as OriginalJSGraph, autoPeakPicking as originalAutoPeakPicking, peakPicking as originalPeakPicking, } from 'common-spectrum';\nimport { convertPeak } from \"./convertPeak.js\";\nimport { getAnnotations } from \"./jsgraph/getAnnotations.js\";\nexport { AnalysesManager, Analysis, toJcamp } from 'common-spectrum';\n/**\n * Picks a single peak closest to the given target wavenumber.\n * @param spectrum - The spectrum to pick from.\n * @param target - Target wavenumber value.\n * @param options - Peak picking options.\n * @returns The converted peak or undefined if no peak is found.\n */\nexport function peakPicking(spectrum, target, options) {\n    const peak = originalPeakPicking(spectrum, target, options);\n    if (!peak)\n        return undefined;\n    return convertPeak(peak, spectrum);\n}\n/**\n * Automatically picks all peaks in the spectrum.\n * @param spectrum - The spectrum to pick from.\n * @param options - Auto peak picking options.\n * @returns Array of converted peaks.\n */\nexport function autoPeakPicking(spectrum, options) {\n    const peaks = originalAutoPeakPicking(spectrum, options);\n    if (!peaks)\n        return [];\n    return peaks.map((peak) => convertPeak(peak, spectrum));\n}\nexport { fromJcamp } from \"./from/fromJcamp.js\";\nexport { fromSPC } from \"./from/fromSPC.js\";\nexport { fromText } from \"./from/fromText.js\";\nexport const JSGraph = { ...OriginalJSGraph, getAnnotations };\n//# sourceMappingURL=index.js.map"],"names":["toString","Object","prototype","isAnyArray","value","tag","call","endsWith","includes","getOutputArray","output","length","undefined","TypeError","Float64Array","xMedian","input","options","exact","fromIndex","toIndex","array","slice","middleIndex","calcMiddle","median","quickSelect","medianNext","low","high","middle","currentLow","currentHigh","swap","i","j","temp","Math","floor","xCheck","minLength","Error","xFindClosestIndex","target","sorted","abs","index","diff","Number","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","x","from","to","xAbsoluteSum","sum","xAdd","array1","array2","isConstant","constant","array3","xApplyFunctionStr","variableLabel","fctString","fct","Function","replaceAll","toReturn","isNaN","xBinning","binSize","numberOfPoints","keepFirstAndLast","RangeError","isInteger","binByNumberOfPoints","effectiveBinSize","innerLength","innerBinCount","ceil","start","end","min","k","outputLength","innerBins","CholeskyDecomposition","matrix","Matrix","MatrixTransposeView","inverse","solve","xMean","sumValue","xVariance","values","unbiased","mean","sqrError","xStandardDeviation","sqrt","xDivide","xEnsureFloat64","LITTLE_ENDIAN","Uint8Array","Uint16Array","buffer","isLittleEndian","SMALL_DIGIT_BITS","LARGE_DIGIT_BITS","LARGE_ARRAY_LENGTH","RADIX_ORDER_MIN_LENGTH","radixSortOrderExact","descending","ensureFloat64","order","Uint32Array","digitBits","getDigitBits","radix","digitMask","words","byteOffset","flip","highWord","lowWord","keysLow","keysHigh","nextOrder","nextLow","nextHigh","counts","shift","onHigh","wordShift","keys","fill","cumulate","at","count","xGetSortOrder","FFT","size","_csize","table","Array","angle","PI","cos","sin","power","t","_width","_bitrev","revShift","_out","_data","_inv","fromComplexArray","complex","storage","res","createComplexArray","toComplexArray","completeSpectrum","spectrum","half","transform","out","data","_transform4","realTransform","_realTransform4","inverseTransform","width","step","len","outOff","bitrev","off","_singleTransform2","_singleTransform4","inv","quarterLen","limit","A","B","C","D","Ar","Ai","Br","Bi","Cr","Ci","Dr","Di","MAr","MAi","tableBr","tableBi","MBr","MBi","tableCr","tableCi","MCr","MCi","tableDr","tableDi","MDr","MDi","T0r","T0i","T1r","T1i","T2r","T2i","T3r","T3i","FAr","FAi","FCr","FCi","FBr","FBi","FDr","FDi","evenR","evenI","oddR","oddI","leftR","leftI","rightR","rightI","step2","step3","_singleRealTransform2","_singleRealTransform4","halfLen","hquarterLen","ST0r","ST0i","ST1r","ST1i","ST2r","ST2i","ST3r","ST3i","SFAr","SFAi","SFBr","SFBi","SA","SB","createNumberArray","ArrayConstructor","createFromToArray","includeFrom","includeTo","distribution","div","delta","base","firstExponent","log","stringify","object","replacer","space","internalReplacer","key","ArrayBuffer","isView","JSON","xSubtract","xMaxValue","maxValue","xMinValue","minValue","xIsEquallySpaced","tolerance","maxDx","minDx","MAX_SAFE_INTEGER","absoluteDifference","xIsMonotonic","xMaxAbsoluteValue","xMedianAbsoluteDeviation","averageDeviations","mad","xMinMaxValues","max","simpleNormInvMagnitude","Y1","P1","Q1","Y2","P2","Q2","Y3","P3","Q3","Y4","P4","Q4","Y5","P5","Q5","polyval","c","p","coef","calc","v","P","Q","Y","s","r","erfcinv","sign","val","q","g","NaN","NEGATIVE_INFINITY","simpleNormInvRaw","SQRT2","xNoiseSanPlot","mask","cutOffFromPositive","refine","magnitudeMode","scaleFactor","factorStd","fixOffset","prepareData","medianIndex","firstNegativeValueIndex","findIndex","e","lastPositiveValueIndex","signPositive","signNegative","createNegativeSign","skyPoint","cutOff","determineCutOff","noiseLevelPositive","calculateNoiseLevel","noiseLevelNegative","positive","negative","snr","sanplot","generateSanPlot","fromTo","percentiles","getPercentiles","simpleNormInvValue","cutOffDist","noiseLevel","cloneSign","cutOffSignalsIndex","cutOffSignals","effectiveCutOffDist","refinedCorrectionFactor","correctionFactor","considerList","inverseQuantileFn","indexMax","safeFrom","safeTo","safeStep","normalizedFrom","normalizedTo","sigmaEstimates","startQuantile","endQuantile","quantileFraction","round","sigma","isFinite","push","halfWindow","bestVariance","bestQuantileFraction","windowCenter","windowFloor","windowTop","absSigma","meanSigma","variance","logBaseY","scale","y","reverse","log10","logOfBase","xAxis","result","maxIndex","percentile","ratio","filter","_e","sort","xNoiseStandardDeviation","sd","xNorm","element","xSum","xNormed","algorithm","absoluteSumValue","absoluteSum","currentMaxValue","factor","sumFactor","String","xPadding","fromEnd","toEnd","xParetoNormalization","sqrtSD","xRescale","currentMin","currentMax","xRolling","window","padding","padded","newArray","subarray","xRollingAverage","xRollingMedian","xSequentialFillFromStep","parameters","xSequentialFillFromTo","matrixCheck","firstLength","matrixCholeskySolver","nonZerosArray","dimension","permutationEncoded","pinv","Int32Array","mt","a","ar","ac","nnz","ap","ai","ax","lnz","idx","col","colOffset","adr","d","lp","parent","lnzArray","flag","pattern","bp1","ldlSymbolic","nz","lx","li","ldlNumeric","b","ldlPerm","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPermt","apLoc","aiLoc","parentLoc","lnzLoc","flagLoc","kk","p2","axLoc","lpLoc","liLoc","lxLoc","dLoc","yLoc","patternLoc","yi","lKi","top","p2col","xLoc","perm","bLoc","matrixCuthillMckee","list","adj","visited","l","toVisit","eol","ptr","nbhd","u","matrixMinMaxZ","nbRows","nbColumns","column","row","xyCheck","xyEnsureGrowingX","prevX","currentIndex","zonesNormalize","zones","exclusions","map","zone","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","results","zoneIndex","zonesWithPoints","normalizedZones","zonesWithNumberOfPoints","totalSize","reduce","previous","current","unitsPerPoint","currentTotal","tempZone","tempZoneNumberOfPoints","equallySpacedSlot","xLength","halfStep","lastStep","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","zonesWithPointsRes","xResult","yResult","zoneResult","processZone","concat","xyFilterX","currentZoneIndex","newX","newY","position","xyFilterXPositive","xyGrowingX","toReversed","xyInterpolateLinear","xTarget","sparseIndex","targetX","leftIdx","rightIdx","xyMaxClosestYPoint","targetIndex","previousIndex","xyMaxY","xyMinClosestYPoint","minY","xySortX","floatX","floatY","response","xyObject","xyUniqueX","isSorted","average","cumulativeY","divider","addStyle","serie","color","opacity","lineWidth","match","toUpperCase","replace","style","name","line","dash","label","id","COLORS","getJSGraph","analyses","colors","opacities","linesWidth","selector","normalization","yAxis","series","xLabel","yLabel","xUnits","units","yUnits","analysis","spectra","getNormalizedSpectra","firstSpectrum","variables","logScale","axes","unit","unitWrapperBefore","unitWrapperAfter","flipped","display","defaultBoundary","getNormalizationAnnotations","boundary","annotations","exclusion","ignore","annotation","type","strokeWidth","fillColor","centerMean","centerMedian","normed","divideBySD","rescale","paretoNormalization","updateSystem","weights","nbPoints","newMatrix","newVector","w","diag","next","getDeltaMatrix","lambda","last","lowerTriangularNonZeros","permutationEncodedArray","airPLS","xWork","yWork","optionsWork","shouldDownsample","getDownSampleData","controlPoints","getControlPoints","maxIterations","baseline","iteration","sumNegDifferences","corrected","stopCriterion","getStopCriterion","threshold","prevNegSum","leftHandSide","rightHandSide","cho","applyCorrection","absChange","exp","finalBaseline","finalCorrected","error","autoDownsample","maxResolution","getDownsampleFactor","downsampledControlPoints","Int8Array","closestIndex","range","indexFrom","indexTo","originalLength","targetResolution","airPLSBaseline","ys","numberPoints","regressionOptions","airpls","correctedSpectrum","checkArrayLength","BaseRegression","constructor","new","predict","_predict","xVal","train","precision","toLaTeX","score","n","y2","ySum","chi2","rmsd","xSquared","ySquared","xY","r2","maybeToPrecision","number","figures","toPrecision","PolynomialRegression","degree","powers","coefficients","regress","coefficient","toJSON","_toFormula","isLaTeX","sup","closeSup","times","fn","str","startsWith","load","json","interceptAtZero","isArray","nCoefficients","F","set","FT","mmul","to1DArray","baselineCorrectionRegression","Regression","fitting","oldFitting","regression","iterativePolynomialBaseline","rollingAverageBaseline","defaults","actualOptions","rollingBall","maxima","minima","windowM","windowS","windowLeft","windowRight","rollingBallBaseline","rollingMedianBaseline","baselineFct","meanGap","h","center","lo","hi","raise","spacing","derivative","checkArguments","xs","windowSize","polynomial","derivatives","console","warn","KEPT_WEIGHTS","keptShapes","keptWeights","nextSlot","cachedWeights","slot","known","built","fullWeights","gramPoly","m","Grampoly","genFact","gf","weight","np","sgg","ans","hs","constantH","wg1","wg2","d1","d2","wg","sggPair","firstOrder","secondOrder","first","second","firstWeights","secondWeights","firstConstant","secondConstant","lowFirst","lowSecond","highFirst","highSecond","lowFirstSum","lowSecondSum","highFirstSum","highSecondSum","atLow","atHigh","lowGap","highGap","firstCentre","secondCentre","firstSum","secondSum","into","firstIsOne","firstIsTwo","secondIsOne","secondIsTwo","gap","firstDerivative","secondDerivative","thirdDerivative","savitzkyGolay","ensureGrowing","reverseIfNeeded","equallySpaced","filterX","setMaxX","existingMax","setMinX","existingMin","getMinMaxIntervalsDy","dY","dX","lastMax","lastMin","intervalL","intervalR","tryMatchOneIntervalWithMinData","lastK","minData","yThreshold","intervalWidth","intervalCenter","yData","minDistance","possible","newLastIndex","centerIndex","deltaX","currentDistance","lastIndex","autoAlgorithm","ddY","minddY","crossDy","peaks","lastJ","yIndex","crypto","randomUUID","inflectionPoints","getPeakFromIntervals","xGetCrossZeroPoints","isLessAndGreaterThanZero","back","optimizeTop","peak","alpha","beta","gamma","xCurrent","xPrevious","gsd","sgOptions","smoothY","maxCriteria","maxAbsoluteRatio","minMaxRatio","realTopDetection","peakDetectionAlgorithm","isEquallySpaced","noiseInfo","maxAbsoluteValue","xValue","maxY","peakData","GAUSSIAN_EXP_FACTOR","LN2","GAUSSIAN_CUTOFF","ROOT_PI_OVER_LN2","ROOT_LN2","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","erfinv","ln1MinusXSqrd","lnEtcBy2Plus2","firstSqrt","secondSqrt","Gaussian","kind","fwhm","gaussianWidthToFWHM","fwhmToWidth","gaussianFwhmToWidth","widthToFWHM","gaussianFct","getArea","height","calculateGaussianHeight","getGaussianArea","getFactor","area","getGaussianFactor","getData","getGaussianData","calculateHeight","getParameters","dx","dFwhm","gaussianDerivative","shape","Lorentzian","lorentzianFwhmToWidth","lorentzianWidthToFWHM","lorentzianFct","getLorentzianArea","getLorentzianFactor","getLorentzianData","calculateLorentzianHeight","lorentzianDerivative","denominator","lorentzianQuantile","tan","halfResidual","LorentzianDispersive","lorentzianDispersiveFct","getLorentzianDispersiveData","lorentzianDispersiveDerivative","pseudoVoigtFindFactor","pTarget","mu","tol","maxIter","it","pPseudoVoigt","mid","erf","a1","a2","a3","a4","a5","sqrtLn2","pGaussian","pLorentz","atan","PseudoVoigt","pseudoVoigtFwhmToWidth","pseudoVoigtWidthToFWHM","pseudoVoigtFct","getPseudoVoigtArea","getPseudoVoigtFactor","calculatePseudoVoigtHeight","getPseudoVoigtData","dMu","pseudoVoigtDerivative","lorentzian","z","lorentz","dEdt","dLdt","dEdfwhm","dLdfwhm","PseudoVoigtTCH","_fwhmG","_fwhmL","_fwhm","_mu","_lorentzianWidthFraction","fwhmG","fwhmL","lorentzianWidthFraction","effectiveFwhm","computeEffectiveWidth","lorentzianFraction","gaussianWidthFraction","dFwhmG","dFwhmL","pseudoVoigtTCHDerivative","dwDfwhmG","dwDfwhmL","dFwhmDfwhmG","dFwhmDfwhmL","dLorentzianFractionDfwhmG","dLorentzianFractionDfwhmL","dPolyDfraction","dMuDfwhmG","dMuDfwhmL","denominator2","fraction","f","df","GeneralizedLorentzian","generalizedLorentzianFwhmToWidth","generalizedLorentzianWidthToFWHM","generalizedLorentzianFct","getGeneralizedLorentzianArea","getGeneralizedLorentzianFactor","getGeneralizedLorentzianData","calculateGeneralizedLorentzianHeight","dGamma","generalizedLorentzianDerivative","rational","dLorentzianDu","dRationalDu","dFctDu","duDx","duDfwhm","generalizedLorentzianQuantile","SplitGaussian","fwhmLow","fwhmHigh","splitGaussianFct","calculateSplitGaussianHeight","getSplitGaussianArea","getSplitGaussianData","dFwhmLow","dFwhmHigh","splitGaussianDerivative","getShape1D","getSumOfShapes","internalPeaks","sumOfShapes","shapeFctKey","shapeFct","totalY","peakX","assert","message","buildOptimizationLayout","yScale","slots","buildParameterSlots","buildOptimizationVariables","linkedParameters","variableMin","variableMax","variableInit","variableGrad","freeIndices","variable","init","gradientDifference","optimize","variableToPeakValues","variableValues","actualValues","variableValue","members","member","actualIndex","offset","peakIndex","internalPeak","parameter","peakId","propertiesValues","getOptimizeFlag","groupedActualIndices","Set","slotLookup","Map","idToIndices","getSlotKey","indices","get","linkedParameter","buildLinkedVariable","has","sortKey","_sortKey","resolvedMembers","resolveLinkedSlot","getOffset","memberActualIndices","firstMember","sharedMin","sharedMax","sharedInitCandidates","variableBounds","getMemberVariableBounds","resolvePeakIndexById","transformedMin","transformedMax","optimizeFlag","perPeakParam","globalParam","reconstructPeaks","newPeaks","newPeak","getFixedParametersResult","normalizedY","globalInit","baseSumOfShapes","iterations","DefaultParameters","peakShape","properties","getInternalPeaks","originalPeak","normalizedPeak","propertiesValuesInternal","property","propertyValue","getNormalizedValue","generalParameterValue","defaultParameterValues","checkOptions","timeout","initialValues","damping","dampingStepUp","dampingStepDown","errorTolerance","centralDifference","improvementThreshold","minValues","maxValues","parLen","gradientDifferenceArray","getGradientDifferenceArray","filler","getFiller","checkTimeout","getCheckTimeout","weightSquare","_","dataLength","endTime","Date","now","errorCalculation","parameterizedFunction","func","gradientFunction","evaluatedData","params","paramFunction","nbParams","zeros","rowIndex","param","auxParams","funcParam","point","funcParam2","analyticalGradient","jacobianFunction","gradient","partials","matrixFunction","gradientFunc","residualError","hessianApproximation","mmulByTranspose","jacobianWeightResidualError","cholesky","perturbations","isPositiveDefinite","levenbergMarquardt","checkedOptions","optimalError","optimalParameters","converged","previousError","improvementMetric","transpose","mul","parameterValues","parameterError","antiLowerConvexHull","currentPoint","moveOn","det","leftTurn","moveBack","item","vector","counter","direct","objectiveFunction","lowerBoundaries","upperBoundaries","epsilon","tolerance2","initialState","diffBorders","numberOfRectangles","totalIterations","unitaryCoordinates","middlePoint","bestCurrentValue","fCalls","smallerDistance","edgeSizes","diagonalDistances","functionValues","differentDistances","smallerValuesByDistance","choiceLimit","originalCoordinates","getMinIndex","S1","optimumValuesIndex","S3","b1","b2","S2","xHull","yHull","lowerIndexHull","largerSide","largeSidesIndex","bestFunctionValues","firstMiddleCenter","secondMiddleCenter","firstMiddleValue","secondMiddleValue","firstMinValue","secondMinValue","ix1","ix2","minIndex","minFunctionValue","pair","finalState","minimizer","optima","directOptimization","getObjectiveFunction","selectMethod","optimizationOptions","optimizationLayout","optimization","sumOfShapesForVariables","gradientDifferences","sumOfShapesToUse","sumOfShapesForReduced","reducedParameters","full","fitted","fittedVariableValues","fittedValues","calibrateX","nbPeaks","gsdOptions","xFunction","function","yFunction","setMaxY","setMinY","filterXY","filters","logs","filterFct","Filters","time","getNormalizedSpectrum","newSpectrum","title","dataType","meta","applyRangeSelectionFirst","structuredClone","unshift","isMonotonic","global","factory","module","exports","this","isString","isFiniteImpl","isNumber","identity","uniq","strings","seen","hasOwnProperty","compareArray","assign","forEach","mulSafe","decimals","arguments","arg","getFractional","divSafe","num","den","pow","invDen","QtyError","err","create","apply","stack","throwIncompatibleUnits","left","right","UNITS","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","scalar","numerator","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","unitKeys","indexOf","substr","getKinds","toLowerCase","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","unitSignatureVector","isBase","toBase","SIGN","INTEGER","SIGNED_INTEGER","FRACTION","FLOAT","EXPONENT","SCI_NUMBER","SIGNED_NUMBER","QTY_STRING","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","parse","trim","exec","scalarMatch","parseFloat","bottom","nx","UNIT_TEST_REGEX","test","parseUnits","PREFIX_REGEX","join","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","other","isCompatible","isInverse","baseUnitCache","toBaseUnits","toFloat","isUnitless","toPrec","precQuantity","precRoundedResult","swiftConverter","srcUnits","srcQty","dstQty","eq","convert","converter","sub","op1","op2","numdenscale","cleanTerms","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","direction","prefix","prefixValue","combinedPrefixValue","prop","compareTo","lt","lte","gt","gte","same","every","_isBase","NestedMap","childMap","defaultFormatter","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","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","labels","xVariable","yVariable","split","variableNames","getPossibleVariable","variableName","convertibleUnits","regexpLabel","upper","hasOwn","lower","possibleFiltered","getXYSpectrum","Analysis","spectrumCallback","cache","random","clone","ids","fromJSON","pushSpectrum","standardizeData","getXY","normalizedSpectra","getSpectrum","getXLabel","getYLabel","analysisOptions","entries","appendDistinctParameter","appendDistinctValue","AnalysesManager","analysesManager","addAnalysis","getAnalysisIndex","getAnalyses","processedAnalysisIds","getSpectra","getAnalysisBySpectrumId","getSpectrumById","getDistinctTitles","getDistinctUnits","getDistinctLabelUnits","normalizeLabelUnits","getDistinctLabels","getDistinctDataTypes","getDistinctMeta","removeAllAnalyses","splice","removeAnalysis","originalLabel","originalUnits","search","ensureString","blob","encoding","TextDecoder","decode","decodeText","uint8","byteLength","fatal","parseString","lowercase","gyromagneticRatioMHzT","getGyromagneticNucleus","nucleus","gyromagneticRatio","nucleusNumber","filteredNuclei","getGyromagneticRatio","realNucleus","fromEntries","_ref","quickSelectMedian","$","E","o","Boolean","te","ne","ms","pageValue","chromatogram","re","O","V","logger","xFactor","info","yFactor","isXYdata","firstX","firstY","codePointAt","I","S","X","L","N","trace","M","oe","isPeaktable","ue","ce","isXYAdata","se","Z","lastY","pe","ae","minX","maxX","minZ","maxZ","noise","ntuples","symbol","find","some","ie","H","nbContourLevels","U","fe","noiseMultiplier","zValue","lines","ee","T","segments","G","noContour","contourLines","minMax","observeFrequency","shiftOffsetVal","lastX","tmp","$NUC2","$NUC1","yType","xType","W","pageSymbol","J","intensity","de","twoD","wantXY","profiling","keepSpectra","dynamicTyping","le","K","charAt","vardim","varname","R","he","removeComments","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","withoutXY","noTrimRegExp","pt","ge","debug","flatten","children","datatable","dataClass","jcampDX","jcampCS","shiftOffsetNum","vartype","varform","page","sampleDescription","pop","be","fromJcamp","jcamp","addJcamp","converted","entry","currentSpectrum","text","uniqueX","bestGuess","keepInfo","xColumn","yColumn","numberColumns","maxNumberColumns","minNumberColumns","fields","skipFirstColumn","currentFirst","nextFirst","yValues","parseXYAndKeepInfo","addInfoData","header","checkMatrix","checkNumberOrArray","getExtremeValues","firstRow","firstLast","creatorNtuples","owner","origin","resInfo","varName","varType","varDim","isDependent","getFactorNumber","getBestFactor","onlyInteger","extremeValues","getNumber","rounded","EPSILON","peakTableCreator","rescaleAndEnsureInteger","newLine","pseudoDigits","SQZ_P","SQZ_N","DIF_P","DIF_N","DUP","maxLinelength","vectorEncoder","intervalX","xyEncoding","fixEncoding","squeezedEncoding","differenceEncoding","differenceDuplicateEncoding","commaSeparatedValuesEncoding","packedEncoding","separator","outputData","squeezedDigit","mult","charCount","encodedData","encodedNumber","diffData","numDiff","differenceDigit","duplicateDigit","sqzDigits","charCodeAt","substring","diffDigits","dupDigits","xyDataCreator","fromVariables","forceNtuples","jcampOptions","xData","toJcamps","jcamps","getJcamp","toJcamp","peakPicking","isMax","optimizedPeak","optimizedIndex","maximumY","optimizePeak","optimized","autoPeakPicking","normalizationOptions","minPeakWidth","tempSpectrum","normalizedSpectrum","xyClosestYPoint","closest","JSGraph","convertPeak","tVariable","wavenumber","absorbance","transmittance","getPeakKind","minTransmittance","maxTransmittance","getAnnotations","strokeColor","creationFct","mode","annotationAbsorbance","annotationTransmittance","showKind","showAssignment","anchor","dy","assignment","assignmentAngle","spelledOut","abbreviated","isTransmittance","isPercent","defaultSpectrumCallback","rest","commonFromJcamp","getDataShape","multiFile","xy","xyxy","bytes","decoder","encoder","TextEncoder","encode","defaultByteLength","hostBigEndian","view","typedArrays","int8","globalThis","int16","Int16Array","uint16","int32","uint32","uint64","BigUint64Array","int64","BigInt64Array","float32","Float32Array","float64","IOBuffer","lastWrittenByte","littleEndian","_mark","_marks","dataIsGiven","dvOffset","DataView","available","setLittleEndian","isBigEndian","setBigEndian","skip","seek","mark","reset","pushMark","popMark","rewind","ensureAvailable","lengthNeeded","newLength","readBoolean","readUint8","readInt8","getInt8","getUint8","readByte","readBytes","readArray","BYTES_PER_ELEMENT","returnArray","readInt16","getInt16","readUint16","getUint16","readInt32","getInt32","readUint32","getUint32","readFloat32","getFloat32","readFloat64","getFloat64","readBigInt64","getBigInt64","readBigUint64","getBigUint64","readChar","fromCharCode","readChars","readUtf8","writeBoolean","writeUint8","writeInt8","setInt8","_updateLastWrittenByte","setUint8","writeByte","writeBytes","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeFloat32","setFloat32","writeFloat64","setFloat64","writeBigInt64","setBigInt64","writeBigUint64","setBigUint64","writeChar","writeChars","writeUtf8","toArray","getWrittenByteLength","parseSubFlagParameters","changed","noPeakTable","modifiedArithmetic","parseSubHeader","exponentY","indexNumber","startingZ","endingZ","noiseValue","numberCoAddedScans","wAxisValue","reserved","setXYAxis","fileHeader","xUnitsType","yUnitsType","oX","oY","groups","newDataBlock","dataShape","startingX","endingX","subFileHeader","getNewY","subHeader","y16BitPrecision","oldDataBlock","getOldY","fileVersion","xzwTypes","xzwType","yTypes","experimentSettings","code","parseFlagParameters","useExperimentExtension","zValuesRandom","zValuesUneven","customAxisLabels","minimumYear","maximumYear","longToDate","long","specification","unpackSpecificationDate","isPlausible","toISOString","dos","unpackDosDate","year","month","day","hour","minute","date","setUTCFullYear","setUTCHours","parseOldHeader","prev","zTypeYear","resolutionDescription","peakPointNumber","scans","spare","memo","xyzLabels","parseNewHeader","experimentType","zUnitsType","postingDisposition","sourceInstrumentDescription","logOffset","modifiedFlag","processingCode","calibrationLevel","subMethodSampleInjectionNumber","concentrationFactor","methodFile","zSubIncrement","wPlanes","wPlaneIncrement","wAxisUnits","headerOpts","readLogBlock","logHeader","memorySize","textOffset","binarySize","diskArea","logData","logASCII","parseGalactic","ioBuffer","buildVariables","startingXOffset","endingXOffset","parseUVProbeFlat","located","findData","dataStart","rawX","readDate","isUVProbeFlat","fileLength","byte","fromCodePoint","Base64_map","Base64_encode","c1","c2","c3","e1","e2","e3","e4","Base64_decode","has_buf","Buffer","process","versions","node","Buffer_from","nbfs","buf","enc","bind","new_raw_buf","alloc","new_unsafe_buf","allocUnsafe","s2a","chr0","chr1","__toBuffer","bufs","___toBuffer","__utf16le","ss","__readUInt16LE","___utf16le","__hexlify","___hexlify","__bconcat","maxlen","bconcat","isBuffer","__readUInt8","__readInt16LE","__readUInt32LE","__readInt32LE","ReadShift","oI","oS","__writeUInt32LE","__writeInt32LE","WriteShift","parseInt","cc","CheckField","hexstr","fld","prep_blob","pos","read_shift","chk","write_shift","new_buf","sz","CRC32","signed_crc_table","T0","slice_by_16_tables","TT","T1","T2","T3","T4","T5","T6","T7","T8","T9","Ta","Tb","Tc","Td","Te","Tf","crc32_bstr","bstr","seed","crc32_buf","crc32_str","CFB","_CFB","namecmp","dirname","lastIndexOf","filename","write_dos_date","hms","getHours","getMinutes","getSeconds","ymd","getFullYear","getMonth","getDate","parse_dos_date","setMilliseconds","setFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","parse_extra_field","tgt","mtime","atime","ctime","fs","get_fs","require$$0","file","parse_zip","parse_mad","mver","ssz","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","fat_addrs","mv","check_get_mver","check_shifts","dir_cnt","sectors","sectorify","sleuth_fat","sector_list","make_sector_list","ENDOFCHAIN","files","Paths","FileIndex","FullPaths","read_directory","build_full_paths","raw","HEADER_SIGNATURE","nsectors","FI","FP","pl","dad","get_mfat_entry","payload","mini","MSSZ","cnt","sector","get_sector_list","chkd","buf_chain","modulus","jj","addr","nodes","sl","minifat_store","namelen","clsid","state","ct","read_date","content","read_file","readFileSync","read","init_cfb","cfb","opts","root","CLSID","seed_cfb","nm","rebuild_cfb","gc","_file","fullPaths","HEADER_CLSID","elt","_write","_opts","fileType","write_mad","write_zip","mini_size","fat_size","flen","mini_cnt","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","copy","path","UCFullPaths","UCPaths","UCPath","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","write_file","writeFileSync","a2s","write","_zlib","use_zlib","zlib","InflateRaw","InflRaw","_processChunk","_finishFlushFlag","bytesRead","_inflateRawSync","usz","_inflate","_deflateRawSync","deflateRawSync","_deflate","CLEN_ORDER","LEN_LN","DST_LN","bit_swap_8","use_typed_arrays","bitswap8","bit_swap_n","rev","read_bits_2","bl","read_bits_3","read_bits_4","read_bits_5","read_bits_7","read_bits_n","write_bits_3","write_bits_1","write_bits_8","write_bits_16","realloc","zero_fill_array","build_tree","clens","cmap","MAX","ccode","bl_count","ctree","cleni","fix_lmap","fix_dmap","dlens","_deflateRaw","_deflateRawIIFE","DST_LN_RE","LEN_LN_RE","write_stored","boff","write_huff_fixed","addrs","hash","mlen","len_eb","dst_eb","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","next_code","hcodes","h1","h2","inflate","outbuf","woff","OL","max_len_1","max_len_2","bits","warn_or_throw","wrn","msg","fcnt","start_cd","csz","efsz","fcsz","EF","parse_local_file","meth","crc32","_csz","_usz","ef","_crc32","cfb_add","unsafe","cdirs","method","compression","fp","fi","crcs","sz_cd","namebuf","ContentTypeMap","get_content_type","ctype","ext","write_base64_76","write_quoted_printable","encoded","si","parse_quoted_printable","di","oi","$$","parse_mime","fname","cte","fdata","mboundary","start_di","ca","cstr","dispcnt","csl","qp","cfb_new","fpath","utils","cfb_gc","cfb_del","cfb_mov","old_name","new_name","writeFile","_inflateRaw","require","DO_NOT_EXPORT_CFB","parsePageText","readDotNetString","read7BitLength","oleDateEpochOffset","millisecondsPerDay","parseUVProbeOle","container","readDoubles","findStream","history","tryStream","readTitle","readProperties","sectionProperties","toUint8Array","serial","milliseconds","oleMagic","galacticVersions","toBytes","isOle","fromSPC","resultMeta","_spectrumParameters","spectrumMeta","fromText","parser","parsed","originalPeakPicking","originalAutoPeakPicking","OriginalJSGraph"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHO,MAA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218]}