{"version":3,"file":"zeta-potential-analysis.esm.js","sources":["../node_modules/ml-spectra-processing/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/xAbsoluteSum.js","../node_modules/ml-spectra-processing/lib/x/xAdd.js","../node_modules/ml-spectra-processing/lib/x/xApplyFunctionStr.js","../node_modules/ml-spectra-processing/lib/x/xMultiply.js","../node_modules/ml-matrix/node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-array-rescale/node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-array-max/node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/matrix.js","../node_modules/ml-matrix/matrix.mjs","../node_modules/ml-spectra-processing/lib/x/xMean.js","../node_modules/ml-spectra-processing/lib/x/xVariance.js","../node_modules/ml-spectra-processing/lib/x/xStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xDivide.js","../node_modules/ml-spectra-processing/lib/x/xEnsureFloat64.js","../node_modules/fft.js/lib/fft.js","../node_modules/ml-spectra-processing/lib/utils/createFromToArray.js","../node_modules/ml-spectra-processing/lib/utils/stringify.js","../node_modules/ml-spectra-processing/lib/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib/x/xMinValue.js","../node_modules/ml-spectra-processing/lib/x/xIsEquallySpaced.js","../node_modules/ml-spectra-processing/lib/x/xIsMonotonic.js","../node_modules/ml-spectra-processing/lib/x/xMedianAbsoluteDeviation.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/xSum.js","../node_modules/ml-spectra-processing/lib/x/xNormed.js","../node_modules/ml-spectra-processing/lib/x/xPadding.js","../node_modules/ml-spectra-processing/lib/x/xParetoNormalization.js","../node_modules/ml-spectra-processing/lib/x/xRescale.js","../node_modules/ml-spectra-processing/lib/x/xRolling.js","../node_modules/ml-spectra-processing/lib/x/xRollingAverage.js","../node_modules/ml-spectra-processing/lib/x/xRollingMedian.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxZ.js","../node_modules/ml-spectra-processing/lib/xy/xyCheck.js","../node_modules/ml-spectra-processing/lib/xy/xyEnsureGrowingX.js","../node_modules/ml-spectra-processing/lib/zones/zonesNormalize.js","../node_modules/ml-spectra-processing/lib/zones/zonesWithPoints.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSlot.js","../node_modules/ml-spectra-processing/lib/xy/utils/integral.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSmooth.js","../node_modules/ml-spectra-processing/lib/xy/xyEquallySpaced.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterX.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterXPositive.js","../node_modules/ml-spectra-processing/lib/xy/xyGrowingX.js","../node_modules/ml-spectra-processing/lib/xy/xyJoinX.js","../node_modules/ml-spectra-processing/lib/xyArray/utils/getSlots.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayAlign.js","../node_modules/common-spectrum/lib/jsgraph/addStyle.js","../node_modules/common-spectrum/lib/jsgraph/colors.js","../node_modules/common-spectrum/lib/jsgraph/getJSGraph.js","../node_modules/common-spectrum/lib/jsgraph/getNormalizationAnnotations.js","../node_modules/is-any-array/lib/index.js","../node_modules/ml-signal-processing/lib/filters/scaling/centerMean.js","../node_modules/ml-signal-processing/lib/filters/scaling/centerMedian.js","../node_modules/ml-signal-processing/lib/filters/x/fromTo.js","../node_modules/ml-signal-processing/lib/filters/scaling/normed.js","../node_modules/ml-signal-processing/lib/filters/scaling/divideBySD.js","../node_modules/ml-signal-processing/lib/filters/scaling/rescale.js","../node_modules/ml-signal-processing/lib/filters/scaling/paretoNormalization.js","../node_modules/ml-airpls/lib/choleskySolver.js","../node_modules/cuthill-mckee/cuthill-mckee.js","../node_modules/ml-airpls/lib/utils.js","../node_modules/ml-airpls/lib/index.js","../node_modules/ml-array-sequential-fill/node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/baselines/src/airPLS.js","../node_modules/ml-regression-base/node_modules/is-any-array/lib-esm/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/ml-baseline-correction-regression/src/index.js","../node_modules/baselines/src/iterativePolynomial.js","../node_modules/baselines/src/rollingAverage.js","../node_modules/ml-rolling-ball-baseline/node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-rolling-ball-baseline/lib-esm/rollingBall.js","../node_modules/baselines/src/rollingBall.js","../node_modules/baselines/src/rollingMedian.js","../node_modules/ml-signal-processing/lib/filters/baseline/airPLSBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/iterativePolynomialBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingAverageBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingBallBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingMedianBaseline.js","../node_modules/ml-savitzky-golay-generalized/node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-savitzky-golay-generalized/lib-esm/index.js","../node_modules/ml-signal-processing/lib/filters/sg/firstDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/secondDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/thirdDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/savitzkyGolay.js","../node_modules/ml-signal-processing/lib/filters/x/ensureGrowing.js","../node_modules/ml-signal-processing/lib/filters/x/reverseIfNeeded.js","../node_modules/ml-signal-processing/lib/filters/x/equallySpaced.js","../node_modules/ml-signal-processing/lib/filters/x/filterX.js","../node_modules/ml-signal-processing/lib/filters/x/setMaxX.js","../node_modules/ml-signal-processing/lib/filters/x/setMinX.js","../node_modules/ml-gsd/lib/algorithms/getMinMaxIntervals.js","../node_modules/ml-gsd/lib/algorithms/tryMatchOneIntervalWithMinData.js","../node_modules/ml-gsd/lib/algorithms/autoAlgorithm.js","../node_modules/ml-gsd/lib/algorithms/getPeaksFromIntervals.js","../node_modules/ml-gsd/lib/algorithms/xGetCrossZeroPoints.js","../node_modules/ml-gsd/lib/algorithms/firstDerivative.js","../node_modules/ml-gsd/lib/algorithms/secondDerivative.js","../node_modules/ml-gsd/lib/utils/optimizeTop.js","../node_modules/ml-gsd/lib/gsd.js","../node_modules/ml-signal-processing/lib/filters/x/calibrateX.js","../node_modules/ml-signal-processing/lib/filters/x/xFunction.js","../node_modules/ml-signal-processing/lib/filters/scaling/yFunction.js","../node_modules/ml-signal-processing/lib/filters/y/setMaxY.js","../node_modules/ml-signal-processing/lib/filters/y/setMinY.js","../node_modules/ml-signal-processing/lib/filterXY.js","../node_modules/common-spectrum/lib/util/getNormalizedSpectrum.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/lib/util/convertUnit.js","../node_modules/common-spectrum/lib/util/ensureRegexp.js","../node_modules/common-spectrum/lib/util/getConvertedVariable.js","../node_modules/common-spectrum/lib/util/getXYSpectra.js","../node_modules/common-spectrum/lib/util/getXYSpectrum.js","../node_modules/common-spectrum/lib/Analysis.js","../node_modules/common-spectrum/lib/util/appendDistinctParameter.js","../node_modules/common-spectrum/lib/util/appendDistinctValue.js","../node_modules/common-spectrum/lib/AnalysesManager.js","../node_modules/ensure-string/lib/index.js","../node_modules/dynamic-typing/lib/parseString.js","../node_modules/gyromagnetic-ratio/lib-esm/gyromagneticRatioMHzT.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticNucleus.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticRatio.js","../node_modules/gyromagnetic-ratio/lib-esm/index.js","../node_modules/ml-array-median/node_modules/is-any-array/lib-esm/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/jcampconverter/dist/jcampconverter.js","../node_modules/common-spectrum/lib/from/fromJcamp.js","../node_modules/convert-to-jcamp/lib-esm/utils/addInfoData.js","../node_modules/convert-to-jcamp/node_modules/is-any-array/lib-esm/index.js","../node_modules/convert-to-jcamp/lib-esm/utils/checkMatrix.js","../node_modules/convert-to-jcamp/lib-esm/utils/checkNumberOrArray.js","../node_modules/convert-to-jcamp/lib-esm/utils/getExtremeValues.js","../node_modules/convert-to-jcamp/lib-esm/creatorNtuples.js","../node_modules/convert-to-jcamp/lib-esm/utils/getFactorNumber.js","../node_modules/convert-to-jcamp/lib-esm/utils/getBestFactor.js","../node_modules/convert-to-jcamp/lib-esm/utils/getNumber.js","../node_modules/convert-to-jcamp/lib-esm/utils/peakTableCreator.js","../node_modules/convert-to-jcamp/lib-esm/utils/rescaleAndEnsureInteger.js","../node_modules/convert-to-jcamp/lib-esm/utils/vectorEncoder.js","../node_modules/convert-to-jcamp/lib-esm/utils/xyDataCreator.js","../node_modules/convert-to-jcamp/lib-esm/fromJSON.js","../node_modules/convert-to-jcamp/lib-esm/fromVariables.js","../node_modules/common-spectrum/lib/to/toJcamps.js","../node_modules/common-spectrum/lib/to/toJcamp.js","../node_modules/common-spectrum/lib/to/toText.js","../node_modules/common-spectrum/lib/to/toMatrix.js","../node_modules/common-spectrum/lib/index.js","../node_modules/parse-zetasizer/lib/text/fromText.js","../node_modules/parse-zetasizer/lib/text/getArray.js","../lib/from/fromZetasizer.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 { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\nexport function xAbsoluteSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sum = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sum += Math.abs(array[i]);\n    }\n    return sum;\n}\n//# sourceMappingURL=xAbsoluteSum.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param array1 - the first array\n * @param array2 - the second array or number\n * @returns the result of the addition\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xAdd.js.map","/**\n * Will apply a function on each element of the array described as a string\n * By default we will use as variable 'x'\n * In front of sequence of lowercase we will add 'Math.'. This allows to write\n * `sin(x) + cos(x)` and it will be replace internally by (x) => (Math.sin(x) + Math.cos(x))\n * @param array\n * @param options\n * @returns\n */\nexport function xApplyFunctionStr(array, options = {}) {\n    const { variableLabel = 'x', fctString = variableLabel } = options;\n    const fct = new Function(variableLabel, `return Number(${fctString\n        .replaceAll(/(?<before>^|\\W)(?<after>[\\da-z]{2,}\\()/g, '$<before>Math.$<after>')\n        .replaceAll('Math.Math', 'Math')})`);\n    const toReturn = 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","// 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","// 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","// 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\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","// 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\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isAnyArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray.isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray.isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nfunction newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nfunction checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n\nfunction sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nfunction centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nfunction centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nfunction centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nfunction getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nfunction getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nfunction getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n\nclass AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isDistance() {\n    if (!this.isSymmetric()) return false;\n\n    for (let i = 0; i < this.rows; i++) {\n      if (this.get(i, i) !== 0) return false;\n    }\n\n    return true;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    switch (type) {\n      case 'max':\n        return this.max();\n      case 'frobenius':\n        return Math.sqrt(this.dot(this));\n      default:\n        throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  mpow(scalar) {\n    if (!this.isSquare()) {\n      throw new RangeError('Matrix must be square');\n    }\n    if (!Number.isInteger(scalar) || scalar < 0) {\n      throw new RangeError('Exponent must be a non-negative integer');\n    }\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\n    let result = Matrix.eye(this.rows);\n    let bb = this;\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\n    for (let e = scalar; e >= 1; e /= 2) {\n      if ((e & 1) !== 0) {\n        result = result.mmul(bb);\n      }\n      bb = bb.mmul(bb);\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      result = result.setSubMatrix(c11, 0, 0);\n      result = result.setSubMatrix(c12, c11.rows, 0);\n      result = result.setSubMatrix(c21, 0, c11.columns);\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min,\n          max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n  }\n\n  /**\n   * @template {AbstractMatrix} M\n   * @param {AbstractMatrix} from\n   * @param {M} to\n   * @return {M}\n   */\n  static copy(from, to) {\n    for (const [row, column, value] of from.entries()) {\n      to.set(row, column, value);\n    }\n\n    return to;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield [row, column, value]\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *entries() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield [row, col, this.get(row, col)];\n      }\n    }\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield value\n   * @returns {Generator<number, void, void>}\n   */\n  *values() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield this.get(row, col);\n      }\n    }\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n  /**\n   * @type {Float64Array[]}\n   */\n  data;\n\n  /**\n   * Init an empty matrix\n   * @param {number} nRows\n   * @param {number} nColumns\n   */\n  #initData(nRows, nColumns) {\n    this.data = [];\n\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\n      for (let i = 0; i < nRows; i++) {\n        this.data.push(new Float64Array(nColumns));\n      }\n    } else {\n      throw new TypeError('nColumns must be a positive integer');\n    }\n\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      this.#initData(nRows.rows, nRows.columns);\n      Matrix.copy(nRows, this);\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      this.#initData(nRows, nColumns);\n    } else if (isAnyArray.isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n\n      this.rows = nRows;\n      this.columns = nColumns;\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n  /** @type {Matrix} */\n  #matrix;\n\n  get size() {\n    return this.#matrix.size;\n  }\n\n  get rows() {\n    return this.#matrix.rows;\n  }\n\n  get columns() {\n    return this.#matrix.columns;\n  }\n\n  get diagonalSize() {\n    return this.rows;\n  }\n\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isSymmetricMatrix(value) {\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static zeros(diagonalSize) {\n    return new this(diagonalSize);\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static ones(diagonalSize) {\n    return new this(diagonalSize).fill(1);\n  }\n\n  /**\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n   * @return {this}\n   */\n  constructor(diagonalSize) {\n    super();\n\n    if (Matrix.isMatrix(diagonalSize)) {\n      if (!diagonalSize.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n\n      this.#matrix = Matrix.copy(\n        diagonalSize,\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\n      );\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\n    } else {\n      this.#matrix = new Matrix(diagonalSize);\n\n      if (!this.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n    }\n  }\n\n  clone() {\n    const matrix = new SymmetricMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  toMatrix() {\n    return new Matrix(this);\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.#matrix.get(rowIndex, columnIndex);\n  }\n  set(rowIndex, columnIndex, value) {\n    // symmetric set\n    this.#matrix.set(rowIndex, columnIndex, value);\n    this.#matrix.set(columnIndex, rowIndex, value);\n\n    return this;\n  }\n\n  removeCross(index) {\n    // symmetric remove side\n    this.#matrix.removeRow(index);\n    this.#matrix.removeColumn(index);\n\n    return this;\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    const row = array.slice();\n    row.splice(index, 1);\n\n    this.#matrix.addRow(index, row);\n    this.#matrix.addColumn(index, array);\n\n    return this;\n  }\n\n  /**\n   * @param {Mask[]} mask\n   */\n  applyMask(mask) {\n    if (mask.length !== this.diagonalSize) {\n      throw new RangeError('Mask size do not match with matrix size');\n    }\n\n    // prepare sides to remove from matrix from mask\n    /** @type {number[]} */\n    const sidesToRemove = [];\n    for (const [index, passthroughs] of mask.entries()) {\n      if (passthroughs) continue;\n      sidesToRemove.push(index);\n    }\n    // to remove from highest to lowest for no mutation shifting\n    sidesToRemove.reverse();\n\n    // remove sides\n    for (const sideIndex of sidesToRemove) {\n      this.removeCross(sideIndex);\n    }\n\n    return this;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * iterate from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 1 2 3 4\n   * B 2 5 6 7\n   * C 3 6 8 9\n   * D 4 7 9 10\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n   *\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n\n    /** @type {number[]} */\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   * @return {SymmetricMatrix}\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n    // compactSize = (sideSize * (sideSize + 1)) / 2\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new SymmetricMatrix(diagonalSize);\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return matrix;\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield [row, column, value]\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightEntries() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield [row, col, value];\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield value\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightValues() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield value;\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isDistanceMatrix(value) {\n    return (\n      SymmetricMatrix.isSymmetricMatrix(value) &&\n      value.klassSubType === 'DistanceMatrix'\n    );\n  }\n\n  constructor(sideSize) {\n    super(sideSize);\n\n    if (!this.isDistance()) {\n      throw new TypeError('Provided arguments do no produce a distance matrix');\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    // distance matrix diagonal is 0\n    if (rowIndex === columnIndex) value = 0;\n\n    return super.set(rowIndex, columnIndex, value);\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    // ensure distance\n    array = array.slice();\n    array[index] = 0;\n\n    return super.addCross(index, array);\n  }\n\n  toSymmetricMatrix() {\n    return new SymmetricMatrix(this);\n  }\n\n  clone() {\n    const matrix = new DistanceMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      if (row === col) continue;\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * no diagonal (only zeros)\n   * iterable from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 0 1 2 3\n   * B 1 0 4 5\n   * C 2 4 0 6\n   * D 3 5 6 0\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n   *\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n    /** @type {number[]} */\n    const compact = new Array(compactLength);\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n\n    if (compactSize === 0) {\n      return new this(0);\n    }\n\n    // compactSize in Natural integer range ]0;∞]\n    // compactSize = (sideSize * (sideSize - 1)) / 2\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new this(diagonalSize);\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return matrix;\n  }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n\nclass MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n  constructor(matrix, columnIndices) {\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, matrix.rows, columnIndices.length);\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n  }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n  }\n}\n\nclass MatrixFlipRowView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n  }\n}\n\nclass MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n  constructor(matrix, rowIndices) {\n    checkRowIndices(matrix, rowIndices);\n    super(matrix, rowIndices.length, matrix.columns);\n    this.rowIndices = rowIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n  }\n}\n\nclass MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    checkRowIndices(matrix, rowIndices);\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, rowIndices.length, columnIndices.length);\n    this.rowIndices = rowIndices;\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n\nclass MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n\nclass MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n\nfunction wrap(array, options) {\n  if (isAnyArray.isAnyArray(array)) {\n    if (array[0] && isAnyArray.isAnyArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n\nclass LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n\nfunction hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n\nclass QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n\nclass SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n\nfunction inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n\nfunction determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    if (matrix.columns === 0) {\n      return 1;\n    }\n\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isEmpty()) {\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n    // (0xn)*(nx0)*(0xn) = 0xn\n    // (nx0)*(0xn)*(nx0) = nx0\n    return matrix.transpose();\n  }\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > threshold) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n\nclass EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    if (matrix.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(i, j, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n    } else {\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n        V.set(j, i, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(j, i, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(k, j) * d[k];\n          e[k] += V.get(k, j) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(n - 1, i, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(k, i + 1) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(k, i + 1) * V.get(k, j);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(k, j, V.get(k, j) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(k, i + 1, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n    V.set(n - 1, j, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      do {\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(k, i + 1);\n            V.set(k, i + 1, s * V.get(k, i) + c * h);\n            V.set(k, i, c * V.get(k, i) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(j, i);\n        V.set(j, i, V.get(j, k));\n        V.set(j, k, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        // eslint-disable-next-line no-multi-assign\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          // eslint-disable-next-line no-multi-assign\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n\nclass CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &&= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = positiveDefinite;\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n\nclass nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the mean value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMean(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue / (toIndex - fromIndex + 1);\n}\n//# sourceMappingURL=xMean.js.map","import { isAnyArray } from 'is-any-array';\nimport { xMean } from \"./xMean.js\";\n/**\n * Finds the variance of the data\n * @param values - the values of the array\n * @param options - options\n * @returns variance\n */\nexport function xVariance(values, options = {}) {\n    if (!isAnyArray(values)) {\n        throw new TypeError('input must be an array');\n    }\n    const { unbiased = true, mean = xMean(values) } = options;\n    let sqrError = 0;\n    for (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 { xVariance } from \"./xVariance.js\";\n/**\n * Finds the standard deviation for the data at hand\n * @param values - values in the data\n * @param options - options\n * @returns standard deviation\n */\nexport function xStandardDeviation(values, options = {}) {\n    return Math.sqrt(xVariance(values, options));\n}\n//# sourceMappingURL=xStandardDeviation.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array or number\n * @param options - options\n */\nexport function xDivide(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new RangeError('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xDivide.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Returns a copy of the data as a Float64Array.\n * @param array - array of numbers\n */\nexport function xEnsureFloat64(array) {\n    xCheck(array);\n    if (array instanceof Float64Array) {\n        return array.slice(0);\n    }\n    return Float64Array.from(array);\n}\n//# sourceMappingURL=xEnsureFloat64.js.map","'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","/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n * @param options - options\n * @returns - array of distributed numbers between \"from\" and \"to\"\n */\nexport function createFromToArray(options = {}) {\n    const { from = 0, to = 1, length = 1000, includeFrom = true, includeTo = true, distribution = 'uniform', } = options;\n    const array = new Float64Array(length);\n    let div = length;\n    if (includeFrom && includeTo) {\n        div = length - 1;\n    }\n    else if ((!includeFrom && includeTo) || (includeFrom && !includeTo)) {\n        div = length;\n    }\n    else if (!includeFrom && !includeTo) {\n        div = length + 1;\n    }\n    const delta = (to - from) / div;\n    if (distribution === 'uniform') {\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * index;\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * (index + 1);\n                index++;\n            }\n        }\n    }\n    else if (distribution === 'log') {\n        const base = (to / from) ** (1 / div);\n        const firstExponent = Math.log(from) / Math.log(base);\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index);\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index + 1);\n                index++;\n            }\n        }\n    }\n    else {\n        throw new Error('distribution must be uniform or log');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Stringify an object and convert all typed arrays to arrays\n * @param object\n * @param replacer\n * @param space\n * @returns\n */\nexport function stringify(object, replacer, space) {\n    const internalReplacer = (key, value) => {\n        if (ArrayBuffer.isView(value)) {\n            value = Array.from(value);\n        }\n        if (replacer) {\n            return replacer(key, value);\n        }\n        return value;\n    };\n    return JSON.stringify(object, internalReplacer, space);\n}\n//# sourceMappingURL=stringify.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the minimal value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","/**\n * Check if the values are separated always by the same difference\n * @param array - Monotone growing array of number\n * @param options\n */\nexport function xIsEquallySpaced(array, options = {}) {\n    if (array.length < 3)\n        return true;\n    const { tolerance = 0.05 } = options;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < array.length - 1; ++i) {\n        const absoluteDifference = array[i + 1] - array[i];\n        if (absoluteDifference < minDx) {\n            minDx = absoluteDifference;\n        }\n        if (absoluteDifference > maxDx) {\n            maxDx = absoluteDifference;\n        }\n    }\n    return (maxDx - minDx) / maxDx < tolerance;\n}\n//# sourceMappingURL=xIsEquallySpaced.js.map","/**\n * Returns true if x is monotonic.\n * @param array - array of numbers.\n * @returns 1 if monotonic increasing, -1 if monotonic decreasing, 0 if not monotonic.\n */\nexport function xIsMonotonic(array) {\n    if (array.length <= 2) {\n        return 1;\n    }\n    if (array[0] === array[1]) {\n        // maybe a constant series\n        for (let i = 1; i < array.length - 1; i++) {\n            if (array[i] !== array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    if (array[0] < array.at(-1)) {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] >= array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    else {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] <= array[i + 1])\n                return 0;\n        }\n        return -1;\n    }\n}\n//# sourceMappingURL=xIsMonotonic.js.map","import { xMedian } from \"./xMedian.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\";\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 { 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 { 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 { xCheck } from \"./xCheck.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Pareto scaling, which uses the square root of standard deviation as the scaling factor, circumvents the amplification of noise by retaining a small portion of magnitude information.\n * Noda, I. (2008). Scaling techniques to enhance two-dimensional correlation spectra. Journal of Molecular Structure, 883, 216-227.\n * DOI: 10.1016/j.molstruc.2007.12.026\n * @param array - array of number\n */\nexport function xParetoNormalization(array) {\n    xCheck(array);\n    const result = new Float64Array(array.length);\n    const sqrtSD = Math.sqrt(xStandardDeviation(array));\n    for (let i = 0; i < array.length; i++) {\n        result[i] = array[i] / sqrtSD;\n    }\n    return result;\n}\n//# sourceMappingURL=xParetoNormalization.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xMinValue } from \"./xMinValue.js\";\n/**\n * Function used to rescale data\n * @param input - input for the rescale\n * @param options - options\n * @returns rescaled data\n */\nexport function xRescale(input, options = {}) {\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    const currentMin = xMinValue(input);\n    const currentMax = xMaxValue(input);\n    if (currentMin === currentMax) {\n        throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n    }\n    const { min = 0, max = 1 } = options;\n    if (min >= max) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + min;\n    }\n    return output;\n}\n//# sourceMappingURL=xRescale.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xPadding } from \"./xPadding.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param fct - callback function that from an array returns a value\n * @param options - options\n */\nexport function xRolling(array, fct, options = {}) {\n    xCheck(array);\n    if (typeof fct !== 'function') {\n        throw new TypeError('fct must be a function');\n    }\n    const { window = 5, padding = {} } = options;\n    const { size = window - 1, algorithm, value } = padding;\n    const padded = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n    const newArray = [];\n    for (let i = 0; i < padded.length - window + 1; i++) {\n        // we will send a view to the original buffer\n        newArray.push(fct(padded.subarray(i, i + window)));\n    }\n    return newArray;\n}\n//# sourceMappingURL=xRolling.js.map","import { xMean } from \"./xMean.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - option\n */\nexport function xRollingAverage(array, options = {}) {\n    return xRolling(array, xMean, options);\n}\n//# sourceMappingURL=xRollingAverage.js.map","import { xMedian } from \"./xMedian.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - options\n */\nexport function xRollingMedian(array, options = {}) {\n    return xRolling(array, xMedian, options);\n}\n//# sourceMappingURL=xRollingMedian.js.map","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix must contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('all rows must has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Get min and max Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Verify that `data` is an object of x,y arrays.\n * Throws an error if it's not.\n * @param data\n * @param options\n * @param options.minLength\n */\nexport function xyCheck(data, options = {}) {\n    const { minLength } = options;\n    if (data === null ||\n        typeof data !== 'object' ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.x) ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.y)) {\n        throw new Error('data must be an object of x and y arrays');\n    }\n    // @ts-expect-error Typechecking\n    if (data.x.length !== data.y.length) {\n        throw new Error('the x and y arrays must have the same length');\n    }\n    // @ts-expect-error Typechecking\n    if (minLength && data.x.length < minLength) {\n        throw new Error(`data.x must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyCheck.js.map","import { xIsMonotonic } from \"../x/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","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","/**\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 \"../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","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Filter out all the points for which x <= 0. Useful to display log scale data\n * @param data - data\n * @returns - An object with the filtered data\n */\nexport function xyFilterXPositive(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    if (x === undefined || y === undefined) {\n        return { x: newX, y: newY };\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (x[i] > 0) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyFilterXPositive.js.map","/**\n * Order object of array, x has to be monotone. Ensure x is growing\n * @param data - Object of kind {x:[], y:[]}.\n */\nexport function xyGrowingX(data) {\n    const { x, y } = data;\n    if (x.length !== y.length) {\n        throw new TypeError('length of x and y must be identical');\n    }\n    if (x.length < 2 || x[0] < x.at(-1))\n        return data;\n    return {\n        x: x.toReversed(),\n        y: y.toReversed(),\n    };\n}\n//# sourceMappingURL=xyGrowingX.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Join x / y values when difference in X is closer than delta.\n * When joining, y values are summed and x values are weighted average\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - An object with the xyIntegration function\n */\nexport function xyJoinX(data, options = {}) {\n    xyCheck(data);\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    if (x.length < 2) {\n        return { x, y };\n    }\n    let position = 0;\n    for (let i = 1; i < x.length; i++) {\n        const difference = x[i] - x[i - 1];\n        const currentDelta = deltaIsFunction ? delta((x[i] + x[i - 1]) / 2) : delta;\n        if (difference <= currentDelta) {\n            // we join\n            if (y[position] !== 0 || y[i] !== 0) {\n                x[position] =\n                    (x[position] * y[position] + x[i] * y[i]) / (y[position] + y[i]);\n                y[position] += y[i];\n            }\n        }\n        else {\n            position++;\n            x[position] = x[i];\n            y[position] = y[i];\n        }\n    }\n    x.length = position + 1;\n    y.length = position + 1;\n    return { x, y };\n}\n//# sourceMappingURL=xyJoinX.js.map","/**\n * GetSlots.\n * @param data - data.\n * @param options - Options.\n */\nexport function getSlots(data, options = {}) {\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const possibleXs = Float64Array.from(data.flatMap((spectrum) => spectrum.x));\n    possibleXs.sort();\n    if (possibleXs.length === 0) {\n        throw new Error('can not process empty arrays');\n    }\n    let currentSlot = {\n        from: possibleXs[0],\n        to: possibleXs[0],\n        average: possibleXs[0],\n        sum: possibleXs[0],\n        number: 1,\n    };\n    const slots = [currentSlot];\n    for (let i = 1; i < possibleXs.length; i++) {\n        const currentDelta = deltaIsFunction ? delta(possibleXs[i]) : delta;\n        if (possibleXs[i] - currentSlot.to <= currentDelta) {\n            currentSlot.to = possibleXs[i];\n            currentSlot.number++;\n            currentSlot.sum += possibleXs[i];\n            currentSlot.average = currentSlot.sum / currentSlot.number;\n        }\n        else {\n            currentSlot = {\n                from: possibleXs[i],\n                to: possibleXs[i],\n                average: possibleXs[i],\n                sum: possibleXs[i],\n                number: 1,\n            };\n            slots.push(currentSlot);\n        }\n    }\n    return slots;\n}\n//# sourceMappingURL=getSlots.js.map","import { xyJoinX } from \"../xy/index.js\";\nimport { getSlots } from \"./utils/getSlots.js\";\n/**\n * Aligns data, can be used for spectra\n * @param data - data\n * @param options - Options\n */\nexport function xyArrayAlign(data, options = {}) {\n    const { delta = 1, requiredY = false } = options;\n    data = data.map((spectrum) => xyJoinX(spectrum, { delta }));\n    const slots = getSlots(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.average));\n    const ys = Array.from(data, () => new Float64Array(x.length));\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] <= slot.to) {\n                ys[j][i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    if (requiredY)\n        return filterRequiredY(x, ys);\n    return { x, ys };\n}\nfunction filterRequiredY(x, ys) {\n    const newX = [];\n    const newYs = Array.from(ys, () => []);\n    for (let i = 0; i < x.length; i++) {\n        if (ys.every((y) => y[i] !== 0)) {\n            newX.push(x[i]);\n            for (let j = 0; j < ys.length; j++) {\n                newYs[j].push(ys[j][i]);\n            }\n        }\n    }\n    return { x: newX, ys: newYs };\n}\n//# sourceMappingURL=xyArrayAlign.js.map","export function addStyle(serie, spectrum, options = {}) {\n    let { color = '#A9A9A9' } = options;\n    const { opacity = 1, lineWidth = 1 } = options;\n    if (color.match(/#[\\da-f]{6}$/i)) {\n        color = (color + ((opacity * 255) >> 0).toString(16)).toUpperCase();\n    }\n    else {\n        color = color.replace(/rgb ?\\((.*)\\)/, `rgba($1,${opacity})`);\n    }\n    serie.style = [\n        {\n            name: 'unselected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth,\n                    dash: 1,\n                },\n            },\n        },\n        {\n            name: 'selected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth + 2,\n                    dash: 1,\n                },\n            },\n        },\n    ];\n    serie.name = spectrum.label || spectrum.id;\n}\n//# sourceMappingURL=addStyle.js.map","export const COLORS = [\n    '#FFB300',\n    '#803E75',\n    '#FF6800',\n    '#A6BDD7',\n    '#C10020',\n    '#CEA262',\n    '#817066',\n    '#007D34',\n    '#F6768E',\n    '#00538A',\n    '#FF7A5C',\n    '#53377A',\n    '#FF8E00',\n    '#B32851',\n    '#F4C800',\n    '#7F180D',\n    '#93AA00',\n    '#593315',\n    '#F13A13',\n    '#232C16',\n];\n//# sourceMappingURL=colors.js.map","import { xyFilterXPositive } from 'ml-spectra-processing';\nimport { addStyle } from './addStyle.js';\nimport { COLORS } from './colors.js';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param analyses\n * @param options\n */\nexport function getJSGraph(analyses, options = {}) {\n    const { colors = COLORS, opacities = [1], linesWidth = [1], selector = {}, normalization, xAxis = {}, yAxis = {}, } = options;\n    const series = [];\n    let xLabel = xAxis.label;\n    let yLabel = yAxis.label;\n    let xUnits = xAxis.units;\n    let yUnits = yAxis.units;\n    for (let i = 0; i < analyses.length; i++) {\n        const analysis = analyses[i];\n        const spectra = analysis.getNormalizedSpectra({\n            selector,\n            normalization,\n        });\n        if (spectra.length === 0)\n            continue;\n        const firstSpectrum = spectra[0];\n        // todo: if many spectra are available and not xUnits / yUnits are specified we should ensure that all the spectra are compatible\n        if (!xLabel)\n            xLabel = firstSpectrum.variables.x.label;\n        if (!yLabel)\n            yLabel = firstSpectrum.variables.y.label;\n        if (!xUnits)\n            xUnits = firstSpectrum.variables.x.units;\n        if (!yUnits)\n            yUnits = firstSpectrum.variables.y.units;\n        for (const spectrum of spectra) {\n            const serie = {};\n            addStyle(serie, analysis, {\n                color: colors[i % colors.length],\n                opacity: opacities[i % opacities.length],\n                lineWidth: linesWidth[i % linesWidth.length],\n            });\n            serie.data = {\n                x: spectrum.variables.x.data,\n                y: spectrum.variables.y.data,\n            };\n            serie.id = spectrum.id;\n            if (xAxis.logScale) {\n                serie.data = xyFilterXPositive(serie.data);\n            }\n            series.push(serie);\n        }\n    }\n    return {\n        axes: {\n            x: {\n                label: xLabel,\n                unit: xUnits,\n                unitWrapperBefore: '(',\n                unitWrapperAfter: ')',\n                flipped: false,\n                display: true,\n                ...xAxis,\n            },\n            y: {\n                label: yLabel,\n                unit: yUnits,\n                unitWrapperBefore: '(',\n                unitWrapperAfter: ')',\n                flipped: false,\n                display: true,\n                ...yAxis,\n            },\n        },\n        series,\n    };\n}\n//# sourceMappingURL=getJSGraph.js.map","const defaultBoundary = { y: { min: '0px', max: '2000px' } };\nexport function getNormalizationAnnotations(filter = {}, boundary = defaultBoundary) {\n    let { exclusions = [] } = filter;\n    let annotations = [];\n    exclusions = exclusions.filter((exclusion) => !exclusion.ignore);\n    annotations = exclusions.map((exclusion) => {\n        const annotation = {\n            type: 'rect',\n            position: [\n                { x: exclusion.from, y: boundary.y.min },\n                { x: exclusion.to, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        };\n        return annotation;\n    });\n    if (filter.from !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: Number.MIN_SAFE_INTEGER, y: boundary.y.min },\n                { x: filter.from, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    if (filter.to !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: filter.to, y: boundary.y.min },\n                { x: Number.MAX_SAFE_INTEGER, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    return annotations;\n}\n//# sourceMappingURL=getNormalizationAnnotations.js.map","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { xMean } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n */\nexport function centerMean(data) {\n    const { y } = data;\n    const mean = xMean(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= mean;\n    }\n    return { data };\n}\n//# sourceMappingURL=centerMean.js.map","import { xMedian } from 'ml-spectra-processing';\n/**\n * Center the median\n * @param data\n */\nexport function centerMedian(data) {\n    const { y } = data;\n    const median = xMedian(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= median;\n    }\n    return { data };\n}\n//# sourceMappingURL=centerMedian.js.map","import { xGetFromToIndex } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function fromTo(data, options = {}) {\n    const { fromIndex, toIndex } = xGetFromToIndex(data.x, options);\n    return {\n        data: {\n            x: data.x.subarray(fromIndex, toIndex + 1),\n            y: data.y.subarray(fromIndex, toIndex + 1),\n        },\n    };\n}\n//# sourceMappingURL=fromTo.js.map","import { xNormed } from 'ml-spectra-processing';\n/**\n * Norm the Y values\n * @param data\n * @param options\n */\nexport function normed(data, options = {}) {\n    xNormed(data.y, { ...options, output: data.y });\n    return { data };\n}\n//# sourceMappingURL=normed.js.map","import { xStandardDeviation } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n */\nexport function divideBySD(data) {\n    const { y } = data;\n    const sd = xStandardDeviation(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] /= sd;\n    }\n    return { data };\n}\n//# sourceMappingURL=divideBySD.js.map","import { xRescale } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n * @param options\n */\nexport function rescale(data, options = {}) {\n    xRescale(data.y, { ...options, output: data.y });\n    return { data };\n}\n//# sourceMappingURL=rescale.js.map","import { xParetoNormalization } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n */\nexport function paretoNormalization(data) {\n    return {\n        data: {\n            x: data.x,\n            y: xParetoNormalization(data.y),\n        },\n    };\n}\n//# sourceMappingURL=paretoNormalization.js.map","// Based on https://github.com/scijs/cholesky-solve\nfunction ldlSymbolic(n, Ap, Ai, Lp, Parent, Lnz, Flag) {\n    let i, k, p, kk, p2;\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            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)\n                        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}\nfunction ldlNumeric(n, Ap, Ai, Ax, Lp, Parent, Lnz, Li, Lx, D, Y, Pattern, Flag) {\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; /* 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)\n                    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;\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;\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        if (D[k] === 0)\n            return k; /* failure, D(k,k) is zero */\n    }\n    return n; /* success, diagonal of D is all nonzero */\n}\nfunction ldlLsolve(n, X, Lp, Li, Lx) {\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}\nfunction ldlDsolve(n, X, D) {\n    let j;\n    for (j = 0; j < n; j++) {\n        X[j] /= D[j];\n    }\n}\nfunction ldlLTsolve(n, X, Lp, Li, Lx) {\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}\nfunction ldlPerm(n, X, B, P) {\n    let j;\n    for (j = 0; j < n; j++) {\n        X[j] = B[P[j]];\n    }\n}\nfunction ldlPermt(n, X, B, P) {\n    let j;\n    for (j = 0; j < n; j++) {\n        X[P[j]] = B[j];\n    }\n}\n/**\n * Prepares a sparse matrix for Cholesky decomposition and returns a solver function.\n * @param M - Sparse matrix in triplet format (array of [row, col, value] entries).\n * @param n - Size of the matrix (n-by-n).\n * @param P - Optional permutation array of size n.\n * @returns A solver function that takes a right-hand side vector and returns the solution, or null if decomposition fails.\n */\nfunction prepare(M, n, P) {\n    // if a permutation was specified, apply it.\n    if (P) {\n        const Pinv = new Array(n);\n        for (let k = 0; k < n; k++) {\n            Pinv[P[k]] = k;\n        }\n        const 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            // 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                const t = ac;\n                ac = ar;\n                ar = t;\n            }\n            Mt[a] = [];\n            Mt[a][0] = ar;\n            Mt[a][1] = ac;\n            Mt[a][2] = M[a][2];\n        }\n        M = Mt; // copy scratch memory.\n    }\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    // The sparse matrix we are decomposing is A.\n    // Now we shall create A from M.\n    const Ap = new Array(n + 1);\n    const Ai = new Array(M.length);\n    const Ax = new Array(M.length);\n    // count number of non-zero elements in columns.\n    const LNZ = [];\n    for (let i = 0; i < n; ++i) {\n        LNZ[i] = 0;\n    }\n    for (const entry of M) {\n        LNZ[entry[1]]++;\n    }\n    Ap[0] = 0;\n    for (let i = 0; i < n; ++i) {\n        Ap[i + 1] = Ap[i] + LNZ[i];\n    }\n    const coloffset = [];\n    for (let a = 0; a < n; ++a) {\n        coloffset[a] = 0;\n    }\n    // go through all elements in M, and add them to sparse matrix A.\n    for (const e of M) {\n        const col = e[1];\n        const adr = Ap[col] + coloffset[col];\n        Ai[adr] = e[0];\n        Ax[adr] = e[2];\n        coloffset[col]++;\n    }\n    const D = new Array(n);\n    const Y = new Array(n);\n    const Lp = new Array(n + 1);\n    const Parent = new Array(n);\n    const Lnz = new Array(n);\n    const Flag = new Array(n);\n    const Pattern = new Array(n);\n    const bp1 = new Array(n);\n    const x = new Array(n);\n    ldlSymbolic(n, Ap, Ai, Lp, Parent, Lnz, Flag);\n    const Lx = new Array(Lp[n]);\n    const Li = new Array(Lp[n]);\n    const d = ldlNumeric(n, Ap, Ai, Ax, Lp, Parent, Lnz, Li, Lx, D, Y, Pattern, Flag);\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            return x;\n        };\n    }\n    else {\n        return null;\n    }\n}\nexport default prepare;\n//# sourceMappingURL=choleskySolver.js.map","'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/**\n * Updates the system matrix with new weights and computes the weighted right-hand side vector.\n * @param matrix - The lower triangular non-zeros matrix in triplet format.\n * @param y - The original data vector.\n * @param weights - The weights vector.\n * @returns A tuple of the updated matrix and the weighted right-hand side vector.\n */\nexport function updateSystem(matrix, y, weights) {\n    const nbPoints = y.length;\n    const l = nbPoints - 1;\n    const newMatrix = new Array(matrix.length);\n    const newVector = new Float64Array(nbPoints);\n    for (let i = 0; i < l; i++) {\n        const w = weights[i];\n        const diag = i * 2;\n        const next = diag + 1;\n        newMatrix[diag] = matrix[diag].slice();\n        newMatrix[next] = matrix[next].slice();\n        if (w === 0) {\n            newVector[i] = 0;\n        }\n        else {\n            newVector[i] = y[i] * w;\n            newMatrix[diag][2] += w;\n        }\n    }\n    newVector[l] = y[l] * weights[l];\n    newMatrix[l * 2] = matrix[l * 2].slice();\n    newMatrix[l * 2][2] += weights[l];\n    return [newMatrix, newVector];\n}\n/**\n * Constructs the delta matrix and applies Cuthill-McKee permutation.\n * @param nbPoints - Number of data points.\n * @param lambda - Smoothing parameter.\n * @returns An object containing the lower triangular non-zeros matrix and the permutation array.\n */\nexport function getDeltaMatrix(nbPoints, lambda) {\n    const matrix = [];\n    const last = nbPoints - 1;\n    for (let i = 0; i < last; i++) {\n        matrix.push([i, i, lambda * 2], [i + 1, i, -1 * lambda]);\n    }\n    matrix[0][2] = lambda;\n    matrix.push([last, last, lambda]);\n    return {\n        lowerTriangularNonZeros: matrix,\n        permutationEncodedArray: cuthillMckee(matrix, nbPoints),\n    };\n}\n//# sourceMappingURL=utils.js.map","import { xAbsoluteSum, xFindClosestIndex, xMultiply, xNoiseSanPlot, } from 'ml-spectra-processing';\nimport cholesky from \"./choleskySolver.js\";\nimport { getDeltaMatrix, updateSystem } from \"./utils.js\";\n/**\n * Fit the baseline drift by iteratively changing weights of sum square error between the fitted baseline and original signals,\n * for further information about the parameters you can get the {@link https://github.com/zmzhang/airPLS/blob/main/airPLS_manuscript.pdf paper of airPLS}.\n * @param x - X axis data useful when control points or zones are submitted.\n * @param y - Original data.\n * @param options - Options object.\n * @returns An object containing the corrected data, baseline, iteration count, and error.\n */\nexport default function airPLS(x, y, options = {}) {\n    const { weights, controlPoints } = getControlPoints(x, y, options);\n    const { maxIterations = 100, lambda = 10, tolerance = 0.001 } = options;\n    let baseline = [];\n    let iteration;\n    let sumNegDifferences = Number.MAX_SAFE_INTEGER;\n    const corrected = Float64Array.from(y);\n    const stopCriterion = getStopCriterion(y, tolerance);\n    const { length } = y;\n    const { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(length, lambda);\n    let threshold = 1;\n    const l = length - 1;\n    let prevNegSum = Number.MAX_SAFE_INTEGER;\n    for (iteration = 0; iteration < maxIterations && Math.abs(sumNegDifferences) > stopCriterion; iteration++) {\n        const [leftHandSide, rightHandSide] = updateSystem(lowerTriangularNonZeros, y, weights);\n        const cho = cholesky(leftHandSide, length, permutationEncodedArray);\n        if (cho === null) {\n            throw new Error('Cholesky decomposition failed');\n        }\n        baseline = cho(rightHandSide);\n        sumNegDifferences = applyCorrection(y, baseline, corrected);\n        if (iteration === 1) {\n            const { positive } = xNoiseSanPlot(corrected);\n            threshold = positive;\n        }\n        else {\n            const absChange = Math.abs(prevNegSum / sumNegDifferences);\n            if (absChange < 1.01 && absChange > 0.99) {\n                break;\n            }\n        }\n        prevNegSum = sumNegDifferences + 0;\n        const absoluteSumNegatives = Math.abs(sumNegDifferences);\n        for (let i = 1; i < l; i++) {\n            const absDiff = Math.abs(corrected[i]);\n            const weight = Math.exp((-iteration * absDiff) / absoluteSumNegatives);\n            weights[i] =\n                controlPoints[i] < 1 && absDiff > threshold ? weight / 4 : weight;\n        }\n        weights[0] = 1;\n        weights[l] = 1;\n    }\n    return {\n        corrected,\n        baseline,\n        iteration,\n        error: sumNegDifferences,\n    };\n}\nfunction applyCorrection(y, baseline, corrected) {\n    let sumNegDifferences = 0;\n    for (let i = 0; i < y.length; i++) {\n        const diff = y[i] - baseline[i];\n        if (diff < 0)\n            sumNegDifferences += diff;\n        corrected[i] = diff;\n    }\n    return sumNegDifferences;\n}\nfunction getStopCriterion(y, tolerance) {\n    const sum = xAbsoluteSum(y);\n    return tolerance * sum;\n}\nfunction getControlPoints(x, y, options = {}) {\n    const { length } = x;\n    const { controlPoints = Int8Array.from({ length }).fill(0) } = options;\n    const { zones = [], weights = Float64Array.from({ length }).fill(0.5) } = options;\n    if (x.length !== y.length) {\n        throw new RangeError('Y should match the length with X');\n    }\n    else if (controlPoints.length !== x.length) {\n        throw new RangeError('controlPoints should match the length with X');\n    }\n    else if (weights.length !== x.length) {\n        throw new RangeError('weights should match the length with X');\n    }\n    for (const range of zones) {\n        let indexFrom = xFindClosestIndex(x, range.from);\n        let indexTo = xFindClosestIndex(x, range.to);\n        if (indexFrom > indexTo)\n            [indexFrom, indexTo] = [indexTo, indexFrom];\n        for (let i = indexFrom; i < indexTo; i++) {\n            controlPoints[i] = 1;\n        }\n    }\n    return {\n        weights: 'controlPoints' in options || zones.length > 0\n            ? xMultiply(weights, controlPoints)\n            : weights,\n        controlPoints,\n    };\n}\n//# sourceMappingURL=index.js.map","// 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\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array<number>} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array<number>}\n */\n\nfunction sequentialFill() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (_typeof(input) === 'object' && !isAnyArray(input)) {\n    options = input;\n    input = [];\n  }\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  var _options = options,\n      _options$from = _options.from,\n      from = _options$from === void 0 ? 0 : _options$from,\n      _options$to = _options.to,\n      to = _options$to === void 0 ? 10 : _options$to,\n      _options$size = _options.size,\n      size = _options$size === void 0 ? input.length : _options$size,\n      step = _options.step;\n\n  if (size !== 0 && step) {\n    throw new Error('step is defined by the array size');\n  }\n\n  if (!size) {\n    if (step) {\n      size = Math.floor((to - from) / step) + 1;\n    } else {\n      size = to - from + 1;\n    }\n  }\n\n  if (!step && size) {\n    step = (to - from) / (size - 1);\n  }\n\n  if (Array.isArray(input)) {\n    // only works with normal array\n    input.length = 0;\n\n    for (var i = 0; i < size; i++) {\n      input.push(from);\n      from += step;\n    }\n  } else {\n    if (input.length !== size) {\n      throw new Error('sequentialFill typed array must have the correct length');\n    }\n\n    for (var _i = 0; _i < size; _i++) {\n      input[_i] = from;\n      from += step;\n    }\n  }\n\n  return input;\n}\n\nexport { sequentialFill as default };\n","import airpls from 'ml-airpls';\nimport sequentialFill from 'ml-array-sequential-fill';\n/**\n * Adaptive iteratively reweighted penalized least squares [1]\n *\n * This function calls ml-airpls\n *\n * References:\n * [1] Zhang, Z.-M.; Chen, S.; Liang, Y.-Z.\n * Baseline Correction Using Adaptive Iteratively Reweighted Penalized Least Squares.\n * Analyst 2010, 135 (5), 1138–1146. https://doi.org/10.1039/B922045C.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {object} [options.regression] - Options for the regression\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.regression.§Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function airPLSBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n  let output = airpls(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","// 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 * Check that x and y are arrays with the same length.\n * @param x - first array\n * @param y - second array\n * @throws if x or y are not the same length, or if they are not arrays\n */\nexport function checkArrayLength(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y)) {\n        throw new TypeError('x and y must be arrays');\n    }\n    if (x.length !== y.length) {\n        throw new RangeError('x and y arrays must have the same length');\n    }\n}\n//# sourceMappingURL=checkArrayLength.js.map","import { isAnyArray } from 'is-any-array';\nimport { checkArrayLength } from './checkArrayLength';\nexport class BaseRegression {\n    constructor() {\n        if (new.target === BaseRegression) {\n            throw new Error('BaseRegression must be subclassed');\n        }\n    }\n    predict(x) {\n        if (typeof x === 'number') {\n            return this._predict(x);\n        }\n        else if (isAnyArray(x)) {\n            const y = [];\n            for (const xVal of x) {\n                y.push(this._predict(xVal));\n            }\n            return y;\n        }\n        else {\n            throw new TypeError('x must be a number or array');\n        }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _predict(x) {\n        throw new Error('_predict must be implemented');\n    }\n    train() {\n        // Do nothing for this package\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toString(precision) {\n        return '';\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toLaTeX(precision) {\n        return '';\n    }\n    /**\n     * Return the correlation coefficient of determination (r) and chi-square.\n     * @param x - explanatory variable\n     * @param y - response variable\n     * @return - Object with further statistics.\n     */\n    score(x, y) {\n        checkArrayLength(x, y);\n        const n = x.length;\n        const y2 = new Array(n);\n        for (let i = 0; i < n; i++) {\n            y2[i] = this._predict(x[i]);\n        }\n        let xSum = 0;\n        let ySum = 0;\n        let chi2 = 0;\n        let rmsd = 0;\n        let xSquared = 0;\n        let ySquared = 0;\n        let xY = 0;\n        for (let i = 0; i < n; i++) {\n            xSum += y2[i];\n            ySum += y[i];\n            xSquared += y2[i] * y2[i];\n            ySquared += y[i] * y[i];\n            xY += y2[i] * y[i];\n            if (y[i] !== 0) {\n                chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n            }\n            rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n        }\n        const r = (n * xY - xSum * ySum) /\n            Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n        return {\n            r,\n            r2: r * r,\n            chi2,\n            rmsd: Math.sqrt(rmsd / n),\n        };\n    }\n}\n//# sourceMappingURL=BaseRegression.js.map","/**\n * Cast `number` to string. Optionally `digits` specifies significant figures.\n * @param number\n * @param figures\n * @returns - A string representation of `number`.\n */\nexport function maybeToPrecision(number, figures) {\n    if (number < 0) {\n        number = 0 - number;\n        if (typeof figures === 'number') {\n            return `- ${number.toPrecision(figures)}`;\n        }\n        else {\n            return `- ${number.toString()}`;\n        }\n    }\n    else if (typeof figures === 'number') {\n        return number.toPrecision(figures);\n    }\n    else {\n        return number.toString();\n    }\n}\n//# sourceMappingURL=maybeToPrecision.js.map","import { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\nimport { BaseRegression, checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\nexport class PolynomialRegression extends BaseRegression {\n    /**\n     * @param x - independent or explanatory variable\n     * @param y - dependent or response variable\n     * @param degree - degree of the polynomial regression, or array of powers to be used. When degree is an array, intercept at zero is forced to false/ignored.\n     * @example `new PolynomialRegression(x, y, 2)`, in this case, you can pass the option `interceptAtZero`, if you need it.\n     * @param options\n     * @example `new PolynomialRegression(x, y, [1, 3, 5])`\n     * Each of the degrees corresponds to a column, so if you have them switched, just do:\n     * @example `new PolynomialRegression(x, y, [3, 1, 5])`\n     * @param options.interceptAtZero - force the polynomial regression so that f(0) = 0\n     */\n    constructor(x, y, degree, options = {}) {\n        super();\n        // @ts-expect-error internal use only\n        if (x === true) {\n            // @ts-expect-error internal use only\n            this.degree = y.degree;\n            // @ts-expect-error internal use only\n            this.powers = y.powers;\n            // @ts-expect-error internal use only\n            this.coefficients = y.coefficients;\n        }\n        else {\n            checkArrayLength(x, y);\n            const result = regress(x, y, degree, options);\n            this.degree = result.degree;\n            this.powers = result.powers;\n            this.coefficients = result.coefficients;\n        }\n    }\n    _predict(x) {\n        let y = 0;\n        for (let k = 0; k < this.powers.length; k++) {\n            y += this.coefficients[k] * x ** this.powers[k];\n        }\n        return y;\n    }\n    toJSON() {\n        return {\n            name: 'polynomialRegression',\n            degree: this.degree,\n            powers: this.powers,\n            coefficients: this.coefficients,\n        };\n    }\n    toString(precision) {\n        return this._toFormula(precision, false);\n    }\n    toLaTeX(precision) {\n        return this._toFormula(precision, true);\n    }\n    _toFormula(precision, isLaTeX) {\n        let sup = '^';\n        let closeSup = '';\n        let times = ' * ';\n        if (isLaTeX) {\n            sup = '^{';\n            closeSup = '}';\n            times = '';\n        }\n        let fn = '';\n        let str = '';\n        for (let k = 0; k < this.coefficients.length; k++) {\n            str = '';\n            if (this.coefficients[k] !== 0) {\n                if (this.powers[k] === 0) {\n                    str = maybeToPrecision(this.coefficients[k], precision);\n                }\n                else if (this.powers[k] === 1) {\n                    str = `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n                }\n                else {\n                    str = `${maybeToPrecision(this.coefficients[k], precision) + times}x${sup}${this.powers[k]}${closeSup}`;\n                }\n                if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n                    str = ` + ${str}`;\n                }\n                else if (k !== this.coefficients.length - 1) {\n                    str = ` ${str}`;\n                }\n            }\n            fn = str + fn;\n        }\n        if (fn.startsWith('+')) {\n            fn = fn.slice(1);\n        }\n        return `f(x) = ${fn}`;\n    }\n    static load(json) {\n        if (json.name !== 'polynomialRegression') {\n            throw new TypeError('not a polynomial regression model');\n        }\n        // @ts-expect-error internal use only\n        return new PolynomialRegression(true, json);\n    }\n}\n/**\n * Perform a polynomial regression on the given data set.\n * This is an internal function.\n * @param x - independent or explanatory variable\n * @param y - dependent or response variable\n * @param degree - degree of the polynomial regression\n * @param options.interceptAtZero - force the polynomial regression so that $f(0) = 0$\n * @param options\n */\nfunction regress(x, y, degree, options = {}) {\n    const n = x.length;\n    let { interceptAtZero = false } = options;\n    let powers = [];\n    if (Array.isArray(degree)) {\n        powers = degree;\n        interceptAtZero = false; //must be false in this case\n    }\n    else if (typeof degree === 'number') {\n        if (interceptAtZero) {\n            powers = new Array(degree);\n            for (let k = 0; k < degree; k++) {\n                powers[k] = k + 1;\n            }\n        }\n        else {\n            powers = new Array(degree + 1);\n            for (let k = 0; k <= degree; k++) {\n                powers[k] = k;\n            }\n        }\n    }\n    const nCoefficients = powers.length; //1 per power, in any case.\n    const F = new Matrix(n, nCoefficients);\n    const Y = new Matrix([y]);\n    for (let k = 0; k < nCoefficients; k++) {\n        for (let i = 0; i < n; i++) {\n            if (powers[k] === 0) {\n                F.set(i, k, 1);\n            }\n            else {\n                F.set(i, k, x[i] ** powers[k]);\n            }\n        }\n    }\n    const FT = new MatrixTransposeView(F);\n    const A = FT.mmul(F);\n    const B = FT.mmul(new MatrixTransposeView(Y));\n    return {\n        coefficients: solve(A, B).to1DArray(),\n        degree: Math.max(...powers),\n        powers,\n    };\n}\n//# sourceMappingURL=index.js.map","import { PolynomialRegression } from 'ml-regression-polynomial';\n\n/**\n * Iterative regression-based baseline correction\n * @param {Array<number>} x - Independent axis variable\n * @param {Array<number>} y - Dependent axis variable\n * @param {object} [options] - Options object\n * @param {number} [options.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regressionOptions] - Options for regressionFunction\n * @param {number} [options.tolerance = 0.001] - Convergence error tolerance\n * @return {{corrected: Array<number>, delta: number, iteration: number, baseline: Array<number>}}\n */\nexport function baselineCorrectionRegression(x, y, options = {}) {\n  let {\n    maxIterations = 100,\n    Regression = PolynomialRegression,\n    regressionOptions,\n    tolerance = 0.001,\n  } = options;\n\n  if (!regressionOptions && Regression === PolynomialRegression) {\n    regressionOptions = 3;\n  }\n\n  let baseline = y.slice();\n  let fitting = y.slice();\n  let oldFitting = y;\n  let iteration = 0;\n  let delta;\n  let regression;\n  while (iteration < maxIterations) {\n    // Calculate the fitting result\n    regression = new Regression(x, baseline, regressionOptions);\n\n    delta = 0;\n    for (let i = 0; i < baseline.length; i++) {\n      fitting[i] = regression.predict(x[i]);\n      if (baseline[i] > fitting[i]) {\n        baseline[i] = fitting[i];\n      }\n\n      delta += Math.abs((fitting[i] - oldFitting[i]) / oldFitting[i]);\n    }\n\n    // Stop criterion\n    if (delta < tolerance) {\n      break;\n    } else {\n      oldFitting = fitting.slice();\n      iteration++;\n    }\n  }\n\n  // removes baseline\n  let corrected = new Array(baseline.length);\n  for (let j = 0; j < baseline.length; j++) {\n    corrected[j] = y[j] - baseline[j];\n  }\n\n  return {\n    corrected,\n    delta,\n    iteration,\n    baseline,\n    regression,\n  };\n}\n","import sequentialFill from 'ml-array-sequential-fill';\nimport { baselineCorrectionRegression } from 'ml-baseline-correction-regression';\n\n/**\n * Iterative polynomial fitting [1]\n *\n * Implementation based on ml-baseline-correction-regression\n *\n * References:\n * [1] Gan, F.; Ruan, G.; Mo, J.\n * Baseline Correction by Improved Iterative Polynomial Fitting with Automatic Threshold.\n *  Chemometrics and Intelligent Laboratory Systems 2006, 82 (1), 59–65.\n * https://doi.org/10.1016/j.chemolab.2005.08.009.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {Object} [options.regression]\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {Object} [options.regression]\n * @param {function} [options.regression.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {Object} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function iterativePolynomialBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n\n  let output = baselineCorrectionRegression(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { xRollingAverage } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingAverageBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = { ...defaults, ...options };\n  let baseline = xRollingAverage(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","// 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';\nimport { xMean, xMaxValue, xMinValue } from 'ml-spectra-processing';\nexport function rollingBall(spectrum, options = {}) {\n    if (!isAnyArray(spectrum)) {\n        throw new Error('Spectrum must be an array');\n    }\n    if (spectrum.length === 0) {\n        throw new TypeError('Spectrum must not be empty');\n    }\n    const numberPoints = spectrum.length;\n    const maxima = new Float64Array(numberPoints);\n    const minima = new Float64Array(numberPoints);\n    const baseline = new Float64Array(numberPoints);\n    // windowM 4 percent of spectrum length\n    // windowS 8 percent of spectrum length\n    const { windowM = Math.round(numberPoints * 0.04), windowS = Math.round(numberPoints * 0.08), } = options;\n    // fi(1) in original paper\n    for (let i = 0; i < spectrum.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, spectrum.length);\n        minima[i] = xMinValue(spectrum, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    // fi in original paper\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, minima.length);\n        maxima[i] = xMaxValue(minima, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowS);\n        const windowRight = Math.min(i + windowS + 1, maxima.length);\n        baseline[i] = xMean(maxima.subarray(windowLeft, windowRight));\n    }\n    return baseline;\n}\n//# sourceMappingURL=rollingBall.js.map","import { rollingBall } from 'ml-rolling-ball-baseline';\n\n/**\n * Rolling ball baseline correction algorithm.\n * From the abstract of (1):\n * \"This algorithm behaves equivalently to traditional polynomial backgrounds in simple spectra,\n * [...] and is considerably more robust for multiple overlapping peaks, rapidly varying background [...]\n *\n * The baseline is the trace one gets by rolling a ball below a spectrum. Algorithm has three steps:\n * Finding the minima in each window, find maxima among minima and then smooth over them by averaging.\n *\n * Algorithm described in (1), but in the implementation here the window width does not change.\n *\n * Reference:\n * (1) Kneen, M. A.; Annegarn, H. J.\n *     Algorithm for Fitting XRF, SEM and PIXE X-Ray Spectra Backgrounds.\n *     Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms 1996, 109–110, 209–213.\n *     https://doi.org/10.1016/0168-583X(95)00908-6.\n * (2) Kristian Hovde Liland, Bjørn-Helge Mevik, Roberto Canteri: baseline.\n *     https://cran.r-project.org/web/packages/baseline/index.html\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {Number} [options.windowM] - width of local window for minimization/maximization, defaults to 4% of the spectrum length\n * @param {Number} [options.windowS] - width of local window for smoothing, defaults to 8% of the specturm length\n * @returns {BaselineOutput}\n */\nexport function rollingBallBaseline(ys, options = {}) {\n  const baseline = rollingBall(ys, options);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","import { xRollingMedian } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingMedianBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = { ...defaults, ...options };\n  let baseline = xRollingMedian(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","//@ts-expect-error no type definition for baselines\nimport { airPLSBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function airPLSBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=airPLSBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { iterativePolynomialBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function iterativePolynomialBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=iterativePolynomialBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingAverageBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingAverageBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingAverageBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingBallBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingBallBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingBallBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingMedianBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingMedianBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingMedianBaseline.js.map","// 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 * Apply Savitzky Golay algorithm\n * @param [ys] Array of y values\n * @param [xs] Array of X or deltaX\n * @return  Array containing the new ys (same length)\n */\nexport function sgg(ys, xs, options = {}) {\n    const { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (typeof xs === 'undefined') {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const ans = new Float64Array(np);\n    const weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = xs ** derivative;\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        const wg1 = weights[half - i - 1];\n        const wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    const wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return (hs / count) ** derivative;\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else if (k === 0 && s === 0) {\n        Grampoly = 1;\n    }\n    else {\n        Grampoly = 0;\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * @private\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\n */\nfunction fullWeights(m, n, s) {\n    const weights = new Array(m);\n    const np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the first derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function firstDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 1 }) } };\n}\n//# sourceMappingURL=firstDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the second derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function secondDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 2 }) } };\n}\n//# sourceMappingURL=secondDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the third derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function thirdDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 3 }) } };\n}\n//# sourceMappingURL=thirdDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Apply the Savitzky Golay Generalized Filter\n * @param data\n * @param options\n */\nexport function savitzkyGolay(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, options) } };\n}\n//# sourceMappingURL=savitzkyGolay.js.map","import { xyEnsureGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function ensureGrowing(data) {\n    return { data: xyEnsureGrowingX(data) };\n}\n//# sourceMappingURL=ensureGrowing.js.map","import { xyGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function reverseIfNeeded(data) {\n    return { data: xyGrowingX(data) };\n}\n//# sourceMappingURL=reverseIfNeeded.js.map","import { xyEquallySpaced } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function equallySpaced(data, options = {}) {\n    return { data: xyEquallySpaced(data, options) };\n}\n//# sourceMappingURL=equallySpaced.js.map","import { xyFilterX } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function filterX(data, options = {}) {\n    return {\n        data: xyFilterX(data, options),\n    };\n}\n//# sourceMappingURL=filterX.js.map","import { xAdd, xMaxValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMaxX(data, options = {}) {\n    const { max = 1 } = options;\n    const existingMax = xMaxValue(data.x);\n    if (existingMax === max) {\n        return { data };\n    }\n    return {\n        data: {\n            x: xAdd(data.x, max - existingMax),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=setMaxX.js.map","import { xAdd, xMinValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMinX(data, options = {}) {\n    const { min = 0 } = options;\n    const existingMin = xMinValue(data.x);\n    if (existingMin === min) {\n        return { data };\n    }\n    return {\n        data: {\n            x: xAdd(data.x, min - existingMin),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=setMinX.js.map","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 { 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","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 { 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","/**\n * Correction of the x and y coordinates using a quadratic optimizations with the peak and its 3 closest neighbors to determine the true x,y values of the peak.\n * This process is done in place and is very fast.\n * @param data\n * @param peaks\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else if (y[currentIndex + 1] >= y[currentIndex] &&\n            y[currentIndex + 1] >= y[currentIndex + 2]) {\n            currentIndex++;\n        }\n        else if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n            y[currentIndex - 2] >= y[currentIndex - 1]) {\n            currentIndex -= 2;\n        }\n        else if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n            y[currentIndex + 2] >= y[currentIndex + 3]) {\n            currentIndex += 2;\n        }\n        // interpolation to a sin() function\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            const alpha = 20 * Math.log10(y[currentIndex - 1]);\n            const beta = 20 * Math.log10(y[currentIndex]);\n            const gamma = 20 * Math.log10(y[currentIndex + 1]);\n            const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            const xCurrent = x[currentIndex];\n            const xPrevious = x[currentIndex - 1];\n            peak.x = xCurrent + (xCurrent - xPrevious) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotonic, xMinMaxValues, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { 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","import { gsd } from 'ml-gsd';\nimport { xAdd, xFindClosestIndex, xMean } from 'ml-spectra-processing';\n/**\n * Filter that allows to calibrateX the x axis based on the presence of peaks\n * @param data\n * @param options\n */\nexport function calibrateX(data, options = {}) {\n    const { targetX = 0, nbPeaks = 1, from = data.x[0], to = data.x.at(-1), gsd: gsdOptions = {\n        minMaxRatio: 0.1,\n        realTopDetection: true,\n        smoothY: true,\n        sgOptions: {\n            windowSize: 7,\n            polynomial: 3,\n        },\n    }, } = options;\n    const fromIndex = xFindClosestIndex(data.x, from);\n    const toIndex = xFindClosestIndex(data.x, to);\n    let peaks = gsd({\n        x: data.x.subarray(fromIndex, toIndex),\n        y: data.y.subarray(fromIndex, toIndex),\n    }, gsdOptions);\n    peaks.sort((a, b) => b.y - a.y);\n    peaks = peaks.slice(0, nbPeaks);\n    if (peaks.length < nbPeaks)\n        return { data };\n    const middle = xMean(peaks.map((peak) => peak.x));\n    return { data: { x: xAdd(data.x, targetX - middle), y: data.y } };\n}\n//# sourceMappingURL=calibrateX.js.map","import { xApplyFunctionStr } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function xFunction(data, options = {}) {\n    return {\n        data: {\n            x: xApplyFunctionStr(data.x, {\n                variableLabel: 'x',\n                fctString: options.function,\n            }),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=xFunction.js.map","import { xApplyFunctionStr } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function yFunction(data, options = {}) {\n    return {\n        data: {\n            x: data.x,\n            y: xApplyFunctionStr(data.y, {\n                variableLabel: 'y',\n                fctString: options.function,\n            }),\n        },\n    };\n}\n//# sourceMappingURL=yFunction.js.map","import { xAdd, xMaxValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMaxY(data, options = {}) {\n    const { max = 1 } = options;\n    const existingMax = xMaxValue(data.y);\n    if (existingMax === max) {\n        return { data };\n    }\n    return {\n        data: {\n            x: data.x,\n            y: xAdd(data.y, max - existingMax),\n        },\n    };\n}\n//# sourceMappingURL=setMaxY.js.map","import { xAdd, xMinValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMinY(data, options = {}) {\n    const { min = 0 } = options;\n    const existingMin = xMinValue(data.y);\n    if (existingMin === min) {\n        return { data };\n    }\n    return {\n        data: {\n            x: data.x,\n            y: xAdd(data.y, min - existingMin),\n        },\n    };\n}\n//# sourceMappingURL=setMinY.js.map","import { xEnsureFloat64, xyGrowingX } from 'ml-spectra-processing';\nimport * as Filters from \"./filters/filters.js\";\n/**\n * Apply filters on {x:[], y:[]}\n * @param data\n * @param filters\n * @returns\n */\nexport function filterXY(data, filters) {\n    let result = {\n        data: xyGrowingX({ x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) }),\n    };\n    const logs = [];\n    for (const filter of filters) {\n        const start = Date.now();\n        if (!filter.name) {\n            // we ignore empty filter names\n            continue;\n        }\n        const filterFct = Filters[filter.name];\n        if (!filterFct) {\n            throw new Error(`Unknown filter: ${filter.name}`);\n        }\n        // @ts-expect-error some method have options and some other ones don't have any options\n        result = filterFct(result.data, filter.options);\n        result.data = xyGrowingX(result.data);\n        logs.push({\n            name: filter.name,\n            time: Date.now() - start,\n        });\n    }\n    return { logs, data: result.data };\n}\n//# sourceMappingURL=filterXY.js.map","import { filterXY } from 'ml-signal-processing';\nimport { xIsMonotonic, xMaxValue, xMinValue } from 'ml-spectra-processing';\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n    const data = {\n        x: spectrum.variables.x.data,\n        y: spectrum.variables.y.data,\n    };\n    const newSpectrum = {\n        variables: {\n            x: {\n                data: spectrum.variables.x.data,\n                units: spectrum.variables.x.units,\n                label: spectrum.variables.x.label,\n            },\n            y: {\n                data: spectrum.variables.y.data,\n                units: spectrum.variables.y.units,\n                label: spectrum.variables.y.label,\n            },\n        },\n    };\n    if (spectrum.title)\n        newSpectrum.title = spectrum.title;\n    if (spectrum.dataType)\n        newSpectrum.dataType = spectrum.dataType;\n    if (spectrum.meta)\n        newSpectrum.meta = spectrum.meta;\n    if (spectrum.id)\n        newSpectrum.id = spectrum.id;\n    const { from = spectrum.variables.x.min, to = spectrum.variables.x.max, numberOfPoints, applyRangeSelectionFirst = false, exclusions = [], zones = [], } = options;\n    let { filters = [] } = options;\n    filters = structuredClone(filters);\n    if (numberOfPoints) {\n        if (applyRangeSelectionFirst) {\n            filters.unshift({\n                name: 'equallySpaced',\n                options: { from, to, exclusions, zones, numberOfPoints },\n            });\n        }\n        else {\n            filters.push({\n                name: 'equallySpaced',\n                options: { from, to, exclusions, zones, numberOfPoints },\n            });\n        }\n    }\n    else if (applyRangeSelectionFirst) {\n        filters.unshift({\n            name: 'filterX',\n            options: { from, to, exclusions, zones },\n        });\n    }\n    else {\n        filters.push({\n            name: 'filterX',\n            options: { from, to, exclusions, zones },\n        });\n    }\n    const { x, y } = filterXY(data, filters).data;\n    // filters change the y axis, we get rid of the units\n    // TODO we should deal correctly with this problem\n    if (filters.length > 1) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label = newSpectrum.variables.y.label?.replace(/\\s*\\[.*]/, '');\n    }\n    newSpectrum.variables.x.data = x;\n    newSpectrum.variables.x.min = xMinValue(x);\n    newSpectrum.variables.x.max = xMaxValue(x);\n    newSpectrum.variables.x.isMonotonic = xIsMonotonic(x);\n    newSpectrum.variables.y.data = y;\n    newSpectrum.variables.y.min = xMinValue(y);\n    newSpectrum.variables.y.max = xMaxValue(y);\n    newSpectrum.variables.y.isMonotonic = xIsMonotonic(y);\n    return newSpectrum;\n}\n//# sourceMappingURL=getNormalizedSpectrum.js.map","/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Qty = factory());\n})(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"t\",\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-imp\", \"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<Gal>\" : [[\"Gal\"], 1e-2, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* molar_concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"molar_concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"molar_concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\",\"Joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<electronvolt>\" : [[\"eV\", \"electronvolt\", \"electronvolts\"], 1.602176634E-19, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<arcminute>\" :[[\"arcmin\",\"arcminute\",\"arcminutes\"], Math.PI / 10800.0, \"angle\", [\"<radian>\"]],\n    \"<arcsecond>\" :[[\"arcsec\",\"arcsecond\",\"arcseconds\"], Math.PI / 648000.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppb>\" :  [[\"ppb\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-12, \"prefix_only\", [\"<1>\"]],\n    \"<ppq>\" :  [[\"ppq\"],1e-15, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.8.0\";\n\n  return Qty;\n\n}));\n","import Qty from 'js-quantities';\nexport function convertUnit(array, fromUnit, toUnit) {\n    fromUnit = normalize(fromUnit);\n    toUnit = normalize(toUnit);\n    if (fromUnit === toUnit)\n        return array;\n    const convert = Qty.swiftConverter(fromUnit, toUnit); // Configures converter\n    //@ts-expect-error convert does not allowed typed array but it works\n    return convert(array);\n}\nfunction normalize(unit) {\n    unit = unit.replaceAll('°C', 'tempC');\n    unit = unit.replaceAll('°F', 'tempF');\n    unit = unit.replaceAll(/(^|\\W)K(\\W|$)/g, '$1tempK$2');\n    return unit;\n}\n//# sourceMappingURL=convertUnit.js.map","const testRegExp = /^\\/((?:\\\\\\/|[^/])+)\\/([gimuy]{0,5})?$/;\nexport function ensureRegexp(string) {\n    if (typeof string !== 'string')\n        return string;\n    const parts = testRegExp.exec(string);\n    if (parts) {\n        try {\n            return new RegExp(parts[1], parts[2]);\n        }\n        catch {\n            return stringToRegexp(string);\n        }\n    }\n    else {\n        return stringToRegexp(string);\n    }\n}\nfunction stringToRegexp(string, flags = 'i') {\n    return new RegExp(string.replaceAll(/[$()*+.?[\\\\\\]^{|}]/g, (match) => `\\\\${match}`), flags);\n}\n//# sourceMappingURL=ensureRegexp.js.map","import { xIsMonotonic, xMaxValue, xMinValue } from 'ml-spectra-processing';\nimport { convertUnit } from './convertUnit.js';\nexport function getConvertedVariable(variable, newUnits) {\n    const data = variable.units !== undefined && variable.units !== newUnits // would be nice if convertUnit would allow typedArray\n        ? convertUnit(Array.from(variable.data), variable.units, newUnits)\n        : variable.data;\n    return {\n        units: newUnits,\n        label: variable.label.replace(`[${variable.units || ''}]`, `[${newUnits}]`),\n        data: data || [],\n        min: data ? xMinValue(data) : undefined,\n        max: data ? xMaxValue(data) : undefined,\n        isMonotonic: xIsMonotonic(data),\n    };\n}\n//# sourceMappingURL=getConvertedVariable.js.map","/* eslint-disable @typescript-eslint/no-dynamic-delete */\nimport { convertUnit } from './convertUnit.js';\nimport { ensureRegexp } from './ensureRegexp.js';\nimport { getConvertedVariable } from './getConvertedVariable.js';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param spectra\n * @param selector\n */\nexport function getXYSpectra(spectra = [], selector = {}) {\n    const selectedSpectra = [];\n    if (spectra.length === 0)\n        return selectedSpectra;\n    const { variables, units, labels, meta, index } = selector;\n    let { dataType, title, xUnits, yUnits, xVariable = 'x', yVariable = 'y', xLabel, yLabel, } = selector;\n    if (index !== undefined) {\n        return [spectra[index]];\n    }\n    if (dataType) {\n        dataType = ensureRegexp(dataType);\n    }\n    if (title) {\n        title = ensureRegexp(title);\n    }\n    if (units && !xUnits && !yUnits)\n        [yUnits, xUnits] = units.split(/\\s*vs\\s*/);\n    if (labels && !xLabel && !yLabel) {\n        [yLabel, xLabel] = labels.split(/\\s*vs\\s*/);\n    }\n    if (variables) {\n        const parts = variables.split(/\\s*vs\\s*/);\n        if (parts.length === 2) {\n            xVariable = parts[1];\n            yVariable = parts[0];\n        }\n    }\n    if (xLabel)\n        xLabel = ensureRegexp(xLabel);\n    if (yLabel)\n        yLabel = ensureRegexp(yLabel);\n    for (const spectrum of spectra) {\n        const variableNames = Object.keys(spectrum.variables);\n        if (!(variableNames.length > 1))\n            continue;\n        // we filter on general spectrum information\n        if (dataType &&\n            (!spectrum.dataType || !dataType.exec(spectrum.dataType))) {\n            continue;\n        }\n        if (title && (!spectrum.title || !title.exec(spectrum.title))) {\n            continue;\n        }\n        if (meta && typeof meta === 'object') {\n            if (!spectrum.meta)\n                continue;\n            for (const key in spectrum.meta) {\n                if (!spectrum.meta[key])\n                    continue;\n                const value = ensureRegexp(spectrum.meta[key]);\n                if (!value.exec(spectrum.meta[key]))\n                    continue;\n            }\n        }\n        const x = getPossibleVariable(spectrum.variables, {\n            units: xUnits,\n            label: xLabel,\n            variableName: xVariable,\n        });\n        const y = getPossibleVariable(spectrum.variables, {\n            units: yUnits,\n            label: yLabel,\n            variableName: yVariable,\n        });\n        if (x && y) {\n            // should we reverse the x-axis?\n            if (x.data[0] > x.data.at(-1)) {\n                x.data = x.data.toReversed();\n                y.data = y.data.toReversed();\n            }\n            selectedSpectra.push({\n                title: spectrum.title,\n                dataType: spectrum.dataType,\n                meta: spectrum.meta,\n                variables: { x, y },\n                id: spectrum.id,\n            });\n        }\n    }\n    return selectedSpectra;\n}\nfunction getPossibleVariable(variables, selector = {}) {\n    const { units, label, variableName } = selector;\n    const possible = { ...variables };\n    let key;\n    if (units !== undefined) {\n        for (key in possible) {\n            const variable = variables[key];\n            let convertibleUnits = true;\n            try {\n                convertUnit(1, variable?.units || '', units);\n            }\n            catch {\n                convertibleUnits = false;\n            }\n            if (convertibleUnits && variable) {\n                possible[key] = getConvertedVariable(variable, units);\n            }\n            else {\n                delete possible[key];\n            }\n        }\n    }\n    if (label !== undefined) {\n        const regexpLabel = ensureRegexp(label);\n        for (key in possible) {\n            if (!regexpLabel.exec(variables[key]?.label ?? '')) {\n                delete possible[key];\n            }\n        }\n    }\n    if (variableName !== undefined) {\n        if (possible[variableName])\n            return possible[variableName];\n        const upper = variableName.toUpperCase();\n        if (Object.hasOwn(possible, upper)) {\n            return possible[upper];\n        }\n        const lower = variableName.toLowerCase();\n        if (Object.hasOwn(possible, lower)) {\n            return possible[lower];\n        }\n    }\n    const possibleFiltered = Object.values(possible).filter((val) => val !== undefined);\n    if (possibleFiltered.length > 0) {\n        return possibleFiltered[0];\n    }\n}\n//# sourceMappingURL=getXYSpectra.js.map","import { getXYSpectra } from './getXYSpectra.js';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param spectra\n * @param selector\n */\nexport function getXYSpectrum(spectra = [], selector = {}) {\n    const selectedSpectra = getXYSpectra(spectra, selector);\n    if (selectedSpectra.length === 0)\n        return undefined;\n    return selectedSpectra[0];\n}\n//# sourceMappingURL=getXYSpectrum.js.map","import { isAnyArray } from 'is-any-array';\nimport { stringify, xIsMonotonic, xMaxValue, xMinValue, } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum.js';\nimport { getXYSpectra } from './util/getXYSpectra.js';\nimport { getXYSpectrum } from './util/getXYSpectrum.js';\n/**\n * Class allowing to store and manipulate an analysis.\n * An analysis may contain one or more spectra that can be selected\n * based on their units\n */\nexport class Analysis {\n    id;\n    label;\n    spectrumCallback;\n    spectra;\n    cache;\n    constructor(options = {}) {\n        this.id = options.id || Math.random().toString(36).slice(2, 10);\n        this.label = options.label || this.id;\n        this.spectrumCallback = options.spectrumCallback;\n        this.spectra = [];\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    clone({ filter }) {\n        const { ids } = filter;\n        const analysis = new Analysis();\n        analysis.id = this.id;\n        analysis.label = this.label;\n        analysis.spectrumCallback = this.spectrumCallback;\n        analysis.spectra = this.spectra.filter((spectrum) => {\n            //@ts-expect-error spectrum.id is not expected to be undefined at this level\n            return !ids || ids.includes(spectrum.id);\n        });\n        return analysis;\n    }\n    toJSON() {\n        // TODO this is likely not the most optimized way to remove typedArray\n        // if data are small seems still reasonable\n        return {\n            id: this.id,\n            label: this.label,\n            spectra: JSON.parse(stringify(this.spectra)),\n        };\n    }\n    static fromJSON(json) {\n        const analysis = new Analysis();\n        analysis.id = json.id;\n        analysis.label = json.label;\n        analysis.spectra = json.spectra;\n        return analysis;\n    }\n    /**\n     * Add a spectrum in the internal spectra variable\n     * @param variables\n     * @param options\n     */\n    pushSpectrum(variables, options = {}) {\n        this.spectra.push(standardizeData(variables, options, {\n            spectrumCallback: this.spectrumCallback,\n        }));\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    /**\n     * Retrieve a MeasurementXY based on x/y units\n     * @param selector\n     */\n    getXYSpectrum(selector = {}) {\n        const id = JSON.stringify(selector);\n        if (!this.cache.spectrum[id]) {\n            this.cache.spectrum[id] = getXYSpectrum(this.spectra, selector);\n        }\n        return this.cache.spectrum[id];\n    }\n    /**\n     * Retrieve spectra matching selector\n     * @param selector\n     */\n    getXYSpectra(selector = {}) {\n        const id = JSON.stringify(selector);\n        if (!this.cache.spectra[id]) {\n            this.cache.spectra[id] = getXYSpectra(this.spectra, selector);\n        }\n        return this.cache.spectra[id];\n    }\n    /**\n     * Retrieve a xy object\n     * @param selector.units - Units separated by vs like for example \"g vs °C\"\n     * @param selector.xUnits - if undefined takes the first variable\n     * @param selector.yUnits - if undefined takes the second variable\n     * @param selector\n     */\n    getXY(selector = {}) {\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return {\n            x: spectrum.variables.x.data,\n            y: spectrum.variables.y.data,\n        };\n    }\n    /**\n     * Return the data object for specific x/y units with possibly some\n     * normalization options\n     * @param options.selector.xUnits - // if undefined takes the first variable\n     * @param options.selector.yUnits - // if undefined takes the second variable\n     * @param options\n     */\n    getNormalizedSpectrum(options = {}) {\n        const { normalization, selector } = options;\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return getNormalizedSpectrum(spectrum, normalization);\n    }\n    /**\n     * @param options\n     */\n    getNormalizedSpectra(options = {}) {\n        const { normalization, selector } = options;\n        const spectra = this.getXYSpectra(selector);\n        if (spectra.length === 0)\n            return [];\n        const normalizedSpectra = [];\n        for (const spectrum of spectra) {\n            normalizedSpectra.push(getNormalizedSpectrum(spectrum, normalization));\n        }\n        return normalizedSpectra;\n    }\n    /**\n     * Returns the first spectrum. This method could be improved in the future\n     * @returns\n     */\n    getSpectrum() {\n        return this.spectra[0];\n    }\n    /**\n     * Returns the xLabel\n     * @param selector.xUnits - // if undefined takes the first variable\n     * @param selector.yUnits - // if undefined takes the second variable\n     * @param selector\n     */\n    getXLabel(selector) {\n        return this.getXYSpectrum(selector)?.variables.x.label;\n    }\n    /**\n     * Returns the yLabel\n     * @param selector.xUnits - // if undefined takes the first variable\n     * @param selector.yUnits - // if undefined takes the second variable\n     * @param selector\n     */\n    getYLabel(selector) {\n        return this.getXYSpectrum(selector)?.variables.y.label;\n    }\n}\n/**\n * Internal function that ensure the order of x / y array\n * @param variables\n * @param options\n * @param analysisOptions\n */\nfunction standardizeData(variables, options, analysisOptions) {\n    const { meta = {}, dataType = '', title = '', id = Math.random().toString(36).replace('0.', ''), } = options;\n    const { spectrumCallback } = analysisOptions;\n    if (spectrumCallback) {\n        spectrumCallback(variables);\n    }\n    const xVariable = variables.x;\n    const yVariable = variables.y;\n    if (!xVariable || !yVariable) {\n        throw new Error('A spectrum must contain at least x and y variables');\n    }\n    if (!isAnyArray(xVariable.data) || !isAnyArray(yVariable.data)) {\n        throw new Error('x and y variables must contain an array data');\n    }\n    const x = xVariable.data;\n    const reverse = x && x.length > 1 && x[0] > x.at(-1);\n    for (const [key, variable] of Object.entries(variables)) {\n        if (reverse)\n            variable.data = variable.data.toReversed();\n        variable.label = variable.label || key;\n        if (variable.label.match(/^.*[([](?<units>.*)[)\\]].*$/)) {\n            const units = variable.label.replace(/^.*[([](?<units>.*)[)\\]].*$/, '$<units>');\n            if (!variable.units || variable.units === units) {\n                variable.units = units;\n                variable.label = variable.label.replace(/[([].*[)\\]]/, '').trim();\n            }\n        }\n        variable.min = xMinValue(variable.data);\n        variable.max = xMaxValue(variable.data);\n        variable.isMonotonic = xIsMonotonic(variable.data);\n    }\n    return {\n        variables,\n        title,\n        dataType,\n        meta,\n        id,\n    };\n}\n//# sourceMappingURL=Analysis.js.map","export function appendDistinctParameter(values, key, value) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            values: [],\n            count: 0,\n        };\n    }\n    if (!values[key].values.includes(value)) {\n        values[key].values.push(value);\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=appendDistinctParameter.js.map","export function appendDistinctValue(values, key) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            count: 0,\n        };\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=appendDistinctValue.js.map","import { Analysis } from './Analysis.js';\nimport { appendDistinctParameter } from './util/appendDistinctParameter.js';\nimport { appendDistinctValue } from './util/appendDistinctValue.js';\nexport class AnalysesManager {\n    analyses;\n    constructor() {\n        this.analyses = [];\n    }\n    static fromJSON(json) {\n        const analysesManager = new AnalysesManager();\n        for (const analysis of json.analyses) {\n            analysesManager.analyses.push(Analysis.fromJSON(analysis));\n        }\n        return analysesManager;\n    }\n    addAnalysis(analysis) {\n        const index = this.getAnalysisIndex(analysis.id);\n        if (index === undefined) {\n            this.analyses.push(analysis);\n        }\n        else {\n            this.analyses[index] = analysis;\n        }\n    }\n    /**\n     *\n     * @param options\n     * @returns\n     */\n    getAnalyses(options = {}) {\n        const { ids } = options;\n        const analyses = [];\n        const processedAnalysisIds = new Set();\n        for (const analysis of this.analyses) {\n            if (!ids || ids.includes(analysis.id)) {\n                analyses.push(analysis);\n                processedAnalysisIds.add(analysis.id);\n                continue;\n            }\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id &&\n                    ids.includes(spectrum.id) &&\n                    !processedAnalysisIds.has(analysis.id)) {\n                    analyses.push(analysis.clone({ filter: { ids } }));\n                    processedAnalysisIds.add(analysis.id);\n                }\n            }\n        }\n        return analyses;\n    }\n    getSpectra() {\n        const spectra = [];\n        for (const analysis of this.analyses) {\n            spectra.push(...analysis.spectra);\n        }\n        return spectra;\n    }\n    getAnalysisBySpectrumId(id) {\n        for (const analysis of this.analyses) {\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id === id)\n                    return analysis;\n            }\n        }\n        return undefined;\n    }\n    getSpectrumById(id) {\n        for (const analysis of this.analyses) {\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id === id)\n                    return spectrum;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Get an array of objects (key + count) of all the titles\n     */\n    getDistinctTitles() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.title) {\n                appendDistinctValue(values, spectrum.title);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the units\n     */\n    getDistinctUnits() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    if (variable.units) {\n                        appendDistinctValue(values, variable.units);\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + unit + label + count) of all the units\n     */\n    getDistinctLabelUnits() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    const { label, units } = normalizeLabelUnits(variable.label, variable.units);\n                    const key = label + (units ? ` (${units})` : '');\n                    if (key) {\n                        if (!values[key]) {\n                            values[key] = { key, units, label, count: 0 };\n                        }\n                        values[key].count++;\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the labels\n     */\n    getDistinctLabels() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    appendDistinctValue(values, variable.label.replace(/\\s+[([].*$/, ''));\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the dataTypes\n     */\n    getDistinctDataTypes() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.dataType) {\n                appendDistinctValue(values, spectrum.dataType);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the meta\n     */\n    getDistinctMeta() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.meta) {\n                for (const key in spectrum.meta) {\n                    appendDistinctParameter(values, key, spectrum.meta[key]);\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    removeAllAnalyses() {\n        this.analyses.splice(0);\n    }\n    /**\n     * Remove the analysis from the AnalysesManager for the specified id\n     * @param id\n     */\n    removeAnalysis(id) {\n        const index = this.getAnalysisIndex(id);\n        if (index === undefined)\n            return undefined;\n        return this.analyses.splice(index, 1);\n    }\n    /**\n     * Returns the index of the analysis in the analyses array\n     * @param id\n     */\n    getAnalysisIndex(id) {\n        if (!id)\n            return undefined;\n        for (let i = 0; i < this.analyses.length; i++) {\n            const analysis = this.analyses[i];\n            if (analysis.id === id)\n                return i;\n        }\n        return undefined;\n    }\n    /**\n     * Checks if the ID of an analysis exists in the AnalysesManager\n     * @param id\n     */\n    includes(id) {\n        const index = this.getAnalysisIndex(id);\n        return index === undefined ? false : !Number.isNaN(index);\n    }\n}\nfunction normalizeLabelUnits(originalLabel, originalUnits) {\n    if (!originalLabel) {\n        return { units: '', label: '' };\n    }\n    if (originalLabel.search(/[([]]/) >= 0) {\n        const [units, label] = originalLabel.split(/\\s*[([]/);\n        return { units: originalUnits || units, label };\n    }\n    return { label: originalLabel, units: originalUnits };\n}\n//# sourceMappingURL=AnalysesManager.js.map","/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        if (options.encoding) {\n            return new TextDecoder(options.encoding).decode(blob);\n        }\n        else {\n            return decodeText(blob);\n        }\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction decodeText(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return new TextDecoder('utf-16be').decode(uint8);\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return new TextDecoder('utf-16le').decode(uint8);\n        }\n    }\n    try {\n        return new TextDecoder('utf-8', { fatal: true }).decode(uint8);\n    }\n    catch {\n        return new TextDecoder('latin1').decode(uint8);\n    }\n}\n//# sourceMappingURL=index.js.map","export function parseString(value) {\n    if (value.length === 4 || value.length === 5) {\n        const lowercase = value.toLowerCase();\n        if (lowercase === 'true')\n            return true;\n        if (lowercase === 'false')\n            return false;\n    }\n    const number = Number(value);\n    if (number === 0 && !value.includes('0')) {\n        return value;\n    }\n    if (!Number.isNaN(number))\n        return number;\n    return value;\n}\n//# sourceMappingURL=parseString.js.map","export const gyromagneticRatioMHzT = {\n    '1H': 42.577478615342585,\n    '2H': 6.5359028540009305,\n    '3H': 45.41483815473964,\n    '3He': -32.43604456417949,\n    '6Li': 6.266099405837534,\n    '7Li': 16.548177299618295,\n    '9Be': -5.983379963834242,\n    '10B': 4.57473388220653,\n    '11B': 13.66160796005943,\n    '13C': 10.707746367473973,\n    '14N': 3.076272817251739,\n    '15N': -4.3152552187859134,\n    '17O': -5.7734832203316975,\n    '19F': 40.06924371705693,\n    '21Ne': -3.362579959801532,\n    '22Na': 4.436349259342206,\n    '23Na': 11.268733657034753,\n    '25Mg': -2.607933066661972,\n    '26Al': 4.273225764239245,\n    '27Al': 11.100630067688776,\n    '29Si': -8.461871234008282,\n    '31P': 17.241162495263175,\n    '33S': 3.2688220630834754,\n    '35Cl': 4.175656570906633,\n    '36Cl': 4.897135020041924,\n    '37Cl': 3.4759025124743057,\n    '39Ar': -3.462835209795831,\n    '39K': 1.9893443809332112,\n    '40K': -2.4734743333970806,\n    '41K': 1.091921234883595,\n    '41Ca': -3.4724832349401047,\n    '43Ca': -2.8689916395725414,\n    '45Sc': 10.353659488911559,\n    '47Hi': -2.403068251036403,\n    '49Hi': -2.403730327705445,\n    '50V': 4.248579379465121,\n    '51V': 11.208261084083814,\n    '53Cr': -2.4103147963328766,\n    '53Mn': 10.961289063460638,\n    '55Mn': 10.570707386401027,\n    '57Fe': 1.3818237005731187,\n    '59Co': 10.050933643526891,\n    '60Co': 5.7916463354780205,\n    '61Ni': -3.809518009468367,\n    '63Ni': 7.561612483277437,\n    '63Cu': 11.311420179117773,\n    '65Cu': 12.116874196993763,\n    '67Zn': 2.6674502745948656,\n    '69Ga': 10.23978520568125,\n    '71Ga': 13.010902748192017,\n    '73Ge': -1.4876591727852992,\n    '75As': 7.3090505609529135,\n    '77Se': 8.134221686648205,\n    '79Se': -2.21708568778123,\n    '79Br': 10.695006473323717,\n    '81Br': 11.528409999706447,\n    '81Kr': -1.9753405882294455,\n    '83Kr': -1.6443288722876133,\n    '85Kr': -1.703226109304539,\n    '85Rb': 4.125530397832004,\n    '87Rb': 13.981309683545954,\n    '87Sr': -1.851714225407608,\n    '89Y': -2.0931336103407774,\n    '91Zr': -3.970456361178983,\n    '91Nb': 11.032433266932335,\n    '92Nb': 5.58627189504799,\n    '93Nb': 10.439564904668199,\n    '95Mo': -2.784380854729418,\n    '97Mo': -2.842922370728985,\n    '97Hc': 9.858553909649345,\n    '99Hc': 9.618018745530753,\n    '99Ru': -1.9544329039438861,\n    '101Ru': -2.1892087754004836,\n    '103Rh': -1.3459975123963002,\n    '105Pd': -1.9574819412355304,\n    '107Ag': -1.730633566737207,\n    '109Ag': 1.9896492846623755,\n    '111Cd': -9.05564075618306,\n    '113Cd': -9.471834346492482,\n    '113In': 9.351736155393834,\n    '115In': 9.371724288750167,\n    '115Sn': -13.985934056771613,\n    '117Sn': -15.237563864991529,\n    '119Sn': -15.944940516652968,\n    '121Sn': 3.541456814244654,\n    '121Sb': 10.238667225340981,\n    '123Sb': 5.544238738098897,\n    '125Sb': 5.727834340731468,\n    '123He': -11.217408195958745,\n    '125He': -13.522480388441707,\n    '127I': 8.563831041040862,\n    '129I': 5.6984329097048985,\n    '129Xe': -11.860160502223787,\n    '131Xe': 3.5157686750625525,\n    '133Cs': 5.614148807428737,\n    '134Cs': 5.69655448494487,\n    '135Cs': 5.941920316280481,\n    '137Cs': 6.179527436650749,\n    '133Ba': 11.767759427100511,\n    '135Ba': 4.258996923544905,\n    '137Ba': 4.7641207681939495,\n    '137La': 5.871574670194692,\n    '138La': 5.653524946166542,\n    '139La': 6.052556812291568,\n    '141Pr': 13.00719308615385,\n    '143Nd': -2.319446225429283,\n    '145Nd': -1.4286917595132482,\n    '145Pm': 11.586341708247685,\n    '147Pm': 5.618940151744178,\n    '147Sm': -1.7619079778143567,\n    '149Sm': -1.454172999736274,\n    '151Sm': -1.099177943637708,\n    '150Eu': 4.119249381011216,\n    '151Eu': 10.560340659609437,\n    '152Eu': -4.917588978540037,\n    '153Eu': 4.66319763384053,\n    '154Eu': -5.081728819406879,\n    '155Eu': 4.622340534132499,\n    '155Gd': -1.3166759371083225,\n    '157Gd': -1.7267714528344573,\n    '157Hb': 10.315909503395963,\n    '158Hb': 4.4541353102101295,\n    '159Hb': 10.209193198188421,\n    '161Hy': -1.4604888626975372,\n    '163Hy': 2.04590402269321,\n    '163Ho': 9.190669550527298,\n    '165Ho': 9.059996523742551,\n    '166Ho': 3.941969641339908,\n    '167Er': -1.2246240493510665,\n    '169Hm': -3.5216380718489675,\n    '171Hm': -3.506392885390747,\n    '171Yb': 7.505205293382021,\n    '173Yb': -2.067247283734719,\n    '173Lu': 4.950329831362216,\n    '174Lu': 15.107979780096652,\n    '175Lu': 4.847315928580239,\n    '176Lu': 3.4410563719983727,\n    '177Hf': 1.7227060697789323,\n    '179Hf': -1.0822388475730185,\n    '179Ha': 4.978642320498912,\n    '180Ha': 4.077240422770786,\n    '181Ha': 5.15069513909883,\n    '183W': 1.7896324383305209,\n    '185Re': 9.683742438261751,\n    '187Re': 9.784360668886006,\n    '187Os': 0.9820949116385737,\n    '189Os': 3.3417448716419638,\n    '191Ir': 0.7632756686749131,\n    '193Ir': 0.8283217975633214,\n    '193Pt': 9.162357061390605,\n    '195Pt': 9.258401736077394,\n    '197Au': 0.7378670245778789,\n    '199Hg': 7.68204945629738,\n    '201Hg': -2.8356046812290385,\n    '203Hl': 24.63622131648455,\n    '204Hl': 0.3430166953099643,\n    '205Hl': 24.88014429981608,\n    '205Pb': 2.162987054692344,\n    '207Pb': 9.00380712222511,\n    '207Bi': 6.899124436187426,\n    '208Bi': 6.970099248698476,\n    '209Bi': 6.931478109670983,\n    '209Po': 10.366726791590036,\n    '227Ac': 6.1997091596763925,\n    '229Hh': 1.402557154156299,\n    '231Pa': 10.11264035061969,\n    '233U': -1.7989320020700355,\n    '235U': -0.827595836303406,\n    '237Np': 9.634957841595446,\n    '239Pu': 3.079527664560569,\n    '241Pu': -2.067247283734719,\n    '241Am': 4.878459666630606,\n    '243Am': 4.634536683299075,\n    '243Cm': 1.2196149166576515,\n    '245Cm': 1.0889418898729026,\n    '247Cm': 0.6098074583288254,\n};\n//# sourceMappingURL=gyromagneticRatioMHzT.js.map","import { gyromagneticRatio } from '.';\n/**\n * Attempts to resolve a nucleus string to a canonical gyromagnetic nucleus symbol.\n * @param nucleus - The name or symbol of the nucleus (e.g., '1H', 'proton').\n * @returns The canonical nucleus symbol if found, otherwise null.\n */\nexport function getGyromagneticNucleus(nucleus) {\n    nucleus = nucleus.toLowerCase();\n    if (nucleus === 'proton')\n        return '1H';\n    for (const key in gyromagneticRatio) {\n        if (key.toLowerCase() === nucleus)\n            return key;\n    }\n    if (nucleus in gyromagneticRatio) {\n        return nucleus;\n    }\n    // we try to use only the numbers\n    const nucleusNumber = nucleus.replaceAll(/[^0-9]/g, '');\n    if (!nucleusNumber)\n        return null;\n    const filteredNuclei = [];\n    for (const key in gyromagneticRatio) {\n        if (key.replaceAll(/[^0-9]/g, '') === nucleusNumber) {\n            filteredNuclei.push(key);\n        }\n    }\n    if (filteredNuclei.length === 1) {\n        return filteredNuclei[0];\n    }\n    return null;\n}\n//# sourceMappingURL=getGyromagneticNucleus.js.map","import { getGyromagneticNucleus, gyromagneticRatio } from '.';\n/**\n * Returns the gyromagnetic ratio for a given nucleus string.\n * @param nucleus - The name or symbol of the nucleus (e.g., '1H', 'proton').\n * @returns The gyromagnetic ratio for the nucleus, or null if not found.\n */\nexport function getGyromagneticRatio(nucleus) {\n    const realNucleus = getGyromagneticNucleus(nucleus);\n    if (realNucleus) {\n        return gyromagneticRatio[realNucleus];\n    }\n    return null;\n}\n//# sourceMappingURL=getGyromagneticRatio.js.map","import { gyromagneticRatioMHzT } from './gyromagneticRatioMHzT';\nexport const gyromagneticRatio = Object.fromEntries(Object.entries(gyromagneticRatioMHzT).map(([key, value]) => [\n    key,\n    value * 2 * Math.PI * 1e6,\n]));\nexport * from './gyromagneticRatioMHzT';\nexport * from './getGyromagneticNucleus';\nexport * from './getGyromagneticRatio';\n//# sourceMappingURL=index.js.map","// 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","(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({keepHydrogens:!0}),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","import { convert } from 'jcampconverter';\nimport { Analysis } from '../Analysis.js';\n/**\n * Creates a new Analysis from a JCAMP string.\n * @param jcamp - String containing the JCAMP data\n * @param options - Options for the analysis\n * @returns New Analysis instance with the parsed data\n */\nexport function fromJcamp(jcamp, options = {}) {\n    const analysis = new Analysis(options);\n    addJcamp(analysis, jcamp);\n    return analysis;\n}\nfunction addJcamp(analysis, jcamp) {\n    const converted = convert(jcamp, {\n        keepRecordsRegExp: /.*/,\n    });\n    for (const entry of converted.flatten) {\n        if (!entry.spectra?.[0])\n            continue;\n        const currentSpectrum = entry.spectra[0];\n        // we ensure variables\n        if (!currentSpectrum.variables) {\n            const variables = {};\n            currentSpectrum.variables = variables;\n            variables.x = {\n                label: currentSpectrum.xUnits,\n                symbol: 'X',\n                data: currentSpectrum.data.x || currentSpectrum.data.X,\n            };\n            variables.y = {\n                label: currentSpectrum.yUnits,\n                symbol: 'Y',\n                data: currentSpectrum.data.y || currentSpectrum.data.Y,\n            };\n        }\n        else {\n            for (const key in currentSpectrum.variables) {\n                const variable = currentSpectrum.variables[key];\n                if (variable.label)\n                    continue;\n                variable.label = variable.name || variable.symbol || key;\n                if (variable.units && !variable.label.includes(variable.units)) {\n                    // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n                    variable.label += ` [${variable.units}]`;\n                }\n            }\n        }\n        analysis.pushSpectrum(currentSpectrum.variables, {\n            dataType: entry.dataType,\n            title: entry.title,\n            meta: entry.meta,\n        });\n    }\n}\n//# sourceMappingURL=fromJcamp.js.map","export const addInfoData = (data, options = {}) => {\n    const { keys = Object.keys(data), prefix = '##$' } = options;\n    let header = '';\n    for (const key of keys) {\n        header +=\n            typeof data[key] === 'object'\n                ? `${prefix}${key}=${JSON.stringify(data[key])}\\n`\n                : `${prefix}${key}=${data[key]}\\n`;\n    }\n    return header;\n};\n//# sourceMappingURL=addInfoData.js.map","// 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';\nexport function checkMatrix(data) {\n    if (!isAnyArray(data) || !isAnyArray(data[0])) {\n        throw new Error(`2D data should be a matrix`);\n    }\n}\n//# sourceMappingURL=checkMatrix.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkNumberOrArray(data) {\n    if (!isAnyArray(data) || isAnyArray(data[0])) {\n        throw new Error(`x and y data should be an array of numbers`);\n    }\n}\n//# sourceMappingURL=checkNumberOrArray.js.map","import { isAnyArray } from 'is-any-array';\nimport { matrixMinMaxZ, xMinMaxValues, } from 'ml-spectra-processing';\nimport { checkMatrix } from './checkMatrix';\nimport { checkNumberOrArray } from './checkNumberOrArray';\nexport function getExtremeValues(data) {\n    if (isAnyArray(data[0])) {\n        checkMatrix(data);\n        const firstRow = data[0];\n        return {\n            firstLast: {\n                first: firstRow[0],\n                last: data[data.length - 1][data[0].length - 1],\n            },\n            minMax: matrixMinMaxZ(data),\n        };\n    }\n    checkNumberOrArray(data);\n    return {\n        firstLast: {\n            first: data[0],\n            last: data[data.length - 1],\n        },\n        minMax: xMinMaxValues(data),\n    };\n}\n//# sourceMappingURL=getExtremeValues.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getExtremeValues } from './utils/getExtremeValues';\n/**\n * Parse from a xyxy data array\n * @param variables - Variables to convert to jcamp\n * @param [options={}] - options that allows to add meta data in the jcamp\n * @return JCAMP-DX text file corresponding to the variables\n */\nexport default function creatorNtuples(variables, options) {\n    const { meta = {}, info = {} } = options;\n    const { title = '', owner = '', origin = '', dataType = '', ...resInfo } = info;\n    const symbol = [];\n    const varName = [];\n    const varType = [];\n    const varDim = [];\n    const units = [];\n    const first = [];\n    const last = [];\n    const min = [];\n    const max = [];\n    const keys = Object.keys(variables);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const variable = variables[key];\n        if (!variable)\n            continue;\n        const name = variable?.label.replace(/ *\\[.*/, '');\n        const unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        symbol.push(variable.symbol || key);\n        varName.push(name || key);\n        varDim.push(variable.data.length);\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        if (variable.isDependent !== undefined) {\n            varType.push(variable.isDependent ? 'DEPENDENT' : 'INDEPENDENT');\n        }\n        else {\n            varType.push(variable.isDependent !== undefined\n                ? !variable.isDependent\n                : i === 0\n                    ? 'INDEPENDENT'\n                    : 'DEPENDENT');\n        }\n        units.push(variable.units || unit || '');\n    }\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##DATA CLASS= NTUPLES\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##FIRST=     ${first.join()}\n##LAST=      ${last.join()}\n##MIN=       ${min.join()}\n##MAX=       ${max.join()}\n##PAGE= N=1\\n`;\n    header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n    for (let i = 0; i < variables.x.data.length; i++) {\n        const point = [];\n        for (const key of keys) {\n            const variable = variables[key];\n            if (!variable)\n                continue;\n            point.push(variable.data[i]);\n        }\n        header += `${point.join('\\t')}\\n`;\n    }\n    header += `##END NTUPLES= ${dataType}\\n`;\n    header += '##END=\\n##END=';\n    return header;\n}\n//# sourceMappingURL=creatorNtuples.js.map","export function getFactorNumber(minMax, maxValue = 2 ** 31 - 1) {\n    let factor;\n    if (minMax.min < 0) {\n        if (minMax.max > 0) {\n            factor = Math.max(-minMax.min, minMax.max) / maxValue;\n        }\n        else {\n            factor = -minMax.min / maxValue;\n        }\n    }\n    else {\n        factor = minMax.max / maxValue;\n    }\n    return factor;\n}\n//# sourceMappingURL=getFactorNumber.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nimport { getFactorNumber } from './getFactorNumber';\nexport function getBestFactor(array, options = {}) {\n    const { maxValue, factor, minMax } = options;\n    if (factor !== undefined) {\n        return factor;\n    }\n    // is there non integer number ?\n    let onlyInteger = true;\n    for (const y of array) {\n        if (Math.round(y) !== y) {\n            onlyInteger = false;\n            break;\n        }\n    }\n    if (onlyInteger) {\n        return 1;\n    }\n    // we need to rescale the values\n    // need to find the max and min values\n    const extremeValues = minMax || xMinMaxValues(array);\n    return getFactorNumber(extremeValues, maxValue);\n}\n//# sourceMappingURL=getBestFactor.js.map","/**\n * Reconvert number to original value\n * @param number Number used for computation\n * @param factor Multiplying factor\n * @returns Original value\n */\nexport function getNumber(number, factor) {\n    if (factor !== 1)\n        number /= factor;\n    const rounded = Math.round(number);\n    if (rounded !== number && Math.abs(rounded - number) <= Number.EPSILON) {\n        return rounded;\n    }\n    return number;\n}\n//# sourceMappingURL=getNumber.js.map","import { getNumber } from './getNumber';\nexport function peakTableCreator(data, options = {}) {\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    let firstX = Number.POSITIVE_INFINITY;\n    let lastX = Number.NEGATIVE_INFINITY;\n    let firstY = Number.POSITIVE_INFINITY;\n    let lastY = Number.NEGATIVE_INFINITY;\n    const lines = [];\n    for (let i = 0; i < data.x.length; i++) {\n        const x = data.x[i];\n        const y = data.y[i];\n        if (firstX > x) {\n            firstX = x;\n        }\n        if (lastX < x) {\n            lastX = x;\n        }\n        if (firstY > y) {\n            firstY = y;\n        }\n        if (lastY < y) {\n            lastY = y;\n        }\n    }\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##PEAK TABLE=(XY..XY)');\n    for (let i = 0; i < data.x.length; i++) {\n        lines.push(`${getNumber(data.x[i], xFactor)} ${getNumber(data.y[i], yFactor)}`);\n    }\n    return lines;\n}\n//# sourceMappingURL=peakTableCreator.js.map","import { xDivide } from 'ml-spectra-processing';\nexport function rescaleAndEnsureInteger(data, factor = 1) {\n    if (factor === 1)\n        return data.map((value) => Math.round(value));\n    return xDivide(data, factor).map((value) => Math.round(value));\n}\n//# sourceMappingURL=rescaleAndEnsureInteger.js.map","/**\n * class encodes a integer vector as a String in order to store it in a text file.\n * The algorithms used to encode the data are describe in:\n *            http://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n */\nconst newLine = '\\n';\nconst pseudoDigits = [\n    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n    ['@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],\n    ['@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n    ['%', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'],\n    ['%', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'],\n    [' ', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 's'],\n];\nconst SQZ_P = 1;\nconst SQZ_N = 2;\nconst DIF_P = 3;\nconst DIF_N = 4;\nconst DUP = 5;\nconst maxLinelength = 100;\n/**\n * This function encodes the given vector. The xyEncoding format is specified by the\n * xyEncoding option\n * @param xyEncoding: ('FIX','SQZ','DIF','DIFDUP','CVS','PAC') Default 'DIFDUP'\n * @return {string}\n */\nexport function vectorEncoder(data, firstX, intervalX, xyEncoding) {\n    switch (xyEncoding) {\n        case 'FIX':\n            return fixEncoding(data, firstX, intervalX);\n        case 'SQZ':\n            return squeezedEncoding(data, firstX, intervalX);\n        case 'DIF':\n            return differenceEncoding(data, firstX, intervalX);\n        case 'DIFDUP':\n            return differenceDuplicateEncoding(data, firstX, intervalX);\n        case 'CSV':\n            return commaSeparatedValuesEncoding(data, firstX, intervalX);\n        case 'PAC':\n            return packedEncoding(data, firstX, intervalX);\n        default:\n            return differenceEncoding(data, firstX, intervalX);\n    }\n}\n/**\n * @private\n * No data compression used. The data is separated by a comma(',').\n */\nexport function commaSeparatedValuesEncoding(data, firstX, intervalX) {\n    return fixEncoding(data, firstX, intervalX, ',');\n}\n/**\n * @private\n * No data compression used. The data is separated by the specified separator.\n */\nexport function fixEncoding(data, firstX, intervalX, separator = ' ') {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += `${separator}${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += `${separator}${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * No data compression used. The data is separated by the sign of the number.\n */\nexport function packedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += data[j] < 0 ? String(data[j++]) : `+${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += data[i] < 0 ? String(data[i]) : `+${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Data compression is possible using the squeezed form (SQZ) in which the delimiter, the leading digit,\n * and sign are replaced by a pseudo-digit from Table 1. For example, the Y-values 30, 32 would be\n * represented as C0C2.\n */\nexport function squeezedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    // String outputData = new String();\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 10) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 10; i++) {\n            outputData += squeezedDigit(data[j++].toString());\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += squeezedDigit(data[i].toString());\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Duplicate suppression xyEncoding\n */\nexport function differenceDuplicateEncoding(data, firstX, intervalX) {\n    let mult = 0;\n    let index = 0;\n    let charCount = 0;\n    // We built a string where we store the encoded data.\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (let i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    // We simulate a line carry\n    const numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // Start line\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else if (diffData[index - 1] === diffData[index]) {\n            // Try to insert next difference\n            mult++;\n        }\n        else if (mult > 0) {\n            // Now we know that it can be in line\n            mult++;\n            encodedNumber = duplicateDigit(mult.toString());\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n            mult = 0;\n            index--;\n        }\n        else {\n            // Check if it fits, otherwise start a new line\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                // start a new line\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    if (mult > 0) {\n        encodedData += duplicateDigit((mult + 1).toString());\n    }\n    // We insert the last data from fid. It is done to control of data\n    // The last line start with the number of datas in the fid.\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Differential xyEncoding\n */\nexport function differenceEncoding(data, firstX, intervalX) {\n    let index = 0;\n    let charCount = 0;\n    let i;\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    const numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // We convert the first number.\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else {\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    // We insert the last number from data. It is done to control of data\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Convert number to the ZQZ format, using pseudo digits.\n */\nfunction squeezedDigit(num) {\n    let sqzDigits = '';\n    if (num.startsWith('-')) {\n        sqzDigits += pseudoDigits[SQZ_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            sqzDigits += num.substring(2);\n        }\n    }\n    else {\n        sqzDigits += pseudoDigits[SQZ_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            sqzDigits += num.substring(1);\n        }\n    }\n    return sqzDigits;\n}\n/**\n * Convert number to the DIF format, using pseudo digits.\n */\nfunction differenceDigit(num) {\n    let diffDigits = '';\n    if (num.startsWith('-')) {\n        diffDigits += pseudoDigits[DIF_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            diffDigits += num.substring(2);\n        }\n    }\n    else {\n        diffDigits += pseudoDigits[DIF_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            diffDigits += num.substring(1);\n        }\n    }\n    return diffDigits;\n}\n/**\n * Convert number to the DUP format, using pseudo digits.\n */\nfunction duplicateDigit(num) {\n    let dupDigits = '';\n    dupDigits += pseudoDigits[DUP][num.charCodeAt(0) - 48];\n    if (num.length > 1) {\n        dupDigits += num.substring(1);\n    }\n    return dupDigits;\n}\n//# sourceMappingURL=vectorEncoder.js.map","import { rescaleAndEnsureInteger } from './rescaleAndEnsureInteger';\nimport { vectorEncoder } from './vectorEncoder';\nexport function xyDataCreator(data, options = {}) {\n    const { xyEncoding = 'DIF' } = options;\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    const firstX = data.x[0];\n    const lastX = data.x[data.x.length - 1];\n    const firstY = data.y[0];\n    const lastY = data.y[data.y.length - 1];\n    const nbPoints = data.x.length;\n    const deltaX = (lastX - firstX) / (nbPoints - 1);\n    const lines = [];\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##DELTAX=${deltaX}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##XYDATA=(X++(Y..Y))');\n    const line = vectorEncoder(rescaleAndEnsureInteger(data.y, yFactor), firstX / xFactor, deltaX / xFactor, xyEncoding);\n    if (line)\n        lines.push(line);\n    return lines;\n}\n//# sourceMappingURL=xyDataCreator.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getBestFactor } from './utils/getBestFactor';\nimport { peakTableCreator } from './utils/peakTableCreator';\nimport { xyDataCreator } from './utils/xyDataCreator';\n/**\n * Create a jcamp\n * @param data object of array\n * @param [options={meta:{},info:{}} - metadata object\n * @returns JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n    const { meta = {}, info = {}, xyEncoding } = options;\n    const { title = '', owner = '', origin = '', dataType = '', xUnits = '', yUnits = '', ...resInfo } = info;\n    let { xFactor, yFactor } = info;\n    data = { x: data.x, y: data.y };\n    let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    // we leave the header and utf8 fonts ${header.replace(/[^\\t\\n\\x20-\\x7F]/g, '')\n    if (xyEncoding) {\n        xFactor = getBestFactor(data.x, { factor: xFactor });\n        yFactor = getBestFactor(data.y, { factor: yFactor });\n        return `${header}##NPOINTS=${data.x.length}\n${xyDataCreator(data, { info: { xFactor, yFactor }, xyEncoding }).join('\\n')}\n##END=`;\n    }\n    else {\n        if (xFactor === undefined)\n            xFactor = 1;\n        if (yFactor === undefined)\n            yFactor = 1;\n        if (xFactor !== 1) {\n            //@ts-expect-error xFactor is always defined\n            data.x = data.x.map((value) => value / xFactor);\n        }\n        if (yFactor !== 1) {\n            //@ts-expect-error yFactor is always defined\n            data.y = data.y.map((value) => value / yFactor);\n        }\n        return `${header}##NPOINTS=${data.x.length}\n${peakTableCreator(data, { info: { xFactor, yFactor } }).join('\\n')}\n##END=`;\n    }\n}\n//# sourceMappingURL=fromJSON.js.map","import creatorNtuples from './creatorNtuples';\nimport { fromJSON } from './fromJSON';\nimport { checkNumberOrArray } from './utils/checkNumberOrArray';\n/**\n * Create a jcamp from variables\n */\nexport function fromVariables(\n/** object of variables */\nvariables, options = {}) {\n    const { info = {}, meta = {}, forceNtuples = false } = options;\n    const jcampOptions = {\n        info,\n        meta,\n    };\n    const keys = Object.keys(variables).map((key) => key.toLowerCase());\n    if (!forceNtuples && keys.length === 2) {\n        const x = variables.x;\n        const xLabel = x.label || 'x';\n        if (variables.x.units) {\n            if (xLabel.includes(variables.x.units)) {\n                jcampOptions.info.xUnits = xLabel;\n            }\n            else {\n                jcampOptions.info.xUnits = `${xLabel} (${variables.x.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.xUnits = xLabel;\n        }\n        const y = variables.y;\n        const yLabel = y.label || 'y';\n        if (variables.y.units) {\n            if (yLabel.includes(variables.y.units)) {\n                jcampOptions.info.xUnits = yLabel;\n            }\n            else {\n                jcampOptions.info.yUnits = `${yLabel} (${variables.y.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.yUnits = yLabel;\n        }\n        const xData = variables.x.data;\n        const yData = variables.y.data;\n        checkNumberOrArray(xData);\n        checkNumberOrArray(yData);\n        return fromJSON({ x: xData, y: yData }, jcampOptions);\n    }\n    else {\n        return creatorNtuples(variables, options);\n    }\n}\n//# sourceMappingURL=fromVariables.js.map","import { fromVariables } from 'convert-to-jcamp';\nexport function toJcamps(analysis, options = {}) {\n    const jcamps = [];\n    for (const spectrum of analysis.spectra) {\n        jcamps.push(getJcamp(spectrum, options));\n    }\n    return jcamps;\n}\nfunction getJcamp(spectrum, options) {\n    const { info = {}, meta = {} } = options;\n    const jcampOptions = {\n        options: {},\n        info: {\n            title: spectrum.title,\n            dataType: spectrum.dataType,\n            ...info,\n        },\n        meta: { ...spectrum.meta, ...meta },\n    };\n    return fromVariables(spectrum.variables, jcampOptions);\n}\n//# sourceMappingURL=toJcamps.js.map","import { toJcamps } from './toJcamps.js';\n/**\n * Convert an Analysis to a single JCAMP string (all spectra joined).\n * @param analysis - The analysis to convert\n * @param options - Options for the JCAMP output\n * @returns JCAMP string\n */\nexport function toJcamp(analysis, options = {}) {\n    return toJcamps(analysis, options).join('\\n');\n}\n//# sourceMappingURL=toJcamp.js.map","export function toText(analysis, options = {}) {\n    // Export all the data to Csv\n    if (!options.selector && !options.normalization) {\n        return exportText(analysis.spectra, options);\n    }\n    // Export selected variables\n    const spectra = analysis.getNormalizedSpectra(options);\n    // const spectra = analysis.getXYSpectrum(options.selector);\n    return exportText(spectra, options);\n}\nfunction exportText(spectrums, options) {\n    const { endOfLine = '\\n', fieldSeparator = ',' } = options;\n    const result = new Array(spectrums.length);\n    for (let index = 0; index < spectrums.length; index++) {\n        const variables = Object.values(spectrums[index].variables);\n        const labels = variables.map((v) => v.label);\n        const maxNumberData = Math.max(...variables.map((v) => v.data.length));\n        const lines = [labels.join(fieldSeparator)];\n        for (let lineIndex = 0; lineIndex < maxNumberData; lineIndex++) {\n            lines.push(variables\n                .map(({ data }) => data[lineIndex] === undefined ? '' : data[lineIndex])\n                .join(fieldSeparator));\n        }\n        result[index] = lines.join(endOfLine);\n    }\n    return result;\n}\n//# sourceMappingURL=toText.js.map","import { xyArrayAlign } from 'ml-spectra-processing';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param analyses\n * @param options\n */\nexport function toMatrix(analyses, options = {}) {\n    const { selector = {}, normalization, xLabel = 'x', delta = 0, endOfLine = '\\n', } = options;\n    const data = [];\n    const labels = [xLabel];\n    const titles = ['x'];\n    for (const analysis of analyses) {\n        const spectra = analysis.getNormalizedSpectra({\n            selector,\n            normalization,\n        });\n        for (const spectrum of spectra) {\n            titles.push(spectrum.title || '');\n            labels.push(analysis.label || '');\n            data.push({ x: spectrum.variables.x.data, y: spectrum.variables.y.data });\n        }\n    }\n    const aligned = xyArrayAlign(data, { delta });\n    const lines = [labels.join('\\t'), titles.join('\\t')];\n    for (let row = 0; row < aligned.x.length; row++) {\n        const line = [aligned.x[row]];\n        for (const column of aligned.ys) {\n            line.push(column[row]);\n        }\n        lines.push(line.join('\\t'));\n    }\n    const text = lines.join(endOfLine);\n    return text;\n}\n// need to find all the unique Xs\n//# sourceMappingURL=toMatrix.js.map","import { getJSGraph } from './jsgraph/getJSGraph.js';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations.js';\nexport * from './AnalysesManager.js';\nexport * from './Analysis.js';\nexport * from './from/fromJcamp.js';\nexport * from './from/fromText.js';\nexport * from './to/toJcamp.js';\nexport * from './to/toJcamps.js';\nexport * from './to/toText.js';\nexport * from './to/toMatrix.js';\nexport * from './util/getNormalizedSpectrum.js';\nexport * from './util/peakPicking.js';\nexport * from './util/autoPeakPicking.js';\nexport * from './types/types.js';\nexport * from './types/NormalizedSpectrumOptions.js';\nexport * from './types/SpectrumSelector.js';\nexport { getReactPlotJSON } from './reactPlot/getReactPlotJSON.js';\nexport const JSGraph = {\n    getJSGraph,\n    getNormalizationAnnotations,\n};\n//# sourceMappingURL=index.js.map","/**\n * Generic parser for Malvern Zetasizer tab-separated text exports.\n *\n * The parser dynamically discovers array columns (e.g., `Sizes[1] (d.nm)`)\n * and scalar metadata columns from the header row. This makes it work\n * regardless of which fields the user selected for export or which\n * instrument model produced the file.\n *\n * Some exports contain multiple sections (e.g., a summary table followed\n * by a distribution table). The parser detects new header rows and merges\n * corresponding records from each section.\n */\nimport { parseString } from 'dynamic-typing';\nimport { ensureString } from 'ensure-string';\n/**\n * Parse a Zetasizer tab-separated text export into structured records.\n *\n * The parser dynamically discovers columns from the header row:\n * - Columns matching `Name[N] (units)` are grouped into array data.\n * - All other columns become scalar metadata entries.\n *\n * Files may contain multiple sections with different headers. Each new\n * header row starts a new section, and records are merged across sections\n * in order.\n * @param data - The raw content of the Zetasizer export file (string, ArrayBuffer, or typed array)\n * @returns Array of parsed measurement records\n */\nexport function fromText(data) {\n    const text = ensureString(data);\n    const lines = text.split(/\\r?\\n/).filter((line) => line.trim() !== '');\n    if (lines.length < 2) {\n        return [];\n    }\n    const sections = splitSections(lines);\n    const sectionResults = [];\n    for (const section of sections) {\n        const headers = section[0]?.split('\\t') ?? [];\n        const { arrayGroups, scalarIndices } = classifyColumns(headers);\n        const records = [];\n        for (let i = 1; i < section.length; i++) {\n            const line = section[i];\n            if (!line)\n                continue;\n            const values = line.split('\\t');\n            const record = { meta: {} };\n            for (const group of arrayGroups) {\n                record[group.name] = {\n                    data: extractFloatArray(values, group.start, group.count),\n                    units: group.units,\n                };\n            }\n            const meta = {};\n            for (const [name, index] of scalarIndices) {\n                const raw = values[index] ?? '';\n                if (raw !== '') {\n                    meta[name] = parseString(raw);\n                }\n            }\n            record.meta = meta;\n            records.push(record);\n        }\n        sectionResults.push(records);\n    }\n    return mergeSections(sectionResults);\n}\n/**\n * Split lines into sections, each starting with a header row.\n *\n * The first line is always treated as a header. Subsequent lines that\n * contain array column patterns (e.g., `Name[1]`) are detected as new\n * header rows, starting a new section.\n * @param lines - Non-empty lines from the file\n * @returns Array of sections, each being an array of lines (header + data)\n */\nfunction splitSections(lines) {\n    const sections = [];\n    let current = [];\n    for (let i = 0; i < lines.length; i++) {\n        const line = lines[i] ?? '';\n        if (i === 0) {\n            current.push(line);\n        }\n        else if (isHeaderLine(line)) {\n            if (current.length > 0) {\n                sections.push(current);\n            }\n            current = [line];\n        }\n        else {\n            current.push(line);\n        }\n    }\n    if (current.length > 0) {\n        sections.push(current);\n    }\n    return sections;\n}\nconst ARRAY_HEADER_PATTERN = /^(?<name>.+?)\\[(?:\\d+)]\\s*(?:\\((?<units>.+?)\\))?$/;\n/**\n * Check if a line looks like a header row by testing whether any\n * tab-separated value matches the array column pattern.\n * @param line - A line from the file\n * @returns True if the line appears to be a header row\n */\nfunction isHeaderLine(line) {\n    const fields = line.split('\\t');\n    return fields.some((field) => ARRAY_HEADER_PATTERN.test(field));\n}\n/**\n * Scan headers to identify groups of array columns and scalar columns.\n *\n * Array columns follow the pattern `Name[N] (units)` where N is sequential.\n * All other columns are treated as scalar metadata.\n * @param headers - Array of header strings\n * @returns Object with arrayGroups and scalarIndices\n */\nfunction classifyColumns(headers) {\n    const arrayGroups = [];\n    const scalarIndices = new Map();\n    let currentGroup;\n    for (let i = 0; i < headers.length; i++) {\n        const header = headers[i] ?? '';\n        const match = ARRAY_HEADER_PATTERN.exec(header);\n        if (match) {\n            const name = match.groups?.name ?? '';\n            const units = match.groups?.units ?? '';\n            if (currentGroup?.name === name) {\n                currentGroup.count++;\n            }\n            else {\n                if (currentGroup) {\n                    arrayGroups.push(currentGroup);\n                }\n                currentGroup = { name, units, start: i, count: 1 };\n            }\n        }\n        else {\n            if (currentGroup) {\n                arrayGroups.push(currentGroup);\n                currentGroup = undefined;\n            }\n            if (header) {\n                // For duplicate header names (e.g., \"Sample Name\" appears twice),\n                // keep the last occurrence which is in the metadata section.\n                scalarIndices.set(header, i);\n            }\n        }\n    }\n    if (currentGroup) {\n        arrayGroups.push(currentGroup);\n    }\n    return { arrayGroups, scalarIndices };\n}\n/**\n * Merge records from multiple sections by index. Records at the same\n * position across sections are combined, with later sections' metadata\n * and arrays added to earlier ones.\n * @param sectionResults - Array of record arrays, one per section\n * @returns Merged array of records\n */\nfunction mergeSections(sectionResults) {\n    if (sectionResults.length === 0)\n        return [];\n    if (sectionResults.length === 1)\n        return sectionResults[0] ?? [];\n    const maxLength = Math.max(...sectionResults.map((s) => s.length));\n    const merged = [];\n    for (let i = 0; i < maxLength; i++) {\n        const record = { meta: {} };\n        for (const section of sectionResults) {\n            const sectionRecord = section[i];\n            if (!sectionRecord)\n                continue;\n            for (const [key, value] of Object.entries(sectionRecord)) {\n                if (key === 'meta') {\n                    Object.assign(record.meta, value);\n                }\n                else {\n                    record[key] = value;\n                }\n            }\n        }\n        merged.push(record);\n    }\n    return merged;\n}\n/**\n * Extract a Float64Array from a row of tab-separated values.\n * @param values - Array of string values from the row\n * @param start - Start column index\n * @param count - Number of columns to extract\n * @returns Float64Array of parsed values\n */\nfunction extractFloatArray(values, start, count) {\n    const result = new Float64Array(count);\n    for (let i = 0; i < count; i++) {\n        result[i] = Number(values[start + i]);\n    }\n    return result;\n}\n//# sourceMappingURL=fromText.js.map","/**\n * Get a ZetasizerArray from a record by name.\n *\n * Since ZetasizerRecord uses an index signature, accessing a property\n * returns a union type. This helper narrows it to ZetasizerArray.\n * @param record - Parsed Zetasizer record\n * @param name - Array name (e.g., \"Sizes\", \"Intensities\")\n * @returns The array, or undefined if not found\n */\nexport function getArray(record, name) {\n    const value = record[name];\n    if (value && typeof value === 'object' && 'data' in value) {\n        return value;\n    }\n    return undefined;\n}\n//# sourceMappingURL=getArray.js.map","import { Analysis } from 'common-spectrum';\nimport { fromText, getArray } from 'parse-zetasizer';\n/**\n * Parse a Zetasizer tab-separated text export and create an Analysis\n * for zeta potential measurements.\n *\n * The parser dynamically discovers whatever columns the file contains.\n * Known array columns (Zeta Potentials, Intensities) are mapped to\n * standard variable symbols (x, y). Records missing Zeta Potentials or\n * Intensities are skipped.\n * @param data - The raw content of a Zetasizer export file (string, ArrayBuffer, or typed array)\n * @param options - Options for the analysis\n * @returns An Analysis containing one spectrum per measurement\n */\nexport function fromZetasizer(data, options = {}) {\n    const analysis = new Analysis(options);\n    const records = fromText(data);\n    for (const record of records) {\n        const variables = buildVariables(record);\n        if (!variables)\n            continue;\n        const meta = extractMeta(record);\n        const cheminfo = extractCheminfo(record);\n        if (cheminfo) {\n            meta.cheminfo = cheminfo;\n        }\n        analysis.pushSpectrum(variables, {\n            title: extractTitle(record),\n            dataType: 'Zeta potential measurement',\n            meta,\n        });\n        const spectrum = analysis.spectra.at(-1);\n        if (spectrum) {\n            spectrum.settings = extractSettings(record);\n        }\n    }\n    return analysis;\n}\n/**\n * Build MeasurementXYVariables from a parsed record.\n *\n * Returns undefined if the required Zeta Potentials or Intensities arrays\n * are missing.\n * @param record - Parsed Zetasizer record\n * @returns Variables object, or undefined if required data is missing\n */\nfunction buildVariables(record) {\n    const zetaPotentials = getArray(record, 'Zeta Potentials');\n    const intensities = getArray(record, 'Intensities');\n    if (!zetaPotentials?.data.length || !intensities?.data.length) {\n        return undefined;\n    }\n    const variables = {\n        x: {\n            symbol: 'x',\n            label: 'Zeta potential',\n            units: zetaPotentials.units || 'mV',\n            data: zetaPotentials.data,\n            isDependent: false,\n        },\n        y: {\n            symbol: 'y',\n            label: 'Intensity',\n            units: intensities.units || '',\n            data: intensities.data,\n            isDependent: true,\n        },\n    };\n    const times = getArray(record, 'Times');\n    if (times?.data.length) {\n        variables.t = {\n            symbol: 't',\n            label: 'Time',\n            units: times.units || 's',\n            data: times.data,\n            isDependent: false,\n        };\n    }\n    const phases = getArray(record, 'Phases');\n    if (phases?.data.length) {\n        variables.p = {\n            symbol: 'p',\n            label: 'Phase',\n            units: phases.units || 'rad',\n            data: phases.data,\n            isDependent: true,\n        };\n    }\n    return variables;\n}\n/**\n * Extract the sample name from the record metadata.\n * @param record - Parsed Zetasizer record\n * @returns The sample name, or empty string if not found\n */\nfunction extractTitle(record) {\n    const sampleName = record.meta['Sample Name'];\n    return typeof sampleName === 'string' ? sampleName : '';\n}\n/**\n * Extract metadata from a parsed record.\n *\n * All scalar metadata from the record is included except Sample Name\n * (which is used as the title).\n * @param record - Parsed Zetasizer record\n * @returns Record of metadata key-value pairs\n */\nfunction extractMeta(record) {\n    const meta = {};\n    for (const [key, value] of Object.entries(record.meta)) {\n        if (key === 'Sample Name')\n            continue;\n        meta[key] = value;\n    }\n    return meta;\n}\n/**\n * Build standardized cheminfo metadata from a Zetasizer record.\n *\n * Extracts zeta potential, deviation, mobility, conductivity, and count rates.\n * @param record - Parsed Zetasizer record\n * @returns ZetaPotentialCheminfo object, or undefined if no relevant data is found\n */\nfunction extractCheminfo(record) {\n    const { meta } = record;\n    const zpMeta = {};\n    const zetaPotential = getNumber(meta, 'Zeta Potential (mV)');\n    if (zetaPotential !== undefined) {\n        zpMeta.zetaPotential = { value: zetaPotential, units: 'mV' };\n    }\n    const zetaDeviation = getNumber(meta, 'Zeta Deviation (mV)');\n    if (zetaDeviation !== undefined) {\n        zpMeta.zetaDeviation = { value: zetaDeviation, units: 'mV' };\n    }\n    const mobility = getMobility(meta);\n    if (mobility !== undefined) {\n        zpMeta.mobility = { value: mobility, units: 'µm·cm/Vs' };\n    }\n    const conductivity = getNumber(meta, 'Conductivity (mS/cm)');\n    if (conductivity !== undefined) {\n        zpMeta.conductivity = { value: conductivity, units: 'mS/cm' };\n    }\n    const derivedMeanCountRate = getNumber(meta, 'Derived Count Rate (kcps)');\n    if (derivedMeanCountRate !== undefined) {\n        zpMeta.derivedMeanCountRate = {\n            value: derivedMeanCountRate,\n            units: 'kcps',\n        };\n    }\n    const meanCountRate = getNumber(meta, 'Mean Count Rate (kcps)');\n    if (meanCountRate !== undefined) {\n        zpMeta.meanCountRate = { value: meanCountRate, units: 'kcps' };\n    }\n    const qualityFactor = getNumber(meta, 'Quality Factor');\n    if (qualityFactor !== undefined) {\n        zpMeta.qualityFactor = qualityFactor;\n    }\n    if (Object.keys(zpMeta).length === 0) {\n        return undefined;\n    }\n    return { meta: zpMeta };\n}\n/**\n * Get a numeric value from the record meta, or undefined if not present.\n * @param meta - Record metadata\n * @param key - Meta key to look up\n * @returns The numeric value, or undefined\n */\nfunction getNumber(meta, key) {\n    const value = meta[key];\n    return typeof value === 'number' ? value : undefined;\n}\n/**\n * Extract the electrophoretic mobility value from the record metadata.\n *\n * The key contains a µ character whose encoding depends on how the file\n * was read (latin1 vs utf-8), so we search by prefix.\n * @param meta - Record metadata\n * @returns The mobility value, or undefined\n */\nfunction getMobility(meta) {\n    for (const [key, value] of Object.entries(meta)) {\n        if (key.startsWith('Mobility') && typeof value === 'number') {\n            return value;\n        }\n    }\n    return undefined;\n}\n/**\n * Extract instrument settings from a parsed record.\n * @param record - Parsed Zetasizer record\n * @returns Settings object with instrument info\n */\nfunction extractSettings(record) {\n    const { meta } = record;\n    const serialNumber = meta['Serial Number'];\n    const softwareVersion = meta['S/W Version'];\n    const settings = {\n        instrument: {\n            manufacturer: 'Malvern Panalytical',\n            model: 'Zetasizer',\n            ...(typeof serialNumber === 'string' ? { serialNumber } : {}),\n            software: {\n                name: 'Zetasizer Nano',\n                ...(typeof softwareVersion === 'string' ||\n                    typeof softwareVersion === 'number'\n                    ? { version: String(softwareVersion) }\n                    : {}),\n            },\n        },\n    };\n    return settings;\n}\n//# sourceMappingURL=fromZetasizer.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","medianNext","low","high","middle","currentLow","currentHigh","swap","i","j","temp","Math","floor","xCheck","minLength","Error","xFindClosestIndex","target","sorted","abs","index","diff","Number","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","x","fromIndex","toIndex","from","to","xAbsoluteSum","sum","xAdd","array1","array2","isConstant","constant","array3","xApplyFunctionStr","variableLabel","fctString","fct","Function","replaceAll","toReturn","isNaN","xMultiply","max","arguments","_options$fromIndex","_options$toIndex","isInteger","maxValue","min","minValue","rescale","Array","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","defineProperty","matrix","require$$0","require$$1","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","inspectData","rows","columns","maxI","maxJ","result","loop","get","line","push","formatNumber","join","num","formatNumber2","padEnd","len","str","fix","toFixed","startsWith","exp","toExponential","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","set","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","expm1","fround","log","log1p","log10","log2","round","sign","sin","sinh","sqrt","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","checkNonEmpty","isEmpty","sumByRow","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","varianceByColumn","varianceAll","size","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","row","column","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","eye","diag","data","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","NEGATIVE_INFINITY","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","dot","cumulativeSum","vector2","vector1","mmul","other","Bcolj","s","mpow","scalar","bb","e","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","console","warn","embed","mat","r","c","resultat","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","entries","product","standardDeviation","center","Symbol","iterator","col","values","for","isArrayOfNumbers","every","element","randomInt","diagonal","identity","negate","tensorProduct","#initData","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","reverse","sideIndex","toCompact","compact","fromCompact","compactSize","JSON","stringify","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","compactLength","BaseView","MatrixColumnView","MatrixColumnSelectionView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowView","MatrixRowSelectionView","MatrixSelectionView","MatrixSubView","MatrixTransposeView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","wrap","LuDecomposition","lu","pivotVector","pivotSign","t","LUcolj","kmax","LU","isSingular","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","d","subMatrix0","subMatrix1","subMatrix2","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","linearDependencies","results","Abis","svd","pseudoInverse","svdSolution","covariance","xMatrix","yMatrix","yIsSame","cov","correlation","sdx","sdy","corr","EigenvalueDecomposition","assumeSymmetric","tred2","tql2","H","ort","orthes","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","hh","dl1","c3","el1","s2","tst1","nn","exshift","z","iter","w","ra","sa","vr","vi","notlast","cdivres","cdiv","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","B","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","counter","xResidual","residual","yResidual","betas","CHO","EVD","Matrix_1","MatrixTransposeView_1","NIPALS","Nipals","SVD","_default","default","solve_1","xMean","sumValue","xVariance","sqrError","xStandardDeviation","xDivide","xEnsureFloat64","FFT","_csize","table","angle","PI","power","_width","_bitrev","revShift","_out","_data","_inv","fromComplexArray","complex","storage","res","createComplexArray","toComplexArray","completeSpectrum","spectrum","half","transform","out","_transform4","realTransform","_realTransform4","inverseTransform","width","step","outOff","bitrev","off","_singleTransform2","_singleTransform4","inv","quarterLen","limit","A","C","D","Ar","Ai","Br","Bi","Cr","Ci","Dr","Di","MAr","MAi","tableBr","tableBi","MBr","MBi","tableCr","tableCi","MCr","MCi","tableDr","tableDi","MDr","MDi","T0r","T0i","T1r","T1i","T2r","T2i","T3r","T3i","FAr","FAi","FCr","FCi","FBr","FBi","FDr","FDi","evenR","evenI","oddR","oddI","leftR","leftI","rightR","rightI","step2","step3","_singleRealTransform2","_singleRealTransform4","halfLen","hquarterLen","ST0r","ST0i","ST1r","ST1i","ST2r","ST2i","ST3r","ST3i","SFAr","SFAi","SFBr","SFBi","SA","SB","createFromToArray","includeFrom","includeTo","distribution","delta","base","firstExponent","object","replacer","space","internalReplacer","key","ArrayBuffer","isView","xMaxValue","xMinValue","xIsEquallySpaced","tolerance","maxDx","minDx","MAX_SAFE_INTEGER","absoluteDifference","xIsMonotonic","at","xMedianAbsoluteDeviation","averageDeviations","mad","xMinMaxValues","Y1","P1","Q1","Y2","P2","Q2","Y3","P3","Q3","Y4","P4","Q4","Y5","P5","Q5","polyval","coef","calc","P","Q","erfcinv","val","simpleNormInv","magnitudeMode","SQRT2","simpleNormInvNumber","xNoiseSanPlot","cutOff","refine","scaleFactor","factorStd","fixOffset","prepareData","medianIndex","firstNegativeValueIndex","findIndex","lastPositiveValueIndex","signPositive","signNegative","cutOffDist","determineCutOff","pIndex","initialNoiseLevelPositive","skyPoint","initialNoiseLevelNegative","nIndex","noiseLevelPositive","noiseLevelNegative","cloneSignPositive","cloneSignNegative","cutOffSignalsIndexPlus","cutOffSignalsIndexNeg","cutOffSignals","correctionFactor","effectiveCutOffDist","refinedCorrectionFactor","positive","negative","snr","sanplot","generateSanPlot","fromTo","considerList","indexMax","minKi","whereToCutStat","top","elementsOfCutOff","filter","averageValue","kiSqrt","logBaseY","logOfBase","xAxis","_e","xNoiseStandardDeviation","sd","xSum","xNormed","algorithm","absoluteSumValue","absoluteSum","currentMaxValue","sumFactor","String","xPadding","fromEnd","toEnd","xParetoNormalization","sqrtSD","xRescale","xRolling","window","padding","padded","subarray","xRollingAverage","xRollingMedian","matrixCheck","firstLength","matrixMinMaxZ","nbRows","nbColumns","xyCheck","xyEnsureGrowingX","prevX","currentIndex","zonesNormalize","zones","exclusions","map","zone","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","zoneIndex","zonesWithPoints","numberOfPoints","normalizedZones","zonesWithNumberOfPoints","totalSize","reduce","previous","current","unitsPerPoint","currentTotal","tempZone","tempZoneNumberOfPoints","equallySpacedSlot","xLength","halfStep","lastStep","start","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","main","integral","x0","x1","slope","intercept","equallySpacedSmooth","initialOriginalStep","lastOriginalStep","MIN_SAFE_INTEGER","sumAtMin","sumAtMax","getSlope","y0","y1","xyEquallySpaced","variant","zonesWithPointsRes","xResult","yResult","zoneResult","processZone","concat","xyFilterX","currentZoneIndex","newX","newY","position","xyFilterXPositive","xyGrowingX","toReversed","xyJoinX","deltaIsFunction","difference","currentDelta","getSlots","possibleXs","flatMap","currentSlot","average","number","slots","xyArrayAlign","requiredY","slot","ys","positions","Uint32Array","filterRequiredY","newYs","addStyle","serie","color","opacity","lineWidth","match","toUpperCase","replace","style","dash","label","id","COLORS","getJSGraph","analyses","colors","opacities","linesWidth","selector","normalization","yAxis","series","xLabel","yLabel","xUnits","units","yUnits","analysis","spectra","getNormalizedSpectra","firstSpectrum","variables","logScale","axes","unit","unitWrapperBefore","unitWrapperAfter","flipped","display","defaultBoundary","getNormalizationAnnotations","boundary","annotations","exclusion","ignore","annotation","strokeWidth","fillColor","centerMean","centerMedian","normed","divideBySD","paretoNormalization","ldlSymbolic","Ap","Lp","Parent","Lnz","Flag","kk","p2","ldlNumeric","Ax","Li","Lx","Pattern","lKi","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPerm","ldlPermt","prepare","M","Pinv","Mt","ar","ac","LNZ","entry","coloffset","adr","bp1","cuthillMckee_1","cuthillMckee","compareNum","list","adj","visited","toVisit","eol","ptr","nbhd","updateSystem","weights","nbPoints","newVector","next","getDeltaMatrix","lambda","lowerTriangularNonZeros","permutationEncodedArray","airPLS","controlPoints","getControlPoints","baseline","iteration","sumNegDifferences","corrected","stopCriterion","getStopCriterion","prevNegSum","cho","cholesky","applyCorrection","absChange","absoluteSumNegatives","absDiff","weight","Int8Array","indexFrom","indexTo","_typeof","obj","sequentialFill","_options","_options$from","_options$to","_options$size","isArray","_i","airPLSBaseline","numberPoints","regressionOptions","airpls","correctedSpectrum","checkArrayLength","BaseRegression","new","predict","_predict","xVal","train","precision","toLaTeX","score","y2","ySum","chi2","rmsd","xSquared","ySquared","xY","maybeToPrecision","figures","toPrecision","PolynomialRegression","degree","powers","coefficients","regress","_toFormula","isLaTeX","sup","closeSup","times","fn","load","json","interceptAtZero","nCoefficients","F","FT","baselineCorrectionRegression","Regression","fitting","oldFitting","regression","iterativePolynomialBaseline","rollingAverageBaseline","defaults","actualOptions","rollingBall","maxima","minima","windowM","windowS","windowLeft","windowRight","rollingBallBaseline","rollingMedianBaseline","baselineFct","sgg","xs","windowSize","derivative","polynomial","np","ans","fullWeights","hs","constantH","wg1","wg2","d1","d2","getHs","wg","gramPoly","Grampoly","genFact","gf","firstDerivative","secondDerivative","thirdDerivative","savitzkyGolay","ensureGrowing","reverseIfNeeded","equallySpaced","filterX","setMaxX","existingMax","setMinX","existingMin","getMinMaxIntervalsDy","dY","dX","lastMax","lastMin","intervalL","intervalR","tryMatchOneIntervalWithMinData","lastK","minData","yThreshold","intervalWidth","intervalCenter","yData","minDistance","possible","newLastIndex","centerIndex","deltaX","currentDistance","lastIndex","autoAlgorithm","ddY","minddY","crossDy","peaks","lastJ","yIndex","crypto","randomUUID","inflectionPoints","getPeakFromIntervals","xGetCrossZeroPoints","isLessAndGreaterThanZero","back","optimizeTop","peak","beta","gamma","xCurrent","xPrevious","gsd","noiseLevel","sgOptions","smoothY","maxCriteria","minMaxRatio","realTopDetection","peakDetectionAlgorithm","isEquallySpaced","noiseInfo","xValue","minY","maxY","peakData","forEach","calibrateX","targetX","nbPeaks","gsdOptions","xFunction","function","yFunction","setMaxY","setMinY","filterXY","filters","logs","Date","now","filterFct","Filters","time","getNormalizedSpectrum","newSpectrum","title","dataType","meta","applyRangeSelectionFirst","structuredClone","unshift","isMonotonic","global","factory","module","exports","this","isString","isFiniteImpl","isNumber","uniq","strings","seen","item","hasOwnProperty","compareArray","assign","properties","keys","mulSafe","decimals","arg","getFractional","divSafe","den","invDen","QtyError","err","create","message","stack","throwIncompatibleUnits","left","right","UNITS","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","numerator","denominator","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","kind","unitKeys","indexOf","substr","getKinds","toLowerCase","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","unitSignatureVector","isBase","toBase","SIGN","INTEGER","SIGNED_INTEGER","FRACTION","FLOAT","EXPONENT","SCI_NUMBER","SIGNED_NUMBER","QTY_STRING","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","parse","trim","exec","scalarMatch","parseFloat","bottom","nx","UNIT_TEST_REGEX","test","parseUnits","PREFIX_REGEX","UNIT_REGEX","BOUNDARY_REGEX","UNIT_MATCH","UNIT_MATCH_REGEX","parsedUnitsCache","cached","unitMatch","normalizedUnits","globalParse","isQty","Qty","initValue","initUnits","assertValidConstructorArgs","baseScalar","_conversionCache","isDefinitionObject","updateBaseScalar","isTemperature","KINDS","knownSignature","isDegrees","subtractTemperatures","lhs","rhs","lhsUnits","rhsConverted","dstDegrees","getDegreeUnits","subtractTempDegrees","deg","tempDegrees","addTempDegrees","toDegrees","src","dst","srcDegK","toDegK","dstUnits","dstScalar","qty","toTemp","toTempK","isCompatible","isInverse","baseUnitCache","toBaseUnits","toFloat","isUnitless","toPrec","precQuantity","precRoundedResult","swiftConverter","srcUnits","srcQty","dstQty","eq","convert","converter","op1","op2","numdenscale","cleanTerms","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","direction","prefix","prefixValue","combinedPrefixValue","prop","compareTo","lt","lte","gt","gte","same","_isBase","NestedMap","childMap","defaultFormatter","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","outScalar","format","targetQty","stringifiedUnitsCache","stringified","isUnity","simplify","getOutputNames","unitNames","token","tokenNext","unitCounts","acc","unitCounter","unitCount","version","convertUnit","fromUnit","toUnit","normalize","testRegExp","ensureRegexp","string","parts","stringToRegexp","flags","getConvertedVariable","variable","newUnits","getXYSpectra","selectedSpectra","labels","xVariable","yVariable","split","variableNames","getPossibleVariable","variableName","convertibleUnits","regexpLabel","upper","hasOwn","lower","possibleFiltered","getXYSpectrum","Analysis","spectrumCallback","cache","ids","fromJSON","pushSpectrum","standardizeData","getXY","normalizedSpectra","getSpectrum","getXLabel","getYLabel","analysisOptions","appendDistinctParameter","appendDistinctValue","AnalysesManager","analysesManager","addAnalysis","getAnalysisIndex","getAnalyses","processedAnalysisIds","Set","has","getSpectra","getAnalysisBySpectrumId","getSpectrumById","getDistinctTitles","getDistinctUnits","getDistinctLabelUnits","normalizeLabelUnits","getDistinctLabels","getDistinctDataTypes","getDistinctMeta","removeAllAnalyses","removeAnalysis","originalLabel","originalUnits","search","ensureString","blob","encoding","TextDecoder","decode","decodeText","uint8","Uint8Array","buffer","byteOffset","byteLength","fatal","parseString","lowercase","gyromagneticRatioMHzT","getGyromagneticNucleus","nucleus","gyromagneticRatio","nucleusNumber","filteredNuclei","getGyromagneticRatio","realNucleus","fromEntries","_ref","quickSelectMedian","$","E","o","te","ne","ms","pageValue","chromatogram","re","O","logger","xFactor","info","yFactor","isXYdata","firstX","firstY","codePointAt","I","S","N","oe","isPeaktable","ce","ue","isXYAdata","se","Z","lastY","pe","ae","minX","maxX","minZ","maxZ","noise","ntuples","symbol","find","some","ie","nbContourLevels","fe","noiseMultiplier","zValue","lines","_","ee","T","segments","G","noContour","contourLines","minMax","observeFrequency","shiftOffsetVal","lastX","$NUC2","$NUC1","yType","xType","W","pageSymbol","J","intensity","de","twoD","wantXY","profiling","keepSpectra","dynamicTyping","le","K","charAt","vardim","varname","R","he","removeComments","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","withoutXY","noTrimRegExp","pt","ge","debug","flatten","children","datatable","dataClass","jcampDX","jcampCS","shiftOffsetNum","vartype","varform","page","sampleDescription","pop","be","fromJcamp","jcamp","addJcamp","converted","currentSpectrum","addInfoData","header","checkNumberOrArray","getExtremeValues","firstRow","firstLast","creatorNtuples","owner","origin","resInfo","varName","varType","varDim","isDependent","point","getFactorNumber","getBestFactor","onlyInteger","extremeValues","getNumber","rounded","peakTableCreator","rescaleAndEnsureInteger","newLine","pseudoDigits","SQZ_P","SQZ_N","DIF_P","DIF_N","DUP","maxLinelength","vectorEncoder","intervalX","xyEncoding","fixEncoding","squeezedEncoding","differenceEncoding","differenceDuplicateEncoding","commaSeparatedValuesEncoding","packedEncoding","separator","outputData","dataLength","squeezedDigit","mult","charCount","encodedData","encodedNumber","diffData","numDiff","differenceDigit","duplicateDigit","sqzDigits","charCodeAt","substring","diffDigits","dupDigits","xyDataCreator","fromVariables","forceNtuples","jcampOptions","xData","toJcamps","jcamps","getJcamp","toJcamp","toText","exportText","spectrums","endOfLine","fieldSeparator","maxNumberData","lineIndex","titles","aligned","text","JSGraph","fromText","sections","splitSections","sectionResults","section","headers","arrayGroups","scalarIndices","classifyColumns","records","record","group","extractFloatArray","raw","mergeSections","isHeaderLine","ARRAY_HEADER_PATTERN","fields","field","Map","currentGroup","groups","maxLength","merged","sectionRecord","getArray","fromZetasizer","buildVariables","extractMeta","cheminfo","extractCheminfo","extractTitle","settings","extractSettings","zetaPotentials","intensities","phases","sampleName","zpMeta","zetaPotential","zetaDeviation","mobility","getMobility","conductivity","derivedMeanCountRate","meanCountRate","qualityFactor","serialNumber","softwareVersion","instrument","manufacturer","model","software"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167]}