{"version":3,"file":"spectra-processor.umd.min.js","sources":["../node_modules/is-any-array/lib-esm/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/xAdd.js","../node_modules/ml-spectra-processing/lib/x/xApplyFunctionStr.js","../node_modules/ml-spectra-processing/lib/x/xMultiply.js","../node_modules/ml-spectra-processing/lib/x/xCorrelation.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-max/lib-es6/index.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/xStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xVariance.js","../node_modules/ml-spectra-processing/lib/x/xEnsureFloat64.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/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/xIsMonotonic.js","../node_modules/ml-spectra-processing/lib/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib/x/utils/erfcinv.js","../node_modules/ml-spectra-processing/lib/x/utils/simpleNormInv.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/xMedianAbsoluteDeviation.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/xParetoNormalization.js","../node_modules/ml-spectra-processing/lib/x/xRolling.js","../node_modules/ml-spectra-processing/lib/x/xPadding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCreateEmpty.js","../node_modules/ml-spectra-processing/lib/matrix/matrixAutoCorrelation.js","../node_modules/ml-spectra-processing/lib/matrix/matrixBoxPlot.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCenterZMean.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib/matrix/matrixPQN.js","../node_modules/ml-spectra-processing/lib/matrix/matrixZRescale.js","../node_modules/ml-spectra-processing/lib/xy/xyCheck.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxYPoint.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/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/zones/zonesWithPoints.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSlot.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterX.js","../node_modules/ml-spectra-processing/lib/xy/xyGrowingX.js","../node_modules/ml-spectra-processing/lib/xy/xyIntegration.js","../node_modules/ml-spectra-processing/lib/xy/xyMinYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyUniqueX.js","../node_modules/ml-spectra-processing/lib/xy/xySortX.js","../node_modules/chroma-js/src/utils/limit.js","../node_modules/chroma-js/src/utils/clip_rgb.js","../node_modules/chroma-js/src/utils/type.js","../node_modules/chroma-js/src/utils/unpack.js","../node_modules/chroma-js/src/utils/last.js","../node_modules/chroma-js/src/utils/index.js","../node_modules/chroma-js/src/io/input.js","../node_modules/chroma-js/src/Color.js","../node_modules/chroma-js/src/version.js","../node_modules/chroma-js/src/chroma.js","../node_modules/chroma-js/src/colors/w3cx11.js","../node_modules/chroma-js/src/io/hex/hex2rgb.js","../node_modules/chroma-js/src/io/hex/rgb2hex.js","../node_modules/chroma-js/src/io/named/index.js","../node_modules/chroma-js/src/ops/alpha.js","../node_modules/chroma-js/src/ops/clipped.js","../node_modules/chroma-js/src/io/lab/lab-constants.js","../node_modules/chroma-js/src/io/lab/lab2rgb.js","../node_modules/chroma-js/src/io/lab/rgb2lab.js","../node_modules/chroma-js/src/io/lab/index.js","../node_modules/chroma-js/src/ops/darken.js","../node_modules/chroma-js/src/ops/get.js","../node_modules/chroma-js/src/ops/luminance.js","../node_modules/chroma-js/src/interpolator/index.js","../node_modules/chroma-js/src/generator/mix.js","../node_modules/chroma-js/src/ops/mix.js","../node_modules/chroma-js/src/ops/premultiply.js","../node_modules/chroma-js/src/io/lch/lch2lab.js","../node_modules/chroma-js/src/io/lch/lch2rgb.js","../node_modules/chroma-js/src/io/lch/lab2lch.js","../node_modules/chroma-js/src/io/lch/rgb2lch.js","../node_modules/chroma-js/src/io/lch/index.js","../node_modules/chroma-js/src/io/lch/hcl2rgb.js","../node_modules/chroma-js/src/ops/saturate.js","../node_modules/chroma-js/src/ops/set.js","../node_modules/chroma-js/src/ops/shade.js","../node_modules/chroma-js/src/interpolator/rgb.js","../node_modules/chroma-js/src/interpolator/lrgb.js","../node_modules/chroma-js/src/interpolator/lab.js","../node_modules/chroma-js/src/interpolator/_hsx.js","../node_modules/chroma-js/src/interpolator/lch.js","../node_modules/chroma-js/src/io/num/index.js","../node_modules/chroma-js/src/io/num/rgb2num.js","../node_modules/chroma-js/src/io/num/num2rgb.js","../node_modules/chroma-js/src/interpolator/num.js","../node_modules/chroma-js/src/io/hcg/hcg2rgb.js","../node_modules/chroma-js/src/io/hcg/index.js","../node_modules/chroma-js/src/io/hcg/rgb2hcg.js","../node_modules/chroma-js/src/interpolator/hcg.js","../node_modules/chroma-js/src/io/hsi/hsi2rgb.js","../node_modules/chroma-js/src/io/hsi/rgb2hsi.js","../node_modules/chroma-js/src/io/hsi/index.js","../node_modules/chroma-js/src/interpolator/hsi.js","../node_modules/chroma-js/src/io/hsl/hsl2rgb.js","../node_modules/chroma-js/src/io/hsl/rgb2hsl.js","../node_modules/chroma-js/src/io/hsl/index.js","../node_modules/chroma-js/src/interpolator/hsl.js","../node_modules/chroma-js/src/io/hsv/hsv2rgb.js","../node_modules/chroma-js/src/io/hsv/rgb2hsv.js","../node_modules/chroma-js/src/io/hsv/index.js","../node_modules/chroma-js/src/utils/multiply-matrices.js","../node_modules/chroma-js/src/interpolator/hsv.js","../node_modules/chroma-js/src/io/oklab/oklab2rgb.js","../node_modules/chroma-js/src/io/oklab/rgb2oklab.js","../node_modules/chroma-js/src/io/oklab/index.js","../node_modules/chroma-js/src/interpolator/oklab.js","../node_modules/chroma-js/src/interpolator/oklch.js","../node_modules/chroma-js/src/generator/average.js","../node_modules/chroma-js/src/generator/scale.js","../node_modules/chroma-js/src/io/rgb/index.js","../node_modules/chroma-js/src/generator/blend.js","../node_modules/chroma-js/src/generator/cubehelix.js","../node_modules/chroma-js/src/generator/random.js","../node_modules/chroma-js/src/utils/analyze.js","../node_modules/chroma-js/src/utils/contrastAPCA.js","../node_modules/chroma-js/src/utils/delta-e.js","../node_modules/chroma-js/src/utils/valid.js","../node_modules/chroma-js/src/utils/scales.js","../node_modules/chroma-js/src/colors/colorbrewer.js","../node_modules/chroma-js/src/io/cmyk/rgb2cmyk.js","../node_modules/chroma-js/src/io/cmyk/index.js","../node_modules/chroma-js/src/io/cmyk/cmyk2rgb.js","../node_modules/chroma-js/src/io/css/hsl2css.js","../node_modules/chroma-js/src/io/oklch/rgb2oklch.js","../node_modules/chroma-js/src/io/css/rgb2css.js","../node_modules/chroma-js/src/io/css/lab2css.js","../node_modules/chroma-js/src/io/css/lch2css.js","../node_modules/chroma-js/src/io/css/oklab2css.js","../node_modules/chroma-js/src/io/css/oklch2css.js","../node_modules/chroma-js/src/io/oklch/oklch2rgb.js","../node_modules/chroma-js/src/io/css/css2rgb.js","../node_modules/chroma-js/src/io/css/index.js","../node_modules/chroma-js/src/io/gl/index.js","../node_modules/chroma-js/src/io/hex/index.js","../node_modules/chroma-js/src/io/temp/temperature2rgb.js","../node_modules/chroma-js/src/io/temp/rgb2temperature.js","../node_modules/chroma-js/src/io/temp/index.js","../node_modules/chroma-js/src/io/oklch/index.js","../lib/spectra/getBoxPlotData.js","../lib/jsgraph/getBoxPlotChart.js","../lib/jsgraph/addChartDataStyle.js","../lib/spectra/getNormalizedData.js","../lib/metadata/getCategoriesStats.js","../node_modules/ensure-string/lib-esm/index.js","../node_modules/isutf8/dist/index.esm.js","../node_modules/dynamic-typing/lib-esm/parseString.js","../node_modules/chroma-js/index.js","../node_modules/chroma-js/src/generator/bezier.js","../node_modules/chroma-js/src/utils/contrast.js","../node_modules/chroma-js/src/utils/distance.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticRatio.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticNucleus.js","../node_modules/gyromagnetic-ratio/lib-esm/index.js","../node_modules/gyromagnetic-ratio/lib-esm/gyromagneticRatioMHzT.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/jcampconverter/dist/jcampconverter.js","../lib/Kinds.js","../lib/parser/parseJcamp.js","../node_modules/xy-parser/lib-esm/index.js","../node_modules/xy-parser/lib-esm/parse.js","../lib/spectra/util/convertToText.js","../node_modules/object-hash/dist/object_hash.js","../lib/spectra/getPostProcessedData.js","../lib/spectra/scaled/min.js","../lib/spectra/scaled/max.js","../lib/spectra/scaled/minMax.js","../lib/spectra/scaled/integration.js","../node_modules/ml-airpls/src/choleskySolver.js","../node_modules/cuthill-mckee/cuthill-mckee.js","../node_modules/ml-airpls/src/utils.js","../node_modules/ml-airpls/src/index.js","../node_modules/ml-spectra-processing/lib/x/xAbsoluteSum.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-regression-base/lib-esm/checkArrayLength.js","../node_modules/ml-regression-base/lib-esm/BaseRegression.js","../node_modules/ml-regression-base/lib-esm/maybeToPrecision.js","../node_modules/ml-regression-polynomial/lib-esm/index.js","../node_modules/baselines/src/iterativePolynomial.js","../node_modules/ml-baseline-correction-regression/src/index.js","../node_modules/baselines/src/rollingAverage.js","../node_modules/ml-spectra-processing/lib/x/xRollingAverage.js","../node_modules/baselines/src/rollingBall.js","../node_modules/ml-rolling-ball-baseline/lib-esm/rollingBall.js","../node_modules/baselines/src/rollingMedian.js","../node_modules/ml-spectra-processing/lib/x/xRollingMedian.js","../node_modules/ml-savitzky-golay-generalized/lib-esm/index.js","../node_modules/ml-gsd/lib/algorithms/getMinMaxIntervals.js","../node_modules/ml-gsd/lib/algorithms/tryMatchOneIntervalWithMinData.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/gsd.js","../node_modules/ml-spectra-processing/lib/x/xIsEquallySpaced.js","../node_modules/ml-gsd/lib/algorithms/secondDerivative.js","../node_modules/ml-gsd/lib/algorithms/autoAlgorithm.js","../node_modules/ml-gsd/lib/utils/optimizeTop.js","../node_modules/ml-signal-processing/lib/filters/baseline/airPLSBaseline.js","../node_modules/baselines/src/airPLS.js","../node_modules/ml-signal-processing/lib/filters/x/calibrateX.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/scaling/divideBySD.js","../node_modules/ml-signal-processing/lib/filters/x/ensureGrowing.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/sg/firstDerivative.js","../node_modules/ml-signal-processing/lib/filters/x/fromTo.js","../node_modules/ml-signal-processing/lib/filters/baseline/iterativePolynomialBaseline.js","../node_modules/ml-signal-processing/lib/filters/scaling/normed.js","../node_modules/ml-signal-processing/lib/filters/scaling/paretoNormalization.js","../node_modules/ml-signal-processing/lib/filters/scaling/rescale.js","../node_modules/ml-spectra-processing/lib/x/xRescale.js","../node_modules/ml-signal-processing/lib/filters/x/reverseIfNeeded.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-signal-processing/lib/filters/sg/savitzkyGolay.js","../node_modules/ml-signal-processing/lib/filters/sg/secondDerivative.js","../node_modules/ml-signal-processing/lib/filters/x/setMaxX.js","../node_modules/ml-signal-processing/lib/filters/y/setMaxY.js","../node_modules/ml-signal-processing/lib/filters/x/setMinX.js","../node_modules/ml-signal-processing/lib/filters/y/setMinY.js","../node_modules/ml-signal-processing/lib/filters/sg/thirdDerivative.js","../node_modules/ml-signal-processing/lib/filters/x/xFunction.js","../node_modules/ml-signal-processing/lib/filters/scaling/yFunction.js","../lib/spectrum/getNormalized.js","../node_modules/ml-signal-processing/lib/filterXY.js","../lib/spectrum/Spectrum.js","../lib/spectrum/updateRangesInfo.js","../lib/spectrum/getData.js","../lib/SpectraProcessor.js","../lib/jsgraph/getNormalizationAnnotations.js","../lib/spectra/getAutocorrelation.js","../lib/spectra/getMeanData.js","../lib/spectra/getNormalizedText.js","../lib/spectra/getPostProcessedText.js","../lib/parser/parseText.js","../lib/metadata/getMetadata.js","../lib/metadata/getClasses.js","../lib/metadata/getClassLabels.js","../lib/jsgraph/getChart.js","../lib/jsgraph/getAutocorrelationChart.js","../lib/jsgraph/getTrackAnnotation.js","../lib/jsgraph/getNormalizedChart.js","../lib/jsgraph/getPostProcessedChart.js","../lib/parser/parseMatrix.js","../lib/jsgraph/getFilterAnnotations.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function\n * @param output - undefined or a new array\n * @param length - length of the output array\n * @returns\n */\nexport function getOutputArray(output, length) {\n    if (output !== undefined) {\n        if (!isAnyArray(output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        if (output.length !== length) {\n            throw new TypeError('the output array does not have the correct length');\n        }\n        return output;\n    }\n    else {\n        return new Float64Array(length);\n    }\n}\n//# sourceMappingURL=getOutputArray.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculates the median of an array.\n * @param input - Array containing values\n * @param options\n * @returns - median\n */\nexport function xMedian(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { exact = false } = options || {};\n    const array = input.slice();\n    const middleIndex = calcMiddle(0, array.length - 1);\n    const median = quickSelect(array, middleIndex);\n    if (array.length % 2 === 1 || !exact) {\n        return median;\n    }\n    const medianNext = quickSelect(array, middleIndex + 1);\n    return (median + medianNext) / 2;\n}\nfunction quickSelect(array, middleIndex) {\n    let low = 0;\n    let high = array.length - 1;\n    let middle = 0;\n    let currentLow = 0;\n    let currentHigh = 0;\n    while (true) {\n        if (high <= low) {\n            return array[middleIndex];\n        }\n        if (high === low + 1) {\n            if (array[low] > array[high]) {\n                swap(array, low, high);\n            }\n            return array[middleIndex];\n        }\n        // Find median of low, middle and high items; swap into position low\n        middle = calcMiddle(low, high);\n        if (array[middle] > array[high])\n            swap(array, middle, high);\n        if (array[low] > array[high])\n            swap(array, low, high);\n        if (array[middle] > array[low])\n            swap(array, middle, low);\n        // Swap low item (now in position middle) into position (low+1)\n        swap(array, middle, low + 1);\n        // Nibble from each end towards middle, swapping items when stuck\n        currentLow = low + 1;\n        currentHigh = high;\n        while (true) {\n            do\n                currentLow++;\n            while (array[low] > array[currentLow]);\n            do\n                currentHigh--;\n            while (array[currentHigh] > array[low]);\n            if (currentHigh < currentLow) {\n                break;\n            }\n            swap(array, currentLow, currentHigh);\n        }\n        // Swap middle item (in position low) back into correct position\n        swap(array, low, currentHigh);\n        // Re-set active partition\n        if (currentHigh <= middleIndex) {\n            low = currentLow;\n        }\n        if (currentHigh >= middleIndex) {\n            high = currentHigh - 1;\n        }\n    }\n}\nfunction swap(array, i, j) {\n    const temp = array[j];\n    array[j] = array[i];\n    array[i] = temp;\n}\nfunction calcMiddle(i, j) {\n    return Math.floor((i + j) / 2);\n}\n//# sourceMappingURL=xMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - Array to check.\n * @param options - Additional checks.\n */\nexport function xCheck(input, options = {}) {\n    const { minLength } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    if (typeof input[0] !== 'number') {\n        throw new TypeError('input must contain numbers');\n    }\n    if (minLength && input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n * @param array - array of numbers\n * @param target - target\n * @param options\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from \"./xFindClosestIndex.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 { isAnyArray } from 'is-any-array';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param array1 - the first array\n * @param array2 - the second array or number\n * @returns the result of the addition\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xAdd.js.map","/**\n * Will apply a function on each element of the array described as a string\n * By default we will use as variable 'x'\n * In front of sequence of lowercase we will add 'Math.'. This allows to write\n * `sin(x) + cos(x)` and it will be replace internally by (x) => (Math.sin(x) + Math.cos(x))\n * @param array\n * @param options\n * @returns\n */\nexport function xApplyFunctionStr(array, options = {}) {\n    const { variableLabel = 'x', fctString = variableLabel } = options;\n    const fct = new Function(variableLabel, `return Number(${fctString\n        .replaceAll(/(?<before>^|\\W)(?<after>[\\da-z]{2,}\\()/g, '$<before>Math.$<after>')\n        .replaceAll('Math.Math', 'Math')})`);\n    const toReturn = Float64Array.from(array);\n    for (let i = 0; i < array.length; i++) {\n        toReturn[i] = fct(array[i]);\n        if (Number.isNaN(toReturn[i])) {\n            throw new Error(`The callback ${fctString} does not return a number: ${array[i]}`);\n        }\n    }\n    return toReturn;\n}\n//# sourceMappingURL=xApplyFunctionStr.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array\n * @param options - options\n */\nexport function xMultiply(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xMultiply.js.map","/**\n * Calculates the correlation between 2 vectors\n * https://en.wikipedia.org/wiki/Correlation_and_dependence\n * @param A - first array\n * @param B - sencond array\n */\nexport function xCorrelation(A, B) {\n    const n = A.length;\n    let sumA = 0;\n    let sumA2 = 0;\n    let sumB = 0;\n    let sumB2 = 0;\n    let sumAB = 0;\n    for (let i = 0; i < n; i++) {\n        const a = A[i];\n        const b = B[i];\n        sumA += a;\n        sumA2 += a ** 2;\n        sumB += b;\n        sumB2 += b ** 2;\n        sumAB += a * b;\n    }\n    return ((n * sumAB - sumA * sumB) /\n        (Math.sqrt(n * sumA2 - sumA ** 2) * Math.sqrt(n * sumB2 - sumB ** 2)));\n}\n//# sourceMappingURL=xCorrelation.js.map","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isAnyArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport { max as default };\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray.isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray.isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nfunction newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nfunction checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n\nfunction sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nfunction centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nfunction centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nfunction centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nfunction getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nfunction getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nfunction getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n\nclass AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isDistance() {\n    if (!this.isSymmetric()) return false;\n\n    for (let i = 0; i < this.rows; i++) {\n      if (this.get(i, i) !== 0) return false;\n    }\n\n    return true;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    switch (type) {\n      case 'max':\n        return this.max();\n      case 'frobenius':\n        return Math.sqrt(this.dot(this));\n      default:\n        throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  mpow(scalar) {\n    if (!this.isSquare()) {\n      throw new RangeError('Matrix must be square');\n    }\n    if (!Number.isInteger(scalar) || scalar < 0) {\n      throw new RangeError('Exponent must be a non-negative integer');\n    }\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\n    let result = Matrix.eye(this.rows);\n    let bb = this;\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\n    for (let e = scalar; e >= 1; e /= 2) {\n      if ((e & 1) !== 0) {\n        result = result.mmul(bb);\n      }\n      bb = bb.mmul(bb);\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      result = result.setSubMatrix(c11, 0, 0);\n      result = result.setSubMatrix(c12, c11.rows, 0);\n      result = result.setSubMatrix(c21, 0, c11.columns);\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min,\n          max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n  }\n\n  /**\n   * @template {AbstractMatrix} M\n   * @param {AbstractMatrix} from\n   * @param {M} to\n   * @return {M}\n   */\n  static copy(from, to) {\n    for (const [row, column, value] of from.entries()) {\n      to.set(row, column, value);\n    }\n\n    return to;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield [row, column, value]\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *entries() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield [row, col, this.get(row, col)];\n      }\n    }\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield value\n   * @returns {Generator<number, void, void>}\n   */\n  *values() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield this.get(row, col);\n      }\n    }\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n  /**\n   * @type {Float64Array[]}\n   */\n  data;\n\n  /**\n   * Init an empty matrix\n   * @param {number} nRows\n   * @param {number} nColumns\n   */\n  #initData(nRows, nColumns) {\n    this.data = [];\n\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\n      for (let i = 0; i < nRows; i++) {\n        this.data.push(new Float64Array(nColumns));\n      }\n    } else {\n      throw new TypeError('nColumns must be a positive integer');\n    }\n\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      this.#initData(nRows.rows, nRows.columns);\n      Matrix.copy(nRows, this);\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      this.#initData(nRows, nColumns);\n    } else if (isAnyArray.isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n\n      this.rows = nRows;\n      this.columns = nColumns;\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n  /** @type {Matrix} */\n  #matrix;\n\n  get size() {\n    return this.#matrix.size;\n  }\n\n  get rows() {\n    return this.#matrix.rows;\n  }\n\n  get columns() {\n    return this.#matrix.columns;\n  }\n\n  get diagonalSize() {\n    return this.rows;\n  }\n\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isSymmetricMatrix(value) {\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static zeros(diagonalSize) {\n    return new this(diagonalSize);\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static ones(diagonalSize) {\n    return new this(diagonalSize).fill(1);\n  }\n\n  /**\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n   * @return {this}\n   */\n  constructor(diagonalSize) {\n    super();\n\n    if (Matrix.isMatrix(diagonalSize)) {\n      if (!diagonalSize.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n\n      this.#matrix = Matrix.copy(\n        diagonalSize,\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\n      );\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\n    } else {\n      this.#matrix = new Matrix(diagonalSize);\n\n      if (!this.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n    }\n  }\n\n  clone() {\n    const matrix = new SymmetricMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  toMatrix() {\n    return new Matrix(this);\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.#matrix.get(rowIndex, columnIndex);\n  }\n  set(rowIndex, columnIndex, value) {\n    // symmetric set\n    this.#matrix.set(rowIndex, columnIndex, value);\n    this.#matrix.set(columnIndex, rowIndex, value);\n\n    return this;\n  }\n\n  removeCross(index) {\n    // symmetric remove side\n    this.#matrix.removeRow(index);\n    this.#matrix.removeColumn(index);\n\n    return this;\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    const row = array.slice();\n    row.splice(index, 1);\n\n    this.#matrix.addRow(index, row);\n    this.#matrix.addColumn(index, array);\n\n    return this;\n  }\n\n  /**\n   * @param {Mask[]} mask\n   */\n  applyMask(mask) {\n    if (mask.length !== this.diagonalSize) {\n      throw new RangeError('Mask size do not match with matrix size');\n    }\n\n    // prepare sides to remove from matrix from mask\n    /** @type {number[]} */\n    const sidesToRemove = [];\n    for (const [index, passthroughs] of mask.entries()) {\n      if (passthroughs) continue;\n      sidesToRemove.push(index);\n    }\n    // to remove from highest to lowest for no mutation shifting\n    sidesToRemove.reverse();\n\n    // remove sides\n    for (const sideIndex of sidesToRemove) {\n      this.removeCross(sideIndex);\n    }\n\n    return this;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * iterate from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 1 2 3 4\n   * B 2 5 6 7\n   * C 3 6 8 9\n   * D 4 7 9 10\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n   *\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n\n    /** @type {number[]} */\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   * @return {SymmetricMatrix}\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n    // compactSize = (sideSize * (sideSize + 1)) / 2\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new SymmetricMatrix(diagonalSize);\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return matrix;\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield [row, column, value]\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightEntries() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield [row, col, value];\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield value\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightValues() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield value;\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isDistanceMatrix(value) {\n    return (\n      SymmetricMatrix.isSymmetricMatrix(value) &&\n      value.klassSubType === 'DistanceMatrix'\n    );\n  }\n\n  constructor(sideSize) {\n    super(sideSize);\n\n    if (!this.isDistance()) {\n      throw new TypeError('Provided arguments do no produce a distance matrix');\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    // distance matrix diagonal is 0\n    if (rowIndex === columnIndex) value = 0;\n\n    return super.set(rowIndex, columnIndex, value);\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    // ensure distance\n    array = array.slice();\n    array[index] = 0;\n\n    return super.addCross(index, array);\n  }\n\n  toSymmetricMatrix() {\n    return new SymmetricMatrix(this);\n  }\n\n  clone() {\n    const matrix = new DistanceMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      if (row === col) continue;\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * no diagonal (only zeros)\n   * iterable from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 0 1 2 3\n   * B 1 0 4 5\n   * C 2 4 0 6\n   * D 3 5 6 0\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n   *\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n    /** @type {number[]} */\n    const compact = new Array(compactLength);\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n\n    if (compactSize === 0) {\n      return new this(0);\n    }\n\n    // compactSize in Natural integer range ]0;∞]\n    // compactSize = (sideSize * (sideSize - 1)) / 2\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new this(diagonalSize);\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return matrix;\n  }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n\nclass MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n  constructor(matrix, columnIndices) {\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, matrix.rows, columnIndices.length);\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n  }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n  }\n}\n\nclass MatrixFlipRowView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n  }\n}\n\nclass MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n  constructor(matrix, rowIndices) {\n    checkRowIndices(matrix, rowIndices);\n    super(matrix, rowIndices.length, matrix.columns);\n    this.rowIndices = rowIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n  }\n}\n\nclass MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    checkRowIndices(matrix, rowIndices);\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, rowIndices.length, columnIndices.length);\n    this.rowIndices = rowIndices;\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n\nclass MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n\nclass MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n\nfunction wrap(array, options) {\n  if (isAnyArray.isAnyArray(array)) {\n    if (array[0] && isAnyArray.isAnyArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n\nclass LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n\nfunction hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n\nclass QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n\nclass SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n\nfunction inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n\nfunction determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    if (matrix.columns === 0) {\n      return 1;\n    }\n\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isEmpty()) {\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n    // (0xn)*(nx0)*(0xn) = 0xn\n    // (nx0)*(0xn)*(nx0) = nx0\n    return matrix.transpose();\n  }\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > threshold) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n\nclass EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    if (matrix.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(i, j, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n    } else {\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n        V.set(j, i, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(j, i, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(k, j) * d[k];\n          e[k] += V.get(k, j) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(n - 1, i, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(k, i + 1) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(k, i + 1) * V.get(k, j);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(k, j, V.get(k, j) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(k, i + 1, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n    V.set(n - 1, j, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      do {\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(k, i + 1);\n            V.set(k, i + 1, s * V.get(k, i) + c * h);\n            V.set(k, i, c * V.get(k, i) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(j, i);\n        V.set(j, i, V.get(j, k));\n        V.set(j, k, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        // eslint-disable-next-line no-multi-assign\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          // eslint-disable-next-line no-multi-assign\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n\nclass CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &&= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = positiveDefinite;\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n\nclass nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n","import { xCheck } from \"./xCheck.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 { 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 { 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 (const value of values) {\n        const x = value - 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 { 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","'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","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 * 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\";\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns - Object with 2 properties, min and max.\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (const value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","/*\nAdapted from: https://github.com/compute-io/erfcinv/blob/aa116e23883839359e310ad41a7c42f72815fc1e/lib/number.js\n\nThe MIT License (MIT)\n\nCopyright (c) 2014-2015 The Compute.io Authors. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the \"Software\") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/* 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 * Polyval.\n * @param c - Array of Number.\n * @param x - Number.\n * @returns Number.\n */\nfunction polyval(c, x) {\n    let p = 0;\n    for (const coef of c) {\n        p = p * x + coef;\n    }\n    return p;\n}\n/**\n * Calculates a rational approximation.\n * @private\n * @param x - Number.\n * @param v - Number.\n * @param P - Array of polynomial coefficients.\n * @param Q - Array of polynomial coefficients.\n * @param Y - Number.\n * @returns Rational approximation.\n */\nfunction calc(x, v, P, Q, Y) {\n    const s = x - v;\n    const r = polyval(P, s) / polyval(Q, s);\n    return Y * x + r * x;\n}\n/**\n * Evaluates the complementary inverse error function for an input value.\n * @private\n * @param x - Input value.\n * @returns Evaluated complementary inverse error function.\n */\nexport default function erfcinv(x) {\n    let sign = false;\n    let val;\n    let q;\n    let g;\n    let r;\n    // [1] Special cases...\n    // NaN:\n    if (Number.isNaN(x)) {\n        return Number.NaN;\n    }\n    // x not on the interval: [0,2]\n    if (x < 0 || x > 2) {\n        throw new RangeError(`erfcinv()::invalid input argument. Value must be on the interval [0,2]. Value: \\`${x}\\`.`);\n    }\n    if (x === 0) {\n        return Number.POSITIVE_INFINITY;\n    }\n    if (x === 2) {\n        return Number.NEGATIVE_INFINITY;\n    }\n    if (x === 1) {\n        return 0;\n    }\n    // [2] Get the sign and make use of `erfc` reflection formula: `erfc(-z)=2 - erfc(z)`...\n    if (x > 1) {\n        q = 2 - x;\n        x = 1 - q;\n        sign = true;\n    }\n    else {\n        q = x;\n        x = 1 - x;\n    }\n    // [3] |x| <= 0.5\n    if (x <= 0.5) {\n        g = x * (x + 10);\n        r = polyval(P1, x) / polyval(Q1, x);\n        val = g * Y1 + g * r;\n        return sign ? -val : val;\n    }\n    // [4] 1-|x| >= 0.25\n    if (q >= 0.25) {\n        g = Math.sqrt(-2 * Math.log(q));\n        q = q - 0.25;\n        r = polyval(P2, q) / polyval(Q2, q);\n        val = g / (Y2 + r);\n        return sign ? -val : val;\n    }\n    q = Math.sqrt(-Math.log(q));\n    // [5] q < 3\n    if (q < 3) {\n        return calc(q, 1.125, P3, Q3, Y3);\n    }\n    // [6] q < 6\n    if (q < 6) {\n        return calc(q, 3, P4, Q4, Y4);\n    }\n    // Note that the smallest number in JavaScript is 5e-324. Math.sqrt( -Math.log( 5e-324 ) ) ~27.2844\n    return calc(q, 6, P5, Q5, Y5);\n    // Note that in the boost library, they are able to go to much smaller values, as 128 bit long doubles support ~1e-5000; something which JavaScript does not natively support.\n}\n//# sourceMappingURL=erfcinv.js.map","import erfcinv from \"./erfcinv.js\";\n/**\n * Applies a simple normalization inverse transformation to the input data.\n * @param data - The input array of numbers to be transformed.\n * @param options - Optional parameters for the transformation.\n * @returns A new Float64Array containing the transformed data.\n */\nexport function simpleNormInv(data, options = {}) {\n    const { magnitudeMode = false } = options;\n    const result = new Float64Array(data.length);\n    if (magnitudeMode) {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -Math.sqrt(-2 * Math.log(1 - data[i]));\n        }\n    }\n    else {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -1 * Math.SQRT2 * erfcinv(2 * data[i]);\n        }\n    }\n    return result;\n}\n/**\n * Convenience wrapper for single number processing by simpleNormInv function.\n * @param data - The number to be normalized.\n * @param options - The options for the normalization process.\n * @returns The normalized number.\n */\nexport function simpleNormInvNumber(data, options = {}) {\n    return simpleNormInv([data], options)[0];\n}\n//# sourceMappingURL=simpleNormInv.js.map","import { isAnyArray } from 'is-any-array';\nimport { createFromToArray } from \"../utils/index.js\";\nimport { simpleNormInvNumber } from \"./utils/simpleNormInv.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, cutOff, refine = true, magnitudeMode = false, scaleFactor = 1, factorStd = 5, fixOffset = true, } = options;\n    const input = prepareData(array, { scaleFactor, mask });\n    if (fixOffset && !magnitudeMode) {\n        const medianIndex = Math.floor(input.length / 2);\n        const median = input.length % 2 === 0\n            ? 0.5 * (input[medianIndex - 1] + input[medianIndex])\n            : input[medianIndex];\n        for (let i = 0; i < input.length; i++) {\n            input[i] -= median;\n        }\n    }\n    const firstNegativeValueIndex = input.at(-1) >= 0\n        ? input.length\n        : input.findIndex((e) => e < 0);\n    let lastPositiveValueIndex = firstNegativeValueIndex - 1;\n    for (let i = lastPositiveValueIndex; i >= 0; i--) {\n        if (input[i] > 0) {\n            lastPositiveValueIndex = i;\n            break;\n        }\n    }\n    const signPositive = input.slice(0, lastPositiveValueIndex + 1);\n    const signNegative = input.slice(firstNegativeValueIndex);\n    const cutOffDist = cutOff || determineCutOff(signPositive, { magnitudeMode });\n    const pIndex = Math.floor(signPositive.length * cutOffDist);\n    const initialNoiseLevelPositive = signPositive[pIndex];\n    const skyPoint = signPositive[0];\n    let initialNoiseLevelNegative;\n    if (signNegative.length > 0) {\n        const nIndex = Math.floor(signNegative.length * (1 - cutOffDist));\n        initialNoiseLevelNegative = -1 * signNegative[nIndex];\n    }\n    else {\n        initialNoiseLevelNegative = 0;\n    }\n    let noiseLevelPositive = initialNoiseLevelPositive;\n    let noiseLevelNegative = initialNoiseLevelNegative;\n    let cloneSignPositive = signPositive.slice();\n    let cloneSignNegative = signNegative.slice();\n    let cutOffSignalsIndexPlus = 0;\n    let cutOffSignalsIndexNeg = 2;\n    if (refine) {\n        let cutOffSignals = noiseLevelPositive * factorStd;\n        cutOffSignalsIndexPlus = signPositive.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexPlus > -1) {\n            cloneSignPositive = signPositive.slice(cutOffSignalsIndexPlus);\n            noiseLevelPositive =\n                cloneSignPositive[Math.floor(cloneSignPositive.length * cutOffDist)];\n        }\n        cutOffSignals = noiseLevelNegative * factorStd;\n        cutOffSignalsIndexNeg = signNegative.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexNeg > -1) {\n            cloneSignNegative = signNegative.slice(cutOffSignalsIndexNeg);\n            noiseLevelNegative =\n                cloneSignPositive[Math.floor(cloneSignNegative.length * (1 - cutOffDist))];\n        }\n    }\n    const correctionFactor = -simpleNormInvNumber(cutOffDist / 2, {\n        magnitudeMode,\n    });\n    let effectiveCutOffDist, refinedCorrectionFactor;\n    if (refine && cutOffSignalsIndexPlus > -1) {\n        effectiveCutOffDist =\n            (cutOffDist * cloneSignPositive.length + cutOffSignalsIndexPlus) /\n                (cloneSignPositive.length + cutOffSignalsIndexPlus);\n        refinedCorrectionFactor =\n            -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n        noiseLevelPositive /= refinedCorrectionFactor;\n        if (cutOffSignalsIndexNeg > -1) {\n            effectiveCutOffDist =\n                (cutOffDist * cloneSignNegative.length + cutOffSignalsIndexNeg) /\n                    (cloneSignNegative.length + cutOffSignalsIndexNeg);\n            refinedCorrectionFactor =\n                -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n            if (noiseLevelNegative !== 0) {\n                noiseLevelNegative /= refinedCorrectionFactor;\n            }\n        }\n    }\n    else {\n        noiseLevelPositive /= correctionFactor;\n        noiseLevelNegative /= correctionFactor;\n    }\n    return {\n        positive: noiseLevelPositive,\n        negative: noiseLevelNegative,\n        snr: skyPoint / noiseLevelPositive,\n        sanplot: generateSanPlot(input, {\n            fromTo: {\n                positive: { from: 0, to: lastPositiveValueIndex },\n                negative: { from: firstNegativeValueIndex, to: input.length },\n            },\n        }),\n    };\n}\n/**\n * Determines the optimal cut-off point for a given array of positive numbers.\n * @param signPositive - An array of positive numbers.\n * @param options - Optional parameters to configure the cut-off determination.\n * @param options.magnitudeMode - If true, uses magnitude mode for normalization. Default is false.\n * @param options.considerList - An object specifying the range and step for consideration.\n * @param options.considerList.from - The starting point of the range. Default is 0.5.\n * @param options.considerList.step - The step size for the range. Default is 0.1.\n * @param options.considerList.to - The ending point of the range. Default is 0.9.\n * @returns The optimal cut-off point as a number.\n */\nfunction determineCutOff(signPositive, options = {}) {\n    const { magnitudeMode = false, considerList = { from: 0.5, step: 0.1, to: 0.9 }, } = options;\n    //generate a list of values for\n    const cutOff = [];\n    const indexMax = signPositive.length - 1;\n    for (let i = 0.01; i <= 0.99; i += 0.01) {\n        const index = Math.round(indexMax * i);\n        const value = -signPositive[index] / simpleNormInvNumber(i / 2, { magnitudeMode });\n        cutOff.push([i, value]);\n    }\n    let minKi = Number.MAX_SAFE_INTEGER;\n    const { from, to, step } = considerList;\n    const delta = step / 2;\n    let whereToCutStat = 0.5;\n    for (let i = from; i <= to; i += step) {\n        const floor = i - delta;\n        const top = i + delta;\n        const elementsOfCutOff = cutOff.filter((e) => e[0] < top && e[0] > floor);\n        let averageValue = 0;\n        for (const element of elementsOfCutOff) {\n            averageValue += Math.abs(element[1]);\n        }\n        let kiSqrt = 0;\n        for (const element of elementsOfCutOff) {\n            kiSqrt += (element[1] - averageValue) ** 2;\n        }\n        if (kiSqrt < minKi) {\n            minKi = kiSqrt;\n            whereToCutStat = i;\n        }\n    }\n    return whereToCutStat;\n}\n/**\n * Generates a SAN plot from the given array based on the specified options.\n * @param array - The input array of numbers to be processed.\n * @param options - An optional object containing configuration options.\n * @param options.logBaseY - The logarithmic base for the Y-axis. Defaults to 2.\n * @param options.fromTo - An object specifying the range for each key. Each key maps to an object with `from` and `to` properties.\n * @returns An object where each key maps to a DataXY object containing the processed data.\n */\nfunction generateSanPlot(array, options = {}) {\n    const { fromTo, logBaseY = 2 } = options;\n    const sanplot = {};\n    for (const key in fromTo) {\n        const { from, to } = fromTo[key];\n        sanplot[key] =\n            from !== to\n                ? scale(array.slice(from, to), {\n                    logBaseY,\n                })\n                : { x: [], y: [] };\n        if (key === 'negative') {\n            sanplot[key].y.reverse();\n        }\n    }\n    return sanplot;\n}\n/**\n * Scales the input array based on the provided options.\n * @param array - The input array to be scaled.\n * @param options - An optional object containing scaling options.\n * @param options.logBaseY - If provided, the array values will be scaled using the logarithm of this base.\n * @returns An object containing the scaled x and y arrays.\n */\nfunction scale(array, options = {}) {\n    const { log10, abs } = Math;\n    const { logBaseY } = options;\n    if (logBaseY) {\n        array = array.slice(0);\n        const logOfBase = log10(logBaseY);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = log10(abs(array[i])) / logOfBase;\n        }\n    }\n    const xAxis = createFromToArray({\n        from: 0,\n        to: array.length - 1,\n        length: array.length,\n    });\n    return { x: xAxis, y: array };\n}\n/**\n * Prepares and processes the input data array based on the provided options.\n * @param array - The input array of numbers to be processed.\n * @param options - An object containing the following properties:\n *   - scaleFactor: A number by which to scale each element of the array.\n *   - mask: An optional array of the same length as the input array, where\n *           elements corresponding to `true` values will be excluded from processing.\n * @param options.scaleFactor\n * @param options.mask\n * @returns A new Float64Array containing the processed data, scaled by the\n *          scaleFactor and sorted in descending order.\n */\nfunction prepareData(array, options) {\n    const { scaleFactor, mask } = options;\n    const input = xEnsureFloat64(isAnyArray(mask) && mask.length === array.length\n        ? array.filter((_e, i) => !mask[i])\n        : array);\n    if (scaleFactor > 1) {\n        for (let i = 0; i < input.length; i++) {\n            input[i] *= scaleFactor;\n        }\n    }\n    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\n * @returns noise level corresponding to one standard deviation\n */\nexport function xNoiseStandardDeviation(array) {\n    const { mad, median } = xMedianAbsoluteDeviation(array);\n    return { sd: mad / 0.6744897501960817, mad, median };\n}\n//# sourceMappingURL=xNoiseStandardDeviation.js.map","import { 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\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\";\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 XSum value on the specified range.\n */\nexport function xSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xSum.js.map","import { getOutputArray } from \"./getOutputArray.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 (const value of input) {\n        sumValue += Math.abs(value);\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xNormed.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 { 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 { xCheck } from \"./xCheck.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * This function pads an array\n *s\n * @param array - the array that will be padded\n * @param options - options\n */\nexport function xPadding(array, options = {}) {\n    const { size = 0, value = 0, algorithm } = options;\n    xCheck(array);\n    if (!algorithm) {\n        return xEnsureFloat64(array);\n    }\n    const result = new Float64Array(array.length + size * 2);\n    for (let i = 0; i < array.length; i++) {\n        result[i + size] = array[i];\n    }\n    const fromEnd = size + array.length;\n    const toEnd = 2 * size + array.length;\n    switch (algorithm) {\n        case 'value':\n            for (let i = 0; i < size; i++) {\n                result[i] = value;\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = value;\n            }\n            break;\n        case 'duplicate':\n            for (let i = 0; i < size; i++) {\n                result[i] = array[0];\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = array.at(-1);\n            }\n            break;\n        case 'circular':\n            for (let i = 0; i < size; i++) {\n                result[i] =\n                    array[(array.length - (size % array.length) + i) % array.length];\n            }\n            for (let i = 0; i < size; i++) {\n                result[i + fromEnd] = array[i % array.length];\n            }\n            break;\n        default:\n            throw new Error(`unknown algorithm ${String(algorithm)}`);\n    }\n    return result;\n}\n//# sourceMappingURL=xPadding.js.map","import { createNumberArray } from \"../utils/index.js\";\n/**\n * Create a new matrix based on the size of the current one or by using specific dimensions.\n * @param options\n */\nexport function matrixCreateEmpty(options) {\n    const { matrix, nbRows = matrix?.length || 1, nbColumns = matrix?.[0].length || 1, ArrayConstructor = Float64Array, } = options;\n    const newMatrix = [];\n    for (let row = 0; row < nbRows; row++) {\n        newMatrix.push(createNumberArray(ArrayConstructor, nbColumns));\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCreateEmpty.js.map","import { xCorrelation } from \"../x/index.js\";\nexport function matrixAutoCorrelation(matrix, index = 0) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    if (nbRows < 2) {\n        throw new Error('can not calculate info if matrix contains less than 2 rows');\n    }\n    const targetArray = new Float64Array(nbRows);\n    const sourceArray = new Float64Array(nbRows);\n    const result = new Float64Array(nbColumns);\n    for (let j = 0; j < nbRows; j++) {\n        targetArray[j] = matrix[j][index];\n    }\n    for (let i = 0; i < nbColumns; i++) {\n        for (let j = 0; j < nbRows; j++) {\n            sourceArray[j] = matrix[j][i];\n        }\n        result[i] = xCorrelation(targetArray, sourceArray);\n    }\n    return result;\n}\n//# sourceMappingURL=matrixAutoCorrelation.js.map","export function matrixBoxPlot(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    if (nbRows < 5) {\n        throw new Error('can not calculate info if matrix contains less than 5 rows');\n    }\n    const info = {\n        q1: new Float64Array(nbColumns),\n        median: new Float64Array(nbColumns),\n        q3: new Float64Array(nbColumns),\n        min: Float64Array.from(matrix[0]),\n        max: Float64Array.from(matrix.at(-1)),\n    };\n    const columnArray = new Float64Array(matrix.length);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            columnArray[row] = matrix[row][column];\n        }\n        let q1max = 0;\n        let q3min = 0;\n        if (nbRows % 2 === 1) {\n            // odd\n            const middle = (nbRows - 1) / 2;\n            info.median[column] = columnArray[middle];\n            q1max = middle - 1;\n            q3min = middle + 1;\n        }\n        else {\n            // even\n            q3min = nbRows / 2;\n            q1max = q3min - 1;\n            info.median[column] = (columnArray[q1max] + columnArray[q3min]) / 2;\n        }\n        if (q1max % 2 === 0) {\n            info.q1[column] = columnArray[q1max / 2];\n            info.q3[column] = columnArray[(nbRows + q3min - 1) / 2];\n        }\n        else {\n            info.q1[column] =\n                (columnArray[(q1max + 1) / 2] + columnArray[(q1max - 1) / 2]) / 2;\n            const middleOver = (columnArray.length + q3min) / 2;\n            info.q3[column] =\n                (columnArray[middleOver] + columnArray[middleOver - 1]) / 2;\n        }\n    }\n    return info;\n}\n//# sourceMappingURL=matrixBoxPlot.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Center mean of matrix columns.\n * @param matrix - matrix [rows][cols]\n */\nexport function matrixCenterZMean(matrix) {\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows });\n    for (let column = 0; column < nbColumns; column++) {\n        let mean = 0;\n        for (let row = 0; row < nbRows; row++) {\n            mean += matrix[row][column];\n        }\n        mean /= nbRows;\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] = matrix[row][column] - mean;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCenterZMean.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","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix must contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('all rows must has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","import { Matrix } from 'ml-matrix';\nimport { xMedian } from \"../x/index.js\";\n/**\n * Performs a Probabilistic quotient normalization (PQN) over the dataset to account dilution based in median spectrum.\n * Dieterle, F., Ross, A., Schlotterbeck, G., & Senn, H. (2006). Probabilistic quotient normalization as robust method to account for dilution of complex biological mixtures. Application in 1H NMR metabonomics. Analytical chemistry, 78(13), 4281-4290.\n * DOI: 10.1021/ac051632c\n * @param matrix - matrix [rows][cols].\n * @param options - options\n * @returns - {data: Normalized dataset, medianOfQuotients: The median of quotients of each variables}\n */\nexport function matrixPQN(matrix, options = {}) {\n    const { max = 100 } = options;\n    const matrixB = new Matrix(matrix);\n    for (let i = 0; i < matrixB.rows; i++) {\n        const normalizationFactor = matrixB.getRowVector(i).norm('frobenius') / max;\n        const row = matrixB.getRowVector(i).div(normalizationFactor);\n        matrixB.setRow(i, row);\n    }\n    const referenceSpectrum = [];\n    for (let i = 0; i < matrixB.columns; i++) {\n        const currentVariable = matrixB.getColumn(i);\n        referenceSpectrum.push(xMedian(currentVariable));\n    }\n    const medianOfQuotients = [];\n    for (let i = 0; i < matrixB.columns; i++) {\n        const quotients = matrixB.getColumnVector(i).div(referenceSpectrum[i]);\n        medianOfQuotients.push(xMedian(quotients.getColumn(0)));\n    }\n    for (let i = 0; i < matrixB.rows; i++) {\n        matrixB.mulRow(i, 1 / medianOfQuotients[i]);\n    }\n    return {\n        data: matrixB.to2DArray(),\n        medianOfQuotients,\n    };\n}\n//# sourceMappingURL=matrixPQN.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\nimport { matrixMinMaxZ } from \"./matrixMinMaxZ.js\";\n/**\n * Rescale a matrix between min and max values.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZRescale(matrix, options = {}) {\n    const { min = 0, max = 1, ArrayConstructor } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows, ArrayConstructor });\n    const { min: currentMin, max: currentMax } = matrixMinMaxZ(matrix);\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] =\n                (matrix[row][column] - currentMin) * factor + min;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZRescale.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Verify that `data` is an object of x,y arrays.\n * Throws an error if it's not.\n * @param data\n * @param options\n * @param options.minLength\n */\nexport function xyCheck(data, options = {}) {\n    const { minLength } = options;\n    if (data === null ||\n        typeof data !== 'object' ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.x) ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.y)) {\n        throw new Error('data must be an object of x and y arrays');\n    }\n    // @ts-expect-error Typechecking\n    if (data.x.length !== data.y.length) {\n        throw new Error('the x and y arrays must have the same length');\n    }\n    // @ts-expect-error Typechecking\n    if (minLength && data.x.length < minLength) {\n        throw new Error(`data.x must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyCheck.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the max y value in a range and return a {x,y} point\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n */\nexport function xyMaxYPoint(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1) {\n        return { x: x[0], y: y[0], index: 0 };\n    }\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let current = { x: x[fromIndex], y: y[fromIndex], index: fromIndex };\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] > current.y)\n            current = { x: x[i], y: y[i], index: i };\n    }\n    return current;\n}\n//# sourceMappingURL=xyMaxYPoint.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 */\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","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param x0\n * @param x1\n * @param slope\n * @param intercept\n * @returns integral value.\n */\nexport default function integral(\n/** first coordinate of point */\nx0, \n/** second coordinate of point */\nx1, \n/** slope of the line */\nslope, \n/** intercept of the line on the y axis */\nintercept) {\n    return (0.5 * slope * x1 * x1 +\n        intercept * x1 -\n        (0.5 * slope * x0 * x0 + intercept * x0));\n}\n//# sourceMappingURL=integral.js.map","import integral from \"./integral.js\";\n/**\n * Function that retrieves the getEquallySpacedData with the variant \"smooth\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    const initialOriginalStep = x[1] - x[0];\n    const lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n    // Init main variables\n    let min = from - halfStep;\n    let max = from + halfStep;\n    let previousX = Number.MIN_SAFE_INTEGER;\n    let previousY = 0;\n    let nextX = x[0] - initialOriginalStep;\n    let nextY = 0;\n    let currentValue = 0;\n    let slope = 0;\n    let intercept = 0;\n    let sumAtMin = 0;\n    let sumAtMax = 0;\n    let i = 0; // index of input\n    let j = 0; // index of output\n    let add = 0;\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        if (previousX <= min && min <= nextX) {\n            add = integral(0, min - previousX, slope, previousY);\n            sumAtMin = currentValue + add;\n        }\n        while (nextX - max >= 0) {\n            // no overlap with original point, just consume current value\n            add = integral(0, max - previousX, slope, previousY);\n            sumAtMax = currentValue + add;\n            output[j++] = (sumAtMax - sumAtMin) / step;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            sumAtMin = sumAtMax;\n        }\n        currentValue += integral(previousX, nextX, slope, intercept);\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else if (i === xLength) {\n            nextX += lastOriginalStep;\n            nextY = 0;\n        }\n        slope = getSlope(previousX, previousY, nextX, nextY);\n        intercept = -slope * previousX + previousY;\n    }\n    return output;\n}\nfunction getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n}\n//# sourceMappingURL=equallySpacedSmooth.js.map","import { createFromToArray } from \"../utils/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 * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in an array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in an array.\n *\n * If exclusions zone are present, zones are ignored !\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns new object with x / y array with the equally spaced data.\n */\nexport function xyEquallySpaced(data, options = {}) {\n    const { x, y } = data;\n    const xLength = x.length;\n    const { from = x[0], to = x[xLength - 1], variant = 'smooth', numberOfPoints = 100, exclusions = [], zones = [{ from, to }], } = options;\n    if (from > to) {\n        throw new RangeError('from should be larger than to');\n    }\n    xyCheck(data);\n    if (numberOfPoints < 2) {\n        throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n    }\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    const zonesWithPointsRes = zonesWithPoints(normalizedZones, numberOfPoints, {\n        from,\n        to,\n    }).filter((zone) => zone.numberOfPoints);\n    let xResult = [];\n    let yResult = [];\n    for (const zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        const zoneResult = processZone(Array.from(x), Array.from(y), zone.from, zone.to, zone.numberOfPoints, variant);\n        xResult = xResult.concat(zoneResult.x);\n        yResult = yResult.concat(zoneResult.y);\n    }\n    return { x: xResult, y: yResult };\n}\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n    if (numberOfPoints < 1) {\n        throw new RangeError('the number of points must be at least 1');\n    }\n    const output = variant === 'slot'\n        ? Array.from(equallySpacedSlot(x, y, from, to, numberOfPoints))\n        : Array.from(equallySpacedSmooth(x, y, from, to, numberOfPoints));\n    return {\n        x: Array.from(createFromToArray({\n            from,\n            to,\n            length: numberOfPoints,\n        })),\n        y: output,\n    };\n}\n//# sourceMappingURL=xyEquallySpaced.js.map","import { zonesNormalize } from \"./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\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    if (xLength < 2) {\n        return Float64Array.from(x);\n    }\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    const lastStep = x.at(-1) - x.at(-2);\n    const start = from - halfStep;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    // Init main variables\n    let min = start;\n    let max = start + step;\n    let previousX = -Number.MAX_VALUE;\n    let previousY = 0;\n    let nextX = x[0];\n    let nextY = y[0];\n    let frontOutsideSpectra = 0;\n    let backOutsideSpectra = true;\n    let currentValue = 0;\n    // for slot algorithm\n    let currentPoints = 0;\n    let i = 1; // index of input\n    let j = 0; // index of output\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        while (previousX - max > 0) {\n            // no overlap with original point, just consume current value\n            if (backOutsideSpectra) {\n                currentPoints++;\n                backOutsideSpectra = false;\n            }\n            output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n            j++;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            currentValue = 0;\n            currentPoints = 0;\n        }\n        if (previousX > min) {\n            currentValue += previousY;\n            currentPoints++;\n        }\n        if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n            currentPoints--;\n        }\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else {\n            nextX += lastStep;\n            nextY = 0;\n            frontOutsideSpectra++;\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=equallySpacedSlot.js.map","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    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","/**\n * Order object of array, x has to be monotone. Ensure x is growing\n * @param data - Object of kind {x:[], y:[]}.\n */\nexport function xyGrowingX(data) {\n    const { x, y } = data;\n    if (x.length !== y.length) {\n        throw new TypeError('length of x and y must be identical');\n    }\n    if (x.length < 2 || x[0] < x.at(-1))\n        return data;\n    return {\n        x: x.toReversed(),\n        y: y.toReversed(),\n    };\n}\n//# sourceMappingURL=xyGrowingX.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Calculate integration\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - xyIntegration value on the specified range\n */\nexport function xyIntegration(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        return 0;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let currentxyIntegration = 0;\n    for (let i = fromIndex; i < toIndex; i++) {\n        currentxyIntegration += ((x[i + 1] - x[i]) * (y[i + 1] + y[i])) / 2;\n    }\n    return currentxyIntegration;\n}\n//# sourceMappingURL=xyIntegration.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the min y value in a range and return a {x,y} point\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n */\nexport function xyMinYPoint(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        return { x: x[0], y: y[0], index: 0 };\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let current = {\n        x: x[fromIndex],\n        y: y[fromIndex],\n        index: fromIndex,\n    };\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] < current.y)\n            current = { x: x[i], y: y[i], index: i };\n    }\n    return current;\n}\n//# sourceMappingURL=xyMinYPoint.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 * Average.\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 * Sum.\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","import { xIsMonotonic } from \"../x/index.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 */\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 xyObject = Array.from(x, (val, index) => ({\n        x: val,\n        y: y[index],\n    }));\n    xyObject.sort((a, b) => a.x - b.x);\n    const response = {\n        x: new Float64Array(x.length),\n        y: new Float64Array(y.length),\n    };\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","const { min, max } = Math;\n\nexport default (x, low = 0, high = 1) => {\n    return min(max(low, x), high);\n};\n","import limit from './limit.js';\n\nexport default (rgb) => {\n    rgb._clipped = false;\n    rgb._unclipped = rgb.slice(0);\n    for (let i = 0; i <= 3; i++) {\n        if (i < 3) {\n            if (rgb[i] < 0 || rgb[i] > 255) rgb._clipped = true;\n            rgb[i] = limit(rgb[i], 0, 255);\n        } else if (i === 3) {\n            rgb[i] = limit(rgb[i], 0, 1);\n        }\n    }\n    return rgb;\n};\n","// ported from jQuery's $.type\nconst classToType = {};\nfor (let name of [\n    'Boolean',\n    'Number',\n    'String',\n    'Function',\n    'Array',\n    'Date',\n    'RegExp',\n    'Undefined',\n    'Null'\n]) {\n    classToType[`[object ${name}]`] = name.toLowerCase();\n}\nexport default function (obj) {\n    return classToType[Object.prototype.toString.call(obj)] || 'object';\n}\n","import type from './type.js';\n\nexport default (args, keyOrder = null) => {\n    // if called with more than 3 arguments, we return the arguments\n    if (args.length >= 3) return Array.prototype.slice.call(args);\n    // with less than 3 args we check if first arg is object\n    // and use the keyOrder string to extract and sort properties\n    if (type(args[0]) == 'object' && keyOrder) {\n        return keyOrder\n            .split('')\n            .filter((k) => args[0][k] !== undefined)\n            .map((k) => args[0][k]);\n    }\n    // otherwise we just return the first argument\n    // (which we suppose is an array of args)\n    return args[0].slice(0);\n};\n","import type from './type.js';\n\nexport default (args) => {\n    if (args.length < 2) return null;\n    const l = args.length - 1;\n    if (type(args[l]) == 'string') return args[l].toLowerCase();\n    return null;\n};\n","const { PI, min, max } = Math;\n\nconst rnd2 = (a) => Math.round(a * 100) / 100;\nconst rnd3 = (a) => Math.round(a * 100) / 100;\n\nexport { default as clip_rgb } from './clip_rgb.js';\nexport { default as limit } from './limit.js';\nexport { default as type } from './type.js';\nexport { default as unpack } from './unpack.js';\nexport { default as last } from './last.js';\n\nconst TWOPI = PI * 2;\nconst PITHIRD = PI / 3;\nconst DEG2RAD = PI / 180;\nconst RAD2DEG = 180 / PI;\n\n/**\n * Reverse the first three elements of an array\n *\n * @param {any[]} arr\n * @returns {any[]}\n */\nfunction reverse3(arr) {\n    return [...arr.slice(0, 3).reverse(), ...arr.slice(3)];\n}\n\nexport { PI, TWOPI, PITHIRD, DEG2RAD, RAD2DEG, min, max, rnd2, rnd3, reverse3 };\n","export default {\n    format: {},\n    autodetect: []\n};\n","import { last, clip_rgb, type } from './utils/index.js';\nimport _input from './io/input.js';\n\nclass Color {\n    constructor(...args) {\n        const me = this;\n        if (\n            type(args[0]) === 'object' &&\n            args[0].constructor &&\n            args[0].constructor === this.constructor\n        ) {\n            // the argument is already a Color instance\n            return args[0];\n        }\n        // last argument could be the mode\n        let mode = last(args);\n        let autodetect = false;\n        if (!mode) {\n            autodetect = true;\n\n            if (!_input.sorted) {\n                _input.autodetect = _input.autodetect.sort((a, b) => b.p - a.p);\n                _input.sorted = true;\n            }\n\n            // auto-detect format\n            for (let chk of _input.autodetect) {\n                mode = chk.test(...args);\n                if (mode) break;\n            }\n        }\n        if (_input.format[mode]) {\n            const rgb = _input.format[mode].apply(\n                null,\n                autodetect ? args : args.slice(0, -1)\n            );\n            me._rgb = clip_rgb(rgb);\n        } else {\n            throw new Error('unknown format: ' + args);\n        }\n        // add alpha channel\n        if (me._rgb.length === 3) me._rgb.push(1);\n    }\n    toString() {\n        if (type(this.hex) == 'function') return this.hex();\n        return `[${this._rgb.join(',')}]`;\n    }\n}\nexport default Color;\n","// this gets updated automatically\nexport const version = '3.2.0';\n","import Color from './Color.js';\nimport { version } from './version.js';\n\nconst chroma = (...args) => {\n    return new Color(...args);\n};\n\nchroma.version = version;\n\nexport default chroma;\n","/**\n\tX11 color names\n\n\thttp://www.w3.org/TR/css3-color/#svg-color\n*/\n\nconst w3cx11 = {\n    aliceblue: '#f0f8ff',\n    antiquewhite: '#faebd7',\n    aqua: '#00ffff',\n    aquamarine: '#7fffd4',\n    azure: '#f0ffff',\n    beige: '#f5f5dc',\n    bisque: '#ffe4c4',\n    black: '#000000',\n    blanchedalmond: '#ffebcd',\n    blue: '#0000ff',\n    blueviolet: '#8a2be2',\n    brown: '#a52a2a',\n    burlywood: '#deb887',\n    cadetblue: '#5f9ea0',\n    chartreuse: '#7fff00',\n    chocolate: '#d2691e',\n    coral: '#ff7f50',\n    cornflowerblue: '#6495ed',\n    cornsilk: '#fff8dc',\n    crimson: '#dc143c',\n    cyan: '#00ffff',\n    darkblue: '#00008b',\n    darkcyan: '#008b8b',\n    darkgoldenrod: '#b8860b',\n    darkgray: '#a9a9a9',\n    darkgreen: '#006400',\n    darkgrey: '#a9a9a9',\n    darkkhaki: '#bdb76b',\n    darkmagenta: '#8b008b',\n    darkolivegreen: '#556b2f',\n    darkorange: '#ff8c00',\n    darkorchid: '#9932cc',\n    darkred: '#8b0000',\n    darksalmon: '#e9967a',\n    darkseagreen: '#8fbc8f',\n    darkslateblue: '#483d8b',\n    darkslategray: '#2f4f4f',\n    darkslategrey: '#2f4f4f',\n    darkturquoise: '#00ced1',\n    darkviolet: '#9400d3',\n    deeppink: '#ff1493',\n    deepskyblue: '#00bfff',\n    dimgray: '#696969',\n    dimgrey: '#696969',\n    dodgerblue: '#1e90ff',\n    firebrick: '#b22222',\n    floralwhite: '#fffaf0',\n    forestgreen: '#228b22',\n    fuchsia: '#ff00ff',\n    gainsboro: '#dcdcdc',\n    ghostwhite: '#f8f8ff',\n    gold: '#ffd700',\n    goldenrod: '#daa520',\n    gray: '#808080',\n    green: '#008000',\n    greenyellow: '#adff2f',\n    grey: '#808080',\n    honeydew: '#f0fff0',\n    hotpink: '#ff69b4',\n    indianred: '#cd5c5c',\n    indigo: '#4b0082',\n    ivory: '#fffff0',\n    khaki: '#f0e68c',\n    laserlemon: '#ffff54',\n    lavender: '#e6e6fa',\n    lavenderblush: '#fff0f5',\n    lawngreen: '#7cfc00',\n    lemonchiffon: '#fffacd',\n    lightblue: '#add8e6',\n    lightcoral: '#f08080',\n    lightcyan: '#e0ffff',\n    lightgoldenrod: '#fafad2',\n    lightgoldenrodyellow: '#fafad2',\n    lightgray: '#d3d3d3',\n    lightgreen: '#90ee90',\n    lightgrey: '#d3d3d3',\n    lightpink: '#ffb6c1',\n    lightsalmon: '#ffa07a',\n    lightseagreen: '#20b2aa',\n    lightskyblue: '#87cefa',\n    lightslategray: '#778899',\n    lightslategrey: '#778899',\n    lightsteelblue: '#b0c4de',\n    lightyellow: '#ffffe0',\n    lime: '#00ff00',\n    limegreen: '#32cd32',\n    linen: '#faf0e6',\n    magenta: '#ff00ff',\n    maroon: '#800000',\n    maroon2: '#7f0000',\n    maroon3: '#b03060',\n    mediumaquamarine: '#66cdaa',\n    mediumblue: '#0000cd',\n    mediumorchid: '#ba55d3',\n    mediumpurple: '#9370db',\n    mediumseagreen: '#3cb371',\n    mediumslateblue: '#7b68ee',\n    mediumspringgreen: '#00fa9a',\n    mediumturquoise: '#48d1cc',\n    mediumvioletred: '#c71585',\n    midnightblue: '#191970',\n    mintcream: '#f5fffa',\n    mistyrose: '#ffe4e1',\n    moccasin: '#ffe4b5',\n    navajowhite: '#ffdead',\n    navy: '#000080',\n    oldlace: '#fdf5e6',\n    olive: '#808000',\n    olivedrab: '#6b8e23',\n    orange: '#ffa500',\n    orangered: '#ff4500',\n    orchid: '#da70d6',\n    palegoldenrod: '#eee8aa',\n    palegreen: '#98fb98',\n    paleturquoise: '#afeeee',\n    palevioletred: '#db7093',\n    papayawhip: '#ffefd5',\n    peachpuff: '#ffdab9',\n    peru: '#cd853f',\n    pink: '#ffc0cb',\n    plum: '#dda0dd',\n    powderblue: '#b0e0e6',\n    purple: '#800080',\n    purple2: '#7f007f',\n    purple3: '#a020f0',\n    rebeccapurple: '#663399',\n    red: '#ff0000',\n    rosybrown: '#bc8f8f',\n    royalblue: '#4169e1',\n    saddlebrown: '#8b4513',\n    salmon: '#fa8072',\n    sandybrown: '#f4a460',\n    seagreen: '#2e8b57',\n    seashell: '#fff5ee',\n    sienna: '#a0522d',\n    silver: '#c0c0c0',\n    skyblue: '#87ceeb',\n    slateblue: '#6a5acd',\n    slategray: '#708090',\n    slategrey: '#708090',\n    snow: '#fffafa',\n    springgreen: '#00ff7f',\n    steelblue: '#4682b4',\n    tan: '#d2b48c',\n    teal: '#008080',\n    thistle: '#d8bfd8',\n    tomato: '#ff6347',\n    turquoise: '#40e0d0',\n    violet: '#ee82ee',\n    wheat: '#f5deb3',\n    white: '#ffffff',\n    whitesmoke: '#f5f5f5',\n    yellow: '#ffff00',\n    yellowgreen: '#9acd32'\n};\n\nexport default w3cx11;\n","const RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\nconst RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;\n\nconst hex2rgb = (hex) => {\n    if (hex.match(RE_HEX)) {\n        // remove optional leading #\n        if (hex.length === 4 || hex.length === 7) {\n            hex = hex.substr(1);\n        }\n        // expand short-notation to full six-digit\n        if (hex.length === 3) {\n            hex = hex.split('');\n            hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n        }\n        const u = parseInt(hex, 16);\n        const r = u >> 16;\n        const g = (u >> 8) & 0xff;\n        const b = u & 0xff;\n        return [r, g, b, 1];\n    }\n\n    // match rgba hex format, eg #FF000077\n    if (hex.match(RE_HEXA)) {\n        if (hex.length === 5 || hex.length === 9) {\n            // remove optional leading #\n            hex = hex.substr(1);\n        }\n        // expand short-notation to full eight-digit\n        if (hex.length === 4) {\n            hex = hex.split('');\n            hex =\n                hex[0] +\n                hex[0] +\n                hex[1] +\n                hex[1] +\n                hex[2] +\n                hex[2] +\n                hex[3] +\n                hex[3];\n        }\n        const u = parseInt(hex, 16);\n        const r = (u >> 24) & 0xff;\n        const g = (u >> 16) & 0xff;\n        const b = (u >> 8) & 0xff;\n        const a = Math.round(((u & 0xff) / 0xff) * 100) / 100;\n        return [r, g, b, a];\n    }\n\n    // we used to check for css colors here\n    // if _input.css? and rgb = _input.css hex\n    //     return rgb\n\n    throw new Error(`unknown hex color: ${hex}`);\n};\n\nexport default hex2rgb;\n","import { unpack, last } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2hex = (...args) => {\n    let [r, g, b, a] = unpack(args, 'rgba');\n    let mode = last(args) || 'auto';\n    if (a === undefined) a = 1;\n    if (mode === 'auto') {\n        mode = a < 1 ? 'rgba' : 'rgb';\n    }\n    r = round(r);\n    g = round(g);\n    b = round(b);\n    const u = (r << 16) | (g << 8) | b;\n    let str = '000000' + u.toString(16); //#.toUpperCase();\n    str = str.substr(str.length - 6);\n    let hxa = '0' + round(a * 255).toString(16);\n    hxa = hxa.substr(hxa.length - 2);\n    switch (mode.toLowerCase()) {\n        case 'rgba':\n            return `#${str}${hxa}`;\n        case 'argb':\n            return `#${hxa}${str}`;\n        default:\n            return `#${str}`;\n    }\n};\n\nexport default rgb2hex;\n","import Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport w3cx11 from '../../colors/w3cx11.js';\nimport hex2rgb from '../hex/hex2rgb.js';\nimport rgb2hex from '../hex/rgb2hex.js';\n\nColor.prototype.name = function () {\n    const hex = rgb2hex(this._rgb, 'rgb');\n    for (let n of Object.keys(w3cx11)) {\n        if (w3cx11[n] === hex) return n.toLowerCase();\n    }\n    return hex;\n};\n\ninput.format.named = (name) => {\n    name = name.toLowerCase();\n    if (w3cx11[name]) return hex2rgb(w3cx11[name]);\n    throw new Error('unknown color name: ' + name);\n};\n\ninput.autodetect.push({\n    p: 5,\n    test: (h, ...rest) => {\n        if (!rest.length && type(h) === 'string' && w3cx11[h.toLowerCase()]) {\n            return 'named';\n        }\n    }\n});\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.alpha = function (a, mutate = false) {\n    if (a !== undefined && type(a) === 'number') {\n        if (mutate) {\n            this._rgb[3] = a;\n            return this;\n        }\n        return new Color([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');\n    }\n    return this._rgb[3];\n};\n","import Color from '../Color.js';\n\nColor.prototype.clipped = function () {\n    return this._rgb._clipped || false;\n};\n","const labConstants = {\n    // Corresponds roughly to RGB brighter/darker\n    Kn: 18,\n\n    // D65 standard referent\n    labWhitePoint: 'd65',\n    Xn: 0.95047,\n    Yn: 1,\n    Zn: 1.08883,\n\n    t0: 0.137931034, // 4 / 29\n    t1: 0.206896552, // 6 / 29\n    t2: 0.12841855, // 3 * t1 * t1\n    t3: 0.008856452, // t1 * t1 * t1,\n\n    kE: 216.0 / 24389.0,\n    kKE: 8.0,\n    kK: 24389.0 / 27.0,\n\n    RefWhiteRGB: {\n        // sRGB\n        X: 0.95047,\n        Y: 1,\n        Z: 1.08883\n    },\n\n    MtxRGB2XYZ: {\n        m00: 0.4124564390896922,\n        m01: 0.21267285140562253,\n        m02: 0.0193338955823293,\n        m10: 0.357576077643909,\n        m11: 0.715152155287818,\n        m12: 0.11919202588130297,\n        m20: 0.18043748326639894,\n        m21: 0.07217499330655958,\n        m22: 0.9503040785363679\n    },\n\n    MtxXYZ2RGB: {\n        m00: 3.2404541621141045,\n        m01: -0.9692660305051868,\n        m02: 0.055643430959114726,\n        m10: -1.5371385127977166,\n        m11: 1.8760108454466942,\n        m12: -0.2040259135167538,\n        m20: -0.498531409556016,\n        m21: 0.041556017530349834,\n        m22: 1.0572251882231791\n    },\n\n    // used in rgb2xyz\n    As: 0.9414285350000001,\n    Bs: 1.040417467,\n    Cs: 1.089532651,\n\n    MtxAdaptMa: {\n        m00: 0.8951,\n        m01: -0.7502,\n        m02: 0.0389,\n        m10: 0.2664,\n        m11: 1.7135,\n        m12: -0.0685,\n        m20: -0.1614,\n        m21: 0.0367,\n        m22: 1.0296\n    },\n\n    MtxAdaptMaI: {\n        m00: 0.9869929054667123,\n        m01: 0.43230526972339456,\n        m02: -0.008528664575177328,\n        m10: -0.14705425642099013,\n        m11: 0.5183602715367776,\n        m12: 0.04004282165408487,\n        m20: 0.15996265166373125,\n        m21: 0.0492912282128556,\n        m22: 0.9684866957875502\n    }\n};\n\nexport default labConstants;\n\n// taken from https://de.mathworks.com/help/images/ref/whitepoint.html\nconst ILLUMINANTS = new Map([\n    // ASTM E308-01\n    ['a', [1.0985, 0.35585]],\n    // Wyszecki & Stiles, p. 769\n    ['b', [1.0985, 0.35585]],\n    // C ASTM E308-01\n    ['c', [0.98074, 1.18232]],\n    // D50 (ASTM E308-01)\n    ['d50', [0.96422, 0.82521]],\n    // D55 (ASTM E308-01)\n    ['d55', [0.95682, 0.92149]],\n    // D65 (ASTM E308-01)\n    ['d65', [0.95047, 1.08883]],\n    // E (ASTM E308-01)\n    ['e', [1, 1, 1]],\n    // F2 (ASTM E308-01)\n    ['f2', [0.99186, 0.67393]],\n    // F7 (ASTM E308-01)\n    ['f7', [0.95041, 1.08747]],\n    // F11 (ASTM E308-01)\n    ['f11', [1.00962, 0.6435]],\n    ['icc', [0.96422, 0.82521]]\n]);\n\nexport function setLabWhitePoint(name) {\n    const ill = ILLUMINANTS.get(String(name).toLowerCase());\n    if (!ill) {\n        throw new Error('unknown Lab illuminant ' + name);\n    }\n    labConstants.labWhitePoint = name;\n    labConstants.Xn = ill[0];\n    labConstants.Zn = ill[1];\n}\n\nexport function getLabWhitePoint() {\n    return labConstants.labWhitePoint;\n}\n","import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\n\n/*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\nconst lab2rgb = (...args) => {\n    args = unpack(args, 'lab');\n    const [L, a, b] = args;\n    const [x, y, z] = lab2xyz(L, a, b);\n    const [r, g, b_] = xyz2rgb(x, y, z);\n    return [r, g, b_, args.length > 3 ? args[3] : 1];\n};\n\nconst lab2xyz = (L, a, b) => {\n    const { kE, kK, kKE, Xn, Yn, Zn } = LAB_CONSTANTS;\n\n    const fy = (L + 16.0) / 116.0;\n    const fx = 0.002 * a + fy;\n    const fz = fy - 0.005 * b;\n\n    const fx3 = fx * fx * fx;\n    const fz3 = fz * fz * fz;\n\n    const xr = fx3 > kE ? fx3 : (116.0 * fx - 16.0) / kK;\n    const yr = L > kKE ? Math.pow((L + 16.0) / 116.0, 3.0) : L / kK;\n    const zr = fz3 > kE ? fz3 : (116.0 * fz - 16.0) / kK;\n\n    const x = xr * Xn;\n    const y = yr * Yn;\n    const z = zr * Zn;\n\n    return [x, y, z];\n};\n\nconst compand = (linear) => {\n    /* sRGB */\n    const sign = Math.sign(linear);\n    linear = Math.abs(linear);\n    return (\n        (linear <= 0.0031308\n            ? linear * 12.92\n            : 1.055 * Math.pow(linear, 1.0 / 2.4) - 0.055) * sign\n    );\n};\n\nconst xyz2rgb = (x, y, z) => {\n    const { MtxAdaptMa, MtxAdaptMaI, MtxXYZ2RGB, RefWhiteRGB, Xn, Yn, Zn } =\n        LAB_CONSTANTS;\n\n    const As = Xn * MtxAdaptMa.m00 + Yn * MtxAdaptMa.m10 + Zn * MtxAdaptMa.m20;\n    const Bs = Xn * MtxAdaptMa.m01 + Yn * MtxAdaptMa.m11 + Zn * MtxAdaptMa.m21;\n    const Cs = Xn * MtxAdaptMa.m02 + Yn * MtxAdaptMa.m12 + Zn * MtxAdaptMa.m22;\n\n    const Ad =\n        RefWhiteRGB.X * MtxAdaptMa.m00 +\n        RefWhiteRGB.Y * MtxAdaptMa.m10 +\n        RefWhiteRGB.Z * MtxAdaptMa.m20;\n    const Bd =\n        RefWhiteRGB.X * MtxAdaptMa.m01 +\n        RefWhiteRGB.Y * MtxAdaptMa.m11 +\n        RefWhiteRGB.Z * MtxAdaptMa.m21;\n    const Cd =\n        RefWhiteRGB.X * MtxAdaptMa.m02 +\n        RefWhiteRGB.Y * MtxAdaptMa.m12 +\n        RefWhiteRGB.Z * MtxAdaptMa.m22;\n\n    const X1 =\n        (x * MtxAdaptMa.m00 + y * MtxAdaptMa.m10 + z * MtxAdaptMa.m20) *\n        (Ad / As);\n    const Y1 =\n        (x * MtxAdaptMa.m01 + y * MtxAdaptMa.m11 + z * MtxAdaptMa.m21) *\n        (Bd / Bs);\n    const Z1 =\n        (x * MtxAdaptMa.m02 + y * MtxAdaptMa.m12 + z * MtxAdaptMa.m22) *\n        (Cd / Cs);\n\n    const X2 =\n        X1 * MtxAdaptMaI.m00 + Y1 * MtxAdaptMaI.m10 + Z1 * MtxAdaptMaI.m20;\n    const Y2 =\n        X1 * MtxAdaptMaI.m01 + Y1 * MtxAdaptMaI.m11 + Z1 * MtxAdaptMaI.m21;\n    const Z2 =\n        X1 * MtxAdaptMaI.m02 + Y1 * MtxAdaptMaI.m12 + Z1 * MtxAdaptMaI.m22;\n\n    const r = compand(\n        X2 * MtxXYZ2RGB.m00 + Y2 * MtxXYZ2RGB.m10 + Z2 * MtxXYZ2RGB.m20\n    );\n    const g = compand(\n        X2 * MtxXYZ2RGB.m01 + Y2 * MtxXYZ2RGB.m11 + Z2 * MtxXYZ2RGB.m21\n    );\n    const b = compand(\n        X2 * MtxXYZ2RGB.m02 + Y2 * MtxXYZ2RGB.m12 + Z2 * MtxXYZ2RGB.m22\n    );\n\n    return [r * 255, g * 255, b * 255];\n};\n\nexport default lab2rgb;\nexport { xyz2rgb };\n","import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\n\nconst rgb2lab = (...args) => {\n    const [r, g, b, ...rest] = unpack(args, 'rgb');\n    const [x, y, z] = rgb2xyz(r, g, b);\n    const [L, a, b_] = xyz2lab(x, y, z);\n    return [L, a, b_, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nfunction xyz2lab(x, y, z) {\n    const { Xn, Yn, Zn, kE, kK } = LAB_CONSTANTS;\n    const xr = x / Xn;\n    const yr = y / Yn;\n    const zr = z / Zn;\n\n    const fx = xr > kE ? Math.pow(xr, 1.0 / 3.0) : (kK * xr + 16.0) / 116.0;\n    const fy = yr > kE ? Math.pow(yr, 1.0 / 3.0) : (kK * yr + 16.0) / 116.0;\n    const fz = zr > kE ? Math.pow(zr, 1.0 / 3.0) : (kK * zr + 16.0) / 116.0;\n\n    return [116.0 * fy - 16.0, 500.0 * (fx - fy), 200.0 * (fy - fz)];\n}\n\nfunction gammaAdjustSRGB(companded) {\n    const sign = Math.sign(companded);\n    companded = Math.abs(companded);\n    const linear =\n        companded <= 0.04045\n            ? companded / 12.92\n            : Math.pow((companded + 0.055) / 1.055, 2.4);\n    return linear * sign;\n}\n\nconst rgb2xyz = (r, g, b) => {\n    // normalize and gamma adjust\n    r = gammaAdjustSRGB(r / 255);\n    g = gammaAdjustSRGB(g / 255);\n    b = gammaAdjustSRGB(b / 255);\n\n    const { MtxRGB2XYZ, MtxAdaptMa, MtxAdaptMaI, Xn, Yn, Zn, As, Bs, Cs } =\n        LAB_CONSTANTS;\n\n    let x = r * MtxRGB2XYZ.m00 + g * MtxRGB2XYZ.m10 + b * MtxRGB2XYZ.m20;\n    let y = r * MtxRGB2XYZ.m01 + g * MtxRGB2XYZ.m11 + b * MtxRGB2XYZ.m21;\n    let z = r * MtxRGB2XYZ.m02 + g * MtxRGB2XYZ.m12 + b * MtxRGB2XYZ.m22;\n\n    const Ad = Xn * MtxAdaptMa.m00 + Yn * MtxAdaptMa.m10 + Zn * MtxAdaptMa.m20;\n    const Bd = Xn * MtxAdaptMa.m01 + Yn * MtxAdaptMa.m11 + Zn * MtxAdaptMa.m21;\n    const Cd = Xn * MtxAdaptMa.m02 + Yn * MtxAdaptMa.m12 + Zn * MtxAdaptMa.m22;\n\n    let X = x * MtxAdaptMa.m00 + y * MtxAdaptMa.m10 + z * MtxAdaptMa.m20;\n    let Y = x * MtxAdaptMa.m01 + y * MtxAdaptMa.m11 + z * MtxAdaptMa.m21;\n    let Z = x * MtxAdaptMa.m02 + y * MtxAdaptMa.m12 + z * MtxAdaptMa.m22;\n\n    X *= Ad / As;\n    Y *= Bd / Bs;\n    Z *= Cd / Cs;\n\n    x = X * MtxAdaptMaI.m00 + Y * MtxAdaptMaI.m10 + Z * MtxAdaptMaI.m20;\n    y = X * MtxAdaptMaI.m01 + Y * MtxAdaptMaI.m11 + Z * MtxAdaptMaI.m21;\n    z = X * MtxAdaptMaI.m02 + Y * MtxAdaptMaI.m12 + Z * MtxAdaptMaI.m22;\n\n    return [x, y, z];\n};\n\nexport default rgb2lab;\nexport { rgb2xyz };\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lab2rgb from './lab2rgb.js';\nimport rgb2lab from './rgb2lab.js';\nimport { getLabWhitePoint, setLabWhitePoint } from './lab-constants.js';\n\nColor.prototype.lab = function () {\n    return rgb2lab(this._rgb);\n};\n\nconst lab = (...args) => new Color(...args, 'lab');\nObject.assign(chroma, { lab, getLabWhitePoint, setLabWhitePoint });\n\ninput.format.lab = lab2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'lab');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'lab';\n        }\n    }\n});\n\nexport { lab, getLabWhitePoint, setLabWhitePoint };\n","import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.darken = function (amount = 1) {\n    const me = this;\n    const lab = me.lab();\n    lab[0] -= LAB_CONSTANTS.Kn * amount;\n    return new Color(lab, 'lab').alpha(me.alpha(), true);\n};\n\nColor.prototype.brighten = function (amount = 1) {\n    return this.darken(-amount);\n};\n\nColor.prototype.darker = Color.prototype.darken;\nColor.prototype.brighter = Color.prototype.brighten;\n","import Color from '../Color.js';\n\nColor.prototype.get = function (mc) {\n    const [mode, channel] = mc.split('.');\n    const src = this[mode]();\n    if (channel) {\n        const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n        if (i > -1) return src[i];\n        throw new Error(`unknown channel ${channel} in mode ${mode}`);\n    } else {\n        return src;\n    }\n};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nconst { pow } = Math;\n\nconst EPS = 1e-7;\nconst MAX_ITER = 20;\n\nColor.prototype.luminance = function (lum, mode = 'rgb') {\n    if (lum !== undefined && type(lum) === 'number') {\n        if (lum === 0) {\n            // return pure black\n            return new Color([0, 0, 0, this._rgb[3]], 'rgb');\n        }\n        if (lum === 1) {\n            // return pure white\n            return new Color([255, 255, 255, this._rgb[3]], 'rgb');\n        }\n        // compute new color using...\n        let cur_lum = this.luminance();\n        let max_iter = MAX_ITER;\n\n        const test = (low, high) => {\n            const mid = low.interpolate(high, 0.5, mode);\n            const lm = mid.luminance();\n            if (Math.abs(lum - lm) < EPS || !max_iter--) {\n                // close enough\n                return mid;\n            }\n            return lm > lum ? test(low, mid) : test(mid, high);\n        };\n\n        const rgb = (\n            cur_lum > lum\n                ? test(new Color([0, 0, 0]), this)\n                : test(this, new Color([255, 255, 255]))\n        ).rgb();\n        return new Color([...rgb, this._rgb[3]]);\n    }\n    return rgb2luminance(...this._rgb.slice(0, 3));\n};\n\nconst rgb2luminance = (r, g, b) => {\n    // relative luminance\n    // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n    r = luminance_x(r);\n    g = luminance_x(g);\n    b = luminance_x(b);\n    return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nconst luminance_x = (x) => {\n    x /= 255;\n    return x <= 0.03928 ? x / 12.92 : pow((x + 0.055) / 1.055, 2.4);\n};\n","export default {};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nimport interpolator from '../interpolator/index.js';\n\nexport default (col1, col2, f = 0.5, ...rest) => {\n    let mode = rest[0] || 'lrgb';\n    if (!interpolator[mode] && !rest.length) {\n        // fall back to the first supported mode\n        mode = Object.keys(interpolator)[0];\n    }\n    if (!interpolator[mode]) {\n        throw new Error(`interpolation mode ${mode} is not defined`);\n    }\n    if (type(col1) !== 'object') col1 = new Color(col1);\n    if (type(col2) !== 'object') col2 = new Color(col2);\n    return interpolator[mode](col1, col2, f).alpha(\n        col1.alpha() + f * (col2.alpha() - col1.alpha())\n    );\n};\n","import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.mix = Color.prototype.interpolate = function (\n    col2,\n    f = 0.5,\n    ...rest\n) {\n    return mix(this, col2, f, ...rest);\n};\n","import Color from '../Color.js';\n\nColor.prototype.premultiply = function (mutate = false) {\n    const rgb = this._rgb;\n    const a = rgb[3];\n    if (mutate) {\n        this._rgb = [rgb[0] * a, rgb[1] * a, rgb[2] * a, a];\n        return this;\n    } else {\n        return new Color([rgb[0] * a, rgb[1] * a, rgb[2] * a, a], 'rgb');\n    }\n};\n","import { unpack, DEG2RAD } from '../../utils/index.js';\nconst { sin, cos } = Math;\n\nconst lch2lab = (...args) => {\n    /*\n    Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n    These formulas were invented by David Dalrymple to obtain maximum contrast without going\n    out of gamut if the parameters are in the range 0-1.\n\n    A saturation multiplier was added by Gregor Aisch\n    */\n    let [l, c, h] = unpack(args, 'lch');\n    if (isNaN(h)) h = 0;\n    h = h * DEG2RAD;\n    return [l, cos(h) * c, sin(h) * c];\n};\n\nexport default lch2lab;\n","import { unpack } from '../../utils/index.js';\nimport lch2lab from './lch2lab.js';\nimport lab2rgb from '../lab/lab2rgb.js';\n\nconst lch2rgb = (...args) => {\n    args = unpack(args, 'lch');\n    const [l, c, h] = args;\n    const [L, a, b_] = lch2lab(l, c, h);\n    const [r, g, b] = lab2rgb(L, a, b_);\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default lch2rgb;\n","import { unpack, RAD2DEG } from '../../utils/index.js';\nconst { sqrt, atan2, round } = Math;\n\nconst lab2lch = (...args) => {\n    const [l, a, b] = unpack(args, 'lab');\n    const c = sqrt(a * a + b * b);\n    let h = (atan2(b, a) * RAD2DEG + 360) % 360;\n    if (round(c * 10000) === 0) h = Number.NaN;\n    return [l, c, h];\n};\n\nexport default lab2lch;\n","import { unpack } from '../../utils/index.js';\nimport rgb2lab from '../lab/rgb2lab.js';\nimport lab2lch from './lab2lch.js';\n\nconst rgb2lch = (...args) => {\n    const [r, g, b, ...rest] = unpack(args, 'rgb');\n    const [l, a, b_] = rgb2lab(r, g, b);\n    const [L, c, h] = lab2lch(l, a, b_);\n    return [L, c, h, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default rgb2lch;\n","import { unpack, type, reverse3 } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lch2rgb from './lch2rgb.js';\nimport hcl2rgb from './hcl2rgb.js';\nimport rgb2lch from './rgb2lch.js';\n\nColor.prototype.lch = function () {\n    return rgb2lch(this._rgb);\n};\nColor.prototype.hcl = function () {\n    return reverse3(rgb2lch(this._rgb));\n};\n\nconst lch = (...args) => new Color(...args, 'lch');\nconst hcl = (...args) => new Color(...args, 'hcl');\n\nObject.assign(chroma, { lch, hcl });\n\ninput.format.lch = lch2rgb;\ninput.format.hcl = hcl2rgb;\n['lch', 'hcl'].forEach((m) =>\n    input.autodetect.push({\n        p: 2,\n        test: (...args) => {\n            args = unpack(args, m);\n            if (type(args) === 'array' && args.length === 3) {\n                return m;\n            }\n        }\n    })\n);\n\nexport { lch, hcl };\n","import { unpack, reverse3 } from '../../utils/index.js';\nimport lch2rgb from './lch2rgb.js';\n\nconst hcl2rgb = (...args) => {\n    const hcl = reverse3(unpack(args, 'hcl'));\n    return lch2rgb(...hcl);\n};\n\nexport default hcl2rgb;\n","import '../io/lch/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.saturate = function (amount = 1) {\n    const me = this;\n    const lch = me.lch();\n    lch[1] += LAB_CONSTANTS.Kn * amount;\n    if (lch[1] < 0) lch[1] = 0;\n    return new Color(lch, 'lch').alpha(me.alpha(), true);\n};\n\nColor.prototype.desaturate = function (amount = 1) {\n    return this.saturate(-amount);\n};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.set = function (mc, value, mutate = false) {\n    const [mode, channel] = mc.split('.');\n    const src = this[mode]();\n    if (channel) {\n        const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n        if (i > -1) {\n            if (type(value) == 'string') {\n                switch (value.charAt(0)) {\n                    case '+':\n                        src[i] += +value;\n                        break;\n                    case '-':\n                        src[i] += +value;\n                        break;\n                    case '*':\n                        src[i] *= +value.substr(1);\n                        break;\n                    case '/':\n                        src[i] /= +value.substr(1);\n                        break;\n                    default:\n                        src[i] = +value;\n                }\n            } else if (type(value) === 'number') {\n                src[i] = value;\n            } else {\n                throw new Error(`unsupported value for Color.set`);\n            }\n            const out = new Color(src, mode);\n            if (mutate) {\n                this._rgb = out._rgb;\n                return this;\n            }\n            return out;\n        }\n        throw new Error(`unknown channel ${channel} in mode ${mode}`);\n    } else {\n        return src;\n    }\n};\n","import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.tint = function (f = 0.5, ...rest) {\n    return mix(this, 'white', f, ...rest);\n};\n\nColor.prototype.shade = function (f = 0.5, ...rest) {\n    return mix(this, 'black', f, ...rest);\n};\n","import Color from '../Color.js';\nimport index from './index.js';\n\nconst rgb = (col1, col2, f) => {\n    const xyz0 = col1._rgb;\n    const xyz1 = col2._rgb;\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'rgb'\n    );\n};\n\n// register interpolator\nindex.rgb = rgb;\n\nexport default rgb;\n","import Color from '../Color.js';\nconst { sqrt, pow } = Math;\nimport index from './index.js';\n\nconst lrgb = (col1, col2, f) => {\n    const [x1, y1, z1] = col1._rgb;\n    const [x2, y2, z2] = col2._rgb;\n    return new Color(\n        sqrt(pow(x1, 2) * (1 - f) + pow(x2, 2) * f),\n        sqrt(pow(y1, 2) * (1 - f) + pow(y2, 2) * f),\n        sqrt(pow(z1, 2) * (1 - f) + pow(z2, 2) * f),\n        'rgb'\n    );\n};\n\n// register interpolator\nindex.lrgb = lrgb;\n\nexport default lrgb;\n","import '../io/lab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst lab = (col1, col2, f) => {\n    const xyz0 = col1.lab();\n    const xyz1 = col2.lab();\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'lab'\n    );\n};\n\n// register interpolator\nindex.lab = lab;\n\nexport default lab;\n","import Color from '../Color.js';\n\nexport default (col1, col2, f, m) => {\n    let xyz0, xyz1;\n    if (m === 'hsl') {\n        xyz0 = col1.hsl();\n        xyz1 = col2.hsl();\n    } else if (m === 'hsv') {\n        xyz0 = col1.hsv();\n        xyz1 = col2.hsv();\n    } else if (m === 'hcg') {\n        xyz0 = col1.hcg();\n        xyz1 = col2.hcg();\n    } else if (m === 'hsi') {\n        xyz0 = col1.hsi();\n        xyz1 = col2.hsi();\n    } else if (m === 'lch' || m === 'hcl') {\n        m = 'hcl';\n        xyz0 = col1.hcl();\n        xyz1 = col2.hcl();\n    } else if (m === 'oklch') {\n        xyz0 = col1.oklch().reverse();\n        xyz1 = col2.oklch().reverse();\n    }\n\n    let hue0, hue1, sat0, sat1, lbv0, lbv1;\n    if (m.substr(0, 1) === 'h' || m === 'oklch') {\n        [hue0, sat0, lbv0] = xyz0;\n        [hue1, sat1, lbv1] = xyz1;\n    }\n\n    let sat, hue, lbv, dh;\n\n    if (!isNaN(hue0) && !isNaN(hue1)) {\n        // both colors have hue\n        if (hue1 > hue0 && hue1 - hue0 > 180) {\n            dh = hue1 - (hue0 + 360);\n        } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n            dh = hue1 + 360 - hue0;\n        } else {\n            dh = hue1 - hue0;\n        }\n        hue = hue0 + f * dh;\n    } else if (!isNaN(hue0)) {\n        hue = hue0;\n        if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') sat = sat0;\n    } else if (!isNaN(hue1)) {\n        hue = hue1;\n        if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') sat = sat1;\n    } else {\n        hue = Number.NaN;\n    }\n\n    if (sat === undefined) sat = sat0 + f * (sat1 - sat0);\n    lbv = lbv0 + f * (lbv1 - lbv0);\n    return m === 'oklch'\n        ? new Color([lbv, sat, hue], m)\n        : new Color([hue, sat, lbv], m);\n};\n","import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst lch = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'lch');\n};\n\n// register interpolator\nindex.lch = lch;\nindex.hcl = lch;\n\nexport default lch;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\nimport num2rgb from './num2rgb.js';\nimport rgb2num from './rgb2num.js';\n\nColor.prototype.num = function () {\n    return rgb2num(this._rgb);\n};\n\nconst num = (...args) => new Color(...args, 'num');\n\nObject.assign(chroma, { num });\n\ninput.format.num = num2rgb;\n\ninput.autodetect.push({\n    p: 5,\n    test: (...args) => {\n        if (\n            args.length === 1 &&\n            type(args[0]) === 'number' &&\n            args[0] >= 0 &&\n            args[0] <= 0xffffff\n        ) {\n            return 'num';\n        }\n    }\n});\n\nexport { num };\n","import { unpack } from '../../utils/index.js';\n\nconst rgb2num = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    return (r << 16) + (g << 8) + b;\n};\n\nexport default rgb2num;\n","import { type } from '../../utils/index.js';\n\nconst num2rgb = (num) => {\n    if (type(num) == 'number' && num >= 0 && num <= 0xffffff) {\n        const r = num >> 16;\n        const g = (num >> 8) & 0xff;\n        const b = num & 0xff;\n        return [r, g, b, 1];\n    }\n    throw new Error('unknown num color: ' + num);\n};\n\nexport default num2rgb;\n","import '../io/num/index.js';\nimport index from './index.js';\n\nimport Color from '../Color.js';\n\nconst num = (col1, col2, f) => {\n    const c1 = col1.num();\n    const c2 = col2.num();\n    return new Color(c1 + f * (c2 - c1), 'num');\n};\n\n// register interpolator\nindex.num = num;\n\nexport default num;\n","import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\n/*\n * this is basically just HSV with some minor tweaks\n *\n * hue.. [0..360]\n * chroma .. [0..1]\n * grayness .. [0..1]\n */\n\nconst hcg2rgb = (...args) => {\n    args = unpack(args, 'hcg');\n    let [h, c, _g] = args;\n    let r, g, b;\n    _g = _g * 255;\n    const _c = c * 255;\n    if (c === 0) {\n        r = g = b = _g;\n    } else {\n        if (h === 360) h = 0;\n        if (h > 360) h -= 360;\n        if (h < 0) h += 360;\n        h /= 60;\n        const i = floor(h);\n        const f = h - i;\n        const p = _g * (1 - c);\n        const q = p + _c * (1 - f);\n        const t = p + _c * f;\n        const v = p + _c;\n        switch (i) {\n            case 0:\n                [r, g, b] = [v, t, p];\n                break;\n            case 1:\n                [r, g, b] = [q, v, p];\n                break;\n            case 2:\n                [r, g, b] = [p, v, t];\n                break;\n            case 3:\n                [r, g, b] = [p, q, v];\n                break;\n            case 4:\n                [r, g, b] = [t, p, v];\n                break;\n            case 5:\n                [r, g, b] = [v, p, q];\n                break;\n        }\n    }\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hcg2rgb;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hcg2rgb from './hcg2rgb.js';\nimport rgb2hcg from './rgb2hcg.js';\n\nColor.prototype.hcg = function () {\n    return rgb2hcg(this._rgb);\n};\n\nconst hcg = (...args) => new Color(...args, 'hcg');\nchroma.hcg = hcg;\n\ninput.format.hcg = hcg2rgb;\n\ninput.autodetect.push({\n    p: 1,\n    test: (...args) => {\n        args = unpack(args, 'hcg');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hcg';\n        }\n    }\n});\n\nexport { hcg };\n","import { unpack, max, min } from '../../utils/index.js';\n\nconst rgb2hcg = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    const minRgb = min(r, g, b);\n    const maxRgb = max(r, g, b);\n    const delta = maxRgb - minRgb;\n    const c = (delta * 100) / 255;\n    const _g = (minRgb / (255 - delta)) * 100;\n    let h;\n    if (delta === 0) {\n        h = Number.NaN;\n    } else {\n        if (r === maxRgb) h = (g - b) / delta;\n        if (g === maxRgb) h = 2 + (b - r) / delta;\n        if (b === maxRgb) h = 4 + (r - g) / delta;\n        h *= 60;\n        if (h < 0) h += 360;\n    }\n    return [h, c, _g];\n};\n\nexport default rgb2hcg;\n","import '../io/hcg/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hcg = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hcg');\n};\n\n// register interpolator\nindex.hcg = hcg;\n\nexport default hcg;\n","import { unpack, limit, TWOPI, PITHIRD } from '../../utils/index.js';\nconst { cos } = Math;\n\n/*\n * hue [0..360]\n * saturation [0..1]\n * intensity [0..1]\n */\nconst hsi2rgb = (...args) => {\n    /*\n    borrowed from here:\n    http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp\n    */\n    args = unpack(args, 'hsi');\n    let [h, s, i] = args;\n    let r, g, b;\n\n    if (isNaN(h)) h = 0;\n    if (isNaN(s)) s = 0;\n    // normalize hue\n    if (h > 360) h -= 360;\n    if (h < 0) h += 360;\n    h /= 360;\n    if (h < 1 / 3) {\n        b = (1 - s) / 3;\n        r = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        g = 1 - (b + r);\n    } else if (h < 2 / 3) {\n        h -= 1 / 3;\n        r = (1 - s) / 3;\n        g = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        b = 1 - (r + g);\n    } else {\n        h -= 2 / 3;\n        g = (1 - s) / 3;\n        b = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        r = 1 - (g + b);\n    }\n    r = limit(i * r * 3);\n    g = limit(i * g * 3);\n    b = limit(i * b * 3);\n    return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsi2rgb;\n","import { unpack, TWOPI } from '../../utils/index.js';\nconst { min, sqrt, acos } = Math;\n\nconst rgb2hsi = (...args) => {\n    /*\n    borrowed from here:\n    http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp\n    */\n    let [r, g, b] = unpack(args, 'rgb');\n    r /= 255;\n    g /= 255;\n    b /= 255;\n    let h;\n    const min_ = min(r, g, b);\n    const i = (r + g + b) / 3;\n    const s = i > 0 ? 1 - min_ / i : 0;\n    if (s === 0) {\n        h = NaN;\n    } else {\n        h = (r - g + (r - b)) / 2;\n        h /= sqrt((r - g) * (r - g) + (r - b) * (g - b));\n        h = acos(h);\n        if (b > g) {\n            h = TWOPI - h;\n        }\n        h /= TWOPI;\n    }\n    return [h * 360, s, i];\n};\n\nexport default rgb2hsi;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsi2rgb from './hsi2rgb.js';\nimport rgb2hsi from './rgb2hsi.js';\n\nColor.prototype.hsi = function () {\n    return rgb2hsi(this._rgb);\n};\n\nconst hsi = (...args) => new Color(...args, 'hsi');\nchroma.hsi = hsi;\n\ninput.format.hsi = hsi2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsi');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsi';\n        }\n    }\n});\n\nexport { hsi };\n","import '../io/hsi/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsi = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsi');\n};\n\n// register interpolator\nindex.hsi = hsi;\n\nexport default hsi;\n","import { unpack } from '../../utils/index.js';\n\nconst hsl2rgb = (...args) => {\n    args = unpack(args, 'hsl');\n    const [h, s, l] = args;\n    let r, g, b;\n    if (s === 0) {\n        r = g = b = l * 255;\n    } else {\n        const t3 = [0, 0, 0];\n        const c = [0, 0, 0];\n        const t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        const t1 = 2 * l - t2;\n        const h_ = h / 360;\n        t3[0] = h_ + 1 / 3;\n        t3[1] = h_;\n        t3[2] = h_ - 1 / 3;\n        for (let i = 0; i < 3; i++) {\n            if (t3[i] < 0) t3[i] += 1;\n            if (t3[i] > 1) t3[i] -= 1;\n            if (6 * t3[i] < 1) c[i] = t1 + (t2 - t1) * 6 * t3[i];\n            else if (2 * t3[i] < 1) c[i] = t2;\n            else if (3 * t3[i] < 2) c[i] = t1 + (t2 - t1) * (2 / 3 - t3[i]) * 6;\n            else c[i] = t1;\n        }\n        [r, g, b] = [c[0] * 255, c[1] * 255, c[2] * 255];\n    }\n    if (args.length > 3) {\n        // keep alpha channel\n        return [r, g, b, args[3]];\n    }\n    return [r, g, b, 1];\n};\n\nexport default hsl2rgb;\n","import { unpack, min, max } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - rgb2hsl(r,g,b)\n * - rgb2hsl(r,g,b,a)\n * - rgb2hsl([r,g,b])\n * - rgb2hsl([r,g,b,a])\n * - rgb2hsl({r,g,b,a})\n */\nconst rgb2hsl = (...args) => {\n    args = unpack(args, 'rgba');\n    let [r, g, b] = args;\n\n    r /= 255;\n    g /= 255;\n    b /= 255;\n\n    const minRgb = min(r, g, b);\n    const maxRgb = max(r, g, b);\n\n    const l = (maxRgb + minRgb) / 2;\n    let s, h;\n\n    if (maxRgb === minRgb) {\n        s = 0;\n        h = Number.NaN;\n    } else {\n        s =\n            l < 0.5\n                ? (maxRgb - minRgb) / (maxRgb + minRgb)\n                : (maxRgb - minRgb) / (2 - maxRgb - minRgb);\n    }\n\n    if (r == maxRgb) h = (g - b) / (maxRgb - minRgb);\n    else if (g == maxRgb) h = 2 + (b - r) / (maxRgb - minRgb);\n    else if (b == maxRgb) h = 4 + (r - g) / (maxRgb - minRgb);\n\n    h *= 60;\n    if (h < 0) h += 360;\n    if (args.length > 3 && args[3] !== undefined) return [h, s, l, args[3]];\n    return [h, s, l];\n};\n\nexport default rgb2hsl;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsl2rgb from './hsl2rgb.js';\nimport rgb2hsl from './rgb2hsl.js';\n\nColor.prototype.hsl = function () {\n    return rgb2hsl(this._rgb);\n};\n\nconst hsl = (...args) => new Color(...args, 'hsl');\nchroma.hsl = hsl;\n\ninput.format.hsl = hsl2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsl');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsl';\n        }\n    }\n});\n\nexport { hsl };\n","import '../io/hsl/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsl = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsl');\n};\n\n// register interpolator\nindex.hsl = hsl;\n\nexport default hsl;\n","import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\nconst hsv2rgb = (...args) => {\n    args = unpack(args, 'hsv');\n    let [h, s, v] = args;\n    let r, g, b;\n    v *= 255;\n    if (s === 0) {\n        r = g = b = v;\n    } else {\n        if (h === 360) h = 0;\n        if (h > 360) h -= 360;\n        if (h < 0) h += 360;\n        h /= 60;\n\n        const i = floor(h);\n        const f = h - i;\n        const p = v * (1 - s);\n        const q = v * (1 - s * f);\n        const t = v * (1 - s * (1 - f));\n\n        switch (i) {\n            case 0:\n                [r, g, b] = [v, t, p];\n                break;\n            case 1:\n                [r, g, b] = [q, v, p];\n                break;\n            case 2:\n                [r, g, b] = [p, v, t];\n                break;\n            case 3:\n                [r, g, b] = [p, q, v];\n                break;\n            case 4:\n                [r, g, b] = [t, p, v];\n                break;\n            case 5:\n                [r, g, b] = [v, p, q];\n                break;\n        }\n    }\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsv2rgb;\n","import { unpack } from '../../utils/index.js';\nconst { min, max } = Math;\n\n/*\n * supported arguments:\n * - rgb2hsv(r,g,b)\n * - rgb2hsv([r,g,b])\n * - rgb2hsv({r,g,b})\n */\nconst rgb2hsl = (...args) => {\n    args = unpack(args, 'rgb');\n    let [r, g, b] = args;\n    const min_ = min(r, g, b);\n    const max_ = max(r, g, b);\n    const delta = max_ - min_;\n    let h, s, v;\n    v = max_ / 255.0;\n    if (max_ === 0) {\n        h = Number.NaN;\n        s = 0;\n    } else {\n        s = delta / max_;\n        if (r === max_) h = (g - b) / delta;\n        if (g === max_) h = 2 + (b - r) / delta;\n        if (b === max_) h = 4 + (r - g) / delta;\n        h *= 60;\n        if (h < 0) h += 360;\n    }\n    return [h, s, v];\n};\n\nexport default rgb2hsl;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsv2rgb from './hsv2rgb.js';\nimport rgb2hsv from './rgb2hsv.js';\n\nColor.prototype.hsv = function () {\n    return rgb2hsv(this._rgb);\n};\n\nconst hsv = (...args) => new Color(...args, 'hsv');\nchroma.hsv = hsv;\n\ninput.format.hsv = hsv2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsv');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsv';\n        }\n    }\n});\n\nexport { hsv };\n","// from https://www.w3.org/TR/css-color-4/multiply-matrices.js\nexport default function multiplyMatrices(A, B) {\n    let m = A.length;\n\n    if (!Array.isArray(A[0])) {\n        // A is vector, convert to [[a, b, c, ...]]\n        A = [A];\n    }\n\n    if (!Array.isArray(B[0])) {\n        // B is vector, convert to [[a], [b], [c], ...]]\n        B = B.map((x) => [x]);\n    }\n\n    let p = B[0].length;\n    let B_cols = B[0].map((_, i) => B.map((x) => x[i])); // transpose B\n    let product = A.map((row) =>\n        B_cols.map((col) => {\n            if (!Array.isArray(row)) {\n                return col.reduce((a, c) => a + c * row, 0);\n            }\n\n            return row.reduce((a, c, i) => a + c * (col[i] || 0), 0);\n        })\n    );\n\n    if (m === 1) {\n        product = product[0]; // Avoid [[a, b, c, ...]]\n    }\n\n    if (p === 1) {\n        return product.map((x) => x[0]); // Avoid [[a], [b], [c], ...]]\n    }\n\n    return product;\n}\n","import '../io/hsv/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsv = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsv');\n};\n\n// register interpolator\nindex.hsv = hsv;\n\nexport default hsv;\n","import { unpack } from '../../utils/index.js';\nimport multiplyMatrices from '../../utils/multiply-matrices.js';\nimport { xyz2rgb } from '../lab/lab2rgb.js';\n\nconst oklab2rgb = (...args) => {\n    args = unpack(args, 'lab');\n    const [L, a, b, ...rest] = args;\n    const [X, Y, Z] = OKLab_to_XYZ([L, a, b]);\n    const [r, g, b_] = xyz2rgb(X, Y, Z);\n    return [r, g, b_, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\n// from https://www.w3.org/TR/css-color-4/#color-conversion-code\nfunction OKLab_to_XYZ(OKLab) {\n    // Given OKLab, convert to XYZ relative to D65\n    var LMStoXYZ = [\n        [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],\n        [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],\n        [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]\n    ];\n    var OKLabtoLMS = [\n        [1.0, 0.3963377773761749, 0.2158037573099136],\n        [1.0, -0.1055613458156586, -0.0638541728258133],\n        [1.0, -0.0894841775298119, -1.2914855480194092]\n    ];\n\n    var LMSnl = multiplyMatrices(OKLabtoLMS, OKLab);\n    return multiplyMatrices(\n        LMStoXYZ,\n        LMSnl.map((c) => c ** 3)\n    );\n}\n\nexport default oklab2rgb;\n","import { unpack } from '../../utils/index.js';\nimport multiplyMatrices from '../../utils/multiply-matrices.js';\nimport { rgb2xyz } from '../lab/rgb2lab.js';\n\nconst rgb2oklab = (...args) => {\n    const [r, g, b, ...rest] = unpack(args, 'rgb');\n    const xyz = rgb2xyz(r, g, b);\n    const oklab = XYZ_to_OKLab(xyz);\n    return [...oklab, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\n// from https://www.w3.org/TR/css-color-4/#color-conversion-code\nfunction XYZ_to_OKLab(XYZ) {\n    // Given XYZ relative to D65, convert to OKLab\n    const XYZtoLMS = [\n        [0.819022437996703, 0.3619062600528904, -0.1288737815209879],\n        [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],\n        [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]\n    ];\n    const LMStoOKLab = [\n        [0.210454268309314, 0.7936177747023054, -0.0040720430116193],\n        [1.9779985324311684, -2.4285922420485799, 0.450593709617411],\n        [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]\n    ];\n\n    const LMS = multiplyMatrices(XYZtoLMS, XYZ);\n    // JavaScript Math.cbrt returns a sign-matched cube root\n    // beware if porting to other languages\n    // especially if tempted to use a general power function\n    return multiplyMatrices(\n        LMStoOKLab,\n        LMS.map((c) => Math.cbrt(c))\n    );\n    // L in range [0,1]. For use in CSS, multiply by 100 and add a percent\n}\n\nexport default rgb2oklab;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklab2rgb from './oklab2rgb.js';\nimport rgb2oklab from './rgb2oklab.js';\n\nColor.prototype.oklab = function () {\n    return rgb2oklab(this._rgb);\n};\n\nconst oklab = (...args) => new Color(...args, 'oklab');\nObject.assign(chroma, { oklab });\n\ninput.format.oklab = oklab2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'oklab');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'oklab';\n        }\n    }\n});\n\nexport { oklab };\n","import '../io/oklab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst oklab = (col1, col2, f) => {\n    const xyz0 = col1.oklab();\n    const xyz1 = col2.oklab();\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'oklab'\n    );\n};\n\n// register interpolator\nindex.oklab = oklab;\n\nexport default oklab;\n","import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst oklch = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'oklch');\n};\n\n// register interpolator\nindex.oklch = oklch;\n\nexport default oklch;\n","import Color from '../Color.js';\nimport { clip_rgb } from '../utils/index.js';\n\nconst { pow, sqrt, PI, cos, sin, atan2 } = Math;\n\nexport default (colors, mode = 'lrgb', weights = null) => {\n    const l = colors.length;\n    if (!weights) weights = Array.from(new Array(l)).map(() => 1);\n    // normalize weights\n    const k =\n        l /\n        weights.reduce(function (a, b) {\n            return a + b;\n        });\n    weights.forEach((w, i) => {\n        weights[i] *= k;\n    });\n    // convert colors to Color objects\n    colors = colors.map((c) => new Color(c));\n    if (mode === 'lrgb') {\n        return _average_lrgb(colors, weights);\n    }\n    const first = colors.shift();\n    const xyz = first.get(mode);\n    const cnt = [];\n    let dx = 0;\n    let dy = 0;\n    // initial color\n    for (let i = 0; i < xyz.length; i++) {\n        xyz[i] = (xyz[i] || 0) * weights[0];\n        cnt.push(isNaN(xyz[i]) ? 0 : weights[0]);\n        if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {\n            const A = (xyz[i] / 180) * PI;\n            dx += cos(A) * weights[0];\n            dy += sin(A) * weights[0];\n        }\n    }\n\n    let alpha = first.alpha() * weights[0];\n    colors.forEach((c, ci) => {\n        const xyz2 = c.get(mode);\n        alpha += c.alpha() * weights[ci + 1];\n        for (let i = 0; i < xyz.length; i++) {\n            if (!isNaN(xyz2[i])) {\n                cnt[i] += weights[ci + 1];\n                if (mode.charAt(i) === 'h') {\n                    const A = (xyz2[i] / 180) * PI;\n                    dx += cos(A) * weights[ci + 1];\n                    dy += sin(A) * weights[ci + 1];\n                } else {\n                    xyz[i] += xyz2[i] * weights[ci + 1];\n                }\n            }\n        }\n    });\n\n    for (let i = 0; i < xyz.length; i++) {\n        if (mode.charAt(i) === 'h') {\n            let A = (atan2(dy / cnt[i], dx / cnt[i]) / PI) * 180;\n            while (A < 0) A += 360;\n            while (A >= 360) A -= 360;\n            xyz[i] = A;\n        } else {\n            xyz[i] = xyz[i] / cnt[i];\n        }\n    }\n    alpha /= l;\n    return new Color(xyz, mode).alpha(alpha > 0.99999 ? 1 : alpha, true);\n};\n\nconst _average_lrgb = (colors, weights) => {\n    const l = colors.length;\n    const xyz = [0, 0, 0, 0];\n    for (let i = 0; i < colors.length; i++) {\n        const col = colors[i];\n        const f = weights[i] / l;\n        const rgb = col._rgb;\n        xyz[0] += pow(rgb[0], 2) * f;\n        xyz[1] += pow(rgb[1], 2) * f;\n        xyz[2] += pow(rgb[2], 2) * f;\n        xyz[3] += rgb[3] * f;\n    }\n    xyz[0] = sqrt(xyz[0]);\n    xyz[1] = sqrt(xyz[1]);\n    xyz[2] = sqrt(xyz[2]);\n    if (xyz[3] > 0.9999999) xyz[3] = 1;\n    return new Color(clip_rgb(xyz));\n};\n","// minimal multi-purpose interface\n\n// @requires utils color analyze\nimport chroma from '../chroma.js';\nimport { limit, type } from '../utils/index.js';\n\nconst { pow } = Math;\n\nexport default function (colors) {\n    // constructor\n    let _mode = 'rgb';\n    let _nacol = chroma('#ccc');\n    let _spread = 0;\n    // const _fixed = false;\n    let _positions = [0, 1];\n    let _domain = [0, 1];\n    let _pos = [];\n    let _padding = [0, 0];\n    let _classes = false;\n    let _colors = [];\n    let _out = false;\n    let _min = 0;\n    let _max = 1;\n    let _correctLightness = false;\n    let _colorCache = {};\n    let _useCache = true;\n    let _gamma = 1;\n\n    // private methods\n\n    const setColors = function (colors) {\n        colors = colors || ['#fff', '#000'];\n        if (\n            colors &&\n            type(colors) === 'string' &&\n            chroma.brewer &&\n            chroma.brewer[colors.toLowerCase()]\n        ) {\n            colors = chroma.brewer[colors.toLowerCase()];\n        }\n        if (type(colors) === 'array') {\n            // handle single color\n            if (colors.length === 1) {\n                colors = [colors[0], colors[0]];\n            }\n            // make a copy of the colors\n            colors = colors.slice(0);\n            // convert to chroma classes\n            for (let c = 0; c < colors.length; c++) {\n                colors[c] = chroma(colors[c]);\n            }\n            // auto-fill color position\n            _pos.length = 0;\n            for (let c = 0; c < colors.length; c++) {\n                _pos.push(c / (colors.length - 1));\n            }\n        }\n        resetCache();\n        return (_colors = colors);\n    };\n\n    const getClass = function (value) {\n        if (_classes != null) {\n            const n = _classes.length - 1;\n            let i = 0;\n            while (i < n && value >= _classes[i]) {\n                i++;\n            }\n            return i - 1;\n        }\n        return 0;\n    };\n\n    let tMapLightness = (t) => t;\n    let tMapDomain = (t) => t;\n\n    // const classifyValue = function(value) {\n    //     let val = value;\n    //     if (_classes.length > 2) {\n    //         const n = _classes.length-1;\n    //         const i = getClass(value);\n    //         const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5)));  // center of 1st class\n    //         const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5)));  // center of last class\n    //         val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));\n    //     }\n    //     return val;\n    // };\n\n    const getColor = function (val, bypassMap) {\n        let col, t;\n        if (bypassMap == null) {\n            bypassMap = false;\n        }\n        if (isNaN(val) || val === null) {\n            return _nacol;\n        }\n        if (!bypassMap) {\n            if (_classes && _classes.length > 2) {\n                // find the class\n                const c = getClass(val);\n                t = c / (_classes.length - 2);\n            } else if (_max !== _min) {\n                // just interpolate between min/max\n                t = (val - _min) / (_max - _min);\n            } else {\n                t = 1;\n            }\n        } else {\n            t = val;\n        }\n\n        // domain map\n        t = tMapDomain(t);\n\n        if (!bypassMap) {\n            t = tMapLightness(t); // lightness correction\n        }\n\n        if (_gamma !== 1) {\n            t = pow(t, _gamma);\n        }\n\n        t = _padding[0] + t * (1 - _padding[0] - _padding[1]);\n\n        t = limit(t, 0, 1);\n\n        const k = Math.floor(t * 10000);\n\n        if (_useCache && _colorCache[k]) {\n            col = _colorCache[k];\n        } else {\n            if (type(_colors) === 'array') {\n                //for i in [0.._pos.length-1]\n                for (let i = 0; i < _pos.length; i++) {\n                    const p = _pos[i];\n                    if (t <= p) {\n                        col = _colors[i];\n                        break;\n                    }\n                    if (t >= p && i === _pos.length - 1) {\n                        col = _colors[i];\n                        break;\n                    }\n                    if (t > p && t < _pos[i + 1]) {\n                        t = (t - p) / (_pos[i + 1] - p);\n                        col = chroma.interpolate(\n                            _colors[i],\n                            _colors[i + 1],\n                            t,\n                            _mode\n                        );\n                        break;\n                    }\n                }\n            } else if (type(_colors) === 'function') {\n                col = _colors(t);\n            }\n            if (_useCache) {\n                _colorCache[k] = col;\n            }\n        }\n        return col;\n    };\n\n    var resetCache = () => (_colorCache = {});\n\n    setColors(colors);\n\n    // public interface\n\n    const f = function (v) {\n        const c = chroma(getColor(v));\n        if (_out && c[_out]) {\n            return c[_out]();\n        } else {\n            return c;\n        }\n    };\n\n    f.classes = function (classes) {\n        if (classes != null) {\n            if (type(classes) === 'array') {\n                _classes = classes;\n                _positions = [classes[0], classes[classes.length - 1]];\n            } else {\n                const d = chroma.analyze(_positions);\n                if (classes === 0) {\n                    _classes = [d.min, d.max];\n                } else {\n                    _classes = chroma.limits(d, 'e', classes);\n                }\n            }\n            return f;\n        }\n        return _classes;\n    };\n\n    f.domain = function (domain) {\n        if (!arguments.length) {\n            // return original domain\n            return _domain;\n        }\n        // store original domain so we can return it later\n        _domain = domain.slice(0);\n        _min = domain[0];\n        _max = domain[domain.length - 1];\n        _pos = [];\n        const k = _colors.length;\n        if (domain.length === k && _min !== _max) {\n            // update positions\n            for (let d of Array.from(domain)) {\n                _pos.push((d - _min) / (_max - _min));\n            }\n        } else {\n            for (let c = 0; c < k; c++) {\n                _pos.push(c / (k - 1));\n            }\n            if (domain.length > 2) {\n                // set domain map\n                const tOut = domain.map((d, i) => i / (domain.length - 1));\n                const tBreaks = domain.map((d) => (d - _min) / (_max - _min));\n                if (!tBreaks.every((val, i) => tOut[i] === val)) {\n                    tMapDomain = (t) => {\n                        if (t <= 0 || t >= 1) return t;\n                        let i = 0;\n                        while (t >= tBreaks[i + 1]) i++;\n                        const f =\n                            (t - tBreaks[i]) / (tBreaks[i + 1] - tBreaks[i]);\n                        const out = tOut[i] + f * (tOut[i + 1] - tOut[i]);\n                        return out;\n                    };\n                }\n            }\n        }\n        _positions = [_min, _max];\n        return f;\n    };\n\n    f.mode = function (_m) {\n        if (!arguments.length) {\n            return _mode;\n        }\n        _mode = _m;\n        resetCache();\n        return f;\n    };\n\n    f.range = function (colors, _pos) {\n        setColors(colors, _pos);\n        return f;\n    };\n\n    f.out = function (_o) {\n        _out = _o;\n        return f;\n    };\n\n    f.spread = function (val) {\n        if (!arguments.length) {\n            return _spread;\n        }\n        _spread = val;\n        return f;\n    };\n\n    f.correctLightness = function (v) {\n        if (v == null) {\n            v = true;\n        }\n        _correctLightness = v;\n        resetCache();\n        if (_correctLightness) {\n            tMapLightness = function (t) {\n                const L0 = getColor(0, true).lab()[0];\n                const L1 = getColor(1, true).lab()[0];\n                const pol = L0 > L1;\n                let L_actual = getColor(t, true).lab()[0];\n                const L_ideal = L0 + (L1 - L0) * t;\n                let L_diff = L_actual - L_ideal;\n                let t0 = 0;\n                let t1 = 1;\n                let max_iter = 20;\n                while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {\n                    (function () {\n                        if (pol) {\n                            L_diff *= -1;\n                        }\n                        if (L_diff < 0) {\n                            t0 = t;\n                            t += (t1 - t) * 0.5;\n                        } else {\n                            t1 = t;\n                            t += (t0 - t) * 0.5;\n                        }\n                        L_actual = getColor(t, true).lab()[0];\n                        return (L_diff = L_actual - L_ideal);\n                    })();\n                }\n                return t;\n            };\n        } else {\n            tMapLightness = (t) => t;\n        }\n        return f;\n    };\n\n    f.padding = function (p) {\n        if (p != null) {\n            if (type(p) === 'number') {\n                p = [p, p];\n            }\n            _padding = p;\n            return f;\n        } else {\n            return _padding;\n        }\n    };\n\n    f.colors = function (numColors, out) {\n        // If no arguments are given, return the original colors that were provided\n        if (arguments.length < 2) {\n            out = 'hex';\n        }\n        let result = [];\n\n        if (arguments.length === 0) {\n            result = _colors.slice(0);\n        } else if (numColors === 1) {\n            result = [f(0.5)];\n        } else if (numColors > 1) {\n            const dm = _positions[0];\n            const dd = _positions[1] - dm;\n            result = __range__(0, numColors, false).map((i) =>\n                f(dm + (i / (numColors - 1)) * dd)\n            );\n        } else {\n            // returns all colors based on the defined classes\n            colors = [];\n            let samples = [];\n            if (_classes && _classes.length > 2) {\n                for (\n                    let i = 1, end = _classes.length, asc = 1 <= end;\n                    asc ? i < end : i > end;\n                    asc ? i++ : i--\n                ) {\n                    samples.push((_classes[i - 1] + _classes[i]) * 0.5);\n                }\n            } else {\n                samples = _positions;\n            }\n            result = samples.map((v) => f(v));\n        }\n\n        if (chroma[out]) {\n            result = result.map((c) => c[out]());\n        }\n        return result;\n    };\n\n    f.cache = function (c) {\n        if (c != null) {\n            _useCache = c;\n            return f;\n        } else {\n            return _useCache;\n        }\n    };\n\n    f.gamma = function (g) {\n        if (g != null) {\n            _gamma = g;\n            return f;\n        } else {\n            return _gamma;\n        }\n    };\n\n    f.nodata = function (d) {\n        if (d != null) {\n            _nacol = chroma(d);\n            return f;\n        } else {\n            return _nacol;\n        }\n    };\n\n    return f;\n}\n\nfunction __range__(left, right, inclusive) {\n    let range = [];\n    let ascending = left < right;\n    let end = !inclusive ? right : ascending ? right + 1 : right - 1;\n    for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {\n        range.push(i);\n    }\n    return range;\n}\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nconst { round } = Math;\n\nColor.prototype.rgb = function (rnd = true) {\n    if (rnd === false) return this._rgb.slice(0, 3);\n    return this._rgb.slice(0, 3).map(round);\n};\n\nColor.prototype.rgba = function (rnd = true) {\n    return this._rgb.slice(0, 4).map((v, i) => {\n        return i < 3 ? (rnd === false ? v : round(v)) : v;\n    });\n};\n\nconst rgb = (...args) => new Color(...args, 'rgb');\nObject.assign(chroma, { rgb });\n\ninput.format.rgb = (...args) => {\n    const rgba = unpack(args, 'rgba');\n    if (rgba[3] === undefined) rgba[3] = 1;\n    return rgba;\n};\n\ninput.autodetect.push({\n    p: 3,\n    test: (...args) => {\n        args = unpack(args, 'rgba');\n        if (\n            type(args) === 'array' &&\n            (args.length === 3 ||\n                (args.length === 4 &&\n                    type(args[3]) == 'number' &&\n                    args[3] >= 0 &&\n                    args[3] <= 1))\n        ) {\n            return 'rgb';\n        }\n    }\n});\n\nexport { rgb };\n","/*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from https://web.archive.org/web/20180110014946/http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\n\nimport '../io/rgb/index.js';\nimport chroma from '../chroma.js';\n\nconst blend = (bottom, top, mode) => {\n    if (!blend[mode]) {\n        throw new Error('unknown blend mode ' + mode);\n    }\n    return blend[mode](bottom, top);\n};\n\nconst blend_f = (f) => (bottom, top) => {\n    const c0 = chroma(top).rgb();\n    const c1 = chroma(bottom).rgb();\n    return chroma.rgb(f(c0, c1));\n};\n\nconst each = (f) => (c0, c1) => {\n    const out = [];\n    out[0] = f(c0[0], c1[0]);\n    out[1] = f(c0[1], c1[1]);\n    out[2] = f(c0[2], c1[2]);\n    return out;\n};\n\nconst normal = (a) => a;\nconst multiply = (a, b) => (a * b) / 255;\nconst darken = (a, b) => (a > b ? b : a);\nconst lighten = (a, b) => (a > b ? a : b);\nconst screen = (a, b) => 255 * (1 - (1 - a / 255) * (1 - b / 255));\nconst overlay = (a, b) =>\n    b < 128 ? (2 * a * b) / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));\nconst burn = (a, b) => 255 * (1 - (1 - b / 255) / (a / 255));\nconst dodge = (a, b) => {\n    if (a === 255) return 255;\n    a = (255 * (b / 255)) / (1 - a / 255);\n    return a > 255 ? 255 : a;\n};\n\n// # add = (a,b) ->\n// #     if (a + b > 255) then 255 else a + b\n\nblend.normal = blend_f(each(normal));\nblend.multiply = blend_f(each(multiply));\nblend.screen = blend_f(each(screen));\nblend.overlay = blend_f(each(overlay));\nblend.darken = blend_f(each(darken));\nblend.lighten = blend_f(each(lighten));\nblend.dodge = blend_f(each(dodge));\nblend.burn = blend_f(each(burn));\n// blend.add = blend_f(each(add));\n\nexport default blend;\n","// cubehelix interpolation\n// based on D.A. Green \"A colour scheme for the display of astronomical intensity images\"\n// http://astron-soc.in/bulletin/11June/289392011.pdf\nimport { type, clip_rgb, TWOPI } from '../utils/index.js';\nimport chroma from '../chroma.js';\nconst { pow, sin, cos } = Math;\n\nexport default function (\n    start = 300,\n    rotations = -1.5,\n    hue = 1,\n    gamma = 1,\n    lightness = [0, 1]\n) {\n    let dh = 0,\n        dl;\n    if (type(lightness) === 'array') {\n        dl = lightness[1] - lightness[0];\n    } else {\n        dl = 0;\n        lightness = [lightness, lightness];\n    }\n    const f = function (fract) {\n        const a = TWOPI * ((start + 120) / 360 + rotations * fract);\n        const l = pow(lightness[0] + dl * fract, gamma);\n        const h = dh !== 0 ? hue[0] + fract * dh : hue;\n        const amp = (h * l * (1 - l)) / 2;\n        const cos_a = cos(a);\n        const sin_a = sin(a);\n        const r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);\n        const g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);\n        const b = l + amp * (+1.97294 * cos_a);\n        return chroma(clip_rgb([r * 255, g * 255, b * 255, 1]));\n    };\n    f.start = function (s) {\n        if (s == null) {\n            return start;\n        }\n        start = s;\n        return f;\n    };\n    f.rotations = function (r) {\n        if (r == null) {\n            return rotations;\n        }\n        rotations = r;\n        return f;\n    };\n    f.gamma = function (g) {\n        if (g == null) {\n            return gamma;\n        }\n        gamma = g;\n        return f;\n    };\n    f.hue = function (h) {\n        if (h == null) {\n            return hue;\n        }\n        hue = h;\n        if (type(hue) === 'array') {\n            dh = hue[1] - hue[0];\n            if (dh === 0) {\n                hue = hue[1];\n            }\n        } else {\n            dh = 0;\n        }\n        return f;\n    };\n    f.lightness = function (h) {\n        if (h == null) {\n            return lightness;\n        }\n        if (type(h) === 'array') {\n            lightness = h;\n            dl = h[1] - h[0];\n        } else {\n            lightness = [h, h];\n            dl = 0;\n        }\n        return f;\n    };\n    f.scale = () => chroma.scale(f);\n    f.hue(hue);\n    return f;\n}\n","import Color from '../Color.js';\nconst digits = '0123456789abcdef';\n\nconst { floor, random } = Math;\n\n/**\n * Generates a random color.\n * @param {() => number} rng - A random number generator function.\n */\nexport default (rng = random) => {\n    let code = '#';\n    for (let i = 0; i < 6; i++) {\n        code += digits.charAt(floor(rng() * 16));\n    }\n    return new Color(code, 'hex');\n};\n","import type from './type.js';\n\nconst { log, pow, floor, abs } = Math;\n\nexport function analyze(data, key = null) {\n    const r = {\n        min: Number.MAX_VALUE,\n        max: Number.MAX_VALUE * -1,\n        sum: 0,\n        values: [],\n        count: 0\n    };\n    if (type(data) === 'object') {\n        data = Object.values(data);\n    }\n    data.forEach((val) => {\n        if (key && type(val) === 'object') val = val[key];\n        if (val !== undefined && val !== null && !isNaN(val)) {\n            r.values.push(val);\n            r.sum += val;\n            if (val < r.min) r.min = val;\n            if (val > r.max) r.max = val;\n            r.count += 1;\n        }\n    });\n\n    r.domain = [r.min, r.max];\n\n    r.limits = (mode, num) => limits(r, mode, num);\n\n    return r;\n}\n\nexport function limits(data, mode = 'equal', num = 7) {\n    if (type(data) == 'array') {\n        data = analyze(data);\n    }\n    const { min, max } = data;\n    const values = data.values.sort((a, b) => a - b);\n\n    if (num === 1) {\n        return [min, max];\n    }\n\n    const limits = [];\n\n    if (mode.substr(0, 1) === 'c') {\n        // continuous\n        limits.push(min);\n        limits.push(max);\n    }\n\n    if (mode.substr(0, 1) === 'e') {\n        // equal interval\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            limits.push(min + (i / num) * (max - min));\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'l') {\n        // log scale\n        if (min <= 0) {\n            throw new Error(\n                'Logarithmic scales are only possible for values > 0'\n            );\n        }\n        const min_log = Math.LOG10E * log(min);\n        const max_log = Math.LOG10E * log(max);\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            limits.push(pow(10, min_log + (i / num) * (max_log - min_log)));\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'q') {\n        // quantile scale\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            const p = ((values.length - 1) * i) / num;\n            const pb = floor(p);\n            if (pb === p) {\n                limits.push(values[pb]);\n            } else {\n                // p > pb\n                const pr = p - pb;\n                limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);\n            }\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'k') {\n        // k-means clustering\n        /*\n        implementation based on\n        http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n        simplified for 1-d input values\n        */\n        let cluster;\n        const n = values.length;\n        const assignments = new Array(n);\n        const clusterSizes = new Array(num);\n        let repeat = true;\n        let nb_iters = 0;\n        let centroids = null;\n\n        // get seed values\n        centroids = [];\n        centroids.push(min);\n        for (let i = 1; i < num; i++) {\n            centroids.push(min + (i / num) * (max - min));\n        }\n        centroids.push(max);\n\n        while (repeat) {\n            // assignment step\n            for (let j = 0; j < num; j++) {\n                clusterSizes[j] = 0;\n            }\n            for (let i = 0; i < n; i++) {\n                const value = values[i];\n                let mindist = Number.MAX_VALUE;\n                let best;\n                for (let j = 0; j < num; j++) {\n                    const dist = abs(centroids[j] - value);\n                    if (dist < mindist) {\n                        mindist = dist;\n                        best = j;\n                    }\n                    clusterSizes[best]++;\n                    assignments[i] = best;\n                }\n            }\n\n            // update centroids step\n            const newCentroids = new Array(num);\n            for (let j = 0; j < num; j++) {\n                newCentroids[j] = null;\n            }\n            for (let i = 0; i < n; i++) {\n                cluster = assignments[i];\n                if (newCentroids[cluster] === null) {\n                    newCentroids[cluster] = values[i];\n                } else {\n                    newCentroids[cluster] += values[i];\n                }\n            }\n            for (let j = 0; j < num; j++) {\n                newCentroids[j] *= 1 / clusterSizes[j];\n            }\n\n            // check convergence\n            repeat = false;\n            for (let j = 0; j < num; j++) {\n                if (newCentroids[j] !== centroids[j]) {\n                    repeat = true;\n                    break;\n                }\n            }\n\n            centroids = newCentroids;\n            nb_iters++;\n\n            if (nb_iters > 200) {\n                repeat = false;\n            }\n        }\n\n        // finished k-means clustering\n        // the next part is borrowed from gabrielflor.it\n        const kClusters = {};\n        for (let j = 0; j < num; j++) {\n            kClusters[j] = [];\n        }\n        for (let i = 0; i < n; i++) {\n            cluster = assignments[i];\n            kClusters[cluster].push(values[i]);\n        }\n        let tmpKMeansBreaks = [];\n        for (let j = 0; j < num; j++) {\n            tmpKMeansBreaks.push(kClusters[j][0]);\n            tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);\n        }\n        tmpKMeansBreaks = tmpKMeansBreaks.sort((a, b) => a - b);\n        limits.push(tmpKMeansBreaks[0]);\n        for (let i = 1; i < tmpKMeansBreaks.length; i += 2) {\n            const v = tmpKMeansBreaks[i];\n            if (!isNaN(v) && limits.indexOf(v) === -1) {\n                limits.push(v);\n            }\n        }\n    }\n    return limits;\n}\n","import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\n/**\n * @license\n *\n * The APCA contrast prediction algorithm is based of the formulas published\n * in the APCA-1.0.98G specification by Myndex. The specification is available at:\n * https://raw.githubusercontent.com/Myndex/apca-w3/master/images/APCAw3_0.1.17_APCA0.0.98G.svg\n *\n * Note that the APCA implementation is still beta, so please update to\n * future versions of chroma.js when they become available.\n *\n * You can read more about the APCA Readability Criterion at\n * https://readtech.org/ARC/\n */\n\n// constants\nconst W_offset = 0.027;\nconst P_in = 0.0005;\nconst P_out = 0.1;\nconst R_scale = 1.14;\nconst B_threshold = 0.022;\nconst B_exp = 1.414;\n\nexport default (text, bg) => {\n    // parse input colors\n    text = new Color(text);\n    bg = new Color(bg);\n    // if text color has alpha, blend against background\n    if (text.alpha() < 1) {\n        text = mix(bg, text, text.alpha(), 'rgb');\n    }\n    const l_text = lum(...text.rgb());\n    const l_bg = lum(...bg.rgb());\n\n    // soft clamp black levels\n    const Y_text =\n        l_text >= B_threshold\n            ? l_text\n            : l_text + Math.pow(B_threshold - l_text, B_exp);\n    const Y_bg =\n        l_bg >= B_threshold ? l_bg : l_bg + Math.pow(B_threshold - l_bg, B_exp);\n\n    // normal polarity (dark text on light background)\n    const S_norm = Math.pow(Y_bg, 0.56) - Math.pow(Y_text, 0.57);\n    // reverse polarity (light text on dark background)\n    const S_rev = Math.pow(Y_bg, 0.65) - Math.pow(Y_text, 0.62);\n    // clamp noise then scale\n    const C =\n        Math.abs(Y_bg - Y_text) < P_in\n            ? 0\n            : Y_text < Y_bg\n              ? S_norm * R_scale\n              : S_rev * R_scale;\n    // clamp minimum contrast then offset\n    const S_apc = Math.abs(C) < P_out ? 0 : C > 0 ? C - W_offset : C + W_offset;\n    // scale to 100\n    return S_apc * 100;\n};\n\nfunction lum(r, g, b) {\n    return (\n        0.2126729 * Math.pow(r / 255, 2.4) +\n        0.7151522 * Math.pow(g / 255, 2.4) +\n        0.072175 * Math.pow(b / 255, 2.4)\n    );\n}\n","import Color from '../Color.js';\nconst { sqrt, pow, min, max, atan2, abs, cos, sin, exp, PI } = Math;\n\nexport default function (a, b, Kl = 1, Kc = 1, Kh = 1) {\n    // Delta E (CIE 2000)\n    // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CIE2000.html\n    var rad2deg = function (rad) {\n        return (360 * rad) / (2 * PI);\n    };\n    var deg2rad = function (deg) {\n        return (2 * PI * deg) / 360;\n    };\n    a = new Color(a);\n    b = new Color(b);\n    const [L1, a1, b1] = Array.from(a.lab());\n    const [L2, a2, b2] = Array.from(b.lab());\n    const avgL = (L1 + L2) / 2;\n    const C1 = sqrt(pow(a1, 2) + pow(b1, 2));\n    const C2 = sqrt(pow(a2, 2) + pow(b2, 2));\n    const avgC = (C1 + C2) / 2;\n    const G = 0.5 * (1 - sqrt(pow(avgC, 7) / (pow(avgC, 7) + pow(25, 7))));\n    const a1p = a1 * (1 + G);\n    const a2p = a2 * (1 + G);\n    const C1p = sqrt(pow(a1p, 2) + pow(b1, 2));\n    const C2p = sqrt(pow(a2p, 2) + pow(b2, 2));\n    const avgCp = (C1p + C2p) / 2;\n    const arctan1 = rad2deg(atan2(b1, a1p));\n    const arctan2 = rad2deg(atan2(b2, a2p));\n    const h1p = arctan1 >= 0 ? arctan1 : arctan1 + 360;\n    const h2p = arctan2 >= 0 ? arctan2 : arctan2 + 360;\n    const avgHp =\n        abs(h1p - h2p) > 180 ? (h1p + h2p + 360) / 2 : (h1p + h2p) / 2;\n    const T =\n        1 -\n        0.17 * cos(deg2rad(avgHp - 30)) +\n        0.24 * cos(deg2rad(2 * avgHp)) +\n        0.32 * cos(deg2rad(3 * avgHp + 6)) -\n        0.2 * cos(deg2rad(4 * avgHp - 63));\n    let deltaHp = h2p - h1p;\n    deltaHp =\n        abs(deltaHp) <= 180\n            ? deltaHp\n            : h2p <= h1p\n              ? deltaHp + 360\n              : deltaHp - 360;\n    deltaHp = 2 * sqrt(C1p * C2p) * sin(deg2rad(deltaHp) / 2);\n    const deltaL = L2 - L1;\n    const deltaCp = C2p - C1p;\n    const sl = 1 + (0.015 * pow(avgL - 50, 2)) / sqrt(20 + pow(avgL - 50, 2));\n    const sc = 1 + 0.045 * avgCp;\n    const sh = 1 + 0.015 * avgCp * T;\n    const deltaTheta = 30 * exp(-pow((avgHp - 275) / 25, 2));\n    const Rc = 2 * sqrt(pow(avgCp, 7) / (pow(avgCp, 7) + pow(25, 7)));\n    const Rt = -Rc * sin(2 * deg2rad(deltaTheta));\n    const result = sqrt(\n        pow(deltaL / (Kl * sl), 2) +\n            pow(deltaCp / (Kc * sc), 2) +\n            pow(deltaHp / (Kh * sh), 2) +\n            Rt * (deltaCp / (Kc * sc)) * (deltaHp / (Kh * sh))\n    );\n    return max(0, min(100, result));\n}\n","import Color from '../Color.js';\n\nexport default (...args) => {\n    try {\n        new Color(...args);\n        return true;\n        // eslint-disable-next-line\n    } catch (e) {\n        return false;\n    }\n};\n","// some pre-defined color scales:\nimport chroma from '../chroma.js';\nimport '../io/hsl/index.js';\nimport scale from '../generator/scale.js';\n\nexport default {\n    cool() {\n        return scale([chroma.hsl(180, 1, 0.9), chroma.hsl(250, 0.7, 0.4)]);\n    },\n    hot() {\n        return scale(['#000', '#f00', '#ff0', '#fff'], [0, 0.25, 0.75, 1]).mode(\n            'rgb'\n        );\n    }\n};\n","/**\n    ColorBrewer colors for chroma.js\n\n    Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The\n    Pennsylvania State University.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software distributed\n    under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n    CONDITIONS OF ANY KIND, either express or implied. See the License for the\n    specific language governing permissions and limitations under the License.\n*/\n\nconst colorbrewer = {\n    // sequential\n    OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],\n    PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],\n    BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],\n    Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],\n    BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],\n    YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],\n    YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],\n    Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],\n    RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],\n    Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],\n    YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],\n    Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],\n    GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],\n    Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],\n    YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],\n    PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],\n    Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],\n    PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],\n    Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],\n\n    // diverging\n    Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],\n    RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],\n    RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],\n    PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],\n    PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],\n    RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],\n    BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],\n    RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],\n    PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],\n\n    // qualitative\n    Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],\n    Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],\n    Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],\n    Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],\n    Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],\n    Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],\n    Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],\n    Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']\n};\n\nconst colorbrewerTypes = Object.keys(colorbrewer);\nconst typeMap = new Map(colorbrewerTypes.map((key) => [key.toLowerCase(), key]));\n\n// use Proxy to allow case-insensitive access to palettes\nconst colorbrewerProxy =\n    typeof Proxy === 'function'\n        ? new Proxy(colorbrewer, {\n              get(target, prop) {\n                  const lower = prop.toLowerCase();\n                  if (typeMap.has(lower)) {\n                      return target[typeMap.get(lower)];\n                  }\n              },\n              getOwnPropertyNames() {\n                  return Object.getOwnPropertyNames(colorbrewerTypes);\n              }\n          })\n        : colorbrewer;\n\nexport default colorbrewerProxy;\n","import { unpack } from '../../utils/index.js';\nconst { max } = Math;\n\nconst rgb2cmyk = (...args) => {\n    let [r, g, b] = unpack(args, 'rgb');\n    r = r / 255;\n    g = g / 255;\n    b = b / 255;\n    const k = 1 - max(r, max(g, b));\n    const f = k < 1 ? 1 / (1 - k) : 0;\n    const c = (1 - r - k) * f;\n    const m = (1 - g - k) * f;\n    const y = (1 - b - k) * f;\n    return [c, m, y, k];\n};\n\nexport default rgb2cmyk;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nimport cmyk2rgb from './cmyk2rgb.js';\nimport rgb2cmyk from './rgb2cmyk.js';\n\nColor.prototype.cmyk = function () {\n    return rgb2cmyk(this._rgb);\n};\n\nconst cmyk = (...args) => new Color(...args, 'cmyk');\nObject.assign(chroma, { cmyk });\n\ninput.format.cmyk = cmyk2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'cmyk');\n        if (type(args) === 'array' && args.length === 4) {\n            return 'cmyk';\n        }\n    }\n});\n\nexport { cmyk };\n","import { unpack } from '../../utils/index.js';\n\nconst cmyk2rgb = (...args) => {\n    args = unpack(args, 'cmyk');\n    const [c, m, y, k] = args;\n    const alpha = args.length > 4 ? args[4] : 1;\n    if (k === 1) return [0, 0, 0, alpha];\n    return [\n        c >= 1 ? 0 : 255 * (1 - c) * (1 - k), // r\n        m >= 1 ? 0 : 255 * (1 - m) * (1 - k), // g\n        y >= 1 ? 0 : 255 * (1 - y) * (1 - k), // b\n        alpha\n    ];\n};\n\nexport default cmyk2rgb;\n","import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - hsl2css(h,s,l)\n * - hsl2css(h,s,l,a)\n * - hsl2css([h,s,l], mode)\n * - hsl2css([h,s,l,a], mode)\n * - hsl2css({h,s,l,a}, mode)\n */\nconst hsl2css = (...args) => {\n    const hsla = unpack(args, 'hsla');\n    let mode = last(args) || 'lsa';\n    hsla[0] = rnd2(hsla[0] || 0) + 'deg';\n    hsla[1] = rnd2(hsla[1] * 100) + '%';\n    hsla[2] = rnd2(hsla[2] * 100) + '%';\n    if (mode === 'hsla' || (hsla.length > 3 && hsla[3] < 1)) {\n        hsla[3] = '/ ' + (hsla.length > 3 ? hsla[3] : 1);\n        mode = 'hsla';\n    } else {\n        hsla.length = 3;\n    }\n    return `${mode.substr(0, 3)}(${hsla.join(' ')})`;\n};\n\nexport default hsl2css;\n","import { unpack } from '../../utils/index.js';\nimport rgb2oklab from '../oklab/rgb2oklab.js';\nimport lab2lch from '../lch/lab2lch.js';\n\nconst rgb2oklch = (...args) => {\n    const [r, g, b, ...rest] = unpack(args, 'rgb');\n    const [l, a, b_] = rgb2oklab(r, g, b);\n    const [L, c, h] = lab2lch(l, a, b_);\n    return [L, c, h, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default rgb2oklch;\n","import { unpack, last } from '../../utils/index.js';\nimport hsl2css from './hsl2css.js';\nimport rgb2hsl from '../hsl/rgb2hsl.js';\nimport lab2css from './lab2css.js';\nimport rgb2lab from '../lab/rgb2lab.js';\nimport lch2css from './lch2css.js';\nimport rgb2lch from '../lch/rgb2lch.js';\nimport rgb2oklab from '../oklab/rgb2oklab.js';\nimport oklab2css from './oklab2css.js';\nimport rgb2oklch from '../oklch/rgb2oklch.js';\nimport oklch2css from './oklch2css.js';\nimport { getLabWhitePoint, setLabWhitePoint } from '../lab/lab-constants.js';\nconst { round } = Math;\n\n/*\n * supported arguments:\n * - rgb2css(r,g,b)\n * - rgb2css(r,g,b,a)\n * - rgb2css([r,g,b], mode)\n * - rgb2css([r,g,b,a], mode)\n * - rgb2css({r,g,b,a}, mode)\n */\nconst rgb2css = (...args) => {\n    const rgba = unpack(args, 'rgba');\n    let mode = last(args) || 'rgb';\n    if (mode.substr(0, 3) === 'hsl') {\n        return hsl2css(rgb2hsl(rgba), mode);\n    }\n    if (mode.substr(0, 3) === 'lab') {\n        // change to D50 lab whitepoint since this is what W3C is using for CSS Lab colors\n        const prevWhitePoint = getLabWhitePoint();\n        setLabWhitePoint('d50');\n        const cssColor = lab2css(rgb2lab(rgba), mode);\n        setLabWhitePoint(prevWhitePoint);\n        return cssColor;\n    }\n    if (mode.substr(0, 3) === 'lch') {\n        // change to D50 lab whitepoint since this is what W3C is using for CSS Lab colors\n        const prevWhitePoint = getLabWhitePoint();\n        setLabWhitePoint('d50');\n        const cssColor = lch2css(rgb2lch(rgba), mode);\n        setLabWhitePoint(prevWhitePoint);\n        return cssColor;\n    }\n    if (mode.substr(0, 5) === 'oklab') {\n        return oklab2css(rgb2oklab(rgba));\n    }\n    if (mode.substr(0, 5) === 'oklch') {\n        return oklch2css(rgb2oklch(rgba));\n    }\n    rgba[0] = round(rgba[0]);\n    rgba[1] = round(rgba[1]);\n    rgba[2] = round(rgba[2]);\n    if (mode === 'rgba' || (rgba.length > 3 && rgba[3] < 1)) {\n        rgba[3] = '/ ' + (rgba.length > 3 ? rgba[3] : 1);\n        mode = 'rgba';\n    }\n    return `${mode.substr(0, 3)}(${rgba.slice(0, mode === 'rgb' ? 3 : 4).join(' ')})`;\n};\n\nexport default rgb2css;\n","import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - lab2css(l,a,b)\n * - lab2css(l,a,b,alpha)\n * - lab2css([l,a,b], mode)\n * - lab2css([l,a,b,alpha], mode)\n */\nconst lab2css = (...args) => {\n    const laba = unpack(args, 'lab');\n    let mode = last(args) || 'lab';\n    laba[0] = rnd2(laba[0]) + '%';\n    laba[1] = rnd2(laba[1]);\n    laba[2] = rnd2(laba[2]);\n    if (mode === 'laba' || (laba.length > 3 && laba[3] < 1)) {\n        laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);\n    } else {\n        laba.length = 3;\n    }\n    return `lab(${laba.join(' ')})`;\n};\n\nexport default lab2css;\n","import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - lab2css(l,a,b)\n * - lab2css(l,a,b,alpha)\n * - lab2css([l,a,b], mode)\n * - lab2css([l,a,b,alpha], mode)\n */\nconst lch2css = (...args) => {\n    const lcha = unpack(args, 'lch');\n    let mode = last(args) || 'lab';\n    lcha[0] = rnd2(lcha[0]) + '%';\n    lcha[1] = rnd2(lcha[1]);\n    lcha[2] = isNaN(lcha[2]) ? 'none' : rnd2(lcha[2]) + 'deg'; // add deg unit to hue\n    if (mode === 'lcha' || (lcha.length > 3 && lcha[3] < 1)) {\n        lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);\n    } else {\n        lcha.length = 3;\n    }\n    return `lch(${lcha.join(' ')})`;\n};\n\nexport default lch2css;\n","import { unpack, rnd2, rnd3 } from '../../utils/index.js';\n\nconst oklab2css = (...args) => {\n    const laba = unpack(args, 'lab');\n    laba[0] = rnd2(laba[0] * 100) + '%';\n    laba[1] = rnd3(laba[1]);\n    laba[2] = rnd3(laba[2]);\n    if (laba.length > 3 && laba[3] < 1) {\n        laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);\n    } else {\n        laba.length = 3;\n    }\n    return `oklab(${laba.join(' ')})`;\n};\n\nexport default oklab2css;\n","import { unpack, rnd2, rnd3 } from '../../utils/index.js';\n\nconst oklch2css = (...args) => {\n    const lcha = unpack(args, 'lch');\n    lcha[0] = rnd2(lcha[0] * 100) + '%';\n    lcha[1] = rnd3(lcha[1]);\n    lcha[2] = isNaN(lcha[2]) ? 'none' : rnd2(lcha[2]) + 'deg'; // add deg unit to hue\n    if (lcha.length > 3 && lcha[3] < 1) {\n        lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);\n    } else {\n        lcha.length = 3;\n    }\n    return `oklch(${lcha.join(' ')})`;\n};\n\nexport default oklch2css;\n","import { unpack } from '../../utils/index.js';\nimport lch2lab from '../lch/lch2lab.js';\nimport oklab2rgb from '../oklab/oklab2rgb.js';\n\nconst oklch2rgb = (...args) => {\n    args = unpack(args, 'lch');\n    const [l, c, h, ...rest] = args;\n    const [L, a, b_] = lch2lab(l, c, h);\n    const [r, g, b] = oklab2rgb(L, a, b_);\n    return [r, g, b, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default oklch2rgb;\n","import hsl2rgb from '../hsl/hsl2rgb.js';\nimport lab2rgb from '../lab/lab2rgb.js';\nimport lch2rgb from '../lch/lch2rgb.js';\nimport oklab2rgb from '../oklab/oklab2rgb.js';\nimport oklch2rgb from '../oklch/oklch2rgb.js';\nimport input from '../input.js';\nimport limit from '../../utils/limit.js';\nimport { getLabWhitePoint, setLabWhitePoint } from '../lab/lab-constants.js';\n\nconst INT_OR_PCT = /((?:-?\\d+)|(?:-?\\d+(?:\\.\\d+)?)%|none)/.source;\nconst FLOAT_OR_PCT = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)%?)|none)/.source;\nconst PCT = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)%)|none)/.source;\nconst RE_S = /\\s*/.source;\nconst SEP = /\\s+/.source;\nconst COMMA = /\\s*,\\s*/.source;\nconst ANLGE = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:deg)?)|none)/.source;\nconst ALPHA = /\\s*(?:\\/\\s*((?:[01]|[01]?\\.\\d+)|\\d+(?:\\.\\d+)?%))?/.source;\n\n// e.g. rgb(250 20 0), rgb(100% 50% 20%), rgb(100% 50% 20% / 0.5)\nconst RE_RGB = new RegExp(\n    '^rgba?\\\\(' +\n        RE_S +\n        [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT].join(SEP) +\n        ALPHA +\n        '\\\\)$'\n);\nconst RE_RGB_LEGACY = new RegExp(\n    '^rgb\\\\(' +\n        RE_S +\n        [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT].join(COMMA) +\n        RE_S +\n        '\\\\)$'\n);\nconst RE_RGBA_LEGACY = new RegExp(\n    '^rgba\\\\(' +\n        RE_S +\n        [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT, FLOAT_OR_PCT].join(COMMA) +\n        RE_S +\n        '\\\\)$'\n);\n\nconst RE_HSL = new RegExp(\n    '^hsla?\\\\(' + RE_S + [ANLGE, PCT, PCT].join(SEP) + ALPHA + '\\\\)$'\n);\nconst RE_HSL_LEGACY = new RegExp(\n    '^hsl?\\\\(' + RE_S + [ANLGE, PCT, PCT].join(COMMA) + RE_S + '\\\\)$'\n);\nconst RE_HSLA_LEGACY =\n    /^hsla\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n\nconst RE_LAB = new RegExp(\n    '^lab\\\\(' +\n        RE_S +\n        [FLOAT_OR_PCT, FLOAT_OR_PCT, FLOAT_OR_PCT].join(SEP) +\n        ALPHA +\n        '\\\\)$'\n);\nconst RE_LCH = new RegExp(\n    '^lch\\\\(' +\n        RE_S +\n        [FLOAT_OR_PCT, FLOAT_OR_PCT, ANLGE].join(SEP) +\n        ALPHA +\n        '\\\\)$'\n);\nconst RE_OKLAB = new RegExp(\n    '^oklab\\\\(' +\n        RE_S +\n        [FLOAT_OR_PCT, FLOAT_OR_PCT, FLOAT_OR_PCT].join(SEP) +\n        ALPHA +\n        '\\\\)$'\n);\nconst RE_OKLCH = new RegExp(\n    '^oklch\\\\(' +\n        RE_S +\n        [FLOAT_OR_PCT, FLOAT_OR_PCT, ANLGE].join(SEP) +\n        ALPHA +\n        '\\\\)$'\n);\n\nconst { round } = Math;\n\nconst roundRGB = (rgb) => {\n    return rgb.map((v, i) => (i <= 2 ? limit(round(v), 0, 255) : v));\n};\n\nconst percentToAbsolute = (pct, min = 0, max = 100, signed = false) => {\n    if (typeof pct === 'string' && pct.endsWith('%')) {\n        pct = parseFloat(pct.substring(0, pct.length - 1)) / 100;\n        if (signed) {\n            // signed percentages are in the range -100% to 100%\n            pct = min + (pct + 1) * 0.5 * (max - min);\n        } else {\n            pct = min + pct * (max - min);\n        }\n    }\n    return +pct;\n};\n\nconst noneToValue = (v, noneValue) => {\n    return v === 'none' ? noneValue : v;\n};\n\nconst css2rgb = (css) => {\n    css = css.toLowerCase().trim();\n\n    if (css === 'transparent') {\n        return [0, 0, 0, 0];\n    }\n\n    let m;\n\n    if (input.format.named) {\n        try {\n            return input.format.named(css);\n            // eslint-disable-next-line\n        } catch (e) {}\n    }\n\n    // rgb(250 20 0) or rgb(250,20,0)\n    if ((m = css.match(RE_RGB)) || (m = css.match(RE_RGB_LEGACY))) {\n        let rgb = m.slice(1, 4);\n        for (let i = 0; i < 3; i++) {\n            rgb[i] = +percentToAbsolute(noneToValue(rgb[i], 0), 0, 255);\n        }\n        rgb = roundRGB(rgb);\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha; // default alpha\n        return rgb;\n    }\n\n    // rgba(250,20,0,0.4)\n    if ((m = css.match(RE_RGBA_LEGACY))) {\n        const rgb = m.slice(1, 5);\n        for (let i = 0; i < 4; i++) {\n            rgb[i] = +percentToAbsolute(rgb[i], 0, 255);\n        }\n        return rgb;\n    }\n\n    // hsl(0,100%,50%)\n    if ((m = css.match(RE_HSL)) || (m = css.match(RE_HSL_LEGACY))) {\n        const hsl = m.slice(1, 4);\n        hsl[0] = +noneToValue(hsl[0].replace('deg', ''), 0);\n        hsl[1] = +percentToAbsolute(noneToValue(hsl[1], 0), 0, 100) * 0.01;\n        hsl[2] = +percentToAbsolute(noneToValue(hsl[2], 0), 0, 100) * 0.01;\n        const rgb = roundRGB(hsl2rgb(hsl));\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha;\n        return rgb;\n    }\n\n    // hsla(0,100%,50%,0.5)\n    if ((m = css.match(RE_HSLA_LEGACY))) {\n        const hsl = m.slice(1, 4);\n        hsl[1] *= 0.01;\n        hsl[2] *= 0.01;\n        const rgb = hsl2rgb(hsl);\n        for (let i = 0; i < 3; i++) {\n            rgb[i] = round(rgb[i]);\n        }\n        rgb[3] = +m[4]; // default alpha = 1\n        return rgb;\n    }\n\n    if ((m = css.match(RE_LAB))) {\n        const lab = m.slice(1, 4);\n        lab[0] = percentToAbsolute(noneToValue(lab[0], 0), 0, 100);\n        lab[1] = percentToAbsolute(noneToValue(lab[1], 0), -125, 125, true);\n        lab[2] = percentToAbsolute(noneToValue(lab[2], 0), -125, 125, true);\n        // convert to D50 Lab whitepoint\n        const wp = getLabWhitePoint();\n        setLabWhitePoint('d50');\n        const rgb = roundRGB(lab2rgb(lab));\n        // convert back to original Lab whitepoint\n        setLabWhitePoint(wp);\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha;\n        return rgb;\n    }\n\n    if ((m = css.match(RE_LCH))) {\n        const lch = m.slice(1, 4);\n        lch[0] = percentToAbsolute(lch[0], 0, 100);\n        lch[1] = percentToAbsolute(noneToValue(lch[1], 0), 0, 150, false);\n        lch[2] = +noneToValue(lch[2].replace('deg', ''), 0);\n        // convert to D50 Lab whitepoint\n        const wp = getLabWhitePoint();\n        setLabWhitePoint('d50');\n        const rgb = roundRGB(lch2rgb(lch));\n        // convert back to original Lab whitepoint\n        setLabWhitePoint(wp);\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha;\n        return rgb;\n    }\n\n    if ((m = css.match(RE_OKLAB))) {\n        const oklab = m.slice(1, 4);\n        oklab[0] = percentToAbsolute(noneToValue(oklab[0], 0), 0, 1);\n        oklab[1] = percentToAbsolute(noneToValue(oklab[1], 0), -0.4, 0.4, true);\n        oklab[2] = percentToAbsolute(noneToValue(oklab[2], 0), -0.4, 0.4, true);\n        const rgb = roundRGB(oklab2rgb(oklab));\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha;\n        return rgb;\n    }\n\n    if ((m = css.match(RE_OKLCH))) {\n        const oklch = m.slice(1, 4);\n        oklch[0] = percentToAbsolute(noneToValue(oklch[0], 0), 0, 1);\n        oklch[1] = percentToAbsolute(noneToValue(oklch[1], 0), 0, 0.4, false);\n        oklch[2] = +noneToValue(oklch[2].replace('deg', ''), 0);\n        const rgb = roundRGB(oklch2rgb(oklch));\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha;\n        return rgb;\n    }\n};\n\ncss2rgb.test = (s) => {\n    return (\n        // modern\n        RE_RGB.test(s) ||\n        RE_HSL.test(s) ||\n        RE_LAB.test(s) ||\n        RE_LCH.test(s) ||\n        RE_OKLAB.test(s) ||\n        RE_OKLCH.test(s) ||\n        // legacy\n        RE_RGB_LEGACY.test(s) ||\n        RE_RGBA_LEGACY.test(s) ||\n        RE_HSL_LEGACY.test(s) ||\n        RE_HSLA_LEGACY.test(s) ||\n        s === 'transparent'\n    );\n};\n\nexport default css2rgb;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport rgb2css from './rgb2css.js';\nimport css2rgb from './css2rgb.js';\n\nColor.prototype.css = function (mode) {\n    return rgb2css(this._rgb, mode);\n};\n\nconst css = (...args) => new Color(...args, 'css');\nchroma.css = css;\n\ninput.format.css = css2rgb;\n\ninput.autodetect.push({\n    p: 5,\n    test: (h, ...rest) => {\n        if (!rest.length && type(h) === 'string' && css2rgb.test(h)) {\n            return 'css';\n        }\n    }\n});\n\nexport { css };\n","import Color from '../../Color.js';\nimport chroma from '../../chroma.js';\nimport input from '../input.js';\nimport { unpack } from '../../utils/index.js';\n\ninput.format.gl = (...args) => {\n    const rgb = unpack(args, 'rgba');\n    rgb[0] *= 255;\n    rgb[1] *= 255;\n    rgb[2] *= 255;\n    return rgb;\n};\n\nconst gl = (...args) => new Color(...args, 'gl');\nchroma.gl = gl;\n\nColor.prototype.gl = function () {\n    const rgb = this._rgb;\n    return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];\n};\n\nexport { gl };\n","import Color from '../../Color.js';\nimport chroma from '../../chroma.js';\nimport { type } from '../../utils/index.js';\nimport input from '../input.js';\nimport hex2rgb from './hex2rgb.js';\nimport rgb2hex from './rgb2hex.js';\n\nColor.prototype.hex = function (mode) {\n    return rgb2hex(this._rgb, mode);\n};\n\nconst hex = (...args) => new Color(...args, 'hex');\nchroma.hex = hex;\n\ninput.format.hex = hex2rgb;\ninput.autodetect.push({\n    p: 4,\n    test: (h, ...rest) => {\n        if (\n            !rest.length &&\n            type(h) === 'string' &&\n            [3, 4, 5, 6, 7, 8, 9].indexOf(h.length) >= 0\n        ) {\n            return 'hex';\n        }\n    }\n});\n\nexport { hex };\n","/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n */\n\nconst { log } = Math;\n\nconst temperature2rgb = (kelvin) => {\n    const temp = kelvin / 100;\n    let r, g, b;\n    if (temp < 66) {\n        r = 255;\n        g =\n            temp < 6\n                ? 0\n                : -155.25485562709179 -\n                  0.44596950469579133 * (g = temp - 2) +\n                  104.49216199393888 * log(g);\n        b =\n            temp < 20\n                ? 0\n                : -254.76935184120902 +\n                  0.8274096064007395 * (b = temp - 10) +\n                  115.67994401066147 * log(b);\n    } else {\n        r =\n            351.97690566805693 +\n            0.114206453784165 * (r = temp - 55) -\n            40.25366309332127 * log(r);\n        g =\n            325.4494125711974 +\n            0.07943456536662342 * (g = temp - 50) -\n            28.0852963507957 * log(g);\n        b = 255;\n    }\n    return [r, g, b, 1];\n};\n\nexport default temperature2rgb;\n","/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n **/\n\nimport temperature2rgb from './temperature2rgb.js';\nimport { unpack } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2temperature = (...args) => {\n    const rgb = unpack(args, 'rgb');\n    const r = rgb[0],\n        b = rgb[2];\n    let minTemp = 1000;\n    let maxTemp = 40000;\n    const eps = 0.4;\n    let temp;\n    while (maxTemp - minTemp > eps) {\n        temp = (maxTemp + minTemp) * 0.5;\n        const rgb = temperature2rgb(temp);\n        if (rgb[2] / rgb[0] >= b / r) {\n            maxTemp = temp;\n        } else {\n            minTemp = temp;\n        }\n    }\n    return round(temp);\n};\n\nexport default rgb2temperature;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport temperature2rgb from './temperature2rgb.js';\nimport rgb2temperature from './rgb2temperature.js';\n\nColor.prototype.temp =\n    Color.prototype.kelvin =\n    Color.prototype.temperature =\n        function () {\n            return rgb2temperature(this._rgb);\n        };\n\nconst temp = (...args) => new Color(...args, 'temp');\nObject.assign(chroma, { temp, kelvin: temp, temperature: temp });\n\ninput.format.temp =\n    input.format.kelvin =\n    input.format.temperature =\n        temperature2rgb;\n\nexport { temp, temp as kelvin, temp as temperature };\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklch2rgb from './oklch2rgb.js';\nimport rgb2oklch from './rgb2oklch.js';\n\nColor.prototype.oklch = function () {\n    return rgb2oklch(this._rgb);\n};\n\nconst oklch = (...args) => new Color(...args, 'oklch');\nObject.assign(chroma, { oklch });\n\ninput.format.oklch = oklch2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'oklch');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'oklch';\n        }\n    }\n});\n\nexport { oklch };\n","import { matrixBoxPlot } from 'ml-spectra-processing';\nexport function getBoxPlotData(normalizedData) {\n    return {\n        x: normalizedData.x,\n        ...matrixBoxPlot(normalizedData.matrix),\n    };\n}\n//# sourceMappingURL=getBoxPlotData.js.map","import chroma from 'chroma-js';\nimport { Matrix } from 'ml-matrix';\nimport { xMinMaxValues } from 'ml-spectra-processing';\nimport { getBoxPlotData } from '../spectra/getBoxPlotData.js';\n/**\n * Get box plot chart from normalized data\n * @param normalizedData - Normalized data with x and matrix\n * @param options - Chart styling options\n * @returns Color spectrum chart object\n */\nexport function getBoxPlotChart(normalizedData, options = {}) {\n    const { q13FillColor = '#000', q13FillOpacity = 0.3, medianStrokeColor = '', medianStrokeWidth = 3, minMaxFillColor = '#000', minMaxFillOpacity = 0.15, } = options;\n    const annotations = [];\n    const boxPlotData = getBoxPlotData(normalizedData);\n    if (q13FillOpacity && q13FillColor) {\n        const q13 = [];\n        for (let i = 0; i < boxPlotData.x.length; i++) {\n            q13.push({\n                x: boxPlotData.x[i],\n                y: boxPlotData.q1[i],\n            });\n        }\n        for (let i = boxPlotData.x.length - 1; i >= 0; i--) {\n            q13.push({\n                x: boxPlotData.x[i],\n                y: boxPlotData.q3[i],\n            });\n        }\n        annotations.push({\n            type: 'polygon',\n            layer: 0,\n            properties: {\n                fillColor: q13FillColor,\n                fillOpacity: q13FillOpacity,\n                strokeWidth: 0.0000001,\n                position: q13,\n            },\n        });\n    }\n    if (minMaxFillColor && minMaxFillOpacity) {\n        const minMax = [];\n        for (let i = 0; i < boxPlotData.x.length; i++) {\n            minMax.push({\n                x: boxPlotData.x[i],\n                y: boxPlotData.min[i],\n            });\n        }\n        for (let i = boxPlotData.x.length - 1; i >= 0; i--) {\n            minMax.push({\n                x: boxPlotData.x[i],\n                y: boxPlotData.max[i],\n            });\n        }\n        annotations.push({\n            type: 'polygon',\n            layer: 0,\n            properties: {\n                fillColor: minMaxFillColor,\n                fillOpacity: minMaxFillOpacity,\n                strokeWidth: 0.0000001,\n                strokeColor: '#FFF',\n                position: minMax,\n            },\n        });\n    }\n    const colorSpectrum = {\n        type: 'color',\n        data: {\n            x: boxPlotData.x,\n            y: boxPlotData.median,\n            color: medianStrokeColor\n                ? new Array(boxPlotData.x.length).fill(medianStrokeColor)\n                : getColors(normalizedData.matrix),\n        },\n        styles: {\n            unselected: {\n                lineWidth: medianStrokeWidth,\n                lineStyle: 1,\n            },\n            selected: {\n                lineWidth: medianStrokeWidth,\n                lineStyle: 1,\n            },\n        },\n        annotations,\n    };\n    return colorSpectrum;\n}\nfunction getColors(dataset) {\n    const matrix = new Matrix(dataset);\n    const stdevs = matrix.standardDeviation('column');\n    const { min, max } = xMinMaxValues(stdevs);\n    // eslint-disable-next-line import/no-named-as-default-member\n    const colorCallback = chroma\n        .scale(['blue', 'cyan', 'yellow', 'red'])\n        .domain([min, max])\n        .mode('lch');\n    const colors = stdevs.map((y) => `rgb(${colorCallback(y).rgb().join(',')})`);\n    return colors;\n}\n//# sourceMappingURL=getBoxPlotChart.js.map","/**\n * Add chart data styling based on spectrum metadata\n * @param data - Data object to style\n * @param spectrum - Spectrum with metadata\n */\nexport function addChartDataStyle(data, spectrum) {\n    data.styles = {\n        unselected: {\n            lineColor: spectrum.meta.color || 'darkgrey',\n            lineWidth: 1,\n            lineStyle: 1,\n        },\n        selected: {\n            lineColor: spectrum.meta.color || 'darkgrey',\n            lineWidth: 3,\n            lineStyle: 1,\n        },\n    };\n    data.label = spectrum.meta.id || String(spectrum.id);\n}\n//# sourceMappingURL=addChartDataStyle.js.map","/**\n * Get normalized data from spectra\n * @param spectra - Array of spectrum objects\n * @param options - Options for filtering spectra\n * @returns Normalized data with ids, matrix, meta, and x values\n */\nexport function getNormalizedData(spectra, options = {}) {\n    const { ids } = options;\n    const matrix = [];\n    const meta = [];\n    const currentIDs = [];\n    let x = [];\n    if (Array.isArray(spectra) && spectra.length > 0) {\n        for (const spectrum of spectra) {\n            if (!ids || ids.includes(spectrum.id)) {\n                currentIDs.push(spectrum.id);\n                matrix.push(spectrum.normalized.y);\n                meta.push(spectrum.meta);\n            }\n        }\n        x = spectra[0].normalized.x;\n    }\n    return { ids: currentIDs, matrix, meta, x };\n}\n//# sourceMappingURL=getNormalizedData.js.map","/**\n * Get statistics about categories in metadata\n * @param metadata - Array of metadata objects\n * @param options - Options for categorization\n * @returns Object with category statistics\n */\nexport function getCategoriesStats(metadata, options = {}) {\n    const { propertyName = 'category' } = options;\n    const categories = {};\n    let classNumber = 0;\n    for (const metadatum of metadata) {\n        const value = metadatum[propertyName];\n        if (!categories[value]) {\n            categories[value] = {\n                classNumber: classNumber++,\n                counter: 0,\n            };\n        }\n        categories[value].counter++;\n    }\n    return categories;\n}\n//# sourceMappingURL=getCategoriesStats.js.map","import isutf8 from 'isutf8';\n/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        const { encoding = guessEncoding(blob) } = options;\n        const decoder = new TextDecoder(encoding);\n        return decoder.decode(blob);\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction guessEncoding(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return 'utf-16be';\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return 'utf-16le';\n        }\n    }\n    //@ts-expect-error an ArrayBuffer is also ok\n    if (!isutf8(blob))\n        return 'latin1';\n    return 'utf-8';\n}\n//# sourceMappingURL=index.js.map","/*\n    https://tools.ietf.org/html/rfc3629\n\n    UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4\n\n    UTF8-1    = %x00-7F\n\n    UTF8-2    = %xC2-DF UTF8-tail\n\n    UTF8-3    = %xE0 %xA0-BF UTF8-tail\n                %xE1-EC 2( UTF8-tail )\n                %xED %x80-9F UTF8-tail\n                %xEE-EF 2( UTF8-tail )\n\n    UTF8-4    = %xF0 %x90-BF 2( UTF8-tail )\n                %xF1-F3 3( UTF8-tail )\n                %xF4 %x80-8F 2( UTF8-tail )\n\n    UTF8-tail = %x80-BF\n*/\n/**\n * Check if a Node.js Buffer or Uint8Array is UTF-8.\n */\nfunction isUtf8(buf) {\n    if (!buf) {\n        return false;\n    }\n    var i = 0;\n    var len = buf.length;\n    while (i < len) {\n        // UTF8-1 = %x00-7F\n        if (buf[i] <= 0x7F) {\n            i++;\n            continue;\n        }\n        // UTF8-2 = %xC2-DF UTF8-tail\n        if (buf[i] >= 0xC2 && buf[i] <= 0xDF) {\n            // if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n            if (buf[i + 1] >> 6 === 2) {\n                i += 2;\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        // UTF8-3 = %xE0 %xA0-BF UTF8-tail\n        // UTF8-3 = %xED %x80-9F UTF8-tail\n        if (((buf[i] === 0xE0 && buf[i + 1] >= 0xA0 && buf[i + 1] <= 0xBF) ||\n            (buf[i] === 0xED && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x9F)) && buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-3 = %xE1-EC 2( UTF8-tail )\n        // UTF8-3 = %xEE-EF 2( UTF8-tail )\n        if (((buf[i] >= 0xE1 && buf[i] <= 0xEC) ||\n            (buf[i] >= 0xEE && buf[i] <= 0xEF)) &&\n            buf[i + 1] >> 6 === 2 &&\n            buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n        //          %xF1-F3 3( UTF8-tail )\n        //          %xF4 %x80-8F 2( UTF8-tail )\n        if (((buf[i] === 0xF0 && buf[i + 1] >= 0x90 && buf[i + 1] <= 0xBF) ||\n            (buf[i] >= 0xF1 && buf[i] <= 0xF3 && buf[i + 1] >> 6 === 2) ||\n            (buf[i] === 0xF4 && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x8F)) &&\n            buf[i + 2] >> 6 === 2 &&\n            buf[i + 3] >> 6 === 2) {\n            i += 4;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n\nexport { isUtf8 as default };\n","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","// feel free to comment out anything to rollup\n// a smaller chroma.js bundle\nimport chroma from './src/chroma.js';\n\n// io --> convert colors\nimport './src/io/named/index.js';\n\n// operators --> modify existing Colors\nimport './src/ops/alpha.js';\nimport './src/ops/clipped.js';\nimport './src/ops/darken.js';\nimport './src/ops/get.js';\nimport './src/ops/luminance.js';\nimport './src/ops/mix.js';\nimport './src/ops/premultiply.js';\nimport './src/ops/saturate.js';\nimport './src/ops/set.js';\nimport './src/ops/shade.js';\n\n// interpolators\nimport './src/interpolator/rgb.js';\nimport './src/interpolator/lrgb.js';\nimport './src/interpolator/lab.js';\nimport './src/interpolator/lch.js';\nimport './src/interpolator/num.js';\nimport './src/interpolator/hcg.js';\nimport './src/interpolator/hsi.js';\nimport './src/interpolator/hsl.js';\nimport './src/interpolator/hsv.js';\nimport './src/interpolator/oklab.js';\nimport './src/interpolator/oklch.js';\n\n// generators -- > create new colors\nimport average from './src/generator/average.js';\nimport bezier from './src/generator/bezier.js';\nimport blend from './src/generator/blend.js';\nimport cubehelix from './src/generator/cubehelix.js';\nimport mix from './src/generator/mix.js';\nimport random from './src/generator/random.js';\nimport scale from './src/generator/scale.js';\n\n// other utility methods\nimport { analyze } from './src/utils/analyze.js';\nimport contrast from './src/utils/contrast.js';\nimport contrastAPCA from './src/utils/contrastAPCA.js';\nimport deltaE from './src/utils/delta-e.js';\nimport distance from './src/utils/distance.js';\nimport { limits } from './src/utils/analyze.js';\nimport valid from './src/utils/valid.js';\nimport input from './src/io/input.js';\n\n// scale\nimport scales from './src/utils/scales.js';\n\n// colors\nimport colors from './src/colors/w3cx11.js';\nimport brewer from './src/colors/colorbrewer.js';\nimport Color from './src/Color.js';\n\nObject.assign(chroma, {\n    analyze,\n    average,\n    bezier,\n    blend,\n    brewer,\n    Color,\n    colors,\n    contrast,\n    contrastAPCA,\n    cubehelix,\n    deltaE,\n    distance,\n    input,\n    interpolate: mix,\n    limits,\n    mix,\n    random,\n    scale,\n    scales,\n    valid\n});\n\nexport default chroma;\n\nexport {\n    analyze,\n    average,\n    bezier,\n    blend,\n    brewer,\n    Color,\n    colors,\n    contrast,\n    contrastAPCA,\n    cubehelix,\n    deltaE,\n    distance,\n    input,\n    limits,\n    mix,\n    mix as interpolate,\n    random,\n    scale,\n    scales,\n    valid\n};\n\nexport * from './src/io/cmyk/index.js';\nexport * from './src/io/css/index.js';\nexport * from './src/io/gl/index.js';\nexport * from './src/io/hcg/index.js';\nexport * from './src/io/hex/index.js';\nexport * from './src/io/hsi/index.js';\nexport * from './src/io/hsl/index.js';\nexport * from './src/io/hsv/index.js';\nexport * from './src/io/lab/index.js';\nexport * from './src/io/lch/index.js';\nexport * from './src/io/num/index.js';\nexport * from './src/io/rgb/index.js';\nexport * from './src/io/temp/index.js';\nexport * from './src/io/oklab/index.js';\nexport * from './src/io/oklch/index.js';\n","//\n// interpolates between a set of colors uzing a bezier spline\n//\n\n// @requires utils lab\nimport Color from '../Color.js';\nimport '../io/lab/index.js';\nimport scale from './scale.js';\n\n// nth row of the pascal triangle\nconst binom_row = function (n) {\n    let row = [1, 1];\n    for (let i = 1; i < n; i++) {\n        let newrow = [1];\n        for (let j = 1; j <= row.length; j++) {\n            newrow[j] = (row[j] || 0) + row[j - 1];\n        }\n        row = newrow;\n    }\n    return row;\n};\n\nconst bezier = function (colors) {\n    let I, lab0, lab1, lab2;\n    colors = colors.map((c) => new Color(c));\n    if (colors.length === 2) {\n        // linear interpolation\n        [lab0, lab1] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map((i) => lab0[i] + t * (lab1[i] - lab0[i]));\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length === 3) {\n        // quadratic bezier interpolation\n        [lab0, lab1, lab2] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map(\n                (i) =>\n                    (1 - t) * (1 - t) * lab0[i] +\n                    2 * (1 - t) * t * lab1[i] +\n                    t * t * lab2[i]\n            );\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length === 4) {\n        // cubic bezier interpolation\n        let lab3;\n        [lab0, lab1, lab2, lab3] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map(\n                (i) =>\n                    (1 - t) * (1 - t) * (1 - t) * lab0[i] +\n                    3 * (1 - t) * (1 - t) * t * lab1[i] +\n                    3 * (1 - t) * t * t * lab2[i] +\n                    t * t * t * lab3[i]\n            );\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length >= 5) {\n        // general case (degree n bezier)\n        let labs, row, n;\n        labs = colors.map((c) => c.lab());\n        n = colors.length - 1;\n        row = binom_row(n);\n        I = function (t) {\n            const u = 1 - t;\n            const lab = [0, 1, 2].map((i) =>\n                labs.reduce(\n                    (sum, el, j) =>\n                        sum + row[j] * u ** (n - j) * t ** j * el[i],\n                    0\n                )\n            );\n            return new Color(lab, 'lab');\n        };\n    } else {\n        throw new RangeError('No point in running bezier with only one color.');\n    }\n    return I;\n};\n\nexport default (colors) => {\n    const f = bezier(colors);\n    f.scale = () => scale(f);\n    return f;\n};\n","import Color from '../Color.js';\nimport '../ops/luminance.js';\n\nexport default (a, b) => {\n    // WCAG contrast ratio\n    // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n    a = new Color(a);\n    b = new Color(b);\n    const l1 = a.luminance();\n    const l2 = b.luminance();\n    return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n};\n","import Color from '../Color.js';\n\n// simple Euclidean distance\nexport default function (a, b, mode = 'lab') {\n    // Delta E (CIE 1976)\n    // see http://www.brucelindbloom.com/index.html?Equations.html\n    a = new Color(a);\n    b = new Color(b);\n    const l1 = a.get(mode);\n    const l2 = b.get(mode);\n    let sum_sq = 0;\n    for (let i in l1) {\n        const d = (l1[i] || 0) - (l2[i] || 0);\n        sum_sq += d * d;\n    }\n    return Math.sqrt(sum_sq);\n}\n","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 { 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 { 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","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","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport { median as default };\n","import{ensureString as 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/),l=[],i=[],n=[],f={title:\"\",jcamp:\"\",children:[]},s=0,u=e.includes(\"## \");for(let c=0;c<o.length;c++){let b=o[c],p=u?b.replaceAll(\" \",\"\"):b;if(p.startsWith(\"##NTUPLES\")&&s++,p.startsWith(\"##TITLE\")){let r=[p.slice(8).trim()];for(let a=c+1;a<o.length&&!o[a].startsWith(\"##\");a++)r.push(o[a].trim());i.push({title:r.join(`\n`),jcamp:`${b}\n`,children:[]}),f=i.at(-1),l.push(f)}else if(p.startsWith(\"##END\")&&s===0&&f){f.jcamp+=`${b}\n`;let r=i.pop();if(!r)throw new Error(\"Not finished\");i.length>0?(f=i.at(-1),f.children?.push(r)):(f=void 0,n.push(r))}else if(f?.jcamp){f.jcamp+=`${b}\n`;let r=p.match(/^##(.*?)=(.+)/);if(r){let a=r[1].replaceAll(/[ _-]/g,\"\").toUpperCase();a===\"DATATYPE\"?f.dataType=r[2].trim():a===\"DATACLASS\"?f.dataClass=r[2].trim():a===\"JCAMPDX\"?f.jcampDX=E(r[2].trim()):a===\"JCAMPCS\"&&(f.jcampCS=E(r[2].trim()))}}p.startsWith(\"##END\")&&s>0&&s--}if(t){for(let c of l)c.children=void 0;return l}else return n}import{parseString as be}from\"dynamic-typing\";import{ensureString as ge}from\"ensure-string\";var te=[\"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)}}},l=[];for(let i of te){let n=k(i);m[0][n]&&(l.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 f of l)o.series[f].data[i]=Number(n[f]);n.data&&(o.series.ms.data[i]=[n.data.x,n.data.y])}e.chromatogram=o}function re(e){return te.includes(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 l=e.yFactor??1,i=e.xFactor??1,n=e.deltaX??1,f=Math.abs(n*.1),s=.01;e.isXYdata=!0;let u={x:[],y:[]};e.data=u;let c=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(c-n-h)>f&&(Math.abs(c-h)<f?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: ${c}.`):Math.abs(c-n-h)>10*f?o.trace(`Data line ${d}: The difference between the first value ${h} and the expected first x value ${c} 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 ${c} based on increment after a DIFFERENCE is too high`)):Math.abs(c-h)>f&&o.trace(`Data line ${d}: The difference between the first value ${h} and the first x value ${c} 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,u.x.push(c),u.y.push(b*l),c+=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?ce(e,m,t):ue(e,m,t),e.variables)for(let o in e.variables)e.variables[o].data=e.data?.[o]}function ce(e,m,t){let{logger:o}=t,l={x:[],y:[]};e.data=l;let i=m.split(/,? *,?[;\\r\\n]+ */);for(let n=1;n<i.length;n++){let f=i[n].trim().replace($,\"\").split(oe);if(f.length%2===0)for(let s=0;s<f.length;s=s+2)e.xFactor!==void 0&&e.yFactor!==void 0&&(l.x.push(Number(f[s])*e.xFactor),l.y.push(Number(f[s+1])*e.yFactor));else o?.warn(`Format error: ${f.toString()}`)}}function ue(e,m,t){let{logger:o}=t,l={},i=Object.keys(e.variables),n=i.length;for(let s of i)l[s]=[];e.data=l;let f=m.split(/,? *,?[;\\r\\n]+ */);for(let s=1;s<f.length;s++){let u=f[s].trim().replace($,\"\").split(oe);if(u.length%n===0)for(let c=0;c<u.length;c++)l[i[c%n]].push(Number(u[c]));else o?.warn(`Wrong number of columns: ${u.toString()}`)}}function B(e,m){e.isXYAdata=!0;let t={};e.data=t;let o=m.split(/\\r?\\n/),l=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 f=0;f<l.length;f++){let s=n[f];switch(l[f]){case\"x\":case\"y\":case\"w\":s=Number.parseFloat(s);break;case\"a\":s=s.replace(/^<(.*)>$/,\"$1\");break;case\"m\":break;default:continue}t[l[f]]||(t[l[f]]=[]),t[l[f]].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,l=m.length,i=m[0].data.x.length||0,n=new Array(l);for(let r=0;r<l;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 f=m[0].data.x[0],s=m[0].data.x.at(-1),{firstY:u,lastY:c}=pe(e);if(f>s)for(let r of n)r.reverse();u>c&&n.reverse();let b=[];for(let r of n){let a=Float64Array.from(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(f,s),maxX:Math.max(f,s),minY:Math.min(u,c),maxY:Math.max(u,c),minZ:t,maxZ:o,noise:p}}function pe(e){let{spectra:m,ntuples:t,info:o}=e;if(t)for(let l of t){let{symbol:i,nucleus:n,units:f}=l;if(i.match(/[F|T]1/)&&f?.toUpperCase().match(\"HZ\")){let s=se(o[\".OBSERVEFREQUENCY\"]),{nucleus:u}=t.find(d=>d.symbol.match(/[F|T]2/));if([s,u,n].some(d=>!d))break;let c=ie(u),b=ie(n),{first:p,last:r}=l,a=b!==null&&c!==null?s*b/c: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,l,i,n,f,s,u,c,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++)l=_[T],i=_[T+1],n=ee[T],f=ee[T+1],s=l>y,u=i>y,c=n>y,b=f>y,s!==u&&s!==c&&(a=T+(y-l)/(i-l),d=v,g=T,A=v+(y-l)/(n-l),D.push(a*S+x,d*X+C,g*S+x,A*X+C)),b!==u&&b!==c&&(a=T+1,d=v+1-(y-f)/(i-f),g=T+1-(y-f)/(n-f),A=v+1,D.push(a*S+x,d*X+C,g*S+x,A*X+C)),u!==c&&(a=(T+1-(y-i)/(n-i))*S+x,d=(v+(y-i)/(n-i))*X+C,u!==s&&(g=T+1-(y-i)/(l-i),A=v,D.push(a,d,g*S+x,A*X+C)),c!==s&&(g=T,A=v+1-(y-n)/(l-n),D.push(a,d,g*S+x,A*X+C)),u!==b&&(g=T+1,A=v+(y-i)/(f-i),D.push(a,d,g*S+x,A*X+C)),c!==b&&(g=T+(y-n)/(f-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,l=0;for(let i of t.spectra){if(t.ntuples?.symbol?(!o&&i.observeFrequency&&(o=i.observeFrequency),!l&&i.shiftOffsetVal&&(l=i.shiftOffsetVal)):(o=i.observeFrequency,l=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(l&&i.xUnits.toLowerCase().includes(\"ppm\")&&i.firstX!==void 0&&i.lastX!==void 0){let n=i.firstX-l;if(i.firstX=i.firstX-n,i.lastX=i.lastX-n,i.data)for(let f=0;f<i.data.x.length;f++)i.data.x[f]-=n}if(t.ntuples?.nucleus&&t.ntuples.symbol)for(let n=0;n<t.ntuples.nucleus.length;n++){let f=t.ntuples.symbol[n],s=t.ntuples.nucleus[n];if(f.match(/^[F|T]/)&&!s){if(f.match(/[F|T]1/))if(t.tmp.$NUC2&&typeof t.tmp.$NUC2==\"string\")t.ntuples.nucleus[n]=t.tmp.$NUC2;else{let u=t.ntuples.symbol.indexOf(f.replace(/^([F|T]).*/,\"$12\"));u&&t.ntuples.nucleus[u]&&(t.ntuples.nucleus[n]=t.ntuples.nucleus[u])}f.match(/[F|T]2/)&&typeof t.tmp.$NUC1==\"string\"&&(t.ntuples.nucleus[n]=t.tmp.$NUC1)}f.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=\"\",f=t.ntuples.symbol.indexOf(i.pageSymbol);t.ntuples.units?.[f]&&(n=t.ntuples.units[f]);let{nucleus:s}=t.ntuples;if(!n.toLowerCase().match(/(ppm|seconds)/)&&s.length>1){if(f!==0){let p=\"Not sure about this ntuples format\";if(m){m.warn(p);continue}else throw new Error(p)}let{nucleus:u}=t.ntuples,c=W(u[0]),b=W(u[1]);if(!c||!b){let p=`Problem with determination of gyromagnetic ratio for ${u.join(\"-\")}`;if(m)m.error(p);else throw new Error(p)}else{let p=c/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 l=[],i=Object.keys(o.ntuples);for(let n of i){let f=o.ntuples[n];if(f)for(let s=0;s<f.length;s++)l[s]||(l[s]={}),l[s][n]=f[s]}o.ntuples=l}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 l=t.meta[o];if(typeof l==\"string\"){if(l.startsWith(\"{\")){if(!l.includes(\":\")&&l.endsWith(\"}\")){let i=l.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(l.startsWith(\"(\")){let i=l.split(/\\r?\\n/),n=/^\\((?<from>\\d+)\\.\\.(?<to>\\d+)\\).*$/;if(n.test(i[0])){let[f,s]=i[0].match(n)?.slice(1).map(Number)??[],u=i.slice(1).join(\" \").split(/[,; ]+/).filter(Boolean);for(let c=f;c<=s;c++)m.dynamicTyping&&typeof u[c-f]==\"string\"?t.meta[o+String(c)]=le(u[c-f]):t.meta[o+String(c)]=u[c-f]}}}}}function K(e,m,t){let o=-1,l=-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 f of t){let s=f.toLowerCase(),u=e.ntuples.symbol?.indexOf(f)||0;if(u===-1)throw new Error(`Symbol undefined: ${f}`);m.variables[s]={};for(let c in e.ntuples)e.ntuples[c]?.[u]&&(m.variables[s][c.replace(/^var/,\"\")]=e.ntuples[c]?.[u])}}o=e.ntuples.symbol?.indexOf(i)??-1,l=e.ntuples.symbol?.indexOf(n)??-1,o===-1&&(o=0),l===-1&&(l=0),e.ntuples.first&&(e.ntuples.first.length>o&&(m.firstX=e.ntuples.first[o]),e.ntuples.first.length>l&&(m.firstY=e.ntuples.first[l])),e.ntuples.last&&(e.ntuples.last.length>o&&(m.lastX=e.ntuples.last[o]),e.ntuples.last.length>l&&(m.lastY=e.ntuples.last[l])),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>l&&(m.yFactor=e.ntuples.factor[l])),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>l&&(e.ntuples.varname?.[l]?m.yUnits=`${e.ntuples.varname[l]} [${e.ntuples.units[l]}]`:m.yUnits=e.ntuples.units[l]))}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=[],l={entries:[],flatten:[]},i={children:[],spectra:[],ntuples:{},info:{},meta:{},tmp:{}},n=i,f=[],s={data:{}};t.logger?.trace({profiling:!0},\"Before split to LDRS\");let u=e.replaceAll(/[\\r\\n]+##/g,`\n##`).split(`\n##`);t.logger?.trace({profiling:!0},\"Split to LDRS\"),u[0]&&(u[0]=u[0].replace(/^[\\r\\n ]*##/,\"\"));for(let c of u){let b=c.indexOf(\"=\"),p=b>0?c.slice(0,Math.max(0,b)):c,r=b>0?p.match(t.noTrimRegExp)?c.slice(Math.max(0,b+1)):c.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),f.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=f.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,l,t),t.logger?.trace({profiling:!0},\"Total time\"),l.entries=i.children||[],l.flatten=o,t.logger){t.logger.debug(\"Finished jcamp conversion\");for(let c of l.flatten)t.logger.debug(`${c.dataType} - ${c.title}`)}return l}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 l=xe(e.info.ATOMLIST),i=Ae(e.info.BONDLIST),n=Ne(e.info.CHARGE,t),f=Se(e.info.XYRASTER,t),s=Ce(e.info.STEREOCENTER,t),u=ye(o,{atoms:l,bonds:i,charges:n,xyRasters:f,stereocenters:s},t);return{molecule:u,molfile:u.toMolfile()}}function ye(e,m,t){let{atoms:o,bonds:l,charges:i,xyRasters:n,stereocenters:f}=m,s={S:e.Molecule.cBondTypeSingle,D:e.Molecule.cBondTypeDouble,T:e.Molecule.cBondTypeTriple,Q:e.Molecule.cBondTypeQuadruple},u={},c=new e.Molecule(o.length,l.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\")),u[p.atomNumber]=c.addAtom(r),c.setAtomMapNo(u[p.atomNumber],p.atomNumber,!1)}for(let p of l){if(u[p.atomNumber1]===void 0){t?.error(`A bond goes from atomNumber ${p.atomNumber1} that does not exists`);continue}if(u[p.atomNumber2]===void 0){t?.error(`A bond goes to atomNumber ${p.atomNumber2} that does not exists`);continue}let r=c.addBond(u[p.atomNumber1],u[p.atomNumber2]);c.setBondType(r,s[p.bondType])}for(let p of i){if(u[p.atomNumber]===void 0){t?.error(`A charge goes to atomNumber ${p.atomNumber} that does not exists`);continue}c.setAtomCharge(u[p.atomNumber],p.value)}let b=n.length===0||f.length>0;for(let p of n){if(u[p.atomNumber]===void 0){t?.error(`A XYRASTER goes to atomNumber ${p.atomNumber} that does not exists`);continue}c.setAtomX(u[p.atomNumber],p.x),c.setAtomY(u[p.atomNumber],p.y),c.setAtomZ(u[p.atomNumber],p.z)}c.ensureHelperArrays(e.Molecule.cHelperParities);for(let p of f){let{atomNumber:r,type:a}=p,d=u[r];if(d===void 0){t?.error(`A stereocenter goes to atomNumber ${r} that does not exists`);continue}if(!c.isAtomStereoCenter(d)){t?.warn(`Want to set chirality of atom number ${r} but it is not a stereocenter`);continue}if(c.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;c.setAtomParity(u[r],x,!1)}return c.ensureHelperArrays(e.Molecule.cHelperParities),b&&c.inventCoordinates(),c}function xe(e){let m=P(e),t=[];for(let o of m){let[l,i,n]=o.trim().split(/\\s+/);t.push({atomNumber:Number(l),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[l,i,n]=o.trim().split(/\\s+/);t.push({atomNumber1:Number(l),atomNumber2:Number(i),bondType:n})}return t}function Ne(e,m){if(!e)return[];let t=P(e),o=[];for(let l of t){let[i,n,f]=l.trim().split(/\\s+/);f!==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 l of t){let[i,n,f,s]=l.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(f),z:s!==void 0?Number(s):0})}return o}function Ce(e,m){if(!e)return[];let t=P(e),o=[];for(let l of t){let[i,n]=l.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","/**\n * Determines the appropriate Kind based on JCAMP data\n * @param data - JCAMP entry data\n * @returns The appropriate Kind or undefined\n */\nexport function getJcampKind(data) {\n    if (!data.dataType || !data.spectra?.[0]?.yUnits) {\n        return undefined;\n    }\n    const dataType = data.dataType.toLowerCase();\n    const yUnits = data.spectra[0].yUnits.toLowerCase();\n    if (dataType.match(/infrared/)) {\n        if (yUnits.match(/absorbance/)) {\n            return IR_ABSORBANCE;\n        }\n        else {\n            return IR_TRANSMITTANCE;\n        }\n    }\n    return undefined;\n}\nexport const IR_TRANSMITTANCE = {\n    normalization: {},\n    importation: {\n        converter: (transmittance) => -Math.log10(transmittance),\n    },\n    kind: 'Infrared',\n    display: {\n        xLabel: 'wavelength [cm-1]',\n        xInverted: true,\n        yLabel: 'Absorbance',\n    },\n};\nexport const IR_ABSORBANCE = {\n    normalization: {},\n    kind: 'Infrared',\n    display: {\n        xLabel: 'wavelength [cm-1]',\n        xInverted: true,\n        yLabel: 'Absorbance',\n    },\n};\nexport const nmr1H = {\n    display: {\n        xLabel: 'δ [ppm]',\n        xInverted: true,\n        yLabel: 'Intensity',\n    },\n};\nexport const nmr13C = {\n    display: {\n        xLabel: 'δ [ppm]',\n        xInverted: true,\n        yLabel: 'Intensity',\n    },\n};\n//# sourceMappingURL=Kinds.js.map","import { convert } from 'jcampconverter';\nimport { getJcampKind } from '../Kinds.js';\n/**\n * Create a spectrum from a JCAMP file\n * @param jcampText - String containing the JCAMP data\n * @returns Parsed spectrum data with kind, meta, and info\n */\nexport default function parseJcamp(jcampText) {\n    const parsed = convert(jcampText, {\n        keepRecordsRegExp: /.*/,\n    }).flatten[0];\n    const kind = getJcampKind(parsed);\n    const data = parsed.spectra[0].data;\n    const { meta, info } = parsed;\n    // Convert the data if needed\n    if (kind?.importation?.converter) {\n        data.y = data.y.map(kind.importation.converter);\n    }\n    return { data, kind, meta, info };\n}\n//# sourceMappingURL=parseJcamp.js.map","import { parse } from './parse';\nexport * from './ParseXYOptions';\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","import { ensureString } from 'ensure-string';\nimport { xyUniqueX, xMaxValue, xIsMonotonic } 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, pelase 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(/[\\r\\n]+/);\n    let matrix = [];\n    const info = [];\n    let position = 0;\n    lines.forEach((line) => {\n        line = line.trim();\n        // we will consider only lines that contains only numbers\n        if (/[0-9]+/.test(line) && /^[0-9eE,;. \\t+-]+$/.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) => 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] &&\n            matrix[0].length === 3 &&\n            options.xColumn === undefined &&\n            options.yColumn === undefined) {\n            // is the first column a seuqnetial number ?\n            let skipFirstColumn = true;\n            for (let i = 0; i < matrix.length - 1; i++) {\n                if (Math.abs(matrix[i][0] - matrix[i + 1][0]) !== 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        for (let i = 0; i < result.y.length; i++) {\n            result.y[i] /= maxY;\n        }\n    }\n    return {\n        info,\n        data: result,\n    };\n}\n//# sourceMappingURL=parse.js.map","/**\n * Convert data to text format\n * @param data - Data including matrix, meta, ids, and x values\n * @param options - Conversion options\n * @returns Formatted text string\n */\nexport function convertToText(data, options = {}) {\n    const { fs = '\\t', rs = '\\n' } = options;\n    const { matrix, meta, ids, x } = data;\n    const allKeysObject = {};\n    for (const metum of meta) {\n        if (metum) {\n            for (const key of Object.keys(metum)) {\n                const type = typeof metum[key];\n                if (type === 'number' || type === 'string' || type === 'boolean') {\n                    allKeysObject[key] = true;\n                }\n            }\n        }\n    }\n    const allKeys = Object.keys(allKeysObject);\n    const lines = [];\n    let line = ['id', ...allKeys, ...x];\n    lines.push(line.join(fs));\n    for (let i = 0; i < ids.length; i++) {\n        line = [ids[i]];\n        for (const key of allKeys) {\n            line.push(removeSpecialCharacters(meta[i][key]));\n        }\n        line.push(...matrix[i]);\n        lines.push(line.join(fs));\n    }\n    return lines.join(rs);\n}\nfunction removeSpecialCharacters(value) {\n    if (typeof value !== 'string') {\n        return value;\n    }\n    return value.replaceAll(/[\\t\\n\\r]+/g, ' ');\n}\n//# sourceMappingURL=convertToText.js.map","!function(e){var t;\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(\"undefined\"!=typeof window?t=window:\"undefined\"!=typeof global?t=global:\"undefined\"!=typeof self&&(t=self),t.objectHash=e())}(function(){return function r(o,i,u){function s(n,e){if(!i[n]){if(!o[n]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(n,!0);if(a)return a(n,!0);throw new Error(\"Cannot find module '\"+n+\"'\")}e=i[n]={exports:{}};o[n][0].call(e.exports,function(e){var t=o[n][1][e];return s(t||e)},e,e.exports,r,o,i,u)}return i[n].exports}for(var a=\"function\"==typeof require&&require,e=0;e<u.length;e++)s(u[e]);return s}({1:[function(w,b,m){!function(e,n,s,c,d,h,p,g,y){\"use strict\";var r=w(\"crypto\");function t(e,t){t=u(e,t);var n;return void 0===(n=\"passthrough\"!==t.algorithm?r.createHash(t.algorithm):new l).write&&(n.write=n.update,n.end=n.update),f(t,n).dispatch(e),n.update||n.end(\"\"),n.digest?n.digest(\"buffer\"===t.encoding?void 0:t.encoding):(e=n.read(),\"buffer\"!==t.encoding?e.toString(t.encoding):e)}(m=b.exports=t).sha1=function(e){return t(e)},m.keys=function(e){return t(e,{excludeValues:!0,algorithm:\"sha1\",encoding:\"hex\"})},m.MD5=function(e){return t(e,{algorithm:\"md5\",encoding:\"hex\"})},m.keysMD5=function(e){return t(e,{algorithm:\"md5\",encoding:\"hex\",excludeValues:!0})};var o=r.getHashes?r.getHashes().slice():[\"sha1\",\"md5\"],i=(o.push(\"passthrough\"),[\"buffer\",\"hex\",\"binary\",\"base64\"]);function u(e,t){var n={};if(n.algorithm=(t=t||{}).algorithm||\"sha1\",n.encoding=t.encoding||\"hex\",n.excludeValues=!!t.excludeValues,n.algorithm=n.algorithm.toLowerCase(),n.encoding=n.encoding.toLowerCase(),n.ignoreUnknown=!0===t.ignoreUnknown,n.respectType=!1!==t.respectType,n.respectFunctionNames=!1!==t.respectFunctionNames,n.respectFunctionProperties=!1!==t.respectFunctionProperties,n.unorderedArrays=!0===t.unorderedArrays,n.unorderedSets=!1!==t.unorderedSets,n.unorderedObjects=!1!==t.unorderedObjects,n.replacer=t.replacer||void 0,n.excludeKeys=t.excludeKeys||void 0,void 0===e)throw new Error(\"Object argument required.\");for(var r=0;r<o.length;++r)o[r].toLowerCase()===n.algorithm.toLowerCase()&&(n.algorithm=o[r]);if(-1===o.indexOf(n.algorithm))throw new Error('Algorithm \"'+n.algorithm+'\"  not supported. supported values: '+o.join(\", \"));if(-1===i.indexOf(n.encoding)&&\"passthrough\"!==n.algorithm)throw new Error('Encoding \"'+n.encoding+'\"  not supported. supported values: '+i.join(\", \"));return n}function a(e){if(\"function\"==typeof e)return null!=/^function\\s+\\w*\\s*\\(\\s*\\)\\s*{\\s+\\[native code\\]\\s+}$/i.exec(Function.prototype.toString.call(e))}function f(o,t,i){i=i||[];function u(e){return t.update?t.update(e,\"utf8\"):t.write(e,\"utf8\")}return{dispatch:function(e){return this[\"_\"+(null===(e=o.replacer?o.replacer(e):e)?\"null\":typeof e)](e)},_object:function(t){var n,e=Object.prototype.toString.call(t),r=/\\[object (.*)\\]/i.exec(e);r=(r=r?r[1]:\"unknown:[\"+e+\"]\").toLowerCase();if(0<=(e=i.indexOf(t)))return this.dispatch(\"[CIRCULAR:\"+e+\"]\");if(i.push(t),void 0!==s&&s.isBuffer&&s.isBuffer(t))return u(\"buffer:\"),u(t);if(\"object\"===r||\"function\"===r||\"asyncfunction\"===r)return e=Object.keys(t),o.unorderedObjects&&(e=e.sort()),!1===o.respectType||a(t)||e.splice(0,0,\"prototype\",\"__proto__\",\"constructor\"),o.excludeKeys&&(e=e.filter(function(e){return!o.excludeKeys(e)})),u(\"object:\"+e.length+\":\"),n=this,e.forEach(function(e){n.dispatch(e),u(\":\"),o.excludeValues||n.dispatch(t[e]),u(\",\")});if(!this[\"_\"+r]){if(o.ignoreUnknown)return u(\"[\"+r+\"]\");throw new Error('Unknown object type \"'+r+'\"')}this[\"_\"+r](t)},_array:function(e,t){t=void 0!==t?t:!1!==o.unorderedArrays;var n=this;if(u(\"array:\"+e.length+\":\"),!t||e.length<=1)return e.forEach(function(e){return n.dispatch(e)});var r=[],t=e.map(function(e){var t=new l,n=i.slice();return f(o,t,n).dispatch(e),r=r.concat(n.slice(i.length)),t.read().toString()});return i=i.concat(r),t.sort(),this._array(t,!1)},_date:function(e){return u(\"date:\"+e.toJSON())},_symbol:function(e){return u(\"symbol:\"+e.toString())},_error:function(e){return u(\"error:\"+e.toString())},_boolean:function(e){return u(\"bool:\"+e.toString())},_string:function(e){u(\"string:\"+e.length+\":\"),u(e.toString())},_function:function(e){u(\"fn:\"),a(e)?this.dispatch(\"[native]\"):this.dispatch(e.toString()),!1!==o.respectFunctionNames&&this.dispatch(\"function-name:\"+String(e.name)),o.respectFunctionProperties&&this._object(e)},_number:function(e){return u(\"number:\"+e.toString())},_xml:function(e){return u(\"xml:\"+e.toString())},_null:function(){return u(\"Null\")},_undefined:function(){return u(\"Undefined\")},_regexp:function(e){return u(\"regex:\"+e.toString())},_uint8array:function(e){return u(\"uint8array:\"),this.dispatch(Array.prototype.slice.call(e))},_uint8clampedarray:function(e){return u(\"uint8clampedarray:\"),this.dispatch(Array.prototype.slice.call(e))},_int8array:function(e){return u(\"int8array:\"),this.dispatch(Array.prototype.slice.call(e))},_uint16array:function(e){return u(\"uint16array:\"),this.dispatch(Array.prototype.slice.call(e))},_int16array:function(e){return u(\"int16array:\"),this.dispatch(Array.prototype.slice.call(e))},_uint32array:function(e){return u(\"uint32array:\"),this.dispatch(Array.prototype.slice.call(e))},_int32array:function(e){return u(\"int32array:\"),this.dispatch(Array.prototype.slice.call(e))},_float32array:function(e){return u(\"float32array:\"),this.dispatch(Array.prototype.slice.call(e))},_float64array:function(e){return u(\"float64array:\"),this.dispatch(Array.prototype.slice.call(e))},_arraybuffer:function(e){return u(\"arraybuffer:\"),this.dispatch(new Uint8Array(e))},_url:function(e){return u(\"url:\"+e.toString())},_map:function(e){u(\"map:\");e=Array.from(e);return this._array(e,!1!==o.unorderedSets)},_set:function(e){u(\"set:\");e=Array.from(e);return this._array(e,!1!==o.unorderedSets)},_file:function(e){return u(\"file:\"),this.dispatch([e.name,e.size,e.type,e.lastModfied])},_blob:function(){if(o.ignoreUnknown)return u(\"[blob]\");throw Error('Hashing Blob objects is currently not supported\\n(see https://github.com/puleos/object-hash/issues/26)\\nUse \"options.replacer\" or \"options.ignoreUnknown\"\\n')},_domwindow:function(){return u(\"domwindow\")},_bigint:function(e){return u(\"bigint:\"+e.toString())},_process:function(){return u(\"process\")},_timer:function(){return u(\"timer\")},_pipe:function(){return u(\"pipe\")},_tcp:function(){return u(\"tcp\")},_udp:function(){return u(\"udp\")},_tty:function(){return u(\"tty\")},_statwatcher:function(){return u(\"statwatcher\")},_securecontext:function(){return u(\"securecontext\")},_connection:function(){return u(\"connection\")},_zlib:function(){return u(\"zlib\")},_context:function(){return u(\"context\")},_nodescript:function(){return u(\"nodescript\")},_httpparser:function(){return u(\"httpparser\")},_dataview:function(){return u(\"dataview\")},_signal:function(){return u(\"signal\")},_fsevent:function(){return u(\"fsevent\")},_tlswrap:function(){return u(\"tlswrap\")}}}function l(){return{buf:\"\",write:function(e){this.buf+=e},end:function(e){this.buf+=e},read:function(){return this.buf}}}m.writeToStream=function(e,t,n){return void 0===n&&(n=t,t={}),f(t=u(e,t),n).dispatch(e)}}.call(this,w(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},w(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/fake_9a5aa49d.js\",\"/\")},{buffer:3,crypto:5,lYpoI2:11}],2:[function(e,t,f){!function(e,t,n,r,o,i,u,s,a){!function(e){\"use strict\";var a=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,t=\"+\".charCodeAt(0),n=\"/\".charCodeAt(0),r=\"0\".charCodeAt(0),o=\"a\".charCodeAt(0),i=\"A\".charCodeAt(0),u=\"-\".charCodeAt(0),s=\"_\".charCodeAt(0);function f(e){e=e.charCodeAt(0);return e===t||e===u?62:e===n||e===s?63:e<r?-1:e<r+10?e-r+26+26:e<i+26?e-i:e<o+26?e-o+26:void 0}e.toByteArray=function(e){var t,n;if(0<e.length%4)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=e.length,r=\"=\"===e.charAt(r-2)?2:\"=\"===e.charAt(r-1)?1:0,o=new a(3*e.length/4-r),i=0<r?e.length-4:e.length,u=0;function s(e){o[u++]=e}for(t=0;t<i;t+=4,0)s((16711680&(n=f(e.charAt(t))<<18|f(e.charAt(t+1))<<12|f(e.charAt(t+2))<<6|f(e.charAt(t+3))))>>16),s((65280&n)>>8),s(255&n);return 2==r?s(255&(n=f(e.charAt(t))<<2|f(e.charAt(t+1))>>4)):1==r&&(s((n=f(e.charAt(t))<<10|f(e.charAt(t+1))<<4|f(e.charAt(t+2))>>2)>>8&255),s(255&n)),o},e.fromByteArray=function(e){var t,n,r,o,i=e.length%3,u=\"\";function s(e){return\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".charAt(e)}for(t=0,r=e.length-i;t<r;t+=3)n=(e[t]<<16)+(e[t+1]<<8)+e[t+2],u+=s((o=n)>>18&63)+s(o>>12&63)+s(o>>6&63)+s(63&o);switch(i){case 1:u=(u+=s((n=e[e.length-1])>>2))+s(n<<4&63)+\"==\";break;case 2:u=(u=(u+=s((n=(e[e.length-2]<<8)+e[e.length-1])>>10))+s(n>>4&63))+s(n<<2&63)+\"=\"}return u}}(void 0===f?this.base64js={}:f)}.call(this,e(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/base64-js/lib/b64.js\",\"/node_modules/gulp-browserify/node_modules/base64-js/lib\")},{buffer:3,lYpoI2:11}],3:[function(O,e,H){!function(e,n,f,r,h,p,g,y,w){var a=O(\"base64-js\"),i=O(\"ieee754\");function f(e,t,n){if(!(this instanceof f))return new f(e,t,n);var r,o,i,u,s=typeof e;if(\"base64\"===t&&\"string\"==s)for(e=(u=e).trim?u.trim():u.replace(/^\\s+|\\s+$/g,\"\");e.length%4!=0;)e+=\"=\";if(\"number\"==s)r=j(e);else if(\"string\"==s)r=f.byteLength(e,t);else{if(\"object\"!=s)throw new Error(\"First argument needs to be a number, array or string.\");r=j(e.length)}if(f._useTypedArrays?o=f._augment(new Uint8Array(r)):((o=this).length=r,o._isBuffer=!0),f._useTypedArrays&&\"number\"==typeof e.byteLength)o._set(e);else if(C(u=e)||f.isBuffer(u)||u&&\"object\"==typeof u&&\"number\"==typeof u.length)for(i=0;i<r;i++)f.isBuffer(e)?o[i]=e.readUInt8(i):o[i]=e[i];else if(\"string\"==s)o.write(e,0,t);else if(\"number\"==s&&!f._useTypedArrays&&!n)for(i=0;i<r;i++)o[i]=0;return o}function b(e,t,n,r){return f._charsWritten=c(function(e){for(var t=[],n=0;n<e.length;n++)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function m(e,t,n,r){return f._charsWritten=c(function(e){for(var t,n,r=[],o=0;o<e.length;o++)n=e.charCodeAt(o),t=n>>8,n=n%256,r.push(n),r.push(t);return r}(t),e,n,r)}function v(e,t,n){var r=\"\";n=Math.min(e.length,n);for(var o=t;o<n;o++)r+=String.fromCharCode(e[o]);return r}function o(e,t,n,r){r||(d(\"boolean\"==typeof n,\"missing or invalid endian\"),d(null!=t,\"missing offset\"),d(t+1<e.length,\"Trying to read beyond buffer length\"));var o,r=e.length;if(!(r<=t))return n?(o=e[t],t+1<r&&(o|=e[t+1]<<8)):(o=e[t]<<8,t+1<r&&(o|=e[t+1])),o}function u(e,t,n,r){r||(d(\"boolean\"==typeof n,\"missing or invalid endian\"),d(null!=t,\"missing offset\"),d(t+3<e.length,\"Trying to read beyond buffer length\"));var o,r=e.length;if(!(r<=t))return n?(t+2<r&&(o=e[t+2]<<16),t+1<r&&(o|=e[t+1]<<8),o|=e[t],t+3<r&&(o+=e[t+3]<<24>>>0)):(t+1<r&&(o=e[t+1]<<16),t+2<r&&(o|=e[t+2]<<8),t+3<r&&(o|=e[t+3]),o+=e[t]<<24>>>0),o}function _(e,t,n,r){if(r||(d(\"boolean\"==typeof n,\"missing or invalid endian\"),d(null!=t,\"missing offset\"),d(t+1<e.length,\"Trying to read beyond buffer length\")),!(e.length<=t))return r=o(e,t,n,!0),32768&r?-1*(65535-r+1):r}function E(e,t,n,r){if(r||(d(\"boolean\"==typeof n,\"missing or invalid endian\"),d(null!=t,\"missing offset\"),d(t+3<e.length,\"Trying to read beyond buffer length\")),!(e.length<=t))return r=u(e,t,n,!0),2147483648&r?-1*(4294967295-r+1):r}function I(e,t,n,r){return r||(d(\"boolean\"==typeof n,\"missing or invalid endian\"),d(t+3<e.length,\"Trying to read beyond buffer length\")),i.read(e,t,n,23,4)}function A(e,t,n,r){return r||(d(\"boolean\"==typeof n,\"missing or invalid endian\"),d(t+7<e.length,\"Trying to read beyond buffer length\")),i.read(e,t,n,52,8)}function s(e,t,n,r,o){o||(d(null!=t,\"missing value\"),d(\"boolean\"==typeof r,\"missing or invalid endian\"),d(null!=n,\"missing offset\"),d(n+1<e.length,\"trying to write beyond buffer length\"),Y(t,65535));o=e.length;if(!(o<=n))for(var i=0,u=Math.min(o-n,2);i<u;i++)e[n+i]=(t&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function l(e,t,n,r,o){o||(d(null!=t,\"missing value\"),d(\"boolean\"==typeof r,\"missing or invalid endian\"),d(null!=n,\"missing offset\"),d(n+3<e.length,\"trying to write beyond buffer length\"),Y(t,4294967295));o=e.length;if(!(o<=n))for(var i=0,u=Math.min(o-n,4);i<u;i++)e[n+i]=t>>>8*(r?i:3-i)&255}function B(e,t,n,r,o){o||(d(null!=t,\"missing value\"),d(\"boolean\"==typeof r,\"missing or invalid endian\"),d(null!=n,\"missing offset\"),d(n+1<e.length,\"Trying to write beyond buffer length\"),F(t,32767,-32768)),e.length<=n||s(e,0<=t?t:65535+t+1,n,r,o)}function L(e,t,n,r,o){o||(d(null!=t,\"missing value\"),d(\"boolean\"==typeof r,\"missing or invalid endian\"),d(null!=n,\"missing offset\"),d(n+3<e.length,\"Trying to write beyond buffer length\"),F(t,2147483647,-2147483648)),e.length<=n||l(e,0<=t?t:4294967295+t+1,n,r,o)}function U(e,t,n,r,o){o||(d(null!=t,\"missing value\"),d(\"boolean\"==typeof r,\"missing or invalid endian\"),d(null!=n,\"missing offset\"),d(n+3<e.length,\"Trying to write beyond buffer length\"),D(t,34028234663852886e22,-34028234663852886e22)),e.length<=n||i.write(e,t,n,r,23,4)}function x(e,t,n,r,o){o||(d(null!=t,\"missing value\"),d(\"boolean\"==typeof r,\"missing or invalid endian\"),d(null!=n,\"missing offset\"),d(n+7<e.length,\"Trying to write beyond buffer length\"),D(t,17976931348623157e292,-17976931348623157e292)),e.length<=n||i.write(e,t,n,r,52,8)}H.Buffer=f,H.SlowBuffer=f,H.INSPECT_MAX_BYTES=50,f.poolSize=8192,f._useTypedArrays=function(){try{var e=new ArrayBuffer(0),t=new Uint8Array(e);return t.foo=function(){return 42},42===t.foo()&&\"function\"==typeof t.subarray}catch(e){return!1}}(),f.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"raw\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},f.isBuffer=function(e){return!(null==e||!e._isBuffer)},f.byteLength=function(e,t){var n;switch(e+=\"\",t||\"utf8\"){case\"hex\":n=e.length/2;break;case\"utf8\":case\"utf-8\":n=T(e).length;break;case\"ascii\":case\"binary\":case\"raw\":n=e.length;break;case\"base64\":n=M(e).length;break;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":n=2*e.length;break;default:throw new Error(\"Unknown encoding\")}return n},f.concat=function(e,t){if(d(C(e),\"Usage: Buffer.concat(list, [totalLength])\\nlist should be an Array.\"),0===e.length)return new f(0);if(1===e.length)return e[0];if(\"number\"!=typeof t)for(o=t=0;o<e.length;o++)t+=e[o].length;for(var n=new f(t),r=0,o=0;o<e.length;o++){var i=e[o];i.copy(n,r),r+=i.length}return n},f.prototype.write=function(e,t,n,r){isFinite(t)?isFinite(n)||(r=n,n=void 0):(a=r,r=t,t=n,n=a),t=Number(t)||0;var o,i,u,s,a=this.length-t;switch((!n||a<(n=Number(n)))&&(n=a),r=String(r||\"utf8\").toLowerCase()){case\"hex\":o=function(e,t,n,r){n=Number(n)||0;var o=e.length-n;(!r||o<(r=Number(r)))&&(r=o),d((o=t.length)%2==0,\"Invalid hex string\"),o/2<r&&(r=o/2);for(var i=0;i<r;i++){var u=parseInt(t.substr(2*i,2),16);d(!isNaN(u),\"Invalid hex string\"),e[n+i]=u}return f._charsWritten=2*i,i}(this,e,t,n);break;case\"utf8\":case\"utf-8\":i=this,u=t,s=n,o=f._charsWritten=c(T(e),i,u,s);break;case\"ascii\":case\"binary\":o=b(this,e,t,n);break;case\"base64\":i=this,u=t,s=n,o=f._charsWritten=c(M(e),i,u,s);break;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":o=m(this,e,t,n);break;default:throw new Error(\"Unknown encoding\")}return o},f.prototype.toString=function(e,t,n){var r,o,i,u,s=this;if(e=String(e||\"utf8\").toLowerCase(),t=Number(t)||0,(n=void 0!==n?Number(n):s.length)===t)return\"\";switch(e){case\"hex\":r=function(e,t,n){var r=e.length;(!t||t<0)&&(t=0);(!n||n<0||r<n)&&(n=r);for(var o=\"\",i=t;i<n;i++)o+=k(e[i]);return o}(s,t,n);break;case\"utf8\":case\"utf-8\":r=function(e,t,n){var r=\"\",o=\"\";n=Math.min(e.length,n);for(var i=t;i<n;i++)e[i]<=127?(r+=N(o)+String.fromCharCode(e[i]),o=\"\"):o+=\"%\"+e[i].toString(16);return r+N(o)}(s,t,n);break;case\"ascii\":case\"binary\":r=v(s,t,n);break;case\"base64\":o=s,u=n,r=0===(i=t)&&u===o.length?a.fromByteArray(o):a.fromByteArray(o.slice(i,u));break;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":r=function(e,t,n){for(var r=e.slice(t,n),o=\"\",i=0;i<r.length;i+=2)o+=String.fromCharCode(r[i]+256*r[i+1]);return o}(s,t,n);break;default:throw new Error(\"Unknown encoding\")}return r},f.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}},f.prototype.copy=function(e,t,n,r){if(t=t||0,(r=r||0===r?r:this.length)!==(n=n||0)&&0!==e.length&&0!==this.length){d(n<=r,\"sourceEnd < sourceStart\"),d(0<=t&&t<e.length,\"targetStart out of bounds\"),d(0<=n&&n<this.length,\"sourceStart out of bounds\"),d(0<=r&&r<=this.length,\"sourceEnd out of bounds\"),r>this.length&&(r=this.length);var o=(r=e.length-t<r-n?e.length-t+n:r)-n;if(o<100||!f._useTypedArrays)for(var i=0;i<o;i++)e[i+t]=this[i+n];else e._set(this.subarray(n,n+o),t)}},f.prototype.slice=function(e,t){var n=this.length;if(e=S(e,n,0),t=S(t,n,n),f._useTypedArrays)return f._augment(this.subarray(e,t));for(var r=t-e,o=new f(r,void 0,!0),i=0;i<r;i++)o[i]=this[i+e];return o},f.prototype.get=function(e){return console.log(\".get() is deprecated. Access using array indexes instead.\"),this.readUInt8(e)},f.prototype.set=function(e,t){return console.log(\".set() is deprecated. Access using array indexes instead.\"),this.writeUInt8(e,t)},f.prototype.readUInt8=function(e,t){if(t||(d(null!=e,\"missing offset\"),d(e<this.length,\"Trying to read beyond buffer length\")),!(e>=this.length))return this[e]},f.prototype.readUInt16LE=function(e,t){return o(this,e,!0,t)},f.prototype.readUInt16BE=function(e,t){return o(this,e,!1,t)},f.prototype.readUInt32LE=function(e,t){return u(this,e,!0,t)},f.prototype.readUInt32BE=function(e,t){return u(this,e,!1,t)},f.prototype.readInt8=function(e,t){if(t||(d(null!=e,\"missing offset\"),d(e<this.length,\"Trying to read beyond buffer length\")),!(e>=this.length))return 128&this[e]?-1*(255-this[e]+1):this[e]},f.prototype.readInt16LE=function(e,t){return _(this,e,!0,t)},f.prototype.readInt16BE=function(e,t){return _(this,e,!1,t)},f.prototype.readInt32LE=function(e,t){return E(this,e,!0,t)},f.prototype.readInt32BE=function(e,t){return E(this,e,!1,t)},f.prototype.readFloatLE=function(e,t){return I(this,e,!0,t)},f.prototype.readFloatBE=function(e,t){return I(this,e,!1,t)},f.prototype.readDoubleLE=function(e,t){return A(this,e,!0,t)},f.prototype.readDoubleBE=function(e,t){return A(this,e,!1,t)},f.prototype.writeUInt8=function(e,t,n){n||(d(null!=e,\"missing value\"),d(null!=t,\"missing offset\"),d(t<this.length,\"trying to write beyond buffer length\"),Y(e,255)),t>=this.length||(this[t]=e)},f.prototype.writeUInt16LE=function(e,t,n){s(this,e,t,!0,n)},f.prototype.writeUInt16BE=function(e,t,n){s(this,e,t,!1,n)},f.prototype.writeUInt32LE=function(e,t,n){l(this,e,t,!0,n)},f.prototype.writeUInt32BE=function(e,t,n){l(this,e,t,!1,n)},f.prototype.writeInt8=function(e,t,n){n||(d(null!=e,\"missing value\"),d(null!=t,\"missing offset\"),d(t<this.length,\"Trying to write beyond buffer length\"),F(e,127,-128)),t>=this.length||(0<=e?this.writeUInt8(e,t,n):this.writeUInt8(255+e+1,t,n))},f.prototype.writeInt16LE=function(e,t,n){B(this,e,t,!0,n)},f.prototype.writeInt16BE=function(e,t,n){B(this,e,t,!1,n)},f.prototype.writeInt32LE=function(e,t,n){L(this,e,t,!0,n)},f.prototype.writeInt32BE=function(e,t,n){L(this,e,t,!1,n)},f.prototype.writeFloatLE=function(e,t,n){U(this,e,t,!0,n)},f.prototype.writeFloatBE=function(e,t,n){U(this,e,t,!1,n)},f.prototype.writeDoubleLE=function(e,t,n){x(this,e,t,!0,n)},f.prototype.writeDoubleBE=function(e,t,n){x(this,e,t,!1,n)},f.prototype.fill=function(e,t,n){if(t=t||0,n=n||this.length,d(\"number\"==typeof(e=\"string\"==typeof(e=e||0)?e.charCodeAt(0):e)&&!isNaN(e),\"value is not a number\"),d(t<=n,\"end < start\"),n!==t&&0!==this.length){d(0<=t&&t<this.length,\"start out of bounds\"),d(0<=n&&n<=this.length,\"end out of bounds\");for(var r=t;r<n;r++)this[r]=e}},f.prototype.inspect=function(){for(var e=[],t=this.length,n=0;n<t;n++)if(e[n]=k(this[n]),n===H.INSPECT_MAX_BYTES){e[n+1]=\"...\";break}return\"<Buffer \"+e.join(\" \")+\">\"},f.prototype.toArrayBuffer=function(){if(\"undefined\"==typeof Uint8Array)throw new Error(\"Buffer.toArrayBuffer not supported in this browser\");if(f._useTypedArrays)return new f(this).buffer;for(var e=new Uint8Array(this.length),t=0,n=e.length;t<n;t+=1)e[t]=this[t];return e.buffer};var t=f.prototype;function S(e,t,n){return\"number\"!=typeof e?n:t<=(e=~~e)?t:0<=e||0<=(e+=t)?e:0}function j(e){return(e=~~Math.ceil(+e))<0?0:e}function C(e){return(Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)})(e)}function k(e){return e<16?\"0\"+e.toString(16):e.toString(16)}function T(e){for(var t=[],n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<=127)t.push(e.charCodeAt(n));else for(var o=n,i=(55296<=r&&r<=57343&&n++,encodeURIComponent(e.slice(o,n+1)).substr(1).split(\"%\")),u=0;u<i.length;u++)t.push(parseInt(i[u],16))}return t}function M(e){return a.toByteArray(e)}function c(e,t,n,r){for(var o=0;o<r&&!(o+n>=t.length||o>=e.length);o++)t[o+n]=e[o];return o}function N(e){try{return decodeURIComponent(e)}catch(e){return String.fromCharCode(65533)}}function Y(e,t){d(\"number\"==typeof e,\"cannot write a non-number as a number\"),d(0<=e,\"specified a negative value for writing an unsigned value\"),d(e<=t,\"value is larger than maximum value for type\"),d(Math.floor(e)===e,\"value has a fractional component\")}function F(e,t,n){d(\"number\"==typeof e,\"cannot write a non-number as a number\"),d(e<=t,\"value larger than maximum allowed value\"),d(n<=e,\"value smaller than minimum allowed value\"),d(Math.floor(e)===e,\"value has a fractional component\")}function D(e,t,n){d(\"number\"==typeof e,\"cannot write a non-number as a number\"),d(e<=t,\"value larger than maximum allowed value\"),d(n<=e,\"value smaller than minimum allowed value\")}function d(e,t){if(!e)throw new Error(t||\"Failed assertion\")}f._augment=function(e){return e._isBuffer=!0,e._get=e.get,e._set=e.set,e.get=t.get,e.set=t.set,e.write=t.write,e.toString=t.toString,e.toLocaleString=t.toString,e.toJSON=t.toJSON,e.copy=t.copy,e.slice=t.slice,e.readUInt8=t.readUInt8,e.readUInt16LE=t.readUInt16LE,e.readUInt16BE=t.readUInt16BE,e.readUInt32LE=t.readUInt32LE,e.readUInt32BE=t.readUInt32BE,e.readInt8=t.readInt8,e.readInt16LE=t.readInt16LE,e.readInt16BE=t.readInt16BE,e.readInt32LE=t.readInt32LE,e.readInt32BE=t.readInt32BE,e.readFloatLE=t.readFloatLE,e.readFloatBE=t.readFloatBE,e.readDoubleLE=t.readDoubleLE,e.readDoubleBE=t.readDoubleBE,e.writeUInt8=t.writeUInt8,e.writeUInt16LE=t.writeUInt16LE,e.writeUInt16BE=t.writeUInt16BE,e.writeUInt32LE=t.writeUInt32LE,e.writeUInt32BE=t.writeUInt32BE,e.writeInt8=t.writeInt8,e.writeInt16LE=t.writeInt16LE,e.writeInt16BE=t.writeInt16BE,e.writeInt32LE=t.writeInt32LE,e.writeInt32BE=t.writeInt32BE,e.writeFloatLE=t.writeFloatLE,e.writeFloatBE=t.writeFloatBE,e.writeDoubleLE=t.writeDoubleLE,e.writeDoubleBE=t.writeDoubleBE,e.fill=t.fill,e.inspect=t.inspect,e.toArrayBuffer=t.toArrayBuffer,e}}.call(this,O(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},O(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/buffer/index.js\",\"/node_modules/gulp-browserify/node_modules/buffer\")},{\"base64-js\":2,buffer:3,ieee754:10,lYpoI2:11}],4:[function(c,d,e){!function(e,t,a,n,r,o,i,u,s){var a=c(\"buffer\").Buffer,f=4,l=new a(f);l.fill(0);d.exports={hash:function(e,t,n,r){for(var o=t(function(e,t){e.length%f!=0&&(n=e.length+(f-e.length%f),e=a.concat([e,l],n));for(var n,r=[],o=t?e.readInt32BE:e.readInt32LE,i=0;i<e.length;i+=f)r.push(o.call(e,i));return r}(e=a.isBuffer(e)?e:new a(e),r),8*e.length),t=r,i=new a(n),u=t?i.writeInt32BE:i.writeInt32LE,s=0;s<o.length;s++)u.call(i,o[s],4*s,!0);return i}}}.call(this,c(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},c(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/crypto-browserify/helpers.js\",\"/node_modules/gulp-browserify/node_modules/crypto-browserify\")},{buffer:3,lYpoI2:11}],5:[function(v,e,_){!function(l,c,u,d,h,p,g,y,w){var u=v(\"buffer\").Buffer,e=v(\"./sha\"),t=v(\"./sha256\"),n=v(\"./rng\"),b={sha1:e,sha256:t,md5:v(\"./md5\")},s=64,a=new u(s);function r(e,n){var r=b[e=e||\"sha1\"],o=[];return r||i(\"algorithm:\",e,\"is not yet supported\"),{update:function(e){return u.isBuffer(e)||(e=new u(e)),o.push(e),e.length,this},digest:function(e){var t=u.concat(o),t=n?function(e,t,n){u.isBuffer(t)||(t=new u(t)),u.isBuffer(n)||(n=new u(n)),t.length>s?t=e(t):t.length<s&&(t=u.concat([t,a],s));for(var r=new u(s),o=new u(s),i=0;i<s;i++)r[i]=54^t[i],o[i]=92^t[i];return n=e(u.concat([r,n])),e(u.concat([o,n]))}(r,n,t):r(t);return o=null,e?t.toString(e):t}}}function i(){var e=[].slice.call(arguments).join(\" \");throw new Error([e,\"we accept pull requests\",\"http://github.com/dominictarr/crypto-browserify\"].join(\"\\n\"))}a.fill(0),_.createHash=function(e){return r(e)},_.createHmac=r,_.randomBytes=function(e,t){if(!t||!t.call)return new u(n(e));try{t.call(this,void 0,new u(n(e)))}catch(e){t(e)}};var o,f=[\"createCredentials\",\"createCipher\",\"createCipheriv\",\"createDecipher\",\"createDecipheriv\",\"createSign\",\"createVerify\",\"createDiffieHellman\",\"pbkdf2\"],m=function(e){_[e]=function(){i(\"sorry,\",e,\"is not implemented yet\")}};for(o in f)m(f[o],o)}.call(this,v(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},v(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/crypto-browserify/index.js\",\"/node_modules/gulp-browserify/node_modules/crypto-browserify\")},{\"./md5\":6,\"./rng\":7,\"./sha\":8,\"./sha256\":9,buffer:3,lYpoI2:11}],6:[function(w,b,e){!function(e,r,o,i,u,a,f,l,y){var t=w(\"./helpers\");function n(e,t){e[t>>5]|=128<<t%32,e[14+(t+64>>>9<<4)]=t;for(var n=1732584193,r=-271733879,o=-1732584194,i=271733878,u=0;u<e.length;u+=16){var s=n,a=r,f=o,l=i,n=c(n,r,o,i,e[u+0],7,-680876936),i=c(i,n,r,o,e[u+1],12,-389564586),o=c(o,i,n,r,e[u+2],17,606105819),r=c(r,o,i,n,e[u+3],22,-1044525330);n=c(n,r,o,i,e[u+4],7,-176418897),i=c(i,n,r,o,e[u+5],12,1200080426),o=c(o,i,n,r,e[u+6],17,-1473231341),r=c(r,o,i,n,e[u+7],22,-45705983),n=c(n,r,o,i,e[u+8],7,1770035416),i=c(i,n,r,o,e[u+9],12,-1958414417),o=c(o,i,n,r,e[u+10],17,-42063),r=c(r,o,i,n,e[u+11],22,-1990404162),n=c(n,r,o,i,e[u+12],7,1804603682),i=c(i,n,r,o,e[u+13],12,-40341101),o=c(o,i,n,r,e[u+14],17,-1502002290),n=d(n,r=c(r,o,i,n,e[u+15],22,1236535329),o,i,e[u+1],5,-165796510),i=d(i,n,r,o,e[u+6],9,-1069501632),o=d(o,i,n,r,e[u+11],14,643717713),r=d(r,o,i,n,e[u+0],20,-373897302),n=d(n,r,o,i,e[u+5],5,-701558691),i=d(i,n,r,o,e[u+10],9,38016083),o=d(o,i,n,r,e[u+15],14,-660478335),r=d(r,o,i,n,e[u+4],20,-405537848),n=d(n,r,o,i,e[u+9],5,568446438),i=d(i,n,r,o,e[u+14],9,-1019803690),o=d(o,i,n,r,e[u+3],14,-187363961),r=d(r,o,i,n,e[u+8],20,1163531501),n=d(n,r,o,i,e[u+13],5,-1444681467),i=d(i,n,r,o,e[u+2],9,-51403784),o=d(o,i,n,r,e[u+7],14,1735328473),n=h(n,r=d(r,o,i,n,e[u+12],20,-1926607734),o,i,e[u+5],4,-378558),i=h(i,n,r,o,e[u+8],11,-2022574463),o=h(o,i,n,r,e[u+11],16,1839030562),r=h(r,o,i,n,e[u+14],23,-35309556),n=h(n,r,o,i,e[u+1],4,-1530992060),i=h(i,n,r,o,e[u+4],11,1272893353),o=h(o,i,n,r,e[u+7],16,-155497632),r=h(r,o,i,n,e[u+10],23,-1094730640),n=h(n,r,o,i,e[u+13],4,681279174),i=h(i,n,r,o,e[u+0],11,-358537222),o=h(o,i,n,r,e[u+3],16,-722521979),r=h(r,o,i,n,e[u+6],23,76029189),n=h(n,r,o,i,e[u+9],4,-640364487),i=h(i,n,r,o,e[u+12],11,-421815835),o=h(o,i,n,r,e[u+15],16,530742520),n=p(n,r=h(r,o,i,n,e[u+2],23,-995338651),o,i,e[u+0],6,-198630844),i=p(i,n,r,o,e[u+7],10,1126891415),o=p(o,i,n,r,e[u+14],15,-1416354905),r=p(r,o,i,n,e[u+5],21,-57434055),n=p(n,r,o,i,e[u+12],6,1700485571),i=p(i,n,r,o,e[u+3],10,-1894986606),o=p(o,i,n,r,e[u+10],15,-1051523),r=p(r,o,i,n,e[u+1],21,-2054922799),n=p(n,r,o,i,e[u+8],6,1873313359),i=p(i,n,r,o,e[u+15],10,-30611744),o=p(o,i,n,r,e[u+6],15,-1560198380),r=p(r,o,i,n,e[u+13],21,1309151649),n=p(n,r,o,i,e[u+4],6,-145523070),i=p(i,n,r,o,e[u+11],10,-1120210379),o=p(o,i,n,r,e[u+2],15,718787259),r=p(r,o,i,n,e[u+9],21,-343485551),n=g(n,s),r=g(r,a),o=g(o,f),i=g(i,l)}return Array(n,r,o,i)}function s(e,t,n,r,o,i){return g((t=g(g(t,e),g(r,i)))<<o|t>>>32-o,n)}function c(e,t,n,r,o,i,u){return s(t&n|~t&r,e,t,o,i,u)}function d(e,t,n,r,o,i,u){return s(t&r|n&~r,e,t,o,i,u)}function h(e,t,n,r,o,i,u){return s(t^n^r,e,t,o,i,u)}function p(e,t,n,r,o,i,u){return s(n^(t|~r),e,t,o,i,u)}function g(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}b.exports=function(e){return t.hash(e,n,16)}}.call(this,w(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},w(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/crypto-browserify/md5.js\",\"/node_modules/gulp-browserify/node_modules/crypto-browserify\")},{\"./helpers\":4,buffer:3,lYpoI2:11}],7:[function(e,l,t){!function(e,t,n,r,o,i,u,s,f){var a;l.exports=a||function(e){for(var t,n=new Array(e),r=0;r<e;r++)0==(3&r)&&(t=4294967296*Math.random()),n[r]=t>>>((3&r)<<3)&255;return n}}.call(this,e(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/crypto-browserify/rng.js\",\"/node_modules/gulp-browserify/node_modules/crypto-browserify\")},{buffer:3,lYpoI2:11}],8:[function(c,d,e){!function(e,t,n,r,o,s,a,f,l){var i=c(\"./helpers\");function u(l,c){l[c>>5]|=128<<24-c%32,l[15+(c+64>>9<<4)]=c;for(var e,t,n,r=Array(80),o=1732584193,i=-271733879,u=-1732584194,s=271733878,d=-1009589776,h=0;h<l.length;h+=16){for(var p=o,g=i,y=u,w=s,b=d,a=0;a<80;a++){r[a]=a<16?l[h+a]:v(r[a-3]^r[a-8]^r[a-14]^r[a-16],1);var f=m(m(v(o,5),(f=i,t=u,n=s,(e=a)<20?f&t|~f&n:!(e<40)&&e<60?f&t|f&n|t&n:f^t^n)),m(m(d,r[a]),(e=a)<20?1518500249:e<40?1859775393:e<60?-1894007588:-899497514)),d=s,s=u,u=v(i,30),i=o,o=f}o=m(o,p),i=m(i,g),u=m(u,y),s=m(s,w),d=m(d,b)}return Array(o,i,u,s,d)}function m(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function v(e,t){return e<<t|e>>>32-t}d.exports=function(e){return i.hash(e,u,20,!0)}}.call(this,c(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},c(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha.js\",\"/node_modules/gulp-browserify/node_modules/crypto-browserify\")},{\"./helpers\":4,buffer:3,lYpoI2:11}],9:[function(c,d,e){!function(e,t,n,r,u,s,a,f,l){function b(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function o(e,l){var c,d=new Array(1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298),t=new Array(1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225),n=new Array(64);e[l>>5]|=128<<24-l%32,e[15+(l+64>>9<<4)]=l;for(var r,o,h=0;h<e.length;h+=16){for(var i=t[0],u=t[1],s=t[2],p=t[3],a=t[4],g=t[5],y=t[6],w=t[7],f=0;f<64;f++)n[f]=f<16?e[f+h]:b(b(b((o=n[f-2],m(o,17)^m(o,19)^v(o,10)),n[f-7]),(o=n[f-15],m(o,7)^m(o,18)^v(o,3))),n[f-16]),c=b(b(b(b(w,m(o=a,6)^m(o,11)^m(o,25)),a&g^~a&y),d[f]),n[f]),r=b(m(r=i,2)^m(r,13)^m(r,22),i&u^i&s^u&s),w=y,y=g,g=a,a=b(p,c),p=s,s=u,u=i,i=b(c,r);t[0]=b(i,t[0]),t[1]=b(u,t[1]),t[2]=b(s,t[2]),t[3]=b(p,t[3]),t[4]=b(a,t[4]),t[5]=b(g,t[5]),t[6]=b(y,t[6]),t[7]=b(w,t[7])}return t}var i=c(\"./helpers\"),m=function(e,t){return e>>>t|e<<32-t},v=function(e,t){return e>>>t};d.exports=function(e){return i.hash(e,o,32,!0)}}.call(this,c(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},c(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/crypto-browserify/sha256.js\",\"/node_modules/gulp-browserify/node_modules/crypto-browserify\")},{\"./helpers\":4,buffer:3,lYpoI2:11}],10:[function(e,t,f){!function(e,t,n,r,o,i,u,s,a){f.read=function(e,t,n,r,o){var i,u,l=8*o-r-1,c=(1<<l)-1,d=c>>1,s=-7,a=n?o-1:0,f=n?-1:1,o=e[t+a];for(a+=f,i=o&(1<<-s)-1,o>>=-s,s+=l;0<s;i=256*i+e[t+a],a+=f,s-=8);for(u=i&(1<<-s)-1,i>>=-s,s+=r;0<s;u=256*u+e[t+a],a+=f,s-=8);if(0===i)i=1-d;else{if(i===c)return u?NaN:1/0*(o?-1:1);u+=Math.pow(2,r),i-=d}return(o?-1:1)*u*Math.pow(2,i-r)},f.write=function(e,t,l,n,r,c){var o,i,u=8*c-r-1,s=(1<<u)-1,a=s>>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:c-1,h=n?1:-1,c=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(i=isNaN(t)?1:0,o=s):(o=Math.floor(Math.log(t)/Math.LN2),t*(n=Math.pow(2,-o))<1&&(o--,n*=2),2<=(t+=1<=o+a?d/n:d*Math.pow(2,1-a))*n&&(o++,n/=2),s<=o+a?(i=0,o=s):1<=o+a?(i=(t*n-1)*Math.pow(2,r),o+=a):(i=t*Math.pow(2,a-1)*Math.pow(2,r),o=0));8<=r;e[l+f]=255&i,f+=h,i/=256,r-=8);for(o=o<<r|i,u+=r;0<u;e[l+f]=255&o,f+=h,o/=256,u-=8);e[l+f-h]|=128*c}}.call(this,e(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/ieee754/index.js\",\"/node_modules/gulp-browserify/node_modules/ieee754\")},{buffer:3,lYpoI2:11}],11:[function(e,h,t){!function(e,t,n,r,o,f,l,c,d){var i,u,s;function a(){}(e=h.exports={}).nextTick=(u=\"undefined\"!=typeof window&&window.setImmediate,s=\"undefined\"!=typeof window&&window.postMessage&&window.addEventListener,u?function(e){return window.setImmediate(e)}:s?(i=[],window.addEventListener(\"message\",function(e){var t=e.source;t!==window&&null!==t||\"process-tick\"!==e.data||(e.stopPropagation(),0<i.length&&i.shift()())},!0),function(e){i.push(e),window.postMessage(\"process-tick\",\"*\")}):function(e){setTimeout(e,0)}),e.title=\"browser\",e.browser=!0,e.env={},e.argv=[],e.on=a,e.addListener=a,e.once=a,e.off=a,e.removeListener=a,e.removeAllListeners=a,e.emit=a,e.binding=function(e){throw new Error(\"process.binding is not supported\")},e.cwd=function(){return\"/\"},e.chdir=function(e){throw new Error(\"process.chdir is not supported\")}}.call(this,e(\"lYpoI2\"),\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"buffer\").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],\"/node_modules/gulp-browserify/node_modules/process/browser.js\",\"/node_modules/gulp-browserify/node_modules/process\")},{buffer:3,lYpoI2:11}]},{},[1])(1)});","import { matrixCenterZMean, matrixPQN, matrixZRescale, xGetFromToIndex, xSubtract, xSum, xyMaxYPoint, } from 'ml-spectra-processing';\nimport hash from 'object-hash';\nimport { getNormalizedData } from './getNormalizedData.js';\nimport { integration } from './scaled/integration.js';\nimport { max } from './scaled/max.js';\nimport { min } from './scaled/min.js';\nimport { minMax } from './scaled/minMax.js';\nlet cache = {};\n/**\n * Calculate post-processed data with various transformations and calculations\n * @param spectraProcessor - SpectraProcessor instance\n * @param options - Processing options\n * @returns Post-processed data\n */\nexport function getPostProcessedData(spectraProcessor, options = {}) {\n    const optionsHash = hash(options);\n    if (!spectraProcessor.spectra || spectraProcessor.spectra.length === 0) {\n        return {};\n    }\n    const { scale = {}, ids, ranges, calculations, filters = [] } = options;\n    const { range, targetID, relative, method = '' } = scale;\n    const spectra = spectraProcessor.getSpectra(ids);\n    // Check if we can reuse the cache\n    if (cache.optionsHash === optionsHash) {\n        let validCache = true;\n        for (const spectrum of spectra) {\n            if (!cache.weakMap?.get(spectrum.normalized))\n                validCache = false;\n        }\n        if (validCache)\n            return cache;\n    }\n    const weakMap = new WeakMap();\n    for (const spectrum of spectra) {\n        weakMap.set(spectrum.normalized, true);\n    }\n    const normalizedData = getNormalizedData(spectra);\n    for (const filter of filters) {\n        switch (filter.name) {\n            case 'pqn': {\n                normalizedData.matrix = matrixPQN(normalizedData.matrix, filter.options).data;\n                break;\n            }\n            case 'centerMean': {\n                normalizedData.matrix = matrixCenterZMean(normalizedData.matrix);\n                break;\n            }\n            case 'rescale': {\n                normalizedData.matrix = matrixZRescale(normalizedData.matrix, filter.options);\n                break;\n            }\n            case '':\n            case undefined:\n                break;\n            default:\n                throw new Error(`Unknown matrix filter name: ${filter.name}`);\n        }\n    }\n    const normalizedTarget = targetID\n        ? spectraProcessor.getSpectrum(targetID)?.normalized\n        : spectraProcessor.spectra[0].normalized;\n    if (!normalizedTarget) {\n        throw new Error('No normalized target found');\n    }\n    if (method) {\n        switch (method.toLowerCase()) {\n            case 'min':\n                min(normalizedData.matrix, normalizedTarget, range);\n                break;\n            case 'max':\n                max(normalizedData.matrix, normalizedTarget, range);\n                break;\n            case 'minmax':\n                minMax(normalizedData.matrix, normalizedTarget, range);\n                break;\n            case 'integration':\n                integration(normalizedData.matrix, normalizedTarget, range);\n                break;\n            default:\n                throw new Error(`getPostProcessedData: unknown method: ${method}`);\n        }\n    }\n    if (relative) {\n        for (let i = 0; i < normalizedData.matrix.length; i++) {\n            normalizedData.matrix[i] = xSubtract(normalizedData.matrix[i], normalizedTarget.y);\n        }\n    }\n    const result = normalizedData;\n    if (ranges) {\n        result.ranges = [];\n        for (const spectrum of normalizedData.matrix) {\n            const rangesCopy = structuredClone(ranges);\n            const yNormalized = spectrum;\n            const resultRanges = {};\n            result.ranges.push(resultRanges);\n            for (const currentRange of rangesCopy) {\n                if (currentRange.label) {\n                    const fromToIndex = xGetFromToIndex(normalizedTarget.x, currentRange);\n                    const deltaX = normalizedTarget.x[1] - normalizedTarget.x[0];\n                    currentRange.integration = xSum(yNormalized, fromToIndex) * deltaX;\n                    currentRange.maxPoint = xyMaxYPoint({ x: normalizedData.x, y: yNormalized }, fromToIndex);\n                    resultRanges[currentRange.label] = currentRange;\n                }\n            }\n        }\n    }\n    if (calculations && result.ranges) {\n        result.calculations = result.ranges.map(() => {\n            return {};\n        });\n        const parameters = Object.keys(result.ranges[0]);\n        for (const calculation of calculations) {\n            // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func\n            const callback = new Function(...parameters, `return ${calculation.formula}`);\n            for (let i = 0; i < result.ranges.length; i++) {\n                const oneRanges = result.ranges[i];\n                const values = parameters.map((key) => oneRanges[key].integration);\n                result.calculations[i][calculation.label] = callback(...values);\n            }\n        }\n    }\n    cache = { ...result, optionsHash, weakMap };\n    return cache;\n}\n//# sourceMappingURL=getPostProcessedData.js.map","import { xGetFromToIndex, xMinValue, xMultiply } from 'ml-spectra-processing';\n/**\n * Scale matrix rows to match minimum value of target\n * @param matrix - Matrix to scale (modified in place)\n * @param normalizedTarget - Target data with x and y arrays\n * @param range - Optional range to consider\n */\nexport function min(matrix, normalizedTarget, range = {}) {\n    const fromToIndex = xGetFromToIndex(normalizedTarget.x, range);\n    const targetValue = xMinValue(normalizedTarget.y, fromToIndex);\n    const values = matrix.map((row) => xMinValue(row, fromToIndex));\n    for (let i = 0; i < matrix.length; i++) {\n        const factor = targetValue / values[i];\n        matrix[i] = xMultiply(matrix[i], factor);\n    }\n}\n//# sourceMappingURL=min.js.map","import { xGetFromToIndex, xMaxValue, xMultiply } from 'ml-spectra-processing';\n/**\n * Scale matrix rows to match maximum value of target\n * @param matrix - Matrix to scale (modified in place)\n * @param normalizedTarget - Target data with x and y arrays\n * @param range - Optional range to consider\n */\nexport function max(matrix, normalizedTarget, range = {}) {\n    const fromToIndex = xGetFromToIndex(normalizedTarget.x, range);\n    const targetValue = xMaxValue(normalizedTarget.y, fromToIndex);\n    const values = matrix.map((row) => xMaxValue(row, fromToIndex));\n    for (let i = 0; i < matrix.length; i++) {\n        const factor = targetValue / values[i];\n        matrix[i] = xMultiply(matrix[i], factor);\n    }\n}\n//# sourceMappingURL=max.js.map","import { xGetFromToIndex, xMaxValue, xMinValue } from 'ml-spectra-processing';\n/**\n * Scale matrix rows to match min-max range of target\n * @param matrix - Matrix to scale (modified in place)\n * @param normalizedTarget - Target data with x and y arrays\n * @param range - Optional range to consider\n */\nexport function minMax(matrix, normalizedTarget, range = {}) {\n    const fromToIndex = xGetFromToIndex(normalizedTarget.x, range);\n    const targetValue = {\n        min: xMinValue(normalizedTarget.y, fromToIndex),\n        max: xMaxValue(normalizedTarget.y, fromToIndex),\n    };\n    const deltaTarget = targetValue.max - targetValue.min;\n    const minTarget = targetValue.min;\n    const values = matrix.map((row) => {\n        return {\n            min: xMinValue(row, fromToIndex),\n            max: xMaxValue(row, fromToIndex),\n        };\n    });\n    for (let i = 0; i < matrix.length; i++) {\n        const deltaSource = values[i].max - values[i].min;\n        const minSource = values[i].min;\n        const newData = [];\n        for (let j = 0; j < normalizedTarget.y.length; j++) {\n            newData.push(((matrix[i][j] - minSource) / deltaSource) * deltaTarget + minTarget);\n        }\n        matrix[i] = newData;\n    }\n}\n//# sourceMappingURL=minMax.js.map","import { xGetFromToIndex, xMultiply, xSum } from 'ml-spectra-processing';\n/**\n * Scale matrix rows to match integration (sum) of target\n * @param matrix - Matrix to scale (modified in place)\n * @param normalizedTarget - Target data with x and y arrays\n * @param range - Optional range to consider\n */\nexport function integration(matrix, normalizedTarget, range = {}) {\n    const fromToIndex = xGetFromToIndex(normalizedTarget.x, range);\n    const targetValue = xSum(normalizedTarget.y, fromToIndex);\n    const values = matrix.map((row) => xSum(row, fromToIndex));\n    for (let i = 0; i < matrix.length; i++) {\n        const factor = targetValue / values[i];\n        matrix[i] = xMultiply(matrix[i], factor);\n    }\n}\n//# sourceMappingURL=integration.js.map","// Based on https://github.com/scijs/cholesky-solve\n\n/*\nThe MIT License (MIT)\n\nCopyright (c) 2013 Eric Arnebäck\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nfunction ldlSymbolic(\n  n /* A and L are n-by-n, where n >= 0 */,\n  Ap /* input of size n + 1, not modified */,\n  Ai /* input of size nz=Ap[n], not modified */,\n  Lp /* output of size n + 1, not defined on input */,\n  Parent /* output of size n, not defined on input */,\n  Lnz /* output of size n, not defined on input */,\n  Flag /* workspace of size n, not defn. on input or output */,\n) {\n  let i, k, p, kk, p2;\n\n  for (k = 0; k < n; k++) {\n    /* L(k,:) pattern: all nodes reachable in etree from nz in A(0:k-1,k) */\n    Parent[k] = -1; /* parent of k is not yet known */\n    Flag[k] = k; /* mark node k as visited */\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\n    kk = k; /* kth original, or permuted, column */\n    p2 = Ap[kk + 1];\n    for (p = Ap[kk]; p < p2; p++) {\n      /* A (i,k) is nonzero (original or permuted A) */\n      i = Ai[p];\n\n      if (i < k) {\n        /* follow path from i to root of etree, stop at flagged node */\n        for (; Flag[i] !== k; i = Parent[i]) {\n          /* find parent of i if not yet determined */\n          if (Parent[i] === -1) Parent[i] = k;\n          Lnz[i]++; /* L (k,i) is nonzero */\n          Flag[i] = k; /* mark i as visited */\n        }\n      }\n    }\n  }\n  /* construct Lp index array from Lnz column counts */\n  Lp[0] = 0;\n  for (k = 0; k < n; k++) {\n    Lp[k + 1] = Lp[k] + Lnz[k];\n  }\n}\n\nfunction ldlNumeric(\n  n /* A and L are n-by-n, where n >= 0 */,\n  Ap /* input of size n+1, not modified */,\n  Ai /* input of size nz=Ap[n], not modified */,\n  Ax /* input of size nz=Ap[n], not modified */,\n  Lp /* input of size n+1, not modified */,\n  Parent /* input of size n, not modified */,\n  Lnz /* output of size n, not defn. on input */,\n  Li /* output of size lnz=Lp[n], not defined on input */,\n  Lx /* output of size lnz=Lp[n], not defined on input */,\n  D /* output of size n, not defined on input */,\n  Y /* workspace of size n, not defn. on input or output */,\n  Pattern /* workspace of size n, not defn. on input or output */,\n  Flag /* workspace of size n, not defn. on input or output */,\n) {\n  let yi, lKi;\n  let i, k, p, kk, p2, len, top;\n  for (k = 0; k < n; k++) {\n    /* compute nonzero Pattern of kth row of L, in topological order */\n    Y[k] = 0.0; /* Y(0:k) is now all zero */\n    top = n; /* stack for pattern is empty */\n    Flag[k] = k; /* mark node k as visited */\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\n    kk = k; /* kth original, or permuted, column */\n    p2 = Ap[kk + 1];\n    for (p = Ap[kk]; p < p2; p++) {\n      i = Ai[p]; /* get A(i,k) */\n      if (i <= k) {\n        Y[i] += Ax[p]; /* scatter A(i,k) into Y (sum duplicates) */\n        for (len = 0; Flag[i] !== k; i = Parent[i]) {\n          Pattern[len++] = i; /* L(k,i) is nonzero */\n          Flag[i] = k; /* mark i as visited */\n        }\n        while (len > 0) Pattern[--top] = Pattern[--len];\n      }\n    }\n    /* compute numerical values kth row of L (a sparse triangular solve) */\n    D[k] = Y[k]; /* get D(k,k) and clear Y(k) */\n    Y[k] = 0.0;\n    for (; top < n; top++) {\n      i = Pattern[top]; /* Pattern[top:n-1] is pattern of L(:,k) */\n      yi = Y[i]; /* get and clear Y(i) */\n      Y[i] = 0.0;\n      p2 = Lp[i] + Lnz[i];\n      for (p = Lp[i]; p < p2; p++) {\n        Y[Li[p]] -= Lx[p] * yi;\n      }\n      lKi = yi / D[i]; /* the nonzero entry L(k,i) */\n      D[k] -= lKi * yi;\n      Li[p] = k; /* store L(k,i) in column form of L */\n      Lx[p] = lKi;\n      Lnz[i]++; /* increment count of nonzeros in col i */\n    }\n\n    if (D[k] === 0.0) return k; /* failure, D(k,k) is zero */\n  }\n\n  return n; /* success, diagonal of D is all nonzero */\n}\n\nfunction ldlLsolve(\n  n /* L is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  Lp /* input of size n+1, not modified */,\n  Li /* input of size lnz=Lp[n], not modified */,\n  Lx /* input of size lnz=Lp[n], not modified */,\n) {\n  let j, p, p2;\n  for (j = 0; j < n; j++) {\n    p2 = Lp[j + 1];\n    for (p = Lp[j]; p < p2; p++) {\n      X[Li[p]] -= Lx[p] * X[j];\n    }\n  }\n}\n\nfunction ldlDsolve(\n  n /* D is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  D /* input of size n, not modified */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[j] /= D[j];\n  }\n}\n\nfunction ldlLTsolve(\n  n /* L is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  Lp /* input of size n+1, not modified */,\n  Li /* input of size lnz=Lp[n], not modified */,\n  Lx /* input of size lnz=Lp[n], not modified */,\n) {\n  let j, p, p2;\n  for (j = n - 1; j >= 0; j--) {\n    p2 = Lp[j + 1];\n    for (p = Lp[j]; p < p2; p++) {\n      X[j] -= Lx[p] * X[Li[p]];\n    }\n  }\n}\n\nfunction ldlPerm(\n  n /* size of X, B, and P */,\n  X /* output of size n. */,\n  B /* input of size n. */,\n  P /* input permutation array of size n. */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[j] = B[P[j]];\n  }\n}\n\nfunction ldlPermt(\n  n /* size of X, B, and P */,\n  X /* output of size n. */,\n  B /* input of size n. */,\n  P /* input permutation array of size n. */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[P[j]] = B[j];\n  }\n}\n\nfunction prepare(M, n, P) {\n  // if a permutation was specified, apply it.\n  if (P) {\n    let Pinv = new Array(n);\n\n    for (let k = 0; k < n; k++) {\n      Pinv[P[k]] = k;\n    }\n\n    let Mt = []; // scratch memory\n    // Apply permutation. We make M into P*M*P^T\n    for (let a = 0; a < M.length; ++a) {\n      let ar = Pinv[M[a][0]];\n      let ac = Pinv[M[a][1]];\n\n      // we only store the upper-diagonal elements(since we assume matrix is symmetric, we only need to store these)\n      // if permuted element is below diagonal, we simply transpose it.\n      if (ac < ar) {\n        let t = ac;\n        ac = ar;\n        ar = t;\n      }\n\n      Mt[a] = [];\n      Mt[a][0] = ar;\n      Mt[a][1] = ac;\n      Mt[a][2] = M[a][2];\n    }\n\n    M = Mt; // copy scratch memory.\n  } else {\n    // if P argument is null, we just use an identity permutation.\n    P = [];\n    for (let i = 0; i < n; ++i) {\n      P[i] = i;\n    }\n  }\n\n  // The sparse matrix we are decomposing is A.\n  // Now we shall create A from M.\n  let Ap = new Array(n + 1);\n  let Ai = new Array(M.length);\n  let Ax = new Array(M.length);\n\n  // count number of non-zero elements in columns.\n  let LNZ = [];\n  for (let i = 0; i < n; ++i) {\n    LNZ[i] = 0;\n  }\n  for (let a = 0; a < M.length; ++a) {\n    LNZ[M[a][1]]++;\n  }\n\n  Ap[0] = 0;\n  for (let i = 0; i < n; ++i) {\n    Ap[i + 1] = Ap[i] + LNZ[i];\n  }\n\n  let coloffset = [];\n  for (let a = 0; a < n; ++a) {\n    coloffset[a] = 0;\n  }\n\n  // go through all elements in M, and add them to sparse matrix A.\n  for (let i = 0; i < M.length; ++i) {\n    let e = M[i];\n    let col = e[1];\n\n    let adr = Ap[col] + coloffset[col];\n    Ai[adr] = e[0];\n    Ax[adr] = e[2];\n\n    coloffset[col]++;\n  }\n\n  let D = new Array(n);\n  let Y = new Array(n);\n  let Lp = new Array(n + 1);\n  let Parent = new Array(n);\n  let Lnz = new Array(n);\n  let Flag = new Array(n);\n  let Pattern = new Array(n);\n  let bp1 = new Array(n);\n  let x = new Array(n);\n  let d;\n\n  ldlSymbolic(n, Ap, Ai, Lp, Parent, Lnz, Flag);\n\n  let Lx = new Array(Lp[n]);\n  let Li = new Array(Lp[n]);\n\n  d = ldlNumeric(n, Ap, Ai, Ax, Lp, Parent, Lnz, Li, Lx, D, Y, Pattern, Flag);\n\n  if (d === n) {\n    return (b) => {\n      ldlPerm(n, bp1, b, P);\n      ldlLsolve(n, bp1, Lp, Li, Lx);\n      ldlDsolve(n, bp1, D);\n      ldlLTsolve(n, bp1, Lp, Li, Lx);\n      ldlPermt(n, x, bp1, P);\n\n      return x;\n    };\n  } else {\n    return null;\n  }\n}\n\nexport { prepare as default };\n","'use strict'\n\nmodule.exports = cuthillMckee\n\nfunction compareNum(a, b) { return a - b }\n\nfunction cuthillMckee(list, n) {\n  var adj = new Array(n)\n  var visited = new Array(n)\n  for(var i=0; i<n; ++i) {\n    adj[i]     = []\n    visited[i] = false\n  }\n\n  for(var i=0; i<list.length; ++i) {\n    var l = list[i]\n    adj[l[0]].push(l[1])\n  }\n\n  var toVisit = new Array(n)\n  var eol = 0\n  var ptr = 0\n  for(var i=0; i<n; ++i) {\n    if(visited[i]) {\n      continue\n    }\n    toVisit[eol++] = i\n    visited[i] = true\n    while(ptr < eol) {\n      var v = toVisit[ptr++]\n      var nbhd = adj[v]\n      nbhd.sort(compareNum)\n      for(var j=0; j<nbhd.length; ++j) {\n        var u = nbhd[j]\n        if(visited[u]) {\n          continue\n        }\n        visited[u] = true\n        toVisit[eol++] = u\n      }\n    }\n  }\n\n  var result = new Array(n)\n  for(var i=0; i<n; ++i) {\n    result[toVisit[i]] = i\n  }\n\n  return result\n}\n","import cuthillMckee from 'cuthill-mckee';\n\nconst getClosestNumber = (array = [], goal = 0) => {\n  const closest = array.reduce((prev, curr) => {\n    return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;\n  });\n  return closest;\n};\n\nconst getCloseIndex = (array = [], goal = 0) => {\n  const closest = getClosestNumber(array, goal);\n  return array.indexOf(closest);\n};\n\nconst updateSystem = (matrix, y, weights) => {\n  let nbPoints = y.length;\n  let l = nbPoints - 1;\n  let newMatrix = new Array(matrix.length);\n  let newVector = new Float64Array(nbPoints);\n  for (let i = 0; i < l; i++) {\n    let w = weights[i];\n    let diag = i * 2;\n    let next = diag + 1;\n    newMatrix[diag] = matrix[diag].slice();\n    newMatrix[next] = matrix[next].slice();\n    if (w === 0) {\n      newVector[i] = 0;\n    } else {\n      newVector[i] = y[i] * w;\n      newMatrix[diag][2] += w;\n    }\n  }\n  newVector[l] = y[l] * weights[l];\n  newMatrix[l * 2] = matrix[l * 2].slice();\n  newMatrix[l * 2][2] += weights[l];\n\n  return [newMatrix, newVector];\n};\n\nconst getDeltaMatrix = (nbPoints, lambda) => {\n  let matrix = [];\n  let last = nbPoints - 1;\n  for (let i = 0; i < last; i++) {\n    matrix.push([i, i, lambda * 2]);\n    matrix.push([i + 1, i, -1 * lambda]);\n  }\n  matrix[0][2] = lambda;\n  matrix.push([last, last, lambda]);\n  return {\n    lowerTriangularNonZeros: matrix,\n    permutationEncodedArray: cuthillMckee(matrix, nbPoints),\n  };\n};\n\nexport { updateSystem, getDeltaMatrix, getCloseIndex, getClosestNumber };\n","import { xMultiply, xNoiseSanPlot, xAbsoluteSum } from 'ml-spectra-processing';\n\nimport cholesky from './choleskySolver';\nimport { updateSystem, getDeltaMatrix, getCloseIndex } from './utils';\n\nfunction getControlPoints(x, y, options = {}) {\n  const { length } = x;\n  let { controlPoints = Int8Array.from({ length }).fill(0) } = options;\n  const { zones = [], weights = Float64Array.from({ length }).fill(1) } =\n    options;\n\n  if (x.length !== y.length) {\n    throw new RangeError('Y should match the length with X');\n  } else if (controlPoints.length !== x.length) {\n    throw new RangeError('controlPoints should match the length with X');\n  } else if (weights.length !== x.length) {\n    throw new RangeError('weights should match the length with X');\n  }\n\n  zones.forEach((range) => {\n    let indexFrom = getCloseIndex(x, range.from);\n    let indexTo = getCloseIndex(x, range.to);\n    if (indexFrom > indexTo) [indexFrom, indexTo] = [indexTo, indexFrom];\n    for (let i = indexFrom; i < indexTo; i++) {\n      controlPoints[i] = 1;\n    }\n  });\n\n  return {\n    weights:\n      'controlPoints' in options || zones.length > 0\n        ? xMultiply(weights, controlPoints)\n        : weights,\n    controlPoints,\n  };\n}\n\n/**\n * Fit the baseline drift by iteratively changing weights of sum square error between the fitted baseline and original signals,\n * for further information about the parameters you can get the [paper of airPLS](https://github.com/zmzhang/airPLS/blob/main/airPLS_manuscript.pdf)\n * @param {Array<number>} x - x axis data useful when control points or zones are submitted\n * @param {Array<number>} y - Original data\n * @param {object} [options={}] - Options object\n * @param {number} [options.maxIterations = 100] - Maximal number of iterations if the method does not reach the stop criterion\n * @param {number} [options.tolerance = 0.001] - Factor of the sum of absolute value of original data, to compute stop criterion\n * @param {Array<number>} [options.weights = [1,1,...]] - Initial weights vector, default each point has the same weight\n * @param {number} [options.lambda = 100] - Factor of weights matrix in -> [I + lambda D'D]z = x\n * @param {Array<number>} [options.controlPoints = []] - Array of 0|1 to force the baseline cross those points.\n * @param {Array<number>} [options.zones = []] - Array of x axis values (as from - to), to force that baseline cross those zones.\n * @returns {{corrected: Array<number>, error: number, iteration: number, baseline: Array<number>}}\n */\n\nexport default function airPLS(x, y, options = {}) {\n  const { weights, controlPoints } = getControlPoints(x, y, options);\n  let { maxIterations = 100, lambda = 10, tolerance = 0.001 } = options;\n\n  let baseline, iteration;\n  let sumNegDifferences = Number.MAX_SAFE_INTEGER;\n  const corrected = Float64Array.from(y);\n  let stopCriterion = getStopCriterion(y, tolerance);\n\n  const { length } = y;\n  let { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(\n    length,\n    lambda,\n  );\n\n  let threshold = 1;\n  const l = length - 1;\n  let prevNegSum = Number.MAX_SAFE_INTEGER;\n  for (\n    iteration = 0;\n    iteration < maxIterations && Math.abs(sumNegDifferences) > stopCriterion;\n    iteration++\n  ) {\n    let [leftHandSide, rightHandSide] = updateSystem(\n      lowerTriangularNonZeros,\n      y,\n      weights,\n    );\n\n    let cho = cholesky(leftHandSide, length, permutationEncodedArray);\n\n    baseline = cho(rightHandSide);\n\n    sumNegDifferences = applyCorrection(y, baseline, corrected);\n    if (iteration === 1) {\n      const { positive } = xNoiseSanPlot(corrected);\n      threshold = positive;\n    } else {\n      const absChange = Math.abs(prevNegSum / sumNegDifferences);\n      if (absChange < 1.01 && absChange > 0.99) {\n        break;\n      }\n    }\n\n    prevNegSum = sumNegDifferences + 0;\n    for (let i = 1; i < l; i++) {\n      const diff = corrected[i];\n      if (controlPoints[i] < 1 && Math.abs(diff) > threshold) {\n        weights[i] = 0;\n      } else {\n        const factor = diff > 0 ? -1 : 1;\n        weights[i] = Math.exp(\n          (factor * (iteration * diff)) / Math.abs(sumNegDifferences),\n        );\n      }\n    }\n\n    weights[0] = 1;\n    weights[l] = 1;\n  }\n\n  return {\n    corrected,\n    baseline,\n    iteration,\n    error: sumNegDifferences,\n  };\n\n  function applyCorrection(y, baseline, corrected) {\n    let sumNegDifferences = 0;\n    for (let i = 0; i < y.length; i++) {\n      let diff = y[i] - baseline[i];\n      if (diff < 0) sumNegDifferences += diff;\n      corrected[i] = diff;\n    }\n\n    return sumNegDifferences;\n  }\n}\n\nfunction getStopCriterion(y, tolerance) {\n  let sum = xAbsoluteSum(y);\n  return tolerance * sum;\n}\n","import { 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\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array<number>} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array<number>}\n */\n\nfunction sequentialFill() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (_typeof(input) === 'object' && !isAnyArray(input)) {\n    options = input;\n    input = [];\n  }\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  var _options = options,\n      _options$from = _options.from,\n      from = _options$from === void 0 ? 0 : _options$from,\n      _options$to = _options.to,\n      to = _options$to === void 0 ? 10 : _options$to,\n      _options$size = _options.size,\n      size = _options$size === void 0 ? input.length : _options$size,\n      step = _options.step;\n\n  if (size !== 0 && step) {\n    throw new Error('step is defined by the array size');\n  }\n\n  if (!size) {\n    if (step) {\n      size = Math.floor((to - from) / step) + 1;\n    } else {\n      size = to - from + 1;\n    }\n  }\n\n  if (!step && size) {\n    step = (to - from) / (size - 1);\n  }\n\n  if (Array.isArray(input)) {\n    // only works with normal array\n    input.length = 0;\n\n    for (var i = 0; i < size; i++) {\n      input.push(from);\n      from += step;\n    }\n  } else {\n    if (input.length !== size) {\n      throw new Error('sequentialFill typed array must have the correct length');\n    }\n\n    for (var _i = 0; _i < size; _i++) {\n      input[_i] = from;\n      from += step;\n    }\n  }\n\n  return input;\n}\n\nexport { sequentialFill as default };\n","import { isAnyArray } from 'is-any-array';\n/**\n * Check that x and y are arrays with the same length.\n * @param x - first array\n * @param y - second array\n * @throws if x or y are not the same length, or if they are not arrays\n */\nexport function checkArrayLength(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y)) {\n        throw new TypeError('x and y must be arrays');\n    }\n    if (x.length !== y.length) {\n        throw new RangeError('x and y arrays must have the same length');\n    }\n}\n//# sourceMappingURL=checkArrayLength.js.map","import { isAnyArray } from 'is-any-array';\nimport { checkArrayLength } from './checkArrayLength';\nexport class BaseRegression {\n    constructor() {\n        if (new.target === BaseRegression) {\n            throw new Error('BaseRegression must be subclassed');\n        }\n    }\n    predict(x) {\n        if (typeof x === 'number') {\n            return this._predict(x);\n        }\n        else if (isAnyArray(x)) {\n            const y = [];\n            for (const xVal of x) {\n                y.push(this._predict(xVal));\n            }\n            return y;\n        }\n        else {\n            throw new TypeError('x must be a number or array');\n        }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _predict(x) {\n        throw new Error('_predict must be implemented');\n    }\n    train() {\n        // Do nothing for this package\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toString(precision) {\n        return '';\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toLaTeX(precision) {\n        return '';\n    }\n    /**\n     * Return the correlation coefficient of determination (r) and chi-square.\n     * @param x - explanatory variable\n     * @param y - response variable\n     * @return - Object with further statistics.\n     */\n    score(x, y) {\n        checkArrayLength(x, y);\n        const n = x.length;\n        const y2 = new Array(n);\n        for (let i = 0; i < n; i++) {\n            y2[i] = this._predict(x[i]);\n        }\n        let xSum = 0;\n        let ySum = 0;\n        let chi2 = 0;\n        let rmsd = 0;\n        let xSquared = 0;\n        let ySquared = 0;\n        let xY = 0;\n        for (let i = 0; i < n; i++) {\n            xSum += y2[i];\n            ySum += y[i];\n            xSquared += y2[i] * y2[i];\n            ySquared += y[i] * y[i];\n            xY += y2[i] * y[i];\n            if (y[i] !== 0) {\n                chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n            }\n            rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n        }\n        const r = (n * xY - xSum * ySum) /\n            Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n        return {\n            r,\n            r2: r * r,\n            chi2,\n            rmsd: Math.sqrt(rmsd / n),\n        };\n    }\n}\n//# sourceMappingURL=BaseRegression.js.map","/**\n * Cast `number` to string. Optionally `digits` specifies significant figures.\n * @param number\n * @param figures\n * @returns - A string representation of `number`.\n */\nexport function maybeToPrecision(number, figures) {\n    if (number < 0) {\n        number = 0 - number;\n        if (typeof figures === 'number') {\n            return `- ${number.toPrecision(figures)}`;\n        }\n        else {\n            return `- ${number.toString()}`;\n        }\n    }\n    else if (typeof figures === 'number') {\n        return number.toPrecision(figures);\n    }\n    else {\n        return number.toString();\n    }\n}\n//# sourceMappingURL=maybeToPrecision.js.map","import { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\nimport { BaseRegression, checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\nexport class PolynomialRegression extends BaseRegression {\n    /**\n     * @param x - independent or explanatory variable\n     * @param y - dependent or response variable\n     * @param degree - degree of the polynomial regression, or array of powers to be used. When degree is an array, intercept at zero is forced to false/ignored.\n     * @example `new PolynomialRegression(x, y, 2)`, in this case, you can pass the option `interceptAtZero`, if you need it.\n     * @param options\n     * @example `new PolynomialRegression(x, y, [1, 3, 5])`\n     * Each of the degrees corresponds to a column, so if you have them switched, just do:\n     * @example `new PolynomialRegression(x, y, [3, 1, 5])`\n     * @param options.interceptAtZero - force the polynomial regression so that f(0) = 0\n     */\n    constructor(x, y, degree, options = {}) {\n        super();\n        // @ts-expect-error internal use only\n        if (x === true) {\n            // @ts-expect-error internal use only\n            this.degree = y.degree;\n            // @ts-expect-error internal use only\n            this.powers = y.powers;\n            // @ts-expect-error internal use only\n            this.coefficients = y.coefficients;\n        }\n        else {\n            checkArrayLength(x, y);\n            const result = regress(x, y, degree, options);\n            this.degree = result.degree;\n            this.powers = result.powers;\n            this.coefficients = result.coefficients;\n        }\n    }\n    _predict(x) {\n        let y = 0;\n        for (let k = 0; k < this.powers.length; k++) {\n            y += this.coefficients[k] * x ** this.powers[k];\n        }\n        return y;\n    }\n    toJSON() {\n        return {\n            name: 'polynomialRegression',\n            degree: this.degree,\n            powers: this.powers,\n            coefficients: this.coefficients,\n        };\n    }\n    toString(precision) {\n        return this._toFormula(precision, false);\n    }\n    toLaTeX(precision) {\n        return this._toFormula(precision, true);\n    }\n    _toFormula(precision, isLaTeX) {\n        let sup = '^';\n        let closeSup = '';\n        let times = ' * ';\n        if (isLaTeX) {\n            sup = '^{';\n            closeSup = '}';\n            times = '';\n        }\n        let fn = '';\n        let str = '';\n        for (let k = 0; k < this.coefficients.length; k++) {\n            str = '';\n            if (this.coefficients[k] !== 0) {\n                if (this.powers[k] === 0) {\n                    str = maybeToPrecision(this.coefficients[k], precision);\n                }\n                else if (this.powers[k] === 1) {\n                    str = `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n                }\n                else {\n                    str = `${maybeToPrecision(this.coefficients[k], precision) + times}x${sup}${this.powers[k]}${closeSup}`;\n                }\n                if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n                    str = ` + ${str}`;\n                }\n                else if (k !== this.coefficients.length - 1) {\n                    str = ` ${str}`;\n                }\n            }\n            fn = str + fn;\n        }\n        if (fn.startsWith('+')) {\n            fn = fn.slice(1);\n        }\n        return `f(x) = ${fn}`;\n    }\n    static load(json) {\n        if (json.name !== 'polynomialRegression') {\n            throw new TypeError('not a polynomial regression model');\n        }\n        // @ts-expect-error internal use only\n        return new PolynomialRegression(true, json);\n    }\n}\n/**\n * Perform a polynomial regression on the given data set.\n * This is an internal function.\n * @param x - independent or explanatory variable\n * @param y - dependent or response variable\n * @param degree - degree of the polynomial regression\n * @param options.interceptAtZero - force the polynomial regression so that $f(0) = 0$\n * @param options\n */\nfunction regress(x, y, degree, options = {}) {\n    const n = x.length;\n    let { interceptAtZero = false } = options;\n    let powers = [];\n    if (Array.isArray(degree)) {\n        powers = degree;\n        interceptAtZero = false; //must be false in this case\n    }\n    else if (typeof degree === 'number') {\n        if (interceptAtZero) {\n            powers = new Array(degree);\n            for (let k = 0; k < degree; k++) {\n                powers[k] = k + 1;\n            }\n        }\n        else {\n            powers = new Array(degree + 1);\n            for (let k = 0; k <= degree; k++) {\n                powers[k] = k;\n            }\n        }\n    }\n    const nCoefficients = powers.length; //1 per power, in any case.\n    const F = new Matrix(n, nCoefficients);\n    const Y = new Matrix([y]);\n    for (let k = 0; k < nCoefficients; k++) {\n        for (let i = 0; i < n; i++) {\n            if (powers[k] === 0) {\n                F.set(i, k, 1);\n            }\n            else {\n                F.set(i, k, x[i] ** powers[k]);\n            }\n        }\n    }\n    const FT = new MatrixTransposeView(F);\n    const A = FT.mmul(F);\n    const B = FT.mmul(new MatrixTransposeView(Y));\n    return {\n        coefficients: solve(A, B).to1DArray(),\n        degree: Math.max(...powers),\n        powers,\n    };\n}\n//# sourceMappingURL=index.js.map","import sequentialFill from 'ml-array-sequential-fill';\nimport { baselineCorrectionRegression } from 'ml-baseline-correction-regression';\n\n/**\n * Iterative polynomial fitting [1]\n *\n * Implementation based on ml-baseline-correction-regression\n *\n * References:\n * [1] Gan, F.; Ruan, G.; Mo, J.\n * Baseline Correction by Improved Iterative Polynomial Fitting with Automatic Threshold.\n *  Chemometrics and Intelligent Laboratory Systems 2006, 82 (1), 59–65.\n * https://doi.org/10.1016/j.chemolab.2005.08.009.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {Object} [options.regression]\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {Object} [options.regression]\n * @param {function} [options.regression.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {Object} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function iterativePolynomialBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n\n  let output = baselineCorrectionRegression(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { 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 { 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 { 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 { 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 { isAnyArray } from 'is-any-array';\nimport { xMean, xMaxValue, xMinValue } from 'ml-spectra-processing';\nexport function rollingBall(spectrum, options = {}) {\n    if (!isAnyArray(spectrum)) {\n        throw new Error('Spectrum must be an array');\n    }\n    if (spectrum.length === 0) {\n        throw new TypeError('Spectrum must not be empty');\n    }\n    const numberPoints = spectrum.length;\n    const maxima = new Float64Array(numberPoints);\n    const minima = new Float64Array(numberPoints);\n    const baseline = new Float64Array(numberPoints);\n    // windowM 4 percent of spectrum length\n    // windowS 8 percent of spectrum length\n    const { windowM = Math.round(numberPoints * 0.04), windowS = Math.round(numberPoints * 0.08), } = options;\n    // fi(1) in original paper\n    for (let i = 0; i < spectrum.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, spectrum.length);\n        minima[i] = xMinValue(spectrum, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    // fi in original paper\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, minima.length);\n        maxima[i] = xMaxValue(minima, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowS);\n        const windowRight = Math.min(i + windowS + 1, maxima.length);\n        baseline[i] = xMean(maxima.subarray(windowLeft, windowRight));\n    }\n    return baseline;\n}\n//# sourceMappingURL=rollingBall.js.map","import { 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","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 { isAnyArray } from 'is-any-array';\n/**\n * Apply Savitzky Golay algorithm\n * @param [ys] Array of y values\n * @param [xs] Array of X or deltaX\n * @return  Array containing the new ys (same length)\n */\nexport function sgg(ys, xs, options = {}) {\n    const { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (typeof xs === 'undefined') {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const ans = new Float64Array(np);\n    const weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = xs ** derivative;\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        const wg1 = weights[half - i - 1];\n        const wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    const wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return (hs / count) ** derivative;\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else if (k === 0 && s === 0) {\n        Grampoly = 1;\n    }\n    else {\n        Grampoly = 0;\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * @private\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\n */\nfunction fullWeights(m, n, s) {\n    const weights = new Array(m);\n    const np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map","export 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","export 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 { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\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 = -1, 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 *\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\";\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 { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotonic, 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 data with x and y arrays. Values in x has to be growing\n * @param options\n * @param {number} [options.broadRatio = 0.00] - If `broadRatio` is higher than 0, then all the peaks which second derivative\n * smaller than `broadRatio * maxAbsSecondDerivative` will be marked with the soft mask equal to true.\n */\nexport function gsd(data, options = {}) {\n    let { noiseLevel } = options;\n    const { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, smoothY = false, maxCriteria = true, minMaxRatio = 0.00025, realTopDetection = false, peakDetectionAlgorithm = 'second', } = options;\n    const { x } = data;\n    let { y } = data;\n    if (xIsMonotonic(x) !== 1) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    //rescale;\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    const 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] *= -1;\n        }\n    }\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    const xValue = 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 = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 1,\n    });\n    const ddY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 2,\n    });\n    const yThreshold = Math.max(noiseLevel, minY + (maxY - minY) * minMaxRatio);\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    peaks.forEach((peak) => {\n        if (!maxCriteria) {\n            peak.y *= -1;\n            peak.ddY = peak.ddY * -1;\n        }\n    });\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\n//# sourceMappingURL=gsd.js.map","/**\n * Check if the values are separated always by the same difference\n * @param array - Monotone growing array of number\n * @param options\n */\nexport function xIsEquallySpaced(array, options = {}) {\n    if (array.length < 3)\n        return true;\n    const { tolerance = 0.05 } = options;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < array.length - 1; ++i) {\n        const absoluteDifference = array[i + 1] - array[i];\n        if (absoluteDifference < minDx) {\n            minDx = absoluteDifference;\n        }\n        if (absoluteDifference > maxDx) {\n            maxDx = absoluteDifference;\n        }\n    }\n    return (maxDx - minDx) / maxDx < tolerance;\n}\n//# sourceMappingURL=xIsEquallySpaced.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\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","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\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, lastJ] = [-1, -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","/**\n * Correction of the x and y coordinates using a quadratic optimizations with the peak and its 3 closest neighbors to determine the true x,y values of the peak.\n * This process is done in place and is very fast.\n * @param data\n * @param peaks\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else if (y[currentIndex + 1] >= y[currentIndex] &&\n            y[currentIndex + 1] >= y[currentIndex + 2]) {\n            currentIndex++;\n        }\n        else if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n            y[currentIndex - 2] >= y[currentIndex - 1]) {\n            currentIndex -= 2;\n        }\n        else if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n            y[currentIndex + 2] >= y[currentIndex + 3]) {\n            currentIndex += 2;\n        }\n        // interpolation to a sin() function\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            const alpha = 20 * Math.log10(y[currentIndex - 1]);\n            const beta = 20 * Math.log10(y[currentIndex]);\n            const gamma = 20 * Math.log10(y[currentIndex + 1]);\n            const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            const xCurrent = x[currentIndex];\n            const xPrevious = x[currentIndex - 1];\n            peak.x = xCurrent + (xCurrent - xPrevious) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","//@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","import airpls from 'ml-airpls';\nimport sequentialFill from 'ml-array-sequential-fill';\n/**\n * Adaptive iteratively reweighted penalized least squares [1]\n *\n * This function calls ml-airpls\n *\n * References:\n * [1] Zhang, Z.-M.; Chen, S.; Liang, Y.-Z.\n * Baseline Correction Using Adaptive Iteratively Reweighted Penalized Least Squares.\n * Analyst 2010, 135 (5), 1138–1146. https://doi.org/10.1039/B922045C.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {object} [options.regression] - Options for the regression\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.regression.§Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function airPLSBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n  let output = airpls(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { 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 { 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 { 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 { xyEnsureGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function ensureGrowing(data) {\n    return { data: xyEnsureGrowingX(data) };\n}\n//# sourceMappingURL=ensureGrowing.js.map","import { xyEquallySpaced } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function equallySpaced(data, options = {}) {\n    return { data: xyEquallySpaced(data, options) };\n}\n//# sourceMappingURL=equallySpaced.js.map","import { xyFilterX } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function filterX(data, options = {}) {\n    return {\n        data: xyFilterX(data, options),\n    };\n}\n//# sourceMappingURL=filterX.js.map","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 { 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","//@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","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 { 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 { 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 { 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 { xyGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function reverseIfNeeded(data) {\n    return { data: xyGrowingX(data) };\n}\n//# sourceMappingURL=reverseIfNeeded.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingAverageBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingAverageBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingAverageBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingBallBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingBallBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingBallBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingMedianBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingMedianBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingMedianBaseline.js.map","import { 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 { 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 { 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, 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 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","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 { 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 { 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 { filterXY } from 'ml-signal-processing';\nimport { xMinMaxValues, xyCheck } from 'ml-spectra-processing';\n/**\n *\n * @private\n * @param input\n * @param [options={}]\n */\nexport function getNormalized(input, options = {}) {\n    xyCheck(input);\n    let { filters = [] } = options;\n    const { from = input.x[0], to = input.x.at(-1), numberOfPoints = 1024, applyRangeSelectionFirst = false, exclusions = [], } = options;\n    filters = structuredClone(filters);\n    const equallySpacedFilter = {\n        name: 'equallySpaced',\n        options: {\n            from,\n            to,\n            numberOfPoints,\n            exclusions,\n        },\n    };\n    if (applyRangeSelectionFirst) {\n        filters.unshift(equallySpacedFilter);\n    }\n    else {\n        filters.push(equallySpacedFilter);\n    }\n    const output = filterXY(input, filters).data;\n    const allowedBoundary = {\n        x: {\n            min: output.x[0],\n            max: output.x.at(-1),\n        },\n        y: xMinMaxValues(output.y),\n    };\n    return {\n        data: output,\n        allowedBoundary,\n    };\n}\n//# sourceMappingURL=getNormalized.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 { xMinMaxValues } from 'ml-spectra-processing';\nimport { getData } from './getData.js';\nimport { getNormalized } from './getNormalized.js';\nimport { updateRangesInfo } from './updateRangesInfo.js';\n/**\n * Class allowing manipulate one IR spectrum\n * @class spectrum\n * @param x - x values array\n * @param y - y values array\n * @param id - spectrum identifier\n * @param options - initialization options\n */\nexport class Spectrum {\n    x;\n    y;\n    id;\n    meta;\n    normalizedBoundary;\n    normalized;\n    normalizedAllowedBoundary;\n    memory;\n    ranges;\n    /**\n     * Constructor for Spectrum\n     * @param x - x values array\n     * @param y - y values array\n     * @param id - spectrum identifier\n     * @param options - initialization options with meta, normalization, and normalized properties\n     */\n    constructor(x, y, id, options = {}) {\n        const { meta = {}, normalization = {}, normalized } = options;\n        if (x && x.length > 1 && x[0] > x.at(-1)) {\n            this.x = x.toReversed();\n            this.y = y.toReversed();\n        }\n        else {\n            this.x = x || [];\n            this.y = y || [];\n        }\n        this.id = id;\n        this.meta = meta;\n        this.normalizedBoundary = { x: { min: 0, max: 0 }, y: { min: 0, max: 0 } };\n        if (normalized) {\n            this.normalized = normalized;\n            this.updateNormalizedBoundary();\n            this.normalizedAllowedBoundary = this.normalizedBoundary;\n        }\n        else {\n            this.normalized = this.updateNormalization(normalization);\n        }\n        this.updateMemory();\n    }\n    /**\n     * Get the minimum x value\n     */\n    get minX() {\n        return this.x[0];\n    }\n    /**\n     * Get the maximum x value\n     */\n    get maxX() {\n        return this.x.at(-1);\n    }\n    /**\n     * Update memory usage statistics\n     */\n    updateMemory() {\n        const original = (this.x?.length || 0) * 16;\n        const normalizedMem = (this.normalized?.x?.length || 0) * 16;\n        this.memory = {\n            original,\n            normalized: normalizedMem,\n            total: original + normalizedMem,\n        };\n    }\n    /**\n     * Remove original x and y data\n     */\n    removeOriginal() {\n        this.x = undefined;\n        this.y = undefined;\n        this.updateMemory();\n    }\n    /**\n     * Get x and y arrays\n     * @returns Object containing x and y arrays\n     * @throws Error if x or y is not an array\n     */\n    getXY() {\n        if (!Array.isArray(this.x) || !Array.isArray(this.y)) {\n            throw new Error('Can not get normalized data');\n        }\n        return { x: this.x, y: this.y };\n    }\n    /**\n     * Update ranges information\n     * @param ranges - ranges configuration\n     */\n    updateRangesInfo(ranges) {\n        updateRangesInfo(this, ranges);\n    }\n    /**\n     * Update normalization\n     * @param normalization - normalization configuration\n     */\n    updateNormalization(normalization) {\n        const result = getNormalized(this, normalization);\n        this.normalized = result.data;\n        this.normalizedAllowedBoundary = result.allowedBoundary;\n        this.ranges = {};\n        this.updateMemory();\n        this.updateNormalizedBoundary();\n        return result.data;\n    }\n    /**\n     * Get spectrum data with optional filtering and scaling\n     * @param options - options for data retrieval\n     * @returns Data object with x and y arrays\n     */\n    getData(options) {\n        return getData(this, options);\n    }\n    /**\n     * Update normalized boundary values\n     */\n    updateNormalizedBoundary() {\n        this.normalizedBoundary.x = {\n            min: this.normalized.x[0],\n            max: this.normalized.x.at(-1),\n        };\n        this.normalizedBoundary.y = xMinMaxValues(this.normalized.y);\n    }\n}\n//# sourceMappingURL=Spectrum.js.map","import { xFindClosestIndex, xyIntegration, xyMaxYPoint, xyMinYPoint, } from 'ml-spectra-processing';\n/**\n * Updates range information for a spectrum\n * @private\n * @param spectrum - The spectrum object to update\n * @param ranges - Array of range objects to process\n */\nexport function updateRangesInfo(spectrum, ranges = []) {\n    spectrum.ranges = {};\n    for (let range of ranges) {\n        range = structuredClone(range);\n        spectrum.ranges[range.label] = range;\n        const fromToIndex = {\n            fromIndex: xFindClosestIndex(spectrum.normalized.x, range.from),\n            toIndex: xFindClosestIndex(spectrum.normalized.x, range.to),\n        };\n        range.deltaX =\n            spectrum.normalized.x[fromToIndex.toIndex] -\n                spectrum.normalized.x[fromToIndex.fromIndex];\n        range.baseline =\n            ((spectrum.normalized.y[fromToIndex.toIndex] +\n                spectrum.normalized.y[fromToIndex.fromIndex]) *\n                range.deltaX) /\n                2;\n        range.integration = xyIntegration(spectrum.normalized, fromToIndex);\n        range.correctedIntegration = range.integration - range.baseline;\n        range.maxPoint = xyMaxYPoint(spectrum.normalized, fromToIndex);\n        range.minPoint = xyMinYPoint(spectrum.normalized, fromToIndex);\n        range.x =\n            spectrum.normalized.x.slice(fromToIndex.fromIndex, fromToIndex.toIndex + 1) || [];\n        range.y =\n            spectrum.normalized.y.slice(fromToIndex.fromIndex, fromToIndex.toIndex + 1) || [];\n    }\n}\n//# sourceMappingURL=updateRangesInfo.js.map","import { xyFilterX } from 'ml-spectra-processing';\n/**\n * Get spectrum data with optional filtering and scaling\n * @param spectrum - The spectrum object containing x and y arrays\n * @param options - Configuration options\n * @returns Data object with filtered/scaled x and y arrays\n */\nexport function getData(spectrum, options = {}) {\n    const { xFilter = {}, yFactor = 1 } = options;\n    let data = { x: spectrum.x, y: spectrum.y };\n    if (xFilter) {\n        data = xyFilterX(spectrum, xFilter);\n    }\n    if (yFactor && yFactor !== 1) {\n        data.y = data.y.map((y) => y * yFactor);\n    }\n    return data;\n}\n//# sourceMappingURL=getData.js.map","import { xFindClosestIndex } from 'ml-spectra-processing';\nimport { getAutocorrelationChart } from './jsgraph/getAutocorrelationChart.js';\nimport { getBoxPlotChart } from './jsgraph/getBoxPlotChart.js';\nimport { getChart } from './jsgraph/getChart.js';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations.js';\nimport { getNormalizedChart } from './jsgraph/getNormalizedChart.js';\nimport { getPostProcessedChart } from './jsgraph/getPostProcessedChart.js';\nimport { getTrackAnnotation } from './jsgraph/getTrackAnnotation.js';\nimport { getCategoriesStats } from './metadata/getCategoriesStats.js';\nimport { getClassLabels } from './metadata/getClassLabels.js';\nimport { getClasses } from './metadata/getClasses.js';\nimport { getMetadata } from './metadata/getMetadata.js';\nimport parseJcamp from './parser/parseJcamp.js';\nimport parseMatrix from './parser/parseMatrix.js';\nimport parseText from './parser/parseText.js';\nimport { getAutocorrelation } from './spectra/getAutocorrelation.js';\nimport { getBoxPlotData } from './spectra/getBoxPlotData.js';\nimport { getMeanData } from './spectra/getMeanData.js';\nimport { getNormalizedData } from './spectra/getNormalizedData.js';\nimport { getNormalizedText } from './spectra/getNormalizedText.js';\nimport { getPostProcessedData } from './spectra/getPostProcessedData.js';\nimport { getPostProcessedText } from './spectra/getPostProcessedText.js';\nimport { Spectrum } from './spectrum/Spectrum.js';\n/**\n * Manager for a large number of spectra with the possibility to normalize the data\n * and skip the original data.\n */\nexport class SpectraProcessor {\n    normalization;\n    maxMemory;\n    keepOriginal;\n    spectra;\n    /**\n     * Create a SpectraProcessor\n     * @param options - Configuration options\n     */\n    constructor(options = {}) {\n        this.normalization = options.normalization;\n        this.maxMemory = options.maxMemory || 256 * 1024 * 1024;\n        this.keepOriginal = true;\n        this.spectra = [];\n    }\n    getNormalizationAnnotations() {\n        return getNormalizationAnnotations(this.normalization);\n    }\n    /**\n     * Recalculate the normalized data using the stored original data if available\n     * This will throw an error if the original data is not present\n     * @param normalization - Normalization options\n     */\n    setNormalization(normalization = {}) {\n        if (JSON.stringify(this.normalization) === JSON.stringify(normalization)) {\n            return;\n        }\n        this.normalization = normalization;\n        for (const spectrum of this.spectra) {\n            spectrum.updateNormalization(this.normalization);\n        }\n    }\n    getNormalization() {\n        return this.normalization;\n    }\n    /**\n     * Returns an object {x:[], y:[]} containing the autocorrelation for the\n     * specified index\n     * @param index - X index of the spectrum to autocorrelate\n     * @param options - Options for autocorrelation\n     * @returns Autocorrelation result\n     */\n    getAutocorrelation(index, options = {}) {\n        const { x } = options;\n        const normalizedData = this.getNormalizedData(options);\n        let actualIndex = index;\n        if (actualIndex === undefined && x !== undefined) {\n            actualIndex = xFindClosestIndex(normalizedData.x, x);\n        }\n        else {\n            actualIndex = 0;\n        }\n        return getAutocorrelation(normalizedData, actualIndex);\n    }\n    /**\n     * Returns a {x:[], y:[]} containing the average of specified spectra\n     * @param options - Options for mean calculation\n     * @returns Mean data\n     */\n    getMeanData(options) {\n        return getMeanData(this.getNormalizedData(options));\n    }\n    /**\n     * Returns an object containing 4 parameters with the normalized data\n     * @param options - Options for normalization\n     * @returns\n     */\n    getNormalizedData(options = {}) {\n        const { ids } = options;\n        const spectra = this.getSpectra(ids);\n        return getNormalizedData(spectra);\n    }\n    /**\n     * Returns a tab separated value containing the normalized data\n     * @param options - Options for export\n     * @returns Text string\n     */\n    getNormalizedText(options = {}) {\n        const { ids } = options;\n        const spectra = this.getSpectra(ids);\n        return getNormalizedText(spectra, options);\n    }\n    /**\n     * Returns a tab separated value containing the post processed data\n     * @param options - Options for export\n     * @returns Text string\n     */\n    getPostProcessedText(options = {}) {\n        return getPostProcessedText(this, options);\n    }\n    getMinMaxX() {\n        let min = Number.MAX_VALUE;\n        let max = Number.MIN_VALUE;\n        for (const spectrum of this.spectra) {\n            if (spectrum.minX < min)\n                min = spectrum.minX;\n            if (spectrum.maxX > max)\n                max = spectrum.maxX;\n        }\n        return { min, max };\n    }\n    /**\n     * Returns an object containing 4 parameters with the scaled data\n     * @param options - Options for post-processing\n     * @returns\n     */\n    getPostProcessedData(options) {\n        return getPostProcessedData(this, options);\n    }\n    /**\n     * Add from text\n     * By default TITLE from the jcamp will be in the meta information\n     * @param text - Text data\n     * @param options - Options for parsing\n     */\n    addFromText(text, options = {}) {\n        if (options.force !== true && options.id && this.contains(options.id)) {\n            return;\n        }\n        const parsed = parseText(text, options);\n        const meta = { ...options.meta };\n        this.addFromData(parsed.data, { meta, id: options.id });\n    }\n    /**\n     * Add jcamp\n     * By default TITLE from the jcamp will be in the meta information\n     * @param jcamp - JCAMP data\n     * @param options - Options for parsing\n     */\n    addFromJcamp(jcamp, options = {}) {\n        if (options.force !== true && options.id && this.contains(options.id)) {\n            return;\n        }\n        const parsed = parseJcamp(jcamp);\n        const meta = { ...parsed.info, ...parsed.meta, ...options.meta };\n        this.addFromData(parsed.data, { meta, id: options.id });\n    }\n    updateRangesInfo(options) {\n        for (const spectrum of this.spectra) {\n            spectrum.updateRangesInfo(options);\n        }\n    }\n    /**\n     * Returns the metadata for a set of spectra\n     * @param options - Options for metadata extraction\n     * @returns Metadata array\n     */\n    getMetadata(options = {}) {\n        const { ids } = options;\n        return getMetadata(this.getSpectra(ids));\n    }\n    /**\n     * Get classes from metadata\n     * @param options - Options for classification\n     * @returns Array of class numbers\n     */\n    getClasses(options) {\n        return getClasses(this.getMetadata(options), options);\n    }\n    /**\n     * Get class labels from metadata\n     * @param options - Options for label extraction\n     * @returns Array of class labels\n     */\n    getClassLabels(options) {\n        return getClassLabels(this.getMetadata(options), options);\n    }\n    /**\n     * Get categories statistics\n     * @param options - Options for statistics\n     * @returns Category statistics\n     */\n    getCategoriesStats(options) {\n        return getCategoriesStats(this.getMetadata(), options);\n    }\n    /**\n     * Add a spectrum based on the data\n     * @param data - {x, y}\n     * @param options - Options for adding spectrum\n     * @returns Spectrum\n     */\n    addFromData(data, options = {}) {\n        if (this.spectra.length === 0)\n            this.keepOriginal = true;\n        const id = options.id || Math.random().toString(36).slice(2, 10);\n        let index = this.getSpectrumIndex(id);\n        if (index === undefined)\n            index = this.spectra.length;\n        const spectrum = new Spectrum(data.x, data.y, id, {\n            meta: options.meta,\n            normalized: options.normalized,\n            normalization: this.normalization,\n        });\n        this.spectra[index] = spectrum;\n        if (!this.keepOriginal) {\n            spectrum.removeOriginal();\n        }\n        else {\n            const memoryInfo = this.getMemoryInfo();\n            if (memoryInfo.total > this.maxMemory) {\n                this.keepOriginal = false;\n                this.removeOriginals();\n            }\n        }\n    }\n    removeOriginals() {\n        for (const spectrum of this.spectra) {\n            spectrum.removeOriginal();\n        }\n    }\n    /**\n     * Remove the spectrum from the SpectraProcessor for the specified id\n     * @param id - Spectrum identifier\n     * @returns Removed spectrum array\n     */\n    removeSpectrum(id) {\n        const index = this.getSpectrumIndex(id);\n        if (index === undefined)\n            return undefined;\n        return this.spectra.splice(index, 1);\n    }\n    /**\n     * Remove all the spectra not present in the list\n     * @param ids - Array of ids of the spectra to keep\n     */\n    removeSpectraNotIn(ids) {\n        const currentIDs = this.spectra.map((spectrum) => spectrum.id);\n        for (const id of currentIDs) {\n            if (!ids.includes(id)) {\n                this.removeSpectrum(id);\n            }\n        }\n    }\n    /**\n     * Checks if the ID of a spectrum exists in the SpectraProcessor\n     * @param id - Spectrum identifier\n     * @returns True if spectrum exists\n     */\n    contains(id) {\n        return this.getSpectrumIndex(id) !== undefined;\n    }\n    /**\n     * Returns the index of the spectrum in the spectra array\n     * @param id - Spectrum identifier\n     * @returns Index or undefined\n     */\n    getSpectrumIndex(id) {\n        if (!id)\n            return undefined;\n        for (let i = 0; i < this.spectra.length; i++) {\n            const spectrum = this.spectra[i];\n            if (spectrum.id === id)\n                return i;\n        }\n        return undefined;\n    }\n    /**\n     * Returns an array of all the ids\n     * @returns Array of IDs\n     */\n    getIDs() {\n        return this.spectra.map((spectrum) => spectrum.id);\n    }\n    /**\n     * Returns an array of spectrum from their ids\n     * @param ids - Array of spectrum IDs\n     * @returns Array of Spectrum\n     */\n    getSpectra(ids) {\n        if (!ids || !Array.isArray(ids))\n            return this.spectra;\n        const spectra = [];\n        for (const id of ids) {\n            const index = this.getSpectrumIndex(id);\n            if (index !== undefined) {\n                spectra.push(this.spectra[index]);\n            }\n        }\n        return spectra;\n    }\n    /**\n     * Returns the spectrum for the given id\n     * @param id - Spectrum identifier\n     * @returns Spectrum or undefined\n     */\n    getSpectrum(id) {\n        const index = this.getSpectrumIndex(id);\n        if (index === undefined)\n            return undefined;\n        return this.spectra[index];\n    }\n    /**\n     * Returns a JSGraph chart object for all the spectra\n     * @param options - Chart options\n     * @returns Chart object\n     */\n    getChart(options) {\n        return getChart(this.spectra, options);\n    }\n    /**\n     * Returns a JSGraph chart object for autocorrelation\n     * @param index - Index in spectrum\n     * @param options - Chart options\n     * @returns Chart object\n     */\n    getAutocorrelationChart(index, options) {\n        return getAutocorrelationChart(this, index, options);\n    }\n    /**\n     * Returns a JSGraph annotation object for the specified index\n     * @param index - Index in spectrum\n     * @param options - Annotation options\n     * @returns Annotation object\n     */\n    getTrackAnnotation(index, options) {\n        return getTrackAnnotation(this.spectra, index, options);\n    }\n    /**\n     * Returns a JSGraph annotation object for box plot\n     * @param options - Chart options\n     * @returns Chart object\n     */\n    getBoxPlotChart(options = {}) {\n        const normalizedData = this.getNormalizedData(options);\n        return getBoxPlotChart(normalizedData, options);\n    }\n    /**\n     * Returns boxplot information\n     * @param options - Options for box plot\n     * @returns Box plot data\n     */\n    getBoxPlotData(options = {}) {\n        const normalizedData = this.getNormalizedData(options);\n        return getBoxPlotData(normalizedData);\n    }\n    /**\n     * Returns a JSGraph chart object for all the normalized spectra\n     * @param options - Chart options\n     * @returns Chart object\n     */\n    getNormalizedChart(options = {}) {\n        const { ids, ...chartOptions } = options;\n        const spectra = this.getSpectra(ids);\n        return getNormalizedChart(spectra, chartOptions);\n    }\n    /**\n     * Returns a JSGraph chart object for all the scaled normalized spectra\n     * @param options - Options for post-processing\n     * @returns Chart object\n     */\n    getPostProcessedChart(options) {\n        return getPostProcessedChart(this, options);\n    }\n    getMemoryInfo() {\n        const memoryInfo = { original: 0, normalized: 0, total: 0 };\n        for (const spectrum of this.spectra) {\n            const memory = spectrum.memory;\n            if (memory) {\n                memoryInfo.original += memory.original;\n                memoryInfo.normalized += memory.normalized;\n                memoryInfo.total += memory.total;\n            }\n        }\n        return {\n            ...memoryInfo,\n            keepOriginal: this.keepOriginal,\n            maxMemory: this.maxMemory,\n        };\n    }\n    getNormalizedBoundary() {\n        const boundary = {\n            x: { min: Number.MAX_VALUE, max: Number.MIN_VALUE },\n            y: { min: Number.MAX_VALUE, max: Number.MIN_VALUE },\n        };\n        for (const spectrum of this.spectra) {\n            if (spectrum.normalizedBoundary.x.min < boundary.x.min) {\n                boundary.x.min = spectrum.normalizedBoundary.x.min;\n            }\n            if (spectrum.normalizedBoundary.x.max > boundary.x.max) {\n                boundary.x.max = spectrum.normalizedBoundary.x.max;\n            }\n            if (spectrum.normalizedBoundary.y.min < boundary.y.min) {\n                boundary.y.min = spectrum.normalizedBoundary.y.min;\n            }\n            if (spectrum.normalizedBoundary.y.max > boundary.y.max) {\n                boundary.y.max = spectrum.normalizedBoundary.y.max;\n            }\n        }\n        return boundary;\n    }\n    /**\n     * We provide the allowed from / to after normalization\n     * For the X axis we return the smallest common values\n     * For the Y axis we return the largest min / max\n     */\n    getNormalizedCommonBoundary() {\n        const boundary = {\n            x: { min: Number.NEGATIVE_INFINITY, max: Number.POSITIVE_INFINITY },\n            y: { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY },\n        };\n        for (const spectrum of this.spectra) {\n            if (spectrum.normalizedAllowedBoundary) {\n                if (spectrum.normalizedAllowedBoundary.x.min > boundary.x.min) {\n                    boundary.x.min = spectrum.normalizedAllowedBoundary.x.min;\n                }\n                if (spectrum.normalizedAllowedBoundary.x.max < boundary.x.max) {\n                    boundary.x.max = spectrum.normalizedAllowedBoundary.x.max;\n                }\n                if (spectrum.normalizedAllowedBoundary.y.min < boundary.y.min) {\n                    boundary.y.min = spectrum.normalizedAllowedBoundary.y.min;\n                }\n                if (spectrum.normalizedAllowedBoundary.y.max > boundary.y.max) {\n                    boundary.y.max = spectrum.normalizedAllowedBoundary.y.max;\n                }\n            }\n        }\n        return boundary;\n    }\n    /**\n     * Create SpectraProcessor from normalized TSV\n     * @param text - TSV text\n     * @param options - Parsing options\n     * @param options.fs\n     * @returns SpectraProcessor instance\n     */\n    static fromNormalizedMatrix(text, options = {}) {\n        const parsed = parseMatrix(text, options);\n        if (!parsed) {\n            throw new Error('Can not parse TSV file');\n        }\n        const spectraProcessor = new SpectraProcessor();\n        spectraProcessor.setNormalization({\n            from: parsed.x[0],\n            to: parsed.x.at(-1),\n            numberOfPoints: parsed.x.length,\n        });\n        for (let i = 0; i < parsed.ids.length; i++) {\n            spectraProcessor.addFromData({ x: [], y: [] }, {\n                normalized: {\n                    x: parsed.x,\n                    y: parsed.matrix[i],\n                },\n                id: parsed.ids[i],\n                meta: parsed.meta[i],\n            });\n        }\n        spectraProcessor.keepOriginal = false;\n        return spectraProcessor;\n    }\n}\n//# sourceMappingURL=SpectraProcessor.js.map","/**\n * Get normalization annotations for a filter\n * @param filter - Normalization filter with from, to, and exclusions\n * @returns Array of rectangle annotations\n */\nexport function getNormalizationAnnotations(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: '0px' },\n                { x: exclusion.to, y: '2000px' },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        };\n        return annotation;\n    });\n    if (filter.from !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: Number.MIN_SAFE_INTEGER, y: '0px' },\n                { x: filter.from, y: '2000px' },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    if (filter.to !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: filter.to, y: '0px' },\n                { x: Number.MAX_SAFE_INTEGER, y: '2000px' },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    return annotations;\n}\n//# sourceMappingURL=getNormalizationAnnotations.js.map","import { matrixAutoCorrelation } from 'ml-spectra-processing';\nexport function getAutocorrelation(normalized, index) {\n    return {\n        x: normalized.x,\n        y: matrixAutoCorrelation(normalized.matrix, index),\n    };\n}\n//# sourceMappingURL=getAutocorrelation.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Calculate mean of normalized data\n * @param normalized - Normalized data with x and matrix\n * @returns Mean data with x and y values\n */\nexport function getMeanData(normalized) {\n    const matrix = new Matrix(normalized.matrix);\n    return {\n        x: normalized.x,\n        y: matrix.mean('column'),\n    };\n}\n//# sourceMappingURL=getMeanData.js.map","import { getNormalizedData } from './getNormalizedData.js';\nimport { convertToText } from './util/convertToText.js';\n/**\n * Get normalized data as text\n * @param spectra - Array of spectrum objects\n * @param options - Options for filtering and formatting\n * @returns Text representation of normalized data\n */\nexport function getNormalizedText(spectra, options = {}) {\n    const { fs = '\\t', rs = '\\n' } = options;\n    return convertToText(getNormalizedData(spectra, options), {\n        rs,\n        fs,\n    });\n}\n//# sourceMappingURL=getNormalizedText.js.map","import { getPostProcessedData } from './getPostProcessedData.js';\nimport { convertToText } from './util/convertToText.js';\n/**\n * Get post-processed data as text\n * @param spectraProcessor - SpectraProcessor instance\n * @param options - Options for post-processing and formatting\n * @returns Text representation of post-processed data\n */\nexport function getPostProcessedText(spectraProcessor, options = {}) {\n    const { fs = '\\t', rs = '\\n', postProcessing: postProcessingOptions = {}, } = options;\n    const data = getPostProcessedData(spectraProcessor, postProcessingOptions);\n    // Only convert if we have valid data\n    if (!data.matrix || !data.x || !data.ids || !data.meta) {\n        return '';\n    }\n    return convertToText({\n        matrix: data.matrix,\n        x: data.x,\n        ids: data.ids,\n        meta: data.meta,\n    }, {\n        rs,\n        fs,\n    });\n}\n//# sourceMappingURL=getPostProcessedText.js.map","import { parseXY } from 'xy-parser';\n/**\n * Create a spectrum from a text file\n * @param value - String containing the text data\n * @param options - Parsing options\n * @returns Parsed data object\n */\nexport default function parseText(value, options = {}) {\n    const { kind, parserOptions = {} } = options;\n    const data = parseXY(value, parserOptions);\n    // Convert the data if needed\n    if (kind?.importation?.converter) {\n        data.y = data.y.map(kind.importation.converter);\n    }\n    return { data };\n}\n//# sourceMappingURL=parseText.js.map","/**\n * Get metadata from spectra\n * @param spectra - Array of spectrum objects\n * @param options - Options for filtering spectra\n * @returns Array of metadata objects\n */\nexport function getMetadata(spectra, options = {}) {\n    const { ids } = options;\n    const metadata = [];\n    if (Array.isArray(spectra) && spectra.length > 0) {\n        for (const spectrum of spectra) {\n            if (!ids || ids.includes(spectrum.id)) {\n                metadata.push(spectrum.meta);\n            }\n        }\n    }\n    return metadata;\n}\n//# sourceMappingURL=getMetadata.js.map","import { getCategoriesStats } from './getCategoriesStats.js';\n/**\n * Get class numbers for each metadata entry\n * @param metadata - Array of metadata objects\n * @param options - Options for classification\n * @returns Array of class numbers\n */\nexport function getClasses(metadata, options = {}) {\n    const { propertyName = 'category' } = options;\n    const categoriesStats = getCategoriesStats(metadata, options);\n    const result = new Array(metadata.length);\n    for (let i = 0; i < metadata.length; i++) {\n        result[i] = categoriesStats[metadata[i][propertyName]].classNumber;\n    }\n    return result;\n}\n//# sourceMappingURL=getClasses.js.map","/**\n * Get class labels for each metadata entry\n * @param metadata - Array of metadata objects\n * @param options - Options for label extraction\n * @returns Array of class labels\n */\nexport function getClassLabels(metadata, options = {}) {\n    const { propertyName = 'category' } = options;\n    const categories = [];\n    for (const metadatum of metadata) {\n        categories.push(metadatum[propertyName]);\n    }\n    return categories;\n}\n//# sourceMappingURL=getClassLabels.js.map","import { addChartDataStyle } from './addChartDataStyle.js';\n/**\n * Retrieve a chart with selected original data\n * @param spectra - Array of spectrum objects\n * @param options - Chart options\n * @returns Chart object with data\n */\nexport function getChart(spectra, options = {}) {\n    const { ids, yFactor, xFilter = {} } = options;\n    const chart = {\n        data: [],\n    };\n    for (const spectrum of spectra) {\n        if (!ids || ids.includes(spectrum.id)) {\n            const data = spectrum.getData({ yFactor, xFilter });\n            addChartDataStyle(data, spectrum);\n            chart.data.push(data);\n        }\n    }\n    return chart;\n}\n//# sourceMappingURL=getChart.js.map","import chroma from 'chroma-js';\nimport { xMinMaxValues, xyFilterX } from 'ml-spectra-processing';\n/**\n * Retrieve a chart with autocorrelation color\n * @param spectraProcessor - SpectraProcessor instance\n * @param index - Index in the spectrum\n * @param options - Chart options\n * @returns Color spectrum chart object\n */\nexport function getAutocorrelationChart(spectraProcessor, index, options = {}) {\n    const { autocorrelation = spectraProcessor.getAutocorrelation(index, options), xFilter, ids, } = options;\n    const { min, max } = xMinMaxValues(autocorrelation.y);\n    // eslint-disable-next-line import/no-named-as-default-member\n    const colorCallback = chroma\n        .scale(['blue', 'cyan', 'yellow', 'red'])\n        .domain([min, max])\n        .mode('lch');\n    // Annoying but it seems the color library does not handle TypedArray well\n    const ys = ArrayBuffer.isView(autocorrelation.y)\n        ? Array.from(autocorrelation.y)\n        : autocorrelation.y;\n    const colorScale = ys.map((y) => `rgb(${colorCallback(y).rgb().join(',')})`);\n    let mean = spectraProcessor.getMeanData({ ids });\n    if (xFilter) {\n        mean = xyFilterX({ x: mean.x, y: mean.y }, xFilter);\n    }\n    const colorSpectrum = {\n        type: 'color',\n        x: mean.x,\n        y: mean.y,\n        color: colorScale,\n        styles: {\n            unselected: {\n                lineWidth: 1,\n                lineStyle: 1,\n            },\n            selected: {\n                lineWidth: 3,\n                lineStyle: 1,\n            },\n        },\n    };\n    return colorSpectrum;\n}\n//# sourceMappingURL=getAutocorrelationChart.js.map","import { getNormalizedData } from '../spectra/getNormalizedData.js';\n/**\n * Get track annotation for a specific index\n * @param spectra - Array of spectrum objects\n * @param index - Index in the spectrum\n * @param options - Annotation options\n * @returns Array of line annotations\n */\nexport function getTrackAnnotation(spectra, index, options = {}) {\n    const { ids, showSpectrumID = true, sortY = true, limit = 20 } = options;\n    const annotations = [];\n    const normalized = getNormalizedData(spectra, { ids });\n    if (normalized.ids.length === 0)\n        return annotations;\n    let line = 0;\n    // Header containing X coordinate\n    annotations.push({\n        type: 'line',\n        position: [\n            { x: `70px`, y: `${15 + 15 * line}px` },\n            { x: `85px`, y: `${15 + 15 * line}px` },\n        ],\n        strokeWidth: 0.0000001,\n        label: {\n            size: 16,\n            text: `x: ${normalized.x[index].toPrecision(6)}`,\n            position: { x: `130px`, y: `${20 + 15 * line}px` },\n        },\n    });\n    line++;\n    let peaks = [];\n    for (let i = 0; i < normalized.ids.length; i++) {\n        peaks.push({\n            id: normalized.ids[i],\n            meta: normalized.meta[i],\n            y: normalized.matrix[i][index],\n        });\n    }\n    if (sortY) {\n        peaks.sort((a, b) => b.y - a.y);\n    }\n    if (limit) {\n        peaks = peaks.slice(0, limit);\n    }\n    for (const { id, meta, y } of peaks) {\n        annotations.push({\n            type: 'line',\n            position: [\n                { x: `70px`, y: `${15 + 15 * line}px` },\n                { x: `85px`, y: `${15 + 15 * line}px` },\n            ],\n            strokeColor: meta.color,\n            strokeWidth: 2,\n            label: {\n                text: `${y.toPrecision(4)}${showSpectrumID ? ` - ${id}` : ''}`,\n                position: { x: `90px`, y: `${20 + 15 * line}px` },\n            },\n        });\n        line++;\n    }\n    return annotations;\n}\n//# sourceMappingURL=getTrackAnnotation.js.map","import { xyFilterX } from 'ml-spectra-processing';\nimport { addChartDataStyle } from './addChartDataStyle.js';\n/**\n * Get chart with normalized data\n * @param spectra - Array of spectrum objects\n * @param options - Chart options\n * @returns Chart object with normalized data\n */\nexport function getNormalizedChart(spectra, options = {}) {\n    const { xFilter } = options;\n    const chart = {\n        data: [],\n    };\n    for (const spectrum of spectra) {\n        let data = spectrum.normalized;\n        if (xFilter) {\n            data = xyFilterX(data, xFilter);\n        }\n        addChartDataStyle(data, spectrum);\n        chart.data.push(data);\n    }\n    return chart;\n}\n//# sourceMappingURL=getNormalizedChart.js.map","import { addChartDataStyle } from './addChartDataStyle.js';\n/**\n * Get chart with post-processed data\n * @param spectraProcessor - SpectraProcessor instance\n * @param options - Post-processing options\n * @returns Chart object with post-processed data\n */\nexport function getPostProcessedChart(spectraProcessor, options = {}) {\n    const scaled = spectraProcessor.getPostProcessedData(options);\n    const chart = {\n        data: [],\n    };\n    if (!scaled?.matrix || !scaled.x || !scaled.meta || !scaled.ids)\n        return chart;\n    for (let i = 0; i < scaled.matrix.length; i++) {\n        const data = {\n            x: scaled.x,\n            y: Array.from(scaled.matrix[i]), // need to ensure not a typed array\n        };\n        addChartDataStyle(data, { meta: scaled.meta[i], id: scaled.ids[i] });\n        chart.data.push(data);\n    }\n    return chart;\n}\n//# sourceMappingURL=getPostProcessedChart.js.map","/**\n * Parse a matrix from text format\n * @param text - String containing the text data\n * @param options - Parsing options\n * @returns Parsed matrix data with x, meta, matrix, and ids\n */\nexport default function parseMatrix(text, options = {}) {\n    const lines = text.split(/[\\n\\r]+/).filter(Boolean);\n    const { fs = '\\t' } = options;\n    const currentMatrix = [];\n    const ids = [];\n    const meta = [];\n    let x = [];\n    const headers = lines[0].split(fs);\n    const labels = [];\n    for (let i = 0; i < headers.length; i++) {\n        const header = headers[i];\n        if (Number.isNaN(Number(header))) {\n            labels[i] = header;\n        }\n        else {\n            x = headers.slice(i).map(Number);\n            break;\n        }\n    }\n    for (let i = 1; i < lines.length; i++) {\n        const line = lines[i];\n        const parts = line.split('\\t');\n        ids.push(parts[0]);\n        const oneMeta = {};\n        meta.push(oneMeta);\n        for (let j = 1; j < parts.length; j++) {\n            if (j < labels.length) {\n                oneMeta[labels[j]] = parts[j];\n            }\n            else {\n                currentMatrix.push(parts.slice(labels.length).map(Number));\n                break;\n            }\n        }\n    }\n    return { x, meta, matrix: currentMatrix, ids };\n}\n//# sourceMappingURL=parseMatrix.js.map","/**\n * Get filter annotations\n * @param filter - Filter with from, to, and exclusions\n * @returns Array of rectangle annotations\n */\nexport function getFilterAnnotations(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: '0px' },\n                { x: exclusion.to, y: '2000px' },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,128,1)',\n        };\n        return annotation;\n    });\n    if (filter.from !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: Number.MIN_SAFE_INTEGER, y: '0px' },\n                { x: filter.from, y: '2000px' },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    if (filter.to !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: filter.to, y: '0px' },\n                { x: Number.MAX_SAFE_INTEGER, y: '2000px' },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    return annotations;\n}\n//# sourceMappingURL=getFilterAnnotations.js.map"],"names":["toString","Object","prototype","isAnyArray","value","tag","call","endsWith","includes","getOutputArray","output","length","undefined","TypeError","Float64Array","xMedian","input","options","exact","array","slice","middleIndex","calcMiddle","median","quickSelect","low","high","middle","currentLow","currentHigh","swap","i","j","temp","Math","floor","xCheck","minLength","Error","xFindClosestIndex","target","sorted","abs","index","diff","Number","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","x","fromIndex","toIndex","from","to","xAdd","array1","array2","isConstant","constant","array3","xApplyFunctionStr","variableLabel","fctString","fct","Function","replaceAll","toReturn","isNaN","xMultiply","xCorrelation","A","B","n","sumA","sumA2","sumB","sumB2","sumAB","a","b","sqrt","arguments","Array","currentMin","_options$fromIndex","_options$toIndex","isInteger","minValue","min","currentMax","maxValue","max","RangeError","_options$min","autoMinMax","_options$max","factor","defineProperty","matrix","require$$0","rescale","require$$1","indent","repeat","indentData","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","rows","columns","maxI","maxJ","result","loop","get","line","push","formatNumber","join","inspectData","num","formatNumber2","padEnd","len","str","fix","toFixed","startsWith","exp","toExponential","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","checkNonEmpty","isEmpty","AbstractMatrix","from1DArray","newRows","newColumns","newData","newMatrix","Matrix","row","column","set","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","round","eye","this","diag","data","l","matrix1","matrix2","checkMatrix","isMatrix","klass","size","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","maxRow","p","pivot","setSubMatrix","neg","mulS","getRow","getRowVector","setRow","row1","row2","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","NEGATIVE_INFINITY","maxIndex","v","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","dot","cumulativeSum","sum","vector2","vector1","mmul","other","Bcolj","s","mpow","scalar","bb","e","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","embed","mat","cols","r","c","resultat","console","warn","blockMult","halfRows","parseInt","halfCols","subMatrix","add","sub","scaleRows","isFinite","scaleColumns","flipRows","ceil","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","entries","sumByRow","sumByColumn","sumAll","product","productByRow","productByColumn","productAll","mean","variance","unbiased","sum1","sum2","varianceByRow","varianceByColumn","varianceAll","standardDeviation","center","centerByRow","centerByColumn","centerAll","scale","getScaleByRow","scaleByRow","getScaleByColumn","scaleByColumn","divider","getScaleAll","scaleAll","Symbol","iterator","col","values","isArrayOfNumbers","every","element","for","randomInt","diagonal","identity","negate","tensorProduct","initData","nRows","nColumns","super","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","addS","addM","subS","subM","subtract","subtractS","subtractM","mul","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acos","acosh","asin","asinh","atan","atanh","cbrt","clz32","cos","cosh","expm1","fround","log","log1p","log10","log2","sign","sin","sinh","tan","tanh","trunc","pow","arg0","powS","powM","installMathOperations","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","reverse","sideIndex","toCompact","compact","fromCompact","compactSize","JSON","stringify","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","BaseView","MatrixSelectionView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","LuDecomposition","t","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","leftHandSide","rightHandSide","useSVD","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","EigenvalueDecomposition","assumeSymmetric","d","hh","tred2","dl1","c3","el1","s2","tst1","tql2","H","ort","orthes","nn","w","ra","sa","vr","vi","notlast","cdivres","exshift","z","iter","cdiv","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","counter","xResidual","residual","yResidual","betas","CHO","EVD","Matrix_1","MatrixColumnSelectionView","MatrixColumnView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowSelectionView","MatrixRowView","MatrixSubView","MatrixTransposeView_1","MatrixTransposeView","NIPALS","Nipals","SVD","correlation","xMatrix","yMatrix","yIsSame","sdx","sdy","corr","covariance","cov","_default","default","subMatrix0","subMatrix1","subMatrix2","linearDependencies","results","Abis","pseudoInverse","svdSolution","solve_1","wrap","xMean","sumValue","xStandardDeviation","sqrError","xVariance","xEnsureFloat64","FFT","_csize","table","angle","PI","power","_width","_bitrev","revShift","_out","_data","_inv","createNumberArray","ArrayConstructor","createFromToArray","includeFrom","includeTo","distribution","delta","base","firstExponent","xSubtract","xMaxValue","xMinValue","xIsMonotonic","at","xMinMaxValues","fromComplexArray","complex","storage","res","createComplexArray","toComplexArray","completeSpectrum","spectrum","half","transform","out","_transform4","realTransform","_realTransform4","inverseTransform","outOff","step","bitrev","off","_singleTransform2","_singleTransform4","inv","quarterLen","limit","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","SFAr","SFAi","SFBr","SFBi","SA","SB","P1","Q1","P2","Q2","P3","Q3","P4","Q4","P5","Q5","polyval","coef","calc","P","Q","erfcinv","val","simpleNormInvNumber","magnitudeMode","SQRT2","simpleNormInv","xNoiseSanPlot","cutOff","refine","scaleFactor","factorStd","fixOffset","filter","_e","prepareData","medianIndex","firstNegativeValueIndex","findIndex","lastPositiveValueIndex","signPositive","signNegative","cutOffDist","considerList","indexMax","minKi","MAX_SAFE_INTEGER","whereToCutStat","top","elementsOfCutOff","averageValue","kiSqrt","determineCutOff","initialNoiseLevelPositive","skyPoint","initialNoiseLevelNegative","noiseLevelPositive","noiseLevelNegative","cloneSignPositive","cloneSignNegative","cutOffSignalsIndexPlus","cutOffSignalsIndexNeg","cutOffSignals","correctionFactor","effectiveCutOffDist","refinedCorrectionFactor","positive","negative","snr","sanplot","generateSanPlot","fromTo","logBaseY","key","logOfBase","xNoiseStandardDeviation","mad","averageDeviations","xMedianAbsoluteDeviation","sd","xSum","xNormed","algorithm","absoluteSumValue","absoluteSum","currentMaxValue","sumFactor","String","xParetoNormalization","sqrtSD","xRolling","window","padding","padded","fromEnd","toEnd","xPadding","subarray","matrixCreateEmpty","nbRows","nbColumns","matrixAutoCorrelation","targetArray","sourceArray","matrixBoxPlot","info","q1","q3","columnArray","q1max","q3min","middleOver","matrixCenterZMean","matrixMinMaxZ","firstLength","matrixCheck","matrixPQN","matrixB","normalizationFactor","referenceSpectrum","currentVariable","medianOfQuotients","quotients","matrixZRescale","xyCheck","xyMaxYPoint","current","xyEnsureGrowingX","prevX","currentIndex","zonesNormalize","zones","exclusions","map","zone","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","zoneIndex","integral","x0","x1","slope","intercept","getSlope","y0","y1","xyEquallySpaced","xLength","variant","numberOfPoints","zonesWithPointsRes","normalizedZones","zonesWithNumberOfPoints","unitsPerPoint","reduce","previous","currentTotal","tempZone","tempZoneNumberOfPoints","zonesWithPoints","xResult","yResult","zoneResult","processZone","concat","halfStep","lastStep","start","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","main","equallySpacedSlot","initialOriginalStep","lastOriginalStep","MIN_SAFE_INTEGER","sumAtMin","sumAtMax","equallySpacedSmooth","xyFilterX","currentZoneIndex","newX","newY","position","xyGrowingX","toReversed","xyIntegration","currentxyIntegration","xyMinYPoint","xyUniqueX","isSorted","floatX","floatY","xyObject","response","xySortX","cumulativeY","average","clip_rgb","rgb","_clipped","_unclipped","classToType","toLowerCase","obj","unpack","args","keyOrder","split","rnd2","rnd3","TWOPI","PITHIRD","DEG2RAD","RAD2DEG","reverse3","arr","format","autodetect","Color","me","mode","_input","chk","test","_rgb","hex","chroma","version","w3cx11","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","laserlemon","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrod","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","maroon2","maroon3","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","purple2","purple3","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","RE_HEX","RE_HEXA","hex2rgb","match","substr","rgb2hex","hxa","keys","named","rest","mutate","clipped","labConstants","Kn","labWhitePoint","Xn","Yn","Zn","kE","kKE","kK","RefWhiteRGB","Z","MtxRGB2XYZ","m00","m01","m02","m10","m11","m20","m21","m22","MtxXYZ2RGB","As","Bs","Cs","MtxAdaptMa","MtxAdaptMaI","ILLUMINANTS","Map","setLabWhitePoint","ill","getLabWhitePoint","lab2rgb","lab2xyz","b_","xyz2rgb","LAB_CONSTANTS","fy","fx","fz","fx3","fz3","compand","linear","Ad","Bd","Cd","X1","Y1","Z1","X2","Y2","Z2","rgb2lab","rgb2xyz","zr","xyz2lab","gammaAdjustSRGB","companded","lab","assign","darken","amount","brighten","darker","brighter","mc","channel","src","indexOf","luminance","lum","cur_lum","max_iter","mid","interpolate","lm","rgb2luminance","luminance_x","mix","col1","col2","interpolator","premultiply","lch2lab","lch2rgb","atan2","lab2lch","rgb2lch","lch","hcl","hcl2rgb","forEach","saturate","desaturate","charAt","tint","shade","xyz0","xyz1","lrgb","z1","x2","y2","z2","interpolate_hsx","hue0","hue1","sat0","sat1","lbv0","lbv1","sat","hue","lbv","dh","hsl","hsv","hcg","hsi","oklch","rgb2num","rgb2hcg","minRgb","maxRgb","_g","hcg2rgb","_c","rgb2hsi","min_","hsi2rgb","hsl2rgb","t3","t2","t1","h_","rgb2hsl","max_","rgb2hsv","hsv2rgb","multiplyMatrices","isArray","B_cols","_","oklab2rgb","LMStoXYZ","LMSnl","rgb2oklab","XYZ","LMStoOKLab","LMS","XYZ_to_OKLab","oklab","_average_lrgb","colors","weights","xyz","_mode","_nacol","_spread","_positions","_domain","_pos","_padding","_classes","_colors","_min","_max","_correctLightness","_colorCache","_useCache","_gamma","setColors","brewer","resetCache","tMapLightness","tMapDomain","getColor","bypassMap","getClass","classes","analyze","limits","domain","tOut","tBreaks","_m","_o","spread","correctLightness","L0","L1","pol","L_actual","L_ideal","L_diff","t0","numColors","dm","dd","left","right","ascending","end","__range__","samples","asc","cache","gamma","nodata","rnd","rgba","blend","bottom","blend_f","c0","each","normal","screen","overlay","lighten","dodge","burn","min_log","LOG10E","max_log","pb","pr","cluster","assignments","clusterSizes","nb_iters","centroids","best","mindist","dist","newCentroids","kClusters","tmpKMeansBreaks","B_threshold","scales","cool","hot","colorbrewer","OrRd","PuBu","BuPu","Oranges","BuGn","YlOrBr","YlGn","Reds","RdPu","Greens","YlGnBu","Purples","GnBu","Greys","YlOrRd","PuRd","Blues","PuBuGn","Viridis","Spectral","RdYlGn","RdBu","PiYG","PRGn","RdYlBu","BrBG","RdGy","PuOr","Set2","Accent","Set1","Set3","Dark2","Paired","Pastel2","Pastel1","colorbrewerTypes","typeMap","colorbrewerProxy","Proxy","prop","lower","has","getOwnPropertyNames","cmyk","rgb2cmyk","cmyk2rgb","rgb2oklch","rgb2css","hsl2css","hsla","prevWhitePoint","cssColor","lab2css","laba","lch2css","lcha","oklab2css","oklch2css","oklch2rgb","INT_OR_PCT","source","FLOAT_OR_PCT","PCT","RE_S","SEP","COMMA","ANLGE","ALPHA","RE_RGB","RegExp","RE_RGB_LEGACY","RE_RGBA_LEGACY","RE_HSL","RE_HSL_LEGACY","RE_HSLA_LEGACY","RE_LAB","RE_LCH","RE_OKLAB","RE_OKLCH","roundRGB","percentToAbsolute","pct","signed","parseFloat","substring","noneToValue","noneValue","css2rgb","css","trim","replace","wp","gl","temperature2rgb","kelvin","temperature","rgb2temperature","minTemp","maxTemp","getBoxPlotData","normalizedData","getColors","dataset","stdevs","colorCallback","addChartDataStyle","styles","unselected","lineColor","meta","color","lineWidth","lineStyle","selected","label","id","getNormalizedData","spectra","ids","currentIDs","normalized","getCategoriesStats","metadata","propertyName","categories","classNumber","metadatum","ensureString","blob","ArrayBuffer","isView","encoding","guessEncoding","TextDecoder","decode","uint8","Uint8Array","buffer","byteOffset","byteLength","buf","isutf8","parseString","lowercase","number","cnt","dx","dy","ci","xyz2","I","lab0","lab1","lab2","lab3","labs","newrow","binom_row","el","bezier","contrast","l1","l2","contrastAPCA","text","bg","l_text","l_bg","Y_text","Y_bg","S_norm","S_rev","cubehelix","rotations","lightness","dl","fract","amp","cos_a","sin_a","deltaE","Kl","Kc","Kh","rad2deg","rad","deg2rad","deg","a1","b1","L2","a2","b2","avgL","avgC","G","a1p","a2p","C1p","C2p","avgCp","arctan1","arctan2","h1p","h2p","avgHp","T","deltaHp","deltaL","deltaCp","sl","sc","sh","deltaTheta","Rt","distance","sum_sq","rng","code","valid","getGyromagneticRatio","nucleus","realNucleus","gyromagneticRatio","nucleusNumber","filteredNuclei","getGyromagneticNucleus","fromEntries","_ref","module","exports","quickSelectMedian","$","E","exec","o","te","ne","times","series","ms","pageValue","chromatogram","re","O","logger","xFactor","yFactor","deltaX","isXYdata","firstX","firstY","codePointAt","S","N","F","M","oe","isPeaktable","variables","ue","ce","isXYAdata","se","lastY","ntuples","symbol","units","toUpperCase","find","some","ie","pe","ae","minX","maxX","minY","maxY","minZ","maxZ","noise","noContour","contourLines","nbContourLevels","fe","noiseMultiplier","zValue","lines","ee","segments","minMax","J","intensity","observeFrequency","shiftOffsetVal","xUnits","lastX","$NUC2","$NUC1","yType","xType","W","pageSymbol","dynamicTyping","le","de","twoD","wantXY","profiling","keepSpectra","K","vardim","nbPoints","varname","yUnits","R","he","removeComments","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","withoutXY","noTrimRegExp","IR_TRANSMITTANCE","normalization","importation","converter","transmittance","kind","display","xLabel","xInverted","yLabel","IR_ABSORBANCE","parseJcamp","jcampText","parsed","ge","debug","Date","now","flatten","children","datatable","title","dataType","dataClass","jcampDX","jcampCS","shiftOffsetNum","vartype","varform","page","sampleDescription","pop","be","convert","getJcampKind","parseXY","uniqueX","bestGuess","keepInfo","xColumn","yColumn","numberColumns","maxNumberColumns","minNumberColumns","fields","skipFirstColumn","xs","parse","convertToText","fs","rs","allKeysObject","metum","allKeys","removeSpecialCharacters","require","createHash","write","update","dispatch","digest","read","sha1","excludeValues","MD5","keysMD5","getHashes","ignoreUnknown","respectType","respectFunctionNames","respectFunctionProperties","unorderedArrays","unorderedSets","unorderedObjects","replacer","excludeKeys","_object","isBuffer","_array","_date","_symbol","_error","_boolean","_string","_function","_number","_xml","_null","_undefined","_regexp","_uint8array","_uint8clampedarray","_int8array","_uint16array","_int16array","_uint32array","_int32array","_float32array","_float64array","_arraybuffer","_url","_map","_set","_file","lastModfied","_blob","_domwindow","_bigint","_process","_timer","_pipe","_tcp","_udp","_tty","_statwatcher","_securecontext","_connection","_zlib","_context","_nodescript","_httpparser","_dataview","_signal","_fsevent","_tlswrap","writeToStream","self","Buffer","crypto","lYpoI2","charCodeAt","toByteArray","fromByteArray","base64js","_useTypedArrays","_augment","_isBuffer","readUInt8","_charsWritten","fromCharCode","SlowBuffer","INSPECT_MAX_BYTES","poolSize","foo","isEncoding","_arr","writeUInt8","readUInt16LE","readUInt16BE","readUInt32LE","readUInt32BE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","inspect","toArrayBuffer","encodeURIComponent","decodeURIComponent","_get","toLocaleString","ieee754","hash","sha256","md5","createHmac","randomBytes","LN2","nextTick","setImmediate","postMessage","addEventListener","stopPropagation","setTimeout","browser","env","argv","on","addListener","once","removeListener","removeAllListeners","emit","binding","cwd","chdir","getPostProcessedData","spectraProcessor","optionsHash","ranges","calculations","filters","targetID","relative","method","getSpectra","validCache","weakMap","WeakMap","normalizedTarget","getSpectrum","fromToIndex","targetValue","deltaTarget","minTarget","deltaSource","minSource","integration","rangesCopy","structuredClone","yNormalized","resultRanges","currentRange","maxPoint","parameters","calculation","formula","oneRanges","prepare","Pinv","Mt","ar","ac","Ap","Ax","LNZ","coloffset","adr","Lp","Parent","Lnz","Flag","Pattern","bp1","kk","p2","ldlSymbolic","Lx","Li","lKi","ldlNumeric","ldlPerm","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPermt","cuthillMckee_1","list","adj","visited","toVisit","eol","ptr","nbhd","compareNum","getCloseIndex","goal","closest","getClosestNumber","prev","curr","updateSystem","newVector","next","airPLS","controlPoints","Int8Array","indexFrom","indexTo","getControlPoints","baseline","iteration","lambda","tolerance","sumNegDifferences","corrected","stopCriterion","xAbsoluteSum","getStopCriterion","lowerTriangularNonZeros","permutationEncodedArray","getDeltaMatrix","cuthillMckee","prevNegSum","cholesky","cho","applyCorrection","absChange","_typeof","sequentialFill","_options","_options$from","_options$to","_options$size","_i","checkArrayLength","BaseRegression","predict","_predict","xVal","train","precision","toLaTeX","score","ySum","chi2","rmsd","xSquared","ySquared","xY","maybeToPrecision","figures","toPrecision","PolynomialRegression","degree","powers","coefficients","interceptAtZero","nCoefficients","FT","regress","_toFormula","isLaTeX","sup","closeSup","fn","load","json","iterativePolynomialBaseline","ys","numberPoints","regressionOptions","Regression","regression","fitting","oldFitting","baselineCorrectionRegression","correctedSpectrum","rollingAverageBaseline","xRollingAverage","rollingBallBaseline","maxima","minima","windowM","windowS","windowLeft","windowRight","rollingBall","rollingMedianBaseline","xRollingMedian","sgg","windowSize","derivative","polynomial","np","ans","weight","fullWeights","hs","constantH","wg1","wg2","d1","d2","getHs","wg","gramPoly","Grampoly","genFact","gf","getMinMaxIntervalsDy","dY","dX","lastMax","lastMin","intervalL","intervalR","tryMatchOneIntervalWithMinData","lastK","minData","yThreshold","intervalWidth","intervalCenter","yData","minDistance","possible","newLastIndex","centerIndex","currentDistance","lastIndex","getPeakFromIntervals","peaks","ddY","width","randomUUID","inflectionPoints","isLessAndGreaterThanZero","back","firstDerivative","crossDy","xGetCrossZeroPoints","gsd","noiseLevel","sgOptions","smoothY","maxCriteria","minMaxRatio","realTopDetection","peakDetectionAlgorithm","isEquallySpaced","maxDx","minDx","absoluteDifference","xIsEquallySpaced","noiseInfo","xValue","peakData","minddY","secondDerivative","lastJ","yIndex","autoAlgorithm","peak","beta","xCurrent","xPrevious","optimizeTop","airpls","baselineFct","targetX","nbPeaks","gsdOptions","xRescale","existingMax","existingMin","function","getNormalized","applyRangeSelectionFirst","equallySpacedFilter","unshift","logs","filterFct","Filters","time","filterXY","allowedBoundary","Spectrum","normalizedBoundary","normalizedAllowedBoundary","memory","updateNormalizedBoundary","updateNormalization","updateMemory","original","normalizedMem","total","removeOriginal","getXY","updateRangesInfo","correctedIntegration","minPoint","getData","xFilter","SpectraProcessor","maxMemory","keepOriginal","getNormalizationAnnotations","annotations","exclusion","ignore","strokeWidth","fillColor","setNormalization","getNormalization","getAutocorrelation","actualIndex","getMeanData","getNormalizedText","getPostProcessedText","postProcessing","postProcessingOptions","getMinMaxX","addFromText","force","contains","parserOptions","parseText","addFromData","addFromJcamp","jcamp","getMetadata","getClasses","categoriesStats","getClassLabels","getSpectrumIndex","getMemoryInfo","removeOriginals","removeSpectrum","removeSpectraNotIn","getIDs","getChart","chart","getAutocorrelationChart","autocorrelation","colorScale","getTrackAnnotation","showSpectrumID","sortY","strokeColor","getBoxPlotChart","q13FillColor","q13FillOpacity","medianStrokeColor","medianStrokeWidth","minMaxFillColor","minMaxFillOpacity","boxPlotData","q13","layer","properties","fillOpacity","getNormalizedChart","chartOptions","getPostProcessedChart","scaled","memoryInfo","getNormalizedBoundary","boundary","getNormalizedCommonBoundary","fromNormalizedMatrix","currentMatrix","headers","labels","header","parts","oneMeta","parseMatrix"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,163,164,165,166,167,168,169,170,171,172,173,174,175,176,179,180,182,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,247]}