{"version":3,"file":"mass-spectrum.js","sources":["../node_modules/ml-spectra-processing/lib-esm/reim/reimAbsolute.js","../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-spectra-processing/lib-esm/x/getOutputArray.js","../node_modules/ml-spectra-processing/lib-esm/x/xAbsolute.js","../node_modules/ml-spectra-processing/lib-esm/x/xMedian.js","../node_modules/ml-spectra-processing/lib-esm/x/xAbsoluteMedian.js","../node_modules/ml-spectra-processing/lib-esm/x/xCheck.js","../node_modules/ml-spectra-processing/lib-esm/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xAbsoluteSum.js","../node_modules/ml-spectra-processing/lib-esm/x/xAdd.js","../node_modules/ml-spectra-processing/lib-esm/x/xApplyFunctionStr.js","../node_modules/ml-spectra-processing/lib-esm/x/xMultiply.js","../node_modules/ml-spectra-processing/lib-esm/x/xDotProduct.js","../node_modules/ml-spectra-processing/lib-esm/x/xCrossCorrelation.js","../node_modules/ml-spectra-processing/lib-esm/x/xAutoCorrelation.js","../node_modules/ml-spectra-processing/lib-esm/x/xBoxPlot.js","../node_modules/ml-spectra-processing/lib-esm/x/xBoxPlotWithOutliers.js","../node_modules/ml-spectra-processing/lib-esm/x/xCheckLengths.js","../node_modules/ml-spectra-processing/lib-esm/x/xCorrelation.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/matrix.js","../node_modules/ml-matrix/matrix.mjs","../node_modules/ml-spectra-processing/lib-esm/x/xCostMatrix.js","../node_modules/ml-spectra-processing/lib-esm/x/xCumulative.js","../node_modules/ml-spectra-processing/lib-esm/x/xMean.js","../node_modules/ml-spectra-processing/lib-esm/x/xVariance.js","../node_modules/ml-spectra-processing/lib-esm/x/xStandardDeviation.js","../node_modules/ml-spectra-processing/lib-esm/x/xDistributionStats.js","../node_modules/ml-spectra-processing/lib-esm/x/xDivide.js","../node_modules/ml-spectra-processing/lib-esm/x/xEnsureFloat64.js","../node_modules/ml-spectra-processing/lib-esm/x/xGetTargetIndex.js","../node_modules/fft.js/lib/fft.js","../node_modules/ml-spectra-processing/lib-esm/utils/createArray.js","../node_modules/ml-spectra-processing/lib-esm/utils/createFromToArray.js","../node_modules/ml-xsadd/lib-esm/XSadd.js","../node_modules/ml-spectra-processing/lib-esm/utils/createRandomArray.js","../node_modules/ml-spectra-processing/lib-esm/utils/createStepArray.js","../node_modules/ml-spectra-processing/lib-esm/utils/getRescaler.js","../node_modules/ml-spectra-processing/lib-esm/utils/isPowerOfTwo.js","../node_modules/ml-spectra-processing/lib-esm/utils/nextPowerOfTwo.js","../node_modules/ml-spectra-processing/lib-esm/utils/recursiveResolve.js","../node_modules/ml-spectra-processing/lib-esm/utils/recursiveUntypeArrays.js","../node_modules/ml-spectra-processing/lib-esm/utils/stringify.js","../node_modules/ml-spectra-processing/lib-esm/x/xSubtract.js","../node_modules/ml-spectra-processing/lib-esm/utils/calculateAdaptiveWeights.js","../node_modules/ml-spectra-processing/lib-esm/x/xHilbertTransform.js","../node_modules/ml-spectra-processing/lib-esm/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xHistogram.js","../node_modules/ml-spectra-processing/lib-esm/x/xIsEquallySpaced.js","../node_modules/ml-spectra-processing/lib-esm/x/xIsMonotonic.js","../node_modules/ml-spectra-processing/lib-esm/x/xMassCenterVectorSimilarity.js","../node_modules/ml-spectra-processing/lib-esm/x/xMaxAbsoluteValue.js","../node_modules/ml-spectra-processing/lib-esm/x/xMaxIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xMeanAbsoluteError.js","../node_modules/ml-spectra-processing/lib-esm/x/xMeanSquaredError.js","../node_modules/ml-spectra-processing/lib-esm/x/xMeanWeighted.js","../node_modules/ml-spectra-processing/lib-esm/x/xMedianAbsoluteDeviation.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinIndex.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinMaxDelta.js","../node_modules/ml-spectra-processing/lib-esm/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib-esm/x/xMode.js","../node_modules/ml-spectra-processing/lib-esm/x/utils/erfcinv.js","../node_modules/ml-spectra-processing/lib-esm/x/utils/simpleNormInv.js","../node_modules/ml-spectra-processing/lib-esm/x/xNoiseSanPlot.js","../node_modules/ml-spectra-processing/lib-esm/x/xNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib-esm/x/xNorm.js","../node_modules/ml-spectra-processing/lib-esm/x/xSum.js","../node_modules/ml-spectra-processing/lib-esm/x/xNormed.js","../node_modules/ml-spectra-processing/lib-esm/x/xPadding.js","../node_modules/ml-spectra-processing/lib-esm/x/xParetoNormalization.js","../node_modules/ml-spectra-processing/lib-esm/x/xRobustDistributionStats.js","../node_modules/ml-spectra-processing/lib-esm/x/xRemoveOutliersIQR.js","../node_modules/ml-spectra-processing/lib-esm/x/xRescale.js","../node_modules/ml-spectra-processing/lib-esm/x/xRolling.js","../node_modules/ml-spectra-processing/lib-esm/x/xRollingAverage.js","../node_modules/ml-spectra-processing/lib-esm/x/xRollingMax.js","../node_modules/ml-spectra-processing/lib-esm/x/xRollingMedian.js","../node_modules/ml-spectra-processing/lib-esm/x/xRollingMin.js","../node_modules/ml-spectra-processing/lib-esm/x/xRotate.js","../node_modules/ml-spectra-processing/lib-esm/x/xSampling.js","../node_modules/ml-spectra-processing/lib-esm/x/xSequentialFillFromStep.js","../node_modules/ml-spectra-processing/lib-esm/x/xSequentialFillFromTo.js","../node_modules/ml-spectra-processing/lib-esm/x/xSortAscending.js","../node_modules/ml-spectra-processing/lib-esm/x/xSortDescending.js","../node_modules/ml-spectra-processing/lib-esm/x/xUniqueSorted.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCholeskySolver.js","../node_modules/ml-spectra-processing/lib-esm/utils/addWeights.js","../node_modules/ml-spectra-processing/lib-esm/utils/createSystemMatrix.js","../node_modules/ml-spectra-processing/lib-esm/x/xWhittakerSmoother.js","../node_modules/ml-spectra-processing/lib-esm/reim/reimPhaseCorrection.js","../node_modules/ml-spectra-processing/lib-esm/reim/reimAutoPhaseCorrection.js","../node_modules/ml-spectra-processing/lib-esm/reim/reimFFT.js","../node_modules/ml-spectra-processing/lib-esm/reim/reimZeroFilling.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyAlign.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyCheck.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyCovariance.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMaxYPoint.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyCumulativeDistributionStatistics.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyEnsureFloat64.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyEnsureGrowingX.js","../node_modules/ml-spectra-processing/lib-esm/zones/zonesNormalize.js","../node_modules/ml-spectra-processing/lib-esm/zones/zonesWithPoints.js","../node_modules/ml-spectra-processing/lib-esm/xy/utils/equallySpacedSlot.js","../node_modules/ml-spectra-processing/lib-esm/xy/utils/integral.js","../node_modules/ml-spectra-processing/lib-esm/xy/utils/equallySpacedSmooth.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyEquallySpaced.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyExtract.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyFilter.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyFilterMinYValue.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyFilterTopYValues.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyFilterX.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyFilterXPositive.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyFindClosestPoint.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyGetNMaxY.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyGrowingX.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyIntegral.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyIntegration.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyJoinX.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMassCenter.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMassCenterVector.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMaxClosestYPoint.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMaximaY.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMaxMerge.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMaxY.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMedian.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMergeByCentroids.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMinClosestYPoint.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMinimaY.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyMinYPoint.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyPeakInfo.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyRealMaxYPoint.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyRealMinYPoint.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyReduce.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyReduceNonContinuous.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyRolling.js","../node_modules/ml-spectra-processing/lib-esm/xy/xySetYValue.js","../node_modules/ml-spectra-processing/lib-esm/xy/xySortX.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyToXYArray.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyToXYObject.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyUniqueX.js","../node_modules/ml-spectra-processing/lib-esm/xy/xyWeightedMerge.js","../node_modules/ml-spectra-processing/lib-esm/xy2/xy2ToXY.js","../node_modules/ml-spectra-processing/lib-esm/xreim/xreimSortX.js","../node_modules/ml-spectra-processing/lib-esm/xreim/xreimZeroFilling.js","../node_modules/ml-spectra-processing/lib-esm/xyArray/utils/getSlots.js","../node_modules/ml-spectra-processing/lib-esm/xyArray/xyArrayAlign.js","../node_modules/ml-spectra-processing/lib-esm/xyArray/xyArrayWeightedMerge.js","../node_modules/ml-spectra-processing/lib-esm/xyArray/utils/getSlotsToFirst.js","../node_modules/ml-spectra-processing/lib-esm/xyArray/xyArrayAlignToFirst.js","../node_modules/ml-spectra-processing/lib-esm/xyArray/xyArrayMerge.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectCheck.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectMaxXPoint.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectMinXPoint.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectBestPoints.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectJoinX.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectMaxYPoint.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectMinMaxValues.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectMinYPoint.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectNormedY.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectSlotX.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectSortX.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectSumY.js","../node_modules/ml-spectra-processing/lib-esm/xyObject/xyObjectToXY.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixAbsoluteMedian.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCreateEmpty.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixApplyNumericalEncoding.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixAutoCorrelation.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixBoxPlot.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCenterZMean.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixClone.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixColumnsCorrelation.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCuthillMckee.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixCheckRanges.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixGetSubMatrix.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixMinMaxAbsoluteZ.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixMinMaxZ.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixHistogram.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixMaxAbsoluteZ.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixToArray.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixMedian.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixNumericalDecoding.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixNumericalEncoding.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixPQN.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixSetSubMatrix.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixZPivotRescale.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixZRescale.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixZRescalePerColumn.js","../node_modules/ml-spectra-processing/lib-esm/matrix/matrixTranspose.js","../node_modules/common-spectrum/lib/jsgraph/addStyle.js","../node_modules/common-spectrum/lib/jsgraph/colors.js","../node_modules/common-spectrum/lib/jsgraph/getJSGraph.js","../node_modules/common-spectrum/lib/jsgraph/getNormalizationAnnotations.js","../node_modules/ml-signal-processing/lib/filters/scaling/centerMean.js","../node_modules/ml-signal-processing/lib/filters/scaling/centerMedian.js","../node_modules/ml-signal-processing/lib/filters/x/fromTo.js","../node_modules/ml-signal-processing/lib/filters/scaling/normed.js","../node_modules/ml-signal-processing/lib/filters/scaling/divideBySD.js","../node_modules/ml-signal-processing/lib/filters/scaling/rescale.js","../node_modules/ml-signal-processing/lib/filters/scaling/paretoNormalization.js","../node_modules/ml-airpls/src/choleskySolver.js","../node_modules/cuthill-mckee/cuthill-mckee.js","../node_modules/ml-airpls/src/utils.js","../node_modules/ml-airpls/src/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/baselines/src/airPLS.js","../node_modules/ml-regression-base/lib-esm/checkArrayLength.js","../node_modules/ml-regression-base/lib-esm/BaseRegression.js","../node_modules/ml-regression-base/lib-esm/maybeToPrecision.js","../node_modules/ml-regression-polynomial/lib-esm/index.js","../node_modules/ml-baseline-correction-regression/src/index.js","../node_modules/baselines/src/iterativePolynomial.js","../node_modules/baselines/src/rollingAverage.js","../node_modules/ml-rolling-ball-baseline/lib-esm/rollingBall.js","../node_modules/baselines/src/rollingBall.js","../node_modules/baselines/src/rollingMedian.js","../node_modules/ml-signal-processing/lib/filters/baseline/airPLSBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/iterativePolynomialBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingAverageBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingBallBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingMedianBaseline.js","../node_modules/ml-savitzky-golay-generalized/lib-esm/index.js","../node_modules/ml-signal-processing/lib/filters/sg/firstDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/secondDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/thirdDerivative.js","../node_modules/ml-signal-processing/lib/filters/sg/savitzkyGolay.js","../node_modules/ml-signal-processing/lib/filters/x/ensureGrowing.js","../node_modules/ml-signal-processing/lib/filters/x/reverseIfNeeded.js","../node_modules/ml-signal-processing/lib/filters/x/equallySpaced.js","../node_modules/ml-signal-processing/lib/filters/x/filterX.js","../node_modules/ml-signal-processing/lib/filters/x/setMaxX.js","../node_modules/ml-signal-processing/lib/filters/x/setMinX.js","../node_modules/ml-gsd/lib/utils/optimizeTop.js","../node_modules/ml-gsd/lib/gsd.js","../node_modules/ml-peak-shape-generator/lib-esm/util/constants.js","../node_modules/ml-peak-shape-generator/lib-esm/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzianDispersive/LorentzianDispersive.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/generalizedLorentzian/GeneralizedLorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/getShape1D.js","../node_modules/ml-spectra-fitting/lib/shapes/getSumOfShapes.js","../node_modules/ml-spectra-fitting/lib/util/assert.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/DefaultParameters.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/getInternalPeaks.js","../node_modules/ml-levenberg-marquardt/lib/check_options.js","../node_modules/ml-levenberg-marquardt/lib/error_calculation.js","../node_modules/ml-levenberg-marquardt/lib/gradient_function.js","../node_modules/ml-levenberg-marquardt/lib/step.js","../node_modules/ml-levenberg-marquardt/lib/levenberg_marquardt.js","../node_modules/ml-direct/src/util/antiLowerConvexHull.js","../node_modules/ml-direct/src/index.js","../node_modules/ml-spectra-fitting/lib/util/wrappers/directOptimization.js","../node_modules/ml-spectra-fitting/lib/util/selectMethod.js","../node_modules/ml-spectra-fitting/lib/index.js","../node_modules/ml-gsd/lib/utils/addMissingShape.js","../node_modules/ml-gsd/lib/utils/groupPeaks.js","../node_modules/ml-gsd/lib/post/optimizePeaksWithLogs.js","../node_modules/ml-gsd/lib/post/optimizePeaks.js","../node_modules/ml-gsd/lib/utils/addMissingIDs.js","../node_modules/ml-gsd/lib/post/joinBroadPeaks.js","../node_modules/ml-gsd/lib/post/broadenPeaks.js","../node_modules/ml-gsd/lib/utils/setShape.js","../node_modules/ml-signal-processing/lib/filters/x/calibrateX.js","../node_modules/ml-signal-processing/lib/filters/x/xFunction.js","../node_modules/ml-signal-processing/lib/filters/scaling/yFunction.js","../node_modules/ml-signal-processing/lib/filters/y/setMaxY.js","../node_modules/ml-signal-processing/lib/filters/y/setMinY.js","../node_modules/ml-signal-processing/lib/filterXY.js","../node_modules/common-spectrum/lib/util/getNormalizedSpectrum.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/lib/util/convertUnit.js","../node_modules/common-spectrum/lib/util/ensureRegexp.js","../node_modules/common-spectrum/lib/util/getConvertedVariable.js","../node_modules/common-spectrum/lib/util/getXYSpectra.js","../node_modules/common-spectrum/lib/util/getXYSpectrum.js","../node_modules/common-spectrum/lib/Analysis.js","../node_modules/common-spectrum/lib/util/appendDistinctParameter.js","../node_modules/common-spectrum/lib/util/appendDistinctValue.js","../node_modules/common-spectrum/lib/AnalysesManager.js","../node_modules/isutf8/dist/index.esm.js","../node_modules/ensure-string/lib-esm/index.js","../node_modules/dynamic-typing/lib-esm/parseString.js","../node_modules/gyromagnetic-ratio/lib-esm/gyromagneticRatioMHzT.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticNucleus.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticRatio.js","../node_modules/gyromagnetic-ratio/lib-esm/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/jcampconverter/dist/jcampconverter.js","../node_modules/common-spectrum/lib/from/fromJcamp.js","../node_modules/xy-parser/lib-esm/parse.js","../node_modules/xy-parser/lib-esm/index.js","../node_modules/convert-to-jcamp/lib-esm/utils/addInfoData.js","../node_modules/convert-to-jcamp/lib-esm/utils/checkMatrix.js","../node_modules/convert-to-jcamp/lib-esm/utils/checkNumberOrArray.js","../node_modules/convert-to-jcamp/lib-esm/utils/getExtremeValues.js","../node_modules/convert-to-jcamp/lib-esm/creatorNtuples.js","../node_modules/convert-to-jcamp/lib-esm/utils/getFactorNumber.js","../node_modules/convert-to-jcamp/lib-esm/utils/getBestFactor.js","../node_modules/convert-to-jcamp/lib-esm/utils/getNumber.js","../node_modules/convert-to-jcamp/lib-esm/utils/peakTableCreator.js","../node_modules/convert-to-jcamp/lib-esm/utils/rescaleAndEnsureInteger.js","../node_modules/convert-to-jcamp/lib-esm/utils/vectorEncoder.js","../node_modules/convert-to-jcamp/lib-esm/utils/xyDataCreator.js","../node_modules/convert-to-jcamp/lib-esm/fromJSON.js","../node_modules/convert-to-jcamp/lib-esm/fromVariables.js","../node_modules/common-spectrum/lib/to/toJcamps.js","../node_modules/common-spectrum/lib/to/toJcamp.js","../node_modules/common-spectrum/lib/util/peakPicking.js","../node_modules/common-spectrum/lib/index.js","../node_modules/ms-spectrum/lib/src/getBestPeaks.js","../node_modules/atom-sorter/lib/src/index.js","../node_modules/chemical-elements/lib/src/elementsAndIsotopes.js","../node_modules/chemical-elements/lib/src/elements.js","../node_modules/chemical-elements/lib/src/elementsAndIsotopesObject.js","../node_modules/chemical-elements/lib/src/elementsAndStableIsotopes.js","../node_modules/chemical-elements/lib/src/elementsAndStableIsotopesObject.js","../node_modules/chemical-elements/lib/src/elementsObject.js","../node_modules/chemical-elements/lib/src/isotopesObject.js","../node_modules/chemical-elements/lib/src/stableIsotopesObject.js","../node_modules/chemical-elements/lib/src/unsaturationsObject.js","../node_modules/chemical-groups/lib/src/groupsObject.js","../node_modules/chemical-groups/lib/src/groupsToSequence.js","../node_modules/mf-parser/lib/src/Kind.js","../node_modules/mf-parser/lib/src/util/parseCharge.js","../node_modules/mf-parser/lib/src/parse.js","../node_modules/mf-parser/lib/src/util/subSuperscript.js","../node_modules/mf-parser/lib/src/Format.js","../node_modules/mf-parser/lib/src/util/formatCharge.js","../node_modules/mf-parser/lib/src/util/improveLinesForDisplay.js","../node_modules/mf-parser/lib/src/util/toDisplay.js","../node_modules/mf-parser/lib/src/util/isMF.js","../node_modules/mf-parser/lib/src/Style.js","../node_modules/mf-parser/lib/src/util/toHtml.js","../node_modules/mf-parser/lib/src/ensureCase.js","../node_modules/mf-parser/lib/src/util/flatten.js","../node_modules/mf-parser/lib/src/util/getIsotopeRatioInfo.js","../node_modules/mf-parser/lib/src/util/getEA.js","../node_modules/mf-parser/lib/src/util/getElements.js","../node_modules/mf-parser/lib/src/util/getNumberOfIsotopologues.js","../node_modules/mf-parser/lib/src/util/partToAtoms.js","../node_modules/mf-parser/lib/src/util/partToMF.js","../node_modules/mf-parser/lib/src/util/getInfoInternal.js","../node_modules/mf-parser/lib/src/util/getIsotopesInfo.js","../node_modules/mf-parser/lib/src/util/partsToDisplay.js","../node_modules/mf-parser/lib/src/util/partsToMF.js","../node_modules/mf-parser/lib/src/util/toParts.js","../node_modules/mf-parser/lib/src/util/toText.js","../node_modules/mf-parser/lib/src/MFInternal.js","../node_modules/mf-parser/lib/src/MF.js","../node_modules/mf-parser/lib/src/parseToHtml.js","../node_modules/mf-matcher/lib/src/unsaturationMatcher.js","../node_modules/mf-matcher/lib/src/generalMatcher.js","../node_modules/mf-utilities/lib/src/ensureUppercaseSequence.js","../node_modules/mf-utilities/lib/src/getEutrophicationPotential.js","../node_modules/mf-utilities/lib/src/getMsem.js","../node_modules/mf-utilities/lib/src/getMsInfo.js","../node_modules/mf-utilities/lib/src/getRangesForFragment.js","../node_modules/mf-utilities/lib/src/MFRange.js","../node_modules/mf-utilities/lib/src/mfDiff.js","../node_modules/mf-utilities/lib/src/preprocessIonizations.js","../node_modules/mf-utilities/lib/src/preprocessRanges.js","../node_modules/mf-matcher/lib/src/msemMatcher.js","../node_modules/mf-finder/lib/src/TargetMassCache.js","../node_modules/mf-finder/lib/src/findMFsSync.js","../node_modules/mf-finder/lib/src/findMFs.js","../node_modules/mf-finder/lib/src/mfIncluded.js","../node_modules/ms-spectrum/lib/src/from/fromMonoisotopicMass.js","../node_modules/ms-spectrum/lib/src/getPeaks.js","../node_modules/ms-spectrum/lib/src/getFragmentPeaks.js","../node_modules/ms-spectrum/lib/src/getMassRemainder.js","../node_modules/peaks-similarity/lib-esm/calculateOverlapFromDiff.js","../node_modules/peaks-similarity/lib-esm/checkPeaks.js","../node_modules/peaks-similarity/lib-esm/extract.js","../node_modules/peaks-similarity/lib-esm/getCommonArray.js","../node_modules/ml-stat/array.js","../node_modules/ml-stat/index.js","../node_modules/peaks-similarity/lib-esm/normalize.js","../node_modules/peaks-similarity/lib-esm/commonExtractAndNormalize.js","../node_modules/peaks-similarity/lib-esm/extractAndNormalize.js","../node_modules/peaks-similarity/lib-esm/getIntersection.js","../node_modules/peaks-similarity/lib-esm/index.js","../node_modules/ms-spectrum/lib/src/getPeakChargeBySimilarity.js","../node_modules/ms-spectrum/lib/src/getPeaksWithCharge.js","../node_modules/ms-spectrum/lib/src/isContinuous.js","../node_modules/ms-spectrum/lib/src/peakPicking.js","../node_modules/ml-regression-simple-linear/lib-esm/index.js","../node_modules/ml-regression-power/src/index.js","../node_modules/ms-spectrum/lib/src/peaksWidth.js","../node_modules/ms-spectrum/lib/src/Spectrum.js","../node_modules/ms-spectrum/lib/src/MSComparator.js","../node_modules/ms-spectrum/lib/src/jsgraph/getPeaksAnnotation.js","../node_modules/ms-spectrum/lib/src/jsgraph/index.js","../lib/jsgraph/getAnnotations.js","../lib/from/utils/spectrumCallback.js","../lib/from/fromText.js","../lib/from/fromJcamp.js","../lib/index.js"],"sourcesContent":["/**\n * Calculates reimAbsolute value of a complex spectrum.\n * @param data - complex spectrum\n * @returns - reimAbsolute value\n */\nexport function reimAbsolute(data) {\n    const length = data.re.length;\n    const re = data.re;\n    const im = data.im;\n    const newArray = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        newArray[i] = Math.hypot(re[i], im[i]);\n    }\n    return newArray;\n}\n//# sourceMappingURL=reimAbsolute.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 * 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","/**\n * This function returns an array with absolute values.\n * @param array - array of data\n * @returns - array with absolute values\n */\nexport function xAbsolute(array) {\n    const tmpArray = array.slice();\n    for (let i = 0; i < tmpArray.length; i++) {\n        if (tmpArray[i] < 0)\n            tmpArray[i] *= -1;\n    }\n    return tmpArray;\n}\n//# sourceMappingURL=xAbsolute.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 { xAbsolute } from './xAbsolute';\nimport { xMedian } from './xMedian';\n/**\n * This function calculates the median after taking the xAbsolute values of the points.\n * @param array - the array for which we want to calculate the absolute value\n * @returns - median\n */\nexport function xAbsoluteMedian(array) {\n    return xMedian(xAbsolute(array));\n}\n//# sourceMappingURL=xAbsoluteMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - Array to check.\n * @param options - Additional checks.\n */\nexport function xCheck(input, options = {}) {\n    const { minLength } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    if (typeof input[0] !== 'number') {\n        throw new TypeError('input must contain numbers');\n    }\n    if (minLength && input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n * @param array - array of numbers\n * @param target - target\n * @param options\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from './xFindClosestIndex';\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n * @param x - array of numbers\n * @param options - Options\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex } = options;\n    const { from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\nexport function xAbsoluteSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sum = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sum += Math.abs(array[i]);\n    }\n    return sum;\n}\n//# sourceMappingURL=xAbsoluteSum.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param array1 - the first array\n * @param array2 - the second array or number\n * @returns the result of the addition\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xAdd.js.map","/**\n * Will apply a function on each element of the array described as a string\n * By default we will use as variable 'x'\n * In front of sequence of lowercase we will add 'Math.'. This allows to write\n * `sin(x) + cos(x)` and it will be replace internally by (x) => (Math.sin(x) + Math.cos(x))\n * @param array\n * @param options\n * @returns\n */\nexport function xApplyFunctionStr(array, options = {}) {\n    const { variableLabel = 'x', fctString = variableLabel } = options;\n    const fct = new Function(variableLabel, `return Number(${fctString\n        .replaceAll(/(?<before>^|\\W)(?<after>[\\da-z]{2,}\\()/g, '$<before>Math.$<after>')\n        .replaceAll('Math.Math', 'Math')})`);\n    const toReturn = Float64Array.from(array);\n    for (let i = 0; i < array.length; i++) {\n        toReturn[i] = fct(array[i]);\n        if (Number.isNaN(toReturn[i])) {\n            throw new Error(`The callback ${fctString} does not return a number: ${array[i]}`);\n        }\n    }\n    return toReturn;\n}\n//# sourceMappingURL=xApplyFunctionStr.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from './getOutputArray';\n/**\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array\n * @param options - options\n */\nexport function xMultiply(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xMultiply.js.map","import { xMultiply } from './xMultiply';\n/**\n * Dot product between two arrays.\n * @param A - First array.\n * @param B - Second array.\n */\nexport function xDotProduct(A, B) {\n    const g = xMultiply(A, B);\n    let result = 0;\n    for (let i = 0; i < A.length; i++) {\n        result += g[i];\n    }\n    return result;\n}\n//# sourceMappingURL=xDotProduct.js.map","import { xDotProduct } from './xDotProduct';\n/**\n * Calculates the cross-correlation between 2 arrays\n * @param A - fixed array\n * @param B - sweeping array\n * @param options - Options\n */\nexport function xCrossCorrelation(A, B, options = {}) {\n    const { tau = 1, lag = A.length - 1 } = options;\n    const result = new Float64Array(1 + (2 * lag) / tau);\n    if (A.length === B.length) {\n        const n = B.length;\n        const g = new Float64Array(2 * n);\n        const q = new Float64Array(2 * n);\n        for (let i = 0; i < n; i++) {\n            q[n + i] = B[i];\n        }\n        for (let i = n * 2 - (tau - 1); i > 0; i -= tau) {\n            let k = 0;\n            for (let j = i; j < n * 2; j++) {\n                g[k] = q[j];\n                k++;\n            }\n            const w = [];\n            for (let l = 0; l < n; l++) {\n                w[l] = g[l];\n            }\n            result[(k - (n - lag)) / tau] = xDotProduct(A, w);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xCrossCorrelation.js.map","import { xCrossCorrelation } from './xCrossCorrelation';\n/**\n * Calculates the auto-correlation of an array\n * @param A - the array for which to calculate the auto-correlation\n * @param options - Options\n */\nexport function xAutoCorrelation(A, options = {}) {\n    return xCrossCorrelation(A, A, options);\n}\n//# sourceMappingURL=xAutoCorrelation.js.map","import { xCheck } from './xCheck';\n/**\n * Calculating the box plot of the array\n * This function will interpolate the values and use the inclusive algorithm\n * @param array - data\n * @param options\n * @returns - q1, median, q3, min, max\n */\nexport function xBoxPlot(array) {\n    xCheck(array);\n    // duplicate the array to avoid modifying the original one\n    // and sort typed array that is much faster than sorting a normal array\n    array = Float64Array.from(array).sort();\n    const posQ1 = (array.length - 1) / 4;\n    const posQ3 = (array.length - 1) * (3 / 4);\n    const medianPos = (array.length - 1) / 2;\n    const q1MinProportion = posQ1 % 1;\n    const q3MinProportion = posQ3 % 1;\n    const medianMinProportion = medianPos % 1;\n    return {\n        min: array[0],\n        q1: q1MinProportion === 0\n            ? array[posQ1]\n            : array[posQ1 >> 0] * (1 - q1MinProportion) +\n                array[(posQ1 >> 0) + 1] * q1MinProportion,\n        median: medianMinProportion === 0\n            ? array[medianPos]\n            : array[medianPos >> 0] * (1 - medianMinProportion) +\n                array[(medianPos >> 0) + 1] * medianMinProportion,\n        q3: q3MinProportion === 0\n            ? array[posQ3]\n            : array[posQ3 >> 0] * (1 - q3MinProportion) +\n                array[(posQ3 >> 0) + 1] * q3MinProportion,\n        max: array.at(-1),\n    };\n}\n//# sourceMappingURL=xBoxPlot.js.map","import { xBoxPlot } from './xBoxPlot';\n/**\n * Calculating the box plot of the array with outliers\n * Values are outliers if they are below Q1 - 1.5 * IQR or above Q3 + 1.5 * IQR\n * @param array - data\n * @returns - q1, median, q3, min, max, outliers\n */\nexport function xBoxPlotWithOutliers(array) {\n    const boxPlot = xBoxPlot(array);\n    const iqr = boxPlot.q3 - boxPlot.q1;\n    const lowerWhisker = boxPlot.q1 - 1.5 * iqr;\n    const upperWhisker = boxPlot.q3 + 1.5 * iqr;\n    const outliers = [];\n    let minWhisker = boxPlot.median;\n    let maxWhisker = boxPlot.median;\n    for (const value of array) {\n        if (value < lowerWhisker || value > upperWhisker) {\n            outliers.push(value);\n        }\n        else {\n            if (value < minWhisker)\n                minWhisker = value;\n            if (value > maxWhisker)\n                maxWhisker = value;\n        }\n    }\n    const info = {\n        ...boxPlot,\n        lowerWhisker,\n        upperWhisker,\n        minWhisker,\n        maxWhisker,\n        iqr,\n        outliers,\n    };\n    return info;\n}\n//# sourceMappingURL=xBoxPlotWithOutliers.js.map","/**\n * Check that two arrays have the same length.\n * @param array1 - First array.\n * @param array2 - Second array.\n */\nexport function xCheckLengths(array1, array2) {\n    if (array1.length !== array2.length) {\n        throw new TypeError('length of array1 and array2 must be identical');\n    }\n}\n//# sourceMappingURL=xCheckLengths.js.map","/**\n * Calculates the correlation between 2 vectors\n * https://en.wikipedia.org/wiki/Correlation_and_dependence\n * @param A - first array\n * @param B - sencond array\n */\nexport function xCorrelation(A, B) {\n    const n = A.length;\n    let sumA = 0;\n    let sumA2 = 0;\n    let sumB = 0;\n    let sumB2 = 0;\n    let sumAB = 0;\n    for (let i = 0; i < n; i++) {\n        const a = A[i];\n        const b = B[i];\n        sumA += a;\n        sumA2 += a ** 2;\n        sumB += b;\n        sumB2 += b ** 2;\n        sumAB += a * b;\n    }\n    return ((n * sumAB - sumA * sumB) /\n        (Math.sqrt(n * sumA2 - sumA ** 2) * Math.sqrt(n * sumB2 - sumB ** 2)));\n}\n//# sourceMappingURL=xCorrelation.js.map","import { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport { max as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isAnyArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray.isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray.isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nfunction newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nfunction checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n\nfunction sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nfunction centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nfunction centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nfunction centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nfunction getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nfunction getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nfunction getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n\nclass AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isDistance() {\n    if (!this.isSymmetric()) return false;\n\n    for (let i = 0; i < this.rows; i++) {\n      if (this.get(i, i) !== 0) return false;\n    }\n\n    return true;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    switch (type) {\n      case 'max':\n        return this.max();\n      case 'frobenius':\n        return Math.sqrt(this.dot(this));\n      default:\n        throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  mpow(scalar) {\n    if (!this.isSquare()) {\n      throw new RangeError('Matrix must be square');\n    }\n    if (!Number.isInteger(scalar) || scalar < 0) {\n      throw new RangeError('Exponent must be a non-negative integer');\n    }\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\n    let result = Matrix.eye(this.rows);\n    let bb = this;\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\n    for (let e = scalar; e >= 1; e /= 2) {\n      if ((e & 1) !== 0) {\n        result = result.mmul(bb);\n      }\n      bb = bb.mmul(bb);\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      result = result.setSubMatrix(c11, 0, 0);\n      result = result.setSubMatrix(c12, c11.rows, 0);\n      result = result.setSubMatrix(c21, 0, c11.columns);\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min,\n          max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n  }\n\n  /**\n   * @template {AbstractMatrix} M\n   * @param {AbstractMatrix} from\n   * @param {M} to\n   * @return {M}\n   */\n  static copy(from, to) {\n    for (const [row, column, value] of from.entries()) {\n      to.set(row, column, value);\n    }\n\n    return to;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield [row, column, value]\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *entries() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield [row, col, this.get(row, col)];\n      }\n    }\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield value\n   * @returns {Generator<number, void, void>}\n   */\n  *values() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield this.get(row, col);\n      }\n    }\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n  /**\n   * @type {Float64Array[]}\n   */\n  data;\n\n  /**\n   * Init an empty matrix\n   * @param {number} nRows\n   * @param {number} nColumns\n   */\n  #initData(nRows, nColumns) {\n    this.data = [];\n\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\n      for (let i = 0; i < nRows; i++) {\n        this.data.push(new Float64Array(nColumns));\n      }\n    } else {\n      throw new TypeError('nColumns must be a positive integer');\n    }\n\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      this.#initData(nRows.rows, nRows.columns);\n      Matrix.copy(nRows, this);\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      this.#initData(nRows, nColumns);\n    } else if (isAnyArray.isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n\n      this.rows = nRows;\n      this.columns = nColumns;\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n  /** @type {Matrix} */\n  #matrix;\n\n  get size() {\n    return this.#matrix.size;\n  }\n\n  get rows() {\n    return this.#matrix.rows;\n  }\n\n  get columns() {\n    return this.#matrix.columns;\n  }\n\n  get diagonalSize() {\n    return this.rows;\n  }\n\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isSymmetricMatrix(value) {\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static zeros(diagonalSize) {\n    return new this(diagonalSize);\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static ones(diagonalSize) {\n    return new this(diagonalSize).fill(1);\n  }\n\n  /**\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n   * @return {this}\n   */\n  constructor(diagonalSize) {\n    super();\n\n    if (Matrix.isMatrix(diagonalSize)) {\n      if (!diagonalSize.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n\n      this.#matrix = Matrix.copy(\n        diagonalSize,\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\n      );\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\n    } else {\n      this.#matrix = new Matrix(diagonalSize);\n\n      if (!this.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n    }\n  }\n\n  clone() {\n    const matrix = new SymmetricMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  toMatrix() {\n    return new Matrix(this);\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.#matrix.get(rowIndex, columnIndex);\n  }\n  set(rowIndex, columnIndex, value) {\n    // symmetric set\n    this.#matrix.set(rowIndex, columnIndex, value);\n    this.#matrix.set(columnIndex, rowIndex, value);\n\n    return this;\n  }\n\n  removeCross(index) {\n    // symmetric remove side\n    this.#matrix.removeRow(index);\n    this.#matrix.removeColumn(index);\n\n    return this;\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    const row = array.slice();\n    row.splice(index, 1);\n\n    this.#matrix.addRow(index, row);\n    this.#matrix.addColumn(index, array);\n\n    return this;\n  }\n\n  /**\n   * @param {Mask[]} mask\n   */\n  applyMask(mask) {\n    if (mask.length !== this.diagonalSize) {\n      throw new RangeError('Mask size do not match with matrix size');\n    }\n\n    // prepare sides to remove from matrix from mask\n    /** @type {number[]} */\n    const sidesToRemove = [];\n    for (const [index, passthroughs] of mask.entries()) {\n      if (passthroughs) continue;\n      sidesToRemove.push(index);\n    }\n    // to remove from highest to lowest for no mutation shifting\n    sidesToRemove.reverse();\n\n    // remove sides\n    for (const sideIndex of sidesToRemove) {\n      this.removeCross(sideIndex);\n    }\n\n    return this;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * iterate from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 1 2 3 4\n   * B 2 5 6 7\n   * C 3 6 8 9\n   * D 4 7 9 10\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n   *\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n\n    /** @type {number[]} */\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   * @return {SymmetricMatrix}\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n    // compactSize = (sideSize * (sideSize + 1)) / 2\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new SymmetricMatrix(diagonalSize);\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return matrix;\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield [row, column, value]\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightEntries() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield [row, col, value];\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield value\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightValues() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield value;\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isDistanceMatrix(value) {\n    return (\n      SymmetricMatrix.isSymmetricMatrix(value) &&\n      value.klassSubType === 'DistanceMatrix'\n    );\n  }\n\n  constructor(sideSize) {\n    super(sideSize);\n\n    if (!this.isDistance()) {\n      throw new TypeError('Provided arguments do no produce a distance matrix');\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    // distance matrix diagonal is 0\n    if (rowIndex === columnIndex) value = 0;\n\n    return super.set(rowIndex, columnIndex, value);\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    // ensure distance\n    array = array.slice();\n    array[index] = 0;\n\n    return super.addCross(index, array);\n  }\n\n  toSymmetricMatrix() {\n    return new SymmetricMatrix(this);\n  }\n\n  clone() {\n    const matrix = new DistanceMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      if (row === col) continue;\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * no diagonal (only zeros)\n   * iterable from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 0 1 2 3\n   * B 1 0 4 5\n   * C 2 4 0 6\n   * D 3 5 6 0\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n   *\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n    /** @type {number[]} */\n    const compact = new Array(compactLength);\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n\n    if (compactSize === 0) {\n      return new this(0);\n    }\n\n    // compactSize in Natural integer range ]0;∞]\n    // compactSize = (sideSize * (sideSize - 1)) / 2\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new this(diagonalSize);\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return matrix;\n  }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n\nclass MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n  constructor(matrix, columnIndices) {\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, matrix.rows, columnIndices.length);\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n  }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n  }\n}\n\nclass MatrixFlipRowView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n  }\n}\n\nclass MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n  constructor(matrix, rowIndices) {\n    checkRowIndices(matrix, rowIndices);\n    super(matrix, rowIndices.length, matrix.columns);\n    this.rowIndices = rowIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n  }\n}\n\nclass MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    checkRowIndices(matrix, rowIndices);\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, rowIndices.length, columnIndices.length);\n    this.rowIndices = rowIndices;\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n\nclass MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n\nclass MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n\nfunction wrap(array, options) {\n  if (isAnyArray.isAnyArray(array)) {\n    if (array[0] && isAnyArray.isAnyArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n\nclass LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n\nfunction hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n\nclass QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n\nclass SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n\nfunction inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n\nfunction determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    if (matrix.columns === 0) {\n      return 1;\n    }\n\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isEmpty()) {\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n    // (0xn)*(nx0)*(0xn) = 0xn\n    // (nx0)*(0xn)*(nx0) = nx0\n    return matrix.transpose();\n  }\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > threshold) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n\nclass EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    if (matrix.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(i, j, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n    } else {\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n        V.set(j, i, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(j, i, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(k, j) * d[k];\n          e[k] += V.get(k, j) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(n - 1, i, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(k, i + 1) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(k, i + 1) * V.get(k, j);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(k, j, V.get(k, j) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(k, i + 1, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n    V.set(n - 1, j, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      do {\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(k, i + 1);\n            V.set(k, i + 1, s * V.get(k, i) + c * h);\n            V.set(k, i, c * V.get(k, i) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(j, i);\n        V.set(j, i, V.get(j, k));\n        V.set(j, k, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        // eslint-disable-next-line no-multi-assign\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          // eslint-disable-next-line no-multi-assign\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n\nclass CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &&= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = positiveDefinite;\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n\nclass nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n","import { Matrix } from 'ml-matrix';\nconst absDiff = (a, b) => Math.abs(a - b);\n/**\n * Generate a cost matrix from two set of values using the function passed. by default it\n * generate the cost matrix of absolute value of differences.\n * @param rowsArray - Array of values that will represent the rows of the cost matrix.\n * @param columnsArray - Array of values that will represent the columns of the cost matrix.\n * @param options\n * @returns - A matrix instance with dimensions rowsArray.length x columnsArray.length\n */\nexport function xCostMatrix(rowsArray, columnsArray, options = {}) {\n    const { fct = absDiff } = options;\n    const nbRows = rowsArray.length;\n    const nbColumns = columnsArray.length;\n    const result = new Matrix(nbRows, nbColumns);\n    for (let r = 0; r < nbRows; r++) {\n        for (let c = 0; c < nbColumns; c++) {\n            result.set(r, c, fct(rowsArray[r], columnsArray[c]));\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xCostMatrix.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculate an array of the same size that is the cumulative values\n * @param array - initial array\n */\nexport function xCumulative(array) {\n    if (!isAnyArray(array)) {\n        throw new TypeError('input must be an array');\n    }\n    const newArray = new Float64Array(array.length);\n    if (array.length === 0)\n        return newArray;\n    newArray[0] = array[0];\n    for (let i = 1; i < array.length; i++) {\n        newArray[i] = newArray[i - 1] + array[i];\n    }\n    return newArray;\n}\n//# sourceMappingURL=xCumulative.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the mean value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMean(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue / (toIndex - fromIndex + 1);\n}\n//# sourceMappingURL=xMean.js.map","import { isAnyArray } from 'is-any-array';\nimport { xMean } from './xMean';\n/**\n * Finds the variance of the data\n * @param values - the values of the array\n * @param options - options\n * @returns variance\n */\nexport function xVariance(values, options = {}) {\n    if (!isAnyArray(values)) {\n        throw new TypeError('input must be an array');\n    }\n    const { unbiased = true, mean = xMean(values) } = options;\n    let sqrError = 0;\n    for (let i = 0; i < values.length; i++) {\n        const x = values[i] - mean;\n        sqrError += x * x;\n    }\n    if (unbiased) {\n        return sqrError / (values.length - 1);\n    }\n    else {\n        return sqrError / values.length;\n    }\n}\n//# sourceMappingURL=xVariance.js.map","import { xVariance } from './xVariance';\n/**\n * Finds the standard deviation for the data at hand\n * @param values - values in the data\n * @param options - options\n * @returns standard deviation\n */\nexport function xStandardDeviation(values, options = {}) {\n    return Math.sqrt(xVariance(values, options));\n}\n//# sourceMappingURL=xStandardDeviation.js.map","import { xBoxPlotWithOutliers } from './xBoxPlotWithOutliers';\nimport { xMean } from './xMean';\nimport { xStandardDeviation } from './xStandardDeviation';\n/**\n * Calculate distribution statistics of an array without providing options\n * This ensure that the statistics are calculated in the same way in all the packages\n * If the array is empty it will throw an error\n * If the array has a length of 1, sd will be NaN (unbiased calculation of sd)\n * @param array - data\n * @param options\n * @returns - q1, median, q3, min, max\n */\nexport function xDistributionStats(array) {\n    return {\n        ...xBoxPlotWithOutliers(array),\n        mean: xMean(array),\n        sd: xStandardDeviation(array),\n        nb: array.length,\n    };\n}\n//# sourceMappingURL=xDistributionStats.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from './getOutputArray';\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array or number\n * @param options - options\n */\nexport function xDivide(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new RangeError('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xDivide.js.map","import { xCheck } from './xCheck';\n/**\n * Returns a copy of the data as a Float64Array.\n * @param array - array of numbers\n */\nexport function xEnsureFloat64(array) {\n    xCheck(array);\n    if (array instanceof Float64Array) {\n        return array.slice(0);\n    }\n    return Float64Array.from(array);\n}\n//# sourceMappingURL=xEnsureFloat64.js.map","import { xFindClosestIndex } from './xFindClosestIndex';\n/**\n *  Returns the targetIndex\n * @param x - array of numbers\n * @param options - options\n */\nexport function xGetTargetIndex(x, options = {}) {\n    const { target, targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            return xFindClosestIndex(x, target);\n        }\n        else {\n            return 0;\n        }\n    }\n    return targetIndex;\n}\n//# sourceMappingURL=xGetTargetIndex.js.map","'use strict';\n\nfunction FFT(size) {\n  this.size = size | 0;\n  if (this.size <= 1 || (this.size & (this.size - 1)) !== 0)\n    throw new Error('FFT size must be a power of two and bigger than 1');\n\n  this._csize = size << 1;\n\n  // NOTE: Use of `var` is intentional for old V8 versions\n  var table = new Array(this.size * 2);\n  for (var i = 0; i < table.length; i += 2) {\n    const angle = Math.PI * i / this.size;\n    table[i] = Math.cos(angle);\n    table[i + 1] = -Math.sin(angle);\n  }\n  this.table = table;\n\n  // Find size's power of two\n  var power = 0;\n  for (var t = 1; this.size > t; t <<= 1)\n    power++;\n\n  // Calculate initial step's width:\n  //   * If we are full radix-4 - it is 2x smaller to give inital len=8\n  //   * Otherwise it is the same as `power` to give len=4\n  this._width = power % 2 === 0 ? power - 1 : power;\n\n  // Pre-compute bit-reversal patterns\n  this._bitrev = new Array(1 << this._width);\n  for (var j = 0; j < this._bitrev.length; j++) {\n    this._bitrev[j] = 0;\n    for (var shift = 0; shift < this._width; shift += 2) {\n      var revShift = this._width - shift - 2;\n      this._bitrev[j] |= ((j >>> shift) & 3) << revShift;\n    }\n  }\n\n  this._out = null;\n  this._data = null;\n  this._inv = 0;\n}\nmodule.exports = FFT;\n\nFFT.prototype.fromComplexArray = function fromComplexArray(complex, storage) {\n  var res = storage || new Array(complex.length >>> 1);\n  for (var i = 0; i < complex.length; i += 2)\n    res[i >>> 1] = complex[i];\n  return res;\n};\n\nFFT.prototype.createComplexArray = function createComplexArray() {\n  const res = new Array(this._csize);\n  for (var i = 0; i < res.length; i++)\n    res[i] = 0;\n  return res;\n};\n\nFFT.prototype.toComplexArray = function toComplexArray(input, storage) {\n  var res = storage || this.createComplexArray();\n  for (var i = 0; i < res.length; i += 2) {\n    res[i] = input[i >>> 1];\n    res[i + 1] = 0;\n  }\n  return res;\n};\n\nFFT.prototype.completeSpectrum = function completeSpectrum(spectrum) {\n  var size = this._csize;\n  var half = size >>> 1;\n  for (var i = 2; i < half; i += 2) {\n    spectrum[size - i] = spectrum[i];\n    spectrum[size - i + 1] = -spectrum[i + 1];\n  }\n};\n\nFFT.prototype.transform = function transform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._transform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.realTransform = function realTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._realTransform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.inverseTransform = function inverseTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 1;\n  this._transform4();\n  for (var i = 0; i < out.length; i++)\n    out[i] /= this.size;\n  this._out = null;\n  this._data = null;\n};\n\n// radix-4 implementation\n//\n// NOTE: Uses of `var` are intentional for older V8 version that do not\n// support both `let compound assignments` and `const phi`\nFFT.prototype._transform4 = function _transform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform2(outOff, off, step);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform4(outOff, off, step);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var quarterLen = len >>> 2;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      // Full case\n      var limit = outOff + quarterLen;\n      for (var i = outOff, k = 0; i < limit; i += 2, k += step) {\n        const A = i;\n        const B = A + quarterLen;\n        const C = B + quarterLen;\n        const D = C + quarterLen;\n\n        // Original values\n        const Ar = out[A];\n        const Ai = out[A + 1];\n        const Br = out[B];\n        const Bi = out[B + 1];\n        const Cr = out[C];\n        const Ci = out[C + 1];\n        const Dr = out[D];\n        const Di = out[D + 1];\n\n        // Middle values\n        const MAr = Ar;\n        const MAi = Ai;\n\n        const tableBr = table[k];\n        const tableBi = inv * table[k + 1];\n        const MBr = Br * tableBr - Bi * tableBi;\n        const MBi = Br * tableBi + Bi * tableBr;\n\n        const tableCr = table[2 * k];\n        const tableCi = inv * table[2 * k + 1];\n        const MCr = Cr * tableCr - Ci * tableCi;\n        const MCi = Cr * tableCi + Ci * tableCr;\n\n        const tableDr = table[3 * k];\n        const tableDi = inv * table[3 * k + 1];\n        const MDr = Dr * tableDr - Di * tableDi;\n        const MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        const T0r = MAr + MCr;\n        const T0i = MAi + MCi;\n        const T1r = MAr - MCr;\n        const T1i = MAi - MCi;\n        const T2r = MBr + MDr;\n        const T2i = MBi + MDi;\n        const T3r = inv * (MBr - MDr);\n        const T3i = inv * (MBi - MDi);\n\n        // Final values\n        const FAr = T0r + T2r;\n        const FAi = T0i + T2i;\n\n        const FCr = T0r - T2r;\n        const FCi = T0i - T2i;\n\n        const FBr = T1r + T3i;\n        const FBi = T1i - T3r;\n\n        const FDr = T1r - T3i;\n        const FDi = T1i + T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n        out[C] = FCr;\n        out[C + 1] = FCi;\n        out[D] = FDr;\n        out[D + 1] = FDi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleTransform2 = function _singleTransform2(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const evenI = data[off + 1];\n  const oddR = data[off + step];\n  const oddI = data[off + step + 1];\n\n  const leftR = evenR + oddR;\n  const leftI = evenI + oddI;\n  const rightR = evenR - oddR;\n  const rightI = evenI - oddI;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = leftI;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = rightI;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleTransform4 = function _singleTransform4(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Ai = data[off + 1];\n  const Br = data[off + step];\n  const Bi = data[off + step + 1];\n  const Cr = data[off + step2];\n  const Ci = data[off + step2 + 1];\n  const Dr = data[off + step3];\n  const Di = data[off + step3 + 1];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T0i = Ai + Ci;\n  const T1r = Ar - Cr;\n  const T1i = Ai - Ci;\n  const T2r = Br + Dr;\n  const T2i = Bi + Di;\n  const T3r = inv * (Br - Dr);\n  const T3i = inv * (Bi - Di);\n\n  // Final values\n  const FAr = T0r + T2r;\n  const FAi = T0i + T2i;\n\n  const FBr = T1r + T3i;\n  const FBi = T1i - T3r;\n\n  const FCr = T0r - T2r;\n  const FCi = T0i - T2i;\n\n  const FDr = T1r - T3i;\n  const FDi = T1i + T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = FAi;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = FCi;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n\n// Real input radix-4 implementation\nFFT.prototype._realTransform4 = function _realTransform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform2(outOff, off >>> 1, step >>> 1);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform4(outOff, off >>> 1, step >>> 1);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var halfLen = len >>> 1;\n    var quarterLen = halfLen >>> 1;\n    var hquarterLen = quarterLen >>> 1;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      for (var i = 0, k = 0; i <= hquarterLen; i += 2, k += step) {\n        var A = outOff + i;\n        var B = A + quarterLen;\n        var C = B + quarterLen;\n        var D = C + quarterLen;\n\n        // Original values\n        var Ar = out[A];\n        var Ai = out[A + 1];\n        var Br = out[B];\n        var Bi = out[B + 1];\n        var Cr = out[C];\n        var Ci = out[C + 1];\n        var Dr = out[D];\n        var Di = out[D + 1];\n\n        // Middle values\n        var MAr = Ar;\n        var MAi = Ai;\n\n        var tableBr = table[k];\n        var tableBi = inv * table[k + 1];\n        var MBr = Br * tableBr - Bi * tableBi;\n        var MBi = Br * tableBi + Bi * tableBr;\n\n        var tableCr = table[2 * k];\n        var tableCi = inv * table[2 * k + 1];\n        var MCr = Cr * tableCr - Ci * tableCi;\n        var MCi = Cr * tableCi + Ci * tableCr;\n\n        var tableDr = table[3 * k];\n        var tableDi = inv * table[3 * k + 1];\n        var MDr = Dr * tableDr - Di * tableDi;\n        var MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        var T0r = MAr + MCr;\n        var T0i = MAi + MCi;\n        var T1r = MAr - MCr;\n        var T1i = MAi - MCi;\n        var T2r = MBr + MDr;\n        var T2i = MBi + MDi;\n        var T3r = inv * (MBr - MDr);\n        var T3i = inv * (MBi - MDi);\n\n        // Final values\n        var FAr = T0r + T2r;\n        var FAi = T0i + T2i;\n\n        var FBr = T1r + T3i;\n        var FBi = T1i - T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n\n        // Output final middle point\n        if (i === 0) {\n          var FCr = T0r - T2r;\n          var FCi = T0i - T2i;\n          out[C] = FCr;\n          out[C + 1] = FCi;\n          continue;\n        }\n\n        // Do not overwrite ourselves\n        if (i === hquarterLen)\n          continue;\n\n        // In the flipped case:\n        // MAi = -MAi\n        // MBr=-MBi, MBi=-MBr\n        // MCr=-MCr\n        // MDr=MDi, MDi=MDr\n        var ST0r = T1r;\n        var ST0i = -T1i;\n        var ST1r = T0r;\n        var ST1i = -T0i;\n        var ST2r = -inv * T3i;\n        var ST2i = -inv * T3r;\n        var ST3r = -inv * T2i;\n        var ST3i = -inv * T2r;\n\n        var SFAr = ST0r + ST2r;\n        var SFAi = ST0i + ST2i;\n\n        var SFBr = ST1r + ST3i;\n        var SFBi = ST1i - ST3r;\n\n        var SA = outOff + quarterLen - i;\n        var SB = outOff + halfLen - i;\n\n        out[SA] = SFAr;\n        out[SA + 1] = SFAi;\n        out[SB] = SFBr;\n        out[SB + 1] = SFBi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleRealTransform2 = function _singleRealTransform2(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const oddR = data[off + step];\n\n  const leftR = evenR + oddR;\n  const rightR = evenR - oddR;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = 0;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleRealTransform4 = function _singleRealTransform4(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Br = data[off + step];\n  const Cr = data[off + step2];\n  const Dr = data[off + step3];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T1r = Ar - Cr;\n  const T2r = Br + Dr;\n  const T3r = inv * (Br - Dr);\n\n  // Final values\n  const FAr = T0r + T2r;\n\n  const FBr = T1r;\n  const FBi = -T3r;\n\n  const FCr = T0r - T2r;\n\n  const FDr = T1r;\n  const FDi = T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = 0;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n","export function createNumberArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\nexport function createDoubleArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\n//# sourceMappingURL=createArray.js.map","/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n * @param options - options\n * @returns - array of distributed numbers between \"from\" and \"to\"\n */\nexport function createFromToArray(options = {}) {\n    const { from = 0, to = 1, length = 1000, includeFrom = true, includeTo = true, distribution = 'uniform', } = options;\n    const array = new Float64Array(length);\n    let div = length;\n    if (includeFrom && includeTo) {\n        div = length - 1;\n    }\n    else if ((!includeFrom && includeTo) || (includeFrom && !includeTo)) {\n        div = length;\n    }\n    else if (!includeFrom && !includeTo) {\n        div = length + 1;\n    }\n    const delta = (to - from) / div;\n    if (distribution === 'uniform') {\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * index;\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * (index + 1);\n                index++;\n            }\n        }\n    }\n    else if (distribution === 'log') {\n        const base = (to / from) ** (1 / div);\n        const firstExponent = Math.log(from) / Math.log(base);\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index);\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index + 1);\n                index++;\n            }\n        }\n    }\n    else {\n        throw new Error('distribution must be uniform or log');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiplyUint32(n, m) {\n    n >>>= 0;\n    m >>>= 0;\n    const nlo = n & 0xffff;\n    const nhi = n - nlo;\n    return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport class XSadd {\n    random;\n    state;\n    /**\n     * create an instance of XSadd with the specified seed\n     * @param [seed=Date.now()]\n     */\n    constructor(seed = Date.now()) {\n        this.state = new Uint32Array(4);\n        this.init(seed);\n        this.random = this.getFloat.bind(this);\n    }\n    /**\n     * Returns a 32-bit integer r (0 <= r < 2^32)\n     */\n    getUint32() {\n        this.nextState();\n        return (this.state[3] + this.state[2]) >>> 0;\n    }\n    /**\n     * Returns a floating point number r (0.0 <= r < 1.0)\n     */\n    getFloat() {\n        return (this.getUint32() >>> 8) * FLOAT_MUL;\n    }\n    init(seed) {\n        if (!Number.isInteger(seed)) {\n            throw new TypeError(\"seed must be an integer\");\n        }\n        this.state[0] = seed;\n        this.state[1] = 0;\n        this.state[2] = 0;\n        this.state[3] = 0;\n        for (let i = 1; i < LOOP; i++) {\n            this.state[i & 3] ^=\n                (i +\n                    multiplyUint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n                    0;\n        }\n        this.periodCertification();\n        for (let i = 0; i < LOOP; i++) {\n            this.nextState();\n        }\n    }\n    periodCertification() {\n        if (this.state[0] === 0 &&\n            this.state[1] === 0 &&\n            this.state[2] === 0 &&\n            this.state[3] === 0) {\n            this.state[0] = 88; // X\n            this.state[1] = 83; // S\n            this.state[2] = 65; // A\n            this.state[3] = 68; // D\n        }\n    }\n    nextState() {\n        let t = this.state[0];\n        t ^= t << sh1;\n        t ^= t >>> sh2;\n        t ^= this.state[3] << sh3;\n        this.state[0] = this.state[1];\n        this.state[1] = this.state[2];\n        this.state[2] = this.state[3];\n        this.state[3] = t;\n    }\n}\n//# sourceMappingURL=XSadd.js.map","import { XSadd } from 'ml-xsadd';\n/**\n * Create a random array of numbers of a specific length.\n * @param options\n * @returns - array of random floats normally distributed\n */\nexport function createRandomArray(options = {}) {\n    const { mean = 0, standardDeviation = 1, length = 1000, range = 1, seed, distribution = 'normal', } = options;\n    const generator = new XSadd(seed);\n    const returnArray = new Float64Array(length);\n    switch (distribution) {\n        case 'normal': {\n            const gaussianGenerator = new GaussianGenerator(mean, standardDeviation, generator);\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = gaussianGenerator.generateGaussian();\n            }\n            break;\n        }\n        case 'uniform': {\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = (generator.random() - 0.5) * range + mean;\n            }\n            break;\n        }\n        default: {\n            throw new Error(`unknown distribution: ${String(distribution)}`);\n        }\n    }\n    return returnArray;\n}\nclass GaussianGenerator {\n    #spare = 0;\n    #hasSpare = false;\n    #mean;\n    #standardDeviation;\n    #generator;\n    constructor(mean, standardDeviation, generator) {\n        this.#mean = mean;\n        this.#standardDeviation = standardDeviation;\n        this.#generator = generator;\n    }\n    generateGaussian() {\n        let val, u, v, s;\n        if (this.#hasSpare) {\n            this.#hasSpare = false;\n            val = this.#spare * this.#standardDeviation + this.#mean;\n        }\n        else {\n            do {\n                u = this.#generator.random() * 2 - 1;\n                v = this.#generator.random() * 2 - 1;\n                s = u * u + v * v;\n            } while (s >= 1 || s === 0);\n            s = Math.sqrt((-2 * Math.log(s)) / s);\n            this.#spare = v * s;\n            this.#hasSpare = true;\n            val = this.#mean + this.#standardDeviation * u * s;\n        }\n        return val;\n    }\n}\n//# sourceMappingURL=createRandomArray.js.map","/**\n * Create an array with numbers starting from \"from\" with step \"step\" of length \"length\".\n * @param options - options\n * @returns - array of distributed numbers with step \"step\" from \"from\"\n */\nexport function createStepArray(options = {}) {\n    const { from = 0, step = 1, length = 1000 } = options;\n    const array = new Float64Array(length);\n    let index = 0;\n    while (index < length) {\n        array[index] = from + step * index;\n        index++;\n    }\n    return array;\n}\n//# sourceMappingURL=createStepArray.js.map","export function getRescaler(options = {}) {\n    const { targetMin = 0, targetMax = 1, clamp = true, algorithmOptions = {}, algorithm = 'linear', } = options;\n    let { originalMin = 0, originalMax = 1 } = options;\n    const convert = getDataConverter(algorithm, algorithmOptions);\n    originalMin = convert(originalMin);\n    originalMax = convert(originalMax);\n    const originalRange = originalMax - originalMin;\n    const targetRange = targetMax - targetMin;\n    return function rescaler(value) {\n        value = convert(value);\n        value = checkRange(value, originalMin, originalMax, clamp);\n        const valueScaled = (value - originalMin) / originalRange;\n        return targetMin + valueScaled * targetRange;\n    };\n}\nfunction getDataConverter(kind = 'linear', options = {}) {\n    return (value) => {\n        switch (kind) {\n            case 'linear':\n                return value;\n            case 'logarithmic':\n                return Math.log10(value);\n            case 'power':\n                return value ** (options.power || 2);\n            default:\n                throw new Error(`Unknown kind ${String(kind)}`);\n        }\n    };\n}\nfunction checkRange(value, min, max, clamp = true) {\n    if (value < min) {\n        if (clamp)\n            return min;\n        throw new RangeError(`Value ${value} is out of range [${min}, ${max}]`);\n    }\n    if (value > max) {\n        if (clamp)\n            return max;\n        throw new RangeError(`Value ${value} is out of range [${min}, ${max}]`);\n    }\n    return value;\n}\n//# sourceMappingURL=getRescaler.js.map","/**\n * Check if a number is a power of two.\n * @param n\n */\nexport function isPowerOfTwo(n) {\n    return n !== 0 && (n & (n - 1)) === 0;\n}\n//# sourceMappingURL=isPowerOfTwo.js.map","/**\n * Get the size of the next power of two.\n * @param n\n */\nexport function nextPowerOfTwo(n) {\n    if (n === 0)\n        return 1;\n    n--;\n    n |= n >> 1;\n    n |= n >> 2;\n    n |= n >> 4;\n    n |= n >> 8;\n    n |= n >> 16;\n    return n + 1;\n}\n//# sourceMappingURL=nextPowerOfTwo.js.map","/**\n * Resolves all promises in an object recursively. The promise with be replaced by the resolved value.\n * The changes are therefore done in-place !\n * @param object\n * @returns\n */\nexport async function recursiveResolve(object) {\n    if (typeof object !== 'object')\n        return object;\n    const promises = [];\n    await appendPromises(object, promises);\n    await Promise.all(promises);\n    return object;\n}\nfunction appendPromises(object, promises) {\n    if (typeof object !== 'object')\n        return object;\n    for (const key in object) {\n        if (typeof object[key].then === 'function') {\n            promises.push(object[key].then((value) => (object[key] = value)));\n        }\n        else if (typeof object[key] === 'object') {\n            appendPromises(object[key], promises);\n        }\n    }\n    return object;\n}\n//# sourceMappingURL=recursiveResolve.js.map","/**\n * Recursively change the typed arrays to normal arrays\n * The changes are done in-place !\n * @param object\n * @returns\n */\nexport function recursiveUntypeArrays(object) {\n    if (typeof object !== 'object')\n        return object;\n    object = modifier(object);\n    return object;\n}\nfunction modifier(object) {\n    if (typeof object !== 'object')\n        return object;\n    if (ArrayBuffer.isView(object)) {\n        return Array.from(object);\n    }\n    for (const key in object) {\n        if (ArrayBuffer.isView(object[key])) {\n            object[key] = Array.from(object[key]);\n        }\n        else if (typeof object[key] === 'object') {\n            modifier(object[key]);\n        }\n    }\n    return object;\n}\n//# sourceMappingURL=recursiveUntypeArrays.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 { isAnyArray } from 'is-any-array';\n/**\n * This function xSubtract the first array by the second array or a constant value from each element of the first array\n * @param array1 - the array that will be rotated\n * @param array2 - second array or number\n * @returns array after subtraction\n */\nexport function xSubtract(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] - constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] - array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xSubtract.js.map","import { xAbsolute } from '../x/xAbsolute';\nimport { xMedian } from '../x/xMedian';\nimport { xSubtract } from '../x/xSubtract';\n/**\n * Calculate the weights based on the control points and the MAD between the original data and the new baseline.\n * MAD (Median Absolute Deviation) is more robust to outliers and\n * the factor (1.4826) makes MAD scaled to be equivalent to the standard deviation for\n * normal distributions. {@link https://en.m.wikipedia.org/wiki/Median_absolute_deviation}.\n * @param yData - The original data.\n * @param baseline - The new baseline calculated.\n * @param weights - The current weights to be updated.\n * @param options - Options for updating weights.\n * @returns new array of weights.\n */\nexport function calculateAdaptiveWeights(yData, baseline, weights, options) {\n    const { controlPoints, factorStd = 3, learningRate = 0.5, minWeight = 0.01, } = options;\n    const absResiduals = xAbsolute(xSubtract(yData, baseline));\n    const medAbsRes = xMedian(absResiduals);\n    const mad = 1.4826 * medAbsRes;\n    const threshold = factorStd * mad;\n    const rawWeights = new Float64Array(absResiduals.length);\n    for (let i = 0; i < absResiduals.length; i++) {\n        rawWeights[i] = Math.exp(-((absResiduals[i] / threshold) ** 2));\n    }\n    let maxWeight = Number.MIN_SAFE_INTEGER;\n    const newWeights = Float64Array.from(weights);\n    const oneMinusLearningRate = 1 - learningRate;\n    for (let i = 0; i < newWeights.length; i++) {\n        if (controlPoints && controlPoints[i] > 0)\n            continue;\n        const weight = Math.max(minWeight, oneMinusLearningRate * weights[i] + learningRate * rawWeights[i]);\n        newWeights[i] = weight;\n        maxWeight = Math.max(maxWeight, weight);\n    }\n    newWeights[0] = maxWeight;\n    newWeights[weights.length - 1] = maxWeight;\n    return newWeights;\n}\n//# sourceMappingURL=calculateAdaptiveWeights.js.map","import FFT from 'fft.js';\nimport { isPowerOfTwo, nextPowerOfTwo } from '../utils';\nimport { xCheck } from './xCheck';\n/**\n * Performs the Hilbert transform\n * @link https://en.wikipedia.org/wiki/Hilbert_transform\n * @param array - Array containing values\n * @param options\n * @returns A new vector with 90 degree shift regarding the phase of the original function\n */\nexport function xHilbertTransform(array, options = {}) {\n    xCheck(array);\n    const { forceFFT = false } = options;\n    const length = array.length;\n    if (isPowerOfTwo(length)) {\n        return hilbertTransformWithFFT(array);\n    }\n    else if (forceFFT) {\n        return resampling(hilbertTransformWithFFT(resampling(array, nextPowerOfTwo(length))), length);\n    }\n    else {\n        return hilbertTransform(array);\n    }\n}\n/**\n * Performs the discrete Hilbert transform using fast Fourier transform\n * @param array - Array containing values\n * @returns A new vector with 90 degree shift regarding the phase of the original function\n * @see DOI: 10.1109/TAU.1970.1162139 \"Discrete Hilbert transform\"\n */\nfunction hilbertTransformWithFFT(array) {\n    const length = array.length;\n    const fft = new FFT(length);\n    const fftResult = new Float64Array(length * 2);\n    fft.realTransform(fftResult, array);\n    fft.completeSpectrum(fftResult);\n    const multiplier = new Float64Array(length);\n    for (let i = 1; i < length; i++) {\n        multiplier[i] = Math.sign(length / 2 - i);\n    }\n    for (let i = 0; i < length; i++) {\n        fftResult[i * 2] *= multiplier[i];\n        fftResult[i * 2 + 1] *= multiplier[i];\n    }\n    const hilbertSignal = new Float64Array(length * 2);\n    fft.inverseTransform(hilbertSignal, fftResult);\n    const result = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        result[i] = hilbertSignal[i * 2 + 1];\n    }\n    return result;\n}\n/**\n * Performs the discrete Hilbert transform\n * @param array - Array containing values\n * @param options\n * @param options.inClockwise\n * @returns A new vector with 90 degree shift regarding the phase of the original function\n */\nfunction hilbertTransform(array, options = {}) {\n    const { inClockwise = true } = options;\n    const input = [0, ...array, 0];\n    const result = new Float64Array(array.length);\n    for (let k = 1; k < input.length - 1; k++) {\n        let aSum = 0;\n        for (let i = 0; i < k - 1; i++) {\n            const log = Math.log((k - i) / (k - i - 1));\n            aSum += input[i] * log + (input[i + 1] - input[i]) * (-1 + (k - i) * log);\n        }\n        const b = input[k - 1] - input[k + 1];\n        let cSum = 0;\n        for (let i = k + 1; i < input.length - 1; i++) {\n            const log = Math.log((i - k) / (i - k + 1));\n            cSum += input[i] * log + (input[i - 1] - input[i]) * (1 + (i - k) * log);\n        }\n        result[k - 1] = ((inClockwise ? 1 : -1) * (aSum + b + cSum)) / Math.PI;\n    }\n    return result;\n}\n/**\n * Performs resampling of an input array to the desired length employing linear interpolation.\n * @param array - Array containing values.\n * @param length - The length of the resulting array.\n * @returns It returns a new array of the desired length.\n * @link https://en.wikipedia.org/wiki/Sample-rate_conversion\n */\nfunction resampling(array, length) {\n    xCheck(array);\n    const oldLength = array.length;\n    const ratio = (oldLength - 1) / (length - 1);\n    const result = new Float64Array(length);\n    let currentIndex = 0;\n    let floor = Math.floor(currentIndex);\n    let ceil = Math.min(Math.ceil(currentIndex), oldLength - 1);\n    let diff = currentIndex - floor;\n    for (let i = 0; i < length; i++) {\n        result[i] = array[floor] * (1 - diff) + array[ceil] * diff;\n        currentIndex += ratio;\n        floor = Math.floor(currentIndex);\n        ceil = Math.min(Math.ceil(currentIndex), oldLength - 1);\n        diff = currentIndex - floor;\n    }\n    return result;\n}\n//# sourceMappingURL=xHilbertTransform.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the minimal value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","import { createFromToArray } from '../utils';\nimport { xAbsolute } from './xAbsolute';\nimport { xCheck } from './xCheck';\nimport { xMaxValue } from './xMaxValue';\nimport { xMinValue } from './xMinValue';\n/**\n * Calculates a histogram of defined number of slots\n * @param array - Array containing values\n * @param options - options\n * @returns - result of the histogram\n */\nexport function xHistogram(array, options = {}) {\n    xCheck(array);\n    const histogram = options.histogram;\n    const { centerX = true, nbSlots = histogram === undefined ? 256 : histogram.x.length, logBaseX, logBaseY, absolute = false, } = options;\n    if (absolute) {\n        array = xAbsolute(array);\n    }\n    if (logBaseX) {\n        array = array.slice();\n        const logOfBase = Math.log10(logBaseX);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = Math.log10(array[i]) / logOfBase;\n        }\n    }\n    const { min = xMinValue(array), max = xMaxValue(array) } = options;\n    const slotSize = (max - min) / (nbSlots + Number.EPSILON);\n    const y = histogram === undefined ? new Float64Array(nbSlots) : histogram.y;\n    const x = histogram === undefined\n        ? Array.from(createFromToArray({\n            from: min + (centerX ? slotSize / 2 : 0),\n            to: max - (centerX ? slotSize / 2 : 0),\n            length: nbSlots,\n        }))\n        : histogram.x;\n    for (const element of array) {\n        const index = Math.max(Math.min(Math.floor((element - min - Number.EPSILON) / slotSize), nbSlots - 1), 0);\n        y[index]++;\n    }\n    if (logBaseY) {\n        const logOfBase = Math.log10(logBaseY);\n        for (let i = 0; i < y.length; i++) {\n            y[i] = Math.log10(y[i] + 1) / logOfBase;\n        }\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xHistogram.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","/**\n * Check the similarity between array created by xyMassCenterVector\n * @param array1\n * @param array2\n * @param options\n * @returns\n */\nexport function xMassCenterVectorSimilarity(array1, array2, options = {}) {\n    const { recenter = true, similarityFct = (a, b) => (a === b ? 1 : 0), } = options;\n    const depth1 = getDepth(array1);\n    const depth2 = getDepth(array2);\n    const depth = Math.min(depth1, depth2);\n    // need to copy the array because we shift the data in place if recenter is true\n    if (recenter) {\n        array1 = array1.slice();\n    }\n    let similarity = 0;\n    // we will compare level by level\n    // and recenter the array at each level\n    for (let level = 0; level < depth; level++) {\n        const maxSimilarity = 1 / depth / (1 << level);\n        for (let slot = 0; slot < 1 << level; slot++) {\n            const index = (1 << level) - 1 + slot;\n            const value1 = array1[index];\n            const value2 = array2[index];\n            similarity += similarityFct(value1, value2) * maxSimilarity;\n            if (recenter) {\n                shiftSubTree(array1, depth, level, slot, value2 - value1);\n            }\n        }\n    }\n    return similarity;\n}\nfunction shiftSubTree(array, depth, level, slot, shift) {\n    for (let currentLevel = level; currentLevel < depth; currentLevel++) {\n        const levelSlotShift = slot * (1 << (currentLevel - level));\n        const levelShift = (1 << currentLevel) - 1;\n        const levelSlotSize = 1 << (currentLevel - level);\n        for (let slotIndex = levelSlotShift; slotIndex < levelSlotShift + levelSlotSize; slotIndex++) {\n            const index = levelShift + slotIndex;\n            array[index] += shift;\n        }\n    }\n}\nfunction getDepth(array) {\n    const depth = Math.log2(array.length + 1);\n    if (depth % 1 !== 0) {\n        throw new Error('the array length is not a power of 2 minus 1');\n    }\n    return depth;\n}\n//# sourceMappingURL=xMassCenterVectorSimilarity.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxAbsoluteValue(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] >= 0) {\n            if (array[i] > maxValue) {\n                maxValue = array[i];\n            }\n        }\n        else if (-array[i] > maxValue) {\n            maxValue = -array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxAbsoluteValue.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the index of the maximum of the given values\n * @param array - array of numbers\n * @param  options - options\n * @returns - index\n */\nexport function xMaxIndex(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxIndex = fromIndex;\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > array[maxIndex]) {\n            maxIndex = i;\n        }\n    }\n    return maxIndex;\n}\n//# sourceMappingURL=xMaxIndex.js.map","import { xCheckLengths } from './xCheckLengths';\n/**\n * This function calculates the mean absolute error.\n * @param array1 - first array\n * @param array2 - second array\n */\nexport function xMeanAbsoluteError(array1, array2) {\n    xCheckLengths(array1, array2);\n    let sum = 0;\n    for (let i = 0; i < array1.length; i++) {\n        sum += Math.abs(array1[i] - array2[i]);\n    }\n    return sum / array1.length;\n}\n//# sourceMappingURL=xMeanAbsoluteError.js.map","import { xCheckLengths } from './xCheckLengths';\n/**\n * This function calculates the mean squared error.\n * @param array1 -first array\n * @param array2 - second array\n */\nexport function xMeanSquaredError(array1, array2) {\n    xCheckLengths(array1, array2);\n    let sum = 0;\n    for (let i = 0; i < array1.length; i++) {\n        sum += (array1[i] - array2[i]) ** 2;\n    }\n    return sum / array1.length;\n}\n//# sourceMappingURL=xMeanSquaredError.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the weighted mean value of an array of values.\n * @deprecated please use xyMassCenter\n * @param array - array of numbers\n * @param weights - array of weights\n * @param options - options\n */\nexport function xMeanWeighted(array, weights, options = {}) {\n    xCheck(array, { minLength: 1 });\n    xCheck(weights);\n    if (array.length !== weights.length) {\n        throw new Error('array and weights must have the same length');\n    }\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    // normalize weights\n    let sumWeights = 0;\n    let sumValue = array[fromIndex] * weights[fromIndex];\n    sumWeights += weights[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i] * weights[i];\n        sumWeights += weights[i];\n    }\n    if (sumWeights === 0) {\n        // We throw because the case is not well defined\n        throw new Error('sum of weights must be > 0');\n    }\n    return sumValue / sumWeights;\n}\n//# sourceMappingURL=xMeanWeighted.js.map","import { xMedian } from './xMedian';\n/**\n * This function calculates the median absolute deviation (MAD).\n * https://en.wikipedia.org/wiki/Median_absolute_deviation\n * @param array\n */\nexport function xMedianAbsoluteDeviation(array) {\n    const median = xMedian(array);\n    const averageDeviations = new Float64Array(array.length);\n    for (let i = 0; i < array.length; i++) {\n        averageDeviations[i] = Math.abs(array[i] - median);\n    }\n    return {\n        median,\n        mad: xMedian(averageDeviations),\n    };\n}\n//# sourceMappingURL=xMedianAbsoluteDeviation.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Computes the index of the minimum of the given values.\n * @param array - array of numbers\n * @param options - options\n * @returns - index\n */\nexport function xMinIndex(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minIndex = fromIndex;\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < array[minIndex]) {\n            minIndex = i;\n        }\n    }\n    return minIndex;\n}\n//# sourceMappingURL=xMinIndex.js.map","import { xCheck } from './xCheck';\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns - Object with 2 properties, min and max\n */\nexport function xMinMaxDelta(array) {\n    xCheck(array, {\n        minLength: 2,\n    });\n    let minDelta = array[1] - array[0];\n    let maxDelta = minDelta;\n    for (let i = 0; i < array.length - 1; i++) {\n        const delta = array[i + 1] - array[i];\n        if (delta < minDelta)\n            minDelta = delta;\n        if (delta > maxDelta)\n            maxDelta = delta;\n    }\n    return { min: minDelta, max: maxDelta };\n}\n//# sourceMappingURL=xMinMaxDelta.js.map","import { xCheck } from './xCheck';\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns - Object with 2 properties, min and max.\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (const value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","/**\n * Calculates the mode of an array\n * @param input - Array containing values\n * @returns - mode\n */\nexport function xMode(input) {\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    let maxValue = 0;\n    let maxCount = 0;\n    let count = 0;\n    const counts = {};\n    for (let i = 0; i < input.length; ++i) {\n        const element = input[i];\n        count = counts[element];\n        if (count) {\n            counts[element]++;\n            count++;\n        }\n        else {\n            counts[element] = 1;\n            count = 1;\n        }\n        if (count > maxCount) {\n            maxCount = count;\n            maxValue = input[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMode.js.map","/*\nAdapted from: https://github.com/compute-io/erfcinv/blob/aa116e23883839359e310ad41a7c42f72815fc1e/lib/number.js\n\nThe MIT License (MIT)\n\nCopyright (c) 2014-2015 The Compute.io Authors. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the \"Software\") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n// Coefficients for erfcinv on [0, 0.5]:\nconst Y1 = 8.91314744949340820313e-2;\nconst P1 = [\n    -5.38772965071242932965e-3, 8.22687874676915743155e-3,\n    2.19878681111168899165e-2, -3.65637971411762664006e-2,\n    -1.26926147662974029034e-2, 3.34806625409744615033e-2,\n    -8.36874819741736770379e-3, -5.08781949658280665617e-4,\n];\nconst Q1 = [\n    8.86216390456424707504e-4, -2.33393759374190016776e-3,\n    7.95283687341571680018e-2, -5.27396382340099713954e-2,\n    -7.1228902341542847553e-1, 6.62328840472002992063e-1, 1.56221558398423026363,\n    -1.56574558234175846809, -9.70005043303290640362e-1, 1,\n];\n// Coefficients for erfcinv for 0.5 > 1-x >= 0:\nconst Y2 = 2.249481201171875;\nconst P2 = [\n    -3.67192254707729348546, 2.11294655448340526258e1, 1.7445385985570866523e1,\n    -4.46382324441786960818e1, -1.88510648058714251895e1,\n    1.76447298408374015486e1, 8.37050328343119927838, 1.05264680699391713268e-1,\n    -2.02433508355938759655e-1,\n];\nconst Q2 = [\n    1.72114765761200282724, -2.26436933413139721736e1, 1.08268667355460159008e1,\n    4.85609213108739935468e1, -2.01432634680485188801e1,\n    -2.86608180499800029974e1, 3.9713437953343869095, 6.24264124854247537712, 1,\n];\n// Coefficients for erfcinv for sqrt( -log(1-x)):\nconst Y3 = 8.07220458984375e-1;\nconst P3 = [\n    -6.81149956853776992068e-10, 2.85225331782217055858e-8,\n    -6.79465575181126350155e-7, 2.14558995388805277169e-3,\n    2.90157910005329060432e-2, 1.42869534408157156766e-1,\n    3.37785538912035898924e-1, 3.87079738972604337464e-1,\n    1.17030156341995252019e-1, -1.63794047193317060787e-1,\n    -1.31102781679951906451e-1,\n];\nconst Q3 = [\n    1.105924229346489121e-2, 1.52264338295331783612e-1, 8.48854343457902036425e-1,\n    2.59301921623620271374, 4.77846592945843778382, 5.38168345707006855425,\n    3.46625407242567245975, 1,\n];\nconst Y4 = 9.3995571136474609375e-1;\nconst P4 = [\n    2.66339227425782031962e-12, -2.30404776911882601748e-10,\n    4.60469890584317994083e-6, 1.57544617424960554631e-4,\n    1.87123492819559223345e-3, 9.50804701325919603619e-3,\n    1.85573306514231072324e-2, -2.22426529213447927281e-3,\n    -3.50353787183177984712e-2,\n];\nconst Q4 = [\n    7.64675292302794483503e-5, 2.63861676657015992959e-3,\n    3.41589143670947727934e-2, 2.20091105764131249824e-1,\n    7.62059164553623404043e-1, 1.3653349817554063097, 1,\n];\nconst Y5 = 9.8362827301025390625e-1;\nconst P5 = [\n    9.9055709973310326855e-17, -2.81128735628831791805e-14,\n    4.62596163522878599135e-9, 4.49696789927706453732e-7,\n    1.49624783758342370182e-5, 2.09386317487588078668e-4,\n    1.05628862152492910091e-3, -1.12951438745580278863e-3,\n    -1.67431005076633737133e-2,\n];\nconst Q5 = [\n    2.82243172016108031869e-7, 2.75335474764726041141e-5,\n    9.64011807005165528527e-4, 1.60746087093676504695e-2,\n    1.38151865749083321638e-1, 5.91429344886417493481e-1, 1,\n];\n/**\n * Polyval.\n * @param c - Array of Number.\n * @param x - Number.\n * @returns Number.\n */\nfunction polyval(c, x) {\n    let p = 0;\n    for (const coef of c) {\n        p = p * x + coef;\n    }\n    return p;\n}\n/**\n * Calculates a rational approximation.\n * @private\n * @param x - Number.\n * @param v - Number.\n * @param P - Array of polynomial coefficients.\n * @param Q - Array of polynomial coefficients.\n * @param Y - Number.\n * @returns Rational approximation.\n */\nfunction calc(x, v, P, Q, Y) {\n    const s = x - v;\n    const r = polyval(P, s) / polyval(Q, s);\n    return Y * x + r * x;\n}\n/**\n * Evaluates the complementary inverse error function for an input value.\n * @private\n * @param x - Input value.\n * @returns Evaluated complementary inverse error function.\n */\nexport default function erfcinv(x) {\n    let sign = false;\n    let val;\n    let q;\n    let g;\n    let r;\n    // [1] Special cases...\n    // NaN:\n    if (Number.isNaN(x)) {\n        return Number.NaN;\n    }\n    // x not on the interval: [0,2]\n    if (x < 0 || x > 2) {\n        throw new RangeError(`erfcinv()::invalid input argument. Value must be on the interval [0,2]. Value: \\`${x}\\`.`);\n    }\n    if (x === 0) {\n        return Number.POSITIVE_INFINITY;\n    }\n    if (x === 2) {\n        return Number.NEGATIVE_INFINITY;\n    }\n    if (x === 1) {\n        return 0;\n    }\n    // [2] Get the sign and make use of `erfc` reflection formula: `erfc(-z)=2 - erfc(z)`...\n    if (x > 1) {\n        q = 2 - x;\n        x = 1 - q;\n        sign = true;\n    }\n    else {\n        q = x;\n        x = 1 - x;\n    }\n    // [3] |x| <= 0.5\n    if (x <= 0.5) {\n        g = x * (x + 10);\n        r = polyval(P1, x) / polyval(Q1, x);\n        val = g * Y1 + g * r;\n        return sign ? -val : val;\n    }\n    // [4] 1-|x| >= 0.25\n    if (q >= 0.25) {\n        g = Math.sqrt(-2 * Math.log(q));\n        q = q - 0.25;\n        r = polyval(P2, q) / polyval(Q2, q);\n        val = g / (Y2 + r);\n        return sign ? -val : val;\n    }\n    q = Math.sqrt(-Math.log(q));\n    // [5] q < 3\n    if (q < 3) {\n        return calc(q, 1.125, P3, Q3, Y3);\n    }\n    // [6] q < 6\n    if (q < 6) {\n        return calc(q, 3, P4, Q4, Y4);\n    }\n    // Note that the smallest number in JavaScript is 5e-324. Math.sqrt( -Math.log( 5e-324 ) ) ~27.2844\n    return calc(q, 6, P5, Q5, Y5);\n    // Note that in the boost library, they are able to go to much smaller values, as 128 bit long doubles support ~1e-5000; something which JavaScript does not natively support.\n}\n//# sourceMappingURL=erfcinv.js.map","import erfcinv from './erfcinv';\n/**\n * Applies a simple normalization inverse transformation to the input data.\n * @param data - The input array of numbers to be transformed.\n * @param options - Optional parameters for the transformation.\n * @returns A new Float64Array containing the transformed data.\n */\nexport function simpleNormInv(data, options = {}) {\n    const { magnitudeMode = false } = options;\n    const result = new Float64Array(data.length);\n    if (magnitudeMode) {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -Math.sqrt(-2 * Math.log(1 - data[i]));\n        }\n    }\n    else {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -1 * Math.SQRT2 * erfcinv(2 * data[i]);\n        }\n    }\n    return result;\n}\n/**\n * Convenience wrapper for single number processing by simpleNormInv function.\n * @param data - The number to be normalized.\n * @param options - The options for the normalization process.\n * @returns The normalized number.\n */\nexport function simpleNormInvNumber(data, options = {}) {\n    return simpleNormInv([data], options)[0];\n}\n//# sourceMappingURL=simpleNormInv.js.map","import { isAnyArray } from 'is-any-array';\nimport { createFromToArray } from '../utils';\nimport { simpleNormInvNumber } from './utils/simpleNormInv';\nimport { xEnsureFloat64 } from './xEnsureFloat64';\n/**\n * Determine noise level by san plot methodology (https://doi.org/10.1002/mrc.4882)\n * @param array - real or magnitude spectra data.\n * @param options - options\n * @returns noise level\n */\nexport function xNoiseSanPlot(array, options = {}) {\n    const { mask, cutOff, refine = true, magnitudeMode = false, scaleFactor = 1, factorStd = 5, fixOffset = true, } = options;\n    const input = prepareData(array, { scaleFactor, mask });\n    if (fixOffset && !magnitudeMode) {\n        const medianIndex = Math.floor(input.length / 2);\n        const median = input.length % 2 === 0\n            ? 0.5 * (input[medianIndex - 1] + input[medianIndex])\n            : input[medianIndex];\n        for (let i = 0; i < input.length; i++) {\n            input[i] -= median;\n        }\n    }\n    const firstNegativeValueIndex = input.at(-1) >= 0\n        ? input.length\n        : input.findIndex((e) => e < 0);\n    let lastPositiveValueIndex = firstNegativeValueIndex - 1;\n    for (let i = lastPositiveValueIndex; i >= 0; i--) {\n        if (input[i] > 0) {\n            lastPositiveValueIndex = i;\n            break;\n        }\n    }\n    const signPositive = input.slice(0, lastPositiveValueIndex + 1);\n    const signNegative = input.slice(firstNegativeValueIndex);\n    const cutOffDist = cutOff || determineCutOff(signPositive, { magnitudeMode });\n    const pIndex = Math.floor(signPositive.length * cutOffDist);\n    const initialNoiseLevelPositive = signPositive[pIndex];\n    const skyPoint = signPositive[0];\n    let initialNoiseLevelNegative;\n    if (signNegative.length > 0) {\n        const nIndex = Math.floor(signNegative.length * (1 - cutOffDist));\n        initialNoiseLevelNegative = -1 * signNegative[nIndex];\n    }\n    else {\n        initialNoiseLevelNegative = 0;\n    }\n    let noiseLevelPositive = initialNoiseLevelPositive;\n    let noiseLevelNegative = initialNoiseLevelNegative;\n    let cloneSignPositive = signPositive.slice();\n    let cloneSignNegative = signNegative.slice();\n    let cutOffSignalsIndexPlus = 0;\n    let cutOffSignalsIndexNeg = 2;\n    if (refine) {\n        let cutOffSignals = noiseLevelPositive * factorStd;\n        cutOffSignalsIndexPlus = signPositive.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexPlus > -1) {\n            cloneSignPositive = signPositive.slice(cutOffSignalsIndexPlus);\n            noiseLevelPositive =\n                cloneSignPositive[Math.floor(cloneSignPositive.length * cutOffDist)];\n        }\n        cutOffSignals = noiseLevelNegative * factorStd;\n        cutOffSignalsIndexNeg = signNegative.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexNeg > -1) {\n            cloneSignNegative = signNegative.slice(cutOffSignalsIndexNeg);\n            noiseLevelNegative =\n                cloneSignPositive[Math.floor(cloneSignNegative.length * (1 - cutOffDist))];\n        }\n    }\n    const correctionFactor = -simpleNormInvNumber(cutOffDist / 2, {\n        magnitudeMode,\n    });\n    let effectiveCutOffDist, refinedCorrectionFactor;\n    if (refine && cutOffSignalsIndexPlus > -1) {\n        effectiveCutOffDist =\n            (cutOffDist * cloneSignPositive.length + cutOffSignalsIndexPlus) /\n                (cloneSignPositive.length + cutOffSignalsIndexPlus);\n        refinedCorrectionFactor =\n            -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n        noiseLevelPositive /= refinedCorrectionFactor;\n        if (cutOffSignalsIndexNeg > -1) {\n            effectiveCutOffDist =\n                (cutOffDist * cloneSignNegative.length + cutOffSignalsIndexNeg) /\n                    (cloneSignNegative.length + cutOffSignalsIndexNeg);\n            refinedCorrectionFactor =\n                -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n            if (noiseLevelNegative !== 0) {\n                noiseLevelNegative /= refinedCorrectionFactor;\n            }\n        }\n    }\n    else {\n        noiseLevelPositive /= correctionFactor;\n        noiseLevelNegative /= correctionFactor;\n    }\n    return {\n        positive: noiseLevelPositive,\n        negative: noiseLevelNegative,\n        snr: skyPoint / noiseLevelPositive,\n        sanplot: generateSanPlot(input, {\n            fromTo: {\n                positive: { from: 0, to: lastPositiveValueIndex },\n                negative: { from: firstNegativeValueIndex, to: input.length },\n            },\n        }),\n    };\n}\n/**\n * Determines the optimal cut-off point for a given array of positive numbers.\n * @param signPositive - An array of positive numbers.\n * @param options - Optional parameters to configure the cut-off determination.\n * @param options.magnitudeMode - If true, uses magnitude mode for normalization. Default is false.\n * @param options.considerList - An object specifying the range and step for consideration.\n * @param options.considerList.from - The starting point of the range. Default is 0.5.\n * @param options.considerList.step - The step size for the range. Default is 0.1.\n * @param options.considerList.to - The ending point of the range. Default is 0.9.\n * @returns The optimal cut-off point as a number.\n */\nfunction determineCutOff(signPositive, options = {}) {\n    const { magnitudeMode = false, considerList = { from: 0.5, step: 0.1, to: 0.9 }, } = options;\n    //generate a list of values for\n    const cutOff = [];\n    const indexMax = signPositive.length - 1;\n    for (let i = 0.01; i <= 0.99; i += 0.01) {\n        const index = Math.round(indexMax * i);\n        const value = -signPositive[index] / simpleNormInvNumber(i / 2, { magnitudeMode });\n        cutOff.push([i, value]);\n    }\n    let minKi = Number.MAX_SAFE_INTEGER;\n    const { from, to, step } = considerList;\n    const delta = step / 2;\n    let whereToCutStat = 0.5;\n    for (let i = from; i <= to; i += step) {\n        const floor = i - delta;\n        const top = i + delta;\n        const elementsOfCutOff = cutOff.filter((e) => e[0] < top && e[0] > floor);\n        let averageValue = 0;\n        for (const element of elementsOfCutOff) {\n            averageValue += Math.abs(element[1]);\n        }\n        let kiSqrt = 0;\n        for (const element of elementsOfCutOff) {\n            kiSqrt += (element[1] - averageValue) ** 2;\n        }\n        if (kiSqrt < minKi) {\n            minKi = kiSqrt;\n            whereToCutStat = i;\n        }\n    }\n    return whereToCutStat;\n}\n/**\n * Generates a SAN plot from the given array based on the specified options.\n * @param array - The input array of numbers to be processed.\n * @param options - An optional object containing configuration options.\n * @param options.logBaseY - The logarithmic base for the Y-axis. Defaults to 2.\n * @param options.fromTo - An object specifying the range for each key. Each key maps to an object with `from` and `to` properties.\n * @returns An object where each key maps to a DataXY object containing the processed data.\n */\nfunction generateSanPlot(array, options = {}) {\n    const { fromTo, logBaseY = 2 } = options;\n    const sanplot = {};\n    for (const key in fromTo) {\n        const { from, to } = fromTo[key];\n        sanplot[key] =\n            from !== to\n                ? scale(array.slice(from, to), {\n                    logBaseY,\n                })\n                : { x: [], y: [] };\n        if (key === 'negative') {\n            sanplot[key].y.reverse();\n        }\n    }\n    return sanplot;\n}\n/**\n * Scales the input array based on the provided options.\n * @param array - The input array to be scaled.\n * @param options - An optional object containing scaling options.\n * @param options.logBaseY - If provided, the array values will be scaled using the logarithm of this base.\n * @returns An object containing the scaled x and y arrays.\n */\nfunction scale(array, options = {}) {\n    const { log10, abs } = Math;\n    const { logBaseY } = options;\n    if (logBaseY) {\n        array = array.slice(0);\n        const logOfBase = log10(logBaseY);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = log10(abs(array[i])) / logOfBase;\n        }\n    }\n    const xAxis = createFromToArray({\n        from: 0,\n        to: array.length - 1,\n        length: array.length,\n    });\n    return { x: xAxis, y: array };\n}\n/**\n * Prepares and processes the input data array based on the provided options.\n * @param array - The input array of numbers to be processed.\n * @param options - An object containing the following properties:\n *   - scaleFactor: A number by which to scale each element of the array.\n *   - mask: An optional array of the same length as the input array, where\n *           elements corresponding to `true` values will be excluded from processing.\n * @param options.scaleFactor\n * @param options.mask\n * @returns A new Float64Array containing the processed data, scaled by the\n *          scaleFactor and sorted in descending order.\n */\nfunction prepareData(array, options) {\n    const { scaleFactor, mask } = options;\n    const input = xEnsureFloat64(isAnyArray(mask) && mask.length === array.length\n        ? array.filter((_e, i) => !mask[i])\n        : array);\n    if (scaleFactor > 1) {\n        for (let i = 0; i < input.length; i++) {\n            input[i] *= scaleFactor;\n        }\n    }\n    return input.sort().reverse();\n}\n//# sourceMappingURL=xNoiseSanPlot.js.map","import { xMedianAbsoluteDeviation } from './xMedianAbsoluteDeviation';\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise\n * @param array\n * @returns noise level corresponding to one standard deviation\n */\nexport function xNoiseStandardDeviation(array) {\n    const { mad, median } = xMedianAbsoluteDeviation(array);\n    return { sd: mad / 0.6744897501960817, mad, median };\n}\n//# sourceMappingURL=xNoiseStandardDeviation.js.map","/**\n * This function calculate the norm of a vector.\n * @example xNorm([3, 4]) -> 5\n * @param array - array\n * @returns - calculated norm\n */\nexport function xNorm(array) {\n    let result = 0;\n    for (const element of array) {\n        result += element ** 2;\n    }\n    return Math.sqrt(result);\n}\n//# sourceMappingURL=xNorm.js.map","import { xCheck } from './xCheck';\nimport { xGetFromToIndex } from './xGetFromToIndex';\n/**\n * Calculate the sum of the values\n * @param array - Object that contains property x (an ordered increasing array) and y (an array).\n * @param options - Options.\n * @returns XSum value on the specified range.\n */\nexport function xSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xSum.js.map","import { getOutputArray } from './getOutputArray';\nimport { xCheck } from './xCheck';\nimport { xMaxValue } from './xMaxValue';\nimport { xSum } from './xSum';\n/**\n * Divides the data with either the sum, the absolute sum or the maximum of the data\n * @param input - Array containing values\n * @param options - options\n * @returns - normalized data\n */\nexport function xNormed(input, options = {}) {\n    const { algorithm = 'absolute', value = 1 } = options;\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    if (input.length === 0) {\n        throw new Error('input must not be empty');\n    }\n    switch (algorithm) {\n        case 'absolute': {\n            const absoluteSumValue = absoluteSum(input) / value;\n            if (absoluteSumValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / absoluteSumValue;\n            }\n            return output;\n        }\n        case 'max': {\n            const currentMaxValue = xMaxValue(input);\n            if (currentMaxValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            const factor = value / currentMaxValue;\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] * factor;\n            }\n            return output;\n        }\n        case 'sum': {\n            const sumFactor = xSum(input) / value;\n            if (sumFactor === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / sumFactor;\n            }\n            return output;\n        }\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\nfunction absoluteSum(input) {\n    let sumValue = 0;\n    for (let i = 0; i < input.length; i++) {\n        sumValue += Math.abs(input[i]);\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xNormed.js.map","import { xCheck } from './xCheck';\nimport { xEnsureFloat64 } from './xEnsureFloat64';\n/**\n * This function pads an array\n *s\n * @param array - the array that will be padded\n * @param options - options\n */\nexport function xPadding(array, options = {}) {\n    const { size = 0, value = 0, algorithm } = options;\n    xCheck(array);\n    if (!algorithm) {\n        return xEnsureFloat64(array);\n    }\n    const result = new Float64Array(array.length + size * 2);\n    for (let i = 0; i < array.length; i++) {\n        result[i + size] = array[i];\n    }\n    const fromEnd = size + array.length;\n    const toEnd = 2 * size + array.length;\n    switch (algorithm) {\n        case 'value':\n            for (let i = 0; i < size; i++) {\n                result[i] = value;\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = value;\n            }\n            break;\n        case 'duplicate':\n            for (let i = 0; i < size; i++) {\n                result[i] = array[0];\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = array.at(-1);\n            }\n            break;\n        case 'circular':\n            for (let i = 0; i < size; i++) {\n                result[i] =\n                    array[(array.length - (size % array.length) + i) % array.length];\n            }\n            for (let i = 0; i < size; i++) {\n                result[i + fromEnd] = array[i % array.length];\n            }\n            break;\n        default:\n            throw new Error(`unknown algorithm ${String(algorithm)}`);\n    }\n    return result;\n}\n//# sourceMappingURL=xPadding.js.map","import { xCheck } from './xCheck';\nimport { xStandardDeviation } from './xStandardDeviation';\n/**\n * Pareto scaling, which uses the square root of standard deviation as the scaling factor, circumvents the amplification of noise by retaining a small portion of magnitude information.\n * Noda, I. (2008). Scaling techniques to enhance two-dimensional correlation spectra. Journal of Molecular Structure, 883, 216-227.\n * DOI: 10.1016/j.molstruc.2007.12.026\n * @param array - array of number\n */\nexport function xParetoNormalization(array) {\n    xCheck(array);\n    const result = new Float64Array(array.length);\n    const sqrtSD = Math.sqrt(xStandardDeviation(array));\n    for (let i = 0; i < array.length; i++) {\n        result[i] = array[i] / sqrtSD;\n    }\n    return result;\n}\n//# sourceMappingURL=xParetoNormalization.js.map","import { xBoxPlotWithOutliers } from './xBoxPlotWithOutliers';\nimport { xMean } from './xMean';\nimport { xStandardDeviation } from './xStandardDeviation';\n/**\n * Calculate distribution statistics of an array without providing options. Statistics\n * like sd and mean are calculated after removing outliers.\n * This ensure that the statistics are calculated in the same way in all the packages\n * If the array is empty it will throw an error\n * If the array has a length of 1, sd will be NaN (unbiased calculation of sd)\n * @param array - data\n * @param options\n * @returns - q1, median, q3, min, max\n */\nexport function xRobustDistributionStats(array) {\n    const boxPlot = xBoxPlotWithOutliers(array);\n    let filteredArray;\n    if (boxPlot.outliers.length === 0) {\n        filteredArray = array;\n    }\n    else {\n        filteredArray = new Float64Array(array.length - boxPlot.outliers.length);\n        let j = 0;\n        for (const element of array) {\n            if (element >= boxPlot.min && element <= boxPlot.max) {\n                filteredArray[j++] = element;\n            }\n        }\n    }\n    return {\n        ...boxPlot,\n        mean: xMean(filteredArray),\n        sd: xStandardDeviation(filteredArray),\n        nb: filteredArray.length,\n    };\n}\n//# sourceMappingURL=xRobustDistributionStats.js.map","import { isAnyArray } from 'is-any-array';\nimport { xBoxPlot } from './xBoxPlot';\n/**\n * Remove the outliers from the array\n * Based on 1.5 IQR\n * @param array - data\n * @returns - trimmed data\n */\nexport function xRemoveOutliersIQR(array) {\n    if (!isAnyArray(array)) {\n        throw new TypeError('input must be an array');\n    }\n    if (array.length === 0) {\n        return array;\n    }\n    const boxPlot = xBoxPlot(array);\n    const iqr = boxPlot.q3 - boxPlot.q1;\n    const lowerWhisker = boxPlot.q1 - 1.5 * iqr;\n    const higherWhisker = boxPlot.q3 + 1.5 * iqr;\n    if (boxPlot.min >= lowerWhisker && boxPlot.max <= higherWhisker) {\n        return array;\n    }\n    const filteredArray = [];\n    for (const element of array) {\n        if (element >= lowerWhisker && element <= higherWhisker) {\n            filteredArray.push(element);\n        }\n    }\n    return filteredArray;\n}\n//# sourceMappingURL=xRemoveOutliersIQR.js.map","import { getOutputArray } from './getOutputArray';\nimport { xCheck } from './xCheck';\nimport { xMaxValue } from './xMaxValue';\nimport { xMinValue } from './xMinValue';\n/**\n * Function used to rescale data\n * @param input - input for the rescale\n * @param options - options\n * @returns rescaled data\n */\nexport function xRescale(input, options = {}) {\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    const currentMin = xMinValue(input);\n    const currentMax = xMaxValue(input);\n    if (currentMin === currentMax) {\n        throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n    }\n    const { min = 0, max = 1 } = options;\n    if (min >= max) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + min;\n    }\n    return output;\n}\n//# sourceMappingURL=xRescale.js.map","import { xCheck } from './xCheck';\nimport { xPadding } from './xPadding';\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param fct - callback function that from an array returns a value\n * @param options - options\n */\nexport function xRolling(array, fct, options = {}) {\n    xCheck(array);\n    if (typeof fct !== 'function') {\n        throw new TypeError('fct must be a function');\n    }\n    const { window = 5, padding = {} } = options;\n    const { size = window - 1, algorithm, value } = padding;\n    const padded = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n    const newArray = [];\n    for (let i = 0; i < padded.length - window + 1; i++) {\n        // we will send a view to the original buffer\n        newArray.push(fct(padded.subarray(i, i + window)));\n    }\n    return newArray;\n}\n//# sourceMappingURL=xRolling.js.map","import { xMean } from './xMean';\nimport { xRolling } from './xRolling';\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - option\n */\nexport function xRollingAverage(array, options = {}) {\n    return xRolling(array, xMean, options);\n}\n//# sourceMappingURL=xRollingAverage.js.map","import { xMaxValue } from './xMaxValue';\nimport { xRolling } from './xRolling';\n/**\n * This function calculates a maximum within a rolling window\n * @param array - array\n * @param options - options\n */\nexport function xRollingMax(array, options = {}) {\n    return xRolling(array, xMaxValue, options);\n}\n//# sourceMappingURL=xRollingMax.js.map","import { xMedian } from './xMedian';\nimport { xRolling } from './xRolling';\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - options\n */\nexport function xRollingMedian(array, options = {}) {\n    return xRolling(array, xMedian, options);\n}\n//# sourceMappingURL=xRollingMedian.js.map","import { xMinValue } from './xMinValue';\nimport { xRolling } from './xRolling';\n/**\n * This function calculates a minimum within a rolling window\n * @param array - array\n * @param options - options\n */\nexport function xRollingMin(array, options = {}) {\n    return xRolling(array, xMinValue, options);\n}\n//# sourceMappingURL=xRollingMin.js.map","/**\n * This function performs a circular shift to an array.\n * Positive values of shifts will shift to the right and negative values will do to the left.\n * @example xRotate([1,2,3,4],1) -> [4,1,2,3]\n * @example xRotate([1,2,3,4],-1) -> [2,3,4,1]\n * @param array - array\n * @param shift - shift\n * @returns - rotated array\n */\nexport function xRotate(array, shift) {\n    shift = shift % array.length;\n    if (shift < 0)\n        shift += array.length;\n    const result = new Float64Array(array.length);\n    result.set(array.slice(array.length - shift));\n    result.set(array.slice(0, array.length - shift), shift);\n    return result;\n}\n//# sourceMappingURL=xRotate.js.map","import { xCheck } from './xCheck';\n/**\n * Sample within the array\n * @param array - array from which to sample\n * @param options - options\n * @returns - array with evenly spaced elements\n * @link https://en.wikipedia.org/wiki/Sampling_(signal_processing)\n */\nexport function xSampling(array, options = {}) {\n    const { length = 10 } = options;\n    xCheck(array);\n    if (length === array.length) {\n        return Float64Array.from(array);\n    }\n    else if (length > array.length) {\n        throw new RangeError('length must be smaller than the array length');\n    }\n    else {\n        return downSampling(array, length);\n    }\n}\n/**\n * Downsample within the array\n * @param array - array from which to sample\n * @param length\n * @returns - array with evenly spaced elements\n * @link https://en.wikipedia.org/wiki/Downsampling_(signal_processing)\n */\nfunction downSampling(array, length) {\n    const returnArray = new Float64Array(length);\n    const delta = (array.length - 1) / (length - 1);\n    for (let i = 0; i < length; i++) {\n        returnArray[i] = array[Math.round(i * delta)];\n    }\n    return returnArray;\n}\n//# sourceMappingURL=xSampling.js.map","import { createNumberArray } from '../utils';\nexport function xSequentialFillFromStep(parameters, options = {}) {\n    const { from, step, size } = parameters;\n    const { ArrayConstructor = Float64Array } = options;\n    const result = createNumberArray(ArrayConstructor, size);\n    for (let i = 0; i < size; i++) {\n        result[i] = from + i * step;\n    }\n    return result;\n}\n//# sourceMappingURL=xSequentialFillFromStep.js.map","import { xSequentialFillFromStep } from './xSequentialFillFromStep';\nexport function xSequentialFillFromTo(parameters, options = {}) {\n    const { from, to, size } = parameters;\n    const step = (to - from) / (size - 1);\n    return xSequentialFillFromStep({ from, step, size }, options);\n}\n//# sourceMappingURL=xSequentialFillFromTo.js.map","/**\n * Function that sorts arrays or Float64Arrays in ascending order in place !\n * This method is optimized for typed arrays.\n * @param array - array to sort\n * @returns sorted array\n */\nexport function xSortAscending(array) {\n    if (ArrayBuffer.isView(array)) {\n        return array.sort();\n    }\n    else if (Array.isArray(array)) {\n        return array.sort((a, b) => a - b);\n    }\n    throw new Error('trying to sort non array');\n}\n//# sourceMappingURL=xSortAscending.js.map","/**\n * Function that sorts arrays or Float64Arrays in descending order\n * @param array - array to sort\n * @returns sorted array\n */\nexport function xSortDescending(array) {\n    if (ArrayBuffer.isView(array)) {\n        return array.sort().reverse();\n    }\n    else if (Array.isArray(array)) {\n        return array.sort((a, b) => b - a);\n    }\n    throw new Error('trying to sort non array');\n}\n//# sourceMappingURL=xSortDescending.js.map","/**\n * XUniqueSorted.\n * @param array - array of numbers\n * @returns - sorted array\n */\nexport function xUniqueSorted(array) {\n    return Float64Array.from(new Set(array)).sort();\n}\n//# sourceMappingURL=xUniqueSorted.js.map","/*\nThe MIT License (MIT)\n\nCopyright (c) 2013 Eric Arnebäck\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n/**\n * Solves a system of linear equations using the Cholesky decomposition method.\n * It is a direct conversion to TS from {@link https://github.com/scijs/cholesky-solve}\n * @param nonZerosArray - The matrix in triplet form (array of arrays), where each sub-array contains three elements: row index, column index, and value.\n * @param dimension - The order of the matrix (number of rows/columns).\n * @param permutationEncoded - Optional permutation array. If provided, it will be used to permute the matrix.\n * @returns A function that takes a right-hand side vector `b` and returns the solution vector `x`, or `null` if the decomposition fails.\n */\nexport function matrixCholeskySolver(nonZerosArray, dimension, permutationEncoded) {\n    if (permutationEncoded) {\n        const pinv = new Array(dimension);\n        for (let k = 0; k < dimension; k++) {\n            pinv[permutationEncoded[k]] = k;\n        }\n        const mt = new Array(nonZerosArray.length);\n        for (let a = 0; a < nonZerosArray.length; ++a) {\n            const [r, c, value] = nonZerosArray[a];\n            const [ar, ac] = [pinv[r], pinv[c]];\n            mt[a] = ac < ar ? [ac, ar, value] : [ar, ac, value];\n        }\n        nonZerosArray = mt;\n    }\n    else {\n        permutationEncoded = [];\n        for (let i = 0; i < dimension; ++i) {\n            permutationEncoded[i] = i;\n        }\n    }\n    const ap = new Array(dimension + 1);\n    const ai = new Array(nonZerosArray.length);\n    const ax = new Array(nonZerosArray.length);\n    const lnz = [];\n    for (let i = 0; i < dimension; ++i) {\n        lnz[i] = 0;\n    }\n    for (const a of nonZerosArray) {\n        lnz[a[1]]++;\n    }\n    ap[0] = 0;\n    for (let i = 0; i < dimension; ++i) {\n        ap[i + 1] = ap[i] + lnz[i];\n    }\n    const colOffset = [];\n    for (let a = 0; a < dimension; ++a) {\n        colOffset[a] = 0;\n    }\n    for (const e of nonZerosArray) {\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(dimension);\n    const y = new Array(dimension);\n    const lp = new Array(dimension + 1);\n    const parent = new Array(dimension);\n    const lnzArray = new Array(dimension);\n    const flag = new Array(dimension);\n    const pattern = new Array(dimension);\n    const bp1 = new Array(dimension);\n    const x = new Array(dimension);\n    ldlSymbolic(dimension, ap, ai, lp, parent, lnzArray, flag);\n    const lx = new Array(lp[dimension]);\n    const li = new Array(lp[dimension]);\n    const result = ldlNumeric(dimension, ap, ai, ax, lp, parent, lnzArray, li, lx, d, y, pattern, flag);\n    if (result === dimension) {\n        return (b) => {\n            ldlPerm(dimension, bp1, b, permutationEncoded);\n            ldlLsolve(dimension, bp1, lp, li, lx);\n            ldlDsolve(dimension, bp1, d);\n            ldlLTsolve(dimension, bp1, lp, li, lx);\n            ldlPermt(dimension, x, bp1, permutationEncoded);\n            return x;\n        };\n    }\n    else {\n        return null;\n    }\n}\nfunction ldlSymbolic(dimension, ap, ai, lp, parent, lnz, flag) {\n    for (let k = 0; k < dimension; k++) {\n        parent[k] = -1;\n        flag[k] = k;\n        lnz[k] = 0;\n        const kk = k;\n        const p2 = ap[kk + 1];\n        for (let permutationEncoded = ap[kk]; permutationEncoded < p2; permutationEncoded++) {\n            let i = ai[permutationEncoded];\n            if (i < k) {\n                for (; flag[i] !== k; i = parent[i]) {\n                    if (parent[i] === -1)\n                        parent[i] = k;\n                    lnz[i]++;\n                    flag[i] = k;\n                }\n            }\n        }\n    }\n    lp[0] = 0;\n    for (let k = 0; k < dimension; k++) {\n        lp[k + 1] = lp[k] + lnz[k];\n    }\n}\nfunction ldlNumeric(dimension, ap, ai, ax, lp, parent, lnz, li, lx, d, y, pattern, flag) {\n    let yi, lKi;\n    let i, k, permutationEncoded, kk, p2, len, top;\n    for (k = 0; k < dimension; k++) {\n        y[k] = 0;\n        top = dimension;\n        flag[k] = k;\n        lnz[k] = 0;\n        kk = k;\n        p2 = ap[kk + 1];\n        for (permutationEncoded = ap[kk]; permutationEncoded < p2; permutationEncoded++) {\n            i = ai[permutationEncoded];\n            if (i <= k) {\n                y[i] += ax[permutationEncoded];\n                for (len = 0; flag[i] !== k; i = parent[i]) {\n                    pattern[len++] = i;\n                    flag[i] = k;\n                }\n                while (len > 0)\n                    pattern[--top] = pattern[--len];\n            }\n        }\n        d[k] = y[k];\n        y[k] = 0;\n        for (; top < dimension; top++) {\n            i = pattern[top];\n            yi = y[i];\n            y[i] = 0;\n            p2 = lp[i] + lnz[i];\n            for (permutationEncoded = lp[i]; permutationEncoded < p2; permutationEncoded++) {\n                y[li[permutationEncoded]] -= lx[permutationEncoded] * yi;\n            }\n            lKi = yi / d[i];\n            d[k] -= lKi * yi;\n            li[permutationEncoded] = k;\n            lx[permutationEncoded] = lKi;\n            lnz[i]++;\n        }\n        if (d[k] === 0)\n            return k;\n    }\n    return dimension;\n}\nfunction ldlLsolve(dimension, x, lp, li, lx) {\n    let j, permutationEncoded, p2;\n    for (j = 0; j < dimension; j++) {\n        p2 = lp[j + 1];\n        for (permutationEncoded = lp[j]; permutationEncoded < p2; permutationEncoded++) {\n            x[li[permutationEncoded]] -= lx[permutationEncoded] * x[j];\n        }\n    }\n}\nfunction ldlDsolve(dimension, x, d) {\n    for (let j = 0; j < dimension; j++) {\n        x[j] /= d[j];\n    }\n}\nfunction ldlLTsolve(dimension, x, lp, li, lx) {\n    let j, permutationEncoded, p2;\n    for (j = dimension - 1; j >= 0; j--) {\n        p2 = lp[j + 1];\n        for (permutationEncoded = lp[j]; permutationEncoded < p2; permutationEncoded++) {\n            x[j] -= lx[permutationEncoded] * x[li[permutationEncoded]];\n        }\n    }\n}\nfunction ldlPerm(dimension, x, b, permutationEncoded) {\n    let j;\n    for (j = 0; j < dimension; j++) {\n        x[j] = b[permutationEncoded[j]];\n    }\n}\nfunction ldlPermt(dimension, x, b, permutationEncoded) {\n    let j;\n    for (j = 0; j < dimension; j++) {\n        x[permutationEncoded[j]] = b[j];\n    }\n}\n//# sourceMappingURL=matrixCholeskySolver.js.map","/**\n * add the provided weights to a particular given system matrix (lD'D) in the triplet form and y data. This function is not general\n * it assumes that diagonal coefficients are in the even indexes, it is the case of the matrix generated by createSystemMatrix function.\n * It simulates the matrix operation W + lD'D and Wy.\n * @param leftHandSide - The original system matrix to be updated, a lower triangular non-zeros of the system matrix (lambda D'D).\n * @param rightHandSide - The original vector to be updated.\n * @param weights - The weights to apply to the system matrix and vector.\n * @returns An object that contains the news left and right hand-side of the system.\n */\nexport function addWeights(leftHandSide, rightHandSide, weights) {\n    const nbPoints = rightHandSide.length;\n    const l = nbPoints - 1;\n    const newLeftHandSide = new Array(leftHandSide.length);\n    const newRightHandSide = 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        newLeftHandSide[diag] = leftHandSide[diag].slice();\n        newLeftHandSide[next] = leftHandSide[next].slice();\n        newRightHandSide[i] = rightHandSide[i] * w;\n        newLeftHandSide[diag][2] += w;\n    }\n    newRightHandSide[l] = rightHandSide[l] * weights[l];\n    newLeftHandSide[l * 2] = leftHandSide[l * 2].slice();\n    newLeftHandSide[l * 2][2] += weights[l];\n    return {\n        leftHandSide: newLeftHandSide,\n        rightHandSide: newRightHandSide,\n    };\n}\n//# sourceMappingURL=addWeights.js.map","/**\n * Generates a lower triangular non-zeros of the first order smoother matrix (lambda D'D) where D is the derivate of the identity matrix\n * this function in combination with addWeights function can obtain (Q = W + lambda D'D) a penalized least square of Whittaker smoother,\n * it also generates a permutation encoded array.\n * @param dimension - The number of points in the matrix.\n * @param lambda - The factor of smoothness .\n * @returns An object containing the lower triangular non-zero elements of the matrix\n * and the permutation encoded array.\n * @property lowerTriangularNonZeros - The lower triangular non-zero elements of the matrix in triplet form.\n * @property permutationEncodedArray - The permutation encoded array generated using the Cuthill-McKee algorithm.\n */\nexport function createSystemMatrix(dimension, lambda) {\n    const upperTriangularNonZeros = [];\n    const last = dimension - 1;\n    for (let i = 0; i < last; i++) {\n        upperTriangularNonZeros.push([i, i, lambda * 2], [i, i + 1, -1 * lambda]);\n    }\n    upperTriangularNonZeros[0][2] = lambda;\n    upperTriangularNonZeros.push([last, last, lambda]);\n    return upperTriangularNonZeros;\n}\n//# sourceMappingURL=createSystemMatrix.js.map","import { matrixCholeskySolver } from '../matrix/matrixCholeskySolver';\nimport { addWeights } from '../utils/addWeights';\nimport { calculateAdaptiveWeights } from '../utils/calculateAdaptiveWeights';\nimport { createSystemMatrix } from '../utils/createSystemMatrix';\nimport { xEnsureFloat64 } from './xEnsureFloat64';\nimport { xMultiply } from './xMultiply';\n/**\n * Computes the baseline points for the given data using an iterative smoothing algorithm.\n * @param yData - The input data array.\n * @param options - The options for baseline computation.\n * @returns - The computed baseline points.\n */\nexport function xWhittakerSmoother(yData, options = {}) {\n    const { lambda = 100, maxIterations = 100, tolerance = 1e-6, factorStd = 3, learningRate = 0.5, minWeight = 0.01, } = options;\n    const size = yData.length;\n    // eslint-disable-next-line prefer-const\n    let { controlPoints, weights } = getWeightsAndControlPoints(yData, options);\n    const prevBaseline = new Float64Array(size);\n    let iteration = 0;\n    let delta = Infinity;\n    let baseline = xEnsureFloat64(yData);\n    const upperTriangularNonZeros = createSystemMatrix(size, lambda);\n    while (iteration < maxIterations && delta > tolerance) {\n        const { leftHandSide, rightHandSide } = addWeights(upperTriangularNonZeros, yData, weights);\n        const cho = matrixCholeskySolver(leftHandSide, size);\n        if (!cho) {\n            return baseline;\n        }\n        const newBaseline = cho(rightHandSide);\n        weights = calculateAdaptiveWeights(yData, newBaseline, weights, {\n            controlPoints,\n            minWeight,\n            learningRate,\n            factorStd,\n        });\n        delta = calculateDelta(newBaseline, prevBaseline, size);\n        prevBaseline.set(newBaseline);\n        baseline = xEnsureFloat64(newBaseline);\n        iteration++;\n    }\n    return baseline;\n}\n/**\n * Calculates the delta between the current and previous baseline.\n * @param baseline - The current baseline array.\n * @param prevBaseline - The previous baseline array.\n * @param n - The length of the arrays.\n * @returns - The calculated delta value.\n */\nfunction calculateDelta(baseline, prevBaseline, n) {\n    let sum = 0;\n    for (let i = 0; i < n; i++) {\n        sum += (baseline[i] - prevBaseline[i]) ** 2;\n    }\n    return Math.sqrt(sum / n);\n}\n/**\n * Retrieves the control points and weights for the given data, the weights are modified multiplication of controlPoints if it exists.\n * @param  y - The input data array.\n * @param  options - The options for control points and weights.\n * @returns - The control points and modified weights.\n */\nfunction getWeightsAndControlPoints(y, options = {}) {\n    const { length } = y;\n    const { controlPoints } = options;\n    const { weights = Float64Array.from({ length }).fill(1) } = options;\n    if (controlPoints && controlPoints.length !== y.length) {\n        throw new RangeError('controlPoints should match the length with X');\n    }\n    else if (weights.length !== y.length) {\n        throw new RangeError('weights should match the length with X');\n    }\n    return {\n        weights: controlPoints ? xMultiply(weights, controlPoints) : weights,\n        controlPoints,\n    };\n}\n/**\n * @deprecated Use xWhittakerSmoother instead.\n * TODO: Remove in next major version.\n */\nexport const xWhitakerSmoother = xWhittakerSmoother;\n//# sourceMappingURL=xWhittakerSmoother.js.map","/**\n * Phase correction filter.\n * @param data - complex spectrum\n * @param phi0 - Angle in radians for zero order phase correction\n * @param phi1 - Angle in radians for first order phase correction\n * @param options\n * @returns - returns a new object {re:[], im:[]}\n */\nexport function reimPhaseCorrection(data, phi0 = 0, phi1 = 0, options = {}) {\n    const { reverse = false } = options;\n    phi0 = Number.isFinite(phi0) ? phi0 : 0;\n    phi1 = Number.isFinite(phi1) ? phi1 : 0;\n    const re = data.re;\n    const im = data.im;\n    const length = data.re.length;\n    let firstAngle = phi0;\n    let delta = phi1 / length;\n    if (reverse) {\n        delta *= -1;\n        firstAngle += phi1;\n    }\n    const alpha = 2 * Math.sin(delta / 2) ** 2;\n    const beta = Math.sin(delta);\n    let cosTheta = Math.cos(firstAngle);\n    let sinTheta = Math.sin(firstAngle);\n    const newRe = new Float64Array(length);\n    const newIm = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        newRe[i] = re[i] * cosTheta - im[i] * sinTheta;\n        newIm[i] = im[i] * cosTheta + re[i] * sinTheta;\n        // calculate angles i+1 from i\n        const newCosTheta = cosTheta - (alpha * cosTheta + beta * sinTheta);\n        const newSinTheta = sinTheta - (alpha * sinTheta - beta * cosTheta);\n        cosTheta = newCosTheta;\n        sinTheta = newSinTheta;\n    }\n    return { re: newRe, im: newIm };\n}\n//# sourceMappingURL=reimPhaseCorrection.js.map","import { xNoiseSanPlot } from '../x';\nimport { reimAbsolute } from './reimAbsolute';\nimport { reimPhaseCorrection } from './reimPhaseCorrection';\n/**\n * Implementation of the algorithm for automatic phase correction: A robust, general automatic phase\n * correction algorithm for high-resolution NMR data. 10.1002/mrc.4586\n * @param data - complex spectrum\n * @param options - options\n */\nexport function reimAutoPhaseCorrection(data, options = {}) {\n    const { magnitudeMode = true, minRegSize = 30, factorNoise = 3, maxDistanceToJoin = 256, reverse = false, } = options;\n    const finalPeaks = detectBaselineRegions(data, {\n        maxDistanceToJoin,\n        magnitudeMode,\n        factorNoise,\n    });\n    const { re, im } = data;\n    const length = re.length;\n    const indexMask = reverse ? (i) => length - 1 - i : (i) => i;\n    let x0 = 0;\n    let counter = -1;\n    const res = [];\n    while (counter < length) {\n        const reTmp = [];\n        const imTmp = [];\n        while (!finalPeaks[indexMask(++counter)] && counter < length) {\n            // Add some extra points(0.1 ppm) at rigth and left sides of the region.\n            x0 = counter;\n        }\n        for (; finalPeaks[indexMask(counter)] && counter < length; counter += 2) {\n            reTmp.push(re[indexMask(counter)]);\n            imTmp.push(im[indexMask(counter)]);\n        }\n        if (reTmp.length > minRegSize) {\n            res.push(autoPhaseRegion(reTmp, imTmp, x0));\n        }\n    }\n    const { ph1, ph0 } = determiningGlobalValues(res.map((r) => r.x0 / length), res.map((r) => r.ph0), res.map((r) => r.area / 1e11));\n    const phased = reimPhaseCorrection({ re, im }, toRadians(ph0), toRadians(ph1), { reverse });\n    return { data: phased, ph0, ph1 };\n}\nfunction determiningGlobalValues(x, ph0Values, weights) {\n    if (x.length === 0) {\n        return { ph0: 0, ph1: 0 };\n    }\n    else if (x.length === 1) {\n        return { ph0: ph0Values[0], ph1: 0 };\n    }\n    const [ph1, ph0] = weightedLinearRegression(x, ph0Values, weights);\n    let indexMax = -1;\n    let maxDiff = Number.MIN_SAFE_INTEGER;\n    for (let i = 0; i < x.length; i++) {\n        const predictedPh0 = x[i] * ph1 + ph0;\n        const diff = Math.abs(ph0Values[i] - predictedPh0);\n        if (diff > 34 && maxDiff < diff) {\n            indexMax = i;\n            maxDiff = diff;\n        }\n    }\n    if (indexMax > -1) {\n        x.splice(indexMax, 1);\n        ph0Values.splice(indexMax, 1);\n        weights.splice(indexMax, 1);\n        return determiningGlobalValues(x, ph0Values, weights);\n    }\n    return { ph0, ph1 };\n}\nfunction detectBaselineRegions(data, options) {\n    const magnitudeData = options.magnitudeMode ? reimAbsolute(data) : data.re;\n    const ds = holoborodko(magnitudeData);\n    const peaksDs = robustBaseLineRegionsDetection(ds, options);\n    const peaksSp = robustBaseLineRegionsDetection(magnitudeData, options);\n    return peaksSp.map((sp, i) => sp && peaksDs[i]);\n}\n/**\n * AutoPhaseRegion.\n * @param re - Array of Number.\n * @param im - Array of Number.\n * @param x0 - Number.\n * @returns Region.\n */\nfunction autoPhaseRegion(re, im, x0) {\n    let start = -180;\n    let stop = 180;\n    const nSteps = 6;\n    let maxSteps = 10;\n    let bestAng = 0;\n    let minArea = Number.MAX_SAFE_INTEGER;\n    while (maxSteps > 0) {\n        const dAng = (stop - start) / (nSteps + 1);\n        for (let i = start; i <= stop; i += dAng) {\n            const tmpPhased = reimPhaseCorrection({ re, im }, toRadians(i), 0);\n            const negArea = getNegArea(tmpPhased.re);\n            if (negArea < minArea) {\n                [minArea, bestAng] = [negArea, i];\n            }\n        }\n        start = bestAng - dAng;\n        stop = bestAng + dAng;\n        maxSteps--;\n    }\n    // Calculate the area for the best angle\n    const phased = reimPhaseCorrection({ re, im }, toRadians(bestAng), 0);\n    let area = 0;\n    let sumX = 0;\n    for (let j = 0; j < re.length; j++) {\n        area += phased.re[j];\n        sumX += phased.re[j] * (j + x0);\n    }\n    return { ph0: bestAng, area, x0: sumX / area };\n}\n/**\n * Holoborodko.\n * @param s - Array of float.\n * @returns Array of float.\n */\nfunction holoborodko(s) {\n    const dk = new Float64Array(s.length);\n    for (let i = 5; i < s.length - 5; i++) {\n        dk[i] =\n            (42 * (s[i + 1] - s[i - 1]) +\n                48 * (s[i + 2] - s[i - 2]) +\n                27 * (s[i + 3] + s[i - 3]) +\n                8 * (s[i + 4] - s[i - 4]) +\n                s[i + 5] -\n                s[i - 5]) /\n                512;\n    }\n    //Fill the borders\n    for (let i = 0; i < 5; i++) {\n        dk[i] = dk[5];\n        dk[s.length - i - 1] = dk[s.length - 6];\n    }\n    return dk;\n}\n/**\n * RobustBaseLineRegionsDetection.\n * @param s\n * @param options\n * @param options.magnitudeMode\n * @param options.maxDistanceToJoin\n * @param options.factorNoise\n */\nfunction robustBaseLineRegionsDetection(s, options) {\n    const { maxDistanceToJoin, magnitudeMode, factorNoise } = options;\n    const mask = new Uint8Array(s.length);\n    for (let i = 0; i < s.length; i++) {\n        mask[i] = 0;\n    }\n    let change = true;\n    while (change) {\n        const noiseLevel = xNoiseSanPlot(s, { magnitudeMode });\n        const cutOff = factorNoise * noiseLevel.positive;\n        change = false;\n        for (let i = 0; i < s.length; i++) {\n            if (Math.abs(s[i]) > cutOff && !mask[i]) {\n                change = true;\n                mask[i] = 1;\n            }\n        }\n    }\n    // Clean up mask by merging peaks blocks, separated by just a few points(4??).\n    let count = 0;\n    let prev = 0;\n    for (let i = 0; i < s.length; i++) {\n        if (!mask[i]) {\n            count++;\n        }\n        else {\n            if (count < maxDistanceToJoin) {\n                for (let j = 0; j <= count; j++) {\n                    mask[prev + j] = 1;\n                }\n            }\n            while (mask[++i] && i < s.length)\n                ;\n            prev = i;\n            count = 0;\n        }\n    }\n    return mask;\n}\n/**\n * WeightedLinearRegression.\n * @param x\n * @param y\n * @param w\n */\nfunction weightedLinearRegression(x, y, w) {\n    let sxtw = 0;\n    let swx = 0;\n    let sw = 0;\n    let sxtwy = 0;\n    let swy = 0;\n    for (let i = 0; i < x.length; i++) {\n        sxtw += x[i] * x[i] * w[i];\n        swx += x[i] * w[i];\n        sw += w[i];\n        sxtwy += x[i] * w[i] * y[i];\n        swy += w[i] * y[i];\n    }\n    /* Just to know what is the matrix system that we solve\n     let Mx=[[sxtw, swx], [swx, sw]];\n     let My=[[sxtwy], [swy]];\n    */\n    //Mx inverse\n    const detMx = sxtw * sw - swx * swx;\n    const inMx = [\n        [sw / detMx, -swx / detMx],\n        [-swx / detMx, sxtw / detMx],\n    ];\n    return [\n        inMx[0][0] * sxtwy + inMx[0][1] * swy,\n        inMx[1][0] * sxtwy + inMx[1][1] * swy,\n    ];\n}\nfunction toRadians(degree) {\n    return (degree * Math.PI) / 180;\n}\nfunction getNegArea(data) {\n    let area = 0;\n    for (const element of data) {\n        if (element < 0)\n            area -= element;\n    }\n    return area;\n}\n//# sourceMappingURL=reimAutoPhaseCorrection.js.map","import FFT from 'fft.js';\nimport { xRotate } from '../x';\n/**\n * ReimFFT.\n * @param data - complex spectrum\n * @param options - options.\n * @returns FFT of complex spectrum.\n */\nexport function reimFFT(data, options = {}) {\n    const { inverse = false, applyZeroShift = false } = options;\n    const { re, im } = data;\n    const size = re.length;\n    const csize = size << 1;\n    let complexArray = new Float64Array(csize);\n    for (let i = 0; i < csize; i += 2) {\n        complexArray[i] = re[i >>> 1];\n        complexArray[i + 1] = im[i >>> 1];\n    }\n    const fft = new FFT(size);\n    let output = new Float64Array(csize);\n    if (inverse) {\n        if (applyZeroShift)\n            complexArray = zeroShift(complexArray, true);\n        fft.inverseTransform(output, complexArray);\n    }\n    else {\n        fft.transform(output, complexArray);\n        if (applyZeroShift)\n            output = zeroShift(output);\n    }\n    const newRe = new Float64Array(size);\n    const newIm = new Float64Array(size);\n    for (let i = 0; i < csize; i += 2) {\n        newRe[i >>> 1] = output[i];\n        newIm[i >>> 1] = output[i + 1];\n    }\n    return { re: newRe, im: newIm };\n}\nfunction zeroShift(data, inverse) {\n    const middle = inverse\n        ? Math.ceil(data.length / 2)\n        : Math.floor(data.length / 2);\n    return xRotate(data, middle);\n}\n//# sourceMappingURL=reimFFT.js.map","/**\n * This function make a zero filling to re and im part.\n * @param data - object of kind {re:[], im:[]}\n * @param totalLength - final number of points\n * @returns - New DataReIm object with zero-filled,\n * truncated arrays if totalLength is smaller current length or\n * the same input if totalLength is equal that current length\n */\nexport function reimZeroFilling(data, totalLength) {\n    if (!Number.isInteger(totalLength) || totalLength < 0) {\n        throw new RangeError('totalLength must be a non-negative integer');\n    }\n    const { re, im } = data;\n    const length = re.length;\n    if (totalLength === 0 || length === totalLength)\n        return data;\n    if (length > totalLength) {\n        return {\n            re: re.slice(0, totalLength),\n            im: im.slice(0, totalLength),\n        };\n    }\n    const newRE = new Float64Array(totalLength);\n    const newIM = new Float64Array(totalLength);\n    newRE.set(re);\n    newIM.set(im);\n    return {\n        re: newRE,\n        im: newIM,\n    };\n}\n//# sourceMappingURL=reimZeroFilling.js.map","/**\n * Align data of two spectra by verifying wether x values are in a certain range (`delta`).\n * The two spectra should not have two consecutive x values which difference is\n * smaller than `delta` to achieve good results!\n * @param data1 - First spectrum data\n * @param data2 - Second spectrum data\n * @param options - Options\n */\nexport function xyAlign(data1, data2, options = {}) {\n    const { delta = 1, common = true, x = 'x1' } = options;\n    const result = {\n        x: [],\n        y1: [],\n        y2: [],\n    };\n    let i = 0;\n    let j = 0;\n    const length1 = data1.x.length;\n    const length2 = data2.x.length;\n    while (i < length1 && j < length2) {\n        let maxDiff = 0;\n        if (typeof delta === 'function') {\n            const mean = (data1.x[i] + data2.x[j]) / 2; // is this a good thing to do?\n            maxDiff = delta(mean);\n        }\n        else {\n            maxDiff = delta;\n        }\n        const difference = data1.x[i] - data2.x[j];\n        if (Math.abs(difference) > maxDiff) {\n            if (difference > 0) {\n                if (!common) {\n                    result.x.push(data2.x[j]);\n                    result.y1.push(0);\n                    result.y2.push(data2.y[j]);\n                    if (j === length2 - 1) {\n                        while (i < length1) {\n                            result.x.push(data1.x[i]);\n                            result.y1.push(data1.y[i]);\n                            result.y2.push(0);\n                            i++;\n                        }\n                    }\n                }\n                j++;\n            }\n            else {\n                if (!common) {\n                    result.x.push(data1.x[i]);\n                    result.y1.push(data1.y[i]);\n                    result.y2.push(0);\n                    if (i === length1 - 1) {\n                        while (j < length2) {\n                            result.x.push(data2.x[j]);\n                            result.y1.push(0);\n                            result.y2.push(data2.y[j]);\n                            j++;\n                        }\n                    }\n                }\n                i++;\n            }\n        }\n        else {\n            const weightedX = (data1.x[i] * data1.y[i] + data2.x[j] * data2.y[j]) /\n                (data1.y[i] + data2.y[j]);\n            switch (x) {\n                case 'x1':\n                    result.x.push(data1.x[i]);\n                    break;\n                case 'x2':\n                    result.x.push(data2.x[j]);\n                    break;\n                case 'weighted':\n                    result.x.push(weightedX);\n                    break;\n                default:\n                    throw new Error(`unknown x option value: ${String(x)}`);\n            }\n            result.y1.push(data1.y[i]);\n            result.y2.push(data2.y[j]);\n            i++;\n            j++;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyAlign.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 { xMean } from '../x';\n/**\n * Finds the covariance of the points.\n * @param data\n * @param options\n * @returns the covariance\n */\nexport function xyCovariance(data, options = {}) {\n    const { x, y } = data;\n    const { unbiased = true } = options;\n    const meanX = xMean(x);\n    const meanY = xMean(y);\n    let error = 0;\n    for (let i = 0; i < x.length; i++) {\n        error += (x[i] - meanX) * (y[i] - meanY);\n    }\n    if (unbiased) {\n        return error / (x.length - 1);\n    }\n    else {\n        return error / x.length;\n    }\n}\n//# sourceMappingURL=xyCovariance.js.map","import { xGetFromToIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Finds the max y value in a range and return a {x,y} point\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n */\nexport function xyMaxYPoint(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1) {\n        return { x: x[0], y: y[0], index: 0 };\n    }\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let current = { x: x[fromIndex], y: y[fromIndex], index: fromIndex };\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] > current.y)\n            current = { x: x[i], y: y[i], index: i };\n    }\n    return current;\n}\n//# sourceMappingURL=xyMaxYPoint.js.map","import { xCumulative, xMaxValue } from '../x';\nimport { xyCheck } from './xyCheck';\nimport { xyMaxYPoint } from './xyMaxYPoint';\nconst STEPS = [0.25, 0.5, 0.75];\n/**\n * Cumulative Distribution Statistics\n * @param data - array of points {x,y}\n * @returns x0, x25, x50, x75, x100, xMode, xMean (x for maxY)\n */\nexport function xyCumulativeDistributionStatistics(data) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const cumulativeSum = xCumulative(y);\n    const maxY = xMaxValue(cumulativeSum);\n    for (let i = 0; i < cumulativeSum.length; i++) {\n        cumulativeSum[i] /= maxY;\n    }\n    const result = {\n        x0: 0,\n        x25: 0,\n        x50: 0,\n        x75: 0,\n        x100: 0,\n        xMode: 0,\n        xMean: 0,\n    };\n    // need to find the x values closest to STEPS/100\n    result.x0 = x[0];\n    result.x100 = x.at(-1);\n    let currentStep = 0;\n    breakPoint: for (let i = 1; i < cumulativeSum.length; i++) {\n        while (STEPS[currentStep] < cumulativeSum[i]) {\n            // Key is computed dynamically with a multiplication. This cannot be type-safe, hence the \"as\" assertion.\n            const key = `x${STEPS[currentStep] * 100}`;\n            result[key] =\n                x[i - 1] +\n                    (x[i] - x[i - 1]) *\n                        ((STEPS[currentStep] - cumulativeSum[i - 1]) /\n                            (cumulativeSum[i] - cumulativeSum[i - 1]));\n            currentStep++;\n            if (currentStep === STEPS.length)\n                break breakPoint;\n        }\n    }\n    result.xMode = xyMaxYPoint(data).x;\n    let sumXY = 0;\n    let sumY = 0;\n    for (let i = 0; i < x.length; i++) {\n        sumXY += x[i] * y[i];\n        sumY += y[i];\n    }\n    result.xMean = sumXY / sumY;\n    return result;\n}\n//# sourceMappingURL=xyCumulativeDistributionStatistics.js.map","import { xEnsureFloat64 } from '../x';\nexport function xyEnsureFloat64(data) {\n    return {\n        x: xEnsureFloat64(data.x),\n        y: xEnsureFloat64(data.y),\n    };\n}\n//# sourceMappingURL=xyEnsureFloat64.js.map","import { xIsMonotonic } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Filters x,y values to allow strictly growing values in x-axis.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array).\n */\nexport function xyEnsureGrowingX(data) {\n    xyCheck(data);\n    if (xIsMonotonic(data.x) === 1)\n        return data;\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    let prevX = Number.NEGATIVE_INFINITY;\n    let currentIndex = 0;\n    for (let index = 0; index < x.length; index++) {\n        if (prevX < x[index]) {\n            if (currentIndex < index) {\n                x[currentIndex] = x[index];\n                y[currentIndex] = y[index];\n            }\n            currentIndex++;\n            prevX = x[index];\n        }\n    }\n    x.length = currentIndex;\n    y.length = currentIndex;\n    return { x, y };\n}\n//# sourceMappingURL=xyEnsureGrowingX.js.map","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n * - deal with exclusions zones\n * - if no zones is specified add one between -Infinity and +Infinity\n * @param zones - array of zones\n * @param options - options\n * @returns array of zones\n */\nexport function zonesNormalize(zones = [], options = {}) {\n    const { exclusions = [] } = options;\n    let { from = Number.NEGATIVE_INFINITY, to = Number.POSITIVE_INFINITY } = options;\n    if (from > to)\n        [from, to] = [to, from];\n    zones = zones\n        .map((zone) => zone.from > zone.to ? { from: zone.to, to: zone.from } : { ...zone })\n        .sort((a, b) => {\n        if (a.from !== b.from)\n            return a.from - b.from;\n        return a.to - b.to;\n    });\n    if (zones.length === 0) {\n        zones.push({ from, to });\n    }\n    for (const zone of zones) {\n        if (from > zone.from)\n            zone.from = from;\n        if (to < zone.to)\n            zone.to = to;\n    }\n    zones = zones.filter((zone) => zone.from <= zone.to);\n    if (zones.length === 0)\n        return [];\n    let currentZone = zones[0];\n    const beforeExclusionsZones = [currentZone];\n    for (let i = 1; i < zones.length; i++) {\n        const zone = zones[i];\n        if (zone.from <= currentZone.to) {\n            if (currentZone.to < zone.to) {\n                currentZone.to = zone.to;\n            }\n        }\n        else {\n            currentZone = zone;\n            beforeExclusionsZones.push(currentZone);\n        }\n    }\n    if (exclusions.length === 0)\n        return beforeExclusionsZones;\n    const normalizedExclusions = zonesNormalize(exclusions);\n    let currentExclusionIndex = 0;\n    const results = [];\n    for (let zoneIndex = 0; zoneIndex < beforeExclusionsZones.length; zoneIndex++) {\n        const zone = beforeExclusionsZones[zoneIndex];\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        while (currentExclusionIndex < normalizedExclusions.length &&\n            normalizedExclusions[currentExclusionIndex].to <= zone.from) {\n            currentExclusionIndex++;\n        }\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        if (zone.to < normalizedExclusions[currentExclusionIndex].from) {\n            // no problems, not yet in exclusion\n            results.push(zone);\n            continue;\n        }\n        if (normalizedExclusions[currentExclusionIndex].to >= zone.to) {\n            // could be totally excluded\n            if (normalizedExclusions[currentExclusionIndex].from <= zone.from) {\n                continue;\n            }\n            results.push({\n                from: normalizedExclusions[currentExclusionIndex].to,\n                to: zone.to,\n            });\n        }\n        // we cut in the middle, we need to create more zones, annoying !\n        if (normalizedExclusions[currentExclusionIndex].from > zone.from) {\n            results.push({\n                from: zone.from,\n                to: normalizedExclusions[currentExclusionIndex].from,\n            });\n        }\n        zone.from = normalizedExclusions[currentExclusionIndex].to;\n        zoneIndex--;\n    }\n    return results;\n}\n//# sourceMappingURL=zonesNormalize.js.map","import { zonesNormalize } from './zonesNormalize';\n/**\n * Add the number of points per zone to reach a specified total\n * @param zones - array of zones\n * @param numberOfPoints - total number of points to distribute between zones\n * @param options - options\n * @returns array of zones with points\n */\nexport function zonesWithPoints(zones = [], \n/**\n * total number of points to distribute between zones\n * @default 10\n */\nnumberOfPoints = 10, options = {}) {\n    if (zones.length === 0)\n        return [];\n    const normalizedZones = zonesNormalize(zones, options);\n    const zonesWithNumberOfPoints = [];\n    const totalSize = normalizedZones.reduce((previous, current) => {\n        return previous + (current.to - current.from);\n    }, 0);\n    const unitsPerPoint = totalSize / numberOfPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < normalizedZones.length - 1; i++) {\n        const tempZone = normalizedZones[i];\n        const tempZoneNumberOfPoints = Math.min(Math.round((tempZone.to - tempZone.from) / unitsPerPoint), numberOfPoints - currentTotal);\n        zonesWithNumberOfPoints.push({\n            ...tempZone,\n            numberOfPoints: tempZoneNumberOfPoints,\n        });\n        currentTotal += tempZoneNumberOfPoints;\n    }\n    zonesWithNumberOfPoints.push({\n        ...normalizedZones.at(-1),\n        numberOfPoints: numberOfPoints - currentTotal,\n    });\n    return zonesWithNumberOfPoints;\n}\n//# sourceMappingURL=zonesWithPoints.js.map","/**\n * Function that retrieves the getEquallySpacedData with the variant \"slot\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    if (xLength < 2) {\n        return Float64Array.from(x);\n    }\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    const lastStep = x.at(-1) - x.at(-2);\n    const start = from - halfStep;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    // Init main variables\n    let min = start;\n    let max = start + step;\n    let previousX = -Number.MAX_VALUE;\n    let previousY = 0;\n    let nextX = x[0];\n    let nextY = y[0];\n    let frontOutsideSpectra = 0;\n    let backOutsideSpectra = true;\n    let currentValue = 0;\n    // for slot algorithm\n    let currentPoints = 0;\n    let i = 1; // index of input\n    let j = 0; // index of output\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        while (previousX - max > 0) {\n            // no overlap with original point, just consume current value\n            if (backOutsideSpectra) {\n                currentPoints++;\n                backOutsideSpectra = false;\n            }\n            output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n            j++;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            currentValue = 0;\n            currentPoints = 0;\n        }\n        if (previousX > min) {\n            currentValue += previousY;\n            currentPoints++;\n        }\n        if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n            currentPoints--;\n        }\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else {\n            nextX += lastStep;\n            nextY = 0;\n            frontOutsideSpectra++;\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=equallySpacedSlot.js.map","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param x0\n * @param x1\n * @param slope\n * @param intercept\n * @returns integral value.\n */\nexport default function integral(\n/** first coordinate of point */\nx0, \n/** second coordinate of point */\nx1, \n/** slope of the line */\nslope, \n/** intercept of the line on the y axis */\nintercept) {\n    return (0.5 * slope * x1 * x1 +\n        intercept * x1 -\n        (0.5 * slope * x0 * x0 + intercept * x0));\n}\n//# sourceMappingURL=integral.js.map","import integral from './integral';\n/**\n * Function that retrieves the getEquallySpacedData with the variant \"smooth\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    const initialOriginalStep = x[1] - x[0];\n    const lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n    // Init main variables\n    let min = from - halfStep;\n    let max = from + halfStep;\n    let previousX = Number.MIN_SAFE_INTEGER;\n    let previousY = 0;\n    let nextX = x[0] - initialOriginalStep;\n    let nextY = 0;\n    let currentValue = 0;\n    let slope = 0;\n    let intercept = 0;\n    let sumAtMin = 0;\n    let sumAtMax = 0;\n    let i = 0; // index of input\n    let j = 0; // index of output\n    let add = 0;\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        if (previousX <= min && min <= nextX) {\n            add = integral(0, min - previousX, slope, previousY);\n            sumAtMin = currentValue + add;\n        }\n        while (nextX - max >= 0) {\n            // no overlap with original point, just consume current value\n            add = integral(0, max - previousX, slope, previousY);\n            sumAtMax = currentValue + add;\n            output[j++] = (sumAtMax - sumAtMin) / step;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            sumAtMin = sumAtMax;\n        }\n        currentValue += integral(previousX, nextX, slope, intercept);\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else if (i === xLength) {\n            nextX += lastOriginalStep;\n            nextY = 0;\n        }\n        slope = getSlope(previousX, previousY, nextX, nextY);\n        intercept = -slope * previousX + previousY;\n    }\n    return output;\n}\nfunction getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n}\n//# sourceMappingURL=equallySpacedSmooth.js.map","import { createFromToArray } from '../utils';\nimport { zonesNormalize, zonesWithPoints } from '../zones';\nimport equallySpacedSlot from './utils/equallySpacedSlot';\nimport equallySpacedSmooth from './utils/equallySpacedSmooth';\nimport { xyCheck } from './xyCheck';\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in an array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in an array.\n *\n * If exclusions zone are present, zones are ignored !\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns new object with x / y array with the equally spaced data.\n */\nexport function xyEquallySpaced(data, options = {}) {\n    const { x, y } = data;\n    const xLength = x.length;\n    const { from = x[0], to = x[xLength - 1], variant = 'smooth', numberOfPoints = 100, exclusions = [], zones = [{ from, to }], } = options;\n    if (from > to) {\n        throw new RangeError('from should be larger than to');\n    }\n    xyCheck(data);\n    if (numberOfPoints < 2) {\n        throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n    }\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    const zonesWithPointsRes = zonesWithPoints(normalizedZones, numberOfPoints, {\n        from,\n        to,\n    }).filter((zone) => zone.numberOfPoints);\n    let xResult = [];\n    let yResult = [];\n    for (const zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        const zoneResult = processZone(Array.from(x), Array.from(y), zone.from, zone.to, zone.numberOfPoints, variant);\n        xResult = xResult.concat(zoneResult.x);\n        yResult = yResult.concat(zoneResult.y);\n    }\n    return { x: xResult, y: yResult };\n}\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n    if (numberOfPoints < 1) {\n        throw new RangeError('the number of points must be at least 1');\n    }\n    const output = variant === 'slot'\n        ? Array.from(equallySpacedSlot(x, y, from, to, numberOfPoints))\n        : Array.from(equallySpacedSmooth(x, y, from, to, numberOfPoints));\n    return {\n        x: Array.from(createFromToArray({\n            from,\n            to,\n            length: numberOfPoints,\n        })),\n        y: output,\n    };\n}\n//# sourceMappingURL=xyEquallySpaced.js.map","import { zonesNormalize } from '../zones';\nimport { xyCheck } from './xyCheck';\n/**\n * Extract zones from a XY data.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - Array of points\n */\nexport function xyExtract(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    let { zones } = options;\n    zones = zonesNormalize(zones);\n    if (x === undefined ||\n        y === undefined ||\n        !Array.isArray(zones) ||\n        zones.length === 0) {\n        return data;\n    }\n    const newX = [];\n    const newY = [];\n    let currentZone = zones[0];\n    let position = 0;\n    loop: for (let i = 0; i < x.length; i++) {\n        while (currentZone.to < x[i]) {\n            position++;\n            currentZone = zones[position];\n            if (!currentZone) {\n                i = x.length;\n                break loop;\n            }\n        }\n        if (x[i] >= currentZone.from) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyExtract.js.map","/**\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 xyFilter(data, options = {}) {\n    const { x, y } = data;\n    const { filter } = options;\n    const newX = [];\n    const newY = [];\n    for (let i = 0; i < x.length; i++) {\n        if (!filter || filter(x[i], y[i])) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilter.js.map","import { xMinMaxValues } from '../x';\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 minRelativeYValue - the minimum relative value compare to the Y max value\n * @returns filtered data\n */\nexport function xyFilterMinYValue(data, minRelativeYValue) {\n    if (minRelativeYValue === undefined)\n        return data;\n    const { x, y } = data;\n    const { min, max } = xMinMaxValues(y);\n    const threshold = max * minRelativeYValue;\n    if (min >= threshold)\n        return data;\n    const newX = [];\n    const newY = [];\n    for (let i = 0; i < x.length; i++) {\n        if (y[i] >= threshold) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterMinYValue.js.map","import { xSortDescending } from '../x';\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 nbPeaks\n * @returns filtered data\n */\nexport function xyFilterTopYValues(data, nbPeaks) {\n    if (nbPeaks === undefined)\n        return data;\n    if (nbPeaks > data.x.length)\n        return data;\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    const descending = xSortDescending(y.slice());\n    const threshold = descending[nbPeaks - 1];\n    let nbThreshold = 0;\n    for (let i = 0; i < nbPeaks; i++) {\n        if (descending[i] === threshold) {\n            nbThreshold++;\n        }\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (y[i] > threshold) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n        else if (y[i] === threshold) {\n            nbThreshold--;\n            if (nbThreshold >= 0) {\n                newX.push(x[i]);\n                newY.push(y[i]);\n            }\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterTopYValues.js.map","import { zonesNormalize } from '../zones';\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns filtered array\n */\nexport function xyFilterX(data, options = {}) {\n    const { x, y } = data;\n    if (x.length === 0) {\n        return {\n            x: Array.from(x),\n            y: Array.from(y),\n        };\n    }\n    const { from = x[0], to = x.at(-1), zones = [{ from, to }], exclusions = [], } = options;\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    let currentZoneIndex = 0;\n    const newX = [];\n    const newY = [];\n    let position = 0;\n    while (position < x.length) {\n        if (x[position] <= normalizedZones[currentZoneIndex].to &&\n            x[position] >= normalizedZones[currentZoneIndex].from) {\n            newX.push(x[position]);\n            newY.push(y[position]);\n        }\n        else if (x[position] > normalizedZones[currentZoneIndex].to) {\n            currentZoneIndex++;\n            if (!normalizedZones[currentZoneIndex])\n                break;\n        }\n        position++;\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterX.js.map","import { xyCheck } from './xyCheck';\n/**\n * Filter out all the points for which x <= 0. Useful to display log scale data\n * @param data - data\n * @returns - An object with the filtered data\n */\nexport function xyFilterXPositive(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    if (x === undefined || y === undefined) {\n        return { x: newX, y: newY };\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (x[i] > 0) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyFilterXPositive.js.map","import { xFindClosestIndex } from '../x';\n/**\n * Finds the closest point\n * @param data - x array should be sorted and ascending\n * @param target - target to search\n * @returns - closest point\n */\nexport function xyFindClosestPoint(\n/** points */\ndata, target) {\n    const { x, y } = data;\n    const index = xFindClosestIndex(x, target);\n    return {\n        x: x[index],\n        y: y[index],\n    };\n}\n//# sourceMappingURL=xyFindClosestPoint.js.map","import { xyCheck } from './xyCheck';\n/**\n * Returns the numberMaxPoints points with the bigger y.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param numberMaxPoints - Number of points to keep\n * @returns - The points filtered to keep the `numberMaxPoints` most intense points of the input.\n */\nexport function xyGetNMaxY(data, numberMaxPoints) {\n    xyCheck(data);\n    if (data.x.length <= numberMaxPoints) {\n        return data;\n    }\n    else {\n        const newX = new Float64Array(numberMaxPoints);\n        const newY = new Float64Array(numberMaxPoints);\n        // slice() is used to make a copy of the array, because sort() is IPM\n        const threshold = Float64Array.from(data.y).sort().reverse()[numberMaxPoints - 1];\n        let index = 0;\n        for (let i = 0; i < data.x.length; i++) {\n            if (data.y[i] >= threshold) {\n                newX[index] = data.x[i];\n                newY[index] = data.y[i];\n                index++;\n            }\n            if (index === numberMaxPoints) {\n                return { x: newX, y: newY };\n            }\n        }\n        return data;\n    }\n}\n//# sourceMappingURL=xyGetNMaxY.js.map","/**\n * Order object of array, x has to be monotone. Ensure x is growing\n * @param data - Object of kind {x:[], y:[]}.\n */\nexport function xyGrowingX(data) {\n    const { x, y } = data;\n    if (x.length !== y.length) {\n        throw new TypeError('length of x and y must be identical');\n    }\n    if (x.length < 2 || x[0] < x.at(-1))\n        return data;\n    return {\n        x: x.slice(0).reverse(),\n        y: y.slice(0).reverse(),\n    };\n}\n//# sourceMappingURL=xyGrowingX.js.map","import { xGetFromToIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Generate a X / Y of the xyIntegral\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 xyIntegral(data, options = {}) {\n    const { reverse = false } = options;\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let xyIntegration = 0;\n    const currentxyIntegral = {\n        x: new Float64Array(toIndex - fromIndex + 1),\n        y: new Float64Array(toIndex - fromIndex + 1),\n    };\n    let index = 0;\n    if (reverse) {\n        currentxyIntegral.y[index] = 0;\n        currentxyIntegral.x[index++] = x[toIndex];\n        for (let i = toIndex; i > fromIndex; i--) {\n            xyIntegration += ((x[i] - x[i - 1]) * (y[i - 1] + y[i])) / 2;\n            currentxyIntegral.x[index] = x[i - 1];\n            currentxyIntegral.y[index++] = xyIntegration;\n        }\n        currentxyIntegral.x.reverse();\n        currentxyIntegral.y.reverse();\n    }\n    else {\n        currentxyIntegral.y[index] = 0;\n        currentxyIntegral.x[index++] = x[fromIndex];\n        for (let i = fromIndex; i < toIndex; i++) {\n            xyIntegration += ((x[i + 1] - x[i]) * (y[i + 1] + y[i])) / 2;\n            currentxyIntegral.x[index] = x[i + 1];\n            currentxyIntegral.y[index++] = xyIntegration;\n        }\n    }\n    return currentxyIntegral;\n}\n//# sourceMappingURL=xyIntegral.js.map","import { xGetFromToIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Calculate integration\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - xyIntegration value on the specified range\n */\nexport function xyIntegration(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        return 0;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let currentxyIntegration = 0;\n    for (let i = fromIndex; i < toIndex; i++) {\n        currentxyIntegration += ((x[i + 1] - x[i]) * (y[i + 1] + y[i])) / 2;\n    }\n    return currentxyIntegration;\n}\n//# sourceMappingURL=xyIntegration.js.map","import { xyCheck } from './xyCheck';\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","import { xGetFromToIndex } from '../x/xGetFromToIndex';\nimport { xyCheck } from './xyCheck';\n/**\n * Computes the weighted mean value of an array of values.\n * @param data - array of DataXY\n * @param options - options\n */\nexport function xyMassCenter(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let sumYs = 0;\n    let sumProducts = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sumProducts += x[i] * y[i];\n        sumYs += y[i];\n    }\n    if (sumYs === 0) {\n        throw new Error('Sum of Ys can not be zero.');\n    }\n    return sumProducts / sumYs;\n}\n//# sourceMappingURL=xyMassCenter.js.map","import { xFindClosestIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * We will calculate a vector containing center of mass of DataXY as well as center of mass of both parts, etc.\n * This approach allows to efficiently represent spectra like XPS, NMR, etc. It should provide an extremely efficient\n * way to store and search similar spectra.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options\n * @returns - Array of centers of mass\n */\nexport function xyMassCenterVector(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { depth = 5 } = options;\n    const { weightedIntegral, integral } = getWeightedIntegral(data);\n    const results = new Float64Array((1 << depth) - 1);\n    const endIndexes = new Int32Array((1 << depth) - 1);\n    endIndexes[0] = data.x.length - 1;\n    const beginIndexes = new Int32Array((1 << depth) - 1);\n    beginIndexes[0] = -1;\n    let index = 0;\n    for (let i = 0; i < depth; i++) {\n        for (let j = 0; j < 1 << i; j++) {\n            const currentBeginIndex = beginIndexes[index];\n            const currentEndIndex = endIndexes[index];\n            const currentIntegration = currentBeginIndex === -1\n                ? integral[currentEndIndex]\n                : integral[currentEndIndex] - integral[currentBeginIndex];\n            // we need to solve the issue of null integration (rather in simulated spectra).\n            let x = 0;\n            if (currentIntegration !== 0) {\n                x =\n                    currentBeginIndex === -1\n                        ? weightedIntegral[currentEndIndex] / currentIntegration\n                        : (weightedIntegral[currentEndIndex] -\n                            weightedIntegral[currentBeginIndex]) /\n                            currentIntegration;\n            }\n            else {\n                x = (data.x[currentEndIndex] + data.x[currentBeginIndex]) / 2;\n            }\n            results[index++] = x;\n            // we can now prepare the next level\n            if (i < depth - 1) {\n                const nextIndex = (1 << (i + 1)) + j * 2 - 1;\n                let middleIndex = xFindClosestIndex(data.x, x);\n                if (middleIndex === currentBeginIndex) {\n                    middleIndex++;\n                }\n                beginIndexes[nextIndex] = currentBeginIndex;\n                endIndexes[nextIndex] = middleIndex;\n                if (middleIndex === currentEndIndex) {\n                    middleIndex--;\n                }\n                beginIndexes[nextIndex + 1] = middleIndex;\n                endIndexes[nextIndex + 1] = currentEndIndex;\n            }\n        }\n    }\n    return results;\n}\nfunction getWeightedIntegral(data) {\n    const { x, y } = data;\n    const weightedIntegral = new Float64Array(x.length);\n    const integral = new Float64Array(x.length);\n    // the first point, no points before\n    const firstIntegration = (x[1] - x[0]) * y[0];\n    let totalIntegration = firstIntegration;\n    integral[0] = totalIntegration;\n    let totalWeightedIntegral = firstIntegration * x[0];\n    weightedIntegral[0] = totalWeightedIntegral;\n    for (let i = 1; i < x.length - 1; i++) {\n        const currentIntegration = ((x[i + 1] - x[i - 1]) * y[i]) / 2;\n        const currentX = x[i];\n        totalIntegration += currentIntegration;\n        integral[i] = totalIntegration;\n        totalWeightedIntegral += currentIntegration * currentX;\n        weightedIntegral[i] = totalWeightedIntegral;\n    }\n    // the last point, no points after\n    const lastIntegration = (x.at(-1) - x.at(-2)) * y.at(-1);\n    totalIntegration += lastIntegration;\n    integral[x.length - 1] = totalIntegration;\n    totalWeightedIntegral += lastIntegration * x.at(-1);\n    weightedIntegral[x.length - 1] = totalWeightedIntegral;\n    return { integral, weightedIntegral };\n}\n//# sourceMappingURL=xyMassCenterVector.js.map","import { xFindClosestIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Find the closest maximum going up hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - An object with the x/y value\n */\nexport function xyMaxClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let xyMaxY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] > xyMaxY) {\n            currentIndex--;\n        }\n        else if (currentIndex < x.length - 1 && y[currentIndex + 1] > xyMaxY) {\n            currentIndex++;\n        }\n        xyMaxY = y[currentIndex];\n    }\n    return {\n        x: x[currentIndex],\n        y: y[currentIndex],\n        index: currentIndex,\n    };\n}\n//# sourceMappingURL=xyMaxClosestYPoint.js.map","import { xGetFromToIndex } from '../x/xGetFromToIndex';\nimport { xyCheck } from './xyCheck';\n/**\n * Finds all the max values\n * If the values are equal the middle\n * of the equal part will be the position of the signal!\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Object with from and to properties\n * @returns - Array of points\n */\nexport function xyMaximaY(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    const maxima = [];\n    let startEqualIndex = -1;\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (y[i - 1] < y[i] && y[i + 1] < y[i]) {\n            maxima.push({ x: x[i], y: y[i], index: i });\n        }\n        else if (y[i - 1] < y[i] && y[i + 1] === y[i]) {\n            startEqualIndex = i;\n        }\n        else if (y[i - 1] === y[i] && y[i + 1] < y[i]) {\n            const index = Math.floor((i + startEqualIndex) / 2);\n            maxima.push({ x: x[index], y: y[index], index });\n        }\n    }\n    return maxima;\n}\n//# sourceMappingURL=xyMaximaY.js.map","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns array of merged and weighted points\n */\nexport function xyMaxMerge(data, options = {}) {\n    const { x, y } = data;\n    const { groupWidth = 0.001 } = options;\n    const merged = { x: [], y: [] };\n    const maxAbscissa = { x: [], y: [] };\n    let size = 0;\n    let index = 0;\n    while (index < x.length) {\n        if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n            maxAbscissa.x.push(x[index]);\n            maxAbscissa.y.push(y[index]);\n            merged.x.push(x[index]);\n            merged.y.push(y[index]);\n            index++;\n            size++;\n        }\n        else {\n            if (y[index] > maxAbscissa.y[size - 1]) {\n                maxAbscissa.x[size - 1] = x[index];\n                maxAbscissa.y[size - 1] = y[index];\n            }\n            merged.x[size - 1] = x[index];\n            merged.y[size - 1] += y[index];\n            index++;\n        }\n    }\n    merged.x = maxAbscissa.x.slice();\n    return merged;\n}\n//# sourceMappingURL=xyMaxMerge.js.map","import { xGetFromToIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Finds the max value in a zone\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - Max y on the specified range\n */\nexport function xyMaxY(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let currentxyMaxY = y[fromIndex];\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] > currentxyMaxY)\n            currentxyMaxY = y[i];\n    }\n    return currentxyMaxY;\n}\n//# sourceMappingURL=xyMaxY.js.map","/**\n * Finds the median x value for an object with properties x and y (arrays of the same length)\n * @param data - x should be sorted in increasing order\n * @returns - the median of x values\n */\nexport function xyMedian(data) {\n    const { x, y } = data;\n    let sumY = 0;\n    let cumSumY = 0;\n    let i;\n    if (x.length === 0) {\n        return Number.NaN;\n    }\n    if (x.length === 1) {\n        return x[0];\n    }\n    for (i = 0; i < y.length; i++) {\n        sumY += y[i];\n    }\n    for (i = 0; i < y.length; i++) {\n        cumSumY += y[i];\n        if (cumSumY > sumY / 2) {\n            return x[i];\n        }\n        else if (cumSumY === sumY / 2) {\n            return 0.5 * (x[i] + x[i + 1]);\n        }\n    }\n    return Number.NaN;\n}\n//# sourceMappingURL=xyMedian.js.map","/**\n * Merge abscissa values if the ordinate value is in a list of centroids\n * @param data - object containing 2 properties x and y\n * @param centroids - centroids\n * @param options - options\n * @returns merged points\n */\nexport function xyMergeByCentroids(data, centroids, options = {}) {\n    const { window = 0.01 } = options;\n    const mergedPoints = {\n        x: Float64Array.from(centroids),\n        y: new Float64Array(centroids.length).fill(0),\n    };\n    let originalIndex = 0;\n    let mergedIndex = 0;\n    while (originalIndex < data.x.length && mergedIndex < centroids.length) {\n        const diff = data.x[originalIndex] - centroids[mergedIndex];\n        if (Math.abs(diff) < window) {\n            mergedPoints.y[mergedIndex] += data.y[originalIndex++];\n        }\n        else if (diff < 0) {\n            originalIndex++;\n        }\n        else {\n            mergedIndex++;\n        }\n    }\n    return mergedPoints;\n}\n//# sourceMappingURL=xyMergeByCentroids.js.map","import { xFindClosestIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Find the closest minimum going down hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - An object with the x/y value\n */\nexport function xyMinClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let minY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] < minY) {\n            currentIndex--;\n        }\n        else if (currentIndex < x.length - 1 && y[currentIndex + 1] < minY) {\n            currentIndex++;\n        }\n        minY = y[currentIndex];\n    }\n    return {\n        x: x[currentIndex],\n        y: y[currentIndex],\n        index: currentIndex,\n    };\n}\n//# sourceMappingURL=xyMinClosestYPoint.js.map","import { xGetFromToIndex } from '../x/xGetFromToIndex';\nimport { xyCheck } from './xyCheck';\n/**\n * Finds all the min values\n * If the values are equal the middle\n * of the equal part will be the position of the signal!\n * @param data - Object that contains property X (an ordered increasing array) and y (an arraY)\n * @param options - Object with from and to properties\n * @returns - Array of points.\n */\nexport function xyMinimaY(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    const maxima = [];\n    let startEqualIndex = -1;\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (y[i - 1] > y[i] && y[i + 1] > y[i]) {\n            maxima.push({ x: x[i], y: y[i], index: i });\n        }\n        else if (y[i - 1] > y[i] && y[i + 1] === y[i]) {\n            startEqualIndex = i;\n        }\n        else if (y[i - 1] === y[i] && y[i + 1] > y[i]) {\n            const index = Math.floor((i + startEqualIndex) / 2);\n            maxima.push({ x: x[index], y: y[index], index });\n        }\n    }\n    return maxima;\n}\n//# sourceMappingURL=xyMinimaY.js.map","import { xGetFromToIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Finds the min y value in a range and return a {x,y} point\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n */\nexport function xyMinYPoint(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        return { x: x[0], y: y[0], index: 0 };\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let current = {\n        x: x[fromIndex],\n        y: y[fromIndex],\n        index: fromIndex,\n    };\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] < current.y)\n            current = { x: x[i], y: y[i], index: i };\n    }\n    return current;\n}\n//# sourceMappingURL=xyMinYPoint.js.map","import { xFindClosestIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Returns an information about a signal.\n *\n *\n * We expect ordered data and equidistant X axis\n * You can use the method helper if required:\n * ML.ArrayPoints.uniqueX\n * ML.ArrayPoints.sortX\n * ML.ArrayPoints.equallySpaced\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - Information about signal\n */\nexport function xyPeakInfo(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    if (x === undefined || y === undefined || x.length < 3) {\n        return;\n    }\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined && target !== undefined) {\n        targetIndex = xFindClosestIndex(x, target);\n    }\n    if (targetIndex === undefined) {\n        throw new Error('must specify target or targetIndex');\n    }\n    let i = targetIndex;\n    let currentDiff = y[i] - y[i + 1];\n    const multiplier = currentDiff < 0 ? -1 : 1;\n    currentDiff *= multiplier;\n    while (i < x.length - 1) {\n        i++;\n        const newDiff = (y[i] - y[i + 1]) * multiplier;\n        if (newDiff < currentDiff)\n            break;\n        currentDiff = newDiff;\n    }\n    const after = { x: x[i], y: y[i] };\n    i = targetIndex;\n    currentDiff = (y[i] - y[i - 1]) * multiplier;\n    while (i > 1) {\n        i--;\n        const newDiff = (y[i] - y[i - 1]) * multiplier;\n        if (newDiff < currentDiff)\n            break;\n        currentDiff = newDiff;\n    }\n    const before = { x: x[i], y: y[i] };\n    return {\n        inflectionBefore: before,\n        inflectionAfter: after,\n        extrema: { x: x[targetIndex], y: y[targetIndex] },\n        inflectionMiddle: {\n            x: (before.x + after.x) / 2,\n            y: (before.y + after.y) / 2,\n        },\n        width: Math.abs(before.x - after.x),\n    };\n}\n//# sourceMappingURL=xyPeakInfo.js.map","import { xGetTargetIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * Find the closest minimum going down hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - An object with the x/y value\n */\nexport function xyRealMaxYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const targetIndex = xGetTargetIndex(x, options);\n    // interpolation to a sin() function\n    if (y[targetIndex - 1] > 0 &&\n        y[targetIndex + 1] > 0 &&\n        y[targetIndex] >= y[targetIndex - 1] &&\n        y[targetIndex] >= y[targetIndex + 1]) {\n        const alpha = 20 * Math.log10(y[targetIndex - 1]);\n        const beta = 20 * Math.log10(y[targetIndex]);\n        const gamma = 20 * Math.log10(y[targetIndex + 1]);\n        const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n        return {\n            x: x[targetIndex] + (x[targetIndex] - x[targetIndex - 1]) * p,\n            y: y[targetIndex] - 0.25 * (y[targetIndex - 1] - y[targetIndex + 1]) * p,\n            index: targetIndex,\n        };\n    }\n    else {\n        return {\n            x: x[targetIndex],\n            y: y[targetIndex],\n            index: targetIndex,\n        };\n    }\n}\n//# sourceMappingURL=xyRealMaxYPoint.js.map","import { xGetTargetIndex } from '../x';\nimport { xyCheck } from './xyCheck';\n/**\n * xyRealMinYPoint.\n * @param data - Data.\n * @param options - Options.\n */\nexport function xyRealMinYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const targetIndex = xGetTargetIndex(x, options);\n    // interpolation to a sin() function\n    if (y[targetIndex - 1] < 0 &&\n        y[targetIndex + 1] < 0 &&\n        y[targetIndex] <= y[targetIndex - 1] &&\n        y[targetIndex] <= y[targetIndex + 1]) {\n        const alpha = 20 * Math.log10(-y[targetIndex - 1]);\n        const beta = 20 * Math.log10(-y[targetIndex]);\n        const gamma = 20 * Math.log10(-y[targetIndex + 1]);\n        const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n        return {\n            x: x[targetIndex] + (x[targetIndex] - x[targetIndex - 1]) * p,\n            y: y[targetIndex] - 0.25 * (y[targetIndex - 1] - y[targetIndex + 1]) * p,\n            index: targetIndex,\n        };\n    }\n    else {\n        return {\n            x: x[targetIndex],\n            y: y[targetIndex],\n            index: targetIndex,\n        };\n    }\n}\n//# sourceMappingURL=xyRealMinYPoint.js.map","import { xFindClosestIndex } from '../x';\nimport { zonesNormalize } from '../zones';\nimport { xyCheck } from './xyCheck';\n/**\n * Reduce the number of points while keeping visually the same noise. Practical to\n * display many spectra as SVG. If you want a similar looking spectrum you should still however\n * generate at least 4x the nbPoints that is being displayed.\n *\n * SHOULD NOT BE USED FOR DATA PROCESSING !!!\n * You should rather use ml-xy-equally-spaced to make further processing\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns Object with x and y arrays\n */\nexport function xyReduce(data, options = {}) {\n    xyCheck(data);\n    // todo we should check that the single point is really in the range and the zones\n    if (data.x.length < 2) {\n        return {\n            x: Float64Array.from(data.x),\n            y: Float64Array.from(data.y),\n        };\n    }\n    const { x, y } = data;\n    const { from = x[0], to = x.at(-1), nbPoints = 4001, optimize = false, } = options;\n    let { zones = [] } = options;\n    zones = zonesNormalize(zones, { from, to });\n    if (zones.length === 0)\n        zones = [{ from, to }]; // we take everything\n    const { internalZones, totalPoints } = getInternalZones(zones, x);\n    // we calculate the number of points per zone that we should keep\n    if (totalPoints <= nbPoints) {\n        return notEnoughPoints(x, y, internalZones, totalPoints);\n    }\n    // need to xyReduce number of points\n    const ratio = nbPoints / totalPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < internalZones.length - 1; i++) {\n        const zone = internalZones[i];\n        zone.nbPoints = Math.round(zone.nbPoints * ratio);\n        currentTotal += zone.nbPoints;\n    }\n    internalZones.at(-1).nbPoints = nbPoints - currentTotal;\n    const newX = [];\n    const newY = [];\n    for (const zone of internalZones) {\n        if (!zone.nbPoints)\n            continue;\n        appendFromTo(zone.fromIndex, zone.toIndex, zone.nbPoints);\n    }\n    return { x: newX, y: newY };\n    /**\n     * AppendFromTo.\n     * @param fromIndex - From.\n     * @param  toIndex - To.\n     * @param zoneNbPoints - NbPoints.\n     */\n    function appendFromTo(fromIndex, toIndex, zoneNbPoints) {\n        if (zoneNbPoints === 1) {\n            newX.push(x[Math.round((toIndex - fromIndex) / 2)]);\n            newY.push(y[Math.round((toIndex - fromIndex) / 2)]);\n            return;\n        }\n        if (zoneNbPoints === 2) {\n            newX.push(x[fromIndex], x[toIndex]);\n            newY.push(y[fromIndex], y[toIndex]);\n            return;\n        }\n        newX.push(x[fromIndex]);\n        newY.push(y[fromIndex]);\n        if (zoneNbPoints % 2 === 0) {\n            zoneNbPoints = zoneNbPoints / 2 + 1;\n        }\n        else {\n            zoneNbPoints = (zoneNbPoints - 1) / 2 + 1;\n        }\n        // we will need to make some kind of min / max because there are too many points\n        // we will always keep the first point and the last point\n        const slot = (x[toIndex] - x[fromIndex]) / (zoneNbPoints - 1);\n        let currentX = x[fromIndex] + slot;\n        let first = true;\n        let minY = Number.POSITIVE_INFINITY;\n        let xyMaxY = Number.NEGATIVE_INFINITY;\n        for (let i = fromIndex + 1; i <= toIndex; i++) {\n            if (first) {\n                minY = y[i];\n                xyMaxY = y[i];\n                first = false;\n            }\n            else {\n                if (y[i] < minY)\n                    minY = y[i];\n                if (y[i] > xyMaxY)\n                    xyMaxY = y[i];\n            }\n            if (x[i] >= currentX || i === toIndex) {\n                if (optimize) {\n                    if (minY > newY[newX.length - 1]) {\n                        // we can skip the intermediate value\n                    }\n                    else if (xyMaxY < newY[newX.length - 1]) {\n                        // we can skip the intermediate value\n                        xyMaxY = minY;\n                    }\n                    else {\n                        newX.push(currentX - slot / 2);\n                        newY.push(minY);\n                    }\n                }\n                else {\n                    newX.push(currentX - slot / 2);\n                    newY.push(minY);\n                }\n                newX.push(currentX);\n                newY.push(xyMaxY);\n                currentX += slot;\n                first = true;\n            }\n        }\n    }\n}\nexport function notEnoughPoints(x, y, internalZones, totalPoints) {\n    const newX = new Float64Array(totalPoints);\n    const newY = new Float64Array(totalPoints);\n    let index = 0;\n    for (const zone of internalZones) {\n        for (let i = zone.fromIndex; i < zone.toIndex + 1; i++) {\n            newX[index] = x[i];\n            newY[index] = y[i];\n            index++;\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\nexport function getInternalZones(zones, x) {\n    // for each zone we should know the first index, the last index and the number of points\n    const internalZones = [];\n    let totalPoints = 0;\n    for (const zone of zones) {\n        let fromIndex = xFindClosestIndex(x, zone.from);\n        let toIndex = xFindClosestIndex(x, zone.to);\n        if (fromIndex > 0 && x[fromIndex] > zone.from) {\n            fromIndex--;\n        }\n        if (toIndex < x.length - 1 && x[toIndex] < zone.to) {\n            toIndex++;\n        }\n        const nbPoints = toIndex - fromIndex + 1;\n        internalZones.push({\n            from: zone.from,\n            to: zone.to,\n            fromIndex,\n            toIndex,\n            nbPoints,\n        });\n        totalPoints += nbPoints;\n    }\n    return { internalZones, totalPoints };\n}\n//# sourceMappingURL=xyReduce.js.map","import { zonesNormalize } from '../zones';\nimport { xyCheck } from './xyCheck';\nimport { getInternalZones, notEnoughPoints } from './xyReduce';\n/**\n * Reduce the number of points while keeping visually the same noise. Practical to\n * display many spectra as SVG. This algorithm is designed for non-continuous data.\n * We are expecting peaks to be only positive and the x values to be ordered.\n * SHOULD NOT BE USED FOR DATA PROCESSING !!!\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns Object with x and y arrays\n */\nexport function xyReduceNonContinuous(data, options = {}) {\n    xyCheck(data);\n    if (data.x.length < 2) {\n        // todo we should check that the single point is really in the range and the zones\n        return {\n            x: Float64Array.from(data.x),\n            y: Float64Array.from(data.y),\n        };\n    }\n    const { x, y } = data;\n    const { from = x[0], to = x.at(-1), maxApproximateNbPoints = 4001, } = options;\n    let { zones = [] } = options;\n    zones = zonesNormalize(zones, { from, to });\n    if (zones.length === 0)\n        zones = [{ from, to }]; // we take everything\n    const { internalZones, totalPoints } = getInternalZones(zones, x);\n    // we calculate the number of points per zone that we should keep\n    if (totalPoints <= maxApproximateNbPoints) {\n        return notEnoughPoints(x, y, internalZones, totalPoints);\n    }\n    const deltaX = (to - from) / (maxApproximateNbPoints - 1);\n    const newX = [];\n    const newY = [];\n    for (const internalZone of internalZones) {\n        const maxNbPoints = Math.ceil((internalZone.to - internalZone.from) / deltaX) + 1;\n        const fromIndex = internalZone.fromIndex;\n        const toIndex = internalZone.toIndex;\n        if (toIndex - fromIndex + 1 <= maxNbPoints) {\n            // we keep all the points\n            for (let i = fromIndex; i <= toIndex; i++) {\n                newX.push(x[i]);\n                newY.push(y[i]);\n            }\n        }\n        else {\n            // we need to reduce the number of points\n            let currentX = x[fromIndex];\n            let currentY = y[fromIndex];\n            let lastX = currentX + deltaX;\n            newX.push(currentX);\n            newY.push(currentY);\n            for (let i = fromIndex; i <= toIndex; i++) {\n                if (x[i] > lastX) {\n                    // next slot\n                    currentX = x[i];\n                    currentY = y[i];\n                    newX.push(currentX);\n                    newY.push(currentY);\n                    lastX += deltaX;\n                }\n                if (y[i] > currentY) {\n                    currentY = y[i];\n                    newY[newY.length - 1] = currentY;\n                }\n            }\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyReduceNonContinuous.js.map","import { xRolling, xRollingAverage } from '../x';\n/**\n * This function calculates a rolling average.\n * This methods will recalculate the x values by using xRollingAverage\n * @param data - array of points {x,y}\n * @param fct - callback function that from an array returns a value.\n * @param options - options\n */\nexport function xyRolling(data, fct, options = {}) {\n    let { x, y } = data;\n    y = xRolling(y, fct, options);\n    if (x.length !== y.length) {\n        x = xRollingAverage(x, options);\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xyRolling.js.map","import { zonesNormalize } from '../zones';\nimport { xyCheck } from './xyCheck';\n/**\n * Set a value (default 0) to specific zones.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - Array of points\n */\nexport function xySetYValue(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { value = 0 } = options;\n    let { zones } = options;\n    if (!Array.isArray(zones) || zones.length === 0) {\n        return data;\n    }\n    zones = zonesNormalize(zones);\n    const newX = x.slice();\n    const newY = y.slice();\n    let currentZone = zones[0];\n    let position = 0;\n    loop: for (let i = 0; i < x.length; i++) {\n        while (currentZone.to < x[i]) {\n            position++;\n            currentZone = zones[position];\n            if (!currentZone) {\n                i = x.length;\n                break loop;\n            }\n        }\n        if (x[i] >= currentZone.from) {\n            newY[i] = value;\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xySetYValue.js.map","import { xIsMonotonic } from '../x';\n/**\n * This function performs a quick sort of the x array while transforming the y array to preserve the coordinates.\n * @param data - Object that contains property x (Array) and y (Array)\n */\nexport function xySortX(data) {\n    const { x, y } = data;\n    if (xIsMonotonic(x) && x.length > 1) {\n        if (x[0] < x[1]) {\n            return {\n                x: Float64Array.from(x),\n                y: Float64Array.from(y),\n            };\n        }\n        else {\n            return {\n                x: Float64Array.from(x).reverse(),\n                y: Float64Array.from(y).reverse(),\n            };\n        }\n    }\n    const xyObject = Array.from(x, (val, index) => ({\n        x: val,\n        y: y[index],\n    })).sort((a, b) => a.x - b.x);\n    const response = {\n        x: new Float64Array(x.length),\n        y: new Float64Array(y.length),\n    };\n    for (let i = 0; i < x.length; i++) {\n        response.x[i] = xyObject[i].x;\n        response.y[i] = xyObject[i].y;\n    }\n    return response;\n}\n//# sourceMappingURL=xySortX.js.map","import { xyCheck } from './xyCheck';\n/**\n * Convert a DataXY to an array of array containing x,y.\n * @param data - array of points {x,y}\n */\nexport function xyToXYArray(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const objectArray = [];\n    for (let i = 0; i < x.length; i++) {\n        objectArray.push([x[i], y[i]]);\n    }\n    return objectArray;\n}\n//# sourceMappingURL=xyToXYArray.js.map","import { xyCheck } from './xyCheck';\n/**\n * xyToXYObject.\n * @param data - Array of points {x,y}.\n */\nexport function xyToXYObject(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const objectArray = [];\n    for (let i = 0; i < x.length; i++) {\n        objectArray.push({ x: x[i], y: y[i] });\n    }\n    return objectArray;\n}\n//# sourceMappingURL=xyToXYObject.js.map","import { xyCheck } from './xyCheck';\nimport { xySortX } from './xySortX';\n/**\n * Ensure x values are unique\n * @param data - Object that contains property x (Array) and y (Array)\n * @param options - Object containing a property algorithm (can be 'sum' or 'average', the latter being the default value), and a property isSorted (boolean indicating if the x-array is sorted).\n */\nexport function xyUniqueX(data, options = {}) {\n    xyCheck(data);\n    if (data.x.length === 0) {\n        return { x: [], y: [] };\n    }\n    const { algorithm = 'average', isSorted = true } = options;\n    if (!isSorted) {\n        data = xySortX(data);\n    }\n    switch (algorithm) {\n        case 'average':\n            return average(data);\n        case 'sum':\n            return sum(data);\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\n/**\n * Average.\n * @param data - Input.\n * @returns Result.\n */\nfunction average(data) {\n    const x = [];\n    const y = [];\n    let cumulativeY = data.y[0];\n    let divider = 1;\n    for (let i = 1; i < data.x.length; i++) {\n        if (!(data.x[i] === data.x[i - 1])) {\n            x.push(data.x[i - 1]);\n            y.push(cumulativeY / divider);\n            cumulativeY = 0;\n            divider = 0;\n        }\n        cumulativeY += data.y[i];\n        divider++;\n    }\n    x.push(data.x.at(-1));\n    y.push(cumulativeY / divider);\n    return { x, y };\n}\n/**\n * Sum.\n * @param data - Input.\n * @returns Result.\n */\nfunction sum(data) {\n    const x = [];\n    const y = [];\n    let cumulativeY = data.y[0];\n    for (let i = 1; i < data.x.length; i++) {\n        if (!(data.x[i] === data.x[i - 1])) {\n            x.push(data.x[i - 1]);\n            y.push(cumulativeY);\n            cumulativeY = 0;\n        }\n        cumulativeY += data.y[i];\n    }\n    x.push(data.x.at(-1));\n    y.push(cumulativeY);\n    return { x, y };\n}\n//# sourceMappingURL=xyUniqueX.js.map","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns array of merged and weighted points\n */\nexport function xyWeightedMerge(data, options = {}) {\n    const { x, y } = data;\n    const { groupWidth = 0.001 } = options;\n    const merged = { x: [], y: [] };\n    const weightedAbscissa = { x: [], y: [] };\n    let size = 0;\n    let index = 0;\n    while (index < x.length) {\n        if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n            weightedAbscissa.x.push(x[index] * y[index]);\n            weightedAbscissa.y.push(y[index]);\n            merged.x.push(x[index]);\n            merged.y.push(y[index]);\n            index++;\n            size++;\n        }\n        else {\n            weightedAbscissa.x[size - 1] += x[index] * y[index];\n            weightedAbscissa.y[size - 1] += y[index];\n            merged.x[size - 1] = x[index];\n            merged.y[size - 1] += y[index];\n            index++;\n        }\n    }\n    for (let i = 0; i < merged.x.length; i++) {\n        merged.x[i] = weightedAbscissa.x[i] / weightedAbscissa.y[i];\n    }\n    return merged;\n}\n//# sourceMappingURL=xyWeightedMerge.js.map","/**\n * Convert an array of XY arrays to a DataXY object containing x,y arrays\n * @param data - array of arrays [[x,y],[x,y],...]\n */\nexport function xy2ToXY(data) {\n    const xy2 = { x: [], y: [] };\n    for (const xyValue of data) {\n        xy2.x.push(xyValue[0]);\n        xy2.y.push(xyValue[1]);\n    }\n    return xy2;\n}\n//# sourceMappingURL=xy2ToXY.js.map","/**\n * Sort object of array, x has to be monotone.\n * @param data - object of kind {x:[], re:[], im:[]}\n * @returns - sorted array\n */\nexport function xreimSortX(data) {\n    const { x, re, im } = data;\n    if (x.length !== re.length || x.length !== im.length) {\n        throw new TypeError('length of x, re and im must be identical');\n    }\n    if (x.length < 2 || x[0] < x[1])\n        return data;\n    return {\n        x: x.slice(0).reverse(),\n        re: re.slice(0).reverse(),\n        im: im.slice(0).reverse(),\n    };\n}\n//# sourceMappingURL=xreimSortX.js.map","import { reimZeroFilling } from '../reim';\n/**\n * This function make a zero filling to re and im part.\n * @param data - object of kind {x:[], re:[], im:[]}\n * @param totalLength - final number of points\n * @returns - data.\n */\nexport function xreimZeroFilling(data, totalLength) {\n    const { x, re, im } = data;\n    const length = x.length;\n    if (totalLength === 0 || length === totalLength)\n        return data;\n    if (length > totalLength) {\n        return {\n            x: x.slice(0, totalLength),\n            re: re.slice(0, totalLength),\n            im: im.slice(0, totalLength),\n        };\n    }\n    const newX = new Float64Array(totalLength);\n    newX.set(x);\n    const deltaX = (x.at(-1) - x[0]) / (length - 1);\n    for (let i = length; i < totalLength; i++) {\n        newX[i] = newX[i - 1] + deltaX;\n    }\n    return {\n        x: newX,\n        ...reimZeroFilling({ re, im }, totalLength),\n    };\n}\n//# sourceMappingURL=xreimZeroFilling.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)).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';\nimport { getSlots } from './utils/getSlots';\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","/**\n * Merge DataXY\n * We have an array of DataXY and the goal is to merge all the values for which the deltaX is small or equal to delta.\n * X values are weighted average\n * @param data - data\n * @param options - Options\n */\nexport function xyArrayWeightedMerge(data, options = {}) {\n    let { delta = 1 } = options;\n    if (typeof delta === 'number') {\n        const deltaNumber = delta;\n        delta = () => deltaNumber;\n    }\n    data = data.filter((spectrum) => spectrum.x.length > 0);\n    if (data.length === 0)\n        return { x: [], y: [] };\n    const x = [];\n    const y = [];\n    const positions = new Array(data.length).fill(0);\n    const point = { x: 0, y: 0 };\n    nextValue(data, positions, point);\n    const slot = {\n        maxX: point.x + delta(point.x),\n        sumY: point.y,\n        sumXY: point.y * point.x,\n    };\n    while (data.length > 0) {\n        nextValue(data, positions, point);\n        const sameSlot = point.x <= slot.maxX;\n        if (!sameSlot) {\n            if (slot.sumY > 0) {\n                x.push(slot.sumXY / slot.sumY);\n                y.push(slot.sumY);\n            }\n            slot.sumY = 0;\n            slot.sumXY = 0;\n        }\n        slot.sumY += point.y;\n        slot.sumXY += point.x * point.y;\n        slot.maxX = point.x + delta(point.x);\n        if (data.length === 0 && slot.sumY > 0) {\n            x.push(slot.sumXY / slot.sumY);\n            y.push(slot.sumY);\n        }\n    }\n    return { x, y };\n}\n/**\n * NextValue.\n * @param data - data.\n * @param positions - Positions array.\n * @param point - Point.\n */\nfunction nextValue(data, positions, point) {\n    let minIndex = 0;\n    let minX = data[0].x[positions[0]];\n    for (let i = 1; i < data.length; i++) {\n        const currentX = data[i].x[positions[i]];\n        if (currentX < minX) {\n            minX = currentX;\n            minIndex = i;\n        }\n    }\n    point.x = minX;\n    point.y = data[minIndex].y[positions[minIndex]];\n    positions[minIndex]++;\n    if (positions[minIndex] === data[minIndex].x.length) {\n        positions.splice(minIndex, 1);\n        data.splice(minIndex, 1);\n    }\n}\n//# sourceMappingURL=xyArrayWeightedMerge.js.map","import { xyArrayWeightedMerge } from '../xyArrayWeightedMerge';\n/**\n * GetSlotsToFirst.\n * @param data - data.\n * @param options - Options.\n */\nexport function getSlotsToFirst(data, options = {}) {\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const firstXs = data[0].x;\n    const slots = [];\n    // we first create the slots based on the first spectrum\n    for (const element of firstXs) {\n        const currentDelta = deltaIsFunction ? delta(element) : delta;\n        slots.push({\n            from: element - currentDelta,\n            to: element + currentDelta,\n            value: element,\n        });\n    }\n    const otherXs = xyArrayWeightedMerge(data.slice(1), options).x;\n    let currentPosition = 0;\n    for (const slot of slots) {\n        while (otherXs[currentPosition] < slot.to &&\n            currentPosition < otherXs.length) {\n            if (otherXs[currentPosition] < slot.from) {\n                const currentDelta = deltaIsFunction\n                    ? delta(otherXs[currentPosition])\n                    : delta;\n                slots.push({\n                    from: otherXs[currentPosition] - currentDelta,\n                    to: otherXs[currentPosition] + currentDelta,\n                    value: otherXs[currentPosition],\n                });\n            }\n            currentPosition++;\n        }\n    }\n    for (let i = currentPosition; i < otherXs.length; i++) {\n        const currentDelta = deltaIsFunction ? delta(otherXs[i]) : delta;\n        slots.push({\n            from: otherXs[i] - currentDelta,\n            to: otherXs[i] + currentDelta,\n            value: otherXs[i],\n        });\n    }\n    slots.sort((a, b) => a.value - b.value);\n    // we prevent slots overlap in the first spectrum\n    for (let i = 0; i < slots.length - 1; i++) {\n        if (slots[i].to > slots[i + 1].from) {\n            const middle = (slots[i].value + slots[i + 1].value) / 2;\n            slots[i].to = middle;\n            slots[i + 1].from = middle;\n        }\n    }\n    return slots;\n}\n//# sourceMappingURL=getSlotsToFirst.js.map","import { getSlotsToFirst } from './utils/getSlotsToFirst';\n/**\n * We align all the data/spectra to the first array of X.\n * The alignment is based on the X values of the first spectrum and the `delta` error allowed.\n * If some x values are missing in the first spectrum we will add them\n * @param data - data\n * @param options - options\n */\nexport function xyArrayAlignToFirst(data, options = {}) {\n    const { delta = 1 } = options;\n    const slots = getSlotsToFirst(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.value));\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    return { x, ys };\n}\n//# sourceMappingURL=xyArrayAlignToFirst.js.map","import { xyJoinX } from '../xy';\nimport { getSlots } from './utils/getSlots';\n/**\n * Merge DataXY\n * We have an array of DataXY and the goal is to merge all the values that are the closest possible\n * @param data - data\n * @param options - Options\n */\nexport function xyArrayMerge(data, options = {}) {\n    const { delta = 1 } = options;\n    // We start by checking that the data/spectra don't have peaks too close and we simplify them.\n    data = data.map((spectrum) => xyJoinX(spectrum, { delta }));\n    // At first, we will calculate the X values (simple mean).\n    const slots = getSlots(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.average));\n    const y = 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                y[i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xyArrayMerge.js.map","/**\n * Throws an error if it's not an array of x,y objects.\n * Only checks the first element.\n * @param points - List of points.\n * @param options - Additional checks.\n */\nexport function xyObjectCheck(points, options = {}) {\n    const { minLength = 0 } = options;\n    if (!Array.isArray(points)) {\n        throw new Error('points must be an array of {x,y} objects');\n    }\n    if (points.length > 0 &&\n        (typeof points[0].x !== 'number' || typeof points[0].y !== 'number')) {\n        throw new Error('points must be an array of {x,y} objects');\n    }\n    if (minLength && points.length < minLength) {\n        throw new Error(`points must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyObjectCheck.js.map","import { xyObjectCheck } from './xyObjectCheck';\n/**\n * Finds the max x value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n */\nexport function xyObjectMaxXPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].x > current.x) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMaxXPoint.js.map","import { xyObjectCheck } from './xyObjectCheck';\n/**\n * Finds the min x value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n */\nexport function xyObjectMinXPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].x < current.x) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMinXPoint.js.map","import { xyObjectMaxXPoint } from './xyObjectMaxXPoint';\nimport { xyObjectMinXPoint } from './xyObjectMinXPoint';\n/**\n * Filter the array by taking the higher points (max y value) and only.\n * Keep one per slot. There are 2 different slots, the smallest one will have the\n * new property `close` to true\n * @param points - array of all the points\n * @param options - Options\n * @returns - copy of points with 'close' property\n */\nexport function xyObjectBestPoints(points, options = {}) {\n    const { from = xyObjectMinXPoint(points).x, to = xyObjectMaxXPoint(points).x, limit = 20, threshold = 0.01, numberCloseSlots = 50, numberSlots = 10, } = options;\n    const slot = (to - from) / numberSlots;\n    const closeSlot = (to - from) / numberCloseSlots;\n    let selected = points\n        .filter((point) => point.x >= from && point.x <= to)\n        .map((point) => {\n        return {\n            point,\n            monoisotopic: false,\n        };\n    });\n    selected = selected.sort((a, b) => {\n        if (a.monoisotopic && !b.monoisotopic)\n            return -1;\n        if (b.monoisotopic && !a.monoisotopic)\n            return 1;\n        return b.point.y - a.point.y;\n    });\n    const toReturn = [];\n    if (selected.length === 0)\n        return [];\n    const minY = selected[0].point.y * threshold;\n    peakLoop: for (const item of selected) {\n        if (item.point.y < minY) {\n            if (item.monoisotopic) {\n                continue;\n            }\n            else {\n                break;\n            }\n        }\n        let close = false;\n        for (const existing of toReturn) {\n            if (Math.abs(existing.x - item.point.x) < closeSlot) {\n                continue peakLoop;\n            }\n            if (Math.abs(existing.x - item.point.x) < slot) {\n                close = true;\n            }\n        }\n        const newPeak = { ...item.point, close };\n        toReturn.push(newPeak);\n        if (toReturn.length === limit)\n            break;\n    }\n    return toReturn.sort((a, b) => a.x - b.x);\n}\n//# sourceMappingURL=xyObjectBestPoints.js.map","/**\n * xyObjectJoinX.\n * @param points - Array of growing points {x,y}.\n * @param options - Options.\n */\nexport function xyObjectJoinX(points, options = {}) {\n    const { xError = Number.EPSILON } = options;\n    // when we join we will use the center of mass\n    const result = [];\n    let current = {\n        x: Number.MIN_SAFE_INTEGER,\n        y: 0,\n    };\n    for (const point of points) {\n        if (point.x - current.x <= xError) {\n            // weighted sum\n            if (current.y !== 0 || point.y !== 0) {\n                current.x =\n                    (point.y / (current.y + point.y)) * (point.x - current.x) + current.x;\n                current.y += point.y;\n            }\n        }\n        else {\n            current = {\n                x: point.x,\n                y: point.y,\n            };\n            result.push(current);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyObjectJoinX.js.map","import { xyObjectCheck } from './xyObjectCheck';\n/**\n * Finds the max y value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n * @returns max point\n */\nexport function xyObjectMaxYPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].y > current.y) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMaxYPoint.js.map","import { xyObjectCheck } from './xyObjectCheck';\n/**\n * Returns all min and max values of an array of points.\n * @param points - Array of points {x,y}.\n * @returns - Object with the 4 extrema.\n */\nexport function xyObjectMinMaxValues(points) {\n    xyObjectCheck(points, { minLength: 1 });\n    let minX = points[0].x;\n    let maxX = minX;\n    let minY = points[0].y;\n    let maxY = minY;\n    for (const point of points) {\n        if (point.x < minX)\n            minX = point.x;\n        if (point.x > maxX)\n            maxX = point.x;\n        if (point.y < minY)\n            minY = point.y;\n        if (point.y > maxY)\n            maxY = point.y;\n    }\n    return { minX, maxX, minY, maxY };\n}\n//# sourceMappingURL=xyObjectMinMaxValues.js.map","import { xyObjectCheck } from './xyObjectCheck';\n/**\n * Finds the min y value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n */\nexport function xyObjectMinYPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].y < current.y) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMinYPoint.js.map","import { xNormed } from '../x/xNormed';\n/**\n * Resize the Y values of the points to be normalized.\n * @param points - array of points {x,y}\n * @param options\n * @returns - array of points {x,y} with normalized Y values\n */\nexport function xyObjectNormedY(points, options) {\n    points = structuredClone(points);\n    const ys = points.map((point) => point.y);\n    const normalizedYs = xNormed(ys, options);\n    for (let i = 0; i < points.length; i++) {\n        points[i].y = normalizedYs[i];\n    }\n    return points;\n}\n//# sourceMappingURL=xyObjectNormedY.js.map","/**\n * xyObjectSlotX\n * @param points - Array of growing points {x,y}.\n * @param options - Options.\n */\nexport function xyObjectSlotX(points, options = {}) {\n    const { slotWidth = 1 } = options;\n    const halfSlot = slotWidth / 2;\n    // when we join we will use the center of mass\n    const result = [];\n    let current = {\n        x: Number.NEGATIVE_INFINITY,\n        y: 0,\n    };\n    for (const point of points) {\n        const slot = point.x - ((point.x + halfSlot) % slotWidth) + halfSlot;\n        if (Math.abs(current.x - slot) > Number.EPSILON) {\n            current = {\n                x: slot,\n                y: 0,\n            };\n            result.push(current);\n        }\n        current.y += point.y;\n    }\n    return result;\n}\n//# sourceMappingURL=xyObjectSlotX.js.map","/**\n * Sorts an array of points in-place.\n * @param points - array of points {x,y}\n * @returns - sorted array of points {x,y}\n */\nexport function xyObjectSortX(points) {\n    return points.sort((a, b) => a.x - b.x);\n}\n//# sourceMappingURL=xyObjectSortX.js.map","import { xyObjectCheck } from './xyObjectCheck';\n/**\n * Calculate the sum of Y values.\n * @param points - Object that contains property x and y (an array)\n */\nexport function xyObjectSumY(points = []) {\n    xyObjectCheck(points);\n    let sum = 0;\n    for (const point of points) {\n        sum += point.y;\n    }\n    return sum;\n}\n//# sourceMappingURL=xyObjectSumY.js.map","/**\n * xyObjectToXY.\n * @param points - Array of points {x,y}.\n */\nexport function xyObjectToXY(points) {\n    return {\n        x: points.map((entry) => entry.x),\n        y: points.map((entry) => entry.y),\n    };\n}\n//# sourceMappingURL=xyObjectToXY.js.map","import { xMedian } from '../x';\n/**\n * Returns the median of the absolute matrix.\n * @param matrix\n */\nexport function matrixAbsoluteMedian(matrix) {\n    const nbColumns = matrix[0].length;\n    const flatten = new Float64Array(matrix.length * nbColumns);\n    for (let row = 0; row < matrix.length; row++) {\n        const currentRow = row * nbColumns;\n        for (let column = 0; column < nbColumns; column++) {\n            const value = matrix[row][column];\n            flatten[currentRow + column] = Math.abs(value);\n        }\n    }\n    return xMedian(flatten);\n}\n//# sourceMappingURL=matrixAbsoluteMedian.js.map","import { createNumberArray } from '../utils';\n/**\n * Create a new matrix based on the size of the current one or by using specific dimensions.\n * @param options\n */\nexport function matrixCreateEmpty(options) {\n    const { matrix, nbRows = matrix?.length || 1, nbColumns = matrix?.[0].length || 1, ArrayConstructor = Float64Array, } = options;\n    const newMatrix = [];\n    for (let row = 0; row < nbRows; row++) {\n        newMatrix.push(createNumberArray(ArrayConstructor, nbColumns));\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCreateEmpty.js.map","import { xMaxValue } from '../x';\nimport { matrixCreateEmpty } from './matrixCreateEmpty';\n/**\n * Numerically encodes the strings in the matrix with an encoding dictionary.\n * @param matrixInitial - Original matrix before encoding.\n * @param dictionary - Dictionary against which to do the encoding.\n * @returns - Encoded matrix.\n */\nexport function matrixApplyNumericalEncoding(matrixInitial, dictionary) {\n    const matrix = matrixCreateEmpty({\n        nbRows: matrixInitial.length,\n        nbColumns: matrixInitial[0].length,\n        ArrayConstructor: Array,\n    });\n    const arrayOfValues = [];\n    for (const key in dictionary) {\n        arrayOfValues.push(dictionary[key]);\n    }\n    let k = xMaxValue(arrayOfValues);\n    for (let i = 0; i < matrix.length; i++) {\n        for (let j = 0; j < matrix[0].length; j++) {\n            if (typeof matrix[i][j] === 'string') {\n                if (matrix[i][j] in dictionary) {\n                    matrix[i][j] = dictionary[matrix[i][j]];\n                }\n                else {\n                    k++;\n                    dictionary[matrix[i][j]] = k;\n                    matrix[i][j] = k;\n                }\n            }\n        }\n    }\n    return matrix;\n}\n//# sourceMappingURL=matrixApplyNumericalEncoding.js.map","import { xCorrelation } from '../x';\nexport function matrixAutoCorrelation(matrix, index = 0) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    if (nbRows < 2) {\n        throw new Error('can not calculate info if matrix contains less than 2 rows');\n    }\n    const targetArray = new Float64Array(nbRows);\n    const sourceArray = new Float64Array(nbRows);\n    const result = new Float64Array(nbColumns);\n    for (let j = 0; j < nbRows; j++) {\n        targetArray[j] = matrix[j][index];\n    }\n    for (let i = 0; i < nbColumns; i++) {\n        for (let j = 0; j < nbRows; j++) {\n            sourceArray[j] = matrix[j][i];\n        }\n        result[i] = xCorrelation(targetArray, sourceArray);\n    }\n    return result;\n}\n//# sourceMappingURL=matrixAutoCorrelation.js.map","export function matrixBoxPlot(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    if (nbRows < 5) {\n        throw new Error('can not calculate info if matrix contains less than 5 rows');\n    }\n    const info = {\n        q1: new Float64Array(nbColumns),\n        median: new Float64Array(nbColumns),\n        q3: new Float64Array(nbColumns),\n        min: Float64Array.from(matrix[0]),\n        max: Float64Array.from(matrix.at(-1)),\n    };\n    const columnArray = new Float64Array(matrix.length);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            columnArray[row] = matrix[row][column];\n        }\n        let q1max = 0;\n        let q3min = 0;\n        if (nbRows % 2 === 1) {\n            // odd\n            const middle = (nbRows - 1) / 2;\n            info.median[column] = columnArray[middle];\n            q1max = middle - 1;\n            q3min = middle + 1;\n        }\n        else {\n            // even\n            q3min = nbRows / 2;\n            q1max = q3min - 1;\n            info.median[column] = (columnArray[q1max] + columnArray[q3min]) / 2;\n        }\n        if (q1max % 2 === 0) {\n            info.q1[column] = columnArray[q1max / 2];\n            info.q3[column] = columnArray[(nbRows + q3min - 1) / 2];\n        }\n        else {\n            info.q1[column] =\n                (columnArray[(q1max + 1) / 2] + columnArray[(q1max - 1) / 2]) / 2;\n            const middleOver = (columnArray.length + q3min) / 2;\n            info.q3[column] =\n                (columnArray[middleOver] + columnArray[middleOver - 1]) / 2;\n        }\n    }\n    return info;\n}\n//# sourceMappingURL=matrixBoxPlot.js.map","import { matrixCreateEmpty } from './matrixCreateEmpty';\n/**\n * Center mean of matrix columns.\n * @param matrix - matrix [rows][cols]\n */\nexport function matrixCenterZMean(matrix) {\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows });\n    for (let column = 0; column < nbColumns; column++) {\n        let mean = 0;\n        for (let row = 0; row < nbRows; row++) {\n            mean += matrix[row][column];\n        }\n        mean /= nbRows;\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] = matrix[row][column] - mean;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCenterZMean.js.map","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","/**\n * Clone a matrix.\n * @param matrix\n */\nexport function matrixClone(matrix) {\n    return matrix.map((row) => row.slice(0));\n}\n//# sourceMappingURL=matrixClone.js.map","import { Matrix } from 'ml-matrix';\nimport { xCorrelation } from '../x';\n/**\n * Calculates a correlation matrix based on the columns of the initial matrix.\n * @param A - matrix [rows][cols]\n */\nexport function matrixColumnsCorrelation(A) {\n    const B = new Matrix(A).transpose();\n    const result = [];\n    for (let i = 0; i < B.rows; i++) {\n        result.push(new Float64Array(B.rows));\n    }\n    for (let i = 0; i < B.rows; i++) {\n        for (let j = i; j < B.rows; j++) {\n            const correlation = xCorrelation(B.getRow(i), B.getRow(j));\n            result[i][j] = correlation;\n            result[j][i] = correlation;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=matrixColumnsCorrelation.js.map","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2013 Mikola Lysenko\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n/**\n * The reverse Cuthill-Mckee method is a fast and effective preconditioner for reducing the bandwidth of sparse linear systems.\n * When solving a positive semidefinite linear system using Cholesky factorization, it greatly reduces fill-in.\n * It is a direct conversion to TS from {@link github.com/mikolalysenko/cuthill-mckee}\n * @param list - lower triangular non zeros from a symmetric sparse matrix.\n * @param dimension - matrix dimension\n * @returns A Float64Array where the value at each index represents the new position of the node\n *          in the bandwidth-reduced ordering.\n */\nexport function matrixCuthillMckee(list, dimension) {\n    const adj = new Array(dimension);\n    const visited = new Array(dimension).fill(false);\n    for (let i = 0; i < dimension; ++i) {\n        adj[i] = [];\n    }\n    for (const l of list) {\n        adj[l[0]].push(l[1]);\n    }\n    const toVisit = new Float64Array(dimension);\n    let eol = 0;\n    let ptr = 0;\n    for (let i = 0; i < dimension; ++i) {\n        if (visited[i]) {\n            continue;\n        }\n        toVisit[eol++] = i;\n        visited[i] = true;\n        while (ptr < eol) {\n            const v = toVisit[ptr++];\n            const nbhd = Float64Array.from(adj[v]).sort();\n            for (const u of nbhd) {\n                if (visited[u]) {\n                    continue;\n                }\n                visited[u] = true;\n                toVisit[eol++] = u;\n            }\n        }\n    }\n    const result = new Float64Array(dimension);\n    for (let i = 0; i < dimension; ++i) {\n        result[toVisit[i]] = i;\n    }\n    return result;\n}\n//# sourceMappingURL=matrixCuthillMckee.js.map","/**\n * Checks if the specified submatrix boundaries are within the valid range of the given matrix.\n * @param matrix - The matrix to check the boundaries against.\n * @param boundaries - The boundaries of the submatrix.\n * @throws {RangeError} If any of the specified boundaries are out of the matrix's range.\n */\nexport function matrixCheckRanges(matrix, boundaries) {\n    const { startRow, endRow, startColumn, endColumn } = boundaries;\n    if (startRow > endRow ||\n        startColumn > endColumn ||\n        startRow < 0 ||\n        startRow >= matrix.length ||\n        endRow < 0 ||\n        endRow >= matrix.length ||\n        startColumn < 0 ||\n        startColumn >= matrix[0].length ||\n        endColumn < 0 ||\n        endColumn >= matrix[0].length) {\n        throw new RangeError('submatrix indices are out of range');\n    }\n}\n//# sourceMappingURL=matrixCheckRanges.js.map","import { matrixCheckRanges } from './matrixCheckRanges';\n/**\n * Get a subMatrix from matrix, the function checks if the subMatrix\n * lies within the dimensions of the matrix.\n * @param matrix - The original matrix from which the subMatrix will be extracted.\n * @param options - Options to define the subMatrix boundaries and duplication behavior.\n * @returns The subMatrix extracted from the original matrix.\n */\nexport function matrixGetSubMatrix(matrix, options) {\n    const { startRow = 0, endRow = matrix.length - 1, startColumn = 0, endColumn = matrix[0].length - 1, duplicate = true, } = options;\n    matrixCheckRanges(matrix, { startColumn, startRow, endColumn, endRow });\n    const nbRows = endRow - startRow + 1;\n    const subMatrix = [];\n    if (duplicate) {\n        for (let i = 0; i < nbRows; i++) {\n            subMatrix.push(matrix[startRow + i].slice(startColumn, endColumn + 1));\n        }\n    }\n    else {\n        for (let i = 0; i < nbRows; i++) {\n            subMatrix.push(matrix[startRow + i].subarray(startColumn, endColumn + 1));\n        }\n    }\n    return subMatrix;\n}\n//# sourceMappingURL=matrixGetSubMatrix.js.map","/**\n * Get min and max of the absolute values of Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxAbsoluteZ(matrix) {\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrixMinMaxAbsoluteZ requires at least 1 row and 1 column');\n    }\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            let value = matrix[row][column];\n            if (value < 0)\n                value *= -1;\n            if (value < min)\n                min = value;\n            if (value > max)\n                max = value;\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxAbsoluteZ.js.map","import { matrixCheck } from './matrixCheck';\n/**\n * Get min and max Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","import { xHistogram } from '../x';\nimport { matrixMinMaxAbsoluteZ } from './matrixMinMaxAbsoluteZ';\nimport { matrixMinMaxZ } from './matrixMinMaxZ';\n/**\n * Calculates a histogram of defined number of slots.\n * @param matrix - matrix [rows][cols].\n * @param options - options\n * @returns - Result of the histogram.\n */\nexport function matrixHistogram(matrix, options = {}) {\n    let { min, max } = options;\n    const { absolute, logBaseX, logBaseY, histogram, nbSlots, centerX } = options;\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrix must have at least one column and one row');\n    }\n    if (min === undefined || max === undefined) {\n        const minMax = absolute\n            ? matrixMinMaxAbsoluteZ(matrix)\n            : matrixMinMaxZ(matrix);\n        if (min === undefined) {\n            min =\n                logBaseX && minMax.min\n                    ? Math.log(minMax.min) / Math.log(logBaseX)\n                    : minMax.min;\n        }\n        if (max === undefined) {\n            max =\n                logBaseX && minMax.max\n                    ? Math.log(minMax.max) / Math.log(logBaseX)\n                    : minMax.max;\n        }\n    }\n    const xHistogramOptions = {\n        histogram,\n        nbSlots,\n        centerX,\n        absolute,\n        logBaseX,\n        // Skip logBaseY as it's handled below.\n        min,\n        max,\n    };\n    const finalHistogram = xHistogram(matrix[0], xHistogramOptions);\n    xHistogramOptions.histogram = finalHistogram;\n    const nbRows = matrix.length;\n    for (let row = 1; row < nbRows; row++) {\n        xHistogram(matrix[row], xHistogramOptions);\n    }\n    const y = finalHistogram.y;\n    if (logBaseY) {\n        const logOfBase = Math.log10(logBaseY);\n        for (let i = 0; i < y.length; i++) {\n            y[i] = Math.log10(y[i] + 1) / logOfBase;\n        }\n    }\n    return finalHistogram;\n}\n//# sourceMappingURL=matrixHistogram.js.map","/**\n * Returns the max absolute values of Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMaxAbsoluteZ(matrix) {\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrix must have at least 1 row and 1 column');\n    }\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let max = Number.NEGATIVE_INFINITY;\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            const value = Math.abs(matrix[row][column]);\n            if (value > max)\n                max = value;\n        }\n    }\n    return max;\n}\n//# sourceMappingURL=matrixMaxAbsoluteZ.js.map","import { matrixCheck } from './matrixCheck';\n/**\n * Convert a matrix to a flat Float64Array.\n * @param matrix\n */\nexport function matrixToArray(matrix) {\n    matrixCheck(matrix);\n    const nbColumns = matrix[0].length;\n    const flatten = new Float64Array(matrix.length * nbColumns);\n    for (let row = 0; row < matrix.length; row++) {\n        const currentRow = row * nbColumns;\n        for (let column = 0; column < nbColumns; column++) {\n            flatten[currentRow + column] = matrix[row][column];\n        }\n    }\n    return flatten;\n}\n//# sourceMappingURL=matrixToArray.js.map","import { xMedian } from '../x';\nimport { matrixToArray } from './matrixToArray';\n/**\n * Returns the median of the matrix.\n * @param matrix\n */\nexport function matrixMedian(matrix) {\n    return xMedian(matrixToArray(matrix));\n}\n//# sourceMappingURL=matrixMedian.js.map","import { xNoiseStandardDeviation } from '../x';\nimport { matrixToArray } from './matrixToArray';\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 matrix\n * @returns Noise level corresponding to one standard deviation.\n */\nexport function matrixNoiseStandardDeviation(matrix) {\n    return xNoiseStandardDeviation(matrixToArray(matrix));\n}\n//# sourceMappingURL=matrixNoiseStandardDeviation.js.map","import { matrixClone } from './matrixClone';\n/**\n * Numerically decodes the matrix using the dictionary.\n * @param matrixInitial\n * @param dictionary - dictionary against which to do the encoding\n * @returns - decoded matrix\n */\nexport function matrixNumericalDecoding(matrixInitial, dictionary) {\n    const matrix = matrixClone(matrixInitial);\n    const invertedDictionary = swap(dictionary);\n    for (let i = 0; i < matrix.length; i++) {\n        for (let j = 0; j < matrix[0].length; j++) {\n            const value = matrix[i][j];\n            if (typeof value === 'number' && value in invertedDictionary) {\n                matrix[i][j] = invertedDictionary[value];\n            }\n        }\n    }\n    return matrix;\n}\nfunction swap(dictionary) {\n    const ret = {};\n    for (const key in dictionary) {\n        ret[dictionary[key]] = key;\n    }\n    return ret;\n}\n//# sourceMappingURL=matrixNumericalDecoding.js.map","import { matrixClone } from './matrixClone';\n/**\n * Numerically encodes the strings in the matrix and returns an encoding dictionary which can be used to encode other matrices\n * @param matrixInitial - original matrix before encoding\n * @returns - dictionary from string to number\n */\nexport function matrixNumericalEncoding(matrixInitial) {\n    const matrix = matrixClone(matrixInitial);\n    const nRows = matrix.length;\n    const nColumns = matrix[0].length;\n    let k = 0;\n    for (let i = 0; i < nRows; i++) {\n        for (let j = 0; j < nColumns; j++) {\n            const value = matrix[i][j];\n            if (typeof value === 'number' && value > k) {\n                k = value;\n            }\n        }\n    }\n    const dictCategoricalToNumerical = {};\n    for (let i = 0; i < nRows; i++) {\n        for (let j = 0; j < nColumns; j++) {\n            const value = matrix[i][j];\n            if (typeof value === 'string') {\n                if (value in dictCategoricalToNumerical) {\n                    matrix[i][j] = dictCategoricalToNumerical[value];\n                }\n                else {\n                    k++;\n                    dictCategoricalToNumerical[value] = k;\n                    matrix[i][j] = k;\n                }\n            }\n        }\n    }\n    return { matrix: matrix, dictCategoricalToNumerical };\n}\n//# sourceMappingURL=matrixNumericalEncoding.js.map","import { Matrix } from 'ml-matrix';\nimport { xMedian } from '../x';\n/**\n * Performs a Probabilistic quotient normalization (PQN) over the dataset to account dilution based in median spectrum.\n * Dieterle, F., Ross, A., Schlotterbeck, G., & Senn, H. (2006). Probabilistic quotient normalization as robust method to account for dilution of complex biological mixtures. Application in 1H NMR metabonomics. Analytical chemistry, 78(13), 4281-4290.\n * DOI: 10.1021/ac051632c\n * @param matrix - matrix [rows][cols].\n * @param options - options\n * @returns - {data: Normalized dataset, medianOfQuotients: The median of quotients of each variables}\n */\nexport function matrixPQN(matrix, options = {}) {\n    const { max = 100 } = options;\n    const matrixB = new Matrix(matrix);\n    for (let i = 0; i < matrixB.rows; i++) {\n        const normalizationFactor = matrixB.getRowVector(i).norm('frobenius') / max;\n        const row = matrixB.getRowVector(i).div(normalizationFactor);\n        matrixB.setRow(i, row);\n    }\n    const referenceSpectrum = [];\n    for (let i = 0; i < matrixB.columns; i++) {\n        const currentVariable = matrixB.getColumn(i);\n        referenceSpectrum.push(xMedian(currentVariable));\n    }\n    const medianOfQuotients = [];\n    for (let i = 0; i < matrixB.columns; i++) {\n        const quotients = matrixB.getColumnVector(i).div(referenceSpectrum[i]);\n        medianOfQuotients.push(xMedian(quotients.getColumn(0)));\n    }\n    for (let i = 0; i < matrixB.rows; i++) {\n        matrixB.mulRow(i, 1 / medianOfQuotients[i]);\n    }\n    return {\n        data: matrixB.to2DArray(),\n        medianOfQuotients,\n    };\n}\n//# sourceMappingURL=matrixPQN.js.map","import { matrixCheckRanges } from './matrixCheckRanges';\n/**\n * Set in-place a subMatrix to matrix, the function check if the subMatrix\n * lies into the dimensions of matrix.\n * @param matrix - matrix that will receive the new element values.\n * @param subMatrix - matrix with equal or less size than matrix.\n * @param startRow - row index in matrix for the first row in subMatrix.\n * @param startColumn - column index in matrix for the first column in subMatrix.\n * @returns The modified `matrix`.\n */\nexport function matrixSetSubMatrix(matrix, subMatrix, startRow, startColumn) {\n    const endRow = startRow + subMatrix.length - 1;\n    const endColumn = startColumn + subMatrix[0].length - 1;\n    matrixCheckRanges(matrix, { startRow, endRow, startColumn, endColumn });\n    for (let i = 0; i < subMatrix.length; i++) {\n        for (let j = 0; j < subMatrix[0].length; j++) {\n            matrix[startRow + i][startColumn + j] = subMatrix[i][j];\n        }\n    }\n    return matrix;\n}\n//# sourceMappingURL=matrixSetSubMatrix.js.map","import { matrixCreateEmpty } from './matrixCreateEmpty';\nimport { matrixMaxAbsoluteZ } from './matrixMaxAbsoluteZ';\n/**\n * Rescale a matrix around 0 taking into account the absolute max value.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZPivotRescale(matrix, options = {}) {\n    const { max = 1, ArrayConstructor } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows, ArrayConstructor });\n    const currentMax = matrixMaxAbsoluteZ(matrix);\n    for (let column = 0; column < nbColumns; column++) {\n        const factor = max / currentMax;\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] = matrix[row][column] * factor;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZPivotRescale.js.map","import { matrixCreateEmpty } from './matrixCreateEmpty';\nimport { matrixMinMaxZ } from './matrixMinMaxZ';\n/**\n * Rescale a matrix between min and max values.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZRescale(matrix, options = {}) {\n    const { min = 0, max = 1, ArrayConstructor } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows, ArrayConstructor });\n    const { min: currentMin, max: currentMax } = matrixMinMaxZ(matrix);\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] =\n                (matrix[row][column] - currentMin) * factor + min;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZRescale.js.map","import { matrixCreateEmpty } from './matrixCreateEmpty';\n/**\n * Rescale the matrix per column for which we get the min and max values.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZRescalePerColumn(matrix, options = {}) {\n    const { min = 0, max = 1 } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows });\n    for (let column = 0; column < nbColumns; column++) {\n        let currentMin = matrix[0][column];\n        let currentMax = matrix[0][column];\n        for (let row = 1; row < nbRows; row++) {\n            if (matrix[row][column] < currentMin)\n                currentMin = matrix[row][column];\n            if (matrix[row][column] > currentMax)\n                currentMax = matrix[row][column];\n        }\n        const factor = (max - min) / (currentMax - currentMin);\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] =\n                (matrix[row][column] - currentMin) * factor + min;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZRescalePerColumn.js.map","import { matrixCheck } from './matrixCheck';\nimport { matrixCreateEmpty } from './matrixCreateEmpty';\nexport function matrixTranspose(matrix, options = {}) {\n    matrixCheck(matrix);\n    const { ArrayConstructor } = options;\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    // Create new matrix with swapped dimensions\n    const result = matrixCreateEmpty({\n        nbColumns: nbRows,\n        nbRows: nbColumns,\n        ArrayConstructor,\n    });\n    for (let i = 0; i < nbRows; i++) {\n        for (let j = 0; j < nbColumns; j++) {\n            result[j][i] = matrix[i][j];\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=matrixTranspose.js.map","export function addStyle(serie, spectrum, options = {}) {\n    let { color = '#A9A9A9' } = options;\n    const { opacity = 1, lineWidth = 1 } = options;\n    if (color.match(/#[\\da-f]{6}$/i)) {\n        color = (color + ((opacity * 255) >> 0).toString(16)).toUpperCase();\n    }\n    else {\n        color = color.replace(/rgb ?\\((.*)\\)/, `rgba($1,${opacity})`);\n    }\n    serie.style = [\n        {\n            name: 'unselected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth,\n                    dash: 1,\n                },\n            },\n        },\n        {\n            name: 'selected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth + 2,\n                    dash: 1,\n                },\n            },\n        },\n    ];\n    serie.name = spectrum.label || spectrum.id;\n}\n//# sourceMappingURL=addStyle.js.map","export const COLORS = [\n    '#FFB300',\n    '#803E75',\n    '#FF6800',\n    '#A6BDD7',\n    '#C10020',\n    '#CEA262',\n    '#817066',\n    '#007D34',\n    '#F6768E',\n    '#00538A',\n    '#FF7A5C',\n    '#53377A',\n    '#FF8E00',\n    '#B32851',\n    '#F4C800',\n    '#7F180D',\n    '#93AA00',\n    '#593315',\n    '#F13A13',\n    '#232C16',\n];\n//# sourceMappingURL=colors.js.map","import { xyFilterXPositive } from 'ml-spectra-processing';\nimport { addStyle } from './addStyle.js';\nimport { COLORS } from './colors.js';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param analyses\n * @param options\n */\nexport function getJSGraph(analyses, options = {}) {\n    const { colors = COLORS, opacities = [1], linesWidth = [1], selector = {}, normalization, xAxis = {}, yAxis = {}, } = options;\n    const series = [];\n    let xLabel = xAxis.label;\n    let yLabel = yAxis.label;\n    let xUnits = xAxis.units;\n    let yUnits = yAxis.units;\n    for (let i = 0; i < analyses.length; i++) {\n        const analysis = analyses[i];\n        const spectra = analysis.getNormalizedSpectra({\n            selector,\n            normalization,\n        });\n        if (spectra.length === 0)\n            continue;\n        const firstSpectrum = spectra[0];\n        // todo: if many spectra are available and not xUnits / yUnits are specified we should ensure that all the spectra are compatible\n        if (!xLabel)\n            xLabel = firstSpectrum.variables.x.label;\n        if (!yLabel)\n            yLabel = firstSpectrum.variables.y.label;\n        if (!xUnits)\n            xUnits = firstSpectrum.variables.x.units;\n        if (!yUnits)\n            yUnits = firstSpectrum.variables.y.units;\n        for (const spectrum of spectra) {\n            const serie = {};\n            addStyle(serie, analysis, {\n                color: colors[i % colors.length],\n                opacity: opacities[i % opacities.length],\n                lineWidth: linesWidth[i % linesWidth.length],\n            });\n            serie.data = {\n                x: spectrum.variables.x.data,\n                y: spectrum.variables.y.data,\n            };\n            serie.id = spectrum.id;\n            if (xAxis.logScale) {\n                serie.data = xyFilterXPositive(serie.data);\n            }\n            series.push(serie);\n        }\n    }\n    return {\n        axes: {\n            x: {\n                label: xLabel,\n                unit: xUnits,\n                unitWrapperBefore: '(',\n                unitWrapperAfter: ')',\n                flipped: false,\n                display: true,\n                ...xAxis,\n            },\n            y: {\n                label: yLabel,\n                unit: yUnits,\n                unitWrapperBefore: '(',\n                unitWrapperAfter: ')',\n                flipped: false,\n                display: true,\n                ...yAxis,\n            },\n        },\n        series,\n    };\n}\n//# sourceMappingURL=getJSGraph.js.map","export function getNormalizationAnnotations(filter = {}, boundary = { y: { min: '0px', max: '2000px' } }) {\n    let { exclusions = [] } = filter;\n    let annotations = [];\n    exclusions = exclusions.filter((exclusion) => !exclusion.ignore);\n    annotations = exclusions.map((exclusion) => {\n        const annotation = {\n            type: 'rect',\n            position: [\n                { x: exclusion.from, y: boundary.y.min },\n                { x: exclusion.to, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        };\n        return annotation;\n    });\n    if (filter.from !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: Number.MIN_SAFE_INTEGER, y: boundary.y.min },\n                { x: filter.from, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    if (filter.to !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: filter.to, y: boundary.y.min },\n                { x: Number.MAX_SAFE_INTEGER, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    return annotations;\n}\n//# sourceMappingURL=getNormalizationAnnotations.js.map","import { xMean } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n */\nexport function centerMean(data) {\n    const { y } = data;\n    const mean = xMean(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= mean;\n    }\n    return { data };\n}\n//# sourceMappingURL=centerMean.js.map","import { xMedian } from 'ml-spectra-processing';\n/**\n * Center the median\n * @param data\n */\nexport function centerMedian(data) {\n    const { y } = data;\n    const median = xMedian(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= median;\n    }\n    return { data };\n}\n//# sourceMappingURL=centerMedian.js.map","import { xGetFromToIndex } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function fromTo(data, options = {}) {\n    const { fromIndex, toIndex } = xGetFromToIndex(data.x, options);\n    return {\n        data: {\n            x: data.x.subarray(fromIndex, toIndex + 1),\n            y: data.y.subarray(fromIndex, toIndex + 1),\n        },\n    };\n}\n//# sourceMappingURL=fromTo.js.map","import { xNormed } from 'ml-spectra-processing';\n/**\n * Norm the Y values\n * @param data\n * @param options\n */\nexport function normed(data, options = {}) {\n    xNormed(data.y, { ...options, output: data.y });\n    return { data };\n}\n//# sourceMappingURL=normed.js.map","import { xStandardDeviation } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n */\nexport function divideBySD(data) {\n    const { y } = data;\n    const sd = xStandardDeviation(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] /= sd;\n    }\n    return { data };\n}\n//# sourceMappingURL=divideBySD.js.map","import { xRescale } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n * @param options\n */\nexport function rescale(data, options = {}) {\n    xRescale(data.y, { ...options, output: data.y });\n    return { data };\n}\n//# sourceMappingURL=rescale.js.map","import { xParetoNormalization } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n */\nexport function paretoNormalization(data) {\n    return {\n        data: {\n            x: data.x,\n            y: xParetoNormalization(data.y),\n        },\n    };\n}\n//# sourceMappingURL=paretoNormalization.js.map","// Based on https://github.com/scijs/cholesky-solve\n\n/*\nThe MIT License (MIT)\n\nCopyright (c) 2013 Eric Arnebäck\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nfunction ldlSymbolic(\n  n /* A and L are n-by-n, where n >= 0 */,\n  Ap /* input of size n + 1, not modified */,\n  Ai /* input of size nz=Ap[n], not modified */,\n  Lp /* output of size n + 1, not defined on input */,\n  Parent /* output of size n, not defined on input */,\n  Lnz /* output of size n, not defined on input */,\n  Flag /* workspace of size n, not defn. on input or output */,\n) {\n  let i, k, p, kk, p2;\n\n  for (k = 0; k < n; k++) {\n    /* L(k,:) pattern: all nodes reachable in etree from nz in A(0:k-1,k) */\n    Parent[k] = -1; /* parent of k is not yet known */\n    Flag[k] = k; /* mark node k as visited */\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\n    kk = k; /* kth original, or permuted, column */\n    p2 = Ap[kk + 1];\n    for (p = Ap[kk]; p < p2; p++) {\n      /* A (i,k) is nonzero (original or permuted A) */\n      i = Ai[p];\n\n      if (i < k) {\n        /* follow path from i to root of etree, stop at flagged node */\n        for (; Flag[i] !== k; i = Parent[i]) {\n          /* find parent of i if not yet determined */\n          if (Parent[i] === -1) Parent[i] = k;\n          Lnz[i]++; /* L (k,i) is nonzero */\n          Flag[i] = k; /* mark i as visited */\n        }\n      }\n    }\n  }\n  /* construct Lp index array from Lnz column counts */\n  Lp[0] = 0;\n  for (k = 0; k < n; k++) {\n    Lp[k + 1] = Lp[k] + Lnz[k];\n  }\n}\n\nfunction ldlNumeric(\n  n /* A and L are n-by-n, where n >= 0 */,\n  Ap /* input of size n+1, not modified */,\n  Ai /* input of size nz=Ap[n], not modified */,\n  Ax /* input of size nz=Ap[n], not modified */,\n  Lp /* input of size n+1, not modified */,\n  Parent /* input of size n, not modified */,\n  Lnz /* output of size n, not defn. on input */,\n  Li /* output of size lnz=Lp[n], not defined on input */,\n  Lx /* output of size lnz=Lp[n], not defined on input */,\n  D /* output of size n, not defined on input */,\n  Y /* workspace of size n, not defn. on input or output */,\n  Pattern /* workspace of size n, not defn. on input or output */,\n  Flag /* workspace of size n, not defn. on input or output */,\n) {\n  let yi, lKi;\n  let i, k, p, kk, p2, len, top;\n  for (k = 0; k < n; k++) {\n    /* compute nonzero Pattern of kth row of L, in topological order */\n    Y[k] = 0.0; /* Y(0:k) is now all zero */\n    top = n; /* stack for pattern is empty */\n    Flag[k] = k; /* mark node k as visited */\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\n    kk = k; /* kth original, or permuted, column */\n    p2 = Ap[kk + 1];\n    for (p = Ap[kk]; p < p2; p++) {\n      i = Ai[p]; /* get A(i,k) */\n      if (i <= k) {\n        Y[i] += Ax[p]; /* scatter A(i,k) into Y (sum duplicates) */\n        for (len = 0; Flag[i] !== k; i = Parent[i]) {\n          Pattern[len++] = i; /* L(k,i) is nonzero */\n          Flag[i] = k; /* mark i as visited */\n        }\n        while (len > 0) Pattern[--top] = Pattern[--len];\n      }\n    }\n    /* compute numerical values kth row of L (a sparse triangular solve) */\n    D[k] = Y[k]; /* get D(k,k) and clear Y(k) */\n    Y[k] = 0.0;\n    for (; top < n; top++) {\n      i = Pattern[top]; /* Pattern[top:n-1] is pattern of L(:,k) */\n      yi = Y[i]; /* get and clear Y(i) */\n      Y[i] = 0.0;\n      p2 = Lp[i] + Lnz[i];\n      for (p = Lp[i]; p < p2; p++) {\n        Y[Li[p]] -= Lx[p] * yi;\n      }\n      lKi = yi / D[i]; /* the nonzero entry L(k,i) */\n      D[k] -= lKi * yi;\n      Li[p] = k; /* store L(k,i) in column form of L */\n      Lx[p] = lKi;\n      Lnz[i]++; /* increment count of nonzeros in col i */\n    }\n\n    if (D[k] === 0.0) return k; /* failure, D(k,k) is zero */\n  }\n\n  return n; /* success, diagonal of D is all nonzero */\n}\n\nfunction ldlLsolve(\n  n /* L is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  Lp /* input of size n+1, not modified */,\n  Li /* input of size lnz=Lp[n], not modified */,\n  Lx /* input of size lnz=Lp[n], not modified */,\n) {\n  let j, p, p2;\n  for (j = 0; j < n; j++) {\n    p2 = Lp[j + 1];\n    for (p = Lp[j]; p < p2; p++) {\n      X[Li[p]] -= Lx[p] * X[j];\n    }\n  }\n}\n\nfunction ldlDsolve(\n  n /* D is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  D /* input of size n, not modified */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[j] /= D[j];\n  }\n}\n\nfunction ldlLTsolve(\n  n /* L is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  Lp /* input of size n+1, not modified */,\n  Li /* input of size lnz=Lp[n], not modified */,\n  Lx /* input of size lnz=Lp[n], not modified */,\n) {\n  let j, p, p2;\n  for (j = n - 1; j >= 0; j--) {\n    p2 = Lp[j + 1];\n    for (p = Lp[j]; p < p2; p++) {\n      X[j] -= Lx[p] * X[Li[p]];\n    }\n  }\n}\n\nfunction ldlPerm(\n  n /* size of X, B, and P */,\n  X /* output of size n. */,\n  B /* input of size n. */,\n  P /* input permutation array of size n. */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[j] = B[P[j]];\n  }\n}\n\nfunction ldlPermt(\n  n /* size of X, B, and P */,\n  X /* output of size n. */,\n  B /* input of size n. */,\n  P /* input permutation array of size n. */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[P[j]] = B[j];\n  }\n}\n\nfunction prepare(M, n, P) {\n  // if a permutation was specified, apply it.\n  if (P) {\n    let Pinv = new Array(n);\n\n    for (let k = 0; k < n; k++) {\n      Pinv[P[k]] = k;\n    }\n\n    let Mt = []; // scratch memory\n    // Apply permutation. We make M into P*M*P^T\n    for (let a = 0; a < M.length; ++a) {\n      let ar = Pinv[M[a][0]];\n      let ac = Pinv[M[a][1]];\n\n      // we only store the upper-diagonal elements(since we assume matrix is symmetric, we only need to store these)\n      // if permuted element is below diagonal, we simply transpose it.\n      if (ac < ar) {\n        let t = ac;\n        ac = ar;\n        ar = t;\n      }\n\n      Mt[a] = [];\n      Mt[a][0] = ar;\n      Mt[a][1] = ac;\n      Mt[a][2] = M[a][2];\n    }\n\n    M = Mt; // copy scratch memory.\n  } else {\n    // if P argument is null, we just use an identity permutation.\n    P = [];\n    for (let i = 0; i < n; ++i) {\n      P[i] = i;\n    }\n  }\n\n  // The sparse matrix we are decomposing is A.\n  // Now we shall create A from M.\n  let Ap = new Array(n + 1);\n  let Ai = new Array(M.length);\n  let Ax = new Array(M.length);\n\n  // count number of non-zero elements in columns.\n  let LNZ = [];\n  for (let i = 0; i < n; ++i) {\n    LNZ[i] = 0;\n  }\n  for (let a = 0; a < M.length; ++a) {\n    LNZ[M[a][1]]++;\n  }\n\n  Ap[0] = 0;\n  for (let i = 0; i < n; ++i) {\n    Ap[i + 1] = Ap[i] + LNZ[i];\n  }\n\n  let coloffset = [];\n  for (let a = 0; a < n; ++a) {\n    coloffset[a] = 0;\n  }\n\n  // go through all elements in M, and add them to sparse matrix A.\n  for (let i = 0; i < M.length; ++i) {\n    let e = M[i];\n    let col = e[1];\n\n    let adr = Ap[col] + coloffset[col];\n    Ai[adr] = e[0];\n    Ax[adr] = e[2];\n\n    coloffset[col]++;\n  }\n\n  let D = new Array(n);\n  let Y = new Array(n);\n  let Lp = new Array(n + 1);\n  let Parent = new Array(n);\n  let Lnz = new Array(n);\n  let Flag = new Array(n);\n  let Pattern = new Array(n);\n  let bp1 = new Array(n);\n  let x = new Array(n);\n  let d;\n\n  ldlSymbolic(n, Ap, Ai, Lp, Parent, Lnz, Flag);\n\n  let Lx = new Array(Lp[n]);\n  let Li = new Array(Lp[n]);\n\n  d = ldlNumeric(n, Ap, Ai, Ax, Lp, Parent, Lnz, Li, Lx, D, Y, Pattern, Flag);\n\n  if (d === n) {\n    return (b) => {\n      ldlPerm(n, bp1, b, P);\n      ldlLsolve(n, bp1, Lp, Li, Lx);\n      ldlDsolve(n, bp1, D);\n      ldlLTsolve(n, bp1, Lp, Li, Lx);\n      ldlPermt(n, x, bp1, P);\n\n      return x;\n    };\n  } else {\n    return null;\n  }\n}\n\nexport { prepare as default };\n","'use strict'\n\nmodule.exports = cuthillMckee\n\nfunction compareNum(a, b) { return a - b }\n\nfunction cuthillMckee(list, n) {\n  var adj = new Array(n)\n  var visited = new Array(n)\n  for(var i=0; i<n; ++i) {\n    adj[i]     = []\n    visited[i] = false\n  }\n\n  for(var i=0; i<list.length; ++i) {\n    var l = list[i]\n    adj[l[0]].push(l[1])\n  }\n\n  var toVisit = new Array(n)\n  var eol = 0\n  var ptr = 0\n  for(var i=0; i<n; ++i) {\n    if(visited[i]) {\n      continue\n    }\n    toVisit[eol++] = i\n    visited[i] = true\n    while(ptr < eol) {\n      var v = toVisit[ptr++]\n      var nbhd = adj[v]\n      nbhd.sort(compareNum)\n      for(var j=0; j<nbhd.length; ++j) {\n        var u = nbhd[j]\n        if(visited[u]) {\n          continue\n        }\n        visited[u] = true\n        toVisit[eol++] = u\n      }\n    }\n  }\n\n  var result = new Array(n)\n  for(var i=0; i<n; ++i) {\n    result[toVisit[i]] = i\n  }\n\n  return result\n}\n","import cuthillMckee from 'cuthill-mckee';\n\nconst getClosestNumber = (array = [], goal = 0) => {\n  const closest = array.reduce((prev, curr) => {\n    return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;\n  });\n  return closest;\n};\n\nconst getCloseIndex = (array = [], goal = 0) => {\n  const closest = getClosestNumber(array, goal);\n  return array.indexOf(closest);\n};\n\nconst updateSystem = (matrix, y, weights) => {\n  let nbPoints = y.length;\n  let l = nbPoints - 1;\n  let newMatrix = new Array(matrix.length);\n  let newVector = new Float64Array(nbPoints);\n  for (let i = 0; i < l; i++) {\n    let w = weights[i];\n    let diag = i * 2;\n    let next = diag + 1;\n    newMatrix[diag] = matrix[diag].slice();\n    newMatrix[next] = matrix[next].slice();\n    if (w === 0) {\n      newVector[i] = 0;\n    } else {\n      newVector[i] = y[i] * w;\n      newMatrix[diag][2] += w;\n    }\n  }\n  newVector[l] = y[l] * weights[l];\n  newMatrix[l * 2] = matrix[l * 2].slice();\n  newMatrix[l * 2][2] += weights[l];\n\n  return [newMatrix, newVector];\n};\n\nconst getDeltaMatrix = (nbPoints, lambda) => {\n  let matrix = [];\n  let last = nbPoints - 1;\n  for (let i = 0; i < last; i++) {\n    matrix.push([i, i, lambda * 2]);\n    matrix.push([i + 1, i, -1 * lambda]);\n  }\n  matrix[0][2] = lambda;\n  matrix.push([last, last, lambda]);\n  return {\n    lowerTriangularNonZeros: matrix,\n    permutationEncodedArray: cuthillMckee(matrix, nbPoints),\n  };\n};\n\nexport { updateSystem, getDeltaMatrix, getCloseIndex, getClosestNumber };\n","import { xMultiply, xNoiseSanPlot, xAbsoluteSum } from 'ml-spectra-processing';\n\nimport cholesky from './choleskySolver';\nimport { updateSystem, getDeltaMatrix, getCloseIndex } from './utils';\n\nfunction getControlPoints(x, y, options = {}) {\n  const { length } = x;\n  let { controlPoints = Int8Array.from({ length }).fill(0) } = options;\n  const { zones = [], weights = Float64Array.from({ length }).fill(1) } =\n    options;\n\n  if (x.length !== y.length) {\n    throw new RangeError('Y should match the length with X');\n  } else if (controlPoints.length !== x.length) {\n    throw new RangeError('controlPoints should match the length with X');\n  } else if (weights.length !== x.length) {\n    throw new RangeError('weights should match the length with X');\n  }\n\n  zones.forEach((range) => {\n    let indexFrom = getCloseIndex(x, range.from);\n    let indexTo = getCloseIndex(x, range.to);\n    if (indexFrom > indexTo) [indexFrom, indexTo] = [indexTo, indexFrom];\n    for (let i = indexFrom; i < indexTo; i++) {\n      controlPoints[i] = 1;\n    }\n  });\n\n  return {\n    weights:\n      'controlPoints' in options || zones.length > 0\n        ? xMultiply(weights, controlPoints)\n        : weights,\n    controlPoints,\n  };\n}\n\n/**\n * Fit the baseline drift by iteratively changing weights of sum square error between the fitted baseline and original signals,\n * for further information about the parameters you can get the [paper of airPLS](https://github.com/zmzhang/airPLS/blob/main/airPLS_manuscript.pdf)\n * @param {Array<number>} x - x axis data useful when control points or zones are submitted\n * @param {Array<number>} y - Original data\n * @param {object} [options={}] - Options object\n * @param {number} [options.maxIterations = 100] - Maximal number of iterations if the method does not reach the stop criterion\n * @param {number} [options.tolerance = 0.001] - Factor of the sum of absolute value of original data, to compute stop criterion\n * @param {Array<number>} [options.weights = [1,1,...]] - Initial weights vector, default each point has the same weight\n * @param {number} [options.lambda = 100] - Factor of weights matrix in -> [I + lambda D'D]z = x\n * @param {Array<number>} [options.controlPoints = []] - Array of 0|1 to force the baseline cross those points.\n * @param {Array<number>} [options.zones = []] - Array of x axis values (as from - to), to force that baseline cross those zones.\n * @returns {{corrected: Array<number>, error: number, iteration: number, baseline: Array<number>}}\n */\n\nexport default function airPLS(x, y, options = {}) {\n  const { weights, controlPoints } = getControlPoints(x, y, options);\n  let { maxIterations = 100, lambda = 10, tolerance = 0.001 } = options;\n\n  let baseline, iteration;\n  let sumNegDifferences = Number.MAX_SAFE_INTEGER;\n  const corrected = Float64Array.from(y);\n  let stopCriterion = getStopCriterion(y, tolerance);\n\n  const { length } = y;\n  let { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(\n    length,\n    lambda,\n  );\n\n  let threshold = 1;\n  const l = length - 1;\n  let prevNegSum = Number.MAX_SAFE_INTEGER;\n  for (\n    iteration = 0;\n    iteration < maxIterations && Math.abs(sumNegDifferences) > stopCriterion;\n    iteration++\n  ) {\n    let [leftHandSide, rightHandSide] = updateSystem(\n      lowerTriangularNonZeros,\n      y,\n      weights,\n    );\n\n    let cho = cholesky(leftHandSide, length, permutationEncodedArray);\n\n    baseline = cho(rightHandSide);\n\n    sumNegDifferences = applyCorrection(y, baseline, corrected);\n    if (iteration === 1) {\n      const { positive } = xNoiseSanPlot(corrected);\n      threshold = positive;\n    } else {\n      const absChange = Math.abs(prevNegSum / sumNegDifferences);\n      if (absChange < 1.01 && absChange > 0.99) {\n        break;\n      }\n    }\n\n    prevNegSum = sumNegDifferences + 0;\n    for (let i = 1; i < l; i++) {\n      const diff = corrected[i];\n      if (controlPoints[i] < 1 && Math.abs(diff) > threshold) {\n        weights[i] = 0;\n      } else {\n        const factor = diff > 0 ? -1 : 1;\n        weights[i] = Math.exp(\n          (factor * (iteration * diff)) / Math.abs(sumNegDifferences),\n        );\n      }\n    }\n\n    weights[0] = 1;\n    weights[l] = 1;\n  }\n\n  return {\n    corrected,\n    baseline,\n    iteration,\n    error: sumNegDifferences,\n  };\n\n  function applyCorrection(y, baseline, corrected) {\n    let sumNegDifferences = 0;\n    for (let i = 0; i < y.length; i++) {\n      let diff = y[i] - baseline[i];\n      if (diff < 0) sumNegDifferences += diff;\n      corrected[i] = diff;\n    }\n\n    return sumNegDifferences;\n  }\n}\n\nfunction getStopCriterion(y, tolerance) {\n  let sum = xAbsoluteSum(y);\n  return tolerance * sum;\n}\n","import { isAnyArray } from 'is-any-array';\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array<number>} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array<number>}\n */\n\nfunction sequentialFill() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (_typeof(input) === 'object' && !isAnyArray(input)) {\n    options = input;\n    input = [];\n  }\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  var _options = options,\n      _options$from = _options.from,\n      from = _options$from === void 0 ? 0 : _options$from,\n      _options$to = _options.to,\n      to = _options$to === void 0 ? 10 : _options$to,\n      _options$size = _options.size,\n      size = _options$size === void 0 ? input.length : _options$size,\n      step = _options.step;\n\n  if (size !== 0 && step) {\n    throw new Error('step is defined by the array size');\n  }\n\n  if (!size) {\n    if (step) {\n      size = Math.floor((to - from) / step) + 1;\n    } else {\n      size = to - from + 1;\n    }\n  }\n\n  if (!step && size) {\n    step = (to - from) / (size - 1);\n  }\n\n  if (Array.isArray(input)) {\n    // only works with normal array\n    input.length = 0;\n\n    for (var i = 0; i < size; i++) {\n      input.push(from);\n      from += step;\n    }\n  } else {\n    if (input.length !== size) {\n      throw new Error('sequentialFill typed array must have the correct length');\n    }\n\n    for (var _i = 0; _i < size; _i++) {\n      input[_i] = from;\n      from += step;\n    }\n  }\n\n  return input;\n}\n\nexport { sequentialFill as default };\n","import airpls from 'ml-airpls';\nimport sequentialFill from 'ml-array-sequential-fill';\n/**\n * Adaptive iteratively reweighted penalized least squares [1]\n *\n * This function calls ml-airpls\n *\n * References:\n * [1] Zhang, Z.-M.; Chen, S.; Liang, Y.-Z.\n * Baseline Correction Using Adaptive Iteratively Reweighted Penalized Least Squares.\n * Analyst 2010, 135 (5), 1138–1146. https://doi.org/10.1039/B922045C.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {object} [options.regression] - Options for the regression\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.regression.§Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function airPLSBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n  let output = airpls(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { isAnyArray } from 'is-any-array';\n/**\n * Check that x and y are arrays with the same length.\n * @param x - first array\n * @param y - second array\n * @throws if x or y are not the same length, or if they are not arrays\n */\nexport function checkArrayLength(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y)) {\n        throw new TypeError('x and y must be arrays');\n    }\n    if (x.length !== y.length) {\n        throw new RangeError('x and y arrays must have the same length');\n    }\n}\n//# sourceMappingURL=checkArrayLength.js.map","import { isAnyArray } from 'is-any-array';\nimport { checkArrayLength } from './checkArrayLength';\nexport class BaseRegression {\n    constructor() {\n        if (new.target === BaseRegression) {\n            throw new Error('BaseRegression must be subclassed');\n        }\n    }\n    predict(x) {\n        if (typeof x === 'number') {\n            return this._predict(x);\n        }\n        else if (isAnyArray(x)) {\n            const y = [];\n            for (const xVal of x) {\n                y.push(this._predict(xVal));\n            }\n            return y;\n        }\n        else {\n            throw new TypeError('x must be a number or array');\n        }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _predict(x) {\n        throw new Error('_predict must be implemented');\n    }\n    train() {\n        // Do nothing for this package\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toString(precision) {\n        return '';\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toLaTeX(precision) {\n        return '';\n    }\n    /**\n     * Return the correlation coefficient of determination (r) and chi-square.\n     * @param x - explanatory variable\n     * @param y - response variable\n     * @return - Object with further statistics.\n     */\n    score(x, y) {\n        checkArrayLength(x, y);\n        const n = x.length;\n        const y2 = new Array(n);\n        for (let i = 0; i < n; i++) {\n            y2[i] = this._predict(x[i]);\n        }\n        let xSum = 0;\n        let ySum = 0;\n        let chi2 = 0;\n        let rmsd = 0;\n        let xSquared = 0;\n        let ySquared = 0;\n        let xY = 0;\n        for (let i = 0; i < n; i++) {\n            xSum += y2[i];\n            ySum += y[i];\n            xSquared += y2[i] * y2[i];\n            ySquared += y[i] * y[i];\n            xY += y2[i] * y[i];\n            if (y[i] !== 0) {\n                chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n            }\n            rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n        }\n        const r = (n * xY - xSum * ySum) /\n            Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n        return {\n            r,\n            r2: r * r,\n            chi2,\n            rmsd: Math.sqrt(rmsd / n),\n        };\n    }\n}\n//# sourceMappingURL=BaseRegression.js.map","/**\n * Cast `number` to string. Optionally `digits` specifies significant figures.\n * @param number\n * @param figures\n * @returns - A string representation of `number`.\n */\nexport function maybeToPrecision(number, figures) {\n    if (number < 0) {\n        number = 0 - number;\n        if (typeof figures === 'number') {\n            return `- ${number.toPrecision(figures)}`;\n        }\n        else {\n            return `- ${number.toString()}`;\n        }\n    }\n    else if (typeof figures === 'number') {\n        return number.toPrecision(figures);\n    }\n    else {\n        return number.toString();\n    }\n}\n//# sourceMappingURL=maybeToPrecision.js.map","import { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\nimport { BaseRegression, checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\nexport class PolynomialRegression extends BaseRegression {\n    /**\n     * @param x - independent or explanatory variable\n     * @param y - dependent or response variable\n     * @param degree - degree of the polynomial regression, or array of powers to be used. When degree is an array, intercept at zero is forced to false/ignored.\n     * @example `new PolynomialRegression(x, y, 2)`, in this case, you can pass the option `interceptAtZero`, if you need it.\n     * @param options\n     * @example `new PolynomialRegression(x, y, [1, 3, 5])`\n     * Each of the degrees corresponds to a column, so if you have them switched, just do:\n     * @example `new PolynomialRegression(x, y, [3, 1, 5])`\n     * @param options.interceptAtZero - force the polynomial regression so that f(0) = 0\n     */\n    constructor(x, y, degree, options = {}) {\n        super();\n        // @ts-expect-error internal use only\n        if (x === true) {\n            // @ts-expect-error internal use only\n            this.degree = y.degree;\n            // @ts-expect-error internal use only\n            this.powers = y.powers;\n            // @ts-expect-error internal use only\n            this.coefficients = y.coefficients;\n        }\n        else {\n            checkArrayLength(x, y);\n            const result = regress(x, y, degree, options);\n            this.degree = result.degree;\n            this.powers = result.powers;\n            this.coefficients = result.coefficients;\n        }\n    }\n    _predict(x) {\n        let y = 0;\n        for (let k = 0; k < this.powers.length; k++) {\n            y += this.coefficients[k] * x ** this.powers[k];\n        }\n        return y;\n    }\n    toJSON() {\n        return {\n            name: 'polynomialRegression',\n            degree: this.degree,\n            powers: this.powers,\n            coefficients: this.coefficients,\n        };\n    }\n    toString(precision) {\n        return this._toFormula(precision, false);\n    }\n    toLaTeX(precision) {\n        return this._toFormula(precision, true);\n    }\n    _toFormula(precision, isLaTeX) {\n        let sup = '^';\n        let closeSup = '';\n        let times = ' * ';\n        if (isLaTeX) {\n            sup = '^{';\n            closeSup = '}';\n            times = '';\n        }\n        let fn = '';\n        let str = '';\n        for (let k = 0; k < this.coefficients.length; k++) {\n            str = '';\n            if (this.coefficients[k] !== 0) {\n                if (this.powers[k] === 0) {\n                    str = maybeToPrecision(this.coefficients[k], precision);\n                }\n                else if (this.powers[k] === 1) {\n                    str = `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n                }\n                else {\n                    str = `${maybeToPrecision(this.coefficients[k], precision) + times}x${sup}${this.powers[k]}${closeSup}`;\n                }\n                if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n                    str = ` + ${str}`;\n                }\n                else if (k !== this.coefficients.length - 1) {\n                    str = ` ${str}`;\n                }\n            }\n            fn = str + fn;\n        }\n        if (fn.startsWith('+')) {\n            fn = fn.slice(1);\n        }\n        return `f(x) = ${fn}`;\n    }\n    static load(json) {\n        if (json.name !== 'polynomialRegression') {\n            throw new TypeError('not a polynomial regression model');\n        }\n        // @ts-expect-error internal use only\n        return new PolynomialRegression(true, json);\n    }\n}\n/**\n * Perform a polynomial regression on the given data set.\n * This is an internal function.\n * @param x - independent or explanatory variable\n * @param y - dependent or response variable\n * @param degree - degree of the polynomial regression\n * @param options.interceptAtZero - force the polynomial regression so that $f(0) = 0$\n * @param options\n */\nfunction regress(x, y, degree, options = {}) {\n    const n = x.length;\n    let { interceptAtZero = false } = options;\n    let powers = [];\n    if (Array.isArray(degree)) {\n        powers = degree;\n        interceptAtZero = false; //must be false in this case\n    }\n    else if (typeof degree === 'number') {\n        if (interceptAtZero) {\n            powers = new Array(degree);\n            for (let k = 0; k < degree; k++) {\n                powers[k] = k + 1;\n            }\n        }\n        else {\n            powers = new Array(degree + 1);\n            for (let k = 0; k <= degree; k++) {\n                powers[k] = k;\n            }\n        }\n    }\n    const nCoefficients = powers.length; //1 per power, in any case.\n    const F = new Matrix(n, nCoefficients);\n    const Y = new Matrix([y]);\n    for (let k = 0; k < nCoefficients; k++) {\n        for (let i = 0; i < n; i++) {\n            if (powers[k] === 0) {\n                F.set(i, k, 1);\n            }\n            else {\n                F.set(i, k, x[i] ** powers[k]);\n            }\n        }\n    }\n    const FT = new MatrixTransposeView(F);\n    const A = FT.mmul(F);\n    const B = FT.mmul(new MatrixTransposeView(Y));\n    return {\n        coefficients: solve(A, B).to1DArray(),\n        degree: Math.max(...powers),\n        powers,\n    };\n}\n//# sourceMappingURL=index.js.map","import { PolynomialRegression } from 'ml-regression-polynomial';\n\n/**\n * Iterative regression-based baseline correction\n * @param {Array<number>} x - Independent axis variable\n * @param {Array<number>} y - Dependent axis variable\n * @param {object} [options] - Options object\n * @param {number} [options.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regressionOptions] - Options for regressionFunction\n * @param {number} [options.tolerance = 0.001] - Convergence error tolerance\n * @return {{corrected: Array<number>, delta: number, iteration: number, baseline: Array<number>}}\n */\nexport function baselineCorrectionRegression(x, y, options = {}) {\n  let {\n    maxIterations = 100,\n    Regression = PolynomialRegression,\n    regressionOptions,\n    tolerance = 0.001,\n  } = options;\n\n  if (!regressionOptions && Regression === PolynomialRegression) {\n    regressionOptions = 3;\n  }\n\n  let baseline = y.slice();\n  let fitting = y.slice();\n  let oldFitting = y;\n  let iteration = 0;\n  let delta;\n  let regression;\n  while (iteration < maxIterations) {\n    // Calculate the fitting result\n    regression = new Regression(x, baseline, regressionOptions);\n\n    delta = 0;\n    for (let i = 0; i < baseline.length; i++) {\n      fitting[i] = regression.predict(x[i]);\n      if (baseline[i] > fitting[i]) {\n        baseline[i] = fitting[i];\n      }\n\n      delta += Math.abs((fitting[i] - oldFitting[i]) / oldFitting[i]);\n    }\n\n    // Stop criterion\n    if (delta < tolerance) {\n      break;\n    } else {\n      oldFitting = fitting.slice();\n      iteration++;\n    }\n  }\n\n  // removes baseline\n  let corrected = new Array(baseline.length);\n  for (let j = 0; j < baseline.length; j++) {\n    corrected[j] = y[j] - baseline[j];\n  }\n\n  return {\n    corrected,\n    delta,\n    iteration,\n    baseline,\n    regression,\n  };\n}\n","import sequentialFill from 'ml-array-sequential-fill';\nimport { baselineCorrectionRegression } from 'ml-baseline-correction-regression';\n\n/**\n * Iterative polynomial fitting [1]\n *\n * Implementation based on ml-baseline-correction-regression\n *\n * References:\n * [1] Gan, F.; Ruan, G.; Mo, J.\n * Baseline Correction by Improved Iterative Polynomial Fitting with Automatic Threshold.\n *  Chemometrics and Intelligent Laboratory Systems 2006, 82 (1), 59–65.\n * https://doi.org/10.1016/j.chemolab.2005.08.009.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {Object} [options.regression]\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {Object} [options.regression]\n * @param {function} [options.regression.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {Object} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function iterativePolynomialBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n\n  let output = baselineCorrectionRegression(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { xRollingAverage } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingAverageBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = { ...defaults, ...options };\n  let baseline = xRollingAverage(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","import { isAnyArray } from 'is-any-array';\nimport { xMean, xMaxValue, xMinValue } from 'ml-spectra-processing';\nexport function rollingBall(spectrum, options = {}) {\n    if (!isAnyArray(spectrum)) {\n        throw new Error('Spectrum must be an array');\n    }\n    if (spectrum.length === 0) {\n        throw new TypeError('Spectrum must not be empty');\n    }\n    const numberPoints = spectrum.length;\n    const maxima = new Float64Array(numberPoints);\n    const minima = new Float64Array(numberPoints);\n    const baseline = new Float64Array(numberPoints);\n    // windowM 4 percent of spectrum length\n    // windowS 8 percent of spectrum length\n    const { windowM = Math.round(numberPoints * 0.04), windowS = Math.round(numberPoints * 0.08), } = options;\n    // fi(1) in original paper\n    for (let i = 0; i < spectrum.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, spectrum.length);\n        minima[i] = xMinValue(spectrum, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    // fi in original paper\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, minima.length);\n        maxima[i] = xMaxValue(minima, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowS);\n        const windowRight = Math.min(i + windowS + 1, maxima.length);\n        baseline[i] = xMean(maxima.subarray(windowLeft, windowRight));\n    }\n    return baseline;\n}\n//# sourceMappingURL=rollingBall.js.map","import { rollingBall } from 'ml-rolling-ball-baseline';\n\n/**\n * Rolling ball baseline correction algorithm.\n * From the abstract of (1):\n * \"This algorithm behaves equivalently to traditional polynomial backgrounds in simple spectra,\n * [...] and is considerably more robust for multiple overlapping peaks, rapidly varying background [...]\n *\n * The baseline is the trace one gets by rolling a ball below a spectrum. Algorithm has three steps:\n * Finding the minima in each window, find maxima among minima and then smooth over them by averaging.\n *\n * Algorithm described in (1), but in the implementation here the window width does not change.\n *\n * Reference:\n * (1) Kneen, M. A.; Annegarn, H. J.\n *     Algorithm for Fitting XRF, SEM and PIXE X-Ray Spectra Backgrounds.\n *     Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms 1996, 109–110, 209–213.\n *     https://doi.org/10.1016/0168-583X(95)00908-6.\n * (2) Kristian Hovde Liland, Bjørn-Helge Mevik, Roberto Canteri: baseline.\n *     https://cran.r-project.org/web/packages/baseline/index.html\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {Number} [options.windowM] - width of local window for minimization/maximization, defaults to 4% of the spectrum length\n * @param {Number} [options.windowS] - width of local window for smoothing, defaults to 8% of the specturm length\n * @returns {BaselineOutput}\n */\nexport function rollingBallBaseline(ys, options = {}) {\n  const baseline = rollingBall(ys, options);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","import { xRollingMedian } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingMedianBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = { ...defaults, ...options };\n  let baseline = xRollingMedian(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","//@ts-expect-error no type definition for baselines\nimport { airPLSBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function airPLSBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=airPLSBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { iterativePolynomialBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function iterativePolynomialBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=iterativePolynomialBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingAverageBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingAverageBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingAverageBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingBallBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingBallBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingBallBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingMedianBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingMedianBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingMedianBaseline.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Apply Savitzky Golay algorithm\n * @param [ys] Array of y values\n * @param [xs] Array of X or deltaX\n * @return  Array containing the new ys (same length)\n */\nexport function sgg(ys, xs, options = {}) {\n    const { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (typeof xs === 'undefined') {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const ans = new Float64Array(np);\n    const weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = xs ** derivative;\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        const wg1 = weights[half - i - 1];\n        const wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    const wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return (hs / count) ** derivative;\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else if (k === 0 && s === 0) {\n        Grampoly = 1;\n    }\n    else {\n        Grampoly = 0;\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * @private\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\n */\nfunction fullWeights(m, n, s) {\n    const weights = new Array(m);\n    const np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the first derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function firstDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 1 }) } };\n}\n//# sourceMappingURL=firstDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the second derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function secondDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 2 }) } };\n}\n//# sourceMappingURL=secondDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the third derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function thirdDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 3 }) } };\n}\n//# sourceMappingURL=thirdDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Apply the Savitzky Golay Generalized Filter\n * @param data\n * @param options\n */\nexport function savitzkyGolay(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, options) } };\n}\n//# sourceMappingURL=savitzkyGolay.js.map","import { xyEnsureGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function ensureGrowing(data) {\n    return { data: xyEnsureGrowingX(data) };\n}\n//# sourceMappingURL=ensureGrowing.js.map","import { xyGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function reverseIfNeeded(data) {\n    return { data: xyGrowingX(data) };\n}\n//# sourceMappingURL=reverseIfNeeded.js.map","import { xyEquallySpaced } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function equallySpaced(data, options = {}) {\n    return { data: xyEquallySpaced(data, options) };\n}\n//# sourceMappingURL=equallySpaced.js.map","import { xyFilterX } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function filterX(data, options = {}) {\n    return {\n        data: xyFilterX(data, options),\n    };\n}\n//# sourceMappingURL=filterX.js.map","import { xAdd, xMaxValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMaxX(data, options = {}) {\n    const { max = 1 } = options;\n    const existingMax = xMaxValue(data.x);\n    if (existingMax === max) {\n        return { data };\n    }\n    return {\n        data: {\n            x: xAdd(data.x, max - existingMax),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=setMaxX.js.map","import { xAdd, xMinValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMinX(data, options = {}) {\n    const { min = 0 } = options;\n    const existingMin = xMinValue(data.x);\n    if (existingMin === min) {\n        return { data };\n    }\n    return {\n        data: {\n            x: xAdd(data.x, min - existingMin),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=setMinX.js.map","/**\n * Correction of the x and y coordinates using a quadratic optimizations with the peak and its 3 closest neighbors to determine the true x,y values of the peak.\n * This process is done in place and is very fast.\n * @param data\n * @param peaks\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else if (y[currentIndex + 1] >= y[currentIndex] &&\n            y[currentIndex + 1] >= y[currentIndex + 2]) {\n            currentIndex++;\n        }\n        else if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n            y[currentIndex - 2] >= y[currentIndex - 1]) {\n            currentIndex -= 2;\n        }\n        else if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n            y[currentIndex + 2] >= y[currentIndex + 3]) {\n            currentIndex += 2;\n        }\n        // interpolation to a sin() function\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            const alpha = 20 * Math.log10(y[currentIndex - 1]);\n            const beta = 20 * Math.log10(y[currentIndex]);\n            const gamma = 20 * Math.log10(y[currentIndex + 1]);\n            const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            const xCurrent = x[currentIndex];\n            const xPrevious = x[currentIndex - 1];\n            peak.x = xCurrent + (xCurrent - xPrevious) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotonic, xMinMaxValues, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { optimizeTop } from \"./utils/optimizeTop.js\";\n/**\n * Global spectra deconvolution\n * @param  data - Object data with x and y arrays. Values in x has to be growing\n * @param options\n * @param {number} [options.broadRatio = 0.00] - If `broadRatio` is higher than 0, then all the peaks which second derivative\n * smaller than `broadRatio * maxAbsSecondDerivative` will be marked with the soft mask equal to true.\n */\nexport function gsd(data, options = {}) {\n    let { noiseLevel } = options;\n    const { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, smoothY = false, maxCriteria = true, minMaxRatio = 0.00025, realTopDetection = false, } = options;\n    const { x } = data;\n    let { y } = data;\n    if (xIsMonotonic(x) !== 1) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    //rescale;\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    const equallySpaced = xIsEquallySpaced(x);\n    if (noiseLevel === undefined) {\n        if (equallySpaced) {\n            const noiseInfo = xNoiseStandardDeviation(y);\n            if (maxCriteria) {\n                noiseLevel = noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n            else {\n                noiseLevel = -noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n        }\n        else {\n            noiseLevel = 0;\n        }\n    }\n    else if (!maxCriteria) {\n        noiseLevel *= -1;\n    }\n    if (!maxCriteria) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] *= -1;\n        }\n    }\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    const xValue = equallySpaced ? x[1] - x[0] : x;\n    const yData = smoothY\n        ? sgg(y, xValue, {\n            ...sgOptions,\n            derivative: 0,\n        })\n        : y;\n    const dY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 1,\n    });\n    const ddY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 2,\n    });\n    const { min: minY, max: maxY } = xMinMaxValues(yData);\n    if (minY > maxY || minY === maxY)\n        return [];\n    const yThreshold = minY + (maxY - minY) * minMaxRatio;\n    const dX = x[1] - x[0];\n    let lastMax = null;\n    let lastMin = null;\n    const minddY = [];\n    const intervalL = [];\n    const intervalR = [];\n    // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n    for (let i = 1; i < yData.length - 1; ++i) {\n        if ((dY[i] < dY[i - 1] && dY[i] <= dY[i + 1]) ||\n            (dY[i] <= dY[i - 1] && dY[i] < dY[i + 1])) {\n            lastMin = {\n                x: x[i],\n                index: i,\n            };\n            if (dX > 0 && lastMax !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Maximum in first derivative\n        if ((dY[i] >= dY[i - 1] && dY[i] > dY[i + 1]) ||\n            (dY[i] > dY[i - 1] && dY[i] >= dY[i + 1])) {\n            lastMax = {\n                x: x[i],\n                index: i,\n            };\n            if (dX < 0 && lastMin !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    let lastK = -1;\n    const peaks = [];\n    for (const minddYIndex of minddY) {\n        const deltaX = x[minddYIndex];\n        let possible = -1;\n        let k = lastK + 1;\n        let minDistance = Number.POSITIVE_INFINITY;\n        let currentDistance = 0;\n        while (possible === -1 && k < intervalL.length) {\n            currentDistance = Math.abs(deltaX - (intervalL[k].x + intervalR[k].x) / 2);\n            if (currentDistance < (intervalR[k].x - intervalL[k].x) / 2) {\n                possible = k;\n                lastK = k;\n            }\n            ++k;\n            // Not getting closer?\n            if (currentDistance >= minDistance) {\n                break;\n            }\n            minDistance = currentDistance;\n        }\n        if (possible !== -1) {\n            if (yData[minddYIndex] > yThreshold) {\n                const width = Math.abs(intervalR[possible].x - intervalL[possible].x);\n                peaks.push({\n                    id: crypto.randomUUID(),\n                    x: deltaX,\n                    y: yData[minddYIndex],\n                    width,\n                    index: minddYIndex,\n                    ddY: ddY[minddYIndex],\n                    inflectionPoints: {\n                        from: intervalL[possible],\n                        to: intervalR[possible],\n                    },\n                });\n            }\n        }\n    }\n    if (realTopDetection) {\n        optimizeTop({ x, y: yData }, peaks);\n    }\n    peaks.forEach((peak) => {\n        if (!maxCriteria) {\n            peak.y *= -1;\n            peak.ddY = peak.ddY * -1;\n        }\n    });\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\n//# sourceMappingURL=gsd.js.map","export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_THREE = Math.sqrt(3);\nexport const ROOT_2LN2 = Math.sqrt(2 * Math.LN2);\nexport const ROOT_2LN2_MINUS_ONE = Math.sqrt(2 * Math.LN2) - 1;\n//# sourceMappingURL=constants.js.map","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\nexport default function erfinv(x) {\n    let a = 0.147;\n    if (x === 0)\n        return 0;\n    let ln1MinusXSqrd = Math.log(1 - x * x);\n    let lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    let firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    let secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { ROOT_2LN2, GAUSSIAN_EXP_FACTOR, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport erfinv from '../../../util/erfinv';\nexport class Gaussian {\n    constructor(options = {}) {\n        const { fwhm = 500, sd } = options;\n        this.fwhm = sd ? gaussianWidthToFWHM(2 * sd) : fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fct(x) {\n        return gaussianFct(x, this.fwhm);\n    }\n    getArea(height = calculateGaussianHeight({ fwhm: this.fwhm })) {\n        return getGaussianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getGaussianFactor(area);\n    }\n    getData(options = {}) {\n        return getGaussianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateGaussianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport function calculateGaussianHeight(options) {\n    let { fwhm = 500, area = 1, sd } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (2 * area) / ROOT_PI_OVER_LN2 / fwhm;\n}\n/**\n * Calculate the height of the gaussian function of a specific width (fwhm) at a speicifc\n * x position (the gaussian is centered on x=0)\n * @param x\n * @param fwhm\n * @returns y\n */\nexport function gaussianFct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n}\nexport function gaussianWidthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\nexport function gaussianFwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\nexport function getGaussianArea(options) {\n    let { fwhm = 500, sd, height = 1 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\nexport function getGaussianFactor(area = 0.9999) {\n    return Math.sqrt(2) * erfinv(area);\n}\nexport function getGaussianData(shape = {}, options = {}) {\n    let { fwhm = 500, sd } = shape;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    let { length, factor = getGaussianFactor(), height = calculateGaussianHeight({ fwhm }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = gaussianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","import { ROOT_THREE } from '../../../util/constants';\nexport class Lorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianFct(x, this.fwhm);\n    }\n    getArea(height = 1) {\n        return getLorentzianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const calculateLorentzianHeight = ({ fwhm = 1, area = 1 }) => {\n    return (2 * area) / Math.PI / fwhm;\n};\nexport const getLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1 } = options;\n    return (height * Math.PI * fwhm) / 2;\n};\nexport const lorentzianFct = (x, fwhm) => {\n    return fwhm ** 2 / (4 * x ** 2 + fwhm ** 2);\n};\nexport const lorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const lorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\n};\nexport const getLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500 } = shape;\n    let { length, factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = lorentzianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=Lorentzian.js.map","import { calculateLorentzianHeight, getLorentzianFactor, lorentzianFwhmToWidth, lorentzianWidthToFWHM, } from '../lorentzian/Lorentzian';\nexport class LorentzianDispersive {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianDispersiveFct(x, this.fwhm);\n    }\n    //eslint-disable-next-line\n    getArea(_height) {\n        return 0;\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianDispersiveData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const lorentzianDispersiveFct = (x, fwhm) => {\n    return (2 * fwhm * x) / (4 * x ** 2 + fwhm ** 2);\n};\nexport const getLorentzianDispersiveData = (shape = {}, options = {}) => {\n    let { fwhm = 500 } = shape;\n    let { length, factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = lorentzianDispersiveFct(i - center, fwhm) * height;\n        data[length - 1 - i] = -data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=LorentzianDispersive.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport { gaussianFct, getGaussianFactor } from '../gaussian/Gaussian';\nimport { lorentzianFct, getLorentzianFactor } from '../lorentzian/Lorentzian';\nexport class PseudoVoigt {\n    constructor(options = {}) {\n        const { fwhm = 500, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this.fwhm, this.mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this.fwhm, height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this.fwhm,\n            mu: this.mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({ fwhm: this.fwhm, mu: this.mu, area });\n    }\n    getParameters() {\n        return ['fwhm', 'mu'];\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    let { fwhm = 1, mu = 0.5, area = 1 } = options;\n    return (2 * area) / (fwhm * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI));\n};\nexport const pseudoVoigtFct = (x, fwhm, mu) => {\n    return (1 - mu) * lorentzianFct(x, fwhm) + mu * gaussianFct(x, fwhm);\n};\nexport const pseudoVoigtWidthToFWHM = (width, mu = 0.5) => {\n    return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const pseudoVoigtFwhmToWidth = (fwhm, mu = 0.5) => {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const getPseudoVoigtArea = (options) => {\n    const { fwhm = 500, height = 1, mu = 0.5 } = options;\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\nexport const getPseudoVoigtFactor = (area = 0.9999, mu = 0.5) => {\n    return mu < 1 ? getLorentzianFactor(area) : getGaussianFactor(area);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    let { fwhm = 500, mu = 0.5 } = shape;\n    let { length, factor = getPseudoVoigtFactor(0.999, mu), height = calculatePseudoVoigtHeight({ fwhm, mu, area: 1 }), } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { ROOT_THREE } from '../../../util/constants';\n/**\n * This shape is a linear combination of rational function (n|n+2), for n = 0 (lorentzian function) and n = 2\n * the parameter that combines those two functions is `gamma` and it is called the kurtosis parameter, it is an\n * implementation of generalized lorentzian shape published by Stanislav Sykora in the SMASH 2010. DOI:10.3247/SL3nmr10.006\n * @link http://www.ebyte.it/stan/Talk_ML_UserMeeting_SMASH_2010_GeneralizedLorentzian.html\n */\nexport class GeneralizedLorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500, gamma = 0.5 } = options;\n        this.fwhm = fwhm;\n        this.gamma = gamma;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return generalizedLorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return generalizedLorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return generalizedLorentzianFct(x, this.fwhm, this.gamma);\n    }\n    getArea(height = 1) {\n        return getGeneralizedLorentzianArea({\n            fwhm: this.fwhm,\n            height,\n            gamma: this.gamma,\n        });\n    }\n    getFactor(area) {\n        return getGeneralizedLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getGeneralizedLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        const { gamma, fwhm } = this;\n        return calculateGeneralizedLorentzianHeight({ fwhm, area, gamma });\n    }\n    getParameters() {\n        return ['fwhm', 'gamma'];\n    }\n}\nexport const calculateGeneralizedLorentzianHeight = ({ fwhm = 1, gamma = 1, area = 1, }) => {\n    return (area / fwhm / (3.14159 - 0.420894 * gamma)) * 2;\n};\n/**\n * expression of integral generated by Mathematica of the function\n */\nexport const getGeneralizedLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1, gamma = 1 } = options;\n    return (height * fwhm * (3.14159 - 0.420894 * gamma)) / 2;\n};\nexport const generalizedLorentzianFct = (x, fwhm, gamma) => {\n    const u = ((2 * x) / fwhm) ** 2;\n    return (1 - gamma) / (1 + u) + (gamma * (1 + u / 2)) / (1 + u + u ** 2);\n};\nexport const generalizedLorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const generalizedLorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getGeneralizedLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\n};\nexport const getGeneralizedLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500, gamma = 1 } = shape;\n    let { length, factor = getGeneralizedLorentzianFactor(), height = calculateGeneralizedLorentzianHeight({ fwhm, area: 1, gamma }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = generalizedLorentzianFct(i - center, fwhm, gamma) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=GeneralizedLorentzian.js.map","import { Gaussian } from './gaussian/Gaussian';\nimport { GeneralizedLorentzian } from './generalizedLorentzian/GeneralizedLorentzian';\nimport { Lorentzian } from './lorentzian/Lorentzian';\nimport { LorentzianDispersive } from './lorentzianDispersive/LorentzianDispersive';\nimport { PseudoVoigt } from './pseudoVoigt/PseudoVoigt';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape1D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shape);\n        case 'lorentzian':\n            return new Lorentzian(shape);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shape);\n        case 'lorentzianDispersive':\n            return new LorentzianDispersive(shape);\n        case 'generalizedLorentzian':\n            return new GeneralizedLorentzian(shape);\n        default: {\n            throw Error(`Unknown distribution ${kind}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","/**\n * This function returns the sumOfShapes function\n * This function gives sumOfShapes access to the peak list and the associated data\n * @param internalPeaks\n */\nexport function getSumOfShapes(internalPeaks) {\n    return function sumOfShapes(parameters) {\n        return (x) => {\n            let totalY = 0;\n            for (const peak of internalPeaks) {\n                const peakX = parameters[peak.fromIndex];\n                const y = parameters[peak.fromIndex + 1];\n                for (let i = 2; i < parameters.length; i++) {\n                    const shapeFctKey = peak.parameters[i];\n                    peak.shapeFct[shapeFctKey] = parameters[peak.fromIndex + i];\n                }\n                totalY += y * peak.shapeFct.fct(x - peakX);\n            }\n            return totalY;\n        };\n    };\n}\n//# sourceMappingURL=getSumOfShapes.js.map","/**\n * Asserts that value is truthy.\n *\n * @param value - Value to check.\n * @param message - Optional error message to throw.\n */\nexport function assert(value, message) {\n    if (!value) {\n        throw new Error(message ? message : 'unreachable');\n    }\n}\n//# sourceMappingURL=assert.js.map","export const DefaultParameters = {\n    x: {\n        init: (peak) => peak.x,\n        min: (peak, peakShape) => peak.x - peakShape.fwhm * 2,\n        max: (peak, peakShape) => peak.x + peakShape.fwhm * 2,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    y: {\n        init: (peak) => peak.y,\n        min: (peak) => (peak.y < 0 ? -1.1 : 0),\n        max: (peak) => (peak.y < 0 ? 0 : 1.1),\n        gradientDifference: () => 1e-3,\n    },\n    fwhm: {\n        init: (peak, peakShape) => peakShape.fwhm,\n        min: (peak, peakShape) => peakShape.fwhm * 0.25,\n        max: (peak, peakShape) => peakShape.fwhm * 4,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    mu: {\n        init: (peak, peakShape) => peakShape.mu,\n        min: () => 0,\n        max: () => 1,\n        gradientDifference: () => 0.01,\n    },\n    gamma: {\n        init: (peak, peakShape) => peakShape.gamma || 0.5,\n        min: () => -1,\n        max: () => 2,\n        gradientDifference: () => 0.01,\n    },\n};\n//# sourceMappingURL=DefaultParameters.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { assert } from \"../assert.js\";\nimport { DefaultParameters } from \"./DefaultParameters.js\";\nconst properties = ['init', 'min', 'max', 'gradientDifference'];\n/**\n * Return an array of internalPeaks that contains the exact init, min, max values based on the options\n * @param peaks\n * @param minMaxY\n * @param options\n * @returns\n */\nexport function getInternalPeaks(peaks, minMaxY, options = {}) {\n    let index = 0;\n    const internalPeaks = [];\n    const { baseline: shiftValue = minMaxY.min } = options;\n    const normalizedPeaks = peaks.map((peak) => {\n        return {\n            ...peak,\n            y: (peak.y - shiftValue) / minMaxY.range,\n        };\n    });\n    for (const peak of normalizedPeaks) {\n        const { id, shape = options.shape ? options.shape : { kind: 'gaussian' } } = peak;\n        const shapeFct = getShape1D(shape);\n        const parameters = ['x', 'y', ...shapeFct.getParameters()];\n        const propertiesValues = {\n            min: [],\n            max: [],\n            init: [],\n            gradientDifference: [],\n        };\n        for (const parameter of parameters) {\n            for (const property of properties) {\n                // check if the property is specified in the peak\n                let propertyValue = peak?.parameters?.[parameter]?.[property];\n                if (propertyValue) {\n                    propertyValue = getNormalizedValue(propertyValue, parameter, property, minMaxY, options.baseline);\n                    propertiesValues[property].push(propertyValue);\n                    continue;\n                }\n                // check if there are some global option, it could be a number or a callback\n                let generalParameterValue = options?.parameters?.[parameter]?.[property];\n                if (generalParameterValue) {\n                    if (typeof generalParameterValue === 'number') {\n                        generalParameterValue = getNormalizedValue(generalParameterValue, parameter, property, minMaxY, options.baseline);\n                        propertiesValues[property].push(generalParameterValue);\n                        continue;\n                    }\n                    else {\n                        let value = generalParameterValue(peak);\n                        value = getNormalizedValue(value, parameter, property, minMaxY, options.baseline);\n                        propertiesValues[property].push(value);\n                        continue;\n                    }\n                }\n                // we just need to take the default parameters\n                assert(DefaultParameters[parameter], `No default parameter for ${parameter}`);\n                const defaultParameterValues = DefaultParameters[parameter][property];\n                //@ts-expect-error should never happen\n                propertiesValues[property].push(defaultParameterValues(peak, shapeFct));\n            }\n        }\n        const fromIndex = index;\n        const toIndex = fromIndex + parameters.length - 1;\n        index += toIndex - fromIndex + 1;\n        internalPeaks.push({\n            id,\n            shape,\n            shapeFct,\n            parameters,\n            propertiesValues,\n            fromIndex,\n            toIndex,\n        });\n    }\n    return internalPeaks;\n}\nfunction getNormalizedValue(value, parameter, property, minMaxY, baseline) {\n    if (parameter === 'y') {\n        if (property === 'gradientDifference') {\n            return value;\n        }\n        else {\n            return baseline !== undefined\n                ? (value - baseline) / minMaxY.range\n                : (value - minMaxY.min) / minMaxY.range;\n        }\n    }\n    return value;\n}\n//# sourceMappingURL=getInternalPeaks.js.map","import { isAnyArray } from 'is-any-array';\nexport default function checkOptions(data, options) {\n    const { timeout, initialValues, weights = 1, damping = 1e-2, dampingStepUp = 11, dampingStepDown = 9, maxIterations = 100, errorTolerance = 1e-7, centralDifference = false, gradientDifference = 10e-2, improvementThreshold = 1e-3, } = options;\n    let { minValues, maxValues } = options;\n    if (damping <= 0) {\n        throw new Error('The damping option must be a positive number');\n    }\n    else if (!data.x || !data.y) {\n        throw new Error('The data parameter must have x and y elements');\n    }\n    else if (!isAnyArray(data.x) ||\n        data.x.length < 2 ||\n        !isAnyArray(data.y) ||\n        data.y.length < 2) {\n        throw new Error('The data parameter elements must be an array with more than 2 points');\n    }\n    else if (data.x.length !== data.y.length) {\n        throw new Error('The data parameter elements must have the same size');\n    }\n    if (!(initialValues && initialValues.length > 0)) {\n        throw new Error('The initialValues option is mandatory and must be an array');\n    }\n    const parameters = Array.from(initialValues);\n    const parLen = parameters.length;\n    maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n    minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n    if (maxValues.length !== minValues.length) {\n        throw new Error('minValues and maxValues must be the same size');\n    }\n    const gradientDifferenceArray = getGradientDifferenceArray(gradientDifference, parameters);\n    const filler = getFiller(weights, data.x.length);\n    const checkTimeout = getCheckTimeout(timeout);\n    const weightSquare = Array.from({ length: data.x.length }, (_, i) => filler(i));\n    return {\n        checkTimeout,\n        minValues,\n        maxValues,\n        parameters,\n        weightSquare,\n        damping,\n        dampingStepUp,\n        dampingStepDown,\n        maxIterations,\n        errorTolerance,\n        centralDifference,\n        gradientDifference: gradientDifferenceArray,\n        improvementThreshold,\n    };\n}\nfunction getGradientDifferenceArray(gradientDifference, parameters) {\n    if (typeof gradientDifference === 'number') {\n        return new Array(parameters.length).fill(gradientDifference);\n    }\n    else if (isAnyArray(gradientDifference)) {\n        const parLen = parameters.length;\n        if (gradientDifference.length !== parLen) {\n            return new Array(parLen).fill(gradientDifference[0]);\n        }\n        return Array.from(gradientDifference);\n    }\n    throw new Error('gradientDifference should be a number or array with length equal to the number of parameters');\n}\nfunction getFiller(weights, dataLength) {\n    if (typeof weights === 'number') {\n        const value = 1 / weights ** 2;\n        return () => value;\n    }\n    else if (isAnyArray(weights)) {\n        if (weights.length < dataLength) {\n            const value = 1 / weights[0] ** 2;\n            return () => value;\n        }\n        return (i) => 1 / weights[i] ** 2;\n    }\n    throw new Error('weights should be a number or array with length equal to the number of data points');\n}\nfunction getCheckTimeout(timeout) {\n    if (timeout !== undefined) {\n        if (typeof timeout !== 'number') {\n            throw new Error('timeout should be a number');\n        }\n        const endTime = Date.now() + timeout * 1000;\n        return () => Date.now() > endTime;\n    }\n    else {\n        return () => false;\n    }\n}\n//# sourceMappingURL=check_options.js.map","/**\n * the sum of the weighted squares of the errors (or weighted residuals) between the data.y\n * and the curve-fit function.\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameters - Array of current parameter values\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weightSquare - Square of weights (must be same length as data.x)\n */\nexport default function errorCalculation(data, parameters, parameterizedFunction, weightSquare) {\n    let error = 0;\n    const func = parameterizedFunction(parameters);\n    for (let i = 0; i < data.x.length; i++) {\n        error += (data.y[i] - func(data.x[i])) ** 2 / weightSquare[i];\n    }\n    return error;\n}\n//# sourceMappingURL=error_calculation.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @param data Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n * @param params - Array of previous parameter values\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param paramFunction - The parameters and returns a function with the independent variable as a parameter\n */\nexport default function gradientFunction(data, evaluatedData, params, gradientDifference, paramFunction, centralDifference) {\n    const nbParams = params.length;\n    const nbPoints = data.x.length;\n    const ans = Matrix.zeros(nbParams, nbPoints);\n    let rowIndex = 0;\n    for (let param = 0; param < nbParams; param++) {\n        if (gradientDifference[param] === 0)\n            continue;\n        let delta = gradientDifference[param];\n        let auxParams = params.slice();\n        auxParams[param] += delta;\n        const funcParam = paramFunction(auxParams);\n        if (!centralDifference) {\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (evaluatedData[point] - funcParam(data.x[point])) / delta);\n            }\n        }\n        else {\n            auxParams = params.slice();\n            auxParams[param] -= delta;\n            delta *= 2;\n            const funcParam2 = paramFunction(auxParams);\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta);\n            }\n        }\n        rowIndex++;\n    }\n    return ans;\n}\n//# sourceMappingURL=gradient_function.js.map","import { inverse, Matrix } from 'ml-matrix';\nimport gradientFunction from \"./gradient_function.js\";\n/**\n * Matrix function over the samples\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n */\nfunction matrixFunction(data, evaluatedData) {\n    const m = data.x.length;\n    const ans = new Matrix(m, 1);\n    for (let point = 0; point < m; point++) {\n        ans.set(point, 0, data.y[point] - evaluatedData[point]);\n    }\n    return ans;\n}\n/**\n * Iteration for Levenberg-Marquardt\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param params - Array of previous parameter values\n * @param damping - Levenberg-Marquardt parameter\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weights - scale the gradient and residual error by weights\n */\nexport default function step(data, params, damping, gradientDifference, parameterizedFunction, centralDifference, weights) {\n    const identity = Matrix.eye(params.length, params.length, damping);\n    const func = parameterizedFunction(params);\n    const evaluatedData = new Float64Array(data.x.length);\n    for (let i = 0; i < data.x.length; i++) {\n        evaluatedData[i] = func(data.x[i]);\n    }\n    const gradientFunc = gradientFunction(data, evaluatedData, params, gradientDifference, parameterizedFunction, centralDifference);\n    const residualError = matrixFunction(data, evaluatedData);\n    const inverseMatrix = inverse(identity.add(gradientFunc.mmul(gradientFunc.transpose().scale('row', { scale: weights }))));\n    const jacobianWeightResidualError = gradientFunc.mmul(residualError.scale('row', { scale: weights }));\n    const perturbations = inverseMatrix.mmul(jacobianWeightResidualError);\n    return {\n        perturbations,\n        jacobianWeightResidualError,\n    };\n}\n//# sourceMappingURL=step.js.map","import checkOptions from \"./check_options.js\";\nimport errorCalculation from \"./error_calculation.js\";\nimport step from \"./step.js\";\n/**\n * Curve fitting algorithm\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameterizedFunction - Takes an array of parameters and returns a function with the independent variable as its sole argument\n * @param options - Options object\n */\nexport function levenbergMarquardt(data, parameterizedFunction, options) {\n    const checkedOptions = checkOptions(data, options);\n    const { checkTimeout, minValues, maxValues, parameters, weightSquare, dampingStepUp, dampingStepDown, maxIterations, errorTolerance, centralDifference, gradientDifference, improvementThreshold, } = checkedOptions;\n    let damping = checkedOptions.damping;\n    let error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n    let optimalError = error;\n    let optimalParameters = parameters.slice();\n    let converged = error <= errorTolerance;\n    let iteration = 0;\n    for (; iteration < maxIterations && !converged; iteration++) {\n        const previousError = error;\n        const { perturbations, jacobianWeightResidualError } = step(data, parameters, damping, gradientDifference, parameterizedFunction, centralDifference, weightSquare);\n        for (let k = 0; k < parameters.length; k++) {\n            parameters[k] = Math.min(Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)), maxValues[k]);\n        }\n        error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n        if (isNaN(error))\n            break;\n        if (error < optimalError - errorTolerance) {\n            optimalError = error;\n            optimalParameters = parameters.slice();\n        }\n        const improvementMetric = (previousError - error) /\n            perturbations\n                .transpose()\n                .mmul(perturbations.mul(damping).add(jacobianWeightResidualError))\n                .get(0, 0);\n        if (improvementMetric > improvementThreshold) {\n            damping = Math.max(damping / dampingStepDown, 1e-7);\n        }\n        else {\n            damping = Math.min(damping * dampingStepUp, 1e7);\n        }\n        if (checkTimeout()) {\n            throw new Error(`The execution time is over to ${options.timeout} seconds`);\n        }\n        converged = error <= errorTolerance;\n    }\n    return {\n        parameterValues: optimalParameters,\n        parameterError: optimalError,\n        iterations: iteration,\n    };\n}\n//# sourceMappingURL=levenberg_marquardt.js.map","/**\n * Preparata, F. P., & Shamos, M. I. (2012). Computational geometry: an introduction. Springer Science & Business Media.\n * @param {Array} x - The array with x coordinates of the points.\n * @param {Array} y - The array with y coordinates of the points.\n * @return {Array} The indices of the points of anticlockwise lower convex hull\n * @private\n */\nexport default function antiLowerConvexHull(x, y) {\n  if (x.length !== y.length) {\n    throw new RangeError('X and Y vectors has different dimensions');\n  }\n\n  const nbPoints = x.length - 1;\n  if (nbPoints === 0) return [0];\n  if (nbPoints === 1) return [0, 1];\n\n  let currentPoint = 0;\n  let result = new Array(x.length).fill(true);\n  while (true) {\n    const a = currentPoint;\n    const b = moveOn(currentPoint, nbPoints, result);\n    const c = moveOn(moveOn(currentPoint, nbPoints, result), nbPoints, result);\n\n    const det =\n      x[c] * (y[a] - y[b]) + x[a] * (y[b] - y[c]) + x[b] * (y[c] - y[a]);\n\n    const leftTurn = det >= 0;\n\n    if (leftTurn) {\n      currentPoint = b;\n    } else {\n      result[b] = false;\n      currentPoint = moveBack(currentPoint, nbPoints, result);\n    }\n    if (c === nbPoints) break;\n  }\n\n  return result\n    .map((item, index) => (item === false ? false : index))\n    .filter((item) => item !== false);\n}\n\n/**\n * @param {number} currentPoint - The index of the current point to make the move\n * @param {number} nbPoints - The total number of points in the array\n * @param {Array} vector - The array with the points\n * @return {number} the index of the point after the move\n * @private\n */\n\nfunction moveBack(currentPoint, nbPoints, vector) {\n  let counter = currentPoint - 1;\n  while (vector[counter] === false) counter--;\n  return currentPoint === 0 ? nbPoints : counter;\n}\n\nfunction moveOn(currentPoint, nbPoints, vector) {\n  let counter = currentPoint + 1;\n  while (vector[counter] === false) counter++;\n  return currentPoint === nbPoints ? 0 : counter;\n}\n","import { xNorm, xMaxValue, xMinValue } from 'ml-spectra-processing';\n\nimport antiLowerConvexHull from './util/antiLowerConvexHull';\n\n/**\n * Performs a global optimization of required parameters\n * It will return an object containing:\n * - `minFunctionValue`: The minimum value found for the objetive function\n * - `optima`: Array of Array of values for all the variables where the function reach its minimum value\n * - `iterations`: Number of iterations performed in the process\n * - `finalState`: Internal state allowing to continue optimization (initialState)\n * @param {function} objectiveFunction Function to evaluate. It should accept an array of variables\n * @param {Array} lowerBoundaries Array containing for each variable the lower boundary\n * @param {Array} upperBoundaries Array containing for each variable the higher boundary\n * @param {Object} [options={}]\n * @param {number} [options.iterations] - Number of iterations.\n * @param {number} [options.epsilon] - Tolerance to choose best current value.\n * @param {number} [options.tolerance] - Minimum tollerance of the function.\n * @param {number} [options.tolerance2] - Minimum tollerance of the function.\n * @param {Object} [options.initialState={}}] - finalState of previous optimization.\n * @return {Object} {finalState, iterations, minFunctionValue}\n * */\n\nexport default function direct(\n  objectiveFunction,\n  lowerBoundaries,\n  upperBoundaries,\n  options = {},\n) {\n  const {\n    iterations = 50,\n    epsilon = 1e-4,\n    tolerance = 1e-16,\n    tolerance2 = 1e-12,\n    initialState = {},\n  } = options;\n\n  if (\n    objectiveFunction === undefined ||\n    lowerBoundaries === undefined ||\n    upperBoundaries === undefined\n  ) {\n    throw new RangeError('There is something undefined');\n  }\n\n  lowerBoundaries = new Float64Array(lowerBoundaries);\n  upperBoundaries = new Float64Array(upperBoundaries);\n\n  if (lowerBoundaries.length !== upperBoundaries.length) {\n    throw new Error(\n      'Lower bounds and Upper bounds for x are not of the same length',\n    );\n  }\n\n  //-------------------------------------------------------------------------\n  //                        STEP 1. Initialization\n  //-------------------------------------------------------------------------\n  let n = lowerBoundaries.length;\n  let diffBorders = upperBoundaries.map((x, i) => x - lowerBoundaries[i]);\n\n  let {\n    numberOfRectangles = 0,\n    totalIterations = 0,\n    unitaryCoordinates = [new Float64Array(n).fill(0.5)],\n    middlePoint = new Float64Array(n).map((value, index) => {\n      return (\n        lowerBoundaries[index] +\n        unitaryCoordinates[0][index] * diffBorders[index]\n      );\n    }),\n    bestCurrentValue = objectiveFunction(middlePoint),\n    fCalls = 1,\n    smallerDistance = 0,\n    edgeSizes = [new Float64Array(n).fill(0.5)],\n    diagonalDistances = [Math.sqrt(n * 0.5 ** 2)],\n    functionValues = [bestCurrentValue],\n    differentDistances = diagonalDistances,\n    smallerValuesByDistance = [bestCurrentValue],\n    choiceLimit = undefined,\n  } = initialState;\n  if (\n    initialState.originalCoordinates &&\n    initialState.originalCoordinates.length > 0\n  ) {\n    bestCurrentValue = xMinValue(functionValues);\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n    );\n\n    unitaryCoordinates = initialState.originalCoordinates.slice();\n    for (let j = 0; j < unitaryCoordinates.length; j++) {\n      for (let i = 0; i < lowerBoundaries.length; i++) {\n        unitaryCoordinates[j][i] =\n          (unitaryCoordinates[j][i] - lowerBoundaries[i]) / diffBorders[i];\n      }\n    }\n  }\n\n  let iteration = 0;\n  //-------------------------------------------------------------------------\n  //                          Iteration loop\n  //-------------------------------------------------------------------------\n\n  while (iteration < iterations) {\n    //----------------------------------------------------------------------\n    //  STEP 2. Identify the set S of all potentially optimal rectangles\n    //----------------------------------------------------------------------\n\n    let S1 = [];\n    let idx = differentDistances.findIndex(\n      // eslint-disable-next-line no-loop-func\n      (e) => e === diagonalDistances[smallerDistance],\n    );\n    let counter = 0;\n    for (let i = idx; i < differentDistances.length; i++) {\n      for (let f = 0; f < functionValues.length; f++) {\n        if (\n          (functionValues[f] === smallerValuesByDistance[i]) &\n          (diagonalDistances[f] === differentDistances[i])\n        ) {\n          S1[counter++] = f;\n        }\n      }\n    }\n\n    let optimumValuesIndex, S3;\n    if (differentDistances.length - idx > 1) {\n      let a1 = diagonalDistances[smallerDistance];\n      let b1 = functionValues[smallerDistance];\n      let a2 = differentDistances[differentDistances.length - 1];\n      let b2 = smallerValuesByDistance[differentDistances.length - 1];\n      let slope = (b2 - b1) / (a2 - a1);\n      let constant = b1 - slope * a1;\n      let S2 = new Uint32Array(counter);\n      counter = 0;\n      for (let i = 0; i < S2.length; i++) {\n        let j = S1[i];\n        if (\n          functionValues[j] <=\n          slope * diagonalDistances[j] + constant + tolerance2\n        ) {\n          S2[counter++] = j;\n        }\n      }\n\n      let xHull = [];\n      let yHull = [];\n      for (let i = 0; i < counter; i++) {\n        xHull.push(diagonalDistances[S2[i]]);\n        yHull.push(functionValues[S2[i]]);\n      }\n\n      let lowerIndexHull = antiLowerConvexHull(xHull, yHull);\n\n      S3 = [];\n      for (let i = 0; i < lowerIndexHull.length; i++) {\n        S3.push(S2[lowerIndexHull[i]]);\n      }\n    } else {\n      S3 = S1.slice(0, counter);\n    }\n    optimumValuesIndex = S3;\n    //--------------------------------------------------------------\n    // STEPS 3,5: Select any rectangle j in S\n    //--------------------------------------------------------------\n    for (let k = 0; k < optimumValuesIndex.length; k++) {\n      let j = optimumValuesIndex[k];\n      let largerSide = xMaxValue(edgeSizes[j]);\n      let largeSidesIndex = new Uint32Array(edgeSizes[j].length);\n      counter = 0;\n      for (let i = 0; i < edgeSizes[j].length; i++) {\n        if (Math.abs(edgeSizes[j][i] - largerSide) < tolerance) {\n          largeSidesIndex[counter++] = i;\n        }\n      }\n      let delta = (2 * largerSide) / 3;\n      let bestFunctionValues = [];\n      for (let r = 0; r < counter; r++) {\n        let i = largeSidesIndex[r];\n        let firstMiddleCenter = unitaryCoordinates[j].slice();\n        let secondMiddleCenter = unitaryCoordinates[j].slice();\n        firstMiddleCenter[i] += delta;\n        secondMiddleCenter[i] -= delta;\n        let firstMiddleValue = new Float64Array(firstMiddleCenter.length);\n        let secondMiddleValue = new Float64Array(secondMiddleCenter.length);\n        for (let i = 0; i < firstMiddleCenter.length; i++) {\n          firstMiddleValue[i] =\n            lowerBoundaries[i] + firstMiddleCenter[i] * diffBorders[i];\n          secondMiddleValue[i] =\n            lowerBoundaries[i] + secondMiddleCenter[i] * diffBorders[i];\n        }\n        let firstMinValue = objectiveFunction(firstMiddleValue);\n        let secondMinValue = objectiveFunction(secondMiddleValue);\n        fCalls += 2;\n        bestFunctionValues.push({\n          minValue: Math.min(firstMinValue, secondMinValue),\n          index: r,\n        });\n        // [Math.min(firstMinValue, secondMinValue), r];\n        unitaryCoordinates.push(firstMiddleCenter, secondMiddleCenter);\n        functionValues.push(firstMinValue, secondMinValue);\n      }\n\n      let b = bestFunctionValues.sort((a, b) => a.minValue - b.minValue);\n      for (let r = 0; r < counter; r++) {\n        let u = largeSidesIndex[b[r].index];\n        let ix1 = numberOfRectangles + 2 * (b[r].index + 1) - 1;\n        let ix2 = numberOfRectangles + 2 * (b[r].index + 1);\n        edgeSizes[j][u] = delta / 2;\n        edgeSizes[ix1] = edgeSizes[j].slice();\n        edgeSizes[ix2] = edgeSizes[j].slice();\n        diagonalDistances[j] = xNorm(edgeSizes[j]);\n        diagonalDistances[ix1] = diagonalDistances[j];\n        diagonalDistances[ix2] = diagonalDistances[j];\n      }\n      numberOfRectangles += 2 * counter;\n    }\n\n    //--------------------------------------------------------------\n    //                  Update\n    //--------------------------------------------------------------\n\n    bestCurrentValue = xMinValue(functionValues);\n\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n      iteration,\n    );\n\n    differentDistances = Array.from(new Set(diagonalDistances));\n    differentDistances = differentDistances.sort((a, b) => a - b);\n\n    smallerValuesByDistance = [];\n    for (let i = 0; i < differentDistances.length; i++) {\n      let minIndex;\n      let minValue = Number.POSITIVE_INFINITY;\n      for (let k = 0; k < diagonalDistances.length; k++) {\n        if (diagonalDistances[k] === differentDistances[i]) {\n          if (functionValues[k] < minValue) {\n            minValue = functionValues[k];\n            minIndex = k;\n          }\n        }\n      }\n      smallerValuesByDistance.push(functionValues[minIndex]);\n    }\n\n    let currentMin = [];\n    for (let j = 0; j < functionValues.length; j++) {\n      if (functionValues[j] === bestCurrentValue) {\n        let temp = [];\n        for (let i = 0; i < lowerBoundaries.length; i++) {\n          temp.push(\n            lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i],\n          );\n        }\n        currentMin.push(temp);\n      }\n    }\n    iteration += 1;\n  }\n  //--------------------------------------------------------------\n  //                  Saving results\n  //--------------------------------------------------------------\n\n  let result = {};\n  result.minFunctionValue = bestCurrentValue;\n  result.iterations = iteration;\n  let originalCoordinates = [];\n  for (let j = 0; j < numberOfRectangles + 1; j++) {\n    let pair = [];\n    for (let i = 0; i < lowerBoundaries.length; i++) {\n      pair.push(lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i]);\n    }\n    originalCoordinates.push(pair);\n  }\n\n  result.finalState = {\n    numberOfRectangles,\n    totalIterations: (totalIterations += iterations),\n    originalCoordinates,\n    middlePoint,\n    fCalls,\n    smallerDistance,\n    edgeSizes,\n    diagonalDistances,\n    functionValues,\n    differentDistances,\n    smallerValuesByDistance,\n    choiceLimit,\n  };\n\n  let minimizer = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    if (functionValues[i] === bestCurrentValue) {\n      minimizer.push(originalCoordinates[i]);\n    }\n  }\n\n  result.optima = minimizer;\n  return result;\n}\n\nfunction getMinIndex(\n  functionValues,\n  diagonalDistances,\n  choiceLimit,\n  bestCurrentValue,\n) {\n  let item = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    item[i] =\n      Math.abs(functionValues[i] - (bestCurrentValue + choiceLimit)) /\n      diagonalDistances[i];\n  }\n  const min = xMinValue(item);\n  let result = item.findIndex((x) => x === min);\n  return result;\n}\n","import direct from 'ml-direct';\nexport function directOptimization(data, sumOfShapes, options) {\n    const { minValues, maxValues, maxIterations, epsilon, tolerance, tolerance2, initialState, } = options;\n    const objectiveFunction = getObjectiveFunction(data, sumOfShapes);\n    const result = direct(objectiveFunction, \n    // direct internally converts ArrayLike to Float64Array,\n    // so we can safely cast minValues and maxValues to number[]\n    minValues, maxValues, {\n        iterations: maxIterations,\n        epsilon,\n        tolerance,\n        tolerance2,\n        initialState,\n    });\n    const { optima } = result;\n    return {\n        parameterError: result.minFunctionValue,\n        iterations: result.iterations,\n        parameterValues: optima[0],\n    };\n}\nfunction getObjectiveFunction(data, sumOfShapes) {\n    const { x, y } = data;\n    const nbPoints = x.length;\n    return (parameters) => {\n        const fct = sumOfShapes(parameters);\n        let error = 0;\n        for (let i = 0; i < nbPoints; i++) {\n            error += (y[i] - fct(x[i])) ** 2;\n        }\n        return error;\n    };\n}\n//# sourceMappingURL=directOptimization.js.map","import { levenbergMarquardt } from 'ml-levenberg-marquardt';\nimport { directOptimization } from \"./wrappers/directOptimization.js\";\n/** Algorithm to select the method.\n * @param optimizationOptions - Optimization options\n * @returns - The algorithm and optimization options\n */\nexport function selectMethod(optimizationOptions = {}) {\n    const { kind = 'lm', options } = optimizationOptions;\n    switch (kind) {\n        case 'lm':\n        case 'levenbergMarquardt':\n            return {\n                algorithm: levenbergMarquardt,\n                optimizationOptions: {\n                    damping: 1.5,\n                    maxIterations: 100,\n                    errorTolerance: 1e-8,\n                    ...options,\n                },\n            };\n        case 'direct': {\n            return {\n                algorithm: directOptimization,\n                optimizationOptions: {\n                    iterations: 20,\n                    epsilon: 1e-4,\n                    tolerance: 1e-16,\n                    tolerance2: 1e-12,\n                    initialState: {},\n                    ...options,\n                },\n            };\n        }\n        default:\n            throw new Error(`Unknown fitting algorithm`);\n    }\n}\n//# sourceMappingURL=selectMethod.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nimport { getSumOfShapes } from \"./shapes/getSumOfShapes.js\";\nimport { getInternalPeaks } from \"./util/internalPeaks/getInternalPeaks.js\";\nimport { selectMethod } from \"./util/selectMethod.js\";\n/**\n * Fits a set of points to the sum of a set of bell functions.\n *\n * @param data - An object containing the x and y data to be fitted.\n * @param peaks - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Options for optimize\n * @returns - An object with fitting error and the list of optimized parameters { parameters: [ {x, y, width} ], error } if the kind of shape is pseudoVoigt mu parameter is optimized.\n */\nexport function optimize(data, peaks, options = {}) {\n    // rescale data\n    const temp = xMinMaxValues(data.y);\n    const minMaxY = { ...temp, range: temp.max - temp.min };\n    const internalPeaks = getInternalPeaks(peaks, minMaxY, options);\n    // need to rescale what is related to Y\n    const { baseline: shiftValue = minMaxY.min } = options;\n    const normalizedY = new Float64Array(data.y.length);\n    for (let i = 0; i < data.y.length; i++) {\n        normalizedY[i] = (data.y[i] - shiftValue) / minMaxY.range;\n    }\n    const nbParams = internalPeaks[internalPeaks.length - 1].toIndex + 1;\n    const minValues = new Float64Array(nbParams);\n    const maxValues = new Float64Array(nbParams);\n    const initialValues = new Float64Array(nbParams);\n    const gradientDifferences = new Float64Array(nbParams);\n    let index = 0;\n    for (const peak of internalPeaks) {\n        for (let i = 0; i < peak.parameters.length; i++) {\n            minValues[index] = peak.propertiesValues.min[i];\n            maxValues[index] = peak.propertiesValues.max[i];\n            initialValues[index] = peak.propertiesValues.init[i];\n            gradientDifferences[index] = peak.propertiesValues.gradientDifference[i];\n            index++;\n        }\n    }\n    const { algorithm, optimizationOptions } = selectMethod(options.optimization);\n    const sumOfShapes = getSumOfShapes(internalPeaks);\n    const fitted = algorithm({ x: data.x, y: normalizedY }, sumOfShapes, {\n        minValues,\n        maxValues,\n        initialValues,\n        gradientDifference: gradientDifferences,\n        ...optimizationOptions,\n    });\n    const fittedValues = fitted.parameterValues;\n    const newPeaks = [];\n    for (const peak of internalPeaks) {\n        const { id, shape, parameters, fromIndex } = peak;\n        let newPeak = { x: 0, y: 0, shape };\n        if (id) {\n            newPeak = { ...newPeak, id };\n        }\n        newPeak.x = fittedValues[fromIndex];\n        newPeak.y = fittedValues[fromIndex + 1] * minMaxY.range + shiftValue;\n        for (let i = 2; i < parameters.length; i++) {\n            //@ts-expect-error should be fixed once\n            newPeak.shape[parameters[i]] = fittedValues[fromIndex + i];\n        }\n        newPeaks.push(newPeak);\n    }\n    return {\n        error: fitted.parameterError,\n        iterations: fitted.iterations,\n        peaks: newPeaks,\n    };\n}\n//# sourceMappingURL=index.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * add missing property if it does not exist in the peak,\n * if shape exists but fwhm doesn't, it will be calculated from peak.width\n */\nexport function addMissingShape(peaks, options = {}) {\n    const { shape = { kind: 'gaussian' }, output = structuredClone(peaks) } = options;\n    const shapeInstance = getShape1D(shape);\n    return output.map((peak) => {\n        if (hasShape(peak)) {\n            if (!('fwhm' in peak.shape)) {\n                const shapeInstance = getShape1D(peak.shape);\n                peak.shape.fwhm = shapeInstance.widthToFWHM(peak.width);\n            }\n            return peak;\n        }\n        return {\n            ...peak,\n            shape: { fwhm: shapeInstance.widthToFWHM(peak.width), ...shape },\n        };\n    });\n}\nfunction hasShape(peak) {\n    return 'shape' in peak;\n}\n//# sourceMappingURL=addMissingShape.js.map","/**\n * Group peaks based on factor\n * In order to group peaks we only need the x and width value. This means that\n * in the current implementation we don't take into account the asymmetry of peaks\n */\nexport function groupPeaks(peaks, options = {}) {\n    if (peaks && peaks.length === 0)\n        return [];\n    const { factor = 1 } = options;\n    peaks = JSON.parse(JSON.stringify(peaks));\n    peaks.sort((a, b) => a.x - b.x);\n    let previousPeak = peaks[0];\n    let currentGroup = [previousPeak];\n    const groups = [currentGroup];\n    for (let i = 1; i < peaks.length; i++) {\n        const peak = peaks[i];\n        if ((peak.x - previousPeak.x) / ((peak.width + previousPeak.width) / 2) <=\n            factor) {\n            currentGroup.push(peak);\n        }\n        else {\n            currentGroup = [peak];\n            groups.push(currentGroup);\n        }\n        previousPeak = peak;\n    }\n    return groups;\n}\n//# sourceMappingURL=groupPeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { optimize } from 'ml-spectra-fitting';\nimport { xGetFromToIndex } from 'ml-spectra-processing';\nimport { addMissingShape } from \"../utils/addMissingShape.js\";\nimport { groupPeaks } from \"../utils/groupPeaks.js\";\n/**\n * Optimize the position (x), max intensity (y), full width at half maximum (fwhm)\n * and the ratio of gaussian contribution (mu) if it's required. It currently supports three kind of shapes: gaussian, lorentzian and pseudovoigt\n * @param data - An object containing the x and y data to be fitted.\n * @param peakList - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n */\nexport function optimizePeaksWithLogs(data, peakList, options = {}) {\n    const { fromTo = {}, baseline, shape = { kind: 'gaussian' }, groupingFactor = 1, factorLimits = 2, optimization = {\n        kind: 'lm',\n        options: {\n            timeout: 10,\n        },\n    }, } = options;\n    /*\n    The optimization algorithm will take some group of peaks.\n    We can not simply optimize everything because there would be too many variables to optimize\n    and it would be too time consuming.\n  */\n    const groups = groupPeaks(peakList, { factor: groupingFactor });\n    const logs = [];\n    const results = [];\n    groups.forEach((peakGroup) => {\n        const start = Date.now();\n        // In order to make optimization we will add fwhm and shape on all the peaks\n        const peaks = addMissingShape(peakGroup, { shape });\n        const firstPeak = peaks[0];\n        const lastPeak = peaks[peaks.length - 1];\n        const { from = firstPeak.x - firstPeak.width * factorLimits, to = lastPeak.x + lastPeak.width * factorLimits, } = fromTo;\n        const { fromIndex, toIndex } = xGetFromToIndex(data.x, { from, to });\n        const x = data.x instanceof Float64Array\n            ? data.x.subarray(fromIndex, toIndex)\n            : data.x.slice(fromIndex, toIndex);\n        const y = data.y instanceof Float64Array\n            ? data.y.subarray(fromIndex, toIndex)\n            : data.y.slice(fromIndex, toIndex);\n        const log = {\n            range: { from, to },\n            parameters: optimization,\n            groupSize: peakGroup.length,\n            time: Date.now() - start,\n        };\n        if (x.length > 5) {\n            const { iterations, error, peaks: optimizedPeaks, } = optimize({ x, y }, peaks, {\n                shape,\n                baseline,\n                optimization,\n            });\n            for (let i = 0; i < peaks.length; i++) {\n                results.push({\n                    ...optimizedPeaks[i],\n                    width: getShape1D(peaks[i].shape).fwhmToWidth(optimizedPeaks[i].shape.fwhm),\n                });\n            }\n            logs.push({\n                ...log,\n                iterations,\n                error,\n                message: 'optimization successful',\n            });\n        }\n        else {\n            results.push(...peaks);\n            logs.push({\n                ...log,\n                iterations: 0,\n                message: 'x length too small for optimization',\n            });\n        }\n    });\n    return { logs, optimizedPeaks: results };\n}\n//# sourceMappingURL=optimizePeaksWithLogs.js.map","import { optimizePeaksWithLogs } from \"./optimizePeaksWithLogs.js\";\n/**\n * Optimize the position (x), max intensity (y), full width at half maximum (fwhm)\n * and the ratio of gaussian contribution (mu) if it's required. It currently supports three kind of shapes: gaussian, lorentzian and pseudovoigt\n * @param data - An object containing the x and y data to be fitted.\n * @param peakList - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n */\nexport function optimizePeaks(data, peakList, options = {}) {\n    return optimizePeaksWithLogs(data, peakList, options).optimizedPeaks;\n}\n//# sourceMappingURL=optimizePeaks.js.map","export function addMissingIDs(peaks, options = {}) {\n    const { output = structuredClone(peaks) } = options;\n    for (const peak of output) {\n        if (!('id' in peak)) {\n            peak.id = crypto.randomUUID();\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=addMissingIDs.js.map","import { addMissingIDs } from \"../utils/addMissingIDs.js\";\nimport { addMissingShape } from \"../utils/addMissingShape.js\";\nimport { optimizePeaksWithLogs } from \"./optimizePeaksWithLogs.js\";\nexport function joinBroadPeaks(peakList, options = {}) {\n    const { shape = { kind: 'gaussian' }, optimization = { kind: 'lm', options: { timeout: 10 } }, broadWidth = 0.25, broadRatio = 0.0025, } = options;\n    let max = 0;\n    let maxI = 0;\n    let count = 1;\n    const broadLines = [];\n    if (peakList.length < 2) {\n        return addMissingIDs(addMissingShape(peakList.map(getGSDPeakOptimizedStructure), { shape }));\n    }\n    let maxDdy = peakList[0].ddY;\n    for (let i = 1; i < peakList.length; i++) {\n        if (Math.abs(peakList[i].ddY) > maxDdy)\n            maxDdy = Math.abs(peakList[i].ddY);\n    }\n    const newPeaks = [];\n    for (const peak of peakList) {\n        if (Math.abs(peak.ddY) <= broadRatio * maxDdy) {\n            broadLines.push(peak);\n        }\n        else {\n            newPeaks.push(getGSDPeakOptimizedStructure(peak));\n        }\n    }\n    //@ts-expect-error Push a feke peak\n    broadLines.push({ x: Number.MAX_VALUE, y: 0 });\n    let candidates = {\n        x: [broadLines[0].x],\n        y: [broadLines[0].y],\n    };\n    let indexes = [0];\n    for (let i = 1; i < broadLines.length; i++) {\n        if (Math.abs(broadLines[i - 1].x - broadLines[i].x) < broadWidth) {\n            candidates.x.push(broadLines[i].x);\n            candidates.y.push(broadLines[i].y);\n            if (broadLines[i].y > max) {\n                max = broadLines[i].y;\n                maxI = i;\n            }\n            indexes.push(i);\n            count++;\n        }\n        else {\n            if (count > 2) {\n                const initialWidth = Math.abs(candidates.x[candidates.x.length - 1] - candidates.x[0]);\n                const { logs, optimizedPeaks } = optimizePeaksWithLogs(candidates, [\n                    {\n                        id: crypto.randomUUID(),\n                        x: broadLines[maxI].x,\n                        y: max,\n                        width: initialWidth,\n                        parameters: {\n                            width: { max: initialWidth * 4, min: initialWidth * 0.8 },\n                        },\n                    },\n                ], { shape: { kind: 'pseudoVoigt' }, optimization });\n                [max, maxI] = [0, 0];\n                const log = logs.find((l) => l.message === 'optimization successful');\n                if (log) {\n                    const { error } = log;\n                    if (error < 0.2) {\n                        newPeaks.push(optimizedPeaks[0]);\n                    }\n                    else {\n                        pushBackPeaks(broadLines, indexes, newPeaks);\n                    }\n                }\n                else {\n                    pushBackPeaks(broadLines, indexes, newPeaks);\n                }\n            }\n            else {\n                pushBackPeaks(broadLines, indexes, newPeaks);\n            }\n            candidates = { x: [broadLines[i].x], y: [broadLines[i].y] };\n            indexes = [i];\n            max = broadLines[i].y;\n            maxI = i;\n            count = 1;\n        }\n    }\n    newPeaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return addMissingIDs(newPeaks, { output: newPeaks });\n}\nfunction pushBackPeaks(broadLines, indexes, peaks) {\n    for (const index of indexes) {\n        peaks.push(getGSDPeakOptimizedStructure(broadLines[index]));\n    }\n}\nfunction getGSDPeakOptimizedStructure(peak) {\n    const { id, shape, x, y, width } = peak;\n    const newPeak = {\n        x,\n        y,\n        width,\n        shape,\n    };\n    if (id)\n        newPeak.id = id;\n    return newPeak;\n}\n//# sourceMappingURL=joinBroadPeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * This method will allow to enlarge peaks while preventing overlap between peaks\n * A typical application in chromatography peak picking.\n * We should not make the hypothesis that x is equidistant\n * Because peaks may not be symmetric after we add 2 properties, from and to.\n * @return {Array} peakList\n */\nexport function broadenPeaks(peakList, options = {}) {\n    const { factor = 2, overlap = false } = options;\n    const peaks = mapPeaks(peakList, factor);\n    if (!overlap) {\n        for (let i = 0; i < peaks.length - 1; i++) {\n            const peak = peaks[i];\n            const nextPeak = peaks[i + 1];\n            if (peak.to.x > nextPeak.from.x) {\n                // we do it proportional to the width of the peaks\n                peak.to.x =\n                    (peak.width / (nextPeak.width + peak.width)) * (nextPeak.x - peak.x) +\n                        peak.x;\n                nextPeak.from.x = peak.to.x;\n            }\n        }\n    }\n    for (const peak of peaks) {\n        peak.width = peak.to.x - peak.from.x;\n        if (peak.shape) {\n            const { shape, width } = peak;\n            if (shape.fwhm !== undefined) {\n                const shapeFct = getShape1D(shape);\n                peak.shape.fwhm = shapeFct.widthToFWHM(width);\n            }\n        }\n    }\n    return peaks;\n}\nfunction mapPeaks(peaks, factor) {\n    return peaks.map((peak) => {\n        const { id, shape } = peak;\n        const xFrom = peak.x - (peak.x - peak.inflectionPoints.from.x) * factor;\n        const xTo = peak.x + (peak.inflectionPoints.to.x - peak.x) * factor;\n        let result = {\n            x: peak.x,\n            y: peak.y,\n            index: peak.index,\n            width: xTo - xFrom,\n            from: { x: xFrom },\n            to: { x: xTo },\n        };\n        if (id) {\n            result = { ...result, id };\n        }\n        if (shape) {\n            result = { ...result, shape };\n        }\n        return result;\n    });\n}\n//# sourceMappingURL=broadenPeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nconst { parse, stringify } = JSON;\n/**\n * Append 2 properties to the peaks, shape and fwhm\n */\nexport function setShape(peaks, options = {}) {\n    const { shape = { kind: 'gaussian' }, output = parse(stringify(peaks)), } = options;\n    const shapeInstance = getShape1D(shape);\n    return output.map((peak) => ({\n        ...peak,\n        shape: { fwhm: shapeInstance.widthToFWHM(peak.width), ...shape },\n    }));\n}\n//# sourceMappingURL=setShape.js.map","import { gsd } from 'ml-gsd';\nimport { xFindClosestIndex, xMean, xAdd } from 'ml-spectra-processing';\n/**\n * Filter that allows to calibrateX the x axis based on the presence of peaks\n * @param data\n * @param options\n */\nexport function calibrateX(data, options = {}) {\n    const { targetX = 0, nbPeaks = 1, from = data.x[0], to = data.x.at(-1), gsd: gsdOptions = {\n        minMaxRatio: 0.1,\n        realTopDetection: true,\n        smoothY: true,\n        sgOptions: {\n            windowSize: 7,\n            polynomial: 3,\n        },\n    }, } = options;\n    const fromIndex = xFindClosestIndex(data.x, from);\n    const toIndex = xFindClosestIndex(data.x, to);\n    const peaks = gsd({\n        x: data.x.subarray(fromIndex, toIndex),\n        y: data.y.subarray(fromIndex, toIndex),\n    }, gsdOptions)\n        .sort((a, b) => b.y - a.y)\n        .slice(0, nbPeaks);\n    if (peaks.length < nbPeaks)\n        return { data };\n    const middle = xMean(peaks.map((peak) => peak.x));\n    return { data: { x: xAdd(data.x, targetX - middle), y: data.y } };\n}\n//# sourceMappingURL=calibrateX.js.map","import { xApplyFunctionStr } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function xFunction(data, options = {}) {\n    return {\n        data: {\n            x: xApplyFunctionStr(data.x, {\n                variableLabel: 'x',\n                fctString: options.function,\n            }),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=xFunction.js.map","import { xApplyFunctionStr } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function yFunction(data, options = {}) {\n    return {\n        data: {\n            x: data.x,\n            y: xApplyFunctionStr(data.y, {\n                variableLabel: 'y',\n                fctString: options.function,\n            }),\n        },\n    };\n}\n//# sourceMappingURL=yFunction.js.map","import { xAdd, xMaxValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMaxY(data, options = {}) {\n    const { max = 1 } = options;\n    const existingMax = xMaxValue(data.y);\n    if (existingMax === max) {\n        return { data };\n    }\n    return {\n        data: {\n            x: data.x,\n            y: xAdd(data.y, max - existingMax),\n        },\n    };\n}\n//# sourceMappingURL=setMaxY.js.map","import { xAdd, xMinValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMinY(data, options = {}) {\n    const { min = 0 } = options;\n    const existingMin = xMinValue(data.y);\n    if (existingMin === min) {\n        return { data };\n    }\n    return {\n        data: {\n            x: data.x,\n            y: xAdd(data.y, min - existingMin),\n        },\n    };\n}\n//# sourceMappingURL=setMinY.js.map","import { xEnsureFloat64, xyGrowingX } from 'ml-spectra-processing';\nimport * as Filters from \"./filters/filters.js\";\n/**\n * Apply filters on {x:[], y:[]}\n * @param data\n * @param filters\n * @returns A very important number\n */\nexport function filterXY(data, filters) {\n    let result = {\n        data: xyGrowingX({ x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) }),\n    };\n    const logs = [];\n    for (const filter of filters) {\n        const start = Date.now();\n        const filterFct = Filters[filter.name];\n        if (!filterFct) {\n            throw new Error(`Unknown filter: ${filter.name}`);\n        }\n        // @ts-expect-error some method have options and some other ones don't have any options\n        result = filterFct(result.data, filter.options);\n        result.data = xyGrowingX(result.data);\n        logs.push({\n            name: filter.name,\n            time: Date.now() - start,\n        });\n    }\n    return { logs, data: result.data };\n}\n//# sourceMappingURL=filterXY.js.map","import { filterXY } from 'ml-signal-processing';\nimport { xIsMonotonic, xMaxValue, xMinValue } from 'ml-spectra-processing';\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n    const data = {\n        x: spectrum.variables.x.data,\n        y: spectrum.variables.y.data,\n    };\n    const newSpectrum = {\n        variables: {\n            x: {\n                data: spectrum.variables.x.data,\n                units: spectrum.variables.x.units,\n                label: spectrum.variables.x.label,\n            },\n            y: {\n                data: spectrum.variables.y.data,\n                units: spectrum.variables.y.units,\n                label: spectrum.variables.y.label,\n            },\n        },\n    };\n    if (spectrum.title)\n        newSpectrum.title = spectrum.title;\n    if (spectrum.dataType)\n        newSpectrum.dataType = spectrum.dataType;\n    if (spectrum.meta)\n        newSpectrum.meta = spectrum.meta;\n    if (spectrum.id)\n        newSpectrum.id = spectrum.id;\n    const { from = spectrum.variables.x.min, to = spectrum.variables.x.max, numberOfPoints, exclusions = [], zones = [], } = options;\n    let { filters = [] } = options;\n    filters = structuredClone(filters);\n    if (numberOfPoints) {\n        filters.push({\n            name: 'equallySpaced',\n            options: { from, to, exclusions, zones, numberOfPoints },\n        });\n    }\n    else {\n        filters.push({\n            name: 'filterX',\n            options: { from, to, exclusions, zones },\n        });\n    }\n    const { x, y } = filterXY(data, filters).data;\n    // filters change the y axis, we get rid of the units\n    // TODO we should deal correctly with this problem\n    if (filters.length > 1) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label = newSpectrum.variables.y.label?.replace(/\\s*\\[.*]/, '');\n    }\n    newSpectrum.variables.x.data = x;\n    newSpectrum.variables.x.min = xMinValue(x);\n    newSpectrum.variables.x.max = xMaxValue(x);\n    newSpectrum.variables.x.isMonotonic = xIsMonotonic(x);\n    newSpectrum.variables.y.data = y;\n    newSpectrum.variables.y.min = xMinValue(y);\n    newSpectrum.variables.y.max = xMaxValue(y);\n    newSpectrum.variables.y.isMonotonic = xIsMonotonic(y);\n    return newSpectrum;\n}\n//# sourceMappingURL=getNormalizedSpectrum.js.map","/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Qty = factory());\n})(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"t\",\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-imp\", \"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<Gal>\" : [[\"Gal\"], 1e-2, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* molar_concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"molar_concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"molar_concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\",\"Joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<electronvolt>\" : [[\"eV\", \"electronvolt\", \"electronvolts\"], 1.602176634E-19, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<arcminute>\" :[[\"arcmin\",\"arcminute\",\"arcminutes\"], Math.PI / 10800.0, \"angle\", [\"<radian>\"]],\n    \"<arcsecond>\" :[[\"arcsec\",\"arcsecond\",\"arcseconds\"], Math.PI / 648000.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppb>\" :  [[\"ppb\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-12, \"prefix_only\", [\"<1>\"]],\n    \"<ppq>\" :  [[\"ppq\"],1e-15, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.8.0\";\n\n  return Qty;\n\n}));\n","import Qty from 'js-quantities';\nexport function convertUnit(array, fromUnit, toUnit) {\n    fromUnit = normalize(fromUnit);\n    toUnit = normalize(toUnit);\n    if (fromUnit === toUnit)\n        return array;\n    const convert = Qty.swiftConverter(fromUnit, toUnit); // Configures converter\n    //@ts-expect-error convert does not allowed typed array but it works\n    return convert(array);\n}\nfunction normalize(unit) {\n    unit = unit.replaceAll('°C', 'tempC');\n    unit = unit.replaceAll('°F', 'tempF');\n    unit = unit.replaceAll(/(^|\\W)K(\\W|$)/g, '$1tempK$2');\n    return unit;\n}\n//# sourceMappingURL=convertUnit.js.map","const testRegExp = /^\\/((?:\\\\\\/|[^/])+)\\/([gimuy]{0,5})?$/;\nexport function ensureRegexp(string) {\n    if (typeof string !== 'string')\n        return string;\n    const parts = testRegExp.exec(string);\n    if (parts) {\n        try {\n            return new RegExp(parts[1], parts[2]);\n        }\n        catch {\n            return stringToRegexp(string);\n        }\n    }\n    else {\n        return stringToRegexp(string);\n    }\n}\nfunction stringToRegexp(string, flags = 'i') {\n    return new RegExp(string.replaceAll(/[$()*+.?[\\\\\\]^{|}]/g, (match) => `\\\\${match}`), flags);\n}\n//# sourceMappingURL=ensureRegexp.js.map","import { xIsMonotonic, xMaxValue, xMinValue } from 'ml-spectra-processing';\nimport { convertUnit } from './convertUnit.js';\nexport function getConvertedVariable(variable, newUnits) {\n    const data = variable.units !== undefined && variable.units !== newUnits // would be nice if convertUnit would allow typedArray\n        ? convertUnit(Array.from(variable.data), variable.units, newUnits)\n        : variable.data;\n    return {\n        units: newUnits,\n        label: variable.label.replace(`[${variable.units || ''}]`, `[${newUnits}]`),\n        data: data || [],\n        min: data ? xMinValue(data) : undefined,\n        max: data ? xMaxValue(data) : undefined,\n        isMonotonic: xIsMonotonic(data),\n    };\n}\n//# sourceMappingURL=getConvertedVariable.js.map","/* eslint-disable @typescript-eslint/no-dynamic-delete */\nimport { convertUnit } from './convertUnit.js';\nimport { ensureRegexp } from './ensureRegexp.js';\nimport { getConvertedVariable } from './getConvertedVariable.js';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param spectra\n * @param selector\n */\nexport function getXYSpectra(spectra = [], selector = {}) {\n    const selectedSpectra = [];\n    if (spectra.length === 0)\n        return selectedSpectra;\n    const { variables, units, labels, meta, index } = selector;\n    let { dataType, title, xUnits, yUnits, xVariable = 'x', yVariable = 'y', xLabel, yLabel, } = selector;\n    if (index !== undefined) {\n        return [spectra[index]];\n    }\n    if (dataType) {\n        dataType = ensureRegexp(dataType);\n    }\n    if (title) {\n        title = ensureRegexp(title);\n    }\n    if (units && !xUnits && !yUnits)\n        [yUnits, xUnits] = units.split(/\\s*vs\\s*/);\n    if (labels && !xLabel && !yLabel) {\n        [yLabel, xLabel] = labels.split(/\\s*vs\\s*/);\n    }\n    if (variables) {\n        const parts = variables.split(/\\s*vs\\s*/);\n        if (parts.length === 2) {\n            xVariable = parts[1];\n            yVariable = parts[0];\n        }\n    }\n    if (xLabel)\n        xLabel = ensureRegexp(xLabel);\n    if (yLabel)\n        yLabel = ensureRegexp(yLabel);\n    for (const spectrum of spectra) {\n        const variableNames = Object.keys(spectrum.variables);\n        if (!(variableNames.length > 1))\n            continue;\n        // we filter on general spectrum information\n        if (dataType &&\n            (!spectrum.dataType || !dataType.exec(spectrum.dataType))) {\n            continue;\n        }\n        if (title && (!spectrum.title || !title.exec(spectrum.title))) {\n            continue;\n        }\n        if (meta && typeof meta === 'object') {\n            if (!spectrum.meta)\n                continue;\n            for (const key in spectrum.meta) {\n                if (!spectrum.meta[key])\n                    continue;\n                const value = ensureRegexp(spectrum.meta[key]);\n                if (!value.exec(spectrum.meta[key]))\n                    continue;\n            }\n        }\n        const x = getPossibleVariable(spectrum.variables, {\n            units: xUnits,\n            label: xLabel,\n            variableName: xVariable,\n        });\n        const y = getPossibleVariable(spectrum.variables, {\n            units: yUnits,\n            label: yLabel,\n            variableName: yVariable,\n        });\n        if (x && y) {\n            // should we reverse the x axis?\n            if (x.data[0] > x.data.at(-1)) {\n                x.data = x.data.slice().reverse();\n                y.data = y.data.slice().reverse();\n            }\n            selectedSpectra.push({\n                title: spectrum.title,\n                dataType: spectrum.dataType,\n                meta: spectrum.meta,\n                variables: { x, y },\n                id: spectrum.id,\n            });\n        }\n    }\n    return selectedSpectra;\n}\nfunction getPossibleVariable(variables, selector = {}) {\n    const { units, label, variableName } = selector;\n    const possible = { ...variables };\n    let key;\n    if (units !== undefined) {\n        for (key in possible) {\n            const variable = variables[key];\n            let convertibleUnits = true;\n            try {\n                convertUnit(1, variable?.units || '', units);\n            }\n            catch {\n                convertibleUnits = false;\n            }\n            if (convertibleUnits && variable) {\n                possible[key] = getConvertedVariable(variable, units);\n            }\n            else {\n                delete possible[key];\n            }\n        }\n    }\n    if (label !== undefined) {\n        const regexpLabel = ensureRegexp(label);\n        for (key in possible) {\n            if (!regexpLabel.exec(variables[key]?.label ?? '')) {\n                delete possible[key];\n            }\n        }\n    }\n    if (variableName !== undefined) {\n        if (possible[variableName])\n            return possible[variableName];\n        const upper = variableName.toUpperCase();\n        if (Object.hasOwn(possible, upper)) {\n            return possible[upper];\n        }\n        const lower = variableName.toLowerCase();\n        if (Object.hasOwn(possible, lower)) {\n            return possible[lower];\n        }\n    }\n    const possibleFiltered = Object.values(possible).filter((val) => val !== undefined);\n    if (possibleFiltered.length > 0) {\n        return possibleFiltered[0];\n    }\n}\n//# sourceMappingURL=getXYSpectra.js.map","import { getXYSpectra } from './getXYSpectra.js';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param spectra\n * @param selector\n */\nexport function getXYSpectrum(spectra = [], selector = {}) {\n    const selectedSpectra = getXYSpectra(spectra, selector);\n    if (selectedSpectra.length === 0)\n        return undefined;\n    return selectedSpectra[0];\n}\n//# sourceMappingURL=getXYSpectrum.js.map","import { isAnyArray } from 'is-any-array';\nimport { stringify, xIsMonotonic, xMaxValue, xMinValue, } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum.js';\nimport { getXYSpectra } from './util/getXYSpectra.js';\nimport { getXYSpectrum } from './util/getXYSpectrum.js';\n/**\n * Class allowing to store and manipulate an analysis.\n * An analysis may contain one or more spectra that can be selected\n * based on their units\n */\nexport class Analysis {\n    id;\n    label;\n    spectrumCallback;\n    spectra;\n    cache;\n    constructor(options = {}) {\n        this.id = options.id || Math.random().toString(36).slice(2, 10);\n        this.label = options.label || this.id;\n        this.spectrumCallback = options.spectrumCallback;\n        this.spectra = [];\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    clone({ filter = {} }) {\n        const { ids } = filter;\n        const analysis = new Analysis();\n        analysis.id = this.id;\n        analysis.label = this.label;\n        analysis.spectrumCallback = this.spectrumCallback;\n        analysis.spectra = this.spectra.filter((spectrum) => {\n            //@ts-expect-error spectrum.id is not expected to be undefined at this level\n            return !ids || ids.includes(spectrum.id);\n        });\n        return analysis;\n    }\n    toJSON() {\n        // TODO this is likely not the most optimized way to remove typedArray\n        // if data are small seems still reasonable\n        return {\n            id: this.id,\n            label: this.label,\n            spectra: JSON.parse(stringify(this.spectra)),\n        };\n    }\n    static fromJSON(json) {\n        const analysis = new Analysis();\n        analysis.id = json.id;\n        analysis.label = json.label;\n        analysis.spectra = json.spectra;\n        return analysis;\n    }\n    /**\n     * Add a spectrum in the internal spectra variable\n     * @param variables\n     * @param options\n     */\n    pushSpectrum(variables, options = {}) {\n        this.spectra.push(standardizeData(variables, options, {\n            spectrumCallback: this.spectrumCallback,\n        }));\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    /**\n     * Retrieve a MeasurementXY based on x/y units\n     * @param selector\n     */\n    getXYSpectrum(selector = {}) {\n        const id = JSON.stringify(selector);\n        if (!this.cache.spectrum[id]) {\n            this.cache.spectrum[id] = getXYSpectrum(this.spectra, selector);\n        }\n        return this.cache.spectrum[id];\n    }\n    /**\n     * Retrieve spectra matching selector\n     * @param selector\n     */\n    getXYSpectra(selector = {}) {\n        const id = JSON.stringify(selector);\n        if (!this.cache.spectra[id]) {\n            this.cache.spectra[id] = getXYSpectra(this.spectra, selector);\n        }\n        return this.cache.spectra[id];\n    }\n    /**\n     * Retrieve a xy object\n     * @param selector.units - Units separated by vs like for example \"g vs °C\"\n     * @param selector.xUnits - if undefined takes the first variable\n     * @param selector.yUnits - if undefined takes the second variable\n     * @param selector\n     */\n    getXY(selector = {}) {\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return {\n            x: spectrum.variables.x.data,\n            y: spectrum.variables.y.data,\n        };\n    }\n    /**\n     * Return the data object for specific x/y units with possibly some\n     * normalization options\n     * @param options.selector.xUnits - // if undefined takes the first variable\n     * @param options.selector.yUnits - // if undefined takes the second variable\n     * @param options\n     */\n    getNormalizedSpectrum(options = {}) {\n        const { normalization, selector } = options;\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return getNormalizedSpectrum(spectrum, normalization);\n    }\n    /**\n     * @param options\n     */\n    getNormalizedSpectra(options = {}) {\n        const { normalization, selector } = options;\n        const spectra = this.getXYSpectra(selector);\n        if (spectra.length === 0)\n            return [];\n        const normalizedSpectra = [];\n        for (const spectrum of spectra) {\n            normalizedSpectra.push(getNormalizedSpectrum(spectrum, normalization));\n        }\n        return normalizedSpectra;\n    }\n    /**\n     * Returns the first spectrum. This method could be improved in the future\n     * @returns\n     */\n    getSpectrum() {\n        return this.spectra[0];\n    }\n    /**\n     * Returns the xLabel\n     * @param selector.xUnits - // if undefined takes the first variable\n     * @param selector.yUnits - // if undefined takes the second variable\n     * @param selector\n     */\n    getXLabel(selector) {\n        return this.getXYSpectrum(selector)?.variables.x.label;\n    }\n    /**\n     * Returns the yLabel\n     * @param selector.xUnits - // if undefined takes the first variable\n     * @param selector.yUnits - // if undefined takes the second variable\n     * @param selector\n     */\n    getYLabel(selector) {\n        return this.getXYSpectrum(selector)?.variables.y.label;\n    }\n}\n/**\n * Internal function that ensure the order of x / y array\n * @param variables\n * @param options\n * @param analysisOptions\n */\nfunction standardizeData(variables, options, analysisOptions) {\n    const { meta = {}, dataType = '', title = '', id = Math.random().toString(36).replace('0.', ''), } = options;\n    const { spectrumCallback } = analysisOptions;\n    if (spectrumCallback) {\n        spectrumCallback(variables);\n    }\n    const xVariable = variables.x;\n    const yVariable = variables.y;\n    if (!xVariable || !yVariable) {\n        throw new Error('A spectrum must contain at least x and y variables');\n    }\n    if (!isAnyArray(xVariable.data) || !isAnyArray(yVariable.data)) {\n        throw new Error('x and y variables must contain an array data');\n    }\n    const x = xVariable.data;\n    const reverse = x && x.length > 1 && x[0] > x.at(-1);\n    for (const [key, variable] of Object.entries(variables)) {\n        if (reverse)\n            variable.data = variable.data.slice().reverse();\n        variable.label = variable.label || key;\n        if (variable.label.match(/^.*[([](?<units>.*)[)\\]].*$/)) {\n            const units = variable.label.replace(/^.*[([](?<units>.*)[)\\]].*$/, '$<units>');\n            if (!variable.units || variable.units === units) {\n                variable.units = units;\n                variable.label = variable.label.replace(/[([].*[)\\]]/, '').trim();\n            }\n        }\n        variable.min = xMinValue(variable.data);\n        variable.max = xMaxValue(variable.data);\n        variable.isMonotonic = xIsMonotonic(variable.data);\n    }\n    return {\n        variables,\n        title,\n        dataType,\n        meta,\n        id,\n    };\n}\n//# sourceMappingURL=Analysis.js.map","export function appendDistinctParameter(values, key, value) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            values: [],\n            count: 0,\n        };\n    }\n    if (!values[key].values.includes(value)) {\n        values[key].values.push(value);\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=appendDistinctParameter.js.map","export function appendDistinctValue(values, key) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            count: 0,\n        };\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=appendDistinctValue.js.map","import { Analysis } from './Analysis.js';\nimport { appendDistinctParameter } from './util/appendDistinctParameter.js';\nimport { appendDistinctValue } from './util/appendDistinctValue.js';\nexport class AnalysesManager {\n    analyses;\n    constructor() {\n        this.analyses = [];\n    }\n    static fromJSON(json) {\n        const analysesManager = new AnalysesManager();\n        for (const analysis of json.analyses) {\n            analysesManager.analyses.push(Analysis.fromJSON(analysis));\n        }\n        return analysesManager;\n    }\n    addAnalysis(analysis) {\n        const index = this.getAnalysisIndex(analysis.id);\n        if (index === undefined) {\n            this.analyses.push(analysis);\n        }\n        else {\n            this.analyses[index] = analysis;\n        }\n    }\n    /**\n     *\n     * @param options\n     * @returns\n     */\n    getAnalyses(options = {}) {\n        const { ids } = options;\n        const analyses = [];\n        const processedAnalysisIds = new Set();\n        for (const analysis of this.analyses) {\n            if (!ids || ids.includes(analysis.id)) {\n                analyses.push(analysis);\n                processedAnalysisIds.add(analysis.id);\n                continue;\n            }\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id &&\n                    ids.includes(spectrum.id) &&\n                    !processedAnalysisIds.has(analysis.id)) {\n                    analyses.push(analysis.clone({ filter: { ids } }));\n                    processedAnalysisIds.add(analysis.id);\n                }\n            }\n        }\n        return analyses;\n    }\n    getSpectra() {\n        const spectra = [];\n        for (const analysis of this.analyses) {\n            spectra.push(...analysis.spectra);\n        }\n        return spectra;\n    }\n    getAnalysisBySpectrumId(id) {\n        for (const analysis of this.analyses) {\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id === id)\n                    return analysis;\n            }\n        }\n        return undefined;\n    }\n    getSpectrumById(id) {\n        for (const analysis of this.analyses) {\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id === id)\n                    return spectrum;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Get an array of objects (key + count) of all the titles\n     */\n    getDistinctTitles() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.title) {\n                appendDistinctValue(values, spectrum.title);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the units\n     */\n    getDistinctUnits() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    if (variable.units) {\n                        appendDistinctValue(values, variable.units);\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + unit + label + count) of all the units\n     */\n    getDistinctLabelUnits() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    const { label, units } = normalizeLabelUnits(variable.label, variable.units);\n                    const key = label + (units ? ` (${units})` : '');\n                    if (key) {\n                        if (!values[key]) {\n                            values[key] = { key, units, label, count: 0 };\n                        }\n                        values[key].count++;\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the labels\n     */\n    getDistinctLabels() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    appendDistinctValue(values, variable.label.replace(/\\s+[([].*$/, ''));\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the dataTypes\n     */\n    getDistinctDataTypes() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.dataType) {\n                appendDistinctValue(values, spectrum.dataType);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the meta\n     */\n    getDistinctMeta() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.meta) {\n                for (const key in spectrum.meta) {\n                    appendDistinctParameter(values, key, spectrum.meta[key]);\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    removeAllAnalyses() {\n        this.analyses.splice(0);\n    }\n    /**\n     * Remove the analysis from the AnalysesManager for the specified id\n     * @param id\n     */\n    removeAnalysis(id) {\n        const index = this.getAnalysisIndex(id);\n        if (index === undefined)\n            return undefined;\n        return this.analyses.splice(index, 1);\n    }\n    /**\n     * Returns the index of the analysis in the analyses array\n     * @param id\n     */\n    getAnalysisIndex(id) {\n        if (!id)\n            return undefined;\n        for (let i = 0; i < this.analyses.length; i++) {\n            const analysis = this.analyses[i];\n            if (analysis.id === id)\n                return i;\n        }\n        return undefined;\n    }\n    /**\n     * Checks if the ID of an analysis exists in the AnalysesManager\n     * @param id\n     */\n    includes(id) {\n        const index = this.getAnalysisIndex(id);\n        return index === undefined ? false : !Number.isNaN(index);\n    }\n}\nfunction normalizeLabelUnits(originalLabel, originalUnits) {\n    if (!originalLabel) {\n        return { units: '', label: '' };\n    }\n    if (originalLabel.search(/[([]]/) >= 0) {\n        const [units, label] = originalLabel.split(/\\s*[([]/);\n        return { units: originalUnits || units, label };\n    }\n    return { label: originalLabel, units: originalUnits };\n}\n//# sourceMappingURL=AnalysesManager.js.map","/*\n    https://tools.ietf.org/html/rfc3629\n\n    UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4\n\n    UTF8-1    = %x00-7F\n\n    UTF8-2    = %xC2-DF UTF8-tail\n\n    UTF8-3    = %xE0 %xA0-BF UTF8-tail\n                %xE1-EC 2( UTF8-tail )\n                %xED %x80-9F UTF8-tail\n                %xEE-EF 2( UTF8-tail )\n\n    UTF8-4    = %xF0 %x90-BF 2( UTF8-tail )\n                %xF1-F3 3( UTF8-tail )\n                %xF4 %x80-8F 2( UTF8-tail )\n\n    UTF8-tail = %x80-BF\n*/\n/**\n * Check if a Node.js Buffer or Uint8Array is UTF-8.\n */\nfunction isUtf8(buf) {\n    if (!buf) {\n        return false;\n    }\n    var i = 0;\n    var len = buf.length;\n    while (i < len) {\n        // UTF8-1 = %x00-7F\n        if (buf[i] <= 0x7F) {\n            i++;\n            continue;\n        }\n        // UTF8-2 = %xC2-DF UTF8-tail\n        if (buf[i] >= 0xC2 && buf[i] <= 0xDF) {\n            // if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n            if (buf[i + 1] >> 6 === 2) {\n                i += 2;\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        // UTF8-3 = %xE0 %xA0-BF UTF8-tail\n        // UTF8-3 = %xED %x80-9F UTF8-tail\n        if (((buf[i] === 0xE0 && buf[i + 1] >= 0xA0 && buf[i + 1] <= 0xBF) ||\n            (buf[i] === 0xED && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x9F)) && buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-3 = %xE1-EC 2( UTF8-tail )\n        // UTF8-3 = %xEE-EF 2( UTF8-tail )\n        if (((buf[i] >= 0xE1 && buf[i] <= 0xEC) ||\n            (buf[i] >= 0xEE && buf[i] <= 0xEF)) &&\n            buf[i + 1] >> 6 === 2 &&\n            buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n        //          %xF1-F3 3( UTF8-tail )\n        //          %xF4 %x80-8F 2( UTF8-tail )\n        if (((buf[i] === 0xF0 && buf[i + 1] >= 0x90 && buf[i + 1] <= 0xBF) ||\n            (buf[i] >= 0xF1 && buf[i] <= 0xF3 && buf[i + 1] >> 6 === 2) ||\n            (buf[i] === 0xF4 && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x8F)) &&\n            buf[i + 2] >> 6 === 2 &&\n            buf[i + 3] >> 6 === 2) {\n            i += 4;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n\nexport { isUtf8 as default };\n","import isutf8 from 'isutf8';\n/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        const { encoding = guessEncoding(blob) } = options;\n        const decoder = new TextDecoder(encoding);\n        return decoder.decode(blob);\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction guessEncoding(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return 'utf-16be';\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return 'utf-16le';\n        }\n    }\n    //@ts-expect-error an ArrayBuffer is also ok\n    if (!isutf8(blob))\n        return 'latin1';\n    return 'utf-8';\n}\n//# sourceMappingURL=index.js.map","export function parseString(value) {\n    if (value.length === 4 || value.length === 5) {\n        const lowercase = value.toLowerCase();\n        if (lowercase === 'true')\n            return true;\n        if (lowercase === 'false')\n            return false;\n    }\n    const number = Number(value);\n    if (number === 0 && !value.includes('0')) {\n        return value;\n    }\n    if (!Number.isNaN(number))\n        return number;\n    return value;\n}\n//# sourceMappingURL=parseString.js.map","export const gyromagneticRatioMHzT = {\n    '1H': 42.577478615342585,\n    '2H': 6.5359028540009305,\n    '3H': 45.41483815473964,\n    '3He': -32.43604456417949,\n    '6Li': 6.266099405837534,\n    '7Li': 16.548177299618295,\n    '9Be': -5.983379963834242,\n    '10B': 4.57473388220653,\n    '11B': 13.66160796005943,\n    '13C': 10.707746367473973,\n    '14N': 3.076272817251739,\n    '15N': -4.3152552187859134,\n    '17O': -5.7734832203316975,\n    '19F': 40.06924371705693,\n    '21Ne': -3.362579959801532,\n    '22Na': 4.436349259342206,\n    '23Na': 11.268733657034753,\n    '25Mg': -2.607933066661972,\n    '26Al': 4.273225764239245,\n    '27Al': 11.100630067688776,\n    '29Si': -8.461871234008282,\n    '31P': 17.241162495263175,\n    '33S': 3.2688220630834754,\n    '35Cl': 4.175656570906633,\n    '36Cl': 4.897135020041924,\n    '37Cl': 3.4759025124743057,\n    '39Ar': -3.462835209795831,\n    '39K': 1.9893443809332112,\n    '40K': -2.4734743333970806,\n    '41K': 1.091921234883595,\n    '41Ca': -3.4724832349401047,\n    '43Ca': -2.8689916395725414,\n    '45Sc': 10.353659488911559,\n    '47Hi': -2.403068251036403,\n    '49Hi': -2.403730327705445,\n    '50V': 4.248579379465121,\n    '51V': 11.208261084083814,\n    '53Cr': -2.4103147963328766,\n    '53Mn': 10.961289063460638,\n    '55Mn': 10.570707386401027,\n    '57Fe': 1.3818237005731187,\n    '59Co': 10.050933643526891,\n    '60Co': 5.7916463354780205,\n    '61Ni': -3.809518009468367,\n    '63Ni': 7.561612483277437,\n    '63Cu': 11.311420179117773,\n    '65Cu': 12.116874196993763,\n    '67Zn': 2.6674502745948656,\n    '69Ga': 10.23978520568125,\n    '71Ga': 13.010902748192017,\n    '73Ge': -1.4876591727852992,\n    '75As': 7.3090505609529135,\n    '77Se': 8.134221686648205,\n    '79Se': -2.21708568778123,\n    '79Br': 10.695006473323717,\n    '81Br': 11.528409999706447,\n    '81Kr': -1.9753405882294455,\n    '83Kr': -1.6443288722876133,\n    '85Kr': -1.703226109304539,\n    '85Rb': 4.125530397832004,\n    '87Rb': 13.981309683545954,\n    '87Sr': -1.851714225407608,\n    '89Y': -2.0931336103407774,\n    '91Zr': -3.970456361178983,\n    '91Nb': 11.032433266932335,\n    '92Nb': 5.58627189504799,\n    '93Nb': 10.439564904668199,\n    '95Mo': -2.784380854729418,\n    '97Mo': -2.842922370728985,\n    '97Hc': 9.858553909649345,\n    '99Hc': 9.618018745530753,\n    '99Ru': -1.9544329039438861,\n    '101Ru': -2.1892087754004836,\n    '103Rh': -1.3459975123963002,\n    '105Pd': -1.9574819412355304,\n    '107Ag': -1.730633566737207,\n    '109Ag': 1.9896492846623755,\n    '111Cd': -9.05564075618306,\n    '113Cd': -9.471834346492482,\n    '113In': 9.351736155393834,\n    '115In': 9.371724288750167,\n    '115Sn': -13.985934056771613,\n    '117Sn': -15.237563864991529,\n    '119Sn': -15.944940516652968,\n    '121Sn': 3.541456814244654,\n    '121Sb': 10.238667225340981,\n    '123Sb': 5.544238738098897,\n    '125Sb': 5.727834340731468,\n    '123He': -11.217408195958745,\n    '125He': -13.522480388441707,\n    '127I': 8.563831041040862,\n    '129I': 5.6984329097048985,\n    '129Xe': -11.860160502223787,\n    '131Xe': 3.5157686750625525,\n    '133Cs': 5.614148807428737,\n    '134Cs': 5.69655448494487,\n    '135Cs': 5.941920316280481,\n    '137Cs': 6.179527436650749,\n    '133Ba': 11.767759427100511,\n    '135Ba': 4.258996923544905,\n    '137Ba': 4.7641207681939495,\n    '137La': 5.871574670194692,\n    '138La': 5.653524946166542,\n    '139La': 6.052556812291568,\n    '141Pr': 13.00719308615385,\n    '143Nd': -2.319446225429283,\n    '145Nd': -1.4286917595132482,\n    '145Pm': 11.586341708247685,\n    '147Pm': 5.618940151744178,\n    '147Sm': -1.7619079778143567,\n    '149Sm': -1.454172999736274,\n    '151Sm': -1.099177943637708,\n    '150Eu': 4.119249381011216,\n    '151Eu': 10.560340659609437,\n    '152Eu': -4.917588978540037,\n    '153Eu': 4.66319763384053,\n    '154Eu': -5.081728819406879,\n    '155Eu': 4.622340534132499,\n    '155Gd': -1.3166759371083225,\n    '157Gd': -1.7267714528344573,\n    '157Hb': 10.315909503395963,\n    '158Hb': 4.4541353102101295,\n    '159Hb': 10.209193198188421,\n    '161Hy': -1.4604888626975372,\n    '163Hy': 2.04590402269321,\n    '163Ho': 9.190669550527298,\n    '165Ho': 9.059996523742551,\n    '166Ho': 3.941969641339908,\n    '167Er': -1.2246240493510665,\n    '169Hm': -3.5216380718489675,\n    '171Hm': -3.506392885390747,\n    '171Yb': 7.505205293382021,\n    '173Yb': -2.067247283734719,\n    '173Lu': 4.950329831362216,\n    '174Lu': 15.107979780096652,\n    '175Lu': 4.847315928580239,\n    '176Lu': 3.4410563719983727,\n    '177Hf': 1.7227060697789323,\n    '179Hf': -1.0822388475730185,\n    '179Ha': 4.978642320498912,\n    '180Ha': 4.077240422770786,\n    '181Ha': 5.15069513909883,\n    '183W': 1.7896324383305209,\n    '185Re': 9.683742438261751,\n    '187Re': 9.784360668886006,\n    '187Os': 0.9820949116385737,\n    '189Os': 3.3417448716419638,\n    '191Ir': 0.7632756686749131,\n    '193Ir': 0.8283217975633214,\n    '193Pt': 9.162357061390605,\n    '195Pt': 9.258401736077394,\n    '197Au': 0.7378670245778789,\n    '199Hg': 7.68204945629738,\n    '201Hg': -2.8356046812290385,\n    '203Hl': 24.63622131648455,\n    '204Hl': 0.3430166953099643,\n    '205Hl': 24.88014429981608,\n    '205Pb': 2.162987054692344,\n    '207Pb': 9.00380712222511,\n    '207Bi': 6.899124436187426,\n    '208Bi': 6.970099248698476,\n    '209Bi': 6.931478109670983,\n    '209Po': 10.366726791590036,\n    '227Ac': 6.1997091596763925,\n    '229Hh': 1.402557154156299,\n    '231Pa': 10.11264035061969,\n    '233U': -1.7989320020700355,\n    '235U': -0.827595836303406,\n    '237Np': 9.634957841595446,\n    '239Pu': 3.079527664560569,\n    '241Pu': -2.067247283734719,\n    '241Am': 4.878459666630606,\n    '243Am': 4.634536683299075,\n    '243Cm': 1.2196149166576515,\n    '245Cm': 1.0889418898729026,\n    '247Cm': 0.6098074583288254,\n};\n//# sourceMappingURL=gyromagneticRatioMHzT.js.map","import { gyromagneticRatio } from '.';\n/**\n * Attempts to resolve a nucleus string to a canonical gyromagnetic nucleus symbol.\n * @param nucleus - The name or symbol of the nucleus (e.g., '1H', 'proton').\n * @returns The canonical nucleus symbol if found, otherwise null.\n */\nexport function getGyromagneticNucleus(nucleus) {\n    nucleus = nucleus.toLowerCase();\n    if (nucleus === 'proton')\n        return '1H';\n    for (const key in gyromagneticRatio) {\n        if (key.toLowerCase() === nucleus)\n            return key;\n    }\n    if (nucleus in gyromagneticRatio) {\n        return nucleus;\n    }\n    // we try to use only the numbers\n    const nucleusNumber = nucleus.replaceAll(/[^0-9]/g, '');\n    if (!nucleusNumber)\n        return null;\n    const filteredNuclei = [];\n    for (const key in gyromagneticRatio) {\n        if (key.replaceAll(/[^0-9]/g, '') === nucleusNumber) {\n            filteredNuclei.push(key);\n        }\n    }\n    if (filteredNuclei.length === 1) {\n        return filteredNuclei[0];\n    }\n    return null;\n}\n//# sourceMappingURL=getGyromagneticNucleus.js.map","import { getGyromagneticNucleus, gyromagneticRatio } from '.';\n/**\n * Returns the gyromagnetic ratio for a given nucleus string.\n * @param nucleus - The name or symbol of the nucleus (e.g., '1H', 'proton').\n * @returns The gyromagnetic ratio for the nucleus, or null if not found.\n */\nexport function getGyromagneticRatio(nucleus) {\n    const realNucleus = getGyromagneticNucleus(nucleus);\n    if (realNucleus) {\n        return gyromagneticRatio[realNucleus];\n    }\n    return null;\n}\n//# sourceMappingURL=getGyromagneticRatio.js.map","import { gyromagneticRatioMHzT } from './gyromagneticRatioMHzT';\nexport const gyromagneticRatio = Object.fromEntries(Object.entries(gyromagneticRatioMHzT).map(([key, value]) => [\n    key,\n    value * 2 * Math.PI * 1e6,\n]));\nexport * from './gyromagneticRatioMHzT';\nexport * from './getGyromagneticNucleus';\nexport * from './getGyromagneticRatio';\n//# sourceMappingURL=index.js.map","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport { median as default };\n","import{ensureString as fe}from\"ensure-string\";var $=/\\s*\\$\\$.*/;function M(e){return e.replace($,\"\")}function Te(e,m={}){e=fe(e);let{flatten:n=!1}=m,s=e.split(/\\r?\\n/),f=[],i=[],t=[],l={title:\"\",jcamp:\"\",children:[]},r=0,p=e.includes(\"## \");for(let c=0;c<s.length;c++){let b=s[c],h=p?b.replaceAll(\" \",\"\"):b;if(h.startsWith(\"##NTUPLES\")&&r++,h.startsWith(\"##TITLE\")){let o=[h.slice(8).trim()];for(let a=c+1;a<s.length&&!s[a].startsWith(\"##\");a++)o.push(s[a].trim());i.push({title:o.join(`\n`),jcamp:`${b}\n`,children:[]}),l=i.at(-1),f.push(l)}else if(h.startsWith(\"##END\")&&r===0&&l){l.jcamp+=`${b}\n`;let o=i.pop();if(!o)throw new Error(\"Not finished\");i.length>0?(l=i.at(-1),l.children?.push(o)):(l=void 0,t.push(o))}else if(l?.jcamp){l.jcamp+=`${b}\n`;let o=h.match(/^##(.*?)=(.+)/);if(o){let a=o[1].replaceAll(/[ _-]/g,\"\").toUpperCase();a===\"DATATYPE\"?l.dataType=o[2].trim():a===\"DATACLASS\"?l.dataClass=o[2].trim():a===\"JCAMPDX\"?l.jcampDX=M(o[2].trim()):a===\"JCAMPCS\"&&(l.jcampCS=M(o[2].trim()))}}h.startsWith(\"##END\")&&r>0&&r--}if(n){for(let c of f)c.children=void 0;return f}else return t}import{parseString as de}from\"dynamic-typing\";import{ensureString as be}from\"ensure-string\";var ee=[\"TIC\",\".RIC\",\"SCANNUMBER\"];function te(e){let m=e.spectra,n=m.length,s={times:new Array(n),series:{ms:{dimension:2,data:new Array(n)}}},f=[];for(let i of ee){let t=U(i);m[0][t]&&(f.push(t),s.series[t]={dimension:1,data:new Array(n)})}for(let i=0;i<n;i++){let t=m[i];s.times[i]=t.pageValue;for(let l of f)s.series[l].data[i]=Number(t[l]);t.data&&(s.series.ms.data[i]=[t.data.x,t.data.y])}e.chromatogram=s}function ne(e){return ee.includes(e)}function U(e){return e.toLowerCase().replaceAll(/[^a-z0-9]/g,\"\")}function E(e){return e.map(Number)}function k(e,m,n){let{logger:s}=n;s&&(e.xFactor||s.info(\"The xFactor is not defined, it will be set to 1\"),e.yFactor||s.info(\"The yFactor is not defined, it will be set to 1\"));let f=e.yFactor??1,i=e.xFactor??1,t=e.deltaX??1,l=Math.abs(t*.1),r=.01;e.isXYdata=!0;let p={x:[],y:[]};e.data=p;let c=e.firstX||0,b=e.firstY||0,h=!1,o,a=0;for(;a<m.length;a++)if(o=m.codePointAt(a),o===13||o===10)h=!0;else if(h)break;let u=0,d=!0,C=!1,x=!1,j=0,N=!1,S=!1,g=0,X=0,O=!1,A=!1,Y=!1,R=0;for(;a<=m.length;a++)if(a===m.length?o=13:o=m.codePointAt(a),S)(o===13||o===10)&&(d=!0,S=!1,u++);else if(o<=57&&o>=48)A=!0,R>0?g+=(o-48)/10**R++:(g*=10,g+=o-48);else if(o===44||o===46)A=!0,R++;else{if(A){if(O&&(g=g*-1,O=!1),d)g*=i,s&&(x?Math.abs(c-t-g)>l&&(Math.abs(c-g)<l?s.trace(`Data line ${u}: After a DIFFERENCE the next line should repeat the last value and this does not seem to be the case: Current value: ${g} - Expected: ${c}.`):Math.abs(c-t-g)>10*l?s.trace(`Data line ${u}: The difference between the first value ${g} and the expected first x value ${c} based on increment after a DIFFERENCE is too high`):s.trace(`Data line ${u}: The difference between the first value ${g} and the expected first x value ${c} based on increment after a DIFFERENCE is too high`)):Math.abs(c-g)>l&&s.trace(`Data line ${u}: The difference between the first value ${g} and the first x value ${c} is too high`)),d=!1,x&&(Y=!0);else if(Y)Y=!1,s&&Math.abs(b-g)>r&&s.trace(`Data line ${u}: After a duplicate the next line should repeat the same value ${g} !== ${b}`),b=g;else{C?(j=O?0-g:g,x=!0,C=!1):N||(X=O?0-g:g);let y=N?g-1:1;for(let F=0;F<y;F++)x?b+=j:b=X,p.x.push(c),p.y.push(b*f),c+=t}O=!1,g=0,R=0,A=!1,N=!1}if(o<74&&o>63)A=!0,x=!1,g=o-64;else if(o>96&&o<106)A=!0,x=!1,g=o-96,O=!0;else if(o===115)A=!0,N=!0,g=9;else if(o>82&&o<91)A=!0,N=!0,g=o-82;else if(o>73&&o<83)A=!0,C=!0,g=o-73;else if(o>105&&o<115)A=!0,C=!0,g=o-105,O=!0;else if(o===36&&m.codePointAt(a+1)===36)A=!0,S=!0;else if(o===37)A=!0,C=!0,g=0,O=!1;else if(o===45){let y=m.codePointAt(a+1);(y!==void 0&&y>=48&&y<=57||y===44||y===46)&&(A=!0,d||(x=!1),O=!0)}else(o===13||o===10)&&(d=!0,S=!1,u++)}s&&x&&s.warn(\"The last value is a difference, it should be repeated on the next line\")}var re=/[,\\t ]+/;function P(e,m,n){if(e.isPeaktable=!0,!e.variables||Object.keys(e.variables).length===2?me(e,m,n):ce(e,m,n),e.variables)for(let s in e.variables)e.variables[s].data=e.data?.[s]}function me(e,m,n){let{logger:s}=n,f={x:[],y:[]};e.data=f;let i=m.split(/,? *,?[;\\r\\n]+ */);for(let t=1;t<i.length;t++){let l=i[t].trim().replace($,\"\").split(re);if(l.length%2===0)for(let r=0;r<l.length;r=r+2)e.xFactor!==void 0&&e.yFactor!==void 0&&(f.x.push(Number(l[r])*e.xFactor),f.y.push(Number(l[r+1])*e.yFactor));else s?.warn(`Format error: ${l.toString()}`)}}function ce(e,m,n){let{logger:s}=n,f={},i=Object.keys(e.variables),t=i.length;for(let r of i)f[r]=[];e.data=f;let l=m.split(/,? *,?[;\\r\\n]+ */);for(let r=1;r<l.length;r++){let p=l[r].trim().replace($,\"\").split(re);if(p.length%t===0)for(let c=0;c<p.length;c++)f[i[c%t]].push(Number(p[c]));else s?.warn(`Wrong number of columns: ${p.toString()}`)}}function V(e,m){e.isXYAdata=!0;let n={};e.data=n;let s=m.split(/\\r?\\n/),f=s[0].replace(/^.*?([A-Z]+).*$/,\"$1\").split(\"\").map(i=>i.toLowerCase());for(let i=1;i<s.length;i++){let t=s[i].replace(/^\\((.*)\\)$/,\"$1\").split(/ *, */);for(let l=0;l<f.length;l++){let r=t[l];switch(f[l]){case\"x\":case\"y\":case\"w\":r=Number.parseFloat(r);break;case\"a\":r=r.replace(/^<(.*)>$/,\"$1\");break;case\"m\":break;default:continue}n[f[l]]||(n[f[l]]=[]),n[f[l]].push(r)}}}import{parseString as ae}from\"dynamic-typing\";import{getGyromagneticRatio as se}from\"gyromagnetic-ratio\";import ie from\"ml-array-median\";function oe(e){return Array.isArray(e)?e[0]:e}function B(e){let{spectra:m}=e,n=m[0].data.y[0],s=n,f=m.length,i=m[0].data.x.length||0,t=new Array(f);for(let o=0;o<f;o++){t[o]=m[o].data.y;for(let a=0;a<i;a++){let u=t[o][a];u<n&&(n=u),u>s&&(s=u)}}let l=m[0].data.x[0],r=m[0].data.x.at(-1),{firstY:p,lastY:c}=ue(e);if(l>r)for(let o of t)o.reverse();p>c&&t.reverse();let b=[];for(let o of t){let a=Float64Array.from(o);for(let u=0;u<a.length;u++)a[u]<0&&(a[u]=-a[u]);b.push(ie(a))}let h=ie(b);return{z:t,minX:Math.min(l,r),maxX:Math.max(l,r),minY:Math.min(p,c),maxY:Math.max(p,c),minZ:n,maxZ:s,noise:h}}function ue(e){let{spectra:m,ntuples:n,info:s}=e;if(n)for(let f of n){let{symbol:i,nucleus:t,units:l}=f;if(i.match(/[F|T]1/)&&l?.toUpperCase().match(\"HZ\")){let r=oe(s[\".OBSERVEFREQUENCY\"]),{nucleus:p}=n.find(u=>u.symbol.match(/[F|T]2/));if([r,p,t].some(u=>!u))break;let c=se(p),b=se(t),{first:h,last:o}=f,a=b!==null&&c!==null?r*b/c:r;return{firstY:h/a,lastY:o/a}}}return{firstY:m[0].pageValue,lastY:m.at(-1).pageValue}}function Z(e,m){let n=e.noise,s=e.z,f,i,t,l,r,p,c,b,h=s.length,o=s[0].length,a,u,d,C,x=e.minX,N=(e.maxX-x)/(o-1),S=e.minY,X=(e.maxY-S)/(h-1),O=e.minZ,A=e.maxZ,Y=m.nbContourLevels*2,R=new Array(Y),y;for(let F=0;F<Y;F++){let I={};R[F]=I;let le=F%2,K=(A-m.noiseMultiplier*n)*Math.exp((F>>1)-m.nbContourLevels);le===0?y=K+m.noiseMultiplier*n:y=0-K-m.noiseMultiplier*n;let D=[];if(I.zValue=y,I.lines=D,!(y<=O||y>=A))for(let T=0;T<h-1;T++){let Q=s[T],_=s[T+1];for(let v=0;v<o-1;v++)f=Q[v],i=Q[v+1],t=_[v],l=_[v+1],r=f>y,p=i>y,c=t>y,b=l>y,r!==p&&r!==c&&(a=v+(y-f)/(i-f),u=T,d=v,C=T+(y-f)/(t-f),D.push(a*N+x,u*X+S,d*N+x,C*X+S)),b!==p&&b!==c&&(a=v+1,u=T+1-(y-l)/(i-l),d=v+1-(y-l)/(t-l),C=T+1,D.push(a*N+x,u*X+S,d*N+x,C*X+S)),p!==c&&(a=(v+1-(y-i)/(t-i))*N+x,u=(T+(y-i)/(t-i))*X+S,p!==r&&(d=v+1-(y-i)/(f-i),C=T,D.push(a,u,d*N+x,C*X+S)),c!==r&&(d=v,C=T+1-(y-t)/(f-t),D.push(a,u,d*N+x,C*X+S)),p!==b&&(d=v+1,C=T+(y-i)/(l-i),D.push(a,u,d*N+x,C*X+S)),c!==b&&(d=v+(y-t)/(l-t),C=T+1,D.push(a,u,d*N+x,C*X+S)))}}return{minX:e.minX,maxX:e.maxX,minY:e.minY,maxY:e.maxY,segments:R}}function G(e,m){let n=B(e);m.noContour||(e.contourLines=Z(n,m),delete n.z),e.minMax=n}import{getGyromagneticRatio as W}from\"gyromagnetic-ratio\";function H(e,m){for(let n of e){let s=0,f=0;for(let i of n.spectra){if(n.ntuples?.symbol?(!s&&i.observeFrequency&&(s=i.observeFrequency),!f&&i.shiftOffsetVal&&(f=i.shiftOffsetVal)):(s=i.observeFrequency,f=i.shiftOffsetVal),s&&i.xUnits?.toUpperCase().includes(\"HZ\")&&(i.xUnits=\"PPM\",i.xFactor=i.xFactor!==void 0?i.xFactor/s:void 0,i.firstX=i.firstX!==void 0?i.firstX/s:void 0,i.lastX=i.lastX!==void 0?i.lastX/s:void 0,i.deltaX=i.deltaX!==void 0?i.deltaX/s:void 0,i.data))for(let t=0;t<i.data.x.length;t++)i.data.x[t]/=s;if(f&&i.xUnits.toLowerCase().includes(\"ppm\")&&i.firstX!==void 0&&i.lastX!==void 0){let t=i.firstX-f;if(i.firstX=i.firstX-t,i.lastX=i.lastX-t,i.data)for(let l=0;l<i.data.x.length;l++)i.data.x[l]-=t}if(n.ntuples?.nucleus&&n.ntuples.symbol)for(let t=0;t<n.ntuples.nucleus.length;t++){let l=n.ntuples.symbol[t],r=n.ntuples.nucleus[t];if(l.match(/^[F|T]/)&&!r){if(l.match(/[F|T]1/))if(n.tmp.$NUC2&&typeof n.tmp.$NUC2==\"string\")n.ntuples.nucleus[t]=n.tmp.$NUC2;else{let p=n.ntuples.symbol.indexOf(l.replace(/^([F|T]).*/,\"$12\"));p&&n.ntuples.nucleus[p]&&(n.ntuples.nucleus[t]=n.ntuples.nucleus[p])}l.match(/[F|T]2/)&&typeof n.tmp.$NUC1==\"string\"&&(n.ntuples.nucleus[t]=n.tmp.$NUC1)}l.match(/[F|T]2/)&&(n.yType=n.ntuples.nucleus[0],n.xType&&!W(n.xType)&&(n.xType=n.ntuples.nucleus[1]))}if(s&&n.ntuples?.symbol&&n.ntuples.nucleus){let t=\"\",l=n.ntuples.symbol.indexOf(i.pageSymbol);n.ntuples.units?.[l]&&(t=n.ntuples.units[l]);let{nucleus:r}=n.ntuples;if(!t.toLowerCase().match(/(ppm|seconds)/)&&r.length>1){if(l!==0){let h=\"Not sure about this ntuples format\";if(m){m.warn(h);continue}else throw new Error(h)}let{nucleus:p}=n.ntuples,c=W(p[0]),b=W(p[1]);if(!c||!b){let h=`Problem with determination of gyromagnetic ratio for ${p.join(\"-\")}`;if(m)m.error(h);else throw new Error(h)}else{let h=c/b*s;i.pageValue/=h}}}}}}function J(e){let m=e.spectra[0].data;e.chromatogram={times:m.x.slice(),series:{intensity:{dimension:1,data:m.y.slice()}}}}function q(e,m,n){H(e,n.logger),pe(e,n);for(let s of e){if(Object.keys(s.ntuples).length>0){let f=[],i=Object.keys(s.ntuples);for(let t of i){let l=s.ntuples[t];if(l)for(let r=0;r<l.length;r++)f[r]||(f[r]={}),f[r][t]=l[r]}s.ntuples=f}s.twoD&&n.wantXY&&(G(s,n),n.logger?.trace({profiling:!0},\"Finished countour plot calculation\"),n.keepSpectra||delete s.spectra),n.chromatogram&&(s.spectra.length>1?te(s):J(s),n.logger?.trace({profiling:!0},\"Finished chromatogram calculation\")),delete s.tmp}}function pe(e,m){for(let n of e)for(let s in n.meta){let f=n.meta[s];if(typeof f==\"string\"){if(f.startsWith(\"{\")){if(!f.includes(\":\")&&f.endsWith(\"}\")){let i=f.slice(1,-1).split(/[,; ]+/).filter(Boolean);for(let t=0;t<i.length;t++)n.meta[s+String(t)]=m.dynamicTyping?ae(i[t]):i[t]}}else if(f.startsWith(\"(\")){let i=f.split(/\\r?\\n/),t=/^\\((?<from>\\d+)\\.\\.(?<to>\\d+)\\).*$/;if(t.test(i[0])){let[l,r]=i[0].match(t)?.slice(1).map(Number)??[],p=i.slice(1).join(\" \").split(/[,; ]+/).filter(Boolean);for(let c=l;c<=r;c++)m.dynamicTyping&&typeof p[c-l]==\"string\"?n.meta[s+String(c)]=ae(p[c-l]):n.meta[s+String(c)]=p[c-l]}}}}}function z(e,m,n){let s=-1,f=-1,i=\"\",t=\"\";if(n.indexOf(\"++\")>0)i=n.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/,\"$1\"),t=n.replace(/.*\\.\\.([a-zA-Z0-9]+).*/,\"$1\");else{n=n.replaceAll(/[^a-zA-Z%]/g,\"\"),i=n.charAt(0),t=n.charAt(1),m.variables={};for(let l of n){let r=l.toLowerCase(),p=e.ntuples.symbol?.indexOf(l)||0;if(p===-1)throw new Error(`Symbol undefined: ${l}`);m.variables[r]={};for(let c in e.ntuples)e.ntuples[c]?.[p]&&(m.variables[r][c.replace(/^var/,\"\")]=e.ntuples[c]?.[p])}}s=e.ntuples.symbol?.indexOf(i)??-1,f=e.ntuples.symbol?.indexOf(t)??-1,s===-1&&(s=0),f===-1&&(f=0),e.ntuples.first&&(e.ntuples.first.length>s&&(m.firstX=e.ntuples.first[s]),e.ntuples.first.length>f&&(m.firstY=e.ntuples.first[f])),e.ntuples.last&&(e.ntuples.last.length>s&&(m.lastX=e.ntuples.last[s]),e.ntuples.last.length>f&&(m.lastY=e.ntuples.last[f])),e.ntuples.vardim&&e.ntuples.vardim.length>s&&(m.nbPoints=e.ntuples.vardim[s]),e.ntuples.factor&&(e.ntuples.factor.length>s&&(m.xFactor=e.ntuples.factor[s]),e.ntuples.factor.length>f&&(m.yFactor=e.ntuples.factor[f])),e.ntuples.units&&(e.ntuples.units.length>s&&(e.ntuples.varname?.[s]?m.xUnits=`${e.ntuples.varname[s]} [${e.ntuples.units[s]}]`:m.xUnits=e.ntuples.units[s]),e.ntuples.units.length>f&&(e.ntuples.varname?.[f]?m.yUnits=`${e.ntuples.varname[f]} [${e.ntuples.units[f]}]`:m.yUnits=e.ntuples.units[f]))}function w(e){e.xFactor||(e.xFactor=1),e.yFactor||(e.yFactor=1)}var L=/[ \\t]*,[ \\t]*/,ge={removeComments:!1,keepRecordsRegExp:/^$/,canonicDataLabels:!0,canonicMetadataLabels:!1,dynamicTyping:!0,withoutXY:!1,noTrimRegExp:/^$/,chromatogram:!1,keepSpectra:!1,noContour:!1,nbContourLevels:7,noiseMultiplier:5};function mt(e,m={}){e=be(e);let n={...ge,...m};n.logger?.debug(\"Starting jcamp conversion\"),n.wantXY=!n.withoutXY,n.start=Date.now();let s=[],f={entries:[],flatten:[]},i={children:[],spectra:[],ntuples:{},info:{},meta:{},tmp:{}},t=i,l=[],r={data:{}};n.logger?.trace({profiling:!0},\"Before split to LDRS\");let p=e.replaceAll(/[\\r\\n]+##/g,`\n##`).split(`\n##`);n.logger?.trace({profiling:!0},\"Split to LDRS\"),p[0]&&(p[0]=p[0].replace(/^[\\r\\n ]*##/,\"\"));for(let c of p){let b=c.indexOf(\"=\"),h=b>0?c.slice(0,Math.max(0,b)):c,o=b>0?h.match(n.noTrimRegExp)?c.slice(Math.max(0,b+1)):c.slice(Math.max(0,b+1)).trim():\"\",a=h.replaceAll(/[_ -]/g,\"\").toUpperCase();if(a===\"DATATABLE\"){let u=o.indexOf(`\n`);if(u===-1&&(u=o.indexOf(\"\\r\")),u>0){let d=o.slice(0,Math.max(0,u)).split(/[ ,;\\t]+/);z(t,r,d[0]),r.datatable=d[0],d[1]?.includes(\"PEAKS\")?a=\"PEAKTABLE\":d[1]&&(d[1].indexOf(\"XYDATA\")||d[0].indexOf(\"++\")>0)&&(a=\"XYDATA\",r.nbPoints&&r.lastX!==void 0&&r.firstX!==void 0&&(r.deltaX=(r.lastX-r.firstX)/(r.nbPoints-1)))}}if(a===\"XYDATA\"){n.wantXY&&(w(r),o.match(/.*\\+\\+.*/)?(r.nbPoints&&r.lastX!==void 0&&r.firstX!==void 0&&(r.deltaX=(r.lastX-r.firstX)/(r.nbPoints-1)),k(r,o,n)):P(r,o,n),t?.spectra.push(r),r={data:{}});continue}else if(a===\"PEAKTABLE\"){n.wantXY&&(w(r),P(r,o,n),t?.spectra.push(r),r={data:{}});continue}if(a===\"PEAKASSIGNMENTS\"){n.wantXY&&(o.match(/.*[^A-Z]*.*/)&&V(r,o),t?.spectra.push(r),r={data:{}});continue}if(n.removeComments&&(o=o.split(/\\r?\\n/).map(u=>u.replace(/ *\\$\\$.*$/,\"\")).join(`\n`)),a===\"TITLE\"){let u=t;u.children||(u.children=[]),t={spectra:[],ntuples:{},info:{},meta:{},tmp:{}},u.children.push(t),l.push(u),s.push(t),t.title=o}else a===\"DATATYPE\"?(t.dataType=o,o.match(/^nd|\\snd\\s/i)&&(t.twoD=!0)):a===\"NTUPLES\"?o.match(/^nd|\\snd\\s/i)&&(t.twoD=!0):a===\"DATACLASS\"?t.dataClass=o:a===\"JCAMPDX\"?t.jcampDX=M(o):a===\"JCAMPCS\"?t.jcampCS=M(o):a===\"XUNITS\"?r.xUnits=o:a===\"YUNITS\"?r.yUnits=o:a===\"FIRSTX\"?r.firstX=Number(o):a===\"LASTX\"?r.lastX=Number(o):a===\"FIRSTY\"?r.firstY=Number(o):a===\"LASTY\"?r.lastY=Number(o):a===\"NPOINTS\"?r.nbPoints=Number(o):a===\"XFACTOR\"?r.xFactor=Number(o):a===\"YFACTOR\"?r.yFactor=Number(o):a===\"MAXX\"?r.maxX=Number(o):a===\"MINX\"?r.minX=Number(o):a===\"MAXY\"?r.maxY=Number(o):a===\"MINY\"?r.minY=Number(o):a===\"DELTAX\"?r.deltaX=Number(o):a===\".OBSERVEFREQUENCY\"||a===\"$SFO1\"?r.observeFrequency||(r.observeFrequency=Number(o)):a===\".OBSERVENUCLEUS\"?r.xType||(t.xType=o.replaceAll(/[^a-zA-Z0-9]/g,\"\")):a===\"$OFFSET\"?(t.shiftOffsetNum=0,r.shiftOffsetVal||(r.shiftOffsetVal=Number(o))):a===\"$REFERENCEPOINT\"||(a===\"VARNAME\"?t.ntuples.varname=o.split(L):a===\"SYMBOL\"?t.ntuples.symbol=o.split(L):a===\"VARTYPE\"?t.ntuples.vartype=o.split(L):a===\"VARFORM\"?t.ntuples.varform=o.split(L):a===\"VARDIM\"?t.ntuples.vardim=E(o.split(L)):a===\"UNITS\"?t.ntuples.units=o.split(L):a===\"FACTOR\"?t.ntuples.factor=E(o.split(L)):a===\"FIRST\"?t.ntuples.first=E(o.split(L)):a===\"LAST\"?t.ntuples.last=E(o.split(L)):a===\"MIN\"?t.ntuples.min=E(o.split(L)):a===\"MAX\"?t.ntuples.max=E(o.split(L)):a===\".NUCLEUS\"?t.ntuples&&(t.ntuples.nucleus=o.split(L).map(u=>u.replaceAll(/[^a-zA-Z0-9]/g,\"\"))):a===\"PAGE\"?(r.page=o.trim(),r.pageValue=Number(o.replace(/^.*=/,\"\")),r.pageSymbol=r.page.replace(/[=].*/,\"\")):a===\"RETENTIONTIME\"?r.pageValue=Number(o):ne(a)?r[U(a)]=o:a===\"SAMPLEDESCRIPTION\"?r.sampleDescription=o:a.startsWith(\"$NUC\")?!t.tmp[a]&&!o.includes(\"off\")&&(t.tmp[a]=o.replaceAll(/[<>]/g,\"\")):a===\"END\"&&(t=l.pop()));if(t?.info&&t.meta&&a.match(n.keepRecordsRegExp)){let u,d;h.startsWith(\"$\")?(d=n.canonicMetadataLabels?a.slice(1):h.slice(1),u=t.meta):(d=n.canonicDataLabels?a:h,u=t.info),n.dynamicTyping&&(o=de(o)),u[d]?(Array.isArray(u[d])||(u[d]=[u[d]]),u[d].push(o)):u[d]=o}}if(n.logger?.trace({profiling:!0},\"Finished parsing\"),q(s,f,n),n.logger?.trace({profiling:!0},\"Total time\"),f.entries=i.children||[],f.flatten=s,n.logger){n.logger.debug(\"Finished jcamp conversion\");for(let c of f.flatten)n.logger.debug(`${c.dataType} - ${c.title}`)}return f}function pt(e,m){let{logger:n,OCL:s}=m;if(!e.info.ATOMLIST||!e.info.BONDLIST){n?.warn(\"No ATOMLIST or BONDLIST in the JCAMP-CS entry\");return}Ae(e,n);let f=ye(e.info.ATOMLIST),i=xe(e.info.BONDLIST),t=Ce(e.info.CHARGE,n),l=he(s,f,i,t,n);return{molecule:l,molfile:l.toMolfile()}}function he(e,m,n,s,f){let i={S:e.Molecule.cBondTypeSingle,D:e.Molecule.cBondTypeDouble,T:e.Molecule.cBondTypeTriple,Q:e.Molecule.cBondTypeQuadruple},t={},l=new e.Molecule(m.length,n.length);for(let r of m){let p=e.Molecule.getAtomicNoFromLabel(r.element);p||(f?.error(`Atomic number of ${r.element} could not be determined`),p=e.Molecule.getAtomicNoFromLabel(\"X\")),t[r.atomNumber]=l.addAtom(p),l.setAtomMapNo(t[r.atomNumber],r.atomNumber,!1)}for(let r of n){if(t[r.atomNumber1]===void 0){f?.error(`A bond goes to atomNumber ${r.atomNumber1} that does not exists`);continue}if(t[r.atomNumber2]===void 0){f?.error(`A bond goes to atomNumber ${r.atomNumber2} that does not exists`);continue}let p=l.addBond(t[r.atomNumber1],t[r.atomNumber2]);l.setBondType(p,i[r.bondType])}for(let r of s){if(t[r.atomNumber]===void 0){f?.error(`A charge goes to atomNumber ${r.atomNumber} that does not exists`);continue}l.setAtomCharge(t[r.atomNumber],r.value)}return l}function ye(e){let m=e.split(/\\r?\\n/).map(s=>M(s)).filter(Boolean),n=[];for(let s of m){let[f,i,t]=s.trim().split(/\\s+/);n.push({atomNumber:Number(f),element:i,nbImplicitHydrogens:t?.length>0?Number(t):void 0})}return n}function xe(e){let m=e.split(/\\r?\\n/).map(s=>M(s)).filter(Boolean),n=[];for(let s of m){let[f,i,t]=s.trim().split(/\\s+/);n.push({atomNumber1:Number(f),atomNumber2:Number(i),bondType:t})}return n}function Ce(e,m){if(!e)return[];let n=e.split(/\\r?\\n/).map(f=>M(f)).filter(Boolean),s=[];for(let f of n){let[i,t,l]=f.trim().split(/\\s+/);l!==void 0&&m?.warn(\"Charge on multiple atom is not supported\"),s.push({atomNumber:Number(t),value:Number(i)})}return s}function Ae(e,m){let n=[\"STEREOPAIR\",\"STEREOCENTER\",\"RADICAL\",\"STEREOMOLECULE\"];for(let s of n)e.info[s]&&m?.warn(`JCAMP-CS parser do not support: ${s}`)}export{mt as convert,Te as createTree,pt as parseJcampCS};\n","import { convert } from 'jcampconverter';\nimport { Analysis } from '../Analysis.js';\n/**\n * Creates a new Analysis from a JCAMP string\n * @param jcamp - String containing the JCAMP data\n * @param [options={}]\n * @param [options.id=Math.random()]\n * @param [options.label=options.id] - human redeable label\n * @param [options.spectrumCallback] - a callback to apply on variables when creating spectrum\n * @returns - New class element with the given data\n */\nexport function fromJcamp(jcamp, options = {}) {\n    const analysis = new Analysis(options);\n    addJcamp(analysis, jcamp);\n    return analysis;\n}\nfunction addJcamp(analysis, jcamp) {\n    const converted = convert(jcamp, {\n        keepRecordsRegExp: /.*/,\n    });\n    for (const entry of converted.flatten) {\n        if (!entry.spectra?.[0])\n            continue;\n        const currentSpectrum = entry.spectra[0];\n        // we ensure variables\n        if (!currentSpectrum.variables) {\n            const variables = {};\n            currentSpectrum.variables = variables;\n            variables.x = {\n                label: currentSpectrum.xUnits,\n                symbol: 'X',\n                data: currentSpectrum.data.x || currentSpectrum.data.X,\n            };\n            variables.y = {\n                label: currentSpectrum.yUnits,\n                symbol: 'Y',\n                data: currentSpectrum.data.y || currentSpectrum.data.Y,\n            };\n        }\n        else {\n            for (const key in currentSpectrum.variables) {\n                const variable = currentSpectrum.variables[key];\n                if (variable.label)\n                    continue;\n                variable.label = variable.name || variable.symbol || key;\n                if (variable.units && !variable.label.includes(variable.units)) {\n                    // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n                    variable.label += ` [${variable.units}]`;\n                }\n            }\n        }\n        analysis.pushSpectrum(currentSpectrum.variables, {\n            dataType: entry.dataType,\n            title: entry.title,\n            meta: entry.meta,\n        });\n    }\n}\n//# sourceMappingURL=fromJcamp.js.map","import { ensureString } from 'ensure-string';\nimport { xyUniqueX, xMaxValue, xIsMonotonic } from 'ml-spectra-processing';\n/**\n * General internal parsing function\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns parsed text file with column information\n */\nexport function parse(text, options = {}) {\n    const { rescale = false, uniqueX = false, bestGuess = false, \n    //@ts-expect-error old library used this property and we want to throw an error so that people are forced to migrate\n    keepInfo, } = options;\n    let { xColumn = 0, yColumn = 1, numberColumns = Number.MAX_SAFE_INTEGER, maxNumberColumns = Number.MAX_SAFE_INTEGER, minNumberColumns = 2, } = options;\n    if (keepInfo !== undefined) {\n        throw new Error('keepInfo has been deprecated, pelase use the new method parseXYAndKeepInfo');\n    }\n    text = ensureString(text);\n    maxNumberColumns = Math.max(maxNumberColumns, xColumn + 1, yColumn + 1);\n    minNumberColumns = Math.max(xColumn + 1, yColumn + 1, minNumberColumns);\n    const lines = text.split(/[\\r\\n]+/);\n    let matrix = [];\n    const info = [];\n    let position = 0;\n    lines.forEach((line) => {\n        line = line.trim();\n        // we will consider only lines that contains only numbers\n        if (/[0-9]+/.test(line) && /^[0-9eE,;. \\t+-]+$/.test(line)) {\n            let fields = line.split(/,[; \\t]+|[; \\t]+/);\n            if (fields.length === 1) {\n                fields = line.split(/[,; \\t]+/);\n            }\n            if (fields &&\n                fields.length >= minNumberColumns && // we filter lines that have not enough or too many columns\n                fields.length <= maxNumberColumns) {\n                matrix.push(fields.map((value) => parseFloat(value.replace(',', '.'))));\n                position++;\n            }\n        }\n        else if (line) {\n            info.push({ position, value: line });\n        }\n    });\n    if (bestGuess) {\n        if (matrix[0] &&\n            matrix[0].length === 3 &&\n            options.xColumn === undefined &&\n            options.yColumn === undefined) {\n            // is the first column a seuqnetial number ?\n            let skipFirstColumn = true;\n            for (let i = 0; i < matrix.length - 1; i++) {\n                if (Math.abs(matrix[i][0] - matrix[i + 1][0]) !== 1) {\n                    skipFirstColumn = false;\n                }\n            }\n            if (skipFirstColumn) {\n                xColumn = 1;\n                yColumn = 2;\n            }\n        }\n        if (matrix[0] && matrix[0].length > 3) {\n            const xs = [];\n            for (const row of matrix) {\n                for (let i = xColumn; i < row.length; i += 2) {\n                    xs.push(row[i]);\n                }\n            }\n            if (xIsMonotonic(xs)) {\n                numberColumns = 2;\n            }\n        }\n    }\n    if (numberColumns) {\n        const newMatrix = [];\n        for (const row of matrix) {\n            for (let i = 0; i < row.length; i += numberColumns) {\n                newMatrix.push(row.slice(i, i + numberColumns));\n            }\n        }\n        matrix = newMatrix;\n    }\n    let result = {\n        x: matrix.map((row) => row[xColumn]),\n        y: matrix.map((row) => row[yColumn]),\n    };\n    if (uniqueX) {\n        result = xyUniqueX(result, { algorithm: 'sum' });\n    }\n    if (rescale) {\n        const maxY = xMaxValue(result.y);\n        for (let i = 0; i < result.y.length; i++) {\n            result.y[i] /= maxY;\n        }\n    }\n    return {\n        info,\n        data: result,\n    };\n}\n//# sourceMappingURL=parse.js.map","import { parse } from './parse';\nexport * from './ParseXYOptions';\n/**\n * Parse a text-file and convert it to an object {x:[], y:[]}\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns - The parsed data\n */\nexport function parseXY(text, options = {}) {\n    return parse(text, options).data;\n}\n/**\n * Parse a text-file and returns the parsed data and information about the columns\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns - The parsed data with information about the columns\n */\nexport function parseXYAndKeepInfo(text, options = {}) {\n    return parse(text, options);\n}\n//# sourceMappingURL=index.js.map","export const addInfoData = (data, options = {}) => {\n    const { keys = Object.keys(data), prefix = '##$' } = options;\n    let header = '';\n    for (const key of keys) {\n        header +=\n            typeof data[key] === 'object'\n                ? `${prefix}${key}=${JSON.stringify(data[key])}\\n`\n                : `${prefix}${key}=${data[key]}\\n`;\n    }\n    return header;\n};\n//# sourceMappingURL=addInfoData.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkMatrix(data) {\n    if (!isAnyArray(data) || !isAnyArray(data[0])) {\n        throw new Error(`2D data should be a matrix`);\n    }\n}\n//# sourceMappingURL=checkMatrix.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkNumberOrArray(data) {\n    if (!isAnyArray(data) || isAnyArray(data[0])) {\n        throw new Error(`x and y data should be an array of numbers`);\n    }\n}\n//# sourceMappingURL=checkNumberOrArray.js.map","import { isAnyArray } from 'is-any-array';\nimport { matrixMinMaxZ, xMinMaxValues, } from 'ml-spectra-processing';\nimport { checkMatrix } from './checkMatrix';\nimport { checkNumberOrArray } from './checkNumberOrArray';\nexport function getExtremeValues(data) {\n    if (isAnyArray(data[0])) {\n        checkMatrix(data);\n        const firstRow = data[0];\n        return {\n            firstLast: {\n                first: firstRow[0],\n                last: data[data.length - 1][data[0].length - 1],\n            },\n            minMax: matrixMinMaxZ(data),\n        };\n    }\n    checkNumberOrArray(data);\n    return {\n        firstLast: {\n            first: data[0],\n            last: data[data.length - 1],\n        },\n        minMax: xMinMaxValues(data),\n    };\n}\n//# sourceMappingURL=getExtremeValues.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getExtremeValues } from './utils/getExtremeValues';\n/**\n * Parse from a xyxy data array\n * @param variables - Variables to convert to jcamp\n * @param [options={}] - options that allows to add meta data in the jcamp\n * @return JCAMP-DX text file corresponding to the variables\n */\nexport default function creatorNtuples(variables, options) {\n    const { meta = {}, info = {} } = options;\n    const { title = '', owner = '', origin = '', dataType = '', ...resInfo } = info;\n    const symbol = [];\n    const varName = [];\n    const varType = [];\n    const varDim = [];\n    const units = [];\n    const first = [];\n    const last = [];\n    const min = [];\n    const max = [];\n    const keys = Object.keys(variables);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const variable = variables[key];\n        if (!variable)\n            continue;\n        const name = variable?.label.replace(/ *\\[.*/, '');\n        const unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        symbol.push(variable.symbol || key);\n        varName.push(name || key);\n        varDim.push(variable.data.length);\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        if (variable.isDependent !== undefined) {\n            varType.push(variable.isDependent ? 'DEPENDENT' : 'INDEPENDENT');\n        }\n        else {\n            varType.push(variable.isDependent !== undefined\n                ? !variable.isDependent\n                : i === 0\n                    ? 'INDEPENDENT'\n                    : 'DEPENDENT');\n        }\n        units.push(variable.units || unit || '');\n    }\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##DATA CLASS= NTUPLES\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##FIRST=     ${first.join()}\n##LAST=      ${last.join()}\n##MIN=       ${min.join()}\n##MAX=       ${max.join()}\n##PAGE= N=1\\n`;\n    header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n    for (let i = 0; i < variables.x.data.length; i++) {\n        const point = [];\n        for (const key of keys) {\n            const variable = variables[key];\n            if (!variable)\n                continue;\n            point.push(variable.data[i]);\n        }\n        header += `${point.join('\\t')}\\n`;\n    }\n    header += `##END NTUPLES= ${dataType}\\n`;\n    header += '##END=\\n##END=';\n    return header;\n}\n//# sourceMappingURL=creatorNtuples.js.map","export function getFactorNumber(minMax, maxValue = 2 ** 31 - 1) {\n    let factor;\n    if (minMax.min < 0) {\n        if (minMax.max > 0) {\n            factor = Math.max(-minMax.min, minMax.max) / maxValue;\n        }\n        else {\n            factor = -minMax.min / maxValue;\n        }\n    }\n    else {\n        factor = minMax.max / maxValue;\n    }\n    return factor;\n}\n//# sourceMappingURL=getFactorNumber.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nimport { getFactorNumber } from './getFactorNumber';\nexport function getBestFactor(array, options = {}) {\n    const { maxValue, factor, minMax } = options;\n    if (factor !== undefined) {\n        return factor;\n    }\n    // is there non integer number ?\n    let onlyInteger = true;\n    for (const y of array) {\n        if (Math.round(y) !== y) {\n            onlyInteger = false;\n            break;\n        }\n    }\n    if (onlyInteger) {\n        return 1;\n    }\n    // we need to rescale the values\n    // need to find the max and min values\n    const extremeValues = minMax || xMinMaxValues(array);\n    return getFactorNumber(extremeValues, maxValue);\n}\n//# sourceMappingURL=getBestFactor.js.map","/**\n * Reconvert number to original value\n * @param number Number used for computation\n * @param factor Multiplying factor\n * @returns Original value\n */\nexport function getNumber(number, factor) {\n    if (factor !== 1)\n        number /= factor;\n    const rounded = Math.round(number);\n    if (rounded !== number && Math.abs(rounded - number) <= Number.EPSILON) {\n        return rounded;\n    }\n    return number;\n}\n//# sourceMappingURL=getNumber.js.map","import { getNumber } from './getNumber';\nexport function peakTableCreator(data, options = {}) {\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    let firstX = Number.POSITIVE_INFINITY;\n    let lastX = Number.NEGATIVE_INFINITY;\n    let firstY = Number.POSITIVE_INFINITY;\n    let lastY = Number.NEGATIVE_INFINITY;\n    const lines = [];\n    for (let i = 0; i < data.x.length; i++) {\n        const x = data.x[i];\n        const y = data.y[i];\n        if (firstX > x) {\n            firstX = x;\n        }\n        if (lastX < x) {\n            lastX = x;\n        }\n        if (firstY > y) {\n            firstY = y;\n        }\n        if (lastY < y) {\n            lastY = y;\n        }\n    }\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##PEAK TABLE=(XY..XY)');\n    for (let i = 0; i < data.x.length; i++) {\n        lines.push(`${getNumber(data.x[i], xFactor)} ${getNumber(data.y[i], yFactor)}`);\n    }\n    return lines;\n}\n//# sourceMappingURL=peakTableCreator.js.map","import { xDivide } from 'ml-spectra-processing';\nexport function rescaleAndEnsureInteger(data, factor = 1) {\n    if (factor === 1)\n        return data.map((value) => Math.round(value));\n    return xDivide(data, factor).map((value) => Math.round(value));\n}\n//# sourceMappingURL=rescaleAndEnsureInteger.js.map","/**\n * class encodes a integer vector as a String in order to store it in a text file.\n * The algorithms used to encode the data are describe in:\n *            http://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n */\nconst newLine = '\\n';\nconst pseudoDigits = [\n    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n    ['@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],\n    ['@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n    ['%', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'],\n    ['%', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'],\n    [' ', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 's'],\n];\nconst SQZ_P = 1;\nconst SQZ_N = 2;\nconst DIF_P = 3;\nconst DIF_N = 4;\nconst DUP = 5;\nconst maxLinelength = 100;\n/**\n * This function encodes the given vector. The xyEncoding format is specified by the\n * xyEncoding option\n * @param xyEncoding: ('FIX','SQZ','DIF','DIFDUP','CVS','PAC') Default 'DIFDUP'\n * @return {string}\n */\nexport function vectorEncoder(data, firstX, intervalX, xyEncoding) {\n    switch (xyEncoding) {\n        case 'FIX':\n            return fixEncoding(data, firstX, intervalX);\n        case 'SQZ':\n            return squeezedEncoding(data, firstX, intervalX);\n        case 'DIF':\n            return differenceEncoding(data, firstX, intervalX);\n        case 'DIFDUP':\n            return differenceDuplicateEncoding(data, firstX, intervalX);\n        case 'CSV':\n            return commaSeparatedValuesEncoding(data, firstX, intervalX);\n        case 'PAC':\n            return packedEncoding(data, firstX, intervalX);\n        default:\n            return differenceEncoding(data, firstX, intervalX);\n    }\n}\n/**\n * @private\n * No data compression used. The data is separated by a comma(',').\n */\nexport function commaSeparatedValuesEncoding(data, firstX, intervalX) {\n    return fixEncoding(data, firstX, intervalX, ',');\n}\n/**\n * @private\n * No data compression used. The data is separated by the specified separator.\n */\nexport function fixEncoding(data, firstX, intervalX, separator = ' ') {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += `${separator}${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += `${separator}${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * No data compression used. The data is separated by the sign of the number.\n */\nexport function packedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += data[j] < 0 ? String(data[j++]) : `+${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += data[i] < 0 ? String(data[i]) : `+${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Data compression is possible using the squeezed form (SQZ) in which the delimiter, the leading digit,\n * and sign are replaced by a pseudo-digit from Table 1. For example, the Y-values 30, 32 would be\n * represented as C0C2.\n */\nexport function squeezedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    // String outputData = new String();\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 10) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 10; i++) {\n            outputData += squeezedDigit(data[j++].toString());\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += squeezedDigit(data[i].toString());\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Duplicate suppression xyEncoding\n */\nexport function differenceDuplicateEncoding(data, firstX, intervalX) {\n    let mult = 0;\n    let index = 0;\n    let charCount = 0;\n    // We built a string where we store the encoded data.\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (let i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    // We simulate a line carry\n    const numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // Start line\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else if (diffData[index - 1] === diffData[index]) {\n            // Try to insert next difference\n            mult++;\n        }\n        else if (mult > 0) {\n            // Now we know that it can be in line\n            mult++;\n            encodedNumber = duplicateDigit(mult.toString());\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n            mult = 0;\n            index--;\n        }\n        else {\n            // Check if it fits, otherwise start a new line\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                // start a new line\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    if (mult > 0) {\n        encodedData += duplicateDigit((mult + 1).toString());\n    }\n    // We insert the last data from fid. It is done to control of data\n    // The last line start with the number of datas in the fid.\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Differential xyEncoding\n */\nexport function differenceEncoding(data, firstX, intervalX) {\n    let index = 0;\n    let charCount = 0;\n    let i;\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    const numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // We convert the first number.\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else {\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    // We insert the last number from data. It is done to control of data\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Convert number to the ZQZ format, using pseudo digits.\n */\nfunction squeezedDigit(num) {\n    let sqzDigits = '';\n    if (num.startsWith('-')) {\n        sqzDigits += pseudoDigits[SQZ_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            sqzDigits += num.substring(2);\n        }\n    }\n    else {\n        sqzDigits += pseudoDigits[SQZ_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            sqzDigits += num.substring(1);\n        }\n    }\n    return sqzDigits;\n}\n/**\n * Convert number to the DIF format, using pseudo digits.\n */\nfunction differenceDigit(num) {\n    let diffDigits = '';\n    if (num.startsWith('-')) {\n        diffDigits += pseudoDigits[DIF_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            diffDigits += num.substring(2);\n        }\n    }\n    else {\n        diffDigits += pseudoDigits[DIF_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            diffDigits += num.substring(1);\n        }\n    }\n    return diffDigits;\n}\n/**\n * Convert number to the DUP format, using pseudo digits.\n */\nfunction duplicateDigit(num) {\n    let dupDigits = '';\n    dupDigits += pseudoDigits[DUP][num.charCodeAt(0) - 48];\n    if (num.length > 1) {\n        dupDigits += num.substring(1);\n    }\n    return dupDigits;\n}\n//# sourceMappingURL=vectorEncoder.js.map","import { rescaleAndEnsureInteger } from './rescaleAndEnsureInteger';\nimport { vectorEncoder } from './vectorEncoder';\nexport function xyDataCreator(data, options = {}) {\n    const { xyEncoding = 'DIF' } = options;\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    const firstX = data.x[0];\n    const lastX = data.x[data.x.length - 1];\n    const firstY = data.y[0];\n    const lastY = data.y[data.y.length - 1];\n    const nbPoints = data.x.length;\n    const deltaX = (lastX - firstX) / (nbPoints - 1);\n    const lines = [];\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##DELTAX=${deltaX}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##XYDATA=(X++(Y..Y))');\n    const line = vectorEncoder(rescaleAndEnsureInteger(data.y, yFactor), firstX / xFactor, deltaX / xFactor, xyEncoding);\n    if (line)\n        lines.push(line);\n    return lines;\n}\n//# sourceMappingURL=xyDataCreator.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getBestFactor } from './utils/getBestFactor';\nimport { peakTableCreator } from './utils/peakTableCreator';\nimport { xyDataCreator } from './utils/xyDataCreator';\n/**\n * Create a jcamp\n * @param data object of array\n * @param [options={meta:{},info:{}} - metadata object\n * @returns JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n    const { meta = {}, info = {}, xyEncoding } = options;\n    const { title = '', owner = '', origin = '', dataType = '', xUnits = '', yUnits = '', ...resInfo } = info;\n    let { xFactor, yFactor } = info;\n    data = { x: data.x, y: data.y };\n    let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    // we leave the header and utf8 fonts ${header.replace(/[^\\t\\n\\x20-\\x7F]/g, '')\n    if (xyEncoding) {\n        xFactor = getBestFactor(data.x, { factor: xFactor });\n        yFactor = getBestFactor(data.y, { factor: yFactor });\n        return `${header}##NPOINTS=${data.x.length}\n${xyDataCreator(data, { info: { xFactor, yFactor }, xyEncoding }).join('\\n')}\n##END=`;\n    }\n    else {\n        if (xFactor === undefined)\n            xFactor = 1;\n        if (yFactor === undefined)\n            yFactor = 1;\n        if (xFactor !== 1) {\n            //@ts-expect-error xFactor is always defined\n            data.x = data.x.map((value) => value / xFactor);\n        }\n        if (yFactor !== 1) {\n            //@ts-expect-error yFactor is always defined\n            data.y = data.y.map((value) => value / yFactor);\n        }\n        return `${header}##NPOINTS=${data.x.length}\n${peakTableCreator(data, { info: { xFactor, yFactor } }).join('\\n')}\n##END=`;\n    }\n}\n//# sourceMappingURL=fromJSON.js.map","import creatorNtuples from './creatorNtuples';\nimport { fromJSON } from './fromJSON';\nimport { checkNumberOrArray } from './utils/checkNumberOrArray';\n/**\n * Create a jcamp from variables\n */\nexport function fromVariables(\n/** object of variables */\nvariables, options = {}) {\n    const { info = {}, meta = {}, forceNtuples = false } = options;\n    const jcampOptions = {\n        info,\n        meta,\n    };\n    const keys = Object.keys(variables).map((key) => key.toLowerCase());\n    if (!forceNtuples && keys.length === 2) {\n        const x = variables.x;\n        const xLabel = x.label || 'x';\n        if (variables.x.units) {\n            if (xLabel.includes(variables.x.units)) {\n                jcampOptions.info.xUnits = xLabel;\n            }\n            else {\n                jcampOptions.info.xUnits = `${xLabel} (${variables.x.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.xUnits = xLabel;\n        }\n        const y = variables.y;\n        const yLabel = y.label || 'y';\n        if (variables.y.units) {\n            if (yLabel.includes(variables.y.units)) {\n                jcampOptions.info.xUnits = yLabel;\n            }\n            else {\n                jcampOptions.info.yUnits = `${yLabel} (${variables.y.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.yUnits = yLabel;\n        }\n        const xData = variables.x.data;\n        const yData = variables.y.data;\n        checkNumberOrArray(xData);\n        checkNumberOrArray(yData);\n        return fromJSON({ x: xData, y: yData }, jcampOptions);\n    }\n    else {\n        return creatorNtuples(variables, options);\n    }\n}\n//# sourceMappingURL=fromVariables.js.map","import { fromVariables } from 'convert-to-jcamp';\nexport function toJcamps(analysis, options = {}) {\n    const jcamps = [];\n    for (const spectrum of analysis.spectra) {\n        jcamps.push(getJcamp(spectrum, options));\n    }\n    return jcamps;\n}\nfunction getJcamp(spectrum, options) {\n    const { info = {}, meta = {} } = options;\n    const jcampOptions = {\n        options: {},\n        info: {\n            title: spectrum.title,\n            dataType: spectrum.dataType,\n            ...info,\n        },\n        meta: { ...spectrum.meta, ...meta },\n    };\n    return fromVariables(spectrum.variables, jcampOptions);\n}\n//# sourceMappingURL=toJcamps.js.map","import { toJcamps } from './toJcamps.js';\nexport function toJcamp(analysis, options = {}) {\n    return toJcamps(analysis, options).join('\\n');\n}\n//# sourceMappingURL=toJcamp.js.map","import { optimize as optimizePeak } from 'ml-spectra-fitting';\nimport { xFindClosestIndex, xMaxValue } from 'ml-spectra-processing';\n/**\n * Based on a x value we will return a peak\n * if you set optimize=True the returned positions will be\n * the closest actual datapoints to the fitted peak location.\n * the x/y of the fitted peak will be in xOptimized and yOptimized\n * @param spectrum\n * @param target\n * @param options\n */\nexport function peakPicking(spectrum, \n/** value to search (on x axis) */\ntarget, options = {}) {\n    const { xVariable = 'x', yVariable = 'y', optimize = false, max: isMax = true, shape = { kind: 'gaussian', fwhm: 1 }, } = options;\n    const x = spectrum.variables[xVariable]?.data;\n    let y;\n    if (!isMax) {\n        y = spectrum.variables[yVariable]?.data.slice(); // do deep copy as we maybe need to flip sign\n    }\n    else {\n        y = spectrum.variables[yVariable]?.data;\n    }\n    if (!x || !y)\n        return;\n    const targetIndex = xFindClosestIndex(x, target);\n    let optimizedPeak;\n    let optimizedIndex;\n    const result = {};\n    if (optimize) {\n        if (!isMax) {\n            const maximumY = xMaxValue(y);\n            for (let i = 0; i < y.length; i++) {\n                y[i] *= -1;\n                y[i] += maximumY; // This makes it somewhat more robust\n            }\n        }\n        optimizedPeak = optimizePeak({ x, y }, [{ x: x[targetIndex], y: y[targetIndex] }], { shape });\n        optimizedIndex = xFindClosestIndex(x, optimizedPeak.peaks[0].x);\n        for (const [key, variable] of Object.entries(spectrum.variables)) {\n            result[key] = variable.data[optimizedIndex];\n        }\n        result.optimized = optimizedPeak.peaks[0];\n    }\n    else {\n        for (const [key, variable] of Object.entries(spectrum.variables)) {\n            result[key] = variable.data[targetIndex];\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=peakPicking.js.map","import { getJSGraph } from './jsgraph/getJSGraph.js';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations.js';\nexport * from './AnalysesManager.js';\nexport * from './Analysis.js';\nexport * from './from/fromJcamp.js';\nexport * from './from/fromText.js';\nexport * from './to/toJcamp.js';\nexport * from './to/toJcamps.js';\nexport * from './to/toText.js';\nexport * from './to/toMatrix.js';\nexport * from './util/getNormalizedSpectrum.js';\nexport * from './util/peakPicking.js';\nexport * from './util/autoPeakPicking.js';\nexport * from './types/types.js';\nexport * from './types/AutoPeakPickingOptions.js';\nexport * from './types/PeakPickingOptions.js';\nexport * from './types/NormalizedSpectrumOptions.js';\nexport * from './types/PlotObject.js';\nexport * from './types/SpectrumSelector.js';\nexport { getReactPlotJSON } from './reactPlot/getReactPlotJSON.js';\nexport const JSGraph = {\n    getJSGraph,\n    getNormalizationAnnotations,\n};\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getBestPeaks = getBestPeaks;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array by taking the higher peaks and only\n * keep one per slot.\n * There are 2 different slots, the smallest one will have the\n * extra annotation `close` to true\n * @param {array} peaks - array of all the peaks\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.minValue=Number.NEGATIVE_INFINITY] - min Y value of the window to consider\n * @param {number} [options.maxValue=Number.POSITIVE_INFINITY] - max Y value of the window to consider\n * @param {number} [options.searchMonoisotopicRatio=0] - search previous peaks with at least ratio height\n * @param {number} [options.limit=20] - max number of peaks\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.numberSlots=10] - define the number of slots and indirectly the slot width\n * @param {number} [options.numberCloseSlots=50]\n * @returns {array} - copy of peaks with 'close' annotation\n */\nfunction getBestPeaks(peaks, options = {}) {\n    const { searchMonoisotopicRatio = 0, from = (0, ml_spectra_processing_1.xyObjectMinXPoint)(peaks).x, to = (0, ml_spectra_processing_1.xyObjectMaxXPoint)(peaks).x, limit = 20, threshold = 0.01, numberCloseSlots = 50, numberSlots = 10, minValue = Number.NEGATIVE_INFINITY, maxValue = Number.POSITIVE_INFINITY, } = options;\n    let slot = (to - from) / numberSlots;\n    let closeSlot = (to - from) / numberCloseSlots;\n    let selected = peaks\n        .filter((peak) => peak.x >= from && peak.x <= to)\n        .filter((peak) => peak.y >= minValue && peak.y <= maxValue)\n        .map((peak) => {\n        return {\n            peak,\n            monoisotopic: false,\n        };\n    });\n    if (searchMonoisotopicRatio) {\n        selected = selected.sort((a, b) => b.peak.x - a.peak.x);\n        for (let i = 0; i < selected.length; i++) {\n            let item = selected[i];\n            for (let j = i + 1; j < selected.length; j++) {\n                let nextItem = selected[j];\n                if (item.peak.x - nextItem.peak.x < 0.09)\n                    continue;\n                if (item.peak.x - nextItem.peak.x > 1.1)\n                    break;\n                if (nextItem.peak.y > item.peak.y * searchMonoisotopicRatio) {\n                    item.monoisotopic = false;\n                    nextItem.monoisotopic = true;\n                    break;\n                }\n            }\n        }\n    }\n    selected = selected.sort((a, b) => {\n        if (a.monoisotopic && !b.monoisotopic)\n            return -1;\n        if (b.monoisotopic && !a.monoisotopic)\n            return 1;\n        return b.peak.y - a.peak.y;\n    });\n    let toReturn = [];\n    if (selected.length === 0)\n        return [];\n    let minY = selected[0].peak.y * threshold;\n    peakLoop: for (let item of selected) {\n        if (item.peak.y < minY) {\n            if (item.monoisotopic) {\n                continue;\n            }\n            else {\n                break;\n            }\n        }\n        let close = false;\n        for (let existing of toReturn) {\n            if (Math.abs(existing.x - item.peak.x) < closeSlot) {\n                continue peakLoop;\n            }\n            if (Math.abs(existing.x - item.peak.x) < slot) {\n                close = true;\n            }\n        }\n        let newPeak = structuredClone(item.peak);\n        newPeak.close = close;\n        toReturn.push(newPeak);\n        if (toReturn.length === limit)\n            break;\n    }\n    return toReturn.sort((a, b) => a.x - b.x);\n}\n//# sourceMappingURL=getBestPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.atomSorter = atomSorter;\n/**\n * Implementation of the Hill system for sorting atoms\n * https://en.wikipedia.org/wiki/Chemical_formula#Hill_system\n * @param a - first atom to compare\n * @param b - second atom to compare\n * @returns A value suitable for use in Array.prototype.sort.\n */\nfunction atomSorter(a, b) {\n    if (a === b)\n        return 0;\n    if (a === 'C')\n        return -1;\n    if (b === 'C')\n        return 1;\n    if (a === 'H')\n        return -1;\n    if (b === 'H')\n        return 1;\n    if (a < b)\n        return -1;\n    return 1;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndIsotopes = void 0;\nexports.elementsAndIsotopes = [\n    {\n        number: 1,\n        isotopes: [\n            { nominal: 1, mass: 1.00782503223, abundance: 0.999885 },\n            { nominal: 2, mass: 2.01410177812, abundance: 0.000115 },\n            { nominal: 3, mass: 3.0160492779 },\n            { nominal: 4, mass: 4.02643 },\n            { nominal: 5, mass: 5.035311 },\n            { nominal: 6, mass: 6.04496 },\n            { nominal: 7, mass: 7.0527 },\n        ],\n        symbol: 'H',\n        mass: 1.0079407540557772,\n        name: 'Hydrogen',\n        monoisotopicMass: 1.00782503223,\n    },\n    {\n        number: 2,\n        isotopes: [\n            { nominal: 3, mass: 3.0160293201, abundance: 0.00000134 },\n            { nominal: 4, mass: 4.00260325413, abundance: 0.99999866 },\n            { nominal: 5, mass: 5.012057 },\n            { nominal: 6, mass: 6.018885891 },\n            { nominal: 7, mass: 7.0279907 },\n            { nominal: 8, mass: 8.03393439 },\n            { nominal: 9, mass: 9.043946 },\n            { nominal: 10, mass: 10.05279 },\n        ],\n        symbol: 'He',\n        mass: 4.002601932120929,\n        name: 'Helium',\n        monoisotopicMass: 4.00260325413,\n    },\n    {\n        number: 3,\n        isotopes: [\n            { nominal: 3, mass: 3.0308 },\n            { nominal: 4, mass: 4.02719 },\n            { nominal: 5, mass: 5.012538 },\n            { nominal: 6, mass: 6.0151228874, abundance: 0.0759 },\n            { nominal: 7, mass: 7.0160034366, abundance: 0.9241 },\n            { nominal: 8, mass: 8.022486246 },\n            { nominal: 9, mass: 9.02679019 },\n            { nominal: 10, mass: 10.035483 },\n            { nominal: 11, mass: 11.04372358 },\n            { nominal: 12, mass: 12.052517 },\n            { nominal: 13, mass: 13.06263 },\n        ],\n        symbol: 'Li',\n        mass: 6.94003660291572,\n        name: 'Lithium',\n        monoisotopicMass: 7.0160034366,\n    },\n    {\n        number: 4,\n        isotopes: [\n            { nominal: 5, mass: 5.0399 },\n            { nominal: 6, mass: 6.0197264 },\n            { nominal: 7, mass: 7.016928717 },\n            { nominal: 8, mass: 8.005305102 },\n            { nominal: 9, mass: 9.012183065, abundance: 1 },\n            { nominal: 10, mass: 10.013534695 },\n            { nominal: 11, mass: 11.02166108 },\n            { nominal: 12, mass: 12.0269221 },\n            { nominal: 13, mass: 13.036135 },\n            { nominal: 14, mass: 14.04289 },\n            { nominal: 15, mass: 15.05342 },\n            { nominal: 16, mass: 16.06167 },\n        ],\n        symbol: 'Be',\n        mass: 9.012183065,\n        name: 'Beryllium',\n        monoisotopicMass: 9.012183065,\n    },\n    {\n        number: 5,\n        isotopes: [\n            { nominal: 6, mass: 6.0508 },\n            { nominal: 7, mass: 7.029712 },\n            { nominal: 8, mass: 8.0246073 },\n            { nominal: 9, mass: 9.01332965 },\n            { nominal: 10, mass: 10.01293695, abundance: 0.199 },\n            { nominal: 11, mass: 11.00930536, abundance: 0.801 },\n            { nominal: 12, mass: 12.0143527 },\n            { nominal: 13, mass: 13.0177802 },\n            { nominal: 14, mass: 14.025404 },\n            { nominal: 15, mass: 15.031088 },\n            { nominal: 16, mass: 16.039842 },\n            { nominal: 17, mass: 17.04699 },\n            { nominal: 18, mass: 18.05566 },\n            { nominal: 19, mass: 19.0631 },\n            { nominal: 20, mass: 20.07207 },\n            { nominal: 21, mass: 21.08129 },\n        ],\n        symbol: 'B',\n        mass: 10.811028046410001,\n        name: 'Boron',\n        monoisotopicMass: 11.00930536,\n    },\n    {\n        number: 6,\n        isotopes: [\n            { nominal: 8, mass: 8.037643 },\n            { nominal: 9, mass: 9.0310372 },\n            { nominal: 10, mass: 10.01685331 },\n            { nominal: 11, mass: 11.0114336 },\n            { nominal: 12, mass: 12, abundance: 0.9893 },\n            { nominal: 13, mass: 13.00335483507, abundance: 0.0107 },\n            { nominal: 14, mass: 14.0032419884 },\n            { nominal: 15, mass: 15.01059926 },\n            { nominal: 16, mass: 16.0147013 },\n            { nominal: 17, mass: 17.022577 },\n            { nominal: 18, mass: 18.026751 },\n            { nominal: 19, mass: 19.0348 },\n            { nominal: 20, mass: 20.04032 },\n            { nominal: 21, mass: 21.049 },\n            { nominal: 22, mass: 22.05753 },\n            { nominal: 23, mass: 23.0689 },\n        ],\n        symbol: 'C',\n        mass: 12.010735896735248,\n        name: 'Carbon',\n        monoisotopicMass: 12,\n    },\n    {\n        number: 7,\n        isotopes: [\n            { nominal: 10, mass: 10.04165 },\n            { nominal: 11, mass: 11.026091 },\n            { nominal: 12, mass: 12.0186132 },\n            { nominal: 13, mass: 13.00573861 },\n            { nominal: 14, mass: 14.00307400443, abundance: 0.99636 },\n            { nominal: 15, mass: 15.00010889888, abundance: 0.00364 },\n            { nominal: 16, mass: 16.0061019 },\n            { nominal: 17, mass: 17.008449 },\n            { nominal: 18, mass: 18.014078 },\n            { nominal: 19, mass: 19.017022 },\n            { nominal: 20, mass: 20.023366 },\n            { nominal: 21, mass: 21.02711 },\n            { nominal: 22, mass: 22.03439 },\n            { nominal: 23, mass: 23.04114 },\n            { nominal: 24, mass: 24.05039 },\n            { nominal: 25, mass: 25.0601 },\n        ],\n        symbol: 'N',\n        mass: 14.006703211445798,\n        name: 'Nitrogen',\n        monoisotopicMass: 14.00307400443,\n    },\n    {\n        number: 8,\n        isotopes: [\n            { nominal: 12, mass: 12.034262 },\n            { nominal: 13, mass: 13.024815 },\n            { nominal: 14, mass: 14.00859636 },\n            { nominal: 15, mass: 15.00306562 },\n            { nominal: 16, mass: 15.99491461957, abundance: 0.99757 },\n            { nominal: 17, mass: 16.9991317565, abundance: 0.00038 },\n            { nominal: 18, mass: 17.99915961286, abundance: 0.00205 },\n            { nominal: 19, mass: 19.003578 },\n            { nominal: 20, mass: 20.00407535 },\n            { nominal: 21, mass: 21.008655 },\n            { nominal: 22, mass: 22.009966 },\n            { nominal: 23, mass: 23.015696 },\n            { nominal: 24, mass: 24.01986 },\n            { nominal: 25, mass: 25.02936 },\n            { nominal: 26, mass: 26.03729 },\n            { nominal: 27, mass: 27.04772 },\n            { nominal: 28, mass: 28.05591 },\n        ],\n        symbol: 'O',\n        mass: 15.999404924318277,\n        name: 'Oxygen',\n        monoisotopicMass: 15.99491461957,\n    },\n    {\n        number: 9,\n        isotopes: [\n            { nominal: 14, mass: 14.034315 },\n            { nominal: 15, mass: 15.018043 },\n            { nominal: 16, mass: 16.0114657 },\n            { nominal: 17, mass: 17.00209524 },\n            { nominal: 18, mass: 18.00093733 },\n            { nominal: 19, mass: 18.99840316273, abundance: 1 },\n            { nominal: 20, mass: 19.999981252 },\n            { nominal: 21, mass: 20.9999489 },\n            { nominal: 22, mass: 22.002999 },\n            { nominal: 23, mass: 23.003557 },\n            { nominal: 24, mass: 24.008115 },\n            { nominal: 25, mass: 25.012199 },\n            { nominal: 26, mass: 26.020038 },\n            { nominal: 27, mass: 27.02644 },\n            { nominal: 28, mass: 28.03534 },\n            { nominal: 29, mass: 29.04254 },\n            { nominal: 30, mass: 30.05165 },\n            { nominal: 31, mass: 31.05971 },\n        ],\n        symbol: 'F',\n        mass: 18.99840316273,\n        name: 'Fluorine',\n        monoisotopicMass: 18.99840316273,\n    },\n    {\n        number: 10,\n        isotopes: [\n            { nominal: 16, mass: 16.02575 },\n            { nominal: 17, mass: 17.01771396 },\n            { nominal: 18, mass: 18.0057087 },\n            { nominal: 19, mass: 19.00188091 },\n            { nominal: 20, mass: 19.9924401762, abundance: 0.9048 },\n            { nominal: 21, mass: 20.993846685, abundance: 0.0027 },\n            { nominal: 22, mass: 21.991385114, abundance: 0.0925 },\n            { nominal: 23, mass: 22.99446691 },\n            { nominal: 24, mass: 23.99361065 },\n            { nominal: 25, mass: 24.997789 },\n            { nominal: 26, mass: 26.000515 },\n            { nominal: 27, mass: 27.007553 },\n            { nominal: 28, mass: 28.01212 },\n            { nominal: 29, mass: 29.01975 },\n            { nominal: 30, mass: 30.02473 },\n            { nominal: 31, mass: 31.0331 },\n            { nominal: 32, mass: 32.03972 },\n            { nominal: 33, mass: 33.04938 },\n            { nominal: 34, mass: 34.05673 },\n        ],\n        symbol: 'Ne',\n        mass: 20.18004638052026,\n        name: 'Neon',\n        monoisotopicMass: 19.9924401762,\n    },\n    {\n        number: 11,\n        isotopes: [\n            { nominal: 18, mass: 18.02688 },\n            { nominal: 19, mass: 19.01388 },\n            { nominal: 20, mass: 20.0073544 },\n            { nominal: 21, mass: 20.99765469 },\n            { nominal: 22, mass: 21.99443741 },\n            { nominal: 23, mass: 22.989769282, abundance: 1 },\n            { nominal: 24, mass: 23.99096295 },\n            { nominal: 25, mass: 24.989954 },\n            { nominal: 26, mass: 25.9926346 },\n            { nominal: 27, mass: 26.9940765 },\n            { nominal: 28, mass: 27.998939 },\n            { nominal: 29, mass: 29.0028771 },\n            { nominal: 30, mass: 30.0090979 },\n            { nominal: 31, mass: 31.013163 },\n            { nominal: 32, mass: 32.02019 },\n            { nominal: 33, mass: 33.02573 },\n            { nominal: 34, mass: 34.03359 },\n            { nominal: 35, mass: 35.04062 },\n            { nominal: 36, mass: 36.04929 },\n            { nominal: 37, mass: 37.05705 },\n        ],\n        symbol: 'Na',\n        mass: 22.989769282,\n        name: 'Sodium',\n        monoisotopicMass: 22.989769282,\n    },\n    {\n        number: 12,\n        isotopes: [\n            { nominal: 19, mass: 19.034169 },\n            { nominal: 20, mass: 20.01885 },\n            { nominal: 21, mass: 21.011716 },\n            { nominal: 22, mass: 21.99957065 },\n            { nominal: 23, mass: 22.99412421 },\n            { nominal: 24, mass: 23.985041697, abundance: 0.7899 },\n            { nominal: 25, mass: 24.985836976, abundance: 0.1 },\n            { nominal: 26, mass: 25.982592968, abundance: 0.1101 },\n            { nominal: 27, mass: 26.984340624 },\n            { nominal: 28, mass: 27.9838767 },\n            { nominal: 29, mass: 28.988617 },\n            { nominal: 30, mass: 29.9904629 },\n            { nominal: 31, mass: 30.996648 },\n            { nominal: 32, mass: 31.9991102 },\n            { nominal: 33, mass: 33.0053271 },\n            { nominal: 34, mass: 34.008935 },\n            { nominal: 35, mass: 35.01679 },\n            { nominal: 36, mass: 36.02188 },\n            { nominal: 37, mass: 37.03037 },\n            { nominal: 38, mass: 38.03658 },\n            { nominal: 39, mass: 39.04538 },\n            { nominal: 40, mass: 40.05218 },\n        ],\n        symbol: 'Mg',\n        mass: 24.3050516198371,\n        name: 'Magnesium',\n        monoisotopicMass: 23.985041697,\n    },\n    {\n        number: 13,\n        isotopes: [\n            { nominal: 21, mass: 21.02897 },\n            { nominal: 22, mass: 22.01954 },\n            { nominal: 23, mass: 23.00724435 },\n            { nominal: 24, mass: 23.9999489 },\n            { nominal: 25, mass: 24.9904281 },\n            { nominal: 26, mass: 25.986891904 },\n            { nominal: 27, mass: 26.98153853, abundance: 1 },\n            { nominal: 28, mass: 27.98191021 },\n            { nominal: 29, mass: 28.9804565 },\n            { nominal: 30, mass: 29.98296 },\n            { nominal: 31, mass: 30.983945 },\n            { nominal: 32, mass: 31.988085 },\n            { nominal: 33, mass: 32.990909 },\n            { nominal: 34, mass: 33.996705 },\n            { nominal: 35, mass: 34.999764 },\n            { nominal: 36, mass: 36.00639 },\n            { nominal: 37, mass: 37.01053 },\n            { nominal: 38, mass: 38.0174 },\n            { nominal: 39, mass: 39.02254 },\n            { nominal: 40, mass: 40.03003 },\n            { nominal: 41, mass: 41.03638 },\n            { nominal: 42, mass: 42.04384 },\n            { nominal: 43, mass: 43.05147 },\n        ],\n        symbol: 'Al',\n        mass: 26.98153853,\n        name: 'Aluminium',\n        monoisotopicMass: 26.98153853,\n    },\n    {\n        number: 14,\n        isotopes: [\n            { nominal: 22, mass: 22.03579 },\n            { nominal: 23, mass: 23.02544 },\n            { nominal: 24, mass: 24.011535 },\n            { nominal: 25, mass: 25.004109 },\n            { nominal: 26, mass: 25.99233384 },\n            { nominal: 27, mass: 26.98670481 },\n            { nominal: 28, mass: 27.97692653465, abundance: 0.92223 },\n            { nominal: 29, mass: 28.9764946649, abundance: 0.04685 },\n            { nominal: 30, mass: 29.973770136, abundance: 0.03092 },\n            { nominal: 31, mass: 30.975363194 },\n            { nominal: 32, mass: 31.97415154 },\n            { nominal: 33, mass: 32.97797696 },\n            { nominal: 34, mass: 33.978576 },\n            { nominal: 35, mass: 34.984583 },\n            { nominal: 36, mass: 35.986695 },\n            { nominal: 37, mass: 36.992921 },\n            { nominal: 38, mass: 37.995523 },\n            { nominal: 39, mass: 39.002491 },\n            { nominal: 40, mass: 40.00583 },\n            { nominal: 41, mass: 41.01301 },\n            { nominal: 42, mass: 42.01778 },\n            { nominal: 43, mass: 43.0248 },\n            { nominal: 44, mass: 44.03061 },\n            { nominal: 45, mass: 45.03995 },\n        ],\n        symbol: 'Si',\n        mass: 28.085498705705955,\n        name: 'Silicon',\n        monoisotopicMass: 27.97692653465,\n    },\n    {\n        number: 15,\n        isotopes: [\n            { nominal: 24, mass: 24.03577 },\n            { nominal: 25, mass: 25.02119 },\n            { nominal: 26, mass: 26.01178 },\n            { nominal: 27, mass: 26.999224 },\n            { nominal: 28, mass: 27.9923266 },\n            { nominal: 29, mass: 28.98180079 },\n            { nominal: 30, mass: 29.97831375 },\n            { nominal: 31, mass: 30.97376199842, abundance: 1 },\n            { nominal: 32, mass: 31.973907643 },\n            { nominal: 33, mass: 32.9717257 },\n            { nominal: 34, mass: 33.97364589 },\n            { nominal: 35, mass: 34.9733141 },\n            { nominal: 36, mass: 35.97826 },\n            { nominal: 37, mass: 36.979607 },\n            { nominal: 38, mass: 37.984252 },\n            { nominal: 39, mass: 38.986227 },\n            { nominal: 40, mass: 39.99133 },\n            { nominal: 41, mass: 40.994654 },\n            { nominal: 42, mass: 42.00108 },\n            { nominal: 43, mass: 43.00502 },\n            { nominal: 44, mass: 44.01121 },\n            { nominal: 45, mass: 45.01645 },\n            { nominal: 46, mass: 46.02446 },\n            { nominal: 47, mass: 47.03139 },\n        ],\n        symbol: 'P',\n        mass: 30.97376199842,\n        name: 'Phosphorus',\n        monoisotopicMass: 30.97376199842,\n    },\n    {\n        number: 16,\n        isotopes: [\n            { nominal: 26, mass: 26.02907 },\n            { nominal: 27, mass: 27.01828 },\n            { nominal: 28, mass: 28.00437 },\n            { nominal: 29, mass: 28.996611 },\n            { nominal: 30, mass: 29.98490703 },\n            { nominal: 31, mass: 30.97955701 },\n            { nominal: 32, mass: 31.9720711744, abundance: 0.9499 },\n            { nominal: 33, mass: 32.9714589098, abundance: 0.0075 },\n            { nominal: 34, mass: 33.967867004, abundance: 0.0425 },\n            { nominal: 35, mass: 34.96903231 },\n            { nominal: 36, mass: 35.96708071, abundance: 0.0001 },\n            { nominal: 37, mass: 36.97112551 },\n            { nominal: 38, mass: 37.9711633 },\n            { nominal: 39, mass: 38.975134 },\n            { nominal: 40, mass: 39.9754826 },\n            { nominal: 41, mass: 40.9795935 },\n            { nominal: 42, mass: 41.9810651 },\n            { nominal: 43, mass: 42.9869076 },\n            { nominal: 44, mass: 43.9901188 },\n            { nominal: 45, mass: 44.99572 },\n            { nominal: 46, mass: 46.00004 },\n            { nominal: 47, mass: 47.00795 },\n            { nominal: 48, mass: 48.0137 },\n            { nominal: 49, mass: 49.02276 },\n        ],\n        symbol: 'S',\n        mass: 32.06478740612706,\n        name: 'Sulfur',\n        monoisotopicMass: 31.9720711744,\n    },\n    {\n        number: 17,\n        isotopes: [\n            { nominal: 28, mass: 28.02954 },\n            { nominal: 29, mass: 29.01478 },\n            { nominal: 30, mass: 30.00477 },\n            { nominal: 31, mass: 30.992414 },\n            { nominal: 32, mass: 31.98568464 },\n            { nominal: 33, mass: 32.97745199 },\n            { nominal: 34, mass: 33.973762485 },\n            { nominal: 35, mass: 34.968852682, abundance: 0.7576 },\n            { nominal: 36, mass: 35.968306809 },\n            { nominal: 37, mass: 36.965902602, abundance: 0.2424 },\n            { nominal: 38, mass: 37.96801044 },\n            { nominal: 39, mass: 38.9680082 },\n            { nominal: 40, mass: 39.970415 },\n            { nominal: 41, mass: 40.970685 },\n            { nominal: 42, mass: 41.97325 },\n            { nominal: 43, mass: 42.97389 },\n            { nominal: 44, mass: 43.97787 },\n            { nominal: 45, mass: 44.98029 },\n            { nominal: 46, mass: 45.98517 },\n            { nominal: 47, mass: 46.98916 },\n            { nominal: 48, mass: 47.99564 },\n            { nominal: 49, mass: 49.00123 },\n            { nominal: 50, mass: 50.00905 },\n            { nominal: 51, mass: 51.01554 },\n        ],\n        symbol: 'Cl',\n        mass: 35.452937582608,\n        name: 'Chlorine',\n        monoisotopicMass: 34.968852682,\n    },\n    {\n        number: 18,\n        isotopes: [\n            { nominal: 30, mass: 30.02307 },\n            { nominal: 31, mass: 31.01212 },\n            { nominal: 32, mass: 31.9976378 },\n            { nominal: 33, mass: 32.98992555 },\n            { nominal: 34, mass: 33.98027009 },\n            { nominal: 35, mass: 34.97525759 },\n            { nominal: 36, mass: 35.967545105, abundance: 0.003336 },\n            { nominal: 37, mass: 36.96677633 },\n            { nominal: 38, mass: 37.96273211, abundance: 0.000629 },\n            { nominal: 39, mass: 38.964313 },\n            { nominal: 40, mass: 39.9623831237, abundance: 0.996035 },\n            { nominal: 41, mass: 40.96450057 },\n            { nominal: 42, mass: 41.9630457 },\n            { nominal: 43, mass: 42.9656361 },\n            { nominal: 44, mass: 43.9649238 },\n            { nominal: 45, mass: 44.96803973 },\n            { nominal: 46, mass: 45.968083 },\n            { nominal: 47, mass: 46.972935 },\n            { nominal: 48, mass: 47.97591 },\n            { nominal: 49, mass: 48.9819 },\n            { nominal: 50, mass: 49.98613 },\n            { nominal: 51, mass: 50.9937 },\n            { nominal: 52, mass: 51.99896 },\n            { nominal: 53, mass: 53.00729 },\n        ],\n        symbol: 'Ar',\n        mass: 39.947798563582005,\n        name: 'Argon',\n        monoisotopicMass: 39.9623831237,\n    },\n    {\n        number: 19,\n        isotopes: [\n            { nominal: 32, mass: 32.02265 },\n            { nominal: 33, mass: 33.00756 },\n            { nominal: 34, mass: 33.99869 },\n            { nominal: 35, mass: 34.98800541 },\n            { nominal: 36, mass: 35.98130201 },\n            { nominal: 37, mass: 36.97337589 },\n            { nominal: 38, mass: 37.96908112 },\n            { nominal: 39, mass: 38.9637064864, abundance: 0.932581 },\n            { nominal: 40, mass: 39.963998166, abundance: 0.000117 },\n            { nominal: 41, mass: 40.9618252579, abundance: 0.067302 },\n            { nominal: 42, mass: 41.96240231 },\n            { nominal: 43, mass: 42.9607347 },\n            { nominal: 44, mass: 43.96158699 },\n            { nominal: 45, mass: 44.96069149 },\n            { nominal: 46, mass: 45.96198159 },\n            { nominal: 47, mass: 46.9616616 },\n            { nominal: 48, mass: 47.96534119 },\n            { nominal: 49, mass: 48.96821075 },\n            { nominal: 50, mass: 49.97238 },\n            { nominal: 51, mass: 50.975828 },\n            { nominal: 52, mass: 51.98224 },\n            { nominal: 53, mass: 52.98746 },\n            { nominal: 54, mass: 53.99463 },\n            { nominal: 55, mass: 55.00076 },\n            { nominal: 56, mass: 56.00851 },\n        ],\n        symbol: 'K',\n        mass: 39.098300910086,\n        name: 'Potassium',\n        monoisotopicMass: 38.9637064864,\n    },\n    {\n        number: 20,\n        isotopes: [\n            { nominal: 34, mass: 34.01487 },\n            { nominal: 35, mass: 35.00514 },\n            { nominal: 36, mass: 35.993074 },\n            { nominal: 37, mass: 36.98589785 },\n            { nominal: 38, mass: 37.97631922 },\n            { nominal: 39, mass: 38.97071081 },\n            { nominal: 40, mass: 39.962590863, abundance: 0.96941 },\n            { nominal: 41, mass: 40.96227792 },\n            { nominal: 42, mass: 41.95861783, abundance: 0.00647 },\n            { nominal: 43, mass: 42.95876644, abundance: 0.00135 },\n            { nominal: 44, mass: 43.95548156, abundance: 0.02086 },\n            { nominal: 45, mass: 44.95618635 },\n            { nominal: 46, mass: 45.953689, abundance: 0.00004 },\n            { nominal: 47, mass: 46.9545424 },\n            { nominal: 48, mass: 47.95252276, abundance: 0.00187 },\n            { nominal: 49, mass: 48.95566274 },\n            { nominal: 50, mass: 49.9574992 },\n            { nominal: 51, mass: 50.960989 },\n            { nominal: 52, mass: 51.963217 },\n            { nominal: 53, mass: 52.96945 },\n            { nominal: 54, mass: 53.9734 },\n            { nominal: 55, mass: 54.9803 },\n            { nominal: 56, mass: 55.98508 },\n            { nominal: 57, mass: 56.99262 },\n            { nominal: 58, mass: 57.99794 },\n        ],\n        symbol: 'Ca',\n        mass: 40.078022511017735,\n        name: 'Calcium',\n        monoisotopicMass: 39.962590863,\n    },\n    {\n        number: 21,\n        isotopes: [\n            { nominal: 36, mass: 36.01648 },\n            { nominal: 37, mass: 37.00374 },\n            { nominal: 38, mass: 37.99512 },\n            { nominal: 39, mass: 38.984785 },\n            { nominal: 40, mass: 39.9779673 },\n            { nominal: 41, mass: 40.969251105 },\n            { nominal: 42, mass: 41.96551653 },\n            { nominal: 43, mass: 42.9611505 },\n            { nominal: 44, mass: 43.9594029 },\n            { nominal: 45, mass: 44.95590828, abundance: 1 },\n            { nominal: 46, mass: 45.95516826 },\n            { nominal: 47, mass: 46.9524037 },\n            { nominal: 48, mass: 47.9522236 },\n            { nominal: 49, mass: 48.9500146 },\n            { nominal: 50, mass: 49.952176 },\n            { nominal: 51, mass: 50.953592 },\n            { nominal: 52, mass: 51.95688 },\n            { nominal: 53, mass: 52.95909 },\n            { nominal: 54, mass: 53.96393 },\n            { nominal: 55, mass: 54.96782 },\n            { nominal: 56, mass: 55.97345 },\n            { nominal: 57, mass: 56.97777 },\n            { nominal: 58, mass: 57.98403 },\n            { nominal: 59, mass: 58.98894 },\n            { nominal: 60, mass: 59.99565 },\n            { nominal: 61, mass: 61.001 },\n        ],\n        symbol: 'Sc',\n        mass: 44.95590828,\n        name: 'Scandium',\n        monoisotopicMass: 44.95590828,\n    },\n    {\n        number: 22,\n        isotopes: [\n            { nominal: 38, mass: 38.01145 },\n            { nominal: 39, mass: 39.00236 },\n            { nominal: 40, mass: 39.9905 },\n            { nominal: 41, mass: 40.983148 },\n            { nominal: 42, mass: 41.97304903 },\n            { nominal: 43, mass: 42.9685225 },\n            { nominal: 44, mass: 43.95968995 },\n            { nominal: 45, mass: 44.95812198 },\n            { nominal: 46, mass: 45.95262772, abundance: 0.0825 },\n            { nominal: 47, mass: 46.95175879, abundance: 0.0744 },\n            { nominal: 48, mass: 47.94794198, abundance: 0.7372 },\n            { nominal: 49, mass: 48.94786568, abundance: 0.0541 },\n            { nominal: 50, mass: 49.94478689, abundance: 0.0518 },\n            { nominal: 51, mass: 50.94661065 },\n            { nominal: 52, mass: 51.946893 },\n            { nominal: 53, mass: 52.94973 },\n            { nominal: 54, mass: 53.95105 },\n            { nominal: 55, mass: 54.95527 },\n            { nominal: 56, mass: 55.95791 },\n            { nominal: 57, mass: 56.96364 },\n            { nominal: 58, mass: 57.9666 },\n            { nominal: 59, mass: 58.97247 },\n            { nominal: 60, mass: 59.97603 },\n            { nominal: 61, mass: 60.98245 },\n            { nominal: 62, mass: 61.98651 },\n            { nominal: 63, mass: 62.99375 },\n        ],\n        symbol: 'Ti',\n        mass: 47.866744962721995,\n        name: 'Titanium',\n        monoisotopicMass: 47.94794198,\n    },\n    {\n        number: 23,\n        isotopes: [\n            { nominal: 40, mass: 40.01276 },\n            { nominal: 41, mass: 41.00021 },\n            { nominal: 42, mass: 41.99182 },\n            { nominal: 43, mass: 42.980766 },\n            { nominal: 44, mass: 43.97411 },\n            { nominal: 45, mass: 44.9657748 },\n            { nominal: 46, mass: 45.96019878 },\n            { nominal: 47, mass: 46.95490491 },\n            { nominal: 48, mass: 47.9522522 },\n            { nominal: 49, mass: 48.9485118 },\n            { nominal: 50, mass: 49.94715601, abundance: 0.0025 },\n            { nominal: 51, mass: 50.94395704, abundance: 0.9975 },\n            { nominal: 52, mass: 51.94477301 },\n            { nominal: 53, mass: 52.9443367 },\n            { nominal: 54, mass: 53.946439 },\n            { nominal: 55, mass: 54.94724 },\n            { nominal: 56, mass: 55.95048 },\n            { nominal: 57, mass: 56.95252 },\n            { nominal: 58, mass: 57.95672 },\n            { nominal: 59, mass: 58.95939 },\n            { nominal: 60, mass: 59.96431 },\n            { nominal: 61, mass: 60.96725 },\n            { nominal: 62, mass: 61.97265 },\n            { nominal: 63, mass: 62.97639 },\n            { nominal: 64, mass: 63.98264 },\n            { nominal: 65, mass: 64.9875 },\n            { nominal: 66, mass: 65.99398 },\n        ],\n        symbol: 'V',\n        mass: 50.941465037425004,\n        name: 'Vanadium',\n        monoisotopicMass: 50.94395704,\n    },\n    {\n        number: 24,\n        isotopes: [\n            { nominal: 42, mass: 42.0067 },\n            { nominal: 43, mass: 42.99753 },\n            { nominal: 44, mass: 43.98536 },\n            { nominal: 45, mass: 44.97905 },\n            { nominal: 46, mass: 45.968359 },\n            { nominal: 47, mass: 46.9628974 },\n            { nominal: 48, mass: 47.9540291 },\n            { nominal: 49, mass: 48.9513333 },\n            { nominal: 50, mass: 49.94604183, abundance: 0.04345 },\n            { nominal: 51, mass: 50.94476502 },\n            { nominal: 52, mass: 51.94050623, abundance: 0.83789 },\n            { nominal: 53, mass: 52.94064815, abundance: 0.09501 },\n            { nominal: 54, mass: 53.93887916, abundance: 0.02365 },\n            { nominal: 55, mass: 54.94083843 },\n            { nominal: 56, mass: 55.9406531 },\n            { nominal: 57, mass: 56.943613 },\n            { nominal: 58, mass: 57.94435 },\n            { nominal: 59, mass: 58.94859 },\n            { nominal: 60, mass: 59.95008 },\n            { nominal: 61, mass: 60.95442 },\n            { nominal: 62, mass: 61.9561 },\n            { nominal: 63, mass: 62.96165 },\n            { nominal: 64, mass: 63.96408 },\n            { nominal: 65, mass: 64.96996 },\n            { nominal: 66, mass: 65.97366 },\n            { nominal: 67, mass: 66.98016 },\n            { nominal: 68, mass: 67.98403 },\n        ],\n        symbol: 'Cr',\n        mass: 51.9961317554337,\n        name: 'Chromium',\n        monoisotopicMass: 51.94050623,\n    },\n    {\n        number: 25,\n        isotopes: [\n            { nominal: 44, mass: 44.00715 },\n            { nominal: 45, mass: 44.99449 },\n            { nominal: 46, mass: 45.98609 },\n            { nominal: 47, mass: 46.975775 },\n            { nominal: 48, mass: 47.96852 },\n            { nominal: 49, mass: 48.959595 },\n            { nominal: 50, mass: 49.95423778 },\n            { nominal: 51, mass: 50.94820847 },\n            { nominal: 52, mass: 51.9455639 },\n            { nominal: 53, mass: 52.94128889 },\n            { nominal: 54, mass: 53.9403576 },\n            { nominal: 55, mass: 54.93804391, abundance: 1 },\n            { nominal: 56, mass: 55.93890369 },\n            { nominal: 57, mass: 56.9382861 },\n            { nominal: 58, mass: 57.9400666 },\n            { nominal: 59, mass: 58.9403911 },\n            { nominal: 60, mass: 59.9431366 },\n            { nominal: 61, mass: 60.9444525 },\n            { nominal: 62, mass: 61.94795 },\n            { nominal: 63, mass: 62.9496647 },\n            { nominal: 64, mass: 63.9538494 },\n            { nominal: 65, mass: 64.9560198 },\n            { nominal: 66, mass: 65.960547 },\n            { nominal: 67, mass: 66.96424 },\n            { nominal: 68, mass: 67.96962 },\n            { nominal: 69, mass: 68.97366 },\n            { nominal: 70, mass: 69.97937 },\n            { nominal: 71, mass: 70.98368 },\n        ],\n        symbol: 'Mn',\n        mass: 54.93804391,\n        name: 'Manganese',\n        monoisotopicMass: 54.93804391,\n    },\n    {\n        number: 26,\n        isotopes: [\n            { nominal: 45, mass: 45.01442 },\n            { nominal: 46, mass: 46.00063 },\n            { nominal: 47, mass: 46.99185 },\n            { nominal: 48, mass: 47.98023 },\n            { nominal: 49, mass: 48.973429 },\n            { nominal: 50, mass: 49.962975 },\n            { nominal: 51, mass: 50.956841 },\n            { nominal: 52, mass: 51.9481131 },\n            { nominal: 53, mass: 52.9453064 },\n            { nominal: 54, mass: 53.93960899, abundance: 0.05845 },\n            { nominal: 55, mass: 54.93829199 },\n            { nominal: 56, mass: 55.93493633, abundance: 0.91754 },\n            { nominal: 57, mass: 56.93539284, abundance: 0.02119 },\n            { nominal: 58, mass: 57.93327443, abundance: 0.00282 },\n            { nominal: 59, mass: 58.93487434 },\n            { nominal: 60, mass: 59.9340711 },\n            { nominal: 61, mass: 60.9367462 },\n            { nominal: 62, mass: 61.9367918 },\n            { nominal: 63, mass: 62.9402727 },\n            { nominal: 64, mass: 63.9409878 },\n            { nominal: 65, mass: 64.9450115 },\n            { nominal: 66, mass: 65.94625 },\n            { nominal: 67, mass: 66.95054 },\n            { nominal: 68, mass: 67.95295 },\n            { nominal: 69, mass: 68.95807 },\n            { nominal: 70, mass: 69.96102 },\n            { nominal: 71, mass: 70.96672 },\n            { nominal: 72, mass: 71.96983 },\n            { nominal: 73, mass: 72.97572 },\n            { nominal: 74, mass: 73.97935 },\n        ],\n        symbol: 'Fe',\n        mass: 55.845144433865904,\n        name: 'Iron',\n        monoisotopicMass: 55.93493633,\n    },\n    {\n        number: 27,\n        isotopes: [\n            { nominal: 47, mass: 47.01057 },\n            { nominal: 48, mass: 48.00093 },\n            { nominal: 49, mass: 48.98891 },\n            { nominal: 50, mass: 49.98091 },\n            { nominal: 51, mass: 50.970647 },\n            { nominal: 52, mass: 51.96351 },\n            { nominal: 53, mass: 52.9542041 },\n            { nominal: 54, mass: 53.94845987 },\n            { nominal: 55, mass: 54.9419972 },\n            { nominal: 56, mass: 55.9398388 },\n            { nominal: 57, mass: 56.93629057 },\n            { nominal: 58, mass: 57.9357521 },\n            { nominal: 59, mass: 58.93319429, abundance: 1 },\n            { nominal: 60, mass: 59.9338163 },\n            { nominal: 61, mass: 60.93247662 },\n            { nominal: 62, mass: 61.934059 },\n            { nominal: 63, mass: 62.9336 },\n            { nominal: 64, mass: 63.935811 },\n            { nominal: 65, mass: 64.9364621 },\n            { nominal: 66, mass: 65.939443 },\n            { nominal: 67, mass: 66.9406096 },\n            { nominal: 68, mass: 67.94426 },\n            { nominal: 69, mass: 68.94614 },\n            { nominal: 70, mass: 69.94963 },\n            { nominal: 71, mass: 70.95237 },\n            { nominal: 72, mass: 71.95729 },\n            { nominal: 73, mass: 72.96039 },\n            { nominal: 74, mass: 73.96515 },\n            { nominal: 75, mass: 74.96876 },\n            { nominal: 76, mass: 75.97413 },\n        ],\n        symbol: 'Co',\n        mass: 58.93319429,\n        name: 'Cobalt',\n        monoisotopicMass: 58.93319429,\n    },\n    {\n        number: 28,\n        isotopes: [\n            { nominal: 48, mass: 48.01769 },\n            { nominal: 49, mass: 49.0077 },\n            { nominal: 50, mass: 49.99474 },\n            { nominal: 51, mass: 50.98611 },\n            { nominal: 52, mass: 51.9748 },\n            { nominal: 53, mass: 52.96819 },\n            { nominal: 54, mass: 53.957892 },\n            { nominal: 55, mass: 54.95133063 },\n            { nominal: 56, mass: 55.94212855 },\n            { nominal: 57, mass: 56.93979218 },\n            { nominal: 58, mass: 57.93534241, abundance: 0.68077 },\n            { nominal: 59, mass: 58.9343462 },\n            { nominal: 60, mass: 59.93078588, abundance: 0.26223 },\n            { nominal: 61, mass: 60.93105557, abundance: 0.011399 },\n            { nominal: 62, mass: 61.92834537, abundance: 0.036346 },\n            { nominal: 63, mass: 62.92966963 },\n            { nominal: 64, mass: 63.92796682, abundance: 0.009255 },\n            { nominal: 65, mass: 64.93008517 },\n            { nominal: 66, mass: 65.9291393 },\n            { nominal: 67, mass: 66.9315694 },\n            { nominal: 68, mass: 67.9318688 },\n            { nominal: 69, mass: 68.9356103 },\n            { nominal: 70, mass: 69.9364313 },\n            { nominal: 71, mass: 70.940519 },\n            { nominal: 72, mass: 71.9417859 },\n            { nominal: 73, mass: 72.9462067 },\n            { nominal: 74, mass: 73.94798 },\n            { nominal: 75, mass: 74.9525 },\n            { nominal: 76, mass: 75.95533 },\n            { nominal: 77, mass: 76.96055 },\n            { nominal: 78, mass: 77.96336 },\n            { nominal: 79, mass: 78.97025 },\n        ],\n        symbol: 'Ni',\n        mass: 58.69334710994765,\n        name: 'Nickel',\n        monoisotopicMass: 57.93534241,\n    },\n    {\n        number: 29,\n        isotopes: [\n            { nominal: 52, mass: 51.99671 },\n            { nominal: 53, mass: 52.98459 },\n            { nominal: 54, mass: 53.97666 },\n            { nominal: 55, mass: 54.96604 },\n            { nominal: 56, mass: 55.95895 },\n            { nominal: 57, mass: 56.9492125 },\n            { nominal: 58, mass: 57.94453305 },\n            { nominal: 59, mass: 58.93949748 },\n            { nominal: 60, mass: 59.9373645 },\n            { nominal: 61, mass: 60.9334576 },\n            { nominal: 62, mass: 61.93259541 },\n            { nominal: 63, mass: 62.92959772, abundance: 0.6915 },\n            { nominal: 64, mass: 63.92976434 },\n            { nominal: 65, mass: 64.9277897, abundance: 0.3085 },\n            { nominal: 66, mass: 65.92886903 },\n            { nominal: 67, mass: 66.9277303 },\n            { nominal: 68, mass: 67.9296109 },\n            { nominal: 69, mass: 68.9294293 },\n            { nominal: 70, mass: 69.9323921 },\n            { nominal: 71, mass: 70.9326768 },\n            { nominal: 72, mass: 71.9358203 },\n            { nominal: 73, mass: 72.9366744 },\n            { nominal: 74, mass: 73.9398749 },\n            { nominal: 75, mass: 74.9415226 },\n            { nominal: 76, mass: 75.945275 },\n            { nominal: 77, mass: 76.94792 },\n            { nominal: 78, mass: 77.95223 },\n            { nominal: 79, mass: 78.95502 },\n            { nominal: 80, mass: 79.96089 },\n            { nominal: 81, mass: 80.96587 },\n            { nominal: 82, mass: 81.97244 },\n        ],\n        symbol: 'Cu',\n        mass: 63.54603994583,\n        name: 'Copper',\n        monoisotopicMass: 62.92959772,\n    },\n    {\n        number: 30,\n        isotopes: [\n            { nominal: 54, mass: 53.99204 },\n            { nominal: 55, mass: 54.98398 },\n            { nominal: 56, mass: 55.97254 },\n            { nominal: 57, mass: 56.96506 },\n            { nominal: 58, mass: 57.954591 },\n            { nominal: 59, mass: 58.94931266 },\n            { nominal: 60, mass: 59.9418421 },\n            { nominal: 61, mass: 60.939507 },\n            { nominal: 62, mass: 61.93433397 },\n            { nominal: 63, mass: 62.9332115 },\n            { nominal: 64, mass: 63.92914201, abundance: 0.4917 },\n            { nominal: 65, mass: 64.92924077 },\n            { nominal: 66, mass: 65.92603381, abundance: 0.2773 },\n            { nominal: 67, mass: 66.92712775, abundance: 0.0404 },\n            { nominal: 68, mass: 67.92484455, abundance: 0.1845 },\n            { nominal: 69, mass: 68.9265507 },\n            { nominal: 70, mass: 69.9253192, abundance: 0.0061 },\n            { nominal: 71, mass: 70.9277196 },\n            { nominal: 72, mass: 71.9268428 },\n            { nominal: 73, mass: 72.9295826 },\n            { nominal: 74, mass: 73.9294073 },\n            { nominal: 75, mass: 74.9328402 },\n            { nominal: 76, mass: 75.933115 },\n            { nominal: 77, mass: 76.9368872 },\n            { nominal: 78, mass: 77.9382892 },\n            { nominal: 79, mass: 78.9426381 },\n            { nominal: 80, mass: 79.9445529 },\n            { nominal: 81, mass: 80.9504026 },\n            { nominal: 82, mass: 81.95426 },\n            { nominal: 83, mass: 82.96056 },\n            { nominal: 84, mass: 83.96521 },\n            { nominal: 85, mass: 84.97226 },\n        ],\n        symbol: 'Zn',\n        mass: 65.37778252952499,\n        name: 'Zinc',\n        monoisotopicMass: 63.92914201,\n    },\n    {\n        number: 31,\n        isotopes: [\n            { nominal: 56, mass: 55.99536 },\n            { nominal: 57, mass: 56.9832 },\n            { nominal: 58, mass: 57.97478 },\n            { nominal: 59, mass: 58.96353 },\n            { nominal: 60, mass: 59.95729 },\n            { nominal: 61, mass: 60.949399 },\n            { nominal: 62, mass: 61.94419025 },\n            { nominal: 63, mass: 62.9392942 },\n            { nominal: 64, mass: 63.9368404 },\n            { nominal: 65, mass: 64.93273459 },\n            { nominal: 66, mass: 65.9315894 },\n            { nominal: 67, mass: 66.9282025 },\n            { nominal: 68, mass: 67.9279805 },\n            { nominal: 69, mass: 68.9255735, abundance: 0.60108 },\n            { nominal: 70, mass: 69.9260219 },\n            { nominal: 71, mass: 70.92470258, abundance: 0.39892 },\n            { nominal: 72, mass: 71.92636747 },\n            { nominal: 73, mass: 72.9251747 },\n            { nominal: 74, mass: 73.9269457 },\n            { nominal: 75, mass: 74.9265002 },\n            { nominal: 76, mass: 75.9288276 },\n            { nominal: 77, mass: 76.9291543 },\n            { nominal: 78, mass: 77.9316088 },\n            { nominal: 79, mass: 78.9328523 },\n            { nominal: 80, mass: 79.9364208 },\n            { nominal: 81, mass: 80.9381338 },\n            { nominal: 82, mass: 81.9431765 },\n            { nominal: 83, mass: 82.9471203 },\n            { nominal: 84, mass: 83.95246 },\n            { nominal: 85, mass: 84.95699 },\n            { nominal: 86, mass: 85.96301 },\n            { nominal: 87, mass: 86.96824 },\n        ],\n        symbol: 'Ga',\n        mass: 69.7230660725936,\n        name: 'Gallium',\n        monoisotopicMass: 68.9255735,\n    },\n    {\n        number: 32,\n        isotopes: [\n            { nominal: 58, mass: 57.99172 },\n            { nominal: 59, mass: 58.98249 },\n            { nominal: 60, mass: 59.97036 },\n            { nominal: 61, mass: 60.96379 },\n            { nominal: 62, mass: 61.95502 },\n            { nominal: 63, mass: 62.949628 },\n            { nominal: 64, mass: 63.9416899 },\n            { nominal: 65, mass: 64.9393681 },\n            { nominal: 66, mass: 65.9338621 },\n            { nominal: 67, mass: 66.9327339 },\n            { nominal: 68, mass: 67.9280953 },\n            { nominal: 69, mass: 68.9279645 },\n            { nominal: 70, mass: 69.92424875, abundance: 0.2057 },\n            { nominal: 71, mass: 70.92495233 },\n            { nominal: 72, mass: 71.922075826, abundance: 0.2745 },\n            { nominal: 73, mass: 72.923458956, abundance: 0.0775 },\n            { nominal: 74, mass: 73.921177761, abundance: 0.365 },\n            { nominal: 75, mass: 74.92285837 },\n            { nominal: 76, mass: 75.921402726, abundance: 0.0773 },\n            { nominal: 77, mass: 76.923549843 },\n            { nominal: 78, mass: 77.9228529 },\n            { nominal: 79, mass: 78.92536 },\n            { nominal: 80, mass: 79.9253508 },\n            { nominal: 81, mass: 80.9288329 },\n            { nominal: 82, mass: 81.929774 },\n            { nominal: 83, mass: 82.9345391 },\n            { nominal: 84, mass: 83.9375751 },\n            { nominal: 85, mass: 84.9429697 },\n            { nominal: 86, mass: 85.94658 },\n            { nominal: 87, mass: 86.95268 },\n            { nominal: 88, mass: 87.95691 },\n            { nominal: 89, mass: 88.96379 },\n            { nominal: 90, mass: 89.96863 },\n        ],\n        symbol: 'Ge',\n        mass: 72.6275501646868,\n        name: 'Germanium',\n        monoisotopicMass: 73.921177761,\n    },\n    {\n        number: 33,\n        isotopes: [\n            { nominal: 60, mass: 59.99388 },\n            { nominal: 61, mass: 60.98112 },\n            { nominal: 62, mass: 61.97361 },\n            { nominal: 63, mass: 62.9639 },\n            { nominal: 64, mass: 63.95743 },\n            { nominal: 65, mass: 64.949611 },\n            { nominal: 66, mass: 65.9441488 },\n            { nominal: 67, mass: 66.93925111 },\n            { nominal: 68, mass: 67.9367741 },\n            { nominal: 69, mass: 68.932246 },\n            { nominal: 70, mass: 69.930926 },\n            { nominal: 71, mass: 70.9271138 },\n            { nominal: 72, mass: 71.9267523 },\n            { nominal: 73, mass: 72.9238291 },\n            { nominal: 74, mass: 73.9239286 },\n            { nominal: 75, mass: 74.92159457, abundance: 1 },\n            { nominal: 76, mass: 75.92239202 },\n            { nominal: 77, mass: 76.9206476 },\n            { nominal: 78, mass: 77.921828 },\n            { nominal: 79, mass: 78.9209484 },\n            { nominal: 80, mass: 79.9224746 },\n            { nominal: 81, mass: 80.9221323 },\n            { nominal: 82, mass: 81.9247412 },\n            { nominal: 83, mass: 82.9252069 },\n            { nominal: 84, mass: 83.9293033 },\n            { nominal: 85, mass: 84.9321637 },\n            { nominal: 86, mass: 85.9367015 },\n            { nominal: 87, mass: 86.9402917 },\n            { nominal: 88, mass: 87.94555 },\n            { nominal: 89, mass: 88.94976 },\n            { nominal: 90, mass: 89.95563 },\n            { nominal: 91, mass: 90.96039 },\n            { nominal: 92, mass: 91.96674 },\n        ],\n        symbol: 'As',\n        mass: 74.92159457,\n        name: 'Arsenic',\n        monoisotopicMass: 74.92159457,\n    },\n    {\n        number: 34,\n        isotopes: [\n            { nominal: 64, mass: 63.97109 },\n            { nominal: 65, mass: 64.9644 },\n            { nominal: 66, mass: 65.95559 },\n            { nominal: 67, mass: 66.949994 },\n            { nominal: 68, mass: 67.94182524 },\n            { nominal: 69, mass: 68.9394148 },\n            { nominal: 70, mass: 69.9335155 },\n            { nominal: 71, mass: 70.9322094 },\n            { nominal: 72, mass: 71.9271405 },\n            { nominal: 73, mass: 72.9267549 },\n            { nominal: 74, mass: 73.922475934, abundance: 0.0089 },\n            { nominal: 75, mass: 74.92252287 },\n            { nominal: 76, mass: 75.919213704, abundance: 0.0937 },\n            { nominal: 77, mass: 76.919914154, abundance: 0.0763 },\n            { nominal: 78, mass: 77.91730928, abundance: 0.2377 },\n            { nominal: 79, mass: 78.91849929 },\n            { nominal: 80, mass: 79.9165218, abundance: 0.4961 },\n            { nominal: 81, mass: 80.917993 },\n            { nominal: 82, mass: 81.9166995, abundance: 0.0873 },\n            { nominal: 83, mass: 82.9191186 },\n            { nominal: 84, mass: 83.9184668 },\n            { nominal: 85, mass: 84.9222608 },\n            { nominal: 86, mass: 85.9243117 },\n            { nominal: 87, mass: 86.9286886 },\n            { nominal: 88, mass: 87.9314175 },\n            { nominal: 89, mass: 88.9366691 },\n            { nominal: 90, mass: 89.9401 },\n            { nominal: 91, mass: 90.94596 },\n            { nominal: 92, mass: 91.94984 },\n            { nominal: 93, mass: 92.95629 },\n            { nominal: 94, mass: 93.96049 },\n            { nominal: 95, mass: 94.9673 },\n        ],\n        symbol: 'Se',\n        mass: 78.95938855701361,\n        name: 'Selenium',\n        monoisotopicMass: 79.9165218,\n    },\n    {\n        number: 35,\n        isotopes: [\n            { nominal: 67, mass: 66.96465 },\n            { nominal: 68, mass: 67.95873 },\n            { nominal: 69, mass: 68.950497 },\n            { nominal: 70, mass: 69.944792 },\n            { nominal: 71, mass: 70.9393422 },\n            { nominal: 72, mass: 71.9365886 },\n            { nominal: 73, mass: 72.9316715 },\n            { nominal: 74, mass: 73.9299102 },\n            { nominal: 75, mass: 74.9258105 },\n            { nominal: 76, mass: 75.924542 },\n            { nominal: 77, mass: 76.9213792 },\n            { nominal: 78, mass: 77.9211459 },\n            { nominal: 79, mass: 78.9183376, abundance: 0.5069 },\n            { nominal: 80, mass: 79.9185298 },\n            { nominal: 81, mass: 80.9162897, abundance: 0.4931 },\n            { nominal: 82, mass: 81.9168032 },\n            { nominal: 83, mass: 82.9151756 },\n            { nominal: 84, mass: 83.916496 },\n            { nominal: 85, mass: 84.9156458 },\n            { nominal: 86, mass: 85.9188054 },\n            { nominal: 87, mass: 86.920674 },\n            { nominal: 88, mass: 87.9240833 },\n            { nominal: 89, mass: 88.9267046 },\n            { nominal: 90, mass: 89.9312928 },\n            { nominal: 91, mass: 90.9343986 },\n            { nominal: 92, mass: 91.9396316 },\n            { nominal: 93, mass: 92.94313 },\n            { nominal: 94, mass: 93.9489 },\n            { nominal: 95, mass: 94.95301 },\n            { nominal: 96, mass: 95.95903 },\n            { nominal: 97, mass: 96.96344 },\n            { nominal: 98, mass: 97.96946 },\n        ],\n        symbol: 'Br',\n        mass: 79.90352778050999,\n        name: 'Bromine',\n        monoisotopicMass: 78.9183376,\n    },\n    {\n        number: 36,\n        isotopes: [\n            { nominal: 69, mass: 68.96518 },\n            { nominal: 70, mass: 69.95604 },\n            { nominal: 71, mass: 70.95027 },\n            { nominal: 72, mass: 71.9420924 },\n            { nominal: 73, mass: 72.9392892 },\n            { nominal: 74, mass: 73.933084 },\n            { nominal: 75, mass: 74.9309457 },\n            { nominal: 76, mass: 75.9259103 },\n            { nominal: 77, mass: 76.92467 },\n            { nominal: 78, mass: 77.92036494, abundance: 0.00355 },\n            { nominal: 79, mass: 78.9200829 },\n            { nominal: 80, mass: 79.91637808, abundance: 0.02286 },\n            { nominal: 81, mass: 80.9165912 },\n            { nominal: 82, mass: 81.91348273, abundance: 0.11593 },\n            { nominal: 83, mass: 82.91412716, abundance: 0.115 },\n            { nominal: 84, mass: 83.9114977282, abundance: 0.56987 },\n            { nominal: 85, mass: 84.9125273 },\n            { nominal: 86, mass: 85.9106106269, abundance: 0.17279 },\n            { nominal: 87, mass: 86.91335476 },\n            { nominal: 88, mass: 87.9144479 },\n            { nominal: 89, mass: 88.9178355 },\n            { nominal: 90, mass: 89.9195279 },\n            { nominal: 91, mass: 90.9238063 },\n            { nominal: 92, mass: 91.9261731 },\n            { nominal: 93, mass: 92.9311472 },\n            { nominal: 94, mass: 93.93414 },\n            { nominal: 95, mass: 94.939711 },\n            { nominal: 96, mass: 95.943017 },\n            { nominal: 97, mass: 96.94909 },\n            { nominal: 98, mass: 97.95243 },\n            { nominal: 99, mass: 98.95839 },\n            { nominal: 100, mass: 99.96237 },\n            { nominal: 101, mass: 100.96873 },\n        ],\n        symbol: 'Kr',\n        mass: 83.7979999953261,\n        name: 'Krypton',\n        monoisotopicMass: 83.9114977282,\n    },\n    {\n        number: 37,\n        isotopes: [\n            { nominal: 71, mass: 70.96532 },\n            { nominal: 72, mass: 71.95908 },\n            { nominal: 73, mass: 72.95053 },\n            { nominal: 74, mass: 73.9442659 },\n            { nominal: 75, mass: 74.9385732 },\n            { nominal: 76, mass: 75.935073 },\n            { nominal: 77, mass: 76.9304016 },\n            { nominal: 78, mass: 77.9281419 },\n            { nominal: 79, mass: 78.9239899 },\n            { nominal: 80, mass: 79.9225164 },\n            { nominal: 81, mass: 80.9189939 },\n            { nominal: 82, mass: 81.918209 },\n            { nominal: 83, mass: 82.9151142 },\n            { nominal: 84, mass: 83.9143752 },\n            { nominal: 85, mass: 84.9117897379, abundance: 0.7217 },\n            { nominal: 86, mass: 85.91116743 },\n            { nominal: 87, mass: 86.909180531, abundance: 0.2783 },\n            { nominal: 88, mass: 87.91131559 },\n            { nominal: 89, mass: 88.9122783 },\n            { nominal: 90, mass: 89.9147985 },\n            { nominal: 91, mass: 90.9165372 },\n            { nominal: 92, mass: 91.9197284 },\n            { nominal: 93, mass: 92.9220393 },\n            { nominal: 94, mass: 93.9263948 },\n            { nominal: 95, mass: 94.92926 },\n            { nominal: 96, mass: 95.9341334 },\n            { nominal: 97, mass: 96.9371771 },\n            { nominal: 98, mass: 97.9416869 },\n            { nominal: 99, mass: 98.94503 },\n            { nominal: 100, mass: 99.95003 },\n            { nominal: 101, mass: 100.95404 },\n            { nominal: 102, mass: 101.95952 },\n            { nominal: 103, mass: 102.96392 },\n        ],\n        symbol: 'Rb',\n        mass: 85.46766359561973,\n        name: 'Rubidium',\n        monoisotopicMass: 84.9117897379,\n    },\n    {\n        number: 38,\n        isotopes: [\n            { nominal: 73, mass: 72.9657 },\n            { nominal: 74, mass: 73.95617 },\n            { nominal: 75, mass: 74.94995 },\n            { nominal: 76, mass: 75.941763 },\n            { nominal: 77, mass: 76.9379455 },\n            { nominal: 78, mass: 77.93218 },\n            { nominal: 79, mass: 78.9297077 },\n            { nominal: 80, mass: 79.9245175 },\n            { nominal: 81, mass: 80.9232114 },\n            { nominal: 82, mass: 81.9183999 },\n            { nominal: 83, mass: 82.9175544 },\n            { nominal: 84, mass: 83.9134191, abundance: 0.0056 },\n            { nominal: 85, mass: 84.912932 },\n            { nominal: 86, mass: 85.9092606, abundance: 0.0986 },\n            { nominal: 87, mass: 86.9088775, abundance: 0.07 },\n            { nominal: 88, mass: 87.9056125, abundance: 0.8258 },\n            { nominal: 89, mass: 88.9074511 },\n            { nominal: 90, mass: 89.90773 },\n            { nominal: 91, mass: 90.9101954 },\n            { nominal: 92, mass: 91.9110382 },\n            { nominal: 93, mass: 92.9140242 },\n            { nominal: 94, mass: 93.9153556 },\n            { nominal: 95, mass: 94.9193529 },\n            { nominal: 96, mass: 95.9217066 },\n            { nominal: 97, mass: 96.926374 },\n            { nominal: 98, mass: 97.9286888 },\n            { nominal: 99, mass: 98.9328907 },\n            { nominal: 100, mass: 99.93577 },\n            { nominal: 101, mass: 100.940352 },\n            { nominal: 102, mass: 101.943791 },\n            { nominal: 103, mass: 102.94909 },\n            { nominal: 104, mass: 103.95265 },\n            { nominal: 105, mass: 104.95855 },\n            { nominal: 106, mass: 105.96265 },\n            { nominal: 107, mass: 106.96897 },\n        ],\n        symbol: 'Sr',\n        mass: 87.61664446962,\n        name: 'Strontium',\n        monoisotopicMass: 87.9056125,\n    },\n    {\n        number: 39,\n        isotopes: [\n            { nominal: 76, mass: 75.95856 },\n            { nominal: 77, mass: 76.949781 },\n            { nominal: 78, mass: 77.94361 },\n            { nominal: 79, mass: 78.93735 },\n            { nominal: 80, mass: 79.9343561 },\n            { nominal: 81, mass: 80.9294556 },\n            { nominal: 82, mass: 81.9269314 },\n            { nominal: 83, mass: 82.922485 },\n            { nominal: 84, mass: 83.9206721 },\n            { nominal: 85, mass: 84.916433 },\n            { nominal: 86, mass: 85.914886 },\n            { nominal: 87, mass: 86.9108761 },\n            { nominal: 88, mass: 87.9095016 },\n            { nominal: 89, mass: 88.9058403, abundance: 1 },\n            { nominal: 90, mass: 89.9071439 },\n            { nominal: 91, mass: 90.9072974 },\n            { nominal: 92, mass: 91.9089451 },\n            { nominal: 93, mass: 92.909578 },\n            { nominal: 94, mass: 93.9115906 },\n            { nominal: 95, mass: 94.9128161 },\n            { nominal: 96, mass: 95.9158968 },\n            { nominal: 97, mass: 96.9182741 },\n            { nominal: 98, mass: 97.9223821 },\n            { nominal: 99, mass: 98.924148 },\n            { nominal: 100, mass: 99.927715 },\n            { nominal: 101, mass: 100.9301477 },\n            { nominal: 102, mass: 101.9343277 },\n            { nominal: 103, mass: 102.937243 },\n            { nominal: 104, mass: 103.94196 },\n            { nominal: 105, mass: 104.94544 },\n            { nominal: 106, mass: 105.95056 },\n            { nominal: 107, mass: 106.95452 },\n            { nominal: 108, mass: 107.95996 },\n            { nominal: 109, mass: 108.96436 },\n        ],\n        symbol: 'Y',\n        mass: 88.9058403,\n        name: 'Yttrium',\n        monoisotopicMass: 88.9058403,\n    },\n    {\n        number: 40,\n        isotopes: [\n            { nominal: 78, mass: 77.95566 },\n            { nominal: 79, mass: 78.94948 },\n            { nominal: 80, mass: 79.9404 },\n            { nominal: 81, mass: 80.93731 },\n            { nominal: 82, mass: 81.93135 },\n            { nominal: 83, mass: 82.9292421 },\n            { nominal: 84, mass: 83.9233269 },\n            { nominal: 85, mass: 84.9214444 },\n            { nominal: 86, mass: 85.9162972 },\n            { nominal: 87, mass: 86.914818 },\n            { nominal: 88, mass: 87.9102213 },\n            { nominal: 89, mass: 88.9088814 },\n            { nominal: 90, mass: 89.9046977, abundance: 0.5145 },\n            { nominal: 91, mass: 90.9056396, abundance: 0.1122 },\n            { nominal: 92, mass: 91.9050347, abundance: 0.1715 },\n            { nominal: 93, mass: 92.9064699 },\n            { nominal: 94, mass: 93.9063108, abundance: 0.1738 },\n            { nominal: 95, mass: 94.9080385 },\n            { nominal: 96, mass: 95.9082714, abundance: 0.028 },\n            { nominal: 97, mass: 96.9109512 },\n            { nominal: 98, mass: 97.9127289 },\n            { nominal: 99, mass: 98.916667 },\n            { nominal: 100, mass: 99.9180006 },\n            { nominal: 101, mass: 100.921448 },\n            { nominal: 102, mass: 101.9231409 },\n            { nominal: 103, mass: 102.927191 },\n            { nominal: 104, mass: 103.929436 },\n            { nominal: 105, mass: 104.934008 },\n            { nominal: 106, mass: 105.93676 },\n            { nominal: 107, mass: 106.94174 },\n            { nominal: 108, mass: 107.94487 },\n            { nominal: 109, mass: 108.95041 },\n            { nominal: 110, mass: 109.95396 },\n            { nominal: 111, mass: 110.95968 },\n            { nominal: 112, mass: 111.9637 },\n        ],\n        symbol: 'Zr',\n        mass: 91.22364159706,\n        name: 'Zirconium',\n        monoisotopicMass: 89.9046977,\n    },\n    {\n        number: 41,\n        isotopes: [\n            { nominal: 81, mass: 80.9496 },\n            { nominal: 82, mass: 81.94396 },\n            { nominal: 83, mass: 82.93729 },\n            { nominal: 84, mass: 83.93449 },\n            { nominal: 85, mass: 84.9288458 },\n            { nominal: 86, mass: 85.9257828 },\n            { nominal: 87, mass: 86.9206937 },\n            { nominal: 88, mass: 87.918222 },\n            { nominal: 89, mass: 88.913445 },\n            { nominal: 90, mass: 89.9112584 },\n            { nominal: 91, mass: 90.9069897 },\n            { nominal: 92, mass: 91.9071881 },\n            { nominal: 93, mass: 92.906373, abundance: 1 },\n            { nominal: 94, mass: 93.9072788 },\n            { nominal: 95, mass: 94.9068324 },\n            { nominal: 96, mass: 95.9080973 },\n            { nominal: 97, mass: 96.9080959 },\n            { nominal: 98, mass: 97.9103265 },\n            { nominal: 99, mass: 98.911613 },\n            { nominal: 100, mass: 99.9143276 },\n            { nominal: 101, mass: 100.9153103 },\n            { nominal: 102, mass: 101.9180772 },\n            { nominal: 103, mass: 102.9194572 },\n            { nominal: 104, mass: 103.9228925 },\n            { nominal: 105, mass: 104.9249465 },\n            { nominal: 106, mass: 105.9289317 },\n            { nominal: 107, mass: 106.9315937 },\n            { nominal: 108, mass: 107.9360748 },\n            { nominal: 109, mass: 108.93922 },\n            { nominal: 110, mass: 109.94403 },\n            { nominal: 111, mass: 110.94753 },\n            { nominal: 112, mass: 111.95247 },\n            { nominal: 113, mass: 112.95651 },\n            { nominal: 114, mass: 113.96201 },\n            { nominal: 115, mass: 114.96634 },\n        ],\n        symbol: 'Nb',\n        mass: 92.906373,\n        name: 'Niobium',\n        monoisotopicMass: 92.906373,\n    },\n    {\n        number: 42,\n        isotopes: [\n            { nominal: 83, mass: 82.94988 },\n            { nominal: 84, mass: 83.94149 },\n            { nominal: 85, mass: 84.938261 },\n            { nominal: 86, mass: 85.9311748 },\n            { nominal: 87, mass: 86.9281962 },\n            { nominal: 88, mass: 87.9219678 },\n            { nominal: 89, mass: 88.9194682 },\n            { nominal: 90, mass: 89.9139309 },\n            { nominal: 91, mass: 90.9117453 },\n            { nominal: 92, mass: 91.90680796, abundance: 0.1453 },\n            { nominal: 93, mass: 92.90680958 },\n            { nominal: 94, mass: 93.9050849, abundance: 0.0915 },\n            { nominal: 95, mass: 94.90583877, abundance: 0.1584 },\n            { nominal: 96, mass: 95.90467612, abundance: 0.1667 },\n            { nominal: 97, mass: 96.90601812, abundance: 0.096 },\n            { nominal: 98, mass: 97.90540482, abundance: 0.2439 },\n            { nominal: 99, mass: 98.90770851 },\n            { nominal: 100, mass: 99.9074718, abundance: 0.0982 },\n            { nominal: 101, mass: 100.9103414 },\n            { nominal: 102, mass: 101.9102834 },\n            { nominal: 103, mass: 102.913079 },\n            { nominal: 104, mass: 103.9137344 },\n            { nominal: 105, mass: 104.916969 },\n            { nominal: 106, mass: 105.918259 },\n            { nominal: 107, mass: 106.922106 },\n            { nominal: 108, mass: 107.924033 },\n            { nominal: 109, mass: 108.928424 },\n            { nominal: 110, mass: 109.930704 },\n            { nominal: 111, mass: 110.935654 },\n            { nominal: 112, mass: 111.93831 },\n            { nominal: 113, mass: 112.94335 },\n            { nominal: 114, mass: 113.94653 },\n            { nominal: 115, mass: 114.95196 },\n            { nominal: 116, mass: 115.95545 },\n            { nominal: 117, mass: 116.96117 },\n        ],\n        symbol: 'Mo',\n        mass: 95.959788541188,\n        name: 'Molybdenum',\n        monoisotopicMass: 97.90540482,\n    },\n    {\n        number: 43,\n        isotopes: [\n            { nominal: 85, mass: 84.95058 },\n            { nominal: 86, mass: 85.94493 },\n            { nominal: 87, mass: 86.9380672 },\n            { nominal: 88, mass: 87.93378 },\n            { nominal: 89, mass: 88.9276487 },\n            { nominal: 90, mass: 89.9240739 },\n            { nominal: 91, mass: 90.9184254 },\n            { nominal: 92, mass: 91.9152698 },\n            { nominal: 93, mass: 92.910246 },\n            { nominal: 94, mass: 93.9096536 },\n            { nominal: 95, mass: 94.9076536 },\n            { nominal: 96, mass: 95.907868 },\n            { nominal: 97, mass: 96.9063667 },\n            { nominal: 98, mass: 97.9072124 },\n            { nominal: 99, mass: 98.9062508 },\n            { nominal: 100, mass: 99.9076539 },\n            { nominal: 101, mass: 100.907309 },\n            { nominal: 102, mass: 101.9092097 },\n            { nominal: 103, mass: 102.909176 },\n            { nominal: 104, mass: 103.911425 },\n            { nominal: 105, mass: 104.911655 },\n            { nominal: 106, mass: 105.914358 },\n            { nominal: 107, mass: 106.9154606 },\n            { nominal: 108, mass: 107.9184957 },\n            { nominal: 109, mass: 108.920256 },\n            { nominal: 110, mass: 109.923744 },\n            { nominal: 111, mass: 110.925901 },\n            { nominal: 112, mass: 111.9299458 },\n            { nominal: 113, mass: 112.932569 },\n            { nominal: 114, mass: 113.93691 },\n            { nominal: 115, mass: 114.93998 },\n            { nominal: 116, mass: 115.94476 },\n            { nominal: 117, mass: 116.94806 },\n            { nominal: 118, mass: 117.95299 },\n            { nominal: 119, mass: 118.95666 },\n            { nominal: 120, mass: 119.96187 },\n        ],\n        symbol: 'Tc',\n        mass: null,\n        name: 'Technetium',\n    },\n    {\n        number: 44,\n        isotopes: [\n            { nominal: 87, mass: 86.95069 },\n            { nominal: 88, mass: 87.9416 },\n            { nominal: 89, mass: 88.93762 },\n            { nominal: 90, mass: 89.9303444 },\n            { nominal: 91, mass: 90.9267419 },\n            { nominal: 92, mass: 91.9202344 },\n            { nominal: 93, mass: 92.9171044 },\n            { nominal: 94, mass: 93.9113429 },\n            { nominal: 95, mass: 94.910406 },\n            { nominal: 96, mass: 95.90759025, abundance: 0.0554 },\n            { nominal: 97, mass: 96.9075471 },\n            { nominal: 98, mass: 97.9052868, abundance: 0.0187 },\n            { nominal: 99, mass: 98.9059341, abundance: 0.1276 },\n            { nominal: 100, mass: 99.9042143, abundance: 0.126 },\n            { nominal: 101, mass: 100.9055769, abundance: 0.1706 },\n            { nominal: 102, mass: 101.9043441, abundance: 0.3155 },\n            { nominal: 103, mass: 102.9063186 },\n            { nominal: 104, mass: 103.9054275, abundance: 0.1862 },\n            { nominal: 105, mass: 104.9077476 },\n            { nominal: 106, mass: 105.9073291 },\n            { nominal: 107, mass: 106.909972 },\n            { nominal: 108, mass: 107.910188 },\n            { nominal: 109, mass: 108.913326 },\n            { nominal: 110, mass: 109.9140407 },\n            { nominal: 111, mass: 110.91757 },\n            { nominal: 112, mass: 111.918809 },\n            { nominal: 113, mass: 112.922844 },\n            { nominal: 114, mass: 113.9246136 },\n            { nominal: 115, mass: 114.92882 },\n            { nominal: 116, mass: 115.9312192 },\n            { nominal: 117, mass: 116.9361 },\n            { nominal: 118, mass: 117.93853 },\n            { nominal: 119, mass: 118.94357 },\n            { nominal: 120, mass: 119.94631 },\n            { nominal: 121, mass: 120.95164 },\n            { nominal: 122, mass: 121.95447 },\n            { nominal: 123, mass: 122.95989 },\n            { nominal: 124, mass: 123.96305 },\n        ],\n        symbol: 'Ru',\n        mass: 101.06494013916,\n        name: 'Ruthenium',\n        monoisotopicMass: 101.9043441,\n    },\n    {\n        number: 45,\n        isotopes: [\n            { nominal: 89, mass: 88.95058 },\n            { nominal: 90, mass: 89.94422 },\n            { nominal: 91, mass: 90.93688 },\n            { nominal: 92, mass: 91.9323677 },\n            { nominal: 93, mass: 92.9259128 },\n            { nominal: 94, mass: 93.9217305 },\n            { nominal: 95, mass: 94.9158979 },\n            { nominal: 96, mass: 95.914453 },\n            { nominal: 97, mass: 96.911329 },\n            { nominal: 98, mass: 97.910708 },\n            { nominal: 99, mass: 98.9081282 },\n            { nominal: 100, mass: 99.908117 },\n            { nominal: 101, mass: 100.9061606 },\n            { nominal: 102, mass: 101.9068374 },\n            { nominal: 103, mass: 102.905498, abundance: 1 },\n            { nominal: 104, mass: 103.9066492 },\n            { nominal: 105, mass: 104.9056885 },\n            { nominal: 106, mass: 105.9072868 },\n            { nominal: 107, mass: 106.906748 },\n            { nominal: 108, mass: 107.908714 },\n            { nominal: 109, mass: 108.9087488 },\n            { nominal: 110, mass: 109.911079 },\n            { nominal: 111, mass: 110.9116423 },\n            { nominal: 112, mass: 111.914403 },\n            { nominal: 113, mass: 112.9154393 },\n            { nominal: 114, mass: 113.918718 },\n            { nominal: 115, mass: 114.9203116 },\n            { nominal: 116, mass: 115.924059 },\n            { nominal: 117, mass: 116.9260354 },\n            { nominal: 118, mass: 117.93034 },\n            { nominal: 119, mass: 118.932557 },\n            { nominal: 120, mass: 119.93686 },\n            { nominal: 121, mass: 120.93942 },\n            { nominal: 122, mass: 121.94399 },\n            { nominal: 123, mass: 122.94685 },\n            { nominal: 124, mass: 123.95151 },\n            { nominal: 125, mass: 124.95469 },\n            { nominal: 126, mass: 125.95946 },\n        ],\n        symbol: 'Rh',\n        mass: 102.905498,\n        name: 'Rhodium',\n        monoisotopicMass: 102.905498,\n    },\n    {\n        number: 46,\n        isotopes: [\n            { nominal: 91, mass: 90.95032 },\n            { nominal: 92, mass: 91.94088 },\n            { nominal: 93, mass: 92.93651 },\n            { nominal: 94, mass: 93.9290376 },\n            { nominal: 95, mass: 94.9248898 },\n            { nominal: 96, mass: 95.9182151 },\n            { nominal: 97, mass: 96.916472 },\n            { nominal: 98, mass: 97.9126983 },\n            { nominal: 99, mass: 98.9117748 },\n            { nominal: 100, mass: 99.908505 },\n            { nominal: 101, mass: 100.9082864 },\n            { nominal: 102, mass: 101.9056022, abundance: 0.0102 },\n            { nominal: 103, mass: 102.9060809 },\n            { nominal: 104, mass: 103.9040305, abundance: 0.1114 },\n            { nominal: 105, mass: 104.9050796, abundance: 0.2233 },\n            { nominal: 106, mass: 105.9034804, abundance: 0.2733 },\n            { nominal: 107, mass: 106.9051282 },\n            { nominal: 108, mass: 107.9038916, abundance: 0.2646 },\n            { nominal: 109, mass: 108.9059504 },\n            { nominal: 110, mass: 109.9051722, abundance: 0.1172 },\n            { nominal: 111, mass: 110.90768968 },\n            { nominal: 112, mass: 111.9073297 },\n            { nominal: 113, mass: 112.910261 },\n            { nominal: 114, mass: 113.9103686 },\n            { nominal: 115, mass: 114.913659 },\n            { nominal: 116, mass: 115.914297 },\n            { nominal: 117, mass: 116.9179547 },\n            { nominal: 118, mass: 117.9190667 },\n            { nominal: 119, mass: 118.9233402 },\n            { nominal: 120, mass: 119.9245511 },\n            { nominal: 121, mass: 120.9289503 },\n            { nominal: 122, mass: 121.930632 },\n            { nominal: 123, mass: 122.93514 },\n            { nominal: 124, mass: 123.93714 },\n            { nominal: 125, mass: 124.94179 },\n            { nominal: 126, mass: 125.94416 },\n            { nominal: 127, mass: 126.94907 },\n            { nominal: 128, mass: 127.95183 },\n        ],\n        symbol: 'Pd',\n        mass: 106.41532750734,\n        name: 'Palladium',\n        monoisotopicMass: 105.9034804,\n    },\n    {\n        number: 47,\n        isotopes: [\n            { nominal: 93, mass: 92.95033 },\n            { nominal: 94, mass: 93.94373 },\n            { nominal: 95, mass: 94.93602 },\n            { nominal: 96, mass: 95.930744 },\n            { nominal: 97, mass: 96.92397 },\n            { nominal: 98, mass: 97.92156 },\n            { nominal: 99, mass: 98.9176458 },\n            { nominal: 100, mass: 99.9161154 },\n            { nominal: 101, mass: 100.912684 },\n            { nominal: 102, mass: 101.9117047 },\n            { nominal: 103, mass: 102.9089631 },\n            { nominal: 104, mass: 103.9086239 },\n            { nominal: 105, mass: 104.9065256 },\n            { nominal: 106, mass: 105.9066636 },\n            { nominal: 107, mass: 106.9050916, abundance: 0.51839 },\n            { nominal: 108, mass: 107.9059503 },\n            { nominal: 109, mass: 108.9047553, abundance: 0.48161 },\n            { nominal: 110, mass: 109.9061102 },\n            { nominal: 111, mass: 110.9052959 },\n            { nominal: 112, mass: 111.9070486 },\n            { nominal: 113, mass: 112.906573 },\n            { nominal: 114, mass: 113.908823 },\n            { nominal: 115, mass: 114.908767 },\n            { nominal: 116, mass: 115.9113868 },\n            { nominal: 117, mass: 116.911774 },\n            { nominal: 118, mass: 117.9145955 },\n            { nominal: 119, mass: 118.91557 },\n            { nominal: 120, mass: 119.9187848 },\n            { nominal: 121, mass: 120.920125 },\n            { nominal: 122, mass: 121.923664 },\n            { nominal: 123, mass: 122.925337 },\n            { nominal: 124, mass: 123.92893 },\n            { nominal: 125, mass: 124.93105 },\n            { nominal: 126, mass: 125.93475 },\n            { nominal: 127, mass: 126.93711 },\n            { nominal: 128, mass: 127.94106 },\n            { nominal: 129, mass: 128.94395 },\n            { nominal: 130, mass: 129.9507 },\n        ],\n        symbol: 'Ag',\n        mass: 107.868149634557,\n        name: 'Silver',\n        monoisotopicMass: 106.9050916,\n    },\n    {\n        number: 48,\n        isotopes: [\n            { nominal: 95, mass: 94.94994 },\n            { nominal: 96, mass: 95.94034 },\n            { nominal: 97, mass: 96.9351 },\n            { nominal: 98, mass: 97.927389 },\n            { nominal: 99, mass: 98.9249258 },\n            { nominal: 100, mass: 99.9203488 },\n            { nominal: 101, mass: 100.9185862 },\n            { nominal: 102, mass: 101.914482 },\n            { nominal: 103, mass: 102.9134165 },\n            { nominal: 104, mass: 103.9098564 },\n            { nominal: 105, mass: 104.9094639 },\n            { nominal: 106, mass: 105.9064599, abundance: 0.0125 },\n            { nominal: 107, mass: 106.9066121 },\n            { nominal: 108, mass: 107.9041834, abundance: 0.0089 },\n            { nominal: 109, mass: 108.9049867 },\n            { nominal: 110, mass: 109.90300661, abundance: 0.1249 },\n            { nominal: 111, mass: 110.90418287, abundance: 0.128 },\n            { nominal: 112, mass: 111.90276287, abundance: 0.2413 },\n            { nominal: 113, mass: 112.90440813, abundance: 0.1222 },\n            { nominal: 114, mass: 113.90336509, abundance: 0.2873 },\n            { nominal: 115, mass: 114.90543751 },\n            { nominal: 116, mass: 115.90476315, abundance: 0.0749 },\n            { nominal: 117, mass: 116.907226 },\n            { nominal: 118, mass: 117.906922 },\n            { nominal: 119, mass: 118.909847 },\n            { nominal: 120, mass: 119.9098681 },\n            { nominal: 121, mass: 120.9129637 },\n            { nominal: 122, mass: 121.9134591 },\n            { nominal: 123, mass: 122.9168925 },\n            { nominal: 124, mass: 123.9176574 },\n            { nominal: 125, mass: 124.9212576 },\n            { nominal: 126, mass: 125.9224291 },\n            { nominal: 127, mass: 126.926472 },\n            { nominal: 128, mass: 127.9278129 },\n            { nominal: 129, mass: 128.93182 },\n            { nominal: 130, mass: 129.93394 },\n            { nominal: 131, mass: 130.9406 },\n            { nominal: 132, mass: 131.94604 },\n            { nominal: 133, mass: 132.95285 },\n        ],\n        symbol: 'Cd',\n        mass: 112.411557818268,\n        name: 'Cadmium',\n        monoisotopicMass: 113.90336509,\n    },\n    {\n        number: 49,\n        isotopes: [\n            { nominal: 97, mass: 96.94934 },\n            { nominal: 98, mass: 97.94214 },\n            { nominal: 99, mass: 98.93411 },\n            { nominal: 100, mass: 99.93096 },\n            { nominal: 101, mass: 100.92634 },\n            { nominal: 102, mass: 101.9241071 },\n            { nominal: 103, mass: 102.9198819 },\n            { nominal: 104, mass: 103.9182145 },\n            { nominal: 105, mass: 104.914502 },\n            { nominal: 106, mass: 105.913464 },\n            { nominal: 107, mass: 106.91029 },\n            { nominal: 108, mass: 107.9096935 },\n            { nominal: 109, mass: 108.9071514 },\n            { nominal: 110, mass: 109.90717 },\n            { nominal: 111, mass: 110.9051085 },\n            { nominal: 112, mass: 111.9055377 },\n            { nominal: 113, mass: 112.90406184, abundance: 0.0429 },\n            { nominal: 114, mass: 113.90491791 },\n            { nominal: 115, mass: 114.903878776, abundance: 0.9571 },\n            { nominal: 116, mass: 115.90525999 },\n            { nominal: 117, mass: 116.9045157 },\n            { nominal: 118, mass: 117.9063566 },\n            { nominal: 119, mass: 118.9058507 },\n            { nominal: 120, mass: 119.907967 },\n            { nominal: 121, mass: 120.907851 },\n            { nominal: 122, mass: 121.910281 },\n            { nominal: 123, mass: 122.910434 },\n            { nominal: 124, mass: 123.913182 },\n            { nominal: 125, mass: 124.913605 },\n            { nominal: 126, mass: 125.916507 },\n            { nominal: 127, mass: 126.917446 },\n            { nominal: 128, mass: 127.9204 },\n            { nominal: 129, mass: 128.9218053 },\n            { nominal: 130, mass: 129.924977 },\n            { nominal: 131, mass: 130.9269715 },\n            { nominal: 132, mass: 131.933001 },\n            { nominal: 133, mass: 132.93831 },\n            { nominal: 134, mass: 133.94454 },\n            { nominal: 135, mass: 134.95005 },\n        ],\n        symbol: 'In',\n        mass: 114.81808662944559,\n        name: 'Indium',\n        monoisotopicMass: 114.903878776,\n    },\n    {\n        number: 50,\n        isotopes: [\n            { nominal: 99, mass: 98.94853 },\n            { nominal: 100, mass: 99.9385 },\n            { nominal: 101, mass: 100.93526 },\n            { nominal: 102, mass: 101.93029 },\n            { nominal: 103, mass: 102.928105 },\n            { nominal: 104, mass: 103.9231052 },\n            { nominal: 105, mass: 104.9212684 },\n            { nominal: 106, mass: 105.9169574 },\n            { nominal: 107, mass: 106.9157137 },\n            { nominal: 108, mass: 107.9118943 },\n            { nominal: 109, mass: 108.9112921 },\n            { nominal: 110, mass: 109.907845 },\n            { nominal: 111, mass: 110.9077401 },\n            { nominal: 112, mass: 111.90482387, abundance: 0.0097 },\n            { nominal: 113, mass: 112.9051757 },\n            { nominal: 114, mass: 113.9027827, abundance: 0.0066 },\n            { nominal: 115, mass: 114.903344699, abundance: 0.0034 },\n            { nominal: 116, mass: 115.9017428, abundance: 0.1454 },\n            { nominal: 117, mass: 116.90295398, abundance: 0.0768 },\n            { nominal: 118, mass: 117.90160657, abundance: 0.2422 },\n            { nominal: 119, mass: 118.90331117, abundance: 0.0859 },\n            { nominal: 120, mass: 119.90220163, abundance: 0.3258 },\n            { nominal: 121, mass: 120.9042426 },\n            { nominal: 122, mass: 121.9034438, abundance: 0.0463 },\n            { nominal: 123, mass: 122.9057252 },\n            { nominal: 124, mass: 123.9052766, abundance: 0.0579 },\n            { nominal: 125, mass: 124.9077864 },\n            { nominal: 126, mass: 125.907659 },\n            { nominal: 127, mass: 126.91039 },\n            { nominal: 128, mass: 127.910507 },\n            { nominal: 129, mass: 128.913465 },\n            { nominal: 130, mass: 129.9139738 },\n            { nominal: 131, mass: 130.917045 },\n            { nominal: 132, mass: 131.9178267 },\n            { nominal: 133, mass: 132.9239134 },\n            { nominal: 134, mass: 133.9286821 },\n            { nominal: 135, mass: 134.9349086 },\n            { nominal: 136, mass: 135.93999 },\n            { nominal: 137, mass: 136.94655 },\n            { nominal: 138, mass: 137.95184 },\n        ],\n        symbol: 'Sn',\n        mass: 118.71011259301059,\n        name: 'Tin',\n        monoisotopicMass: 119.90220163,\n    },\n    {\n        number: 51,\n        isotopes: [\n            { nominal: 103, mass: 102.93969 },\n            { nominal: 104, mass: 103.93648 },\n            { nominal: 105, mass: 104.931276 },\n            { nominal: 106, mass: 105.928638 },\n            { nominal: 107, mass: 106.9241506 },\n            { nominal: 108, mass: 107.9222267 },\n            { nominal: 109, mass: 108.9181411 },\n            { nominal: 110, mass: 109.9168543 },\n            { nominal: 111, mass: 110.9132182 },\n            { nominal: 112, mass: 111.9124 },\n            { nominal: 113, mass: 112.909375 },\n            { nominal: 114, mass: 113.90929 },\n            { nominal: 115, mass: 114.906598 },\n            { nominal: 116, mass: 115.9067931 },\n            { nominal: 117, mass: 116.9048415 },\n            { nominal: 118, mass: 117.9055321 },\n            { nominal: 119, mass: 118.9039455 },\n            { nominal: 120, mass: 119.9050794 },\n            { nominal: 121, mass: 120.903812, abundance: 0.5721 },\n            { nominal: 122, mass: 121.9051699 },\n            { nominal: 123, mass: 122.9042132, abundance: 0.4279 },\n            { nominal: 124, mass: 123.905935 },\n            { nominal: 125, mass: 124.905253 },\n            { nominal: 126, mass: 125.907253 },\n            { nominal: 127, mass: 126.9069243 },\n            { nominal: 128, mass: 127.909146 },\n            { nominal: 129, mass: 128.909147 },\n            { nominal: 130, mass: 129.911662 },\n            { nominal: 131, mass: 130.9119888 },\n            { nominal: 132, mass: 131.9145077 },\n            { nominal: 133, mass: 132.9152732 },\n            { nominal: 134, mass: 133.9205357 },\n            { nominal: 135, mass: 134.9251851 },\n            { nominal: 136, mass: 135.9307459 },\n            { nominal: 137, mass: 136.93555 },\n            { nominal: 138, mass: 137.94145 },\n            { nominal: 139, mass: 138.94655 },\n            { nominal: 140, mass: 139.95283 },\n        ],\n        symbol: 'Sb',\n        mass: 121.75978367348,\n        name: 'Antimony',\n        monoisotopicMass: 120.903812,\n    },\n    {\n        number: 52,\n        isotopes: [\n            { nominal: 105, mass: 104.9433 },\n            { nominal: 106, mass: 105.9375 },\n            { nominal: 107, mass: 106.935012 },\n            { nominal: 108, mass: 107.9293805 },\n            { nominal: 109, mass: 108.9273045 },\n            { nominal: 110, mass: 109.9224581 },\n            { nominal: 111, mass: 110.9210006 },\n            { nominal: 112, mass: 111.9167279 },\n            { nominal: 113, mass: 112.915891 },\n            { nominal: 114, mass: 113.912089 },\n            { nominal: 115, mass: 114.911902 },\n            { nominal: 116, mass: 115.90846 },\n            { nominal: 117, mass: 116.908646 },\n            { nominal: 118, mass: 117.905854 },\n            { nominal: 119, mass: 118.9064071 },\n            { nominal: 120, mass: 119.9040593, abundance: 0.0009 },\n            { nominal: 121, mass: 120.904944 },\n            { nominal: 122, mass: 121.9030435, abundance: 0.0255 },\n            { nominal: 123, mass: 122.9042698, abundance: 0.0089 },\n            { nominal: 124, mass: 123.9028171, abundance: 0.0474 },\n            { nominal: 125, mass: 124.9044299, abundance: 0.0707 },\n            { nominal: 126, mass: 125.9033109, abundance: 0.1884 },\n            { nominal: 127, mass: 126.9052257 },\n            { nominal: 128, mass: 127.90446128, abundance: 0.3174 },\n            { nominal: 129, mass: 128.90659646 },\n            { nominal: 130, mass: 129.906222748, abundance: 0.3408 },\n            { nominal: 131, mass: 130.908522213 },\n            { nominal: 132, mass: 131.9085467 },\n            { nominal: 133, mass: 132.9109688 },\n            { nominal: 134, mass: 133.911394 },\n            { nominal: 135, mass: 134.9165557 },\n            { nominal: 136, mass: 135.9201006 },\n            { nominal: 137, mass: 136.9255989 },\n            { nominal: 138, mass: 137.9294722 },\n            { nominal: 139, mass: 138.9353672 },\n            { nominal: 140, mass: 139.939499 },\n            { nominal: 141, mass: 140.9458 },\n            { nominal: 142, mass: 141.95022 },\n            { nominal: 143, mass: 142.95676 },\n        ],\n        symbol: 'Te',\n        mass: 127.6031264846604,\n        name: 'Tellurium',\n        monoisotopicMass: 129.906222748,\n    },\n    {\n        number: 53,\n        isotopes: [\n            { nominal: 107, mass: 106.94678 },\n            { nominal: 108, mass: 107.94348 },\n            { nominal: 109, mass: 108.9380853 },\n            { nominal: 110, mass: 109.935089 },\n            { nominal: 111, mass: 110.9302692 },\n            { nominal: 112, mass: 111.928005 },\n            { nominal: 113, mass: 112.9236501 },\n            { nominal: 114, mass: 113.92185 },\n            { nominal: 115, mass: 114.918048 },\n            { nominal: 116, mass: 115.91681 },\n            { nominal: 117, mass: 116.913648 },\n            { nominal: 118, mass: 117.913074 },\n            { nominal: 119, mass: 118.910074 },\n            { nominal: 120, mass: 119.910087 },\n            { nominal: 121, mass: 120.9074051 },\n            { nominal: 122, mass: 121.9075888 },\n            { nominal: 123, mass: 122.9055885 },\n            { nominal: 124, mass: 123.906209 },\n            { nominal: 125, mass: 124.9046294 },\n            { nominal: 126, mass: 125.9056233 },\n            { nominal: 127, mass: 126.9044719, abundance: 1 },\n            { nominal: 128, mass: 127.9058086 },\n            { nominal: 129, mass: 128.9049837 },\n            { nominal: 130, mass: 129.9066702 },\n            { nominal: 131, mass: 130.9061263 },\n            { nominal: 132, mass: 131.9079935 },\n            { nominal: 133, mass: 132.907797 },\n            { nominal: 134, mass: 133.9097588 },\n            { nominal: 135, mass: 134.9100488 },\n            { nominal: 136, mass: 135.914604 },\n            { nominal: 137, mass: 136.9180282 },\n            { nominal: 138, mass: 137.9227264 },\n            { nominal: 139, mass: 138.926506 },\n            { nominal: 140, mass: 139.93173 },\n            { nominal: 141, mass: 140.93569 },\n            { nominal: 142, mass: 141.9412 },\n            { nominal: 143, mass: 142.94565 },\n            { nominal: 144, mass: 143.95139 },\n            { nominal: 145, mass: 144.95605 },\n        ],\n        symbol: 'I',\n        mass: 126.9044719,\n        name: 'Iodine',\n        monoisotopicMass: 126.9044719,\n    },\n    {\n        number: 54,\n        isotopes: [\n            { nominal: 109, mass: 108.95043 },\n            { nominal: 110, mass: 109.94426 },\n            { nominal: 111, mass: 110.941607 },\n            { nominal: 112, mass: 111.935559 },\n            { nominal: 113, mass: 112.9332217 },\n            { nominal: 114, mass: 113.92798 },\n            { nominal: 115, mass: 114.926294 },\n            { nominal: 116, mass: 115.921581 },\n            { nominal: 117, mass: 116.920359 },\n            { nominal: 118, mass: 117.916179 },\n            { nominal: 119, mass: 118.915411 },\n            { nominal: 120, mass: 119.911784 },\n            { nominal: 121, mass: 120.911453 },\n            { nominal: 122, mass: 121.908368 },\n            { nominal: 123, mass: 122.908482 },\n            { nominal: 124, mass: 123.905892, abundance: 0.000952 },\n            { nominal: 125, mass: 124.9063944 },\n            { nominal: 126, mass: 125.9042983, abundance: 0.00089 },\n            { nominal: 127, mass: 126.9051829 },\n            { nominal: 128, mass: 127.903531, abundance: 0.019102 },\n            { nominal: 129, mass: 128.9047808611, abundance: 0.264006 },\n            { nominal: 130, mass: 129.903509349, abundance: 0.04071 },\n            { nominal: 131, mass: 130.90508406, abundance: 0.212324 },\n            { nominal: 132, mass: 131.9041550856, abundance: 0.269086 },\n            { nominal: 133, mass: 132.9059108 },\n            { nominal: 134, mass: 133.90539466, abundance: 0.104357 },\n            { nominal: 135, mass: 134.9072278 },\n            { nominal: 136, mass: 135.907214484, abundance: 0.088573 },\n            { nominal: 137, mass: 136.91155778 },\n            { nominal: 138, mass: 137.9141463 },\n            { nominal: 139, mass: 138.9187922 },\n            { nominal: 140, mass: 139.9216458 },\n            { nominal: 141, mass: 140.9267872 },\n            { nominal: 142, mass: 141.9299731 },\n            { nominal: 143, mass: 142.9353696 },\n            { nominal: 144, mass: 143.9389451 },\n            { nominal: 145, mass: 144.94472 },\n            { nominal: 146, mass: 145.948518 },\n            { nominal: 147, mass: 146.95426 },\n            { nominal: 148, mass: 147.95813 },\n        ],\n        symbol: 'Xe',\n        mass: 131.29276144779053,\n        name: 'Xenon',\n        monoisotopicMass: 131.9041550856,\n    },\n    {\n        number: 55,\n        isotopes: [\n            { nominal: 112, mass: 111.950309 },\n            { nominal: 113, mass: 112.9444291 },\n            { nominal: 114, mass: 113.941296 },\n            { nominal: 115, mass: 114.93591 },\n            { nominal: 116, mass: 115.93337 },\n            { nominal: 117, mass: 116.928617 },\n            { nominal: 118, mass: 117.92656 },\n            { nominal: 119, mass: 118.922377 },\n            { nominal: 120, mass: 119.920677 },\n            { nominal: 121, mass: 120.917227 },\n            { nominal: 122, mass: 121.916108 },\n            { nominal: 123, mass: 122.912996 },\n            { nominal: 124, mass: 123.9122578 },\n            { nominal: 125, mass: 124.909728 },\n            { nominal: 126, mass: 125.909446 },\n            { nominal: 127, mass: 126.9074174 },\n            { nominal: 128, mass: 127.9077487 },\n            { nominal: 129, mass: 128.9060657 },\n            { nominal: 130, mass: 129.9067093 },\n            { nominal: 131, mass: 130.9054649 },\n            { nominal: 132, mass: 131.9064339 },\n            { nominal: 133, mass: 132.905451961, abundance: 1 },\n            { nominal: 134, mass: 133.906718503 },\n            { nominal: 135, mass: 134.905977 },\n            { nominal: 136, mass: 135.9073114 },\n            { nominal: 137, mass: 136.90708923 },\n            { nominal: 138, mass: 137.9110171 },\n            { nominal: 139, mass: 138.9133638 },\n            { nominal: 140, mass: 139.9172831 },\n            { nominal: 141, mass: 140.9200455 },\n            { nominal: 142, mass: 141.924296 },\n            { nominal: 143, mass: 142.927349 },\n            { nominal: 144, mass: 143.932076 },\n            { nominal: 145, mass: 144.935527 },\n            { nominal: 146, mass: 145.940344 },\n            { nominal: 147, mass: 146.944156 },\n            { nominal: 148, mass: 147.94923 },\n            { nominal: 149, mass: 148.95302 },\n            { nominal: 150, mass: 149.95833 },\n            { nominal: 151, mass: 150.96258 },\n        ],\n        symbol: 'Cs',\n        mass: 132.905451961,\n        name: 'Caesium',\n        monoisotopicMass: 132.905451961,\n    },\n    {\n        number: 56,\n        isotopes: [\n            { nominal: 114, mass: 113.95066 },\n            { nominal: 115, mass: 114.94737 },\n            { nominal: 116, mass: 115.94128 },\n            { nominal: 117, mass: 116.93814 },\n            { nominal: 118, mass: 117.93306 },\n            { nominal: 119, mass: 118.93066 },\n            { nominal: 120, mass: 119.92605 },\n            { nominal: 121, mass: 120.92405 },\n            { nominal: 122, mass: 121.919904 },\n            { nominal: 123, mass: 122.918781 },\n            { nominal: 124, mass: 123.915094 },\n            { nominal: 125, mass: 124.914472 },\n            { nominal: 126, mass: 125.91125 },\n            { nominal: 127, mass: 126.911091 },\n            { nominal: 128, mass: 127.908342 },\n            { nominal: 129, mass: 128.908681 },\n            { nominal: 130, mass: 129.9063207, abundance: 0.00106 },\n            { nominal: 131, mass: 130.906941 },\n            { nominal: 132, mass: 131.9050611, abundance: 0.00101 },\n            { nominal: 133, mass: 132.9060074 },\n            { nominal: 134, mass: 133.90450818, abundance: 0.02417 },\n            { nominal: 135, mass: 134.90568838, abundance: 0.06592 },\n            { nominal: 136, mass: 135.90457573, abundance: 0.07854 },\n            { nominal: 137, mass: 136.90582714, abundance: 0.11232 },\n            { nominal: 138, mass: 137.905247, abundance: 0.71698 },\n            { nominal: 139, mass: 138.9088411 },\n            { nominal: 140, mass: 139.9106057 },\n            { nominal: 141, mass: 140.9144033 },\n            { nominal: 142, mass: 141.9164324 },\n            { nominal: 143, mass: 142.9206253 },\n            { nominal: 144, mass: 143.9229549 },\n            { nominal: 145, mass: 144.9275184 },\n            { nominal: 146, mass: 145.930284 },\n            { nominal: 147, mass: 146.935304 },\n            { nominal: 148, mass: 147.938171 },\n            { nominal: 149, mass: 148.94308 },\n            { nominal: 150, mass: 149.94605 },\n            { nominal: 151, mass: 150.95127 },\n            { nominal: 152, mass: 151.95481 },\n            { nominal: 153, mass: 152.96036 },\n        ],\n        symbol: 'Ba',\n        mass: 137.3268916286322,\n        name: 'Barium',\n        monoisotopicMass: 137.905247,\n    },\n    {\n        number: 57,\n        isotopes: [\n            { nominal: 116, mass: 115.9563 },\n            { nominal: 117, mass: 116.94999 },\n            { nominal: 118, mass: 117.94673 },\n            { nominal: 119, mass: 118.94099 },\n            { nominal: 120, mass: 119.93807 },\n            { nominal: 121, mass: 120.93315 },\n            { nominal: 122, mass: 121.93071 },\n            { nominal: 123, mass: 122.9263 },\n            { nominal: 124, mass: 123.924574 },\n            { nominal: 125, mass: 124.920816 },\n            { nominal: 126, mass: 125.919513 },\n            { nominal: 127, mass: 126.916375 },\n            { nominal: 128, mass: 127.915592 },\n            { nominal: 129, mass: 128.912694 },\n            { nominal: 130, mass: 129.912369 },\n            { nominal: 131, mass: 130.91007 },\n            { nominal: 132, mass: 131.910119 },\n            { nominal: 133, mass: 132.908218 },\n            { nominal: 134, mass: 133.908514 },\n            { nominal: 135, mass: 134.906984 },\n            { nominal: 136, mass: 135.907635 },\n            { nominal: 137, mass: 136.9064504 },\n            { nominal: 138, mass: 137.9071149, abundance: 0.0008881 },\n            { nominal: 139, mass: 138.9063563, abundance: 0.9991119 },\n            { nominal: 140, mass: 139.9094806 },\n            { nominal: 141, mass: 140.910966 },\n            { nominal: 142, mass: 141.9140909 },\n            { nominal: 143, mass: 142.9160795 },\n            { nominal: 144, mass: 143.919646 },\n            { nominal: 145, mass: 144.921808 },\n            { nominal: 146, mass: 145.925875 },\n            { nominal: 147, mass: 146.928418 },\n            { nominal: 148, mass: 147.932679 },\n            { nominal: 149, mass: 148.93535 },\n            { nominal: 150, mass: 149.93947 },\n            { nominal: 151, mass: 150.94232 },\n            { nominal: 152, mass: 151.94682 },\n            { nominal: 153, mass: 152.95036 },\n            { nominal: 154, mass: 153.95517 },\n            { nominal: 155, mass: 154.95901 },\n        ],\n        symbol: 'La',\n        mass: 138.90546887371266,\n        name: 'Lanthanum',\n        monoisotopicMass: 138.9063563,\n    },\n    {\n        number: 58,\n        isotopes: [\n            { nominal: 119, mass: 118.95271 },\n            { nominal: 120, mass: 119.94654 },\n            { nominal: 121, mass: 120.94335 },\n            { nominal: 122, mass: 121.93787 },\n            { nominal: 123, mass: 122.93528 },\n            { nominal: 124, mass: 123.93031 },\n            { nominal: 125, mass: 124.92844 },\n            { nominal: 126, mass: 125.923971 },\n            { nominal: 127, mass: 126.922727 },\n            { nominal: 128, mass: 127.918911 },\n            { nominal: 129, mass: 128.918102 },\n            { nominal: 130, mass: 129.914736 },\n            { nominal: 131, mass: 130.914429 },\n            { nominal: 132, mass: 131.911464 },\n            { nominal: 133, mass: 132.91152 },\n            { nominal: 134, mass: 133.908928 },\n            { nominal: 135, mass: 134.909161 },\n            { nominal: 136, mass: 135.90712921, abundance: 0.00185 },\n            { nominal: 137, mass: 136.90776236 },\n            { nominal: 138, mass: 137.905991, abundance: 0.00251 },\n            { nominal: 139, mass: 138.9066551 },\n            { nominal: 140, mass: 139.9054431, abundance: 0.8845 },\n            { nominal: 141, mass: 140.9082807 },\n            { nominal: 142, mass: 141.9092504, abundance: 0.11114 },\n            { nominal: 143, mass: 142.9123921 },\n            { nominal: 144, mass: 143.9136529 },\n            { nominal: 145, mass: 144.917265 },\n            { nominal: 146, mass: 145.918802 },\n            { nominal: 147, mass: 146.9226899 },\n            { nominal: 148, mass: 147.924424 },\n            { nominal: 149, mass: 148.928427 },\n            { nominal: 150, mass: 149.930384 },\n            { nominal: 151, mass: 150.934272 },\n            { nominal: 152, mass: 151.9366 },\n            { nominal: 153, mass: 152.94093 },\n            { nominal: 154, mass: 153.9438 },\n            { nominal: 155, mass: 154.94855 },\n            { nominal: 156, mass: 155.95183 },\n            { nominal: 157, mass: 156.95705 },\n        ],\n        symbol: 'Ce',\n        mass: 140.1157307378545,\n        name: 'Cerium',\n        monoisotopicMass: 139.9054431,\n    },\n    {\n        number: 59,\n        isotopes: [\n            { nominal: 121, mass: 120.95532 },\n            { nominal: 122, mass: 121.95175 },\n            { nominal: 123, mass: 122.94596 },\n            { nominal: 124, mass: 123.94294 },\n            { nominal: 125, mass: 124.9377 },\n            { nominal: 126, mass: 125.93524 },\n            { nominal: 127, mass: 126.93071 },\n            { nominal: 128, mass: 127.928791 },\n            { nominal: 129, mass: 128.925095 },\n            { nominal: 130, mass: 129.92359 },\n            { nominal: 131, mass: 130.920235 },\n            { nominal: 132, mass: 131.919255 },\n            { nominal: 133, mass: 132.916331 },\n            { nominal: 134, mass: 133.915697 },\n            { nominal: 135, mass: 134.913112 },\n            { nominal: 136, mass: 135.912677 },\n            { nominal: 137, mass: 136.9106792 },\n            { nominal: 138, mass: 137.910754 },\n            { nominal: 139, mass: 138.9089408 },\n            { nominal: 140, mass: 139.9090803 },\n            { nominal: 141, mass: 140.9076576, abundance: 1 },\n            { nominal: 142, mass: 141.9100496 },\n            { nominal: 143, mass: 142.9108228 },\n            { nominal: 144, mass: 143.9133109 },\n            { nominal: 145, mass: 144.9145182 },\n            { nominal: 146, mass: 145.91768 },\n            { nominal: 147, mass: 146.919008 },\n            { nominal: 148, mass: 147.92213 },\n            { nominal: 149, mass: 148.923736 },\n            { nominal: 150, mass: 149.9266765 },\n            { nominal: 151, mass: 150.928309 },\n            { nominal: 152, mass: 151.931553 },\n            { nominal: 153, mass: 152.933904 },\n            { nominal: 154, mass: 153.93753 },\n            { nominal: 155, mass: 154.940509 },\n            { nominal: 156, mass: 155.94464 },\n            { nominal: 157, mass: 156.94789 },\n            { nominal: 158, mass: 157.95241 },\n            { nominal: 159, mass: 158.95589 },\n        ],\n        symbol: 'Pr',\n        mass: 140.9076576,\n        name: 'Praseodymium',\n        monoisotopicMass: 140.9076576,\n    },\n    {\n        number: 60,\n        isotopes: [\n            { nominal: 124, mass: 123.9522 },\n            { nominal: 125, mass: 124.9489 },\n            { nominal: 126, mass: 125.94311 },\n            { nominal: 127, mass: 126.94038 },\n            { nominal: 128, mass: 127.93525 },\n            { nominal: 129, mass: 128.9331 },\n            { nominal: 130, mass: 129.928506 },\n            { nominal: 131, mass: 130.927248 },\n            { nominal: 132, mass: 131.923321 },\n            { nominal: 133, mass: 132.922348 },\n            { nominal: 134, mass: 133.91879 },\n            { nominal: 135, mass: 134.918181 },\n            { nominal: 136, mass: 135.914976 },\n            { nominal: 137, mass: 136.914562 },\n            { nominal: 138, mass: 137.91195 },\n            { nominal: 139, mass: 138.911954 },\n            { nominal: 140, mass: 139.90955 },\n            { nominal: 141, mass: 140.9096147 },\n            { nominal: 142, mass: 141.907729, abundance: 0.27152 },\n            { nominal: 143, mass: 142.90982, abundance: 0.12174 },\n            { nominal: 144, mass: 143.910093, abundance: 0.23798 },\n            { nominal: 145, mass: 144.9125793, abundance: 0.08293 },\n            { nominal: 146, mass: 145.9131226, abundance: 0.17189 },\n            { nominal: 147, mass: 146.9161061 },\n            { nominal: 148, mass: 147.9168993, abundance: 0.05756 },\n            { nominal: 149, mass: 148.9201548 },\n            { nominal: 150, mass: 149.9209022, abundance: 0.05638 },\n            { nominal: 151, mass: 150.9238403 },\n            { nominal: 152, mass: 151.924692 },\n            { nominal: 153, mass: 152.927718 },\n            { nominal: 154, mass: 153.92948 },\n            { nominal: 155, mass: 154.9331357 },\n            { nominal: 156, mass: 155.93508 },\n            { nominal: 157, mass: 156.939386 },\n            { nominal: 158, mass: 157.94197 },\n            { nominal: 159, mass: 158.94653 },\n            { nominal: 160, mass: 159.9494 },\n            { nominal: 161, mass: 160.95428 },\n        ],\n        symbol: 'Nd',\n        mass: 144.241596031827,\n        name: 'Neodymium',\n        monoisotopicMass: 141.907729,\n    },\n    {\n        number: 61,\n        isotopes: [\n            { nominal: 126, mass: 125.95792 },\n            { nominal: 127, mass: 126.95192 },\n            { nominal: 128, mass: 127.9487 },\n            { nominal: 129, mass: 128.94323 },\n            { nominal: 130, mass: 129.94053 },\n            { nominal: 131, mass: 130.93567 },\n            { nominal: 132, mass: 131.93384 },\n            { nominal: 133, mass: 132.929782 },\n            { nominal: 134, mass: 133.928353 },\n            { nominal: 135, mass: 134.924823 },\n            { nominal: 136, mass: 135.923585 },\n            { nominal: 137, mass: 136.92048 },\n            { nominal: 138, mass: 137.919548 },\n            { nominal: 139, mass: 138.9168 },\n            { nominal: 140, mass: 139.91604 },\n            { nominal: 141, mass: 140.913555 },\n            { nominal: 142, mass: 141.91289 },\n            { nominal: 143, mass: 142.9109383 },\n            { nominal: 144, mass: 143.9125964 },\n            { nominal: 145, mass: 144.9127559 },\n            { nominal: 146, mass: 145.9147024 },\n            { nominal: 147, mass: 146.915145 },\n            { nominal: 148, mass: 147.9174819 },\n            { nominal: 149, mass: 148.9183423 },\n            { nominal: 150, mass: 149.920991 },\n            { nominal: 151, mass: 150.9212175 },\n            { nominal: 152, mass: 151.923506 },\n            { nominal: 153, mass: 152.9241567 },\n            { nominal: 154, mass: 153.926472 },\n            { nominal: 155, mass: 154.928137 },\n            { nominal: 156, mass: 155.9311175 },\n            { nominal: 157, mass: 156.9331214 },\n            { nominal: 158, mass: 157.936565 },\n            { nominal: 159, mass: 158.939287 },\n            { nominal: 160, mass: 159.9431 },\n            { nominal: 161, mass: 160.94607 },\n            { nominal: 162, mass: 161.95022 },\n            { nominal: 163, mass: 162.95357 },\n        ],\n        symbol: 'Pm',\n        mass: null,\n        name: 'Promethium',\n    },\n    {\n        number: 62,\n        isotopes: [\n            { nominal: 128, mass: 127.95842 },\n            { nominal: 129, mass: 128.95476 },\n            { nominal: 130, mass: 129.949 },\n            { nominal: 131, mass: 130.94618 },\n            { nominal: 132, mass: 131.94087 },\n            { nominal: 133, mass: 132.93856 },\n            { nominal: 134, mass: 133.93411 },\n            { nominal: 135, mass: 134.93252 },\n            { nominal: 136, mass: 135.928276 },\n            { nominal: 137, mass: 136.926971 },\n            { nominal: 138, mass: 137.923244 },\n            { nominal: 139, mass: 138.922297 },\n            { nominal: 140, mass: 139.918995 },\n            { nominal: 141, mass: 140.9184816 },\n            { nominal: 142, mass: 141.9152044 },\n            { nominal: 143, mass: 142.9146353 },\n            { nominal: 144, mass: 143.9120065, abundance: 0.0307 },\n            { nominal: 145, mass: 144.9134173 },\n            { nominal: 146, mass: 145.913047 },\n            { nominal: 147, mass: 146.9149044, abundance: 0.1499 },\n            { nominal: 148, mass: 147.9148292, abundance: 0.1124 },\n            { nominal: 149, mass: 148.9171921, abundance: 0.1382 },\n            { nominal: 150, mass: 149.9172829, abundance: 0.0738 },\n            { nominal: 151, mass: 150.9199398 },\n            { nominal: 152, mass: 151.9197397, abundance: 0.2675 },\n            { nominal: 153, mass: 152.9221047 },\n            { nominal: 154, mass: 153.9222169, abundance: 0.2275 },\n            { nominal: 155, mass: 154.9246477 },\n            { nominal: 156, mass: 155.925536 },\n            { nominal: 157, mass: 156.9284187 },\n            { nominal: 158, mass: 157.929951 },\n            { nominal: 159, mass: 158.9332172 },\n            { nominal: 160, mass: 159.9353353 },\n            { nominal: 161, mass: 160.9391602 },\n            { nominal: 162, mass: 161.94146 },\n            { nominal: 163, mass: 162.94555 },\n            { nominal: 164, mass: 163.94836 },\n            { nominal: 165, mass: 164.95297 },\n        ],\n        symbol: 'Sm',\n        mass: 150.36635571193,\n        name: 'Samarium',\n        monoisotopicMass: 151.9197397,\n    },\n    {\n        number: 63,\n        isotopes: [\n            { nominal: 130, mass: 129.96369 },\n            { nominal: 131, mass: 130.95784 },\n            { nominal: 132, mass: 131.95467 },\n            { nominal: 133, mass: 132.94929 },\n            { nominal: 134, mass: 133.9464 },\n            { nominal: 135, mass: 134.94187 },\n            { nominal: 136, mass: 135.93962 },\n            { nominal: 137, mass: 136.93546 },\n            { nominal: 138, mass: 137.933709 },\n            { nominal: 139, mass: 138.929792 },\n            { nominal: 140, mass: 139.928088 },\n            { nominal: 141, mass: 140.924932 },\n            { nominal: 142, mass: 141.923442 },\n            { nominal: 143, mass: 142.920299 },\n            { nominal: 144, mass: 143.91882 },\n            { nominal: 145, mass: 144.9162726 },\n            { nominal: 146, mass: 145.917211 },\n            { nominal: 147, mass: 146.9167527 },\n            { nominal: 148, mass: 147.918089 },\n            { nominal: 149, mass: 148.9179378 },\n            { nominal: 150, mass: 149.9197077 },\n            { nominal: 151, mass: 150.9198578, abundance: 0.4781 },\n            { nominal: 152, mass: 151.9217522 },\n            { nominal: 153, mass: 152.921238, abundance: 0.5219 },\n            { nominal: 154, mass: 153.922987 },\n            { nominal: 155, mass: 154.9229011 },\n            { nominal: 156, mass: 155.9247605 },\n            { nominal: 157, mass: 156.9254334 },\n            { nominal: 158, mass: 157.927799 },\n            { nominal: 159, mass: 158.9291001 },\n            { nominal: 160, mass: 159.931851 },\n            { nominal: 161, mass: 160.933664 },\n            { nominal: 162, mass: 161.936989 },\n            { nominal: 163, mass: 162.939196 },\n            { nominal: 164, mass: 163.94274 },\n            { nominal: 165, mass: 164.94559 },\n            { nominal: 166, mass: 165.94962 },\n            { nominal: 167, mass: 166.95289 },\n        ],\n        symbol: 'Eu',\n        mass: 151.96437812637998,\n        name: 'Europium',\n        monoisotopicMass: 152.921238,\n    },\n    {\n        number: 64,\n        isotopes: [\n            { nominal: 133, mass: 132.96133 },\n            { nominal: 134, mass: 133.95566 },\n            { nominal: 135, mass: 134.95245 },\n            { nominal: 136, mass: 135.9473 },\n            { nominal: 137, mass: 136.94502 },\n            { nominal: 138, mass: 137.94025 },\n            { nominal: 139, mass: 138.93813 },\n            { nominal: 140, mass: 139.933674 },\n            { nominal: 141, mass: 140.932126 },\n            { nominal: 142, mass: 141.928116 },\n            { nominal: 143, mass: 142.92675 },\n            { nominal: 144, mass: 143.922963 },\n            { nominal: 145, mass: 144.921713 },\n            { nominal: 146, mass: 145.9183188 },\n            { nominal: 147, mass: 146.9191014 },\n            { nominal: 148, mass: 147.9181215 },\n            { nominal: 149, mass: 148.9193481 },\n            { nominal: 150, mass: 149.9186644 },\n            { nominal: 151, mass: 150.920356 },\n            { nominal: 152, mass: 151.9197995, abundance: 0.002 },\n            { nominal: 153, mass: 152.921758 },\n            { nominal: 154, mass: 153.9208741, abundance: 0.0218 },\n            { nominal: 155, mass: 154.9226305, abundance: 0.148 },\n            { nominal: 156, mass: 155.9221312, abundance: 0.2047 },\n            { nominal: 157, mass: 156.9239686, abundance: 0.1565 },\n            { nominal: 158, mass: 157.9241123, abundance: 0.2484 },\n            { nominal: 159, mass: 158.926397 },\n            { nominal: 160, mass: 159.9270624, abundance: 0.2186 },\n            { nominal: 161, mass: 160.9296775 },\n            { nominal: 162, mass: 161.930993 },\n            { nominal: 163, mass: 162.9341769 },\n            { nominal: 164, mass: 163.93583 },\n            { nominal: 165, mass: 164.93936 },\n            { nominal: 166, mass: 165.94146 },\n            { nominal: 167, mass: 166.94545 },\n            { nominal: 168, mass: 167.94808 },\n            { nominal: 169, mass: 168.9526 },\n        ],\n        symbol: 'Gd',\n        mass: 157.25213064687998,\n        name: 'Gadolinium',\n        monoisotopicMass: 157.9241123,\n    },\n    {\n        number: 65,\n        isotopes: [\n            { nominal: 135, mass: 134.96476 },\n            { nominal: 136, mass: 135.96129 },\n            { nominal: 137, mass: 136.95602 },\n            { nominal: 138, mass: 137.95312 },\n            { nominal: 139, mass: 138.94833 },\n            { nominal: 140, mass: 139.94581 },\n            { nominal: 141, mass: 140.94145 },\n            { nominal: 142, mass: 141.93928 },\n            { nominal: 143, mass: 142.935137 },\n            { nominal: 144, mass: 143.933045 },\n            { nominal: 145, mass: 144.92882 },\n            { nominal: 146, mass: 145.927253 },\n            { nominal: 147, mass: 146.9240548 },\n            { nominal: 148, mass: 147.924282 },\n            { nominal: 149, mass: 148.9232535 },\n            { nominal: 150, mass: 149.9236649 },\n            { nominal: 151, mass: 150.9231096 },\n            { nominal: 152, mass: 151.924083 },\n            { nominal: 153, mass: 152.9234424 },\n            { nominal: 154, mass: 153.924685 },\n            { nominal: 155, mass: 154.923511 },\n            { nominal: 156, mass: 155.9247552 },\n            { nominal: 157, mass: 156.924033 },\n            { nominal: 158, mass: 157.9254209 },\n            { nominal: 159, mass: 158.9253547, abundance: 1 },\n            { nominal: 160, mass: 159.9271756 },\n            { nominal: 161, mass: 160.9275778 },\n            { nominal: 162, mass: 161.929495 },\n            { nominal: 163, mass: 162.9306547 },\n            { nominal: 164, mass: 163.93336 },\n            { nominal: 165, mass: 164.93498 },\n            { nominal: 166, mass: 165.93786 },\n            { nominal: 167, mass: 166.93996 },\n            { nominal: 168, mass: 167.9434 },\n            { nominal: 169, mass: 168.94597 },\n            { nominal: 170, mass: 169.94984 },\n            { nominal: 171, mass: 170.95273 },\n        ],\n        symbol: 'Tb',\n        mass: 158.9253547,\n        name: 'Terbium',\n        monoisotopicMass: 158.9253547,\n    },\n    {\n        number: 66,\n        isotopes: [\n            { nominal: 138, mass: 137.9625 },\n            { nominal: 139, mass: 138.95959 },\n            { nominal: 140, mass: 139.95402 },\n            { nominal: 141, mass: 140.95128 },\n            { nominal: 142, mass: 141.94619 },\n            { nominal: 143, mass: 142.943994 },\n            { nominal: 144, mass: 143.9392695 },\n            { nominal: 145, mass: 144.937474 },\n            { nominal: 146, mass: 145.9328445 },\n            { nominal: 147, mass: 146.9310827 },\n            { nominal: 148, mass: 147.927157 },\n            { nominal: 149, mass: 148.927322 },\n            { nominal: 150, mass: 149.9255933 },\n            { nominal: 151, mass: 150.9261916 },\n            { nominal: 152, mass: 151.9247253 },\n            { nominal: 153, mass: 152.9257724 },\n            { nominal: 154, mass: 153.9244293 },\n            { nominal: 155, mass: 154.925759 },\n            { nominal: 156, mass: 155.9242847, abundance: 0.00056 },\n            { nominal: 157, mass: 156.9254707 },\n            { nominal: 158, mass: 157.9244159, abundance: 0.00095 },\n            { nominal: 159, mass: 158.925747 },\n            { nominal: 160, mass: 159.9252046, abundance: 0.02329 },\n            { nominal: 161, mass: 160.9269405, abundance: 0.18889 },\n            { nominal: 162, mass: 161.9268056, abundance: 0.25475 },\n            { nominal: 163, mass: 162.9287383, abundance: 0.24896 },\n            { nominal: 164, mass: 163.9291819, abundance: 0.2826 },\n            { nominal: 165, mass: 164.9317105 },\n            { nominal: 166, mass: 165.9328139 },\n            { nominal: 167, mass: 166.935661 },\n            { nominal: 168, mass: 167.93713 },\n            { nominal: 169, mass: 168.94031 },\n            { nominal: 170, mass: 169.94239 },\n            { nominal: 171, mass: 170.94612 },\n            { nominal: 172, mass: 171.94846 },\n            { nominal: 173, mass: 172.95283 },\n        ],\n        symbol: 'Dy',\n        mass: 162.499472819424,\n        name: 'Dysprosium',\n        monoisotopicMass: 163.9291819,\n    },\n    {\n        number: 67,\n        isotopes: [\n            { nominal: 140, mass: 139.96859 },\n            { nominal: 141, mass: 140.96311 },\n            { nominal: 142, mass: 141.96001 },\n            { nominal: 143, mass: 142.95486 },\n            { nominal: 144, mass: 143.9521097 },\n            { nominal: 145, mass: 144.9472674 },\n            { nominal: 146, mass: 145.9449935 },\n            { nominal: 147, mass: 146.9401423 },\n            { nominal: 148, mass: 147.937744 },\n            { nominal: 149, mass: 148.933803 },\n            { nominal: 150, mass: 149.933498 },\n            { nominal: 151, mass: 150.9316983 },\n            { nominal: 152, mass: 151.931724 },\n            { nominal: 153, mass: 152.9302064 },\n            { nominal: 154, mass: 153.9306068 },\n            { nominal: 155, mass: 154.929104 },\n            { nominal: 156, mass: 155.929706 },\n            { nominal: 157, mass: 156.928254 },\n            { nominal: 158, mass: 157.928946 },\n            { nominal: 159, mass: 158.9277197 },\n            { nominal: 160, mass: 159.928737 },\n            { nominal: 161, mass: 160.9278615 },\n            { nominal: 162, mass: 161.9291023 },\n            { nominal: 163, mass: 162.928741 },\n            { nominal: 164, mass: 163.9302403 },\n            { nominal: 165, mass: 164.9303288, abundance: 1 },\n            { nominal: 166, mass: 165.9322909 },\n            { nominal: 167, mass: 166.9331385 },\n            { nominal: 168, mass: 167.935522 },\n            { nominal: 169, mass: 168.936878 },\n            { nominal: 170, mass: 169.939625 },\n            { nominal: 171, mass: 170.94147 },\n            { nominal: 172, mass: 171.94473 },\n            { nominal: 173, mass: 172.94702 },\n            { nominal: 174, mass: 173.95095 },\n            { nominal: 175, mass: 174.95362 },\n        ],\n        symbol: 'Ho',\n        mass: 164.9303288,\n        name: 'Holmium',\n        monoisotopicMass: 164.9303288,\n    },\n    {\n        number: 68,\n        isotopes: [\n            { nominal: 142, mass: 141.9701 },\n            { nominal: 143, mass: 142.96662 },\n            { nominal: 144, mass: 143.9607 },\n            { nominal: 145, mass: 144.95805 },\n            { nominal: 146, mass: 145.9524184 },\n            { nominal: 147, mass: 146.949964 },\n            { nominal: 148, mass: 147.944735 },\n            { nominal: 149, mass: 148.942306 },\n            { nominal: 150, mass: 149.937916 },\n            { nominal: 151, mass: 150.937449 },\n            { nominal: 152, mass: 151.935057 },\n            { nominal: 153, mass: 152.93508 },\n            { nominal: 154, mass: 153.9327908 },\n            { nominal: 155, mass: 154.9332159 },\n            { nominal: 156, mass: 155.931067 },\n            { nominal: 157, mass: 156.931949 },\n            { nominal: 158, mass: 157.929893 },\n            { nominal: 159, mass: 158.9306918 },\n            { nominal: 160, mass: 159.929077 },\n            { nominal: 161, mass: 160.9300046 },\n            { nominal: 162, mass: 161.9287884, abundance: 0.00139 },\n            { nominal: 163, mass: 162.9300408 },\n            { nominal: 164, mass: 163.9292088, abundance: 0.01601 },\n            { nominal: 165, mass: 164.9307345 },\n            { nominal: 166, mass: 165.9302995, abundance: 0.33503 },\n            { nominal: 167, mass: 166.9320546, abundance: 0.22869 },\n            { nominal: 168, mass: 167.9323767, abundance: 0.26978 },\n            { nominal: 169, mass: 168.9345968 },\n            { nominal: 170, mass: 169.9354702, abundance: 0.1491 },\n            { nominal: 171, mass: 170.9380357 },\n            { nominal: 172, mass: 171.9393619 },\n            { nominal: 173, mass: 172.9424 },\n            { nominal: 174, mass: 173.94423 },\n            { nominal: 175, mass: 174.94777 },\n            { nominal: 176, mass: 175.94994 },\n            { nominal: 177, mass: 176.95399 },\n        ],\n        symbol: 'Er',\n        mass: 167.259082649669,\n        name: 'Erbium',\n        monoisotopicMass: 165.9302995,\n    },\n    {\n        number: 69,\n        isotopes: [\n            { nominal: 144, mass: 143.97628 },\n            { nominal: 145, mass: 144.97039 },\n            { nominal: 146, mass: 145.96684 },\n            { nominal: 147, mass: 146.9613799 },\n            { nominal: 148, mass: 147.958384 },\n            { nominal: 149, mass: 148.95289 },\n            { nominal: 150, mass: 149.95009 },\n            { nominal: 151, mass: 150.945488 },\n            { nominal: 152, mass: 151.944422 },\n            { nominal: 153, mass: 152.94204 },\n            { nominal: 154, mass: 153.94157 },\n            { nominal: 155, mass: 154.93921 },\n            { nominal: 156, mass: 155.938992 },\n            { nominal: 157, mass: 156.936944 },\n            { nominal: 158, mass: 157.93698 },\n            { nominal: 159, mass: 158.934975 },\n            { nominal: 160, mass: 159.935263 },\n            { nominal: 161, mass: 160.933549 },\n            { nominal: 162, mass: 161.934002 },\n            { nominal: 163, mass: 162.9326592 },\n            { nominal: 164, mass: 163.933544 },\n            { nominal: 165, mass: 164.9324431 },\n            { nominal: 166, mass: 165.933561 },\n            { nominal: 167, mass: 166.9328562 },\n            { nominal: 168, mass: 167.9341774 },\n            { nominal: 169, mass: 168.9342179, abundance: 1 },\n            { nominal: 170, mass: 169.935806 },\n            { nominal: 171, mass: 170.9364339 },\n            { nominal: 172, mass: 171.9384055 },\n            { nominal: 173, mass: 172.9396084 },\n            { nominal: 174, mass: 173.942173 },\n            { nominal: 175, mass: 174.943841 },\n            { nominal: 176, mass: 175.947 },\n            { nominal: 177, mass: 176.94904 },\n            { nominal: 178, mass: 177.95264 },\n            { nominal: 179, mass: 178.95534 },\n        ],\n        symbol: 'Tm',\n        mass: 168.9342179,\n        name: 'Thulium',\n        monoisotopicMass: 168.9342179,\n    },\n    {\n        number: 70,\n        isotopes: [\n            { nominal: 148, mass: 147.96758 },\n            { nominal: 149, mass: 148.96436 },\n            { nominal: 150, mass: 149.95852 },\n            { nominal: 151, mass: 150.9554 },\n            { nominal: 152, mass: 151.95027 },\n            { nominal: 153, mass: 152.94932 },\n            { nominal: 154, mass: 153.946396 },\n            { nominal: 155, mass: 154.945783 },\n            { nominal: 156, mass: 155.942825 },\n            { nominal: 157, mass: 156.942645 },\n            { nominal: 158, mass: 157.9398705 },\n            { nominal: 159, mass: 158.940055 },\n            { nominal: 160, mass: 159.937557 },\n            { nominal: 161, mass: 160.937907 },\n            { nominal: 162, mass: 161.935774 },\n            { nominal: 163, mass: 162.93634 },\n            { nominal: 164, mass: 163.934495 },\n            { nominal: 165, mass: 164.93527 },\n            { nominal: 166, mass: 165.9338747 },\n            { nominal: 167, mass: 166.934953 },\n            { nominal: 168, mass: 167.9338896, abundance: 0.00123 },\n            { nominal: 169, mass: 168.9351825 },\n            { nominal: 170, mass: 169.9347664, abundance: 0.02982 },\n            { nominal: 171, mass: 170.9363302, abundance: 0.1409 },\n            { nominal: 172, mass: 171.9363859, abundance: 0.2168 },\n            { nominal: 173, mass: 172.9382151, abundance: 0.16103 },\n            { nominal: 174, mass: 173.9388664, abundance: 0.32026 },\n            { nominal: 175, mass: 174.9412808 },\n            { nominal: 176, mass: 175.9425764, abundance: 0.12996 },\n            { nominal: 177, mass: 176.9452656 },\n            { nominal: 178, mass: 177.946651 },\n            { nominal: 179, mass: 178.95004 },\n            { nominal: 180, mass: 179.95212 },\n            { nominal: 181, mass: 180.95589 },\n        ],\n        symbol: 'Yb',\n        mass: 173.05415016631702,\n        name: 'Ytterbium',\n        monoisotopicMass: 173.9388664,\n    },\n    {\n        number: 71,\n        isotopes: [\n            { nominal: 150, mass: 149.97355 },\n            { nominal: 151, mass: 150.96768 },\n            { nominal: 152, mass: 151.96412 },\n            { nominal: 153, mass: 152.95875 },\n            { nominal: 154, mass: 153.95736 },\n            { nominal: 155, mass: 154.954321 },\n            { nominal: 156, mass: 155.953033 },\n            { nominal: 157, mass: 156.950127 },\n            { nominal: 158, mass: 157.949316 },\n            { nominal: 159, mass: 158.946636 },\n            { nominal: 160, mass: 159.946033 },\n            { nominal: 161, mass: 160.943572 },\n            { nominal: 162, mass: 161.943283 },\n            { nominal: 163, mass: 162.941179 },\n            { nominal: 164, mass: 163.941339 },\n            { nominal: 165, mass: 164.939407 },\n            { nominal: 166, mass: 165.939859 },\n            { nominal: 167, mass: 166.93827 },\n            { nominal: 168, mass: 167.938736 },\n            { nominal: 169, mass: 168.9376441 },\n            { nominal: 170, mass: 169.938478 },\n            { nominal: 171, mass: 170.937917 },\n            { nominal: 172, mass: 171.9390891 },\n            { nominal: 173, mass: 172.938934 },\n            { nominal: 174, mass: 173.9403409 },\n            { nominal: 175, mass: 174.9407752, abundance: 0.97401 },\n            { nominal: 176, mass: 175.9426897, abundance: 0.02599 },\n            { nominal: 177, mass: 176.9437615 },\n            { nominal: 178, mass: 177.945958 },\n            { nominal: 179, mass: 178.9473309 },\n            { nominal: 180, mass: 179.949888 },\n            { nominal: 181, mass: 180.95191 },\n            { nominal: 182, mass: 181.95504 },\n            { nominal: 183, mass: 182.957363 },\n            { nominal: 184, mass: 183.96091 },\n            { nominal: 185, mass: 184.96362 },\n        ],\n        symbol: 'Lu',\n        mass: 174.96681495785498,\n        name: 'Lutetium',\n        monoisotopicMass: 174.9407752,\n    },\n    {\n        number: 72,\n        isotopes: [\n            { nominal: 153, mass: 152.97069 },\n            { nominal: 154, mass: 153.96486 },\n            { nominal: 155, mass: 154.96311 },\n            { nominal: 156, mass: 155.95935 },\n            { nominal: 157, mass: 156.95824 },\n            { nominal: 158, mass: 157.954801 },\n            { nominal: 159, mass: 158.953996 },\n            { nominal: 160, mass: 159.950691 },\n            { nominal: 161, mass: 160.950278 },\n            { nominal: 162, mass: 161.9472148 },\n            { nominal: 163, mass: 162.947113 },\n            { nominal: 164, mass: 163.944371 },\n            { nominal: 165, mass: 164.944567 },\n            { nominal: 166, mass: 165.94218 },\n            { nominal: 167, mass: 166.9426 },\n            { nominal: 168, mass: 167.940568 },\n            { nominal: 169, mass: 168.941259 },\n            { nominal: 170, mass: 169.939609 },\n            { nominal: 171, mass: 170.940492 },\n            { nominal: 172, mass: 171.93945 },\n            { nominal: 173, mass: 172.940513 },\n            { nominal: 174, mass: 173.9400461, abundance: 0.0016 },\n            { nominal: 175, mass: 174.9415092 },\n            { nominal: 176, mass: 175.9414076, abundance: 0.0526 },\n            { nominal: 177, mass: 176.9432277, abundance: 0.186 },\n            { nominal: 178, mass: 177.9437058, abundance: 0.2728 },\n            { nominal: 179, mass: 178.9458232, abundance: 0.1362 },\n            { nominal: 180, mass: 179.946557, abundance: 0.3508 },\n            { nominal: 181, mass: 180.9491083 },\n            { nominal: 182, mass: 181.9505612 },\n            { nominal: 183, mass: 182.95353 },\n            { nominal: 184, mass: 183.955446 },\n            { nominal: 185, mass: 184.958862 },\n            { nominal: 186, mass: 185.960897 },\n            { nominal: 187, mass: 186.96477 },\n            { nominal: 188, mass: 187.96685 },\n            { nominal: 189, mass: 188.97084 },\n        ],\n        symbol: 'Hf',\n        mass: 178.4849787234,\n        name: 'Hafnium',\n        monoisotopicMass: 179.946557,\n    },\n    {\n        number: 73,\n        isotopes: [\n            { nominal: 155, mass: 154.97424 },\n            { nominal: 156, mass: 155.97203 },\n            { nominal: 157, mass: 156.96818 },\n            { nominal: 158, mass: 157.96654 },\n            { nominal: 159, mass: 158.963023 },\n            { nominal: 160, mass: 159.961488 },\n            { nominal: 161, mass: 160.958452 },\n            { nominal: 162, mass: 161.957294 },\n            { nominal: 163, mass: 162.954337 },\n            { nominal: 164, mass: 163.953534 },\n            { nominal: 165, mass: 164.950781 },\n            { nominal: 166, mass: 165.950512 },\n            { nominal: 167, mass: 166.948093 },\n            { nominal: 168, mass: 167.948047 },\n            { nominal: 169, mass: 168.946011 },\n            { nominal: 170, mass: 169.946175 },\n            { nominal: 171, mass: 170.944476 },\n            { nominal: 172, mass: 171.944895 },\n            { nominal: 173, mass: 172.94375 },\n            { nominal: 174, mass: 173.944454 },\n            { nominal: 175, mass: 174.943737 },\n            { nominal: 176, mass: 175.944857 },\n            { nominal: 177, mass: 176.9444795 },\n            { nominal: 178, mass: 177.945678 },\n            { nominal: 179, mass: 178.9459366 },\n            { nominal: 180, mass: 179.9474648, abundance: 0.0001201 },\n            { nominal: 181, mass: 180.9479958, abundance: 0.9998799 },\n            { nominal: 182, mass: 181.9501519 },\n            { nominal: 183, mass: 182.9513726 },\n            { nominal: 184, mass: 183.954008 },\n            { nominal: 185, mass: 184.955559 },\n            { nominal: 186, mass: 185.958551 },\n            { nominal: 187, mass: 186.960386 },\n            { nominal: 188, mass: 187.963916 },\n            { nominal: 189, mass: 188.96583 },\n            { nominal: 190, mass: 189.96939 },\n            { nominal: 191, mass: 190.97156 },\n            { nominal: 192, mass: 191.97514 },\n        ],\n        symbol: 'Ta',\n        mass: 180.9478756362269,\n        name: 'Tantalum',\n        monoisotopicMass: 180.9479958,\n    },\n    {\n        number: 74,\n        isotopes: [\n            { nominal: 157, mass: 156.97884 },\n            { nominal: 158, mass: 157.97456 },\n            { nominal: 159, mass: 158.97264 },\n            { nominal: 160, mass: 159.96846 },\n            { nominal: 161, mass: 160.9672 },\n            { nominal: 162, mass: 161.963499 },\n            { nominal: 163, mass: 162.962524 },\n            { nominal: 164, mass: 163.958961 },\n            { nominal: 165, mass: 164.958281 },\n            { nominal: 166, mass: 165.955031 },\n            { nominal: 167, mass: 166.954805 },\n            { nominal: 168, mass: 167.951806 },\n            { nominal: 169, mass: 168.951779 },\n            { nominal: 170, mass: 169.949232 },\n            { nominal: 171, mass: 170.949451 },\n            { nominal: 172, mass: 171.947292 },\n            { nominal: 173, mass: 172.947689 },\n            { nominal: 174, mass: 173.946079 },\n            { nominal: 175, mass: 174.946717 },\n            { nominal: 176, mass: 175.945634 },\n            { nominal: 177, mass: 176.946643 },\n            { nominal: 178, mass: 177.945883 },\n            { nominal: 179, mass: 178.947077 },\n            { nominal: 180, mass: 179.9467108, abundance: 0.0012 },\n            { nominal: 181, mass: 180.9481978 },\n            { nominal: 182, mass: 181.94820394, abundance: 0.265 },\n            { nominal: 183, mass: 182.95022275, abundance: 0.1431 },\n            { nominal: 184, mass: 183.95093092, abundance: 0.3064 },\n            { nominal: 185, mass: 184.95341897 },\n            { nominal: 186, mass: 185.9543628, abundance: 0.2843 },\n            { nominal: 187, mass: 186.9571588 },\n            { nominal: 188, mass: 187.9584862 },\n            { nominal: 189, mass: 188.961763 },\n            { nominal: 190, mass: 189.963091 },\n            { nominal: 191, mass: 190.966531 },\n            { nominal: 192, mass: 191.96817 },\n            { nominal: 193, mass: 192.97178 },\n            { nominal: 194, mass: 193.97367 },\n        ],\n        symbol: 'W',\n        mass: 183.841777550513,\n        name: 'Tungsten',\n        monoisotopicMass: 183.95093092,\n    },\n    {\n        number: 75,\n        isotopes: [\n            { nominal: 159, mass: 158.98418 },\n            { nominal: 160, mass: 159.98182 },\n            { nominal: 161, mass: 160.97757 },\n            { nominal: 162, mass: 161.97584 },\n            { nominal: 163, mass: 162.97208 },\n            { nominal: 164, mass: 163.970453 },\n            { nominal: 165, mass: 164.967103 },\n            { nominal: 166, mass: 165.965761 },\n            { nominal: 167, mass: 166.962595 },\n            { nominal: 168, mass: 167.961573 },\n            { nominal: 169, mass: 168.958766 },\n            { nominal: 170, mass: 169.95822 },\n            { nominal: 171, mass: 170.955716 },\n            { nominal: 172, mass: 171.95542 },\n            { nominal: 173, mass: 172.953243 },\n            { nominal: 174, mass: 173.953115 },\n            { nominal: 175, mass: 174.951381 },\n            { nominal: 176, mass: 175.951623 },\n            { nominal: 177, mass: 176.950328 },\n            { nominal: 178, mass: 177.950989 },\n            { nominal: 179, mass: 178.949989 },\n            { nominal: 180, mass: 179.950792 },\n            { nominal: 181, mass: 180.950058 },\n            { nominal: 182, mass: 181.95121 },\n            { nominal: 183, mass: 182.9508196 },\n            { nominal: 184, mass: 183.9525228 },\n            { nominal: 185, mass: 184.9529545, abundance: 0.374 },\n            { nominal: 186, mass: 185.9549856 },\n            { nominal: 187, mass: 186.9557501, abundance: 0.626 },\n            { nominal: 188, mass: 187.9581115 },\n            { nominal: 189, mass: 188.959226 },\n            { nominal: 190, mass: 189.961744 },\n            { nominal: 191, mass: 190.963122 },\n            { nominal: 192, mass: 191.966088 },\n            { nominal: 193, mass: 192.967541 },\n            { nominal: 194, mass: 193.97076 },\n            { nominal: 195, mass: 194.97254 },\n            { nominal: 196, mass: 195.9758 },\n            { nominal: 197, mass: 196.97799 },\n            { nominal: 198, mass: 197.9816 },\n        ],\n        symbol: 'Re',\n        mass: 186.20670454560002,\n        name: 'Rhenium',\n        monoisotopicMass: 186.9557501,\n    },\n    {\n        number: 76,\n        isotopes: [\n            { nominal: 161, mass: 160.98903 },\n            { nominal: 162, mass: 161.98443 },\n            { nominal: 163, mass: 162.98241 },\n            { nominal: 164, mass: 163.97802 },\n            { nominal: 165, mass: 164.9766 },\n            { nominal: 166, mass: 165.972692 },\n            { nominal: 167, mass: 166.971549 },\n            { nominal: 168, mass: 167.967808 },\n            { nominal: 169, mass: 168.967018 },\n            { nominal: 170, mass: 169.963578 },\n            { nominal: 171, mass: 170.963174 },\n            { nominal: 172, mass: 171.960017 },\n            { nominal: 173, mass: 172.959808 },\n            { nominal: 174, mass: 173.957064 },\n            { nominal: 175, mass: 174.956945 },\n            { nominal: 176, mass: 175.954806 },\n            { nominal: 177, mass: 176.954966 },\n            { nominal: 178, mass: 177.953254 },\n            { nominal: 179, mass: 178.953817 },\n            { nominal: 180, mass: 179.952375 },\n            { nominal: 181, mass: 180.953247 },\n            { nominal: 182, mass: 181.95211 },\n            { nominal: 183, mass: 182.953125 },\n            { nominal: 184, mass: 183.9524885, abundance: 0.0002 },\n            { nominal: 185, mass: 184.9540417 },\n            { nominal: 186, mass: 185.953835, abundance: 0.0159 },\n            { nominal: 187, mass: 186.9557474, abundance: 0.0196 },\n            { nominal: 188, mass: 187.9558352, abundance: 0.1324 },\n            { nominal: 189, mass: 188.9581442, abundance: 0.1615 },\n            { nominal: 190, mass: 189.9584437, abundance: 0.2626 },\n            { nominal: 191, mass: 190.9609264 },\n            { nominal: 192, mass: 191.961477, abundance: 0.4078 },\n            { nominal: 193, mass: 192.9641479 },\n            { nominal: 194, mass: 193.9651772 },\n            { nominal: 195, mass: 194.968318 },\n            { nominal: 196, mass: 195.969641 },\n            { nominal: 197, mass: 196.97283 },\n            { nominal: 198, mass: 197.97441 },\n            { nominal: 199, mass: 198.97801 },\n            { nominal: 200, mass: 199.97984 },\n            { nominal: 201, mass: 200.98364 },\n            { nominal: 202, mass: 201.98595 },\n        ],\n        symbol: 'Os',\n        mass: 190.22485962823998,\n        name: 'Osmium',\n        monoisotopicMass: 191.961477,\n    },\n    {\n        number: 77,\n        isotopes: [\n            { nominal: 164, mass: 163.99191 },\n            { nominal: 165, mass: 164.9875 },\n            { nominal: 166, mass: 165.98566 },\n            { nominal: 167, mass: 166.981666 },\n            { nominal: 168, mass: 167.979907 },\n            { nominal: 169, mass: 168.976298 },\n            { nominal: 170, mass: 169.974922 },\n            { nominal: 171, mass: 170.97164 },\n            { nominal: 172, mass: 171.970607 },\n            { nominal: 173, mass: 172.967506 },\n            { nominal: 174, mass: 173.966861 },\n            { nominal: 175, mass: 174.96415 },\n            { nominal: 176, mass: 175.96365 },\n            { nominal: 177, mass: 176.961301 },\n            { nominal: 178, mass: 177.961082 },\n            { nominal: 179, mass: 178.95912 },\n            { nominal: 180, mass: 179.959229 },\n            { nominal: 181, mass: 180.957625 },\n            { nominal: 182, mass: 181.958076 },\n            { nominal: 183, mass: 182.95684 },\n            { nominal: 184, mass: 183.957476 },\n            { nominal: 185, mass: 184.956698 },\n            { nominal: 186, mass: 185.957944 },\n            { nominal: 187, mass: 186.957542 },\n            { nominal: 188, mass: 187.958828 },\n            { nominal: 189, mass: 188.958715 },\n            { nominal: 190, mass: 189.9605412 },\n            { nominal: 191, mass: 190.9605893, abundance: 0.373 },\n            { nominal: 192, mass: 191.9626002 },\n            { nominal: 193, mass: 192.9629216, abundance: 0.627 },\n            { nominal: 194, mass: 193.9650735 },\n            { nominal: 195, mass: 194.9659747 },\n            { nominal: 196, mass: 195.968397 },\n            { nominal: 197, mass: 196.969655 },\n            { nominal: 198, mass: 197.97228 },\n            { nominal: 199, mass: 198.973805 },\n            { nominal: 200, mass: 199.9768 },\n            { nominal: 201, mass: 200.97864 },\n            { nominal: 202, mass: 201.98199 },\n            { nominal: 203, mass: 202.98423 },\n            { nominal: 204, mass: 203.9896 },\n        ],\n        symbol: 'Ir',\n        mass: 192.2160516521,\n        name: 'Iridium',\n        monoisotopicMass: 192.9629216,\n    },\n    {\n        number: 78,\n        isotopes: [\n            { nominal: 166, mass: 165.99486 },\n            { nominal: 167, mass: 166.99269 },\n            { nominal: 168, mass: 167.98813 },\n            { nominal: 169, mass: 168.98657 },\n            { nominal: 170, mass: 169.982496 },\n            { nominal: 171, mass: 170.981245 },\n            { nominal: 172, mass: 171.977351 },\n            { nominal: 173, mass: 172.976443 },\n            { nominal: 174, mass: 173.97282 },\n            { nominal: 175, mass: 174.97241 },\n            { nominal: 176, mass: 175.968938 },\n            { nominal: 177, mass: 176.96847 },\n            { nominal: 178, mass: 177.96565 },\n            { nominal: 179, mass: 178.965359 },\n            { nominal: 180, mass: 179.963032 },\n            { nominal: 181, mass: 180.963098 },\n            { nominal: 182, mass: 181.961172 },\n            { nominal: 183, mass: 182.961597 },\n            { nominal: 184, mass: 183.959915 },\n            { nominal: 185, mass: 184.960614 },\n            { nominal: 186, mass: 185.959351 },\n            { nominal: 187, mass: 186.960617 },\n            { nominal: 188, mass: 187.9593889 },\n            { nominal: 189, mass: 188.960831 },\n            { nominal: 190, mass: 189.9599297, abundance: 0.00012 },\n            { nominal: 191, mass: 190.9616729 },\n            { nominal: 192, mass: 191.9610387, abundance: 0.00782 },\n            { nominal: 193, mass: 192.9629824 },\n            { nominal: 194, mass: 193.9626809, abundance: 0.3286 },\n            { nominal: 195, mass: 194.9647917, abundance: 0.3378 },\n            { nominal: 196, mass: 195.96495209, abundance: 0.2521 },\n            { nominal: 197, mass: 196.96734069 },\n            { nominal: 198, mass: 197.9678949, abundance: 0.07356 },\n            { nominal: 199, mass: 198.9705952 },\n            { nominal: 200, mass: 199.971443 },\n            { nominal: 201, mass: 200.974513 },\n            { nominal: 202, mass: 201.975639 },\n            { nominal: 203, mass: 202.97893 },\n            { nominal: 204, mass: 203.98076 },\n            { nominal: 205, mass: 204.98608 },\n            { nominal: 206, mass: 205.98966 },\n        ],\n        symbol: 'Pt',\n        mass: 195.084456864931,\n        name: 'Platinum',\n        monoisotopicMass: 194.9647917,\n    },\n    {\n        number: 79,\n        isotopes: [\n            { nominal: 169, mass: 168.99808 },\n            { nominal: 170, mass: 169.99597 },\n            { nominal: 171, mass: 170.991876 },\n            { nominal: 172, mass: 171.989942 },\n            { nominal: 173, mass: 172.986241 },\n            { nominal: 174, mass: 173.984717 },\n            { nominal: 175, mass: 174.981304 },\n            { nominal: 176, mass: 175.98025 },\n            { nominal: 177, mass: 176.97687 },\n            { nominal: 178, mass: 177.976032 },\n            { nominal: 179, mass: 178.973174 },\n            { nominal: 180, mass: 179.972523 },\n            { nominal: 181, mass: 180.970079 },\n            { nominal: 182, mass: 181.969618 },\n            { nominal: 183, mass: 182.967591 },\n            { nominal: 184, mass: 183.967452 },\n            { nominal: 185, mass: 184.96579 },\n            { nominal: 186, mass: 185.965953 },\n            { nominal: 187, mass: 186.964543 },\n            { nominal: 188, mass: 187.965349 },\n            { nominal: 189, mass: 188.963948 },\n            { nominal: 190, mass: 189.964698 },\n            { nominal: 191, mass: 190.963702 },\n            { nominal: 192, mass: 191.964814 },\n            { nominal: 193, mass: 192.9641373 },\n            { nominal: 194, mass: 193.9654178 },\n            { nominal: 195, mass: 194.9650352 },\n            { nominal: 196, mass: 195.9665699 },\n            { nominal: 197, mass: 196.96656879, abundance: 1 },\n            { nominal: 198, mass: 197.96824242 },\n            { nominal: 199, mass: 198.96876528 },\n            { nominal: 200, mass: 199.970756 },\n            { nominal: 201, mass: 200.9716575 },\n            { nominal: 202, mass: 201.973856 },\n            { nominal: 203, mass: 202.9751544 },\n            { nominal: 204, mass: 203.97783 },\n            { nominal: 205, mass: 204.97985 },\n            { nominal: 206, mass: 205.98474 },\n            { nominal: 207, mass: 206.9884 },\n            { nominal: 208, mass: 207.99345 },\n            { nominal: 209, mass: 208.99735 },\n            { nominal: 210, mass: 210.0025 },\n        ],\n        symbol: 'Au',\n        mass: 196.96656879,\n        name: 'Gold',\n        monoisotopicMass: 196.96656879,\n    },\n    {\n        number: 80,\n        isotopes: [\n            { nominal: 171, mass: 171.00353 },\n            { nominal: 172, mass: 171.99881 },\n            { nominal: 173, mass: 172.99709 },\n            { nominal: 174, mass: 173.992865 },\n            { nominal: 175, mass: 174.991441 },\n            { nominal: 176, mass: 175.987361 },\n            { nominal: 177, mass: 176.986277 },\n            { nominal: 178, mass: 177.982484 },\n            { nominal: 179, mass: 178.981831 },\n            { nominal: 180, mass: 179.97826 },\n            { nominal: 181, mass: 180.977819 },\n            { nominal: 182, mass: 181.974689 },\n            { nominal: 183, mass: 182.9744448 },\n            { nominal: 184, mass: 183.971714 },\n            { nominal: 185, mass: 184.971899 },\n            { nominal: 186, mass: 185.969362 },\n            { nominal: 187, mass: 186.969814 },\n            { nominal: 188, mass: 187.967567 },\n            { nominal: 189, mass: 188.968195 },\n            { nominal: 190, mass: 189.966323 },\n            { nominal: 191, mass: 190.967157 },\n            { nominal: 192, mass: 191.965635 },\n            { nominal: 193, mass: 192.966653 },\n            { nominal: 194, mass: 193.9654491 },\n            { nominal: 195, mass: 194.966721 },\n            { nominal: 196, mass: 195.9658326, abundance: 0.0015 },\n            { nominal: 197, mass: 196.9672128 },\n            { nominal: 198, mass: 197.9667686, abundance: 0.0997 },\n            { nominal: 199, mass: 198.96828064, abundance: 0.1687 },\n            { nominal: 200, mass: 199.96832659, abundance: 0.231 },\n            { nominal: 201, mass: 200.97030284, abundance: 0.1318 },\n            { nominal: 202, mass: 201.9706434, abundance: 0.2986 },\n            { nominal: 203, mass: 202.9728728 },\n            { nominal: 204, mass: 203.97349398, abundance: 0.0687 },\n            { nominal: 205, mass: 204.9760734 },\n            { nominal: 206, mass: 205.977514 },\n            { nominal: 207, mass: 206.9823 },\n            { nominal: 208, mass: 207.985759 },\n            { nominal: 209, mass: 208.99072 },\n            { nominal: 210, mass: 209.99424 },\n            { nominal: 211, mass: 210.99933 },\n            { nominal: 212, mass: 212.00296 },\n            { nominal: 213, mass: 213.00823 },\n            { nominal: 214, mass: 214.012 },\n            { nominal: 215, mass: 215.0174 },\n            { nominal: 216, mass: 216.02132 },\n        ],\n        symbol: 'Hg',\n        mass: 200.59916703455602,\n        name: 'Mercury',\n        monoisotopicMass: 201.9706434,\n    },\n    {\n        number: 81,\n        isotopes: [\n            { nominal: 176, mass: 176.000624 },\n            { nominal: 177, mass: 176.996431 },\n            { nominal: 178, mass: 177.99485 },\n            { nominal: 179, mass: 178.991111 },\n            { nominal: 180, mass: 179.990057 },\n            { nominal: 181, mass: 180.98626 },\n            { nominal: 182, mass: 181.985713 },\n            { nominal: 183, mass: 182.982193 },\n            { nominal: 184, mass: 183.981886 },\n            { nominal: 185, mass: 184.978789 },\n            { nominal: 186, mass: 185.978651 },\n            { nominal: 187, mass: 186.9759063 },\n            { nominal: 188, mass: 187.976021 },\n            { nominal: 189, mass: 188.973588 },\n            { nominal: 190, mass: 189.973828 },\n            { nominal: 191, mass: 190.9717842 },\n            { nominal: 192, mass: 191.972225 },\n            { nominal: 193, mass: 192.970502 },\n            { nominal: 194, mass: 193.971081 },\n            { nominal: 195, mass: 194.969774 },\n            { nominal: 196, mass: 195.970481 },\n            { nominal: 197, mass: 196.969576 },\n            { nominal: 198, mass: 197.970483 },\n            { nominal: 199, mass: 198.969877 },\n            { nominal: 200, mass: 199.9709633 },\n            { nominal: 201, mass: 200.970822 },\n            { nominal: 202, mass: 201.972102 },\n            { nominal: 203, mass: 202.9723446, abundance: 0.2952 },\n            { nominal: 204, mass: 203.9738639 },\n            { nominal: 205, mass: 204.9744278, abundance: 0.7048 },\n            { nominal: 206, mass: 205.9761106 },\n            { nominal: 207, mass: 206.9774197 },\n            { nominal: 208, mass: 207.982019 },\n            { nominal: 209, mass: 208.9853594 },\n            { nominal: 210, mass: 209.990074 },\n            { nominal: 211, mass: 210.993475 },\n            { nominal: 212, mass: 211.99834 },\n            { nominal: 213, mass: 213.001915 },\n            { nominal: 214, mass: 214.00694 },\n            { nominal: 215, mass: 215.01064 },\n            { nominal: 216, mass: 216.0158 },\n            { nominal: 217, mass: 217.01966 },\n            { nominal: 218, mass: 218.02479 },\n        ],\n        symbol: 'Tl',\n        mass: 204.38341283936,\n        name: 'Thallium',\n        monoisotopicMass: 204.9744278,\n    },\n    {\n        number: 82,\n        isotopes: [\n            { nominal: 178, mass: 178.003831 },\n            { nominal: 179, mass: 179.002201 },\n            { nominal: 180, mass: 179.997928 },\n            { nominal: 181, mass: 180.996653 },\n            { nominal: 182, mass: 181.992672 },\n            { nominal: 183, mass: 182.991872 },\n            { nominal: 184, mass: 183.988136 },\n            { nominal: 185, mass: 184.98761 },\n            { nominal: 186, mass: 185.984238 },\n            { nominal: 187, mass: 186.9839109 },\n            { nominal: 188, mass: 187.980875 },\n            { nominal: 189, mass: 188.980807 },\n            { nominal: 190, mass: 189.978082 },\n            { nominal: 191, mass: 190.978276 },\n            { nominal: 192, mass: 191.975775 },\n            { nominal: 193, mass: 192.976173 },\n            { nominal: 194, mass: 193.974012 },\n            { nominal: 195, mass: 194.974543 },\n            { nominal: 196, mass: 195.972774 },\n            { nominal: 197, mass: 196.9734312 },\n            { nominal: 198, mass: 197.972034 },\n            { nominal: 199, mass: 198.972913 },\n            { nominal: 200, mass: 199.971819 },\n            { nominal: 201, mass: 200.972883 },\n            { nominal: 202, mass: 201.972152 },\n            { nominal: 203, mass: 202.9733911 },\n            { nominal: 204, mass: 203.973044, abundance: 0.014 },\n            { nominal: 205, mass: 204.9744822 },\n            { nominal: 206, mass: 205.9744657, abundance: 0.241 },\n            { nominal: 207, mass: 206.9758973, abundance: 0.221 },\n            { nominal: 208, mass: 207.9766525, abundance: 0.524 },\n            { nominal: 209, mass: 208.9810905 },\n            { nominal: 210, mass: 209.9841889 },\n            { nominal: 211, mass: 210.9887371 },\n            { nominal: 212, mass: 211.9918977 },\n            { nominal: 213, mass: 212.9965629 },\n            { nominal: 214, mass: 213.9998059 },\n            { nominal: 215, mass: 215.00474 },\n            { nominal: 216, mass: 216.00803 },\n            { nominal: 217, mass: 217.01314 },\n            { nominal: 218, mass: 218.01659 },\n            { nominal: 219, mass: 219.02177 },\n            { nominal: 220, mass: 220.02541 },\n        ],\n        symbol: 'Pb',\n        mass: 207.216908063,\n        name: 'Lead',\n        monoisotopicMass: 207.9766525,\n    },\n    {\n        number: 83,\n        isotopes: [\n            { nominal: 184, mass: 184.001275 },\n            { nominal: 185, mass: 184.9976 },\n            { nominal: 186, mass: 185.996644 },\n            { nominal: 187, mass: 186.993147 },\n            { nominal: 188, mass: 187.992287 },\n            { nominal: 189, mass: 188.989195 },\n            { nominal: 190, mass: 189.988622 },\n            { nominal: 191, mass: 190.9857866 },\n            { nominal: 192, mass: 191.985469 },\n            { nominal: 193, mass: 192.98296 },\n            { nominal: 194, mass: 193.982785 },\n            { nominal: 195, mass: 194.9806488 },\n            { nominal: 196, mass: 195.980667 },\n            { nominal: 197, mass: 196.9788651 },\n            { nominal: 198, mass: 197.979206 },\n            { nominal: 199, mass: 198.977673 },\n            { nominal: 200, mass: 199.978131 },\n            { nominal: 201, mass: 200.97701 },\n            { nominal: 202, mass: 201.977734 },\n            { nominal: 203, mass: 202.976893 },\n            { nominal: 204, mass: 203.9778361 },\n            { nominal: 205, mass: 204.9773867 },\n            { nominal: 206, mass: 205.9784993 },\n            { nominal: 207, mass: 206.978471 },\n            { nominal: 208, mass: 207.9797425 },\n            { nominal: 209, mass: 208.9803991, abundance: 1 },\n            { nominal: 210, mass: 209.9841207 },\n            { nominal: 211, mass: 210.9872697 },\n            { nominal: 212, mass: 211.991286 },\n            { nominal: 213, mass: 212.9943851 },\n            { nominal: 214, mass: 213.998712 },\n            { nominal: 215, mass: 215.00177 },\n            { nominal: 216, mass: 216.006306 },\n            { nominal: 217, mass: 217.009372 },\n            { nominal: 218, mass: 218.014188 },\n            { nominal: 219, mass: 219.01748 },\n            { nominal: 220, mass: 220.02235 },\n            { nominal: 221, mass: 221.02587 },\n            { nominal: 222, mass: 222.03078 },\n            { nominal: 223, mass: 223.0345 },\n            { nominal: 224, mass: 224.03947 },\n        ],\n        symbol: 'Bi',\n        mass: 208.9803991,\n        name: 'Bismuth',\n        monoisotopicMass: 208.9803991,\n    },\n    {\n        number: 84,\n        isotopes: [\n            { nominal: 186, mass: 186.004393 },\n            { nominal: 187, mass: 187.003041 },\n            { nominal: 188, mass: 187.999416 },\n            { nominal: 189, mass: 188.998473 },\n            { nominal: 190, mass: 189.995101 },\n            { nominal: 191, mass: 190.9945585 },\n            { nominal: 192, mass: 191.991336 },\n            { nominal: 193, mass: 192.991026 },\n            { nominal: 194, mass: 193.988186 },\n            { nominal: 195, mass: 194.988126 },\n            { nominal: 196, mass: 195.985526 },\n            { nominal: 197, mass: 196.98566 },\n            { nominal: 198, mass: 197.983389 },\n            { nominal: 199, mass: 198.983667 },\n            { nominal: 200, mass: 199.981799 },\n            { nominal: 201, mass: 200.9822598 },\n            { nominal: 202, mass: 201.980758 },\n            { nominal: 203, mass: 202.9814161 },\n            { nominal: 204, mass: 203.98031 },\n            { nominal: 205, mass: 204.981203 },\n            { nominal: 206, mass: 205.980474 },\n            { nominal: 207, mass: 206.9815938 },\n            { nominal: 208, mass: 207.9812461 },\n            { nominal: 209, mass: 208.9824308 },\n            { nominal: 210, mass: 209.9828741 },\n            { nominal: 211, mass: 210.9866536 },\n            { nominal: 212, mass: 211.9888684 },\n            { nominal: 213, mass: 212.9928576 },\n            { nominal: 214, mass: 213.9952017 },\n            { nominal: 215, mass: 214.9994201 },\n            { nominal: 216, mass: 216.0019152 },\n            { nominal: 217, mass: 217.0063182 },\n            { nominal: 218, mass: 218.0089735 },\n            { nominal: 219, mass: 219.013614 },\n            { nominal: 220, mass: 220.016386 },\n            { nominal: 221, mass: 221.021228 },\n            { nominal: 222, mass: 222.02414 },\n            { nominal: 223, mass: 223.02907 },\n            { nominal: 224, mass: 224.03211 },\n            { nominal: 225, mass: 225.03707 },\n            { nominal: 226, mass: 226.04031 },\n            { nominal: 227, mass: 227.04539 },\n        ],\n        symbol: 'Po',\n        mass: null,\n        name: 'Polonium',\n    },\n    {\n        number: 85,\n        isotopes: [\n            { nominal: 191, mass: 191.004148 },\n            { nominal: 192, mass: 192.003152 },\n            { nominal: 193, mass: 192.999927 },\n            { nominal: 194, mass: 193.999236 },\n            { nominal: 195, mass: 194.9962685 },\n            { nominal: 196, mass: 195.9958 },\n            { nominal: 197, mass: 196.993189 },\n            { nominal: 198, mass: 197.992784 },\n            { nominal: 199, mass: 198.9905277 },\n            { nominal: 200, mass: 199.990351 },\n            { nominal: 201, mass: 200.9884171 },\n            { nominal: 202, mass: 201.98863 },\n            { nominal: 203, mass: 202.986943 },\n            { nominal: 204, mass: 203.987251 },\n            { nominal: 205, mass: 204.986076 },\n            { nominal: 206, mass: 205.986657 },\n            { nominal: 207, mass: 206.9858 },\n            { nominal: 208, mass: 207.9866133 },\n            { nominal: 209, mass: 208.9861702 },\n            { nominal: 210, mass: 209.9871479 },\n            { nominal: 211, mass: 210.9874966 },\n            { nominal: 212, mass: 211.9907377 },\n            { nominal: 213, mass: 212.992937 },\n            { nominal: 214, mass: 213.9963721 },\n            { nominal: 215, mass: 214.9986528 },\n            { nominal: 216, mass: 216.0024236 },\n            { nominal: 217, mass: 217.0047192 },\n            { nominal: 218, mass: 218.008695 },\n            { nominal: 219, mass: 219.0111618 },\n            { nominal: 220, mass: 220.015433 },\n            { nominal: 221, mass: 221.018017 },\n            { nominal: 222, mass: 222.022494 },\n            { nominal: 223, mass: 223.025151 },\n            { nominal: 224, mass: 224.029749 },\n            { nominal: 225, mass: 225.03263 },\n            { nominal: 226, mass: 226.03716 },\n            { nominal: 227, mass: 227.04024 },\n            { nominal: 228, mass: 228.04475 },\n            { nominal: 229, mass: 229.04812 },\n        ],\n        symbol: 'At',\n        mass: null,\n        name: 'Astatine',\n    },\n    {\n        number: 86,\n        isotopes: [\n            { nominal: 193, mass: 193.009708 },\n            { nominal: 194, mass: 194.006144 },\n            { nominal: 195, mass: 195.005422 },\n            { nominal: 196, mass: 196.002116 },\n            { nominal: 197, mass: 197.001585 },\n            { nominal: 198, mass: 197.998679 },\n            { nominal: 199, mass: 198.99839 },\n            { nominal: 200, mass: 199.99569 },\n            { nominal: 201, mass: 200.995628 },\n            { nominal: 202, mass: 201.993264 },\n            { nominal: 203, mass: 202.993388 },\n            { nominal: 204, mass: 203.99143 },\n            { nominal: 205, mass: 204.991719 },\n            { nominal: 206, mass: 205.990214 },\n            { nominal: 207, mass: 206.9907303 },\n            { nominal: 208, mass: 207.989635 },\n            { nominal: 209, mass: 208.990415 },\n            { nominal: 210, mass: 209.9896891 },\n            { nominal: 211, mass: 210.9906011 },\n            { nominal: 212, mass: 211.9907039 },\n            { nominal: 213, mass: 212.9938831 },\n            { nominal: 214, mass: 213.995363 },\n            { nominal: 215, mass: 214.9987459 },\n            { nominal: 216, mass: 216.0002719 },\n            { nominal: 217, mass: 217.003928 },\n            { nominal: 218, mass: 218.0056016 },\n            { nominal: 219, mass: 219.0094804 },\n            { nominal: 220, mass: 220.0113941 },\n            { nominal: 221, mass: 221.0155371 },\n            { nominal: 222, mass: 222.0175782 },\n            { nominal: 223, mass: 223.0218893 },\n            { nominal: 224, mass: 224.024096 },\n            { nominal: 225, mass: 225.028486 },\n            { nominal: 226, mass: 226.030861 },\n            { nominal: 227, mass: 227.035304 },\n            { nominal: 228, mass: 228.037835 },\n            { nominal: 229, mass: 229.042257 },\n            { nominal: 230, mass: 230.04514 },\n            { nominal: 231, mass: 231.04987 },\n        ],\n        symbol: 'Rn',\n        mass: null,\n        name: 'Radon',\n    },\n    {\n        number: 87,\n        isotopes: [\n            { nominal: 199, mass: 199.007259 },\n            { nominal: 200, mass: 200.006586 },\n            { nominal: 201, mass: 201.003867 },\n            { nominal: 202, mass: 202.00332 },\n            { nominal: 203, mass: 203.0009407 },\n            { nominal: 204, mass: 204.000652 },\n            { nominal: 205, mass: 204.9985939 },\n            { nominal: 206, mass: 205.998666 },\n            { nominal: 207, mass: 206.996946 },\n            { nominal: 208, mass: 207.997138 },\n            { nominal: 209, mass: 208.995955 },\n            { nominal: 210, mass: 209.996422 },\n            { nominal: 211, mass: 210.995556 },\n            { nominal: 212, mass: 211.9962257 },\n            { nominal: 213, mass: 212.996186 },\n            { nominal: 214, mass: 213.9989713 },\n            { nominal: 215, mass: 215.0003418 },\n            { nominal: 216, mass: 216.0031899 },\n            { nominal: 217, mass: 217.0046323 },\n            { nominal: 218, mass: 218.0075787 },\n            { nominal: 219, mass: 219.0092524 },\n            { nominal: 220, mass: 220.0123277 },\n            { nominal: 221, mass: 221.0142552 },\n            { nominal: 222, mass: 222.017552 },\n            { nominal: 223, mass: 223.019736 },\n            { nominal: 224, mass: 224.023398 },\n            { nominal: 225, mass: 225.025573 },\n            { nominal: 226, mass: 226.029566 },\n            { nominal: 227, mass: 227.031869 },\n            { nominal: 228, mass: 228.035823 },\n            { nominal: 229, mass: 229.038298 },\n            { nominal: 230, mass: 230.042416 },\n            { nominal: 231, mass: 231.045158 },\n            { nominal: 232, mass: 232.04937 },\n            { nominal: 233, mass: 233.05264 },\n        ],\n        symbol: 'Fr',\n        mass: null,\n        name: 'Francium',\n    },\n    {\n        number: 88,\n        isotopes: [\n            { nominal: 201, mass: 201.01271 },\n            { nominal: 202, mass: 202.00976 },\n            { nominal: 203, mass: 203.009304 },\n            { nominal: 204, mass: 204.006492 },\n            { nominal: 205, mass: 205.006268 },\n            { nominal: 206, mass: 206.003828 },\n            { nominal: 207, mass: 207.003799 },\n            { nominal: 208, mass: 208.001841 },\n            { nominal: 209, mass: 209.00199 },\n            { nominal: 210, mass: 210.000494 },\n            { nominal: 211, mass: 211.0008932 },\n            { nominal: 212, mass: 211.999787 },\n            { nominal: 213, mass: 213.000384 },\n            { nominal: 214, mass: 214.0000997 },\n            { nominal: 215, mass: 215.0027204 },\n            { nominal: 216, mass: 216.0035334 },\n            { nominal: 217, mass: 217.0063207 },\n            { nominal: 218, mass: 218.007141 },\n            { nominal: 219, mass: 219.0100855 },\n            { nominal: 220, mass: 220.0110259 },\n            { nominal: 221, mass: 221.0139177 },\n            { nominal: 222, mass: 222.0153748 },\n            { nominal: 223, mass: 223.0185023 },\n            { nominal: 224, mass: 224.020212 },\n            { nominal: 225, mass: 225.0236119 },\n            { nominal: 226, mass: 226.0254103 },\n            { nominal: 227, mass: 227.0291783 },\n            { nominal: 228, mass: 228.0310707 },\n            { nominal: 229, mass: 229.034942 },\n            { nominal: 230, mass: 230.037055 },\n            { nominal: 231, mass: 231.041027 },\n            { nominal: 232, mass: 232.0434753 },\n            { nominal: 233, mass: 233.047582 },\n            { nominal: 234, mass: 234.050342 },\n            { nominal: 235, mass: 235.05497 },\n        ],\n        symbol: 'Ra',\n        mass: null,\n        name: 'Radium',\n    },\n    {\n        number: 89,\n        isotopes: [\n            { nominal: 206, mass: 206.014452 },\n            { nominal: 207, mass: 207.011966 },\n            { nominal: 208, mass: 208.01155 },\n            { nominal: 209, mass: 209.009495 },\n            { nominal: 210, mass: 210.009436 },\n            { nominal: 211, mass: 211.007732 },\n            { nominal: 212, mass: 212.007813 },\n            { nominal: 213, mass: 213.006609 },\n            { nominal: 214, mass: 214.006918 },\n            { nominal: 215, mass: 215.006475 },\n            { nominal: 216, mass: 216.008743 },\n            { nominal: 217, mass: 217.009344 },\n            { nominal: 218, mass: 218.011642 },\n            { nominal: 219, mass: 219.012421 },\n            { nominal: 220, mass: 220.0147549 },\n            { nominal: 221, mass: 221.015592 },\n            { nominal: 222, mass: 222.0178442 },\n            { nominal: 223, mass: 223.0191377 },\n            { nominal: 224, mass: 224.0217232 },\n            { nominal: 225, mass: 225.02323 },\n            { nominal: 226, mass: 226.0260984 },\n            { nominal: 227, mass: 227.0277523 },\n            { nominal: 228, mass: 228.0310215 },\n            { nominal: 229, mass: 229.032956 },\n            { nominal: 230, mass: 230.036327 },\n            { nominal: 231, mass: 231.038393 },\n            { nominal: 232, mass: 232.042034 },\n            { nominal: 233, mass: 233.044346 },\n            { nominal: 234, mass: 234.048139 },\n            { nominal: 235, mass: 235.05084 },\n            { nominal: 236, mass: 236.054988 },\n            { nominal: 237, mass: 237.05827 },\n        ],\n        symbol: 'Ac',\n        mass: null,\n        name: 'Actinium',\n    },\n    {\n        number: 90,\n        isotopes: [\n            { nominal: 208, mass: 208.0179 },\n            { nominal: 209, mass: 209.017753 },\n            { nominal: 210, mass: 210.015094 },\n            { nominal: 211, mass: 211.014929 },\n            { nominal: 212, mass: 212.012988 },\n            { nominal: 213, mass: 213.013009 },\n            { nominal: 214, mass: 214.0115 },\n            { nominal: 215, mass: 215.0117248 },\n            { nominal: 216, mass: 216.011056 },\n            { nominal: 217, mass: 217.013117 },\n            { nominal: 218, mass: 218.013276 },\n            { nominal: 219, mass: 219.015537 },\n            { nominal: 220, mass: 220.015748 },\n            { nominal: 221, mass: 221.018184 },\n            { nominal: 222, mass: 222.018469 },\n            { nominal: 223, mass: 223.0208119 },\n            { nominal: 224, mass: 224.021464 },\n            { nominal: 225, mass: 225.0239514 },\n            { nominal: 226, mass: 226.0249034 },\n            { nominal: 227, mass: 227.0277042 },\n            { nominal: 228, mass: 228.0287413 },\n            { nominal: 229, mass: 229.0317627 },\n            { nominal: 230, mass: 230.0331341 },\n            { nominal: 231, mass: 231.0363046 },\n            { nominal: 232, mass: 232.0380558, abundance: 1 },\n            { nominal: 233, mass: 233.0415823 },\n            { nominal: 234, mass: 234.0436014 },\n            { nominal: 235, mass: 235.047255 },\n            { nominal: 236, mass: 236.049657 },\n            { nominal: 237, mass: 237.053629 },\n            { nominal: 238, mass: 238.0565 },\n            { nominal: 239, mass: 239.06077 },\n        ],\n        symbol: 'Th',\n        mass: 232.0380558,\n        name: 'Thorium',\n        monoisotopicMass: 232.0380558,\n    },\n    {\n        number: 91,\n        isotopes: [\n            { nominal: 212, mass: 212.023203 },\n            { nominal: 213, mass: 213.021109 },\n            { nominal: 214, mass: 214.020918 },\n            { nominal: 215, mass: 215.019183 },\n            { nominal: 216, mass: 216.019109 },\n            { nominal: 217, mass: 217.018325 },\n            { nominal: 218, mass: 218.020059 },\n            { nominal: 219, mass: 219.019904 },\n            { nominal: 220, mass: 220.021705 },\n            { nominal: 221, mass: 221.021875 },\n            { nominal: 222, mass: 222.023784 },\n            { nominal: 223, mass: 223.023963 },\n            { nominal: 224, mass: 224.0256176 },\n            { nominal: 225, mass: 225.026131 },\n            { nominal: 226, mass: 226.027948 },\n            { nominal: 227, mass: 227.0288054 },\n            { nominal: 228, mass: 228.0310517 },\n            { nominal: 229, mass: 229.0320972 },\n            { nominal: 230, mass: 230.034541 },\n            { nominal: 231, mass: 231.0358842, abundance: 1 },\n            { nominal: 232, mass: 232.0385917 },\n            { nominal: 233, mass: 233.0402472 },\n            { nominal: 234, mass: 234.0433072 },\n            { nominal: 235, mass: 235.045399 },\n            { nominal: 236, mass: 236.048668 },\n            { nominal: 237, mass: 237.051023 },\n            { nominal: 238, mass: 238.054637 },\n            { nominal: 239, mass: 239.05726 },\n            { nominal: 240, mass: 240.06098 },\n            { nominal: 241, mass: 241.06408 },\n        ],\n        symbol: 'Pa',\n        mass: 231.0358842,\n        name: 'Protactinium',\n        monoisotopicMass: 231.0358842,\n    },\n    {\n        number: 92,\n        isotopes: [\n            { nominal: 217, mass: 217.02466 },\n            { nominal: 218, mass: 218.023523 },\n            { nominal: 219, mass: 219.024999 },\n            { nominal: 220, mass: 220.02462 },\n            { nominal: 221, mass: 221.02628 },\n            { nominal: 222, mass: 222.026 },\n            { nominal: 223, mass: 223.027739 },\n            { nominal: 224, mass: 224.027605 },\n            { nominal: 225, mass: 225.029391 },\n            { nominal: 226, mass: 226.029339 },\n            { nominal: 227, mass: 227.031157 },\n            { nominal: 228, mass: 228.031371 },\n            { nominal: 229, mass: 229.0335063 },\n            { nominal: 230, mass: 230.0339401 },\n            { nominal: 231, mass: 231.0362939 },\n            { nominal: 232, mass: 232.0371563 },\n            { nominal: 233, mass: 233.0396355 },\n            { nominal: 234, mass: 234.0409523, abundance: 0.000054 },\n            { nominal: 235, mass: 235.0439301, abundance: 0.007204 },\n            { nominal: 236, mass: 236.0455682 },\n            { nominal: 237, mass: 237.0487304 },\n            { nominal: 238, mass: 238.0507884, abundance: 0.992742 },\n            { nominal: 239, mass: 239.0542935 },\n            { nominal: 240, mass: 240.0565934 },\n            { nominal: 241, mass: 241.06033 },\n            { nominal: 242, mass: 242.06293 },\n            { nominal: 243, mass: 243.06699 },\n        ],\n        symbol: 'U',\n        mass: 238.0289104616574,\n        name: 'Uranium',\n        monoisotopicMass: 238.0507884,\n    },\n    {\n        number: 93,\n        isotopes: [\n            { nominal: 219, mass: 219.03143 },\n            { nominal: 220, mass: 220.03254 },\n            { nominal: 221, mass: 221.03204 },\n            { nominal: 222, mass: 222.0333 },\n            { nominal: 223, mass: 223.03285 },\n            { nominal: 224, mass: 224.03422 },\n            { nominal: 225, mass: 225.033911 },\n            { nominal: 226, mass: 226.035188 },\n            { nominal: 227, mass: 227.034957 },\n            { nominal: 228, mass: 228.036067 },\n            { nominal: 229, mass: 229.036264 },\n            { nominal: 230, mass: 230.037828 },\n            { nominal: 231, mass: 231.038245 },\n            { nominal: 232, mass: 232.04011 },\n            { nominal: 233, mass: 233.040741 },\n            { nominal: 234, mass: 234.0428953 },\n            { nominal: 235, mass: 235.0440635 },\n            { nominal: 236, mass: 236.04657 },\n            { nominal: 237, mass: 237.0481736 },\n            { nominal: 238, mass: 238.0509466 },\n            { nominal: 239, mass: 239.0529392 },\n            { nominal: 240, mass: 240.056165 },\n            { nominal: 241, mass: 241.058253 },\n            { nominal: 242, mass: 242.06164 },\n            { nominal: 243, mass: 243.06428 },\n            { nominal: 244, mass: 244.06785 },\n            { nominal: 245, mass: 245.0708 },\n        ],\n        symbol: 'Np',\n        mass: null,\n        name: 'Neptunium',\n    },\n    {\n        number: 94,\n        isotopes: [\n            { nominal: 228, mass: 228.038732 },\n            { nominal: 229, mass: 229.040144 },\n            { nominal: 230, mass: 230.03965 },\n            { nominal: 231, mass: 231.041102 },\n            { nominal: 232, mass: 232.041185 },\n            { nominal: 233, mass: 233.042998 },\n            { nominal: 234, mass: 234.0433174 },\n            { nominal: 235, mass: 235.045286 },\n            { nominal: 236, mass: 236.0460581 },\n            { nominal: 237, mass: 237.0484098 },\n            { nominal: 238, mass: 238.0495601 },\n            { nominal: 239, mass: 239.0521636 },\n            { nominal: 240, mass: 240.0538138 },\n            { nominal: 241, mass: 241.0568517 },\n            { nominal: 242, mass: 242.0587428 },\n            { nominal: 243, mass: 243.0620036 },\n            { nominal: 244, mass: 244.0642053 },\n            { nominal: 245, mass: 245.067826 },\n            { nominal: 246, mass: 246.070205 },\n            { nominal: 247, mass: 247.07419 },\n        ],\n        symbol: 'Pu',\n        mass: null,\n        name: 'Plutonium',\n    },\n    {\n        number: 95,\n        isotopes: [\n            { nominal: 230, mass: 230.04609 },\n            { nominal: 231, mass: 231.04556 },\n            { nominal: 232, mass: 232.04645 },\n            { nominal: 233, mass: 233.04644 },\n            { nominal: 234, mass: 234.04773 },\n            { nominal: 235, mass: 235.047908 },\n            { nominal: 236, mass: 236.04943 },\n            { nominal: 237, mass: 237.049996 },\n            { nominal: 238, mass: 238.051985 },\n            { nominal: 239, mass: 239.0530247 },\n            { nominal: 240, mass: 240.0553 },\n            { nominal: 241, mass: 241.0568293 },\n            { nominal: 242, mass: 242.0595494 },\n            { nominal: 243, mass: 243.0613813 },\n            { nominal: 244, mass: 244.0642851 },\n            { nominal: 245, mass: 245.0664548 },\n            { nominal: 246, mass: 246.069775 },\n            { nominal: 247, mass: 247.07209 },\n            { nominal: 248, mass: 248.07575 },\n            { nominal: 249, mass: 249.07848 },\n        ],\n        symbol: 'Am',\n        name: 'Americium',\n        mass: null,\n    },\n    {\n        number: 96,\n        isotopes: [\n            { nominal: 232, mass: 232.04982 },\n            { nominal: 233, mass: 233.05077 },\n            { nominal: 234, mass: 234.05016 },\n            { nominal: 235, mass: 235.05154 },\n            { nominal: 236, mass: 236.051374 },\n            { nominal: 237, mass: 237.052869 },\n            { nominal: 238, mass: 238.053081 },\n            { nominal: 239, mass: 239.05491 },\n            { nominal: 240, mass: 240.0555297 },\n            { nominal: 241, mass: 241.0576532 },\n            { nominal: 242, mass: 242.058836 },\n            { nominal: 243, mass: 243.0613893 },\n            { nominal: 244, mass: 244.0627528 },\n            { nominal: 245, mass: 245.0654915 },\n            { nominal: 246, mass: 246.0672238 },\n            { nominal: 247, mass: 247.0703541 },\n            { nominal: 248, mass: 248.0723499 },\n            { nominal: 249, mass: 249.0759548 },\n            { nominal: 250, mass: 250.078358 },\n            { nominal: 251, mass: 251.082286 },\n            { nominal: 252, mass: 252.08487 },\n        ],\n        symbol: 'Cm',\n        name: 'Curium',\n        mass: null,\n    },\n    {\n        number: 97,\n        isotopes: [\n            { nominal: 234, mass: 234.05727 },\n            { nominal: 235, mass: 235.05658 },\n            { nominal: 236, mass: 236.05748 },\n            { nominal: 237, mass: 237.0571 },\n            { nominal: 238, mass: 238.0582 },\n            { nominal: 239, mass: 239.05824 },\n            { nominal: 240, mass: 240.05976 },\n            { nominal: 241, mass: 241.06016 },\n            { nominal: 242, mass: 242.06198 },\n            { nominal: 243, mass: 243.0630078 },\n            { nominal: 244, mass: 244.065181 },\n            { nominal: 245, mass: 245.0663618 },\n            { nominal: 246, mass: 246.068673 },\n            { nominal: 247, mass: 247.0703073 },\n            { nominal: 248, mass: 248.073088 },\n            { nominal: 249, mass: 249.0749877 },\n            { nominal: 250, mass: 250.0783167 },\n            { nominal: 251, mass: 251.080762 },\n            { nominal: 252, mass: 252.08431 },\n            { nominal: 253, mass: 253.08688 },\n            { nominal: 254, mass: 254.0906 },\n        ],\n        symbol: 'Bk',\n        name: 'Berkelium',\n        mass: null,\n    },\n    {\n        number: 98,\n        isotopes: [\n            { nominal: 237, mass: 237.062198 },\n            { nominal: 238, mass: 238.06149 },\n            { nominal: 239, mass: 239.06253 },\n            { nominal: 240, mass: 240.062256 },\n            { nominal: 241, mass: 241.06369 },\n            { nominal: 242, mass: 242.063754 },\n            { nominal: 243, mass: 243.06548 },\n            { nominal: 244, mass: 244.0660008 },\n            { nominal: 245, mass: 245.0680487 },\n            { nominal: 246, mass: 246.0688055 },\n            { nominal: 247, mass: 247.070965 },\n            { nominal: 248, mass: 248.0721851 },\n            { nominal: 249, mass: 249.0748539 },\n            { nominal: 250, mass: 250.0764062 },\n            { nominal: 251, mass: 251.0795886 },\n            { nominal: 252, mass: 252.0816272 },\n            { nominal: 253, mass: 253.0851345 },\n            { nominal: 254, mass: 254.087324 },\n            { nominal: 255, mass: 255.09105 },\n            { nominal: 256, mass: 256.09344 },\n        ],\n        symbol: 'Cf',\n        name: 'Californium',\n        mass: null,\n    },\n    {\n        number: 99,\n        isotopes: [\n            { nominal: 239, mass: 239.06823 },\n            { nominal: 240, mass: 240.06892 },\n            { nominal: 241, mass: 241.06856 },\n            { nominal: 242, mass: 242.06957 },\n            { nominal: 243, mass: 243.06951 },\n            { nominal: 244, mass: 244.07088 },\n            { nominal: 245, mass: 245.07125 },\n            { nominal: 246, mass: 246.0729 },\n            { nominal: 247, mass: 247.073622 },\n            { nominal: 248, mass: 248.075471 },\n            { nominal: 249, mass: 249.076411 },\n            { nominal: 250, mass: 250.07861 },\n            { nominal: 251, mass: 251.0799936 },\n            { nominal: 252, mass: 252.08298 },\n            { nominal: 253, mass: 253.0848257 },\n            { nominal: 254, mass: 254.0880222 },\n            { nominal: 255, mass: 255.090275 },\n            { nominal: 256, mass: 256.0936 },\n            { nominal: 257, mass: 257.09598 },\n            { nominal: 258, mass: 258.09952 },\n        ],\n        symbol: 'Es',\n        name: 'Einsteinium',\n        mass: null,\n    },\n    {\n        number: 100,\n        isotopes: [\n            { nominal: 241, mass: 241.07421 },\n            { nominal: 242, mass: 242.07343 },\n            { nominal: 243, mass: 243.07446 },\n            { nominal: 244, mass: 244.07404 },\n            { nominal: 245, mass: 245.07535 },\n            { nominal: 246, mass: 246.07535 },\n            { nominal: 247, mass: 247.07694 },\n            { nominal: 248, mass: 248.0771865 },\n            { nominal: 249, mass: 249.0789275 },\n            { nominal: 250, mass: 250.079521 },\n            { nominal: 251, mass: 251.08154 },\n            { nominal: 252, mass: 252.0824671 },\n            { nominal: 253, mass: 253.0851846 },\n            { nominal: 254, mass: 254.0868544 },\n            { nominal: 255, mass: 255.089964 },\n            { nominal: 256, mass: 256.0917745 },\n            { nominal: 257, mass: 257.0951061 },\n            { nominal: 258, mass: 258.09708 },\n            { nominal: 259, mass: 259.1006 },\n            { nominal: 260, mass: 260.10281 },\n        ],\n        symbol: 'Fm',\n        name: 'Fermium',\n        mass: null,\n    },\n    {\n        number: 101,\n        isotopes: [\n            { nominal: 245, mass: 245.08081 },\n            { nominal: 246, mass: 246.08171 },\n            { nominal: 247, mass: 247.08152 },\n            { nominal: 248, mass: 248.08282 },\n            { nominal: 249, mass: 249.08291 },\n            { nominal: 250, mass: 250.08441 },\n            { nominal: 251, mass: 251.084774 },\n            { nominal: 252, mass: 252.08643 },\n            { nominal: 253, mass: 253.087144 },\n            { nominal: 254, mass: 254.08959 },\n            { nominal: 255, mass: 255.0910841 },\n            { nominal: 256, mass: 256.09389 },\n            { nominal: 257, mass: 257.0955424 },\n            { nominal: 258, mass: 258.0984315 },\n            { nominal: 259, mass: 259.10051 },\n            { nominal: 260, mass: 260.10365 },\n            { nominal: 261, mass: 261.10583 },\n            { nominal: 262, mass: 262.1091 },\n        ],\n        symbol: 'Md',\n        name: 'Mendelevium',\n        mass: null,\n    },\n    {\n        number: 102,\n        isotopes: [\n            { nominal: 248, mass: 248.08655 },\n            { nominal: 249, mass: 249.0878 },\n            { nominal: 250, mass: 250.08756 },\n            { nominal: 251, mass: 251.08894 },\n            { nominal: 252, mass: 252.088967 },\n            { nominal: 253, mass: 253.0905641 },\n            { nominal: 254, mass: 254.090956 },\n            { nominal: 255, mass: 255.093191 },\n            { nominal: 256, mass: 256.0942829 },\n            { nominal: 257, mass: 257.0968878 },\n            { nominal: 258, mass: 258.09821 },\n            { nominal: 259, mass: 259.10103 },\n            { nominal: 260, mass: 260.10264 },\n            { nominal: 261, mass: 261.1057 },\n            { nominal: 262, mass: 262.10746 },\n            { nominal: 263, mass: 263.11071 },\n            { nominal: 264, mass: 264.11273 },\n        ],\n        symbol: 'No',\n        name: 'Nobelium',\n        mass: null,\n    },\n    {\n        number: 103,\n        isotopes: [\n            { nominal: 251, mass: 251.09418 },\n            { nominal: 252, mass: 252.09526 },\n            { nominal: 253, mass: 253.09509 },\n            { nominal: 254, mass: 254.09648 },\n            { nominal: 255, mass: 255.096562 },\n            { nominal: 256, mass: 256.098494 },\n            { nominal: 257, mass: 257.099418 },\n            { nominal: 258, mass: 258.10176 },\n            { nominal: 259, mass: 259.102902 },\n            { nominal: 260, mass: 260.1055 },\n            { nominal: 261, mass: 261.10688 },\n            { nominal: 262, mass: 262.10961 },\n            { nominal: 263, mass: 263.11136 },\n            { nominal: 264, mass: 264.1142 },\n            { nominal: 265, mass: 265.11619 },\n            { nominal: 266, mass: 266.11983 },\n        ],\n        symbol: 'Lr',\n        name: 'Lawrencium',\n        mass: null,\n    },\n    {\n        number: 104,\n        isotopes: [\n            { nominal: 253, mass: 253.10044 },\n            { nominal: 254, mass: 254.10005 },\n            { nominal: 255, mass: 255.10127 },\n            { nominal: 256, mass: 256.101152 },\n            { nominal: 257, mass: 257.102918 },\n            { nominal: 258, mass: 258.103428 },\n            { nominal: 259, mass: 259.105596 },\n            { nominal: 260, mass: 260.10644 },\n            { nominal: 261, mass: 261.108773 },\n            { nominal: 262, mass: 262.10992 },\n            { nominal: 263, mass: 263.11249 },\n            { nominal: 264, mass: 264.11388 },\n            { nominal: 265, mass: 265.11668 },\n            { nominal: 266, mass: 266.11817 },\n            { nominal: 267, mass: 267.12179 },\n            { nominal: 268, mass: 268.12397 },\n        ],\n        symbol: 'Rf',\n        name: 'Rutherfordium',\n        mass: null,\n    },\n    {\n        number: 105,\n        isotopes: [\n            { nominal: 255, mass: 255.10707 },\n            { nominal: 256, mass: 256.10789 },\n            { nominal: 257, mass: 257.10758 },\n            { nominal: 258, mass: 258.10928 },\n            { nominal: 259, mass: 259.109492 },\n            { nominal: 260, mass: 260.1113 },\n            { nominal: 261, mass: 261.11192 },\n            { nominal: 262, mass: 262.11407 },\n            { nominal: 263, mass: 263.11499 },\n            { nominal: 264, mass: 264.11741 },\n            { nominal: 265, mass: 265.11861 },\n            { nominal: 266, mass: 266.12103 },\n            { nominal: 267, mass: 267.12247 },\n            { nominal: 268, mass: 268.12567 },\n            { nominal: 269, mass: 269.12791 },\n            { nominal: 270, mass: 270.13136 },\n        ],\n        symbol: 'Db',\n        name: 'Dubnium',\n        mass: null,\n    },\n    {\n        number: 106,\n        isotopes: [\n            { nominal: 258, mass: 258.11298 },\n            { nominal: 259, mass: 259.1144 },\n            { nominal: 260, mass: 260.114384 },\n            { nominal: 261, mass: 261.115949 },\n            { nominal: 262, mass: 262.116337 },\n            { nominal: 263, mass: 263.11829 },\n            { nominal: 264, mass: 264.11893 },\n            { nominal: 265, mass: 265.12109 },\n            { nominal: 266, mass: 266.12198 },\n            { nominal: 267, mass: 267.12436 },\n            { nominal: 268, mass: 268.12539 },\n            { nominal: 269, mass: 269.12863 },\n            { nominal: 270, mass: 270.13043 },\n            { nominal: 271, mass: 271.13393 },\n            { nominal: 272, mass: 272.13589 },\n            { nominal: 273, mass: 273.13958 },\n        ],\n        symbol: 'Sg',\n        name: 'Seaborgium',\n        mass: null,\n    },\n    {\n        number: 107,\n        isotopes: [\n            { nominal: 260, mass: 260.12166 },\n            { nominal: 261, mass: 261.12145 },\n            { nominal: 262, mass: 262.12297 },\n            { nominal: 263, mass: 263.12292 },\n            { nominal: 264, mass: 264.12459 },\n            { nominal: 265, mass: 265.12491 },\n            { nominal: 266, mass: 266.12679 },\n            { nominal: 267, mass: 267.1275 },\n            { nominal: 268, mass: 268.12969 },\n            { nominal: 269, mass: 269.13042 },\n            { nominal: 270, mass: 270.13336 },\n            { nominal: 271, mass: 271.13526 },\n            { nominal: 272, mass: 272.13826 },\n            { nominal: 273, mass: 273.14024 },\n            { nominal: 274, mass: 274.14355 },\n            { nominal: 275, mass: 275.14567 },\n        ],\n        symbol: 'Bh',\n        name: 'Bohrium',\n        mass: null,\n    },\n    {\n        number: 108,\n        isotopes: [\n            { nominal: 263, mass: 263.12852 },\n            { nominal: 264, mass: 264.128357 },\n            { nominal: 265, mass: 265.129793 },\n            { nominal: 266, mass: 266.130046 },\n            { nominal: 267, mass: 267.13167 },\n            { nominal: 268, mass: 268.13186 },\n            { nominal: 269, mass: 269.13375 },\n            { nominal: 270, mass: 270.13429 },\n            { nominal: 271, mass: 271.13717 },\n            { nominal: 272, mass: 272.1385 },\n            { nominal: 273, mass: 273.14168 },\n            { nominal: 274, mass: 274.1433 },\n            { nominal: 275, mass: 275.14667 },\n            { nominal: 276, mass: 276.14846 },\n            { nominal: 277, mass: 277.1519 },\n        ],\n        symbol: 'Hs',\n        name: 'Hassium',\n        mass: null,\n    },\n    {\n        number: 109,\n        isotopes: [\n            { nominal: 265, mass: 265.136 },\n            { nominal: 266, mass: 266.13737 },\n            { nominal: 267, mass: 267.13719 },\n            { nominal: 268, mass: 268.13865 },\n            { nominal: 269, mass: 269.13882 },\n            { nominal: 270, mass: 270.14033 },\n            { nominal: 271, mass: 271.14074 },\n            { nominal: 272, mass: 272.14341 },\n            { nominal: 273, mass: 273.1444 },\n            { nominal: 274, mass: 274.14724 },\n            { nominal: 275, mass: 275.14882 },\n            { nominal: 276, mass: 276.15159 },\n            { nominal: 277, mass: 277.15327 },\n            { nominal: 278, mass: 278.15631 },\n            { nominal: 279, mass: 279.15808 },\n        ],\n        symbol: 'Mt',\n        name: 'Meitnerium',\n        mass: null,\n    },\n    {\n        number: 110,\n        isotopes: [\n            { nominal: 267, mass: 267.14377 },\n            { nominal: 268, mass: 268.14348 },\n            { nominal: 269, mass: 269.144752 },\n            { nominal: 270, mass: 270.144584 },\n            { nominal: 271, mass: 271.14595 },\n            { nominal: 272, mass: 272.14602 },\n            { nominal: 273, mass: 273.14856 },\n            { nominal: 274, mass: 274.14941 },\n            { nominal: 275, mass: 275.15203 },\n            { nominal: 276, mass: 276.15303 },\n            { nominal: 277, mass: 277.15591 },\n            { nominal: 278, mass: 278.15704 },\n            { nominal: 279, mass: 279.1601 },\n            { nominal: 280, mass: 280.16131 },\n            { nominal: 281, mass: 281.16451 },\n        ],\n        symbol: 'Ds',\n        name: 'Darmstadtium',\n        mass: null,\n    },\n    {\n        number: 111,\n        isotopes: [\n            { nominal: 272, mass: 272.15327 },\n            { nominal: 273, mass: 273.15313 },\n            { nominal: 274, mass: 274.15525 },\n            { nominal: 275, mass: 275.15594 },\n            { nominal: 276, mass: 276.15833 },\n            { nominal: 277, mass: 277.15907 },\n            { nominal: 278, mass: 278.16149 },\n            { nominal: 279, mass: 279.16272 },\n            { nominal: 280, mass: 280.16514 },\n            { nominal: 281, mass: 281.16636 },\n            { nominal: 282, mass: 282.16912 },\n            { nominal: 283, mass: 283.17054 },\n        ],\n        symbol: 'Rg',\n        name: 'Roentgenium',\n        mass: null,\n    },\n    {\n        number: 112,\n        isotopes: [\n            { nominal: 276, mass: 276.16141 },\n            { nominal: 277, mass: 277.16364 },\n            { nominal: 278, mass: 278.16416 },\n            { nominal: 279, mass: 279.16654 },\n            { nominal: 280, mass: 280.16715 },\n            { nominal: 281, mass: 281.16975 },\n            { nominal: 282, mass: 282.1705 },\n            { nominal: 283, mass: 283.17327 },\n            { nominal: 284, mass: 284.17416 },\n            { nominal: 285, mass: 285.17712 },\n        ],\n        symbol: 'Cn',\n        name: 'Copernicium',\n        mass: null,\n    },\n    {\n        number: 113,\n        isotopes: [\n            { nominal: 278, mass: 278.17058 },\n            { nominal: 279, mass: 279.17095 },\n            { nominal: 280, mass: 280.17293 },\n            { nominal: 281, mass: 281.17348 },\n            { nominal: 282, mass: 282.17567 },\n            { nominal: 283, mass: 283.17657 },\n            { nominal: 284, mass: 284.17873 },\n            { nominal: 285, mass: 285.17973 },\n            { nominal: 286, mass: 286.18221 },\n            { nominal: 287, mass: 287.18339 },\n        ],\n        symbol: 'Nh',\n        name: 'Nihonium',\n        mass: null,\n    },\n    {\n        number: 114,\n        isotopes: [\n            { nominal: 285, mass: 285.18364 },\n            { nominal: 286, mass: 286.18423 },\n            { nominal: 287, mass: 287.18678 },\n            { nominal: 288, mass: 288.18757 },\n            { nominal: 289, mass: 289.19042 },\n        ],\n        symbol: 'Fl',\n        name: 'Flerovium',\n        mass: null,\n    },\n    {\n        number: 115,\n        isotopes: [\n            { nominal: 287, mass: 287.1907 },\n            { nominal: 288, mass: 288.19274 },\n            { nominal: 289, mass: 289.19363 },\n            { nominal: 290, mass: 290.19598 },\n            { nominal: 291, mass: 291.19707 },\n        ],\n        symbol: 'Mc',\n        name: 'Moscovium',\n        mass: null,\n    },\n    {\n        number: 116,\n        isotopes: [\n            { nominal: 289, mass: 289.19816 },\n            { nominal: 290, mass: 290.19864 },\n            { nominal: 291, mass: 291.20108 },\n            { nominal: 292, mass: 292.20174 },\n            { nominal: 293, mass: 293.20449 },\n        ],\n        symbol: 'Lv',\n        name: 'Livermorium',\n        mass: null,\n    },\n    {\n        number: 117,\n        isotopes: [\n            { nominal: 291, mass: 291.20553 },\n            { nominal: 292, mass: 292.20746 },\n            { nominal: 293, mass: 293.20824 },\n            { nominal: 294, mass: 294.21046 },\n        ],\n        symbol: 'Ts',\n        name: 'Teennessine',\n        mass: null,\n    },\n    {\n        number: 118,\n        isotopes: [\n            { nominal: 293, mass: 293.21356 },\n            { nominal: 294, mass: 294.21392 },\n            { nominal: 295, mass: 295.21624 },\n        ],\n        symbol: 'Og',\n        name: 'Oganesson',\n        mass: null,\n    },\n];\n//# sourceMappingURL=elementsAndIsotopes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elements = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elements = elementsAndIsotopes_js_1.elementsAndIsotopes.map((element) => ({\n    number: element.number,\n    symbol: element.symbol,\n    mass: element.mass,\n    name: element.name,\n    monoisotopicMass: element.monoisotopicMass,\n}));\n//# sourceMappingURL=elements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndIsotopesObject = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elementsAndIsotopesObject = {};\nfor (const element of elementsAndIsotopes_js_1.elementsAndIsotopes) {\n    exports.elementsAndIsotopesObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsAndIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndStableIsotopes = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elementsAndStableIsotopes = structuredClone(elementsAndIsotopes_js_1.elementsAndIsotopes);\nfor (const element of exports.elementsAndStableIsotopes) {\n    element.isotopes = element.isotopes.filter((i) => {\n        return typeof i.abundance === 'number' && i.abundance > 0;\n    });\n}\n//# sourceMappingURL=elementsAndStableIsotopes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndStableIsotopesObject = void 0;\nconst elementsAndStableIsotopes_js_1 = require(\"./elementsAndStableIsotopes.js\");\nexports.elementsAndStableIsotopesObject = {};\nfor (const element of elementsAndStableIsotopes_js_1.elementsAndStableIsotopes) {\n    exports.elementsAndStableIsotopesObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsAndStableIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsObject = void 0;\nconst elements_js_1 = require(\"./elements.js\");\nexports.elementsObject = {};\nfor (const element of elements_js_1.elements) {\n    exports.elementsObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isotopesObject = void 0;\nconst elementsAndIsotopesObject_js_1 = require(\"./elementsAndIsotopesObject.js\");\nexports.isotopesObject = {};\nfor (const [symbol, element] of Object.entries(elementsAndIsotopesObject_js_1.elementsAndIsotopesObject)) {\n    if (!element)\n        continue;\n    for (const isotope of element.isotopes) {\n        exports.isotopesObject[`${isotope.nominal}${symbol}`] = {\n            abundance: isotope.abundance,\n            mass: isotope.mass,\n        };\n    }\n}\n//# sourceMappingURL=isotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stableIsotopesObject = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.stableIsotopesObject = {};\nfor (const element of elementsAndIsotopes_js_1.elementsAndIsotopes) {\n    let abundance = 0;\n    let mostAbundant = 0;\n    for (const isotope of element.isotopes) {\n        if (typeof isotope.abundance === 'number' &&\n            isotope.abundance > abundance) {\n            abundance = isotope.abundance;\n            mostAbundant = isotope.nominal;\n        }\n    }\n    for (const isotope of element.isotopes) {\n        if (isotope.abundance === 0)\n            continue;\n        const entry = {\n            name: element.name,\n            mass: isotope.mass,\n            symbol: element.symbol,\n            mostAbundant: false,\n        };\n        if (isotope.nominal === mostAbundant) {\n            entry.mostAbundant = true;\n        }\n        exports.stableIsotopesObject[`${isotope.nominal}${element.symbol}`] = entry;\n    }\n}\n//# sourceMappingURL=stableIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsaturationsObject = void 0;\nexports.unsaturationsObject = {\n    O: 0,\n    N: 1,\n    H: -1,\n    Na: -1,\n    K: -1,\n    Li: -1,\n    Ca: -2,\n    C: 2,\n    F: -1,\n    Si: 2,\n    Cl: -1,\n    Br: -1,\n    I: -1,\n    S: 0,\n    P: 1,\n};\n//# sourceMappingURL=unsaturationsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.groupsObject = void 0;\nconst groups_1 = require(\"./groups\");\nexports.groupsObject = {};\ngroups_1.groups.forEach((e) => {\n    if (exports.groupsObject[e.symbol]) {\n        // eslint-disable-next-line no-console\n        console.log(`The symbol ${e.symbol} is used more than once`);\n    }\n    exports.groupsObject[e.symbol] = e;\n});\n//# sourceMappingURL=groupsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.groupsToSequence = groupsToSequence;\nconst groupsObject_js_1 = require(\"./groupsObject.js\");\n/**\n * Recreate a one letter sequence\n * @param {object} mf\n */\nfunction groupsToSequence(mf) {\n    mf = mf.replaceAll(/\\([^(]*\\)/g, '');\n    let parts = mf.split(/(?=[ A-Z])/);\n    let usefulParts = [];\n    for (let part of parts) {\n        if (part === ' ') {\n            usefulParts.push(' ');\n            continue;\n        }\n        if (!part.match(/^[A-Z][a-z]{2,6}/))\n            continue;\n        if (groupsObject_js_1.groupsObject[part] && groupsObject_js_1.groupsObject[part].oneLetter) {\n            usefulParts.push(groupsObject_js_1.groupsObject[part].oneLetter);\n        }\n        else {\n            usefulParts.push('?');\n        }\n    }\n    return usefulParts.join('').replaceAll(/ +/g, ' ').trim();\n}\n//# sourceMappingURL=groupsToSequence.js.map","\"use strict\";\n/**\n * Define static variable corresponding to the various Kinds of a molecular formula part.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Kind = void 0;\nexports.Kind = {\n    BEGIN: 'begin',\n    ATOM: 'atom',\n    MULTIPLIER_RANGE: 'multiplierRange',\n    ISOTOPE: 'isotope',\n    ISOTOPE_RATIO: 'isotopeRatio',\n    CHARGE: 'charge',\n    SALT: 'salt',\n    OPENING_PARENTHESIS: 'openingParenthesis',\n    CLOSING_PARENTHESIS: 'closingParenthesis',\n    PRE_MULTIPLIER: 'preMultiplier',\n    MULTIPLIER: 'multiplier',\n    TEXT: 'text',\n    ANCHOR: 'anchor',\n    COMMENT: 'comment',\n};\n//# sourceMappingURL=Kind.js.map","\"use strict\";\n/**\n * Parse a string to extract the charge.\n * The charge may be in the form --, +++, +3, -2, 4+, 2-\n * @param {*} charge\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseCharge = parseCharge;\nfunction parseCharge(charge) {\n    charge = charge.replaceAll(/[()]/g, '');\n    let chargeNumber = 0;\n    if (charge.match(/^[+-]+$/)) {\n        for (let i = 0; i < charge.length; i++) {\n            if (charge.charAt(i) === '+')\n                chargeNumber++;\n            else\n                chargeNumber--;\n        }\n    }\n    else if (charge.match(/^\\d+[+-]$/)) {\n        chargeNumber = Number(\n        // eslint-disable-next-line unicorn/prefer-at\n        charge.charAt(charge.length - 1) + charge.slice(0, -1));\n    }\n    else {\n        chargeNumber = Number(charge);\n    }\n    return chargeNumber;\n}\n//# sourceMappingURL=parseCharge.js.map","\"use strict\";\n/* eslint-disable unicorn/prefer-code-point */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"./Kind\");\nconst parseCharge_1 = require(\"./util/parseCharge\");\n/**\n * Parse a mf to an array of kind / value\n * @param {String} mf\n * @param {Object} [options={}]\n * @param {Boolean} [options.expandGroups=false] - if true, expand groups\n * @param {Boolean} [options.simplify=false] - if true, remove all the parenthesis and join identical atoms / groups\n */\nfunction parse(mf, options = {}) {\n    return new MFParser().parse(mf, options);\n}\nclass MFParser {\n    parse(mf = '', options = {}) {\n        this.expandGroups = options?.expandGroups ?? false;\n        this.simplify = options?.simplify ?? false;\n        this.mf = mf;\n        this.i = 0;\n        this.result = [];\n        let lastKind = Kind_1.Kind.BEGIN;\n        while (this.i < mf.length) {\n            if (this.result.length > 0 && this.result.at(-1).kind !== Kind_1.Kind.TEXT) {\n                lastKind = this.result.at(-1).kind;\n            }\n            let char = mf.charAt(this.i);\n            let ascii = mf.charCodeAt(this.i);\n            let nextAscii = 0;\n            if (this.i + 1 < mf.length)\n                nextAscii = mf.charCodeAt(this.i + 1);\n            if ((ascii > 47 && ascii < 58) ||\n                (char === '-' && nextAscii > 47 && nextAscii < 58)) {\n                // a number\n                let value = this.getNumber(ascii);\n                if (lastKind === Kind_1.Kind.SALT ||\n                    lastKind === Kind_1.Kind.BEGIN ||\n                    lastKind === Kind_1.Kind.OPENING_PARENTHESIS) {\n                    if (value.to) {\n                        throw new MFError(this.mf, this.i, 'Premultiplier may not contain a -');\n                    }\n                    this.result.push({ kind: Kind_1.Kind.PRE_MULTIPLIER, value: value.from });\n                }\n                else if (lastKind === Kind_1.Kind.ANCHOR) {\n                    if (value.to) {\n                        throw new MFError(this.mf, this.i, 'Anchor ID may not contain -');\n                    }\n                    this.result.at(-1).value = value.from;\n                }\n                else if (value.to) {\n                    this.result.push({\n                        kind: Kind_1.Kind.MULTIPLIER_RANGE,\n                        value: {\n                            from: Math.min(value.from, value.to),\n                            to: Math.max(value.from, value.to),\n                        },\n                    });\n                }\n                else {\n                    this.result.push({ kind: Kind_1.Kind.MULTIPLIER, value: value.from });\n                }\n                continue;\n            }\n            else if (char === '.') {\n                // a point\n                this.result.push({ kind: Kind_1.Kind.SALT, value: char });\n                // it is not in a number otherwise it would have been taken before\n                // it must be in a salt\n            }\n            else if (char === '#') {\n                // an anchor\n                this.result.push({ kind: Kind_1.Kind.ANCHOR, value: 0 });\n                // it is not in a number otherwise it would have been taken before\n                // it must be in a salt\n            }\n            else if (ascii > 64 && ascii < 91) {\n                // an uppercase = new atom\n                this.result.push(...this.getAtom(ascii));\n                continue;\n            }\n            else if (ascii > 96 && ascii < 123) {\n                // a lowercase\n                throw new MFError(this.mf, this.i, 'found a lowercase not following an uppercase');\n            }\n            else if (char === '(') {\n                let charge = this.getParenthesisCharge(ascii);\n                if (charge) {\n                    this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n                }\n                else {\n                    this.result.push({ kind: Kind_1.Kind.OPENING_PARENTHESIS, value: '(' });\n                }\n            }\n            else if (char === ')') {\n                this.result.push({ kind: Kind_1.Kind.CLOSING_PARENTHESIS, value: ')' });\n            }\n            else if (char === '[') {\n                // defines an isotope\n                let isotope = this.getIsotope(ascii);\n                this.result.push({ kind: Kind_1.Kind.ISOTOPE, value: isotope });\n            }\n            else if (char === ']') {\n                throw new MFError(this.mf, this.i, 'should never meet an closing bracket not in isotopes');\n            }\n            else if (char === '{') {\n                // can define an exotic isotopic ratio or mixtures of groups\n                let isotopeRatio = this.getCurlyBracketIsotopeRatio(ascii);\n                if (lastKind === Kind_1.Kind.ATOM) {\n                    let lastResult = this.result.at(-1);\n                    lastResult.kind = Kind_1.Kind.ISOTOPE_RATIO;\n                    lastResult.value = {\n                        atom: lastResult.value,\n                        ratio: isotopeRatio,\n                    };\n                }\n                else {\n                    throw new MFError(this.mf, this.i, 'isotopic composition has to follow an atom');\n                }\n            }\n            else if (char === '}') {\n                throw new MFError(this.mf, this.i, 'found a unexpected closing curly bracket');\n            }\n            else if (char === '+') {\n                // charge not in parenthesis\n                let charge = this.getNonParenthesisCharge(ascii);\n                this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n            }\n            else if (char === '-') {\n                // charge not in parenthesis\n                let charge = this.getNonParenthesisCharge(ascii);\n                this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n            }\n            else if (char === '$') {\n                // it is a comment after\n                this.result.push({\n                    kind: Kind_1.Kind.COMMENT,\n                    value: this.mf.slice(this.i + 1),\n                });\n                break;\n            }\n            else {\n                this.result.push({ kind: Kind_1.Kind.TEXT, value: char });\n            }\n            this.i++;\n        }\n        this.checkParenthesis();\n        if (this.simplify) {\n            this.result = simplify(this.result);\n        }\n        return this.result;\n    }\n    checkParenthesis() {\n        let counter = 0;\n        for (let line of this.result) {\n            if (line.kind === Kind_1.Kind.OPENING_PARENTHESIS)\n                counter++;\n            if (line.kind === Kind_1.Kind.CLOSING_PARENTHESIS)\n                counter--;\n        }\n        if (counter !== 0) {\n            throw new MFError(this.mf, this.i, 'number of opening and closing parenthesis not equal');\n        }\n    }\n    getNumber(ascii) {\n        let number = '';\n        let previous;\n        do {\n            previous = ascii;\n            number += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while ((ascii > 47 && ascii < 58) ||\n            ascii === 46 ||\n            ascii === 45 ||\n            ascii === 47); // number . - /\n        // we need to deal with the case there is a from / to\n        if (previous === 46)\n            this.i--;\n        let indexOfDash = number.indexOf('-', 1);\n        if (indexOfDash > -1) {\n            return {\n                from: parseNumberWithDivision(number.slice(0, indexOfDash)),\n                to: parseNumberWithDivision(number.slice(indexOfDash + 1)),\n            };\n        }\n        return { from: parseNumberWithDivision(number) };\n    }\n    getAtom(ascii) {\n        let atom = '';\n        do {\n            atom += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii > 96 && ascii < 123);\n        if (chemical_elements_1.elementsObject[atom] || !this.expandGroups) {\n            return [\n                {\n                    kind: Kind_1.Kind.ATOM,\n                    value: atom,\n                },\n            ];\n        }\n        if (chemical_groups_1.groupsObject[atom]) {\n            const group = chemical_groups_1.groupsObject[atom].mf;\n            const expandedGroups = parse(group, {\n                expandGroups: this.expandGroups,\n            });\n            // need to surround with parenthesis\n            return [\n                { kind: Kind_1.Kind.OPENING_PARENTHESIS, value: '(' },\n                ...expandedGroups,\n                { kind: Kind_1.Kind.CLOSING_PARENTHESIS, value: ')' },\n            ];\n        }\n        throw new MFError(`Not able to expand group: ${this.mf}`);\n    }\n    getIsotope(ascii) {\n        // [13C]\n        let substring = '';\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 93 && this.i <= this.mf.length);\n        let atom = substring.replaceAll(/[^A-Za-z]/g, '');\n        let isotope = Number(substring.replaceAll(/\\D/g, ''));\n        return { atom, isotope };\n    }\n    getCurlyBracketIsotopeRatio(ascii) {\n        let substring = '';\n        let first = true;\n        do {\n            if (!first) {\n                substring += String.fromCharCode(ascii);\n            }\n            else {\n                first = false;\n            }\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 125 && this.i <= this.mf.length); // closing curly bracket\n        if (substring.match(/^[0-9.,]+$/)) {\n            return substring.split(',').map(Number);\n        }\n        throw new MFError(this.mf, this.i, 'Curly brackets should contain only number, dot and comma');\n    }\n    getParenthesisCharge(ascii) {\n        let substring = '';\n        let begin = this.i;\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 41 && this.i <= this.mf.length); // closing parenthesis\n        if (substring.match(/^\\([\\d+-]+$/)) {\n            return (0, parseCharge_1.parseCharge)(substring.slice(1));\n        }\n        else {\n            this.i = begin;\n            return undefined;\n        }\n    }\n    getNonParenthesisCharge(ascii) {\n        let substring = '';\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii === 43 || ascii === 45 || (ascii > 47 && ascii < 58));\n        this.i--;\n        return (0, parseCharge_1.parseCharge)(substring);\n    }\n}\nclass MFError extends SyntaxError {\n    constructor(mf, i, message) {\n        let text = `${message}\\n\\n${mf}\\n${' '.repeat(i)}^`;\n        super(text);\n    }\n}\nfunction parseNumberWithDivision(string) {\n    if (string.includes('/')) {\n        let parts = string.split('/');\n        if (parts.length !== 2) {\n            throw new TypeError('Can not parse MF with number like: ', string);\n        }\n        return Number(parts[0]) / Number(parts[1]);\n    }\n    else {\n        return Number(string);\n    }\n}\n/**\n * Remove all the parenthesis and multipliers\n * Merge atoms and groups if present many times\n * We will also sort the atoms and groups\n * @param {*} parsed\n * @returns\n */\nfunction simplify(parsed) {\n    if (!parsed || parsed.length === 0)\n        return [];\n    const multipliers = [];\n    let currentMultiplier = { from: 1, to: 1 };\n    let newParsed = [];\n    for (let i = parsed.length - 1; i >= 0; i--) {\n        const item = parsed[i];\n        switch (item.kind) {\n            case 'atom':\n            case 'isotope':\n                {\n                    let realMultiplier = currentMultiplier;\n                    for (const multiplier of multipliers) {\n                        realMultiplier = {\n                            from: multiplier.from * realMultiplier.from,\n                            to: multiplier.to * realMultiplier.to,\n                        };\n                    }\n                    newParsed.push({\n                        kind: item.kind,\n                        value: item.value,\n                    }, {\n                        kind: 'multiplierRange',\n                        value: realMultiplier,\n                    });\n                    currentMultiplier = { from: 1, to: 1 };\n                }\n                break;\n            case 'multiplier':\n                currentMultiplier = { from: item.value, to: item.value };\n                break;\n            case 'multiplierRange':\n                currentMultiplier = item.value;\n                break;\n            case 'openingParenthesis':\n                multipliers.pop();\n                break;\n            case 'closingParenthesis':\n                multipliers.push(currentMultiplier);\n                currentMultiplier = { from: 1, to: 1 };\n                break;\n            case 'text':\n                break;\n            default:\n                throw new Error(`Unexpected kind --${item.kind}-- in removeParenthesis`);\n        }\n    }\n    // if we have many times the same atom / group, we can merge them\n    const distinctParsedObject = {};\n    for (let i = 0; i < newParsed.length; i = i + 2) {\n        const item = newParsed[i];\n        const multiplier = newParsed[i + 1];\n        const key = JSON.stringify(item.value);\n        if (!distinctParsedObject[key]) {\n            distinctParsedObject[key] = {\n                ...item,\n                multiplier: multiplier.value,\n            };\n        }\n        else {\n            distinctParsedObject[key].multiplier.from += multiplier.value.from;\n            distinctParsedObject[key].multiplier.to += multiplier.value.to;\n        }\n    }\n    const sorted = Object.values(distinctParsedObject).sort((a, b) => {\n        const atomA = a.kind === 'atom' ? a.value : a.value.atom;\n        const atomB = b.kind === 'atom' ? b.value : b.value.atom;\n        if (atomA === atomB) {\n            if (a.kind === 'isotope' && b.kind === 'isotope') {\n                return a.value.isotope - b.value.isotope;\n            }\n            if (a.kind === 'isotope' && b.kind !== 'isotope') {\n                return -1; // isotope comes before non-isotope\n            }\n            if (a.kind !== 'isotope' && b.kind === 'isotope') {\n                return 1; // non-isotope comes after isotope\n            }\n            return 0;\n        }\n        return (0, atom_sorter_1.atomSorter)(atomA, atomB);\n    });\n    const distinctParsed = [];\n    for (const item of sorted) {\n        if (item.multiplier.from === 0 && item.multiplier.to === 0) {\n            continue;\n        }\n        distinctParsed.push({\n            kind: item.kind,\n            value: item.value,\n        });\n        if (item.multiplier.from === 1 && item.multiplier.to === 1) {\n            continue; // no need to add a multiplier\n        }\n        if (item.multiplier.from === item.multiplier.to) {\n            distinctParsed.push({\n                kind: 'multiplier',\n                value: item.multiplier.from,\n            });\n        }\n        else {\n            distinctParsed.push({\n                kind: 'multiplierRange',\n                value: {\n                    from: item.multiplier.from,\n                    to: item.multiplier.to,\n                },\n            });\n        }\n    }\n    return distinctParsed;\n}\n//# sourceMappingURL=parse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscript = exports.superscript = void 0;\nexports.superscript = {\n    0: '⁰',\n    1: '¹',\n    2: '²',\n    3: '³',\n    4: '⁴',\n    5: '⁵',\n    6: '⁶',\n    7: '⁷',\n    8: '⁸',\n    9: '⁹',\n    '+': '⁺',\n    '-': '⁻',\n    '(': '⁽',\n    ')': '⁾',\n    '{': '⁽',\n    '}': '⁾',\n    '.': '˙',\n    ',': '˒',\n};\nexports.subscript = {\n    0: '₀',\n    1: '₁',\n    2: '₂',\n    3: '₃',\n    4: '₄',\n    5: '₅',\n    6: '₆',\n    7: '₇',\n    8: '₈',\n    9: '₉',\n    '(': '₍',\n    ')': '₎',\n    '{': '₍',\n    '}': '₎',\n    '.': ' ',\n    ',': ' ',\n};\n//# sourceMappingURL=subSuperscript.js.map","\"use strict\";\n/**\n * Defines static variables corresponding to the various formatting possibilities\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Format = void 0;\nexports.Format = {\n    SUBSCRIPT: 'subscript',\n    SUPERSCRIPT: 'superscript',\n    SUPERIMPOSE: 'superimpose',\n    TEXT: 'text',\n};\n//# sourceMappingURL=Format.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatCharge = formatCharge;\nfunction formatCharge(charge) {\n    if (charge === 1)\n        return '+';\n    if (charge > 1)\n        return `+${charge}`;\n    if (charge < 0)\n        return String(charge);\n    return '';\n}\n//# sourceMappingURL=formatCharge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.improveLinesForDisplay = improveLinesForDisplay;\nconst Kind_js_1 = require(\"../Kind.js\");\n/**\n * We try to remove useless lines that are not needed for the display and could be confusing\n * for the user\n * @param {object[]} lines\n */\nfunction improveLinesForDisplay(lines) {\n    lines = lines.slice(0);\n    // multipliers by one seems completely useless\n    lines = lines.filter((line) => !(line.kind === Kind_js_1.Kind.MULTIPLIER && line.value === 1));\n    // global surrouding useless parenthesis\n    // (C) -> C, (CH2) -> CH2, ((CH2)) -> CH2, ((CH2)2) -> (CH2)2, (C(CH2)2) -> C(CH2)2\n    // need to count the number of opening parenthesis\n    // and check the minimum number of parenthesis we find\n    let beginCounter = 0;\n    let endCounter = 0;\n    let minCounter = Number.MAX_SAFE_INTEGER;\n    let counter = 0;\n    let begin = true;\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_js_1.Kind.OPENING_PARENTHESIS:\n                if (begin) {\n                    beginCounter++;\n                }\n                counter++;\n                break;\n            case Kind_js_1.Kind.CLOSING_PARENTHESIS:\n                endCounter++;\n                counter--;\n                break;\n            case Kind_js_1.Kind.CHARGE: // seems to me we can still remove parenthesis even if we have some charges\n                break;\n            default:\n                if (counter < minCounter)\n                    minCounter = counter;\n                endCounter = 0;\n                begin = false;\n        }\n    }\n    let nbParenthesisToSuppress = Math.min(minCounter, beginCounter, endCounter);\n    if (nbParenthesisToSuppress > 0) {\n        // need to remove from the beginning and from the end the number of parenthesis\n        // knowing some of the lines could be charges\n        let toSuppress = nbParenthesisToSuppress;\n        let i = 0;\n        while (toSuppress > 0) {\n            if (lines[0].kind === Kind_js_1.Kind.OPENING_PARENTHESIS) {\n                lines.splice(i, 1);\n                toSuppress--;\n            }\n            else {\n                i++;\n            }\n        }\n        toSuppress = nbParenthesisToSuppress;\n        i = lines.length - 1;\n        while (toSuppress > 0) {\n            if (lines[i].kind === Kind_js_1.Kind.CLOSING_PARENTHESIS) {\n                toSuppress--;\n                lines.splice(i, 1);\n            }\n            i--;\n        }\n    }\n    return lines;\n}\n//# sourceMappingURL=improveLinesForDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toDisplay = toDisplay;\nconst Format_1 = require(\"../Format\");\nconst Kind_1 = require(\"../Kind\");\nconst formatCharge_js_1 = require(\"./formatCharge.js\");\nconst improveLinesForDisplay_js_1 = require(\"./improveLinesForDisplay.js\");\n/**\n * Converts an array of mf elements to an array of formatting information\n * @param {object[]} lines of the parse method\n * @returns {{kind: string, value: string}[]}\n */\nfunction toDisplay(lines) {\n    lines = (0, improveLinesForDisplay_js_1.improveLinesForDisplay)(lines);\n    const special = specialCases(lines);\n    if (special)\n        return special;\n    let results = [];\n    let result = {};\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_1.Kind.MULTIPLIER:\n                if (line.value !== 1) {\n                    result = {\n                        kind: Format_1.Format.SUBSCRIPT,\n                        value: String(line.value),\n                    };\n                    results.push(result);\n                }\n                break;\n            case Kind_1.Kind.MULTIPLIER_RANGE:\n                result = {\n                    kind: Format_1.Format.SUBSCRIPT,\n                    value: `${String(line.value.from)}-${line.value.to}`,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.CHARGE:\n                if (result.kind === Format_1.Format.SUBSCRIPT) {\n                    result.kind = Format_1.Format.SUPERIMPOSE;\n                    result.over = (0, formatCharge_js_1.formatCharge)(line.value);\n                    result.under = result.value;\n                    result.value = undefined;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.SUPERSCRIPT,\n                        value: (0, formatCharge_js_1.formatCharge)(line.value),\n                    };\n                    results.push(result);\n                }\n                break;\n            case Kind_1.Kind.ISOTOPE:\n                result = {\n                    kind: Format_1.Format.SUPERSCRIPT,\n                    value: line.value.isotope,\n                };\n                results.push(result);\n                result = {\n                    kind: Format_1.Format.TEXT,\n                    value: line.value.atom,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += line.value.atom;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: line.value.atom,\n                    };\n                    results.push(result);\n                }\n                result = {\n                    kind: Format_1.Format.SUPERSCRIPT,\n                    value: `{${line.value.ratio.join(',')}}`,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.SALT:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += ' • ';\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: ' • ',\n                    };\n                    results.push(result);\n                }\n                break;\n            default:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += line.value;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: line.value,\n                    };\n                    results.push(result);\n                }\n        }\n    }\n    return results;\n}\n/**\n * Some special changes for specific cases\n * @param {} lines\n */\nfunction specialCases(lines) {\n    // (-)\n    if (lines.length === 1 && lines[0].kind === Kind_1.Kind.CHARGE) {\n        const charge = lines[0].value;\n        if (charge === 0)\n            return [];\n        if (charge === 1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: '-e' },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge === -1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: '+e' },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge > 1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: `-${charge}e` },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge < -1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: `+${-charge}e` },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n    }\n    // (-)2, (-)-1, (+)2, (+)-1, (2+)2, (2+)-1, (2-)+1, (2-)-1\n    if (lines.length === 2 &&\n        lines[0].kind === Kind_1.Kind.CHARGE &&\n        lines[1].kind === Kind_1.Kind.MULTIPLIER) {\n        const charge = lines[0].value;\n        const nbElectrons = -lines[1].value * charge;\n        const results = [];\n        if (nbElectrons === 0)\n            return [];\n        if (nbElectrons === 1) {\n            results.push({ kind: Format_1.Format.TEXT, value: '+e' });\n        }\n        if (nbElectrons === -1) {\n            results.push({ kind: Format_1.Format.TEXT, value: '-e' });\n        }\n        if (nbElectrons > 1) {\n            results.push({ kind: Format_1.Format.TEXT, value: `+${nbElectrons}e` });\n        }\n        if (nbElectrons < -1) {\n            results.push({ kind: Format_1.Format.TEXT, value: `${nbElectrons}e` });\n        }\n        results.push({ kind: Format_1.Format.SUPERSCRIPT, value: '-' });\n        return results;\n    }\n    return undefined;\n}\n//# sourceMappingURL=toDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isMF = isMF;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nfunction isMF(mf) {\n    let tmpMF = mf.replaceAll(/[^A-Za-z]/g, '');\n    let parts = tmpMF.replaceAll(/([A-Za-z])(?=[A-Z])/g, '$1 ').split(' ');\n    for (let i = 0; i < parts.length; i++) {\n        if (!chemical_elements_1.elementsObject[parts[i]] && !chemical_groups_1.groupsObject[parts[i]]) {\n            return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=isMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Style = void 0;\nexports.Style = {\n    SUPERIMPOSE: 'flex-direction: column;display: inline-flex;justify-content: center;text-align: left;vertical-align: middle;',\n    SUPERIMPOSE_SUP_SUB: 'line-height: 1; font-size: 70%',\n};\n//# sourceMappingURL=Style.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toHtml = toHtml;\nconst Format_1 = require(\"../Format\");\nconst Style_1 = require(\"../Style\");\nfunction toHtml(lines) {\n    let html = [];\n    for (let line of lines) {\n        switch (line.kind) {\n            case Format_1.Format.SUBSCRIPT:\n                html.push(`<sub>${line.value}</sub>`);\n                break;\n            case Format_1.Format.SUPERSCRIPT:\n                html.push(`<sup>${line.value}</sup>`);\n                break;\n            case Format_1.Format.SUPERIMPOSE:\n                html.push(`<span style=\"${Style_1.Style.SUPERIMPOSE}\">`, `<sup style=\"${Style_1.Style.SUPERIMPOSE_SUP_SUB}\">${line.over}</sup>`, `<sub style=\"${Style_1.Style.SUPERIMPOSE_SUP_SUB}\">${line.under}</sub>`, '</span>');\n                break;\n            default:\n                html.push(line.value);\n        }\n    }\n    return html.join('');\n}\n//# sourceMappingURL=toHtml.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureCase = ensureCase;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst elements = new Set(Object.keys(chemical_elements_1.elementsObject).sort((a, b) => b.length - a.length));\n/**\n * Ensure that the mf has been entered with capital letters and not only lowercase\n * If there is only lowercase we try to capitalize the mf\n * @param {string} mf\n */\nfunction ensureCase(mf) {\n    for (let i = 0; i < mf.length; i++) {\n        // eslint-disable-next-line unicorn/prefer-code-point\n        if (mf.charCodeAt(i) > 64 && mf.charCodeAt(i) < 91) {\n            return mf;\n        }\n    }\n    let parts = mf.replaceAll(/([a-z]*)([^a-z]*)/g, '$1 $2 ').split(/ +/);\n    for (let i = 0; i < parts.length; i++) {\n        if (parts[i].match(/^[a-z]$/)) {\n            parts[i] = parts[i].toUpperCase();\n        }\n        else if (parts[i].match(/^[a-z]+$/)) {\n            let newPart = '';\n            for (let j = 0; j < parts[i].length; j++) {\n                let two = parts[i].slice(j, j + 2);\n                let one = parts[i].charAt(j).toUpperCase();\n                if (['c', 'h', 'o', 'n'].includes(two.charAt(0)) &&\n                    ['h', 'o', 'n'].includes(two.charAt(1))) {\n                    newPart += two.toUpperCase();\n                    j++;\n                }\n                else {\n                    two = two.charAt(0).toUpperCase() + two.charAt(1);\n                    if (elements.has(two)) {\n                        newPart += two;\n                        j++;\n                    }\n                    else if (elements.has(one)) {\n                        newPart += one;\n                    }\n                    else {\n                        return mf;\n                    }\n                }\n            }\n            parts[i] = newPart;\n        }\n    }\n    return parts.join('');\n}\n//# sourceMappingURL=ensureCase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flatten = flatten;\n/**\n * This method will generate all possible molecular formulas\n * from ranges.\n * It should rather be called expand because it expands all the ranges\n * @param parsed\n * @param options\n * @return {string[]}\n */\nfunction flatten(parsed, options = {}) {\n    const { groupIdentical = false, limit = 100000 } = options;\n    if (parsed.length === 0)\n        return [''];\n    let parts = [];\n    let parenthesisLevel = 0;\n    let currentPart;\n    let comments = [];\n    for (const entry of parsed) {\n        if ((entry.kind === 'atom' ||\n            entry.kind === 'charge' ||\n            entry.kind === 'isotope' ||\n            entry.kind === 'openingParenthesis' ||\n            !currentPart) &&\n            parenthesisLevel === 0) {\n            currentPart = {\n                mf: '',\n                min: 1,\n                max: 1,\n            };\n            parts.push(currentPart);\n        }\n        switch (entry.kind) {\n            case 'atom':\n                currentPart.mf += entry.value;\n                break;\n            case 'isotope':\n                currentPart.mf += `[${entry.value.isotope}${entry.value.atom}]`;\n                break;\n            case 'multiplier':\n                currentPart.mf += entry.value;\n                break;\n            case 'multiplierRange':\n                if (parenthesisLevel !== 0) {\n                    throw new Error('Range definition inside parenthesis is not allowed.');\n                }\n                currentPart.min = entry.value.from;\n                currentPart.max = entry.value.to;\n                break;\n            case 'openingParenthesis':\n                parenthesisLevel++;\n                currentPart.mf += entry.value;\n                break;\n            case 'charge':\n                if (entry.value === 1) {\n                    currentPart.mf += '+';\n                }\n                else if (entry.value > 1) {\n                    currentPart.mf += `(+${entry.value})`;\n                }\n                else if (entry.value < 0) {\n                    currentPart.mf += `(${entry.value})`;\n                }\n                break;\n            case 'closingParenthesis':\n                parenthesisLevel--;\n                currentPart.mf += entry.value;\n                break;\n            case 'comment':\n                comments.push(entry.value);\n                break;\n            case 'text':\n                break;\n            default:\n                throw new Error(`Could not flatten the parsed MF. Unknown kind: ${entry.kind}`);\n        }\n    }\n    if (groupIdentical) {\n        parts = optimizeRanges(parts);\n    }\n    const mfs = createMFs(parts, comments.join(' '), limit);\n    return mfs;\n}\n/**\n * If we have many times the same mf we can combine them\n * This should only be applied if there are acutaly some ranges\n */\nfunction optimizeRanges(parts) {\n    let newParts = [];\n    let mfsObject = {};\n    let hasRange = false;\n    for (const mf of parts) {\n        if (mf.min !== mf.max) {\n            hasRange = true;\n            break;\n        }\n    }\n    if (!hasRange)\n        return parts;\n    for (const mf of parts) {\n        if (!mfsObject[mf.mf]) {\n            mfsObject[mf.mf] = {\n                mf: mf.mf,\n                min: mf.min,\n                max: mf.max,\n            };\n            newParts.push(mfsObject[mf.mf]);\n        }\n        else {\n            mfsObject[mf.mf].min = mfsObject[mf.mf].min + mf.min;\n            mfsObject[mf.mf].max = mfsObject[mf.mf].max + mf.max;\n        }\n    }\n    return newParts;\n}\nfunction createMFs(parts, comment, limit) {\n    const currents = new Array(parts.length);\n    for (let i = 0; i < currents.length; i++) {\n        currents[i] = parts[i].min;\n    }\n    /** @type {string[]} */\n    const mfs = [];\n    let position = 0;\n    while (position < currents.length) {\n        if (currents[position] < parts[position].max) {\n            mfs.push(getMF(parts, currents, comment));\n            currents[position]++;\n            for (let i = 0; i < position; i++) {\n                currents[i] = parts[i].min;\n            }\n            position = 0;\n        }\n        else {\n            position++;\n        }\n        if (mfs.length > limit) {\n            throw new Error(`MF.flatten generates too many fragments (over ${limit})`);\n        }\n    }\n    mfs.push(getMF(parts, currents, comment));\n    return mfs;\n}\nfunction getMF(parts, currents, comment) {\n    let mf = '';\n    for (let i = 0; i < parts.length; i++) {\n        if (currents[i] === 0) {\n            continue;\n        }\n        mf += parts[i].mf;\n        if (currents[i] !== 1) {\n            mf += currents[i];\n        }\n    }\n    if (comment)\n        mf += `$${comment}`;\n    return mf;\n}\n//# sourceMappingURL=flatten.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIsotopeRatioInfo = getIsotopeRatioInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nfunction getIsotopeRatioInfo(value) {\n    let result = { mass: 0, monoisotopicMass: 0 };\n    let element = chemical_elements_1.elementsAndStableIsotopesObject[value.atom];\n    if (!element)\n        throw new Error(`Element not found: ${value.atom}`);\n    let isotopesArray = element.isotopes;\n    let ratios = normalize(value.ratio);\n    let max = Math.max(...ratios);\n    if (ratios.length > isotopesArray.length) {\n        throw new Error(`the number of specified ratios is bigger that the number of stable isotopes: ${value.atom}`);\n    }\n    for (let i = 0; i < ratios.length; i++) {\n        result.mass += ratios[i] * isotopesArray[i].mass;\n        if (max === ratios[i] && result.monoisotopicMass === 0) {\n            result.monoisotopicMass = isotopesArray[i].mass;\n        }\n    }\n    return result;\n}\nfunction normalize(array) {\n    let sum = array.reduce((prev, current) => prev + current, 0);\n    return array.map((a) => a / sum);\n}\n//# sourceMappingURL=getIsotopeRatioInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEA = getEA;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\nconst getIsotopeRatioInfo_1 = require(\"./getIsotopeRatioInfo\");\n/**\n * @param {*} parts\n */\nfunction getEA(parts) {\n    let results = {};\n    for (let part of parts) {\n        for (let line of part) {\n            switch (line.kind) {\n                case Kind_1.Kind.ISOTOPE: {\n                    let isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\n                    if (!isotope) {\n                        throw new Error(`Unknown isotope: ${line.value.isotope}${line.value.atom}`);\n                    }\n                    addMass(results, line.value.atom, isotope.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.ISOTOPE_RATIO: {\n                    let isotopeRatioInfo = (0, getIsotopeRatioInfo_1.getIsotopeRatioInfo)(line.value);\n                    addMass(results, line.value.atom, isotopeRatioInfo.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.ATOM: {\n                    let element = chemical_elements_1.elementsObject[line.value];\n                    if (!element) {\n                        element = chemical_groups_1.groupsObject[line.value];\n                        if (!element)\n                            throw new Error(`Unknown element: ${line.value}`);\n                        // need to explode group ????\n                    }\n                    addMass(results, line.value, element.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.CHARGE:\n                    break;\n                default:\n                    throw new Error('partToMF unhandled Kind: ', line.kind);\n            }\n        }\n    }\n    let eas = [];\n    let sum = 0;\n    for (let key in results) {\n        sum += results[key];\n        eas.push({\n            element: key,\n            mass: results[key],\n        });\n    }\n    for (const ea of eas) {\n        ea.ratio = ea.mass / sum;\n    }\n    return eas;\n}\nfunction addMass(results, atom, mass) {\n    if (!results[atom])\n        results[atom] = 0;\n    results[atom] += mass;\n}\n//# sourceMappingURL=getEA.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getElements = getElements;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst Kind_1 = require(\"../Kind\");\n/**\n * @param {*} parts\n */\nfunction getElements(parts) {\n    const elements = [];\n    for (const part of parts) {\n        for (const line of part) {\n            let number = line.multiplier;\n            switch (line.kind) {\n                case Kind_1.Kind.ATOM: {\n                    let symbol = line.value;\n                    let element = chemical_elements_1.elementsObject[symbol];\n                    if (!element) {\n                        throw new Error(`element unknown: ${symbol} - ${line}`);\n                    }\n                    addElement(elements, { symbol, number });\n                    break;\n                }\n                case Kind_1.Kind.ISOTOPE: {\n                    let element = chemical_elements_1.elementsAndIsotopesObject[line.value.atom];\n                    if (!element) {\n                        throw new Error(`element unknown: ${part.value.atom} - ${line}`);\n                    }\n                    let isotope = element.isotopes.find((a) => a.nominal === line.value.isotope);\n                    if (!isotope) {\n                        throw new Error(`isotope unknown: ${line.value.isotope} - ${line}`);\n                    }\n                    addElement(elements, {\n                        symbol: line.value.atom,\n                        number,\n                        isotope: line.value.isotope,\n                    });\n                    break;\n                }\n                default:\n                    throw new Error(`unknown type: ${line.kind}`);\n            }\n        }\n    }\n    return elements;\n}\nfunction addElement(elements, newElement) {\n    for (let element of elements) {\n        if (element.symbol === newElement.symbol &&\n            element.isotope === newElement.isotope) {\n            element.number += newElement.number;\n            return;\n        }\n    }\n    elements.push(newElement);\n}\n//# sourceMappingURL=getElements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getNumberOfIsotopologues = getNumberOfIsotopologues;\nconst chemical_elements_1 = require(\"chemical-elements\");\n/**\n * Returns the theoretical number of isotopologues for a given MF based on stable isotopes for each element.\n * This method will not take into account possible non natural isotopic composition (e.g. 13C enrichment)\n * If one element does not have any stable isotope, the result will be 0.\n * @param atoms\n * @returns\n */\nfunction getNumberOfIsotopologues(atoms) {\n    if (Object.keys(atoms).length === 0) {\n        return 0;\n    }\n    let result = 1;\n    for (const atom in atoms) {\n        const nbIsotopes = chemical_elements_1.elementsAndStableIsotopesObject[atom]?.isotopes.length;\n        if (!nbIsotopes) {\n            return 0;\n        }\n        const nbAtoms = atoms[atom];\n        result *= getNbCombinationsPerAtom(nbAtoms, nbIsotopes);\n    }\n    return result;\n}\n/**\n * Returns the number of isotopologues for one specific atom\n *\n * @param nbAtoms\n * @param nbIsotopes\n * @returns\n */\nfunction getNbCombinationsPerAtom(nbAtoms, nbIsotopes) {\n    let result = 1;\n    for (let i = nbAtoms + 1; i < nbAtoms + nbIsotopes; i++) {\n        result *= i;\n    }\n    for (let i = 2; i < nbIsotopes; i++) {\n        result /= i;\n    }\n    return result;\n}\n//# sourceMappingURL=getNumberOfIsotopologues.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partToAtoms = partToAtoms;\nconst Kind_js_1 = require(\"../Kind.js\");\n/** @typedef {import('./partToAtoms.types').AtomsMap} AtomsMap */\n/**\n * Convert a MF part to a map of atoms\n * This procedure will suppress the isotopes !\n * This is mainly used to make queries\n * @returns {AtomsMap}\n */\nfunction partToAtoms(part) {\n    /** @type {AtomsMap} */\n    const atoms = {};\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_js_1.Kind.ISOTOPE:\n                if (!atoms[line.value.atom])\n                    atoms[line.value.atom] = 0;\n                atoms[line.value.atom] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.ISOTOPE_RATIO:\n                if (!atoms[line.value.atom])\n                    atoms[line.value.atom] = 0;\n                atoms[line.value.atom] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.ATOM:\n                if (!atoms[line.value])\n                    atoms[line.value] = 0;\n                atoms[line.value] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.CHARGE:\n                break;\n            case Kind_js_1.Kind.ANCHOR:\n                break;\n            default:\n                throw new Error('partToMF unhandled Kind: ', line.kind);\n        }\n    }\n    return atoms;\n}\n//# sourceMappingURL=partToAtoms.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partToMF = partToMF;\nconst Kind_1 = require(\"../Kind\");\nfunction partToMF(part, options = {}) {\n    let mf = [];\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_1.Kind.ISOTOPE:\n                if (line.multiplier !== 0) {\n                    mf.push(`[${line.value.isotope}${line.value.atom}]${line.multiplier !== 1 ? line.multiplier : ''}`);\n                }\n                break;\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                if (line.multiplier !== 0) {\n                    mf.push(`${line.value.atom}{${line.value.ratio.join(',')}}${line.multiplier !== 1 ? line.multiplier : ''}`);\n                }\n                break;\n            case Kind_1.Kind.ATOM:\n                if (line.multiplier !== 0) {\n                    mf.push(line.value + (line.multiplier !== 1 ? line.multiplier : ''));\n                }\n                break;\n            case Kind_1.Kind.CHARGE:\n                if (line.value === 0 || options.neutral)\n                    break;\n                mf.push(`(${line.value > 0 ? `+${line.value}` : line.value})`);\n                break;\n            default:\n        }\n    }\n    return mf.join('');\n}\n//# sourceMappingURL=partToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInfoInternal = getInfoInternal;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\nconst getIsotopeRatioInfo_1 = require(\"./getIsotopeRatioInfo\");\nconst getNumberOfIsotopologues_1 = require(\"./getNumberOfIsotopologues\");\nconst partToAtoms_1 = require(\"./partToAtoms\");\nconst partToMF_1 = require(\"./partToMF\");\n/** @typedef {import('./getInfo.types').MFInfo} MFInfo */\n/** @typedef {import('./getInfo.types').MFInfoWithParts} MFInfoWithParts */\n/**\n *\n * @param {*} parts\n * @param {*} [options={}]\n * @returns {object|MFInfo|MFInfoWithParts}\n */\nfunction getInfoInternal(parts, options = {}) {\n    let { customUnsaturations = {}, emFieldName = 'monoisotopicMass', msemFieldName = 'observedMonoisotopicMass', } = options;\n    if (parts.length === 0)\n        return {};\n    if (parts.length === 1) {\n        let oneResult = getProcessedPart(parts[0], {\n            customUnsaturations,\n            emFieldName,\n            msemFieldName,\n        });\n        oneResult.nbIsotopologues = (0, getNumberOfIsotopologues_1.getNumberOfIsotopologues)(oneResult.atoms);\n        return oneResult;\n    }\n    let result = { parts: [] };\n    for (let part of parts) {\n        result.parts.push(getProcessedPart(part, {\n            customUnsaturations,\n            emFieldName,\n            msemFieldName,\n        }));\n    }\n    result[emFieldName] = 0;\n    result.mass = 0;\n    result.charge = 0;\n    result.unsaturation = 0;\n    result.atoms = {};\n    result.mf = result.parts.map((a) => a.mf).join('.');\n    for (const part of result.parts) {\n        result.mass += part.mass;\n        result[emFieldName] += part[emFieldName];\n        result.charge += part.charge;\n        result.unsaturation += part.unsaturation;\n        for (const atom in part.atoms) {\n            if (!result.atoms[atom]) {\n                result.atoms[atom] = 0;\n            }\n            result.atoms[atom] += part.atoms[atom];\n        }\n    }\n    result.nbIsotopologues = (0, getNumberOfIsotopologues_1.getNumberOfIsotopologues)(result.atoms);\n    return result;\n}\nfunction getProcessedPart(part, options) {\n    let { customUnsaturations, emFieldName, msemFieldName } = options;\n    /** @type {MFInfo} */\n    let currentPart = {\n        mass: 0,\n        charge: 0,\n        mf: '',\n        atoms: (0, partToAtoms_1.partToAtoms)(part),\n    };\n    currentPart[emFieldName] = 0;\n    let unsaturation = 0;\n    let validUnsaturation = true;\n    currentPart.mf = (0, partToMF_1.partToMF)(part);\n    for (let line of part) {\n        let currentElement = '';\n        switch (line.kind) {\n            case Kind_1.Kind.ATOM: {\n                currentElement = line.value;\n                let element = chemical_elements_1.elementsAndIsotopesObject[line.value];\n                // todo should we have a kind GROUP ?\n                if (!element) {\n                    element = chemical_groups_1.groupsObject[line.value];\n                    if (!element)\n                        throw new Error(`Unknown element: ${line.value}`);\n                    if (!customUnsaturations[line.value]) {\n                        customUnsaturations[line.value] = element.unsaturation;\n                    }\n                }\n                if (!element)\n                    throw new Error(`Unknown element: ${line.value}`);\n                currentPart[emFieldName] += element.monoisotopicMass * line.multiplier;\n                currentPart.mass += element.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE: {\n                currentElement = line.value.atom;\n                let isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\n                if (!isotope) {\n                    throw new Error(`Unknown isotope: ${line.value.isotope}${line.value.atom}`);\n                }\n                currentPart[emFieldName] += isotope.mass * line.multiplier;\n                currentPart.mass += isotope.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE_RATIO: {\n                currentElement = line.value.atom;\n                let isotopeRatioInfo = (0, getIsotopeRatioInfo_1.getIsotopeRatioInfo)(line.value);\n                currentPart[emFieldName] +=\n                    isotopeRatioInfo[emFieldName] * line.multiplier;\n                currentPart.mass += isotopeRatioInfo.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.CHARGE:\n                currentPart.charge = line.value;\n                if (validUnsaturation) {\n                    unsaturation -= line.value;\n                }\n                break;\n            default:\n                throw new Error('Unimplemented Kind in getInfo', line.kind);\n        }\n        if (currentElement) {\n            if (customUnsaturations[currentElement] !== undefined) {\n                unsaturation += customUnsaturations[currentElement] * line.multiplier;\n            }\n            else if (chemical_elements_1.unsaturationsObject[currentElement] !== undefined) {\n                unsaturation += chemical_elements_1.unsaturationsObject[currentElement] * line.multiplier;\n            }\n            else {\n                validUnsaturation = false;\n            }\n        }\n    }\n    // need to calculate the observedMonoisotopicMass\n    if (currentPart.charge) {\n        currentPart[msemFieldName] =\n            (currentPart[emFieldName] - currentPart.charge * chemical_elements_1.ELECTRON_MASS) /\n                Math.abs(currentPart.charge);\n    }\n    if (validUnsaturation) {\n        currentPart.unsaturation = unsaturation / 2 + 1;\n    }\n    return currentPart;\n}\n//# sourceMappingURL=getInfoInternal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIsotopesInfo = getIsotopesInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst Kind_1 = require(\"../Kind\");\n/** @typedef {import('./getIsotopesInfo.types').IsotopesInfo} IsotopesInfo\n\n/**\n *\n * @param {*} parts\n * @returns {[]|IsotopesInfo}\n */\nfunction getIsotopesInfo(parts) {\n    if (parts.length === 0)\n        return [];\n    if (parts.length > 1) {\n        throw new Error('getIsotopesInfo can not be applied on multipart MF');\n    }\n    return getProcessedPart(parts[0]);\n}\n/**\n * @returns {IsotopesInfo}\n */\nfunction getProcessedPart(part) {\n    /** @type {IsotopesInfo} */\n    let result = {\n        charge: 0,\n        isotopes: [],\n    };\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_1.Kind.ISOTOPE: {\n                let isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\n                if (!isotope) {\n                    throw new Error('unknown isotope:', line.value.atom, line.value.isotope);\n                }\n                result.isotopes.push({\n                    atom: line.value.atom,\n                    number: line.multiplier,\n                    distribution: [{ x: isotope.mass, y: 1 }],\n                });\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                {\n                    let element = chemical_elements_1.elementsAndStableIsotopesObject[line.value.atom];\n                    if (!element)\n                        throw new Error('unknown element:', line.value);\n                    let distribution = getDistribution(element.isotopes, line.value.ratio);\n                    result.isotopes.push({\n                        atom: line.value.atom,\n                        number: line.multiplier,\n                        distribution,\n                    });\n                }\n                break;\n            case Kind_1.Kind.ATOM: {\n                let element = chemical_elements_1.elementsAndStableIsotopesObject[line.value];\n                if (!element)\n                    throw new Error('unknown element:', line.value);\n                result.isotopes.push({\n                    atom: line.value,\n                    number: line.multiplier,\n                    distribution: element.isotopes.map((e) => ({\n                        x: e.mass,\n                        y: e.abundance,\n                    })),\n                });\n                break;\n            }\n            case Kind_1.Kind.CHARGE:\n                result.charge += line.value;\n                break;\n            default:\n                throw new Error('partToMF unhandled Kind: ', line.kind);\n        }\n    }\n    return result;\n}\nfunction getDistribution(isotopesArray, ratio) {\n    let ratios = normalize(ratio);\n    let result = [];\n    if (ratios.length > isotopesArray.length) {\n        throw new Error(`the number of specified ratios is bigger that the number of stable isotopes: ${chemical_elements_1.isotopesObject}`);\n    }\n    for (let i = 0; i < ratios.length; i++) {\n        result.push({\n            x: isotopesArray[i].mass,\n            y: ratios[i],\n        });\n    }\n    return result;\n}\nfunction normalize(array) {\n    let sum = array.reduce((prev, current) => prev + current, 0);\n    return array.map((a) => a / sum);\n}\n//# sourceMappingURL=getIsotopesInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partsToDisplay = partsToDisplay;\nconst Kind_1 = require(\"../Kind\");\nconst toDisplay_js_1 = require(\"./toDisplay.js\");\n/**\n * Converts an array of mf elements to an array of formatting information\n * @param {Array<Object>} result of the parse method\n */\nfunction partsToDisplay(parts) {\n    let lines = [];\n    for (let part of parts) {\n        if (lines.length > 0)\n            lines.push({ kind: Kind_1.Kind.SALT, value: '•' });\n        for (let partLine of part) {\n            lines.push(partLine);\n            if (partLine.multiplier) {\n                lines.push({\n                    kind: Kind_1.Kind.MULTIPLIER,\n                    value: partLine.multiplier,\n                });\n            }\n        }\n    }\n    return (0, toDisplay_js_1.toDisplay)(lines);\n}\n//# sourceMappingURL=partsToDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partsToMF = partsToMF;\nconst partToMF_1 = require(\"./partToMF\");\nfunction partsToMF(parts, options) {\n    let mf = [];\n    for (let part of parts) {\n        mf.push((0, partToMF_1.partToMF)(part, options));\n    }\n    return mf.join(' . ');\n}\n//# sourceMappingURL=partsToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toParts = toParts;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\n/**\n *\n * @param {*} lines\n * @param {object} [options={}]\n * @param {boolean} [options.expand=true] - Should we expand the groupsObject\n */\nfunction toParts(lines, options = {}) {\n    const { expand: shouldExpandgroupsObject = true } = options;\n    let parts = [];\n    let currentPart = createNewPart();\n    let previousKind = Kind_1.Kind.BEGIN;\n    parts.push(currentPart);\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_1.Kind.ATOM:\n            case Kind_1.Kind.ISOTOPE_RATIO:\n            case Kind_1.Kind.ISOTOPE:\n            case Kind_1.Kind.CHARGE:\n                currentPart.lines.push({ ...line, multiplier: 1 });\n                break;\n            case Kind_1.Kind.OPENING_PARENTHESIS:\n                openingParenthesis(currentPart);\n                break;\n            case Kind_1.Kind.CLOSING_PARENTHESIS:\n                closingParenthesis(currentPart);\n                break;\n            case Kind_1.Kind.PRE_MULTIPLIER:\n                preMultiplier(currentPart, line);\n                break;\n            case Kind_1.Kind.MULTIPLIER:\n                postMultiplier(currentPart, line.value, previousKind);\n                break;\n            case Kind_1.Kind.SALT:\n                globalPartMultiplier(currentPart);\n                currentPart = createNewPart();\n                parts.push(currentPart);\n                break;\n            case Kind_1.Kind.ANCHOR: // we ignore anchors to create the parts and canonized MF\n                break;\n            case Kind_1.Kind.COMMENT: // we ignore comments to create the parts and canonized MF\n                break;\n            case Kind_1.Kind.TEXT:\n                break;\n            default:\n                throw new Error(`Can not process mf having: ${line.kind}`);\n        }\n        previousKind = line.kind;\n    }\n    globalPartMultiplier(currentPart);\n    if (shouldExpandgroupsObject)\n        expandgroupsObject(parts);\n    return combineAtomsIsotopesCharges(parts);\n}\nfunction createNewPart() {\n    let currentMultiplier = { value: 1, fromIndex: 0 };\n    return { lines: [], multipliers: [currentMultiplier], currentMultiplier };\n}\nfunction openingParenthesis(currentPart) {\n    currentPart.currentMultiplier = {\n        value: 1,\n        fromIndex: currentPart.lines.length,\n    };\n    currentPart.multipliers.push(currentPart.currentMultiplier);\n}\nfunction closingParenthesis(currentPart) {\n    currentPart.currentMultiplier = currentPart.multipliers.pop();\n    if (currentPart.currentMultiplier !== 1) {\n        for (let i = currentPart.currentMultiplier.fromIndex; i < currentPart.lines.length; i++) {\n            currentPart.lines[i].multiplier *= currentPart.currentMultiplier.value;\n        }\n    }\n}\nfunction preMultiplier(currentPart, line) {\n    currentPart.currentMultiplier.value *= line.value;\n}\nfunction globalPartMultiplier(currentPart) {\n    for (let i = currentPart.multipliers[0].fromIndex; i < currentPart.lines.length; i++) {\n        currentPart.lines[i].multiplier *= currentPart.multipliers[0].value;\n    }\n}\nfunction postMultiplier(currentPart, value, previousKind) {\n    if (previousKind === Kind_1.Kind.CLOSING_PARENTHESIS) {\n        // need to apply to everything till the previous parenthesis\n        for (let i = currentPart.currentMultiplier.fromIndex; i < currentPart.lines.length; i++) {\n            currentPart.lines[i].multiplier *= value;\n        }\n    }\n    else {\n        // just applies to the previous element\n        currentPart.lines.at(-1).multiplier *= value;\n    }\n}\nfunction expandgroupsObject(parts) {\n    for (let part of parts) {\n        let expanded = false;\n        for (let i = 0; i < part.lines.length; i++) {\n            let line = part.lines[i];\n            if (line.kind === Kind_1.Kind.ATOM) {\n                let group = chemical_groups_1.groupsObject[line.value];\n                if (group) {\n                    expanded = true;\n                    for (let element of group.elements) {\n                        if (element.isotope) {\n                            part.lines.push({\n                                kind: 'isotope',\n                                value: { atom: element.symbol, isotope: element.isotope },\n                                multiplier: line.multiplier * element.number,\n                            });\n                        }\n                        else {\n                            part.lines.push({\n                                kind: 'atom',\n                                value: element.symbol,\n                                multiplier: line.multiplier * element.number,\n                            });\n                        }\n                    }\n                    part.lines[i] = undefined;\n                }\n            }\n        }\n        if (expanded)\n            part.lines = part.lines.filter(Boolean);\n    }\n}\nfunction combineAtomsIsotopesCharges(parts) {\n    let results = [];\n    for (let part of parts) {\n        let result = [];\n        results.push(result);\n        calculateAndSortKeys(part);\n        let currentKey = '';\n        for (let key of part.keys) {\n            if (key.key === Kind_1.Kind.CHARGE) {\n                if (currentKey !== key.key) {\n                    result.push({\n                        kind: Kind_1.Kind.CHARGE,\n                        value: key.value.value * key.value.multiplier,\n                    });\n                }\n                else {\n                    result.at(-1).value += key.value.value * key.value.multiplier;\n                }\n            }\n            else if (currentKey !== key.key) {\n                result.push(key.value);\n            }\n            else {\n                result.at(-1).multiplier += key.value.multiplier;\n            }\n            currentKey = key.key;\n        }\n        result.sort((a, b) => {\n            if (a.kind === Kind_1.Kind.CHARGE)\n                return 1;\n            if (b.kind === Kind_1.Kind.CHARGE)\n                return -1;\n            let atomA = a.kind === Kind_1.Kind.ATOM ? a.value : a.value.atom;\n            let atomB = b.kind === Kind_1.Kind.ATOM ? b.value : b.value.atom;\n            if (atomA !== atomB)\n                return (0, atom_sorter_1.atomSorter)(atomA, atomB);\n            // same atome but some isotopes ...\n            if (a.kind === Kind_1.Kind.ATOM)\n                return -1;\n            if (b.kind === Kind_1.Kind.ATOM)\n                return 1;\n            if (a.kind === Kind_1.Kind.ISOTOPE)\n                return -1;\n            if (b.kind === Kind_1.Kind.ISOTOPE)\n                return 1;\n            if (a.kind === Kind_1.Kind.ISOTOPE_RATIO)\n                return -1;\n            if (b.kind === Kind_1.Kind.ISOTOPE_RATIO)\n                return 1;\n            return 0;\n        });\n    }\n    return results;\n}\nfunction calculateAndSortKeys(part) {\n    part.keys = [];\n    for (let line of part.lines) {\n        part.keys.push({ key: getKey(line), value: line });\n    }\n    part.keys.sort((a, b) => stringComparator(a.key, b.key));\n}\nfunction getKey(line) {\n    let key = [line.kind];\n    switch (line.kind) {\n        case Kind_1.Kind.CHARGE:\n            break;\n        default:\n            if (typeof line.value === 'string') {\n                key.push(line.value);\n            }\n            else {\n                for (let prop of Object.keys(line.value).sort()) {\n                    key.push(line.value[prop]);\n                }\n            }\n    }\n    return key.join('-');\n}\nfunction stringComparator(a, b) {\n    if (a < b)\n        return -1;\n    if (a > b)\n        return 1;\n    return 0;\n}\n//# sourceMappingURL=toParts.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toText = toText;\nconst Format_1 = require(\"../Format\");\nconst subSuperscript_1 = require(\"./subSuperscript\");\nfunction toText(lines) {\n    let text = [];\n    for (let line of lines) {\n        switch (line.kind) {\n            case Format_1.Format.SUBSCRIPT:\n                {\n                    const value = String(line.value);\n                    for (let i = 0; i < value.length; i++) {\n                        const char = value[i];\n                        if (subSuperscript_1.subscript[char]) {\n                            text.push(subSuperscript_1.subscript[char]);\n                        }\n                        else {\n                            throw new Error(`Subscript problem with: ${char}`);\n                        }\n                    }\n                }\n                break;\n            case Format_1.Format.SUPERSCRIPT: {\n                const value = String(line.value);\n                for (let i = 0; i < value.length; i++) {\n                    const char = value[i];\n                    if (subSuperscript_1.superscript[char]) {\n                        text.push(subSuperscript_1.superscript[char]);\n                    }\n                    else {\n                        throw new Error(`Superscript problem with: ${char}`);\n                    }\n                }\n                break;\n            }\n            case Format_1.Format.SUPERIMPOSE: {\n                const under = String(line.under);\n                for (let i = 0; i < under.length; i++) {\n                    const char = under[i];\n                    if (subSuperscript_1.subscript[char]) {\n                        text.push(subSuperscript_1.subscript[char]);\n                    }\n                    else {\n                        throw new Error(`Subscript problem with: ${char}`);\n                    }\n                }\n                const over = String(line.over);\n                for (let i = 0; i < over.length; i++) {\n                    const char = over[i];\n                    if (subSuperscript_1.superscript[char]) {\n                        text.push(subSuperscript_1.superscript[char]);\n                    }\n                    else {\n                        throw new Error(`Superscript problem with: ${char}`);\n                    }\n                }\n                break;\n            }\n            default:\n                text.push(line.value);\n        }\n    }\n    return text.join('');\n}\n//# sourceMappingURL=toText.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MFInternal = void 0;\nconst ensureCase_1 = require(\"./ensureCase\");\nconst parse_1 = require(\"./parse\");\nconst flatten_1 = require(\"./util/flatten\");\nconst getEA_1 = require(\"./util/getEA\");\nconst getElements_1 = require(\"./util/getElements\");\nconst getInfo_1 = require(\"./util/getInfo\");\nconst getIsotopesInfo_1 = require(\"./util/getIsotopesInfo\");\nconst partsToDisplay_1 = require(\"./util/partsToDisplay\");\nconst partsToMF_1 = require(\"./util/partsToMF\");\nconst toDisplay_1 = require(\"./util/toDisplay\");\nconst toHtml_1 = require(\"./util/toHtml\");\nconst toParts_1 = require(\"./util/toParts\");\nconst toText_1 = require(\"./util/toText\");\n/** @typedef {import('./util/getIsotopesInfo.types').IsotopesInfo} IsotopesInfo */\n/** @typedef {import('./util/getInfo.types').MFInfo} MFInfo */\n/** @typedef {import('./util/getInfo.types').MFInfoWithParts} MFInfoWithParts */\n/**\n * Class allowing to deal with molecular formula and derived information\n */\nclass MFInternal {\n    constructor(mf, options = {}) {\n        if (options.ensureCase) {\n            mf = (0, ensureCase_1.ensureCase)(mf);\n        }\n        this.parsed = (0, parse_1.parse)(mf);\n        this.cache = {};\n    }\n    /**\n     * Returns an array of objects with kind and value that can be used to easily\n     * display the molecular formula.\n     * @returns {{kind: string, value: string}[]}\n     */\n    toDisplay() {\n        if (!this.cache.displayed)\n            this.cache.displayed = (0, toDisplay_1.toDisplay)(this.parsed);\n        return this.cache.displayed;\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript in HTML.\n     * @returns {string}\n     */\n    toHtml() {\n        if (!this.cache.html) {\n            this.toDisplay();\n            this.cache.html = (0, toHtml_1.toHtml)(this.cache.displayed);\n        }\n        return this.cache.html;\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript\n     * using Unicode characters. This can not be parsed anymore so kind of dead end ...\n     * @returns {string}\n     */\n    toText() {\n        if (!this.cache.text) {\n            this.toDisplay();\n            this.cache.text = (0, toText_1.toText)(this.cache.displayed);\n        }\n        return this.cache.text;\n    }\n    /**\n     * Similar to toText but returns a canonic string in which the atoms are sorted using the Hill system\n     * @returns {string}\n     */\n    toCanonicText() {\n        if (!this.cache.canonicText) {\n            this.cache.canonicText = new MFInternal(this.toMF()).toText();\n        }\n        return this.cache.canonicText;\n    }\n    toParts(options) {\n        if (options) {\n            return (0, toParts_1.toParts)(this.parsed, options);\n        }\n        // we don't want to cache the parts if we are using options\n        if (!this.cache.parts) {\n            this.cache.parts = (0, toParts_1.toParts)(this.parsed, options);\n        }\n        return this.cache.parts;\n    }\n    /**\n     * Returns an object with the global MF, global charge, monoisotopic mass and mass\n     * as well as the same information for all the parts\n     * @param {object} [options={}] options\n     * @param {object} [options.customUnsaturations={}] custom unsaturations\n     * @param {string} [options.emFieldName='monoisotopicMass'] name of the monoisotopic mass field\n     * @param {string} [options.msemFieldName='observedMonoisotopicMass'] name of the observed monoisotopic mass field\n     * @returns {MFInfo|MFInfoWithParts}\n     */\n    getInfo(options = {}) {\n        if (!this.cache.info) {\n            this.toParts();\n            this.cache.info = (0, getInfo_1.getInfo)(this.cache.parts, options);\n        }\n        return this.cache.info;\n    }\n    /**\n     * Returns an object with the elemental analysis\n     * @returns {*[]}\n     */\n    getEA() {\n        if (!this.cache.ea) {\n            this.toParts();\n            this.cache.ea = (0, getEA_1.getEA)(this.cache.parts);\n        }\n        return this.cache.ea;\n    }\n    /**\n     * Get the different elements for each part\n     * @returns {*[]}\n     */\n    getElements() {\n        if (!this.cache.elements) {\n            this.toParts();\n            this.cache.elements = (0, getElements_1.getElements)(this.cache.parts);\n        }\n        return this.cache.elements;\n    }\n    /**\n     * Returns an array with each atom and isotopic composition\n     * @returns {IsotopesInfo}\n     */\n    getIsotopesInfo(options = {}) {\n        if (!this.cache.isotopesInfo) {\n            this.toParts();\n            this.cache.isotopesInfo = (0, getIsotopesInfo_1.getIsotopesInfo)(this.cache.parts, options);\n        }\n        return this.cache.isotopesInfo;\n    }\n    /**\n     * Get a canonized MF\n     * @returns {string}\n     */\n    toMF() {\n        if (!this.cache.mf) {\n            this.toParts();\n            this.cache.mf = (0, partsToMF_1.partsToMF)(this.cache.parts);\n        }\n        return this.cache.mf;\n    }\n    /**\n     * Get a canonized MF\n     * @returns {string}\n     */\n    toNeutralMF() {\n        if (!this.cache.neutralMF) {\n            this.toParts();\n            this.cache.neutralMF = (0, partsToMF_1.partsToMF)(this.cache.parts, { neutral: true });\n        }\n        return this.cache.neutralMF;\n    }\n    canonize() {\n        this.toParts();\n        this.cache.displayed = (0, partsToDisplay_1.partsToDisplay)(this.cache.parts);\n        this.cache.html = undefined;\n    }\n    flatten(options) {\n        return (0, flatten_1.flatten)(this.parsed, options);\n    }\n}\nexports.MFInternal = MFInternal;\n//# sourceMappingURL=MFInternal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MF = void 0;\nconst MFInternal_1 = require(\"./MFInternal\");\nclass MF {\n    internal;\n    constructor(mf, options = {}) {\n        this.internal = new MFInternal_1.MFInternal(mf, options);\n    }\n    /**\n     * Returns an array of objects with kind and value that can be used to easily\n     * display the molecular formula.\n     */\n    toDisplay() {\n        return this.internal.toDisplay();\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript in HTML.\n     */\n    toHtml() {\n        return this.internal.toHtml();\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript\n     * using Unicode characters. This can not be parsed anymore so kind of dead end ...\n     */\n    toText() {\n        return this.internal.toText();\n    }\n    /**\n     * Similar to toText but returns a canonic string in which the atoms are sorted using the Hill system\n     */\n    toCanonicText() {\n        return this.internal.toCanonicText();\n    }\n    toParts(options) {\n        return this.internal.toParts(options);\n    }\n    /**\n     * Returns an object with the global MF, global charge, monoisotopic mass and mass\n     * as well as the same information for all the parts\n     */\n    getInfo(options) {\n        return this.internal.getInfo(options);\n    }\n    /**\n     * Returns an object with the elemental analysis\n     */\n    getEA() {\n        return this.internal.getEA();\n    }\n    /**\n     * Get the different elements for each part\n     */\n    getElements() {\n        return this.internal.getElements();\n    }\n    /**\n     * Returns an array with each atom and isotopic composition\n     */\n    getIsotopesInfo(options = {}) {\n        return this.internal.getIsotopesInfo(options);\n    }\n    /**\n     * Get a canonized parsable Molecule Formula\n     */\n    toMF() {\n        return this.internal.toMF();\n    }\n    /**\n     * Get a canonized MF\n     */\n    toNeutralMF() {\n        return this.internal.toNeutralMF();\n    }\n    canonize() {\n        return this.internal.canonize();\n    }\n    flatten(options) {\n        return this.internal.flatten(options);\n    }\n}\nexports.MF = MF;\n//# sourceMappingURL=MF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseToHtml = parseToHtml;\nconst parse_js_1 = require(\"./parse.js\");\nconst toDisplay_js_1 = require(\"./util/toDisplay.js\");\nconst toHtml_js_1 = require(\"./util/toHtml.js\");\n/**\n * Parse a molecular formula and converts it to an HTML code\n * @param {String} mf String containing the molecular formula\n */\nfunction parseToHtml(mf) {\n    let parsed = (0, parse_js_1.parse)(mf);\n    let display = (0, toDisplay_js_1.toDisplay)(parsed);\n    return (0, toHtml_js_1.toHtml)(display);\n}\n//# sourceMappingURL=parseToHtml.js.map","\"use strict\";\n/**\n * @param {object}   [entry={}]\n * @param {object}   [options={}]\n * @param {number}   [options.min=-Infinity] - Minimal unsaturation\n * @param {number}   [options.max=+Infinity] - Maximal unsaturation\n * @param {boolean}   [options.onlyInteger=false] - Integer unsaturation\n * @param {boolean}   [options.onlyNonInteger=false] - Non integer unsaturation\n * @return {boolean}\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsaturationMatcher = unsaturationMatcher;\nfunction unsaturationMatcher(entry, options = {}) {\n    const { min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER, onlyInteger, onlyNonInteger, } = options;\n    if (entry.unsaturation !== undefined) {\n        if (entry.unsaturation < min || entry.unsaturation > max)\n            return false;\n        if (onlyInteger && !Number.isInteger(entry.unsaturation))\n            return false;\n        if (onlyNonInteger && Number.isInteger(entry.unsaturation))\n            return false;\n    }\n    return true;\n}\n//# sourceMappingURL=unsaturationMatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generalMatcher = generalMatcher;\nconst unsaturationMatcher_js_1 = require(\"./unsaturationMatcher.js\");\n/**\n * Returns true if the entry containing MF information match\n * @param {object}   [entry={}] - object containing mw, ...\n * @param {object}   [options={}]\n * @param {number}   [options.minMW=0] - Minimal molecular weight\n * @param {number}   [options.maxMW=+Infinity] - Maximal molecular weight\n * @param {number}   [options.minEM=0] - Minimal monoisotopic mass\n * @param {number}   [options.maxEM=+Infinity] - Maximal monoisotopic mass\n * @param {number}   [options.minCharge=-Infinity] - Minimal charge\n * @param {number}   [options.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}  [options.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}   [options.unsaturation={}]\n * @param {number}   [options.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}   [options.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}   [options.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}   [options.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}   [options.atoms] - object of atom:{min, max}\n * @return {boolean}\n */\nfunction generalMatcher(entry, options = {}) {\n    const { minMW = 0, maxMW = +Infinity, minEM = 0, maxEM = +Infinity, minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, absoluteCharge = false, unsaturation = {}, atoms, } = options;\n    if (entry.mw !== undefined && (entry.mw < minMW || entry.mw > maxMW)) {\n        return false;\n    }\n    if (entry.em !== undefined && (entry.em < minEM || entry.em > maxEM)) {\n        return false;\n    }\n    if (entry.charge !== undefined) {\n        let charge = absoluteCharge ? Math.abs(entry.charge) : entry.charge;\n        if (charge < minCharge || charge > maxCharge)\n            return false;\n    }\n    if (unsaturation !== undefined &&\n        entry.unsaturation !== undefined &&\n        !(0, unsaturationMatcher_js_1.unsaturationMatcher)(entry, unsaturation)) {\n        return false;\n    }\n    if (entry.atoms !== undefined && atoms) {\n        // all the atoms of the entry must fit in the range\n        for (let atom in entry.atoms) {\n            if (!atoms[atom])\n                return false;\n            if (entry.atoms[atom] < atoms[atom].min)\n                return false;\n            if (entry.atoms[atom] > atoms[atom].max)\n                return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=generalMatcher.js.map","\"use strict\";\n/**\n * Ensure that the sequence is in uppercase taking into account possible modifications\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureUppercaseSequence = ensureUppercaseSequence;\nfunction ensureUppercaseSequence(sequence) {\n    let parenthesisCounter = 0;\n    let parts = [];\n    let part = '';\n    for (let i = 0; i < sequence.length; i++) {\n        let currentSymbol = sequence[i];\n        if (currentSymbol === '(' && parenthesisCounter === 0 && part) {\n            parts.push(part);\n            part = currentSymbol;\n        }\n        else if (currentSymbol === ')' && parenthesisCounter === 0) {\n            part += currentSymbol;\n            parts.push(part);\n            part = '';\n        }\n        else {\n            part += currentSymbol;\n        }\n    }\n    if (part)\n        parts.push(part);\n    for (let i = 0; i < parts.length; i++) {\n        if (!parts[i].startsWith('(') && parts[i].match(/^[a-z]+$/)) {\n            parts[i] = parts[i].toUpperCase();\n        }\n    }\n    return parts.join('');\n}\n//# sourceMappingURL=ensureUppercaseSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEutrophicationPotential = getEutrophicationPotential;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction getEutrophicationPotential(mfString) {\n    let parsed = new mf_parser_1.MF(mfString);\n    let info = parsed.getInfo();\n    let mf = info.mf;\n    let mw = info.mass;\n    let nC = info.atoms.C || 0;\n    let nO = info.atoms.O || 0;\n    let nN = info.atoms.N || 0;\n    let nP = info.atoms.P || 0;\n    let nH = info.atoms.H || 0;\n    let atoms = Object.keys(info.atoms);\n    for (let atom of atoms) {\n        if (!['C', 'H', 'N', 'O', 'P'].includes(atom)) {\n            return {\n                log: `EP can not be calculated because the MF contains the element: ${atom}`,\n            };\n        }\n    }\n    let vRef = 1;\n    let mwRef = 94.97;\n    let thOD = nC + (nH - 3 * nN) / 4 - nO / 2;\n    let v = nP + nN / 16 + thOD / 138;\n    let ep = v / mw / (vRef / mwRef);\n    return {\n        v,\n        thOD,\n        ep,\n        mf,\n        mw,\n        log: 'Successful calculation',\n    };\n}\n//# sourceMappingURL=getEutrophicationPotential.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMsem = getMsem;\nconst chemical_elements_1 = require(\"chemical-elements\");\nfunction getMsem(em, charge) {\n    if (charge > 0) {\n        return em / charge - chemical_elements_1.ELECTRON_MASS;\n    }\n    else if (charge < 0) {\n        return em / (charge * -1) + chemical_elements_1.ELECTRON_MASS;\n    }\n    else {\n        return 0;\n    }\n}\n//# sourceMappingURL=getMsem.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMsInfo = getMsInfo;\nconst getMsem_1 = require(\"./getMsem\");\n/**\n * Returns an object containing:\n * {ms: {em, charge, ionization}, ionization: {}}\n * We return the ionization in order to know which one has been selected\n */\nfunction getMsInfo(entry, options = {}) {\n    const { allowNeutralMolecules, ionization = { mf: '', em: 0, charge: 0 }, forceIonization = false, targetMass, } = options;\n    let realIonization = ionization;\n    if (!forceIonization && entry.ionization && entry.ionization.mf !== '') {\n        realIonization = entry.ionization;\n    }\n    let ms = {\n        ionization: realIonization.mf,\n        em: 0,\n        charge: entry.charge + realIonization.charge,\n    };\n    if (ms.charge !== 0) {\n        ms.em = (0, getMsem_1.getMsem)(entry.em + realIonization.em, ms.charge);\n    }\n    else if (allowNeutralMolecules) {\n        ms.em = entry.em + realIonization.em;\n    }\n    if (targetMass) {\n        ms.delta = targetMass - ms.em;\n        ms.ppm = ((targetMass - ms.em) / ms.em) * 1e6;\n    }\n    return {\n        ms,\n        ionization: realIonization,\n    };\n}\n//# sourceMappingURL=getMsInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRangesForFragment = getRangesForFragment;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction getRangesForFragment(ranges) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        // example ClBr2(CH2)0-2NO\n        // the idea is that as long as we don't have a range we don't really care\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                            max: item.value,\n                        });\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            newRanges.push({ mf: currentMF });\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (const range of ranges) {\n        if (range.max === 0)\n            continue;\n        let max = range.max === undefined ? 1 : range.max;\n        possibilities.push(`${range.mf}0-${max}`);\n    }\n    return possibilities.join(' ');\n}\n//# sourceMappingURL=getRangesForFragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MFRange = void 0;\nconst mf_parser_1 = require(\"mf-parser\");\nclass MFRange {\n    constructor(mf) {\n        this.range = getRange(mf);\n    }\n    isInRange(mf) {\n        const target = getRange(mf);\n        let rangeIndex = 0;\n        let targetIndex = 0;\n        while (rangeIndex < this.range.length && targetIndex < target.length) {\n            const rangeElement = this.range[rangeIndex];\n            const targetElement = target[targetIndex];\n            if (rangeElement.element === targetElement.element) {\n                // Check if the target's range is within the range's range\n                if (targetElement.range.from >= rangeElement.range.from &&\n                    targetElement.range.to <= rangeElement.range.to) {\n                    targetIndex++;\n                    rangeIndex++;\n                }\n                else {\n                    return false; // Target element is out of range\n                }\n            }\n            else if (rangeElement.element < targetElement.element) {\n                if (rangeElement.range.from > 0) {\n                    return false; // Remaining range elements must have a minimum of 1\n                }\n                rangeIndex++;\n            }\n            else {\n                return false; // Target element is not in the range\n            }\n        }\n        if (rangeIndex < this.range.length) {\n            if (this.range[rangeIndex].range.from > 0) {\n                return false; // Remaining range elements must have a minimum of 1\n            }\n            rangeIndex++;\n        }\n        if (targetIndex < target.length) {\n            return false; // Not all target elements were matched\n        }\n        return true; // All target elements are within the range\n    }\n}\nexports.MFRange = MFRange;\nfunction getRange(mf) {\n    const parsed = (0, mf_parser_1.parse)(mf, { expandGroups: true, simplify: true });\n    const ranges = [];\n    let currentRange;\n    for (const item of parsed) {\n        switch (item.kind) {\n            case 'atom':\n                currentRange = { element: item.value, range: { from: 1, to: 1 } };\n                ranges.push(currentRange);\n                break;\n            case 'isotope':\n                currentRange = {\n                    element: item.value.isotope + item.value.atom,\n                    range: { from: 1, to: 1 },\n                };\n                break;\n            case 'multiplier':\n                if (currentRange) {\n                    currentRange.range.from = item.value;\n                    currentRange.range.to = item.value;\n                }\n                else {\n                    throw new Error(`MFRange: Multiplier without preceding element in MF: ${mf}`);\n                }\n                break;\n            case 'multiplierRange':\n                if (currentRange) {\n                    currentRange.range.from = item.value.from;\n                    currentRange.range.to = item.value.to;\n                }\n                else {\n                    throw new Error(`MFRange: Multiplier range without preceding element in MF: ${mf}`);\n                }\n                break;\n            default:\n                throw new Error(`MFRange: Unknown kind: ${item.kind} in MF: ${mf}`);\n        }\n    }\n    return ranges.sort((a, b) => {\n        if (a.element < b.element)\n            return -1;\n        if (a.element > b.element)\n            return 1;\n        return 0;\n    });\n}\n//# sourceMappingURL=MFRange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfDiff = mfDiff;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction mfDiff(mfString1, mfString2) {\n    let mf1 = new mf_parser_1.MF(mfString1).getInfo().atoms;\n    let mf2 = new mf_parser_1.MF(mfString2).getInfo().atoms;\n    let atoms = Object.keys(mf1);\n    for (const atom of Object.keys(mf2)) {\n        if (!atoms.includes(atom))\n            atoms.push(atom);\n    }\n    let mf = '';\n    for (let atom of atoms) {\n        let diff = (mf1[atom] || 0) - (mf2[atom] || 0);\n        if (diff)\n            mf += atom + diff;\n    }\n    return new mf_parser_1.MF(mf).toMF();\n}\n//# sourceMappingURL=mfDiff.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessIonizations = preprocessIonizations;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessIonizations(ionizationsString = '') {\n    if (Array.isArray(ionizationsString))\n        return ionizationsString;\n    const ionizations = ionizationsString.split(/ *[\\t\\n\\r,.;]+ */);\n    // it is allowed to have ranges in Ionizations. We need to explode them.\n    const results = [];\n    for (const ionization of ionizations) {\n        const parts = new mf_parser_1.MF(ionization).flatten();\n        for (const part of parts) {\n            const info = new mf_parser_1.MF(part).getInfo();\n            results.push({\n                mf: part,\n                em: info.monoisotopicMass,\n                charge: info.charge,\n                atoms: info.atoms,\n            });\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=preprocessIonizations.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessRanges = preprocessRanges;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessRanges(ranges) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        let current = {\n            mf: '',\n            min: 1,\n            max: 1,\n        };\n        // example ClBr2(CH2)0-2NO\n        // the idea is that has long as we don't have a range we don't really care\n        // but the range should only applied on the previous atom, group or parenthesis\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF + item.value;\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            current.mf += currentMF;\n        }\n        if (current.mf) {\n            newRanges.push(current);\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i];\n        let min = range.min === undefined ? 0 : range.min;\n        let max = range.max === undefined ? 1 : range.max;\n        let possibility = {\n            mf: range.mf,\n            originalMinCount: min, // value defined by the user\n            originalMaxCount: max, // value defined by the user\n            currentMinCount: min,\n            currentMaxCount: max,\n            currentCount: min,\n            currentMonoisotopicMass: 0,\n            currentCharge: 0,\n            currentUnsaturation: 0,\n            initialOrder: i,\n            minInnerMass: 0,\n            maxInnerMass: 0,\n            minInnerCharge: 0,\n            maxInnerCharge: 0,\n            minCharge: 0,\n            maxCharge: 0,\n            minMass: 0,\n            maxMass: 0,\n            innerCharge: false,\n        };\n        possibilities.push(possibility);\n        let info = new mf_parser_1.MF(range.mf).getInfo();\n        possibility.em = range.em || info.monoisotopicMass;\n        possibility.charge = range.charge || info.charge;\n        possibility.unsaturation =\n            range.unsaturation === undefined\n                ? (info.unsaturation - 1) * 2\n                : range.unsaturation;\n        possibility.atoms = info.atoms;\n        if (possibility.mf !== info.mf) {\n            possibility.isGroup = true;\n        }\n    }\n    possibilities = possibilities.filter((r) => r.originalMinCount !== 0 || r.originalMaxCount !== 0);\n    // we will sort the way we analyse the data\n    // 1. The one possibility parameter\n    // 2. The charged part\n    // 3. Decreasing em\n    possibilities.sort((a, b) => {\n        if (a.originalMinCount === a.originalMaxCount)\n            return -1; // should be in front, they are 'static'\n        if (b.originalMinCount === b.originalMaxCount)\n            return 1;\n        if (a.charge && b.charge) {\n            if (Math.abs(a.charge) > Math.abs(b.charge))\n                return -1;\n            if (Math.abs(a.charge) < Math.abs(b.charge))\n                return 1;\n            return b.em - a.em;\n        }\n        if (a.charge)\n            return -1;\n        if (b.charge)\n            return 1;\n        return b.em - a.em;\n    });\n    // we calculate couple of fixed values\n    for (let i = 0; i < possibilities.length; i++) {\n        for (let j = i; j < possibilities.length; j++) {\n            let possibility = possibilities[j];\n            if (possibility.em > 0) {\n                possibilities[i].minMass +=\n                    possibility.em * possibility.originalMinCount;\n                possibilities[i].maxMass +=\n                    possibility.em * possibility.originalMaxCount;\n            }\n            else {\n                possibilities[i].minMass +=\n                    possibility.em * possibility.originalMaxCount;\n                possibilities[i].maxMass +=\n                    possibility.em * possibility.originalMinCount;\n            }\n            if (possibility.charge > 0) {\n                possibilities[i].minCharge +=\n                    possibility.charge * possibility.originalMinCount;\n                possibilities[i].maxCharge +=\n                    possibility.charge * possibility.originalMaxCount;\n            }\n            else {\n                possibilities[i].minCharge +=\n                    possibility.charge * possibility.originalMaxCount;\n                possibilities[i].maxCharge +=\n                    possibility.charge * possibility.originalMinCount;\n            }\n        }\n    }\n    for (let i = 0; i < possibilities.length; i++) {\n        if (i < possibilities.length - 1) {\n            let possibility = possibilities[i];\n            let innerPossibility = possibilities[i + 1];\n            possibility.minInnerMass = innerPossibility.minMass;\n            possibility.maxInnerMass = innerPossibility.maxMass;\n            possibility.minInnerCharge = innerPossibility.minCharge;\n            possibility.maxInnerCharge = innerPossibility.maxCharge;\n            if (possibility.minInnerCharge || possibility.maxInnerCharge) {\n                possibility.innerCharge = true;\n            }\n        }\n    }\n    return possibilities;\n}\n//# sourceMappingURL=preprocessRanges.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.msemMatcher = msemMatcher;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst unsaturationMatcher_js_1 = require(\"./unsaturationMatcher.js\");\n/**\n * @typedef {object} MSEMFilterOptions\n * @property {object}         [ionization={ mf: '', em: 0, charge: 0 }] - ionization method\n * @property {boolean}        [forceIonization=false] - If true ignore existing ionizations\n * @property {number}         [precision=1000] - The precision on the experimental mass\n * @property {number}         [targetMass] - Target mass, allows to calculate error and filter results\n * @property {number[]}       [targetMasses] - Target masses: SORTED array of numbers\n * @property {number[]}       [targetIntensities] - Target intensities: SORTED array of numbers\n * @property {number}         [minMW=-Infinity] - Minimal monoisotopic mass\n * @property {number}         [maxMW=+Infinity] - Maximal monoisotopic mass\n * @property {number}         [minEM=-Infinity] - Minimal monoisotopic mass\n * @property {number}         [maxEM=+Infinity] - Maximal monoisotopic mass\n * @property {number}         [minMSEM=-Infinity] - Minimal monoisotopic mass observed by mass\n * @property {number}         [maxMSEM=+Infinity] - Maximal monoisotopic mass observed by mass\n * @property {number}         [minCharge=-Infinity] - Minimal charge\n * @property {number}         [maxCharge=+Infinity] - Maximal charge\n * @property {boolean}        [absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @property {boolean}        [allowNegativeAtoms=false] - Allow to have negative number of atoms\n * @property {object}         [unsaturation={}]\n * @property {number}         [unsaturation.min=-Infinity] - Minimal unsaturation\n * @property {number}         [unsaturation.max=+Infinity] - Maximal unsaturation\n * @property {boolean}        [unsaturation.onlyInteger=false] - Integer unsaturation\n * @property {boolean}        [unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @property {boolean}        [atoms] - object of atom:{min, max}\n * @property {Function}       [callback] - a function that contains information about the current MF\n */\n/**\n * @param {object}             [entry={}]\n * @param {MSEMFilterOptions}  [options={}]\n * @return {boolean}\n */\n/**\n * We always recalculate msem\n */\nfunction msemMatcher(entry, options = {}) {\n    const { ionization = { mf: '', em: 0, charge: 0, atoms: {} }, forceIonization = false, precision = 1000, minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, absoluteCharge = false, unsaturation = {}, targetMass, // if present we will calculate the errors\n    targetMasses, // if present we will calculate the smallest error\n    targetIntensities, // if present it will be added in the report\n    minEM = -Infinity, maxEM = +Infinity, minMSEM = -Infinity, maxMSEM = +Infinity, minMW = -Infinity, maxMW = +Infinity, allowNegativeAtoms = false, atoms, callback, } = options;\n    if (entry.mw !== undefined && (entry.mw < minMW || entry.mw > maxMW)) {\n        return false;\n    }\n    let msInfo = (0, mf_utilities_1.getMsInfo)(entry, {\n        ionization,\n        forceIonization,\n        targetMass,\n    });\n    let ms = msInfo.ms;\n    if (entry.em !== undefined && (entry.em < minEM || entry.em > maxEM)) {\n        return false;\n    }\n    if (ms.em !== undefined && (ms.em < minMSEM || ms.em > maxMSEM)) {\n        return false;\n    }\n    if (targetMass && Math.abs(ms.ppm) > precision) {\n        return false;\n    }\n    if (ms.charge !== undefined) {\n        let charge = absoluteCharge ? Math.abs(ms.charge) : ms.charge;\n        if (charge < minCharge || charge > maxCharge)\n            return false;\n    }\n    if (unsaturation !== undefined &&\n        entry.unsaturation !== undefined &&\n        !(0, unsaturationMatcher_js_1.unsaturationMatcher)(entry, unsaturation)) {\n        return false;\n    }\n    if (entry.atoms !== undefined && atoms) {\n        // all the atoms of the entry must fit in the range\n        for (let atom in entry.atoms) {\n            if (!atoms[atom])\n                return false;\n            if (entry.atoms[atom] < atoms[atom].min)\n                return false;\n            if (entry.atoms[atom] > atoms[atom].max)\n                return false;\n        }\n    }\n    if (entry.atoms !== undefined && !allowNegativeAtoms) {\n        const ionizationAtoms = (msInfo.ionization && msInfo.ionization.atoms) || {};\n        const atomKeys = new Set(Object.keys(ionizationAtoms).concat(Object.keys(entry.atoms)));\n        for (let atom of atomKeys) {\n            if ((entry.atoms[atom] || 0) + (ionizationAtoms[atom] || 0) < 0) {\n                return false;\n            }\n        }\n    }\n    if (targetMasses && targetMasses.length > 0) {\n        let index = (0, ml_spectra_processing_1.xFindClosestIndex)(targetMasses, ms.em);\n        let closestMass = targetMasses[index];\n        msInfo = (0, mf_utilities_1.getMsInfo)(entry, {\n            ionization,\n            forceIonization,\n            targetMass: closestMass,\n        });\n        msInfo.ms.target = { mass: closestMass };\n        if (targetIntensities) {\n            msInfo.ms.target.intensity = targetIntensities[index];\n        }\n        // need to find the closest targetMasses\n        if (Math.abs(msInfo.ms.ppm) > precision)\n            return false;\n    }\n    if (callback && !callback(entry))\n        return false;\n    return msInfo;\n}\n//# sourceMappingURL=msemMatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TargetMassCache = void 0;\nconst chemical_elements_1 = require(\"chemical-elements\");\n/**\n * returns all the possible neutral mass for a defined experimental (targetMass) mass\n */\nclass TargetMassCache {\n    /**\n     * @param {number} targetMass\n     * @param {Array} possibilities\n     * @param {object} [options={}]\n     * @param {boolean} [options.allowNeutral=false]\n     * @param {number} [options.charge=0]\n     * @param {number} [options.precision=100]\n     * @param {object} [options.filter={}]\n     * @param {number} [options.filter.minCharge=Number.MIN_SAFE_INTEGER]\n     * @param {number} [options.filter.maxCharge=Number.MAX_SAFE_INTEGER]\n     * @returns\n     */\n    constructor(targetMass, possibilities, options = {}) {\n        const { allowNeutral = false, // msem because em in this case !\n        filter = {}, charge = 0, precision = 100, } = options;\n        const { minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, } = filter;\n        if (!possibilities || possibilities.length === 0)\n            return;\n        let firstPossibility = possibilities[0];\n        let currentMinCharge = Math.max(minCharge, firstPossibility.minCharge + charge);\n        let currentMaxCharge = Math.min(maxCharge, firstPossibility.maxCharge + charge);\n        this.minCharge = currentMinCharge;\n        this.maxCharge = currentMaxCharge;\n        let size = this.maxCharge - this.minCharge + 1;\n        this.data = [];\n        let minMass = 0;\n        let maxMass = 0;\n        let range = (targetMass * precision) / 1e6;\n        for (let i = 0; i < size; i++) {\n            let currentCharge = i + this.minCharge;\n            if (currentCharge === 0) {\n                if (allowNeutral) {\n                    minMass = targetMass - range;\n                    maxMass = targetMass + range;\n                }\n                else {\n                    minMass = Number.MAX_SAFE_INTEGER;\n                    maxMass = Number.MIN_SAFE_INTEGER;\n                }\n            }\n            else {\n                minMass =\n                    (targetMass - range) * Math.abs(currentCharge) +\n                        chemical_elements_1.ELECTRON_MASS * currentCharge;\n                maxMass =\n                    (targetMass + range) * Math.abs(currentCharge) +\n                        chemical_elements_1.ELECTRON_MASS * currentCharge;\n            }\n            this.data.push({\n                charge: currentCharge,\n                minMass,\n                maxMass,\n            });\n        }\n    }\n    getMinMass(charge) {\n        return this.data[charge - this.minCharge]\n            ? this.data[charge - this.minCharge].minMass\n            : Number.MAX_SAFE_INTEGER;\n    }\n    getMaxMass(charge) {\n        return this.data[charge - this.minCharge]\n            ? this.data[charge - this.minCharge].maxMass\n            : Number.MIN_SAFE_INTEGER;\n    }\n}\nexports.TargetMassCache = TargetMassCache;\n//# sourceMappingURL=TargetMassCache.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findMFsSync = findMFsSync;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst TargetMassCache_1 = require(\"./TargetMassCache\");\n/**\n * @param {number}        targetMass - Monoisotopic mass\n * @param {object}        [options={}]\n * @param {number}        [options.maxIterations=10000000] - Maximum number of iterations\n * @param {boolean}       [options.allowNeutral=true]\n * @param {boolean}       [options.uniqueMFs=true]\n * @param {number}        [options.limit=1000] - Maximum number of results\n * @param {string}        [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string|{mf:string,min:number,max:number}[]}        [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number}        [options.precision=100] - Allowed mass range based on precision\n * @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n * @returns {object}\n */\nfunction findMFsSync(targetMass, options = {}) {\n    const { filter = {}, maxIterations = 1e8, limit = 1000, allowNeutral = true, // if there is no msem we use em !\n    uniqueMFs = false, // if there is no msem we use em !\n    ranges = [\n        { mf: 'C', min: 0, max: 100 },\n        { mf: 'H', min: 0, max: 100 },\n        { mf: 'O', min: 0, max: 100 },\n        { mf: 'N', min: 0, max: 100 },\n    ], } = options;\n    let targetMassCache;\n    const { minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, unsaturation = {}, } = filter;\n    let filterUnsaturation = !!unsaturation;\n    // we calculate not the real unsaturation but the one before dividing by 2 + 1\n    let fakeMinUnsaturation = unsaturation.min === undefined\n        ? Number.MIN_SAFE_INTEGER\n        : (unsaturation.min - 1) * 2;\n    let fakeMaxUnsaturation = unsaturation.max === undefined\n        ? Number.MAX_SAFE_INTEGER\n        : (unsaturation.max - 1) * 2;\n    let filterCharge = minCharge !== Number.MIN_SAFE_INTEGER ||\n        maxCharge !== Number.MAX_SAFE_INTEGER;\n    let advancedFilter;\n    if (filter.atoms || filter.callback) {\n        advancedFilter = {\n            atoms: filter.atoms,\n            callback: filter.callback,\n        };\n    }\n    let result = {\n        mfs: [],\n        info: {\n            numberMFEvaluated: 0,\n            numberResults: 0,\n        },\n    };\n    let orderMapping = []; // used to sort the atoms\n    // we need to make the processing for all the ionizations\n    let ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    for (let ionization of ionizations) {\n        let currentIonization = {\n            currentMonoisotopicMass: ionization.em || 0,\n            currentCharge: ionization.charge,\n            currentUnsaturation: 0, // we don't take into account the unsaturation of the ionization agent\n        };\n        // if (DEBUG) console.log('new ionization', ionization.mf, ionization.em, ionization.charge);\n        // ionization em and charge will be used to set the first atom value\n        let possibilities = (0, mf_utilities_1.preprocessRanges)(ranges);\n        orderMapping = getOrderMapping(possibilities);\n        if (possibilities.length === 0)\n            return { mfs: [] };\n        targetMassCache = new TargetMassCache_1.TargetMassCache(targetMass, possibilities, {\n            ...options,\n            charge: ionization.charge,\n        });\n        let theEnd = false;\n        let maxPosition = possibilities.length;\n        let lastPosition = possibilities.length - 1;\n        let currentPosition = 0;\n        let currentAtom;\n        let previousAtom;\n        let lastPossibility = possibilities[lastPosition];\n        initializePossibilities(possibilities, currentIonization, targetMassCache);\n        //  if (DEBUG) console.log('possibilities', possibilities.map((a) => `${a.mf + a.originalMinCount}-${a.originalMaxCount}`));\n        let isValid = false; // designed so that the first time it is not a valid solution\n        while (!theEnd) {\n            if (result.info.numberMFEvaluated++ > maxIterations) {\n                throw new Error(`Iteration number is over the current maximum of: ${maxIterations}`);\n            }\n            if (filterUnsaturation) {\n                let unsaturationValue = lastPossibility.currentUnsaturation;\n                let isOdd = Math.abs(unsaturationValue % 2);\n                if ((unsaturation.onlyInteger && isOdd === 1) ||\n                    (unsaturation.onlyNonInteger && isOdd === 0) ||\n                    fakeMinUnsaturation > unsaturationValue ||\n                    fakeMaxUnsaturation < unsaturationValue) {\n                    isValid = false;\n                }\n            }\n            if (filterCharge &&\n                (lastPossibility.currentCharge < minCharge ||\n                    lastPossibility.currentCharge > maxCharge)) {\n                isValid = false;\n            }\n            if (isValid) {\n                let minMass = targetMassCache.getMinMass(lastPossibility.currentCharge);\n                let maxMass = targetMassCache.getMaxMass(lastPossibility.currentCharge);\n                if (lastPossibility.currentMonoisotopicMass < minMass ||\n                    lastPossibility.currentMonoisotopicMass > maxMass) {\n                    isValid = false;\n                }\n            }\n            if (isValid) {\n                result.info.numberResults++;\n                let newResult = getResult(possibilities, targetMass, allowNeutral, ionization, orderMapping);\n                if (advancedFilter) {\n                    isValid = (0, mf_matcher_1.msemMatcher)(newResult, advancedFilter) !== false;\n                }\n                if (isValid) {\n                    result.mfs.push(newResult);\n                    if (result.mfs.length > 2 * limit) {\n                        if (uniqueMFs)\n                            ensureUniqueMF(result);\n                        result.mfs.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n                        result.mfs.length = limit;\n                    }\n                }\n            }\n            isValid = true;\n            // we need to set up all the arrays if possible\n            while (currentPosition < maxPosition && currentPosition >= 0) {\n                currentAtom = possibilities[currentPosition];\n                previousAtom =\n                    currentPosition === 0\n                        ? currentIonization\n                        : possibilities[currentPosition - 1];\n                if (currentAtom.currentCount < currentAtom.currentMaxCount) {\n                    currentAtom.currentCount++;\n                    updateCurrentAtom(currentAtom, previousAtom);\n                    if (currentPosition < lastPosition) {\n                        currentPosition++;\n                        setCurrentMinMax(possibilities[currentPosition], possibilities[currentPosition - 1], targetMassCache);\n                    }\n                    else {\n                        break;\n                    }\n                }\n                else {\n                    currentPosition--;\n                }\n            }\n            if (currentPosition < 0) {\n                theEnd = true;\n            }\n        }\n    }\n    if (uniqueMFs)\n        ensureUniqueMF(result);\n    result.mfs.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n    if (result.mfs.length > limit) {\n        result.mfs.length = limit;\n    }\n    for (const mf of result.mfs) {\n        delete mf.currentCounts;\n    }\n    return result;\n}\n/**\n * Ensure that we have only once the same MF\n * In order to improve the speed we just consider the em\n * @param {object} result\n */\nfunction ensureUniqueMF(result) {\n    result.mfs.sort((a, b) => a.em - b.em);\n    let previousEM = 0;\n    let bestCounts = [];\n    const mfs = [];\n    next: for (let current of result.mfs) {\n        if (current.em - previousEM > 1e-8) {\n            previousEM = current.em;\n            bestCounts = current.currentCounts;\n            mfs.push(current);\n        }\n        else {\n            for (let i = 0; i < current.currentCounts.length; i++) {\n                // better priority ???\n                if (current.currentCounts[i] > bestCounts[i]) {\n                    mfs.pop();\n                    mfs.push(current);\n                    bestCounts = current.currentCounts;\n                }\n                else if (current.currentCounts[i] < bestCounts[i]) {\n                    continue next;\n                }\n            }\n        }\n    }\n    result.mfs = mfs;\n}\nfunction updateCurrentAtom(currentAtom, previousAtom) {\n    currentAtom.currentMonoisotopicMass =\n        previousAtom.currentMonoisotopicMass +\n            currentAtom.em * currentAtom.currentCount;\n    currentAtom.currentCharge =\n        previousAtom.currentCharge + currentAtom.charge * currentAtom.currentCount;\n    currentAtom.currentUnsaturation =\n        previousAtom.currentUnsaturation +\n            currentAtom.unsaturation * currentAtom.currentCount;\n}\nfunction getResult(possibilities, targetMass, allowNeutralMolecules, ionization, orderMapping) {\n    let lastPossibility = possibilities.at(-1);\n    let result = {\n        em: lastPossibility.currentMonoisotopicMass - ionization.em,\n        unsaturation: lastPossibility.currentUnsaturation,\n        mf: '',\n        charge: lastPossibility.currentCharge - ionization.charge,\n        ionization,\n        atoms: {},\n        groups: {},\n        currentCounts: possibilities.map((possibility) => possibility.currentCount),\n    };\n    // we check that the first time we meet the ionization group it does not end\n    // in the final result\n    for (let i = 0; i < possibilities.length; i++) {\n        let possibility = possibilities[orderMapping[i]];\n        if (possibility.currentCount !== 0) {\n            if (possibility.isGroup) {\n                if (possibility.currentCount === 1) {\n                    result.mf += `${possibility.mf}`;\n                }\n                else if (possibility.mf.match(/^\\([^()]*\\)$/)) {\n                    result.mf += `${possibility.mf}${possibility.currentCount}`;\n                }\n                else {\n                    result.mf += `(${possibility.mf})${possibility.currentCount}`;\n                }\n                if (result.groups[possibility.mf]) {\n                    result.groups[possibility.mf] += possibility.currentCount;\n                }\n                else {\n                    result.groups[possibility.mf] = possibility.currentCount;\n                }\n            }\n            else {\n                result.mf += possibility.mf;\n                if (possibility.currentCount !== 1) {\n                    result.mf += possibility.currentCount;\n                }\n            }\n            for (let atom in possibility.atoms) {\n                if (result.atoms[atom]) {\n                    result.atoms[atom] +=\n                        possibility.atoms[atom] * possibility.currentCount;\n                }\n                else {\n                    result.atoms[atom] =\n                        possibility.atoms[atom] * possibility.currentCount;\n                }\n            }\n        }\n    }\n    result.unsaturation = (result.unsaturation + Math.abs(result.charge)) / 2 + 1;\n    result.ms = (0, mf_utilities_1.getMsInfo)(result, { targetMass, allowNeutralMolecules }).ms;\n    return result;\n}\nfunction setCurrentMinMax(currentAtom, previousAtom, targetMassCache) {\n    // the current min max can only be optimize if the charge will not change anymore\n    // and the currentAtom.em >= 0\n    if (currentAtom.innerCharge === true ||\n        currentAtom.charge !== 0 ||\n        currentAtom.em < 0) {\n        currentAtom.currentMinCount = currentAtom.originalMinCount;\n        currentAtom.currentMaxCount = currentAtom.originalMaxCount;\n        currentAtom.currentCount = currentAtom.currentMinCount - 1;\n    }\n    else {\n        // no more change of charge, we can optimize\n        let currentMass = previousAtom !== undefined ? previousAtom.currentMonoisotopicMass : 0;\n        let currentCharge = previousAtom !== undefined ? previousAtom.currentCharge : 0;\n        currentAtom.currentMinCount = Math.max(Math.floor((targetMassCache.getMinMass(currentCharge) -\n            currentMass -\n            currentAtom.maxInnerMass) /\n            currentAtom.em), currentAtom.originalMinCount);\n        currentAtom.currentMaxCount = Math.min(Math.floor((targetMassCache.getMaxMass(currentCharge) -\n            currentMass -\n            currentAtom.minInnerMass) /\n            currentAtom.em), currentAtom.originalMaxCount);\n        currentAtom.currentCount = currentAtom.currentMinCount - 1;\n    }\n}\nfunction initializePossibilities(possibilities, currentIonization, targetMassCache) {\n    for (let i = 0; i < possibilities.length; i++) {\n        if (i === 0) {\n            updateCurrentAtom(possibilities[i], currentIonization);\n            setCurrentMinMax(possibilities[i], currentIonization, targetMassCache);\n        }\n        else {\n            updateCurrentAtom(possibilities[i], possibilities[i - 1]);\n        }\n    }\n}\n// eslint-disable-next-line no-unused-vars\nfunction possibilitiesToString(possibilities) {\n    return possibilities.map((a) => [\n        `mf:${a.mf}`,\n        `current:${a.currentCount}`,\n        `min:${a.currentMinCount}`,\n        `max:${a.currentMaxCount}`,\n        `charge:${a.currentCharge}`,\n    ]);\n}\nfunction getOrderMapping(possibilities) {\n    let mapping = possibilities.map((p, i) => ({ atom: p.mf, index: i }));\n    mapping.sort((a, b) => {\n        return (0, atom_sorter_1.atomSorter)(a.atom, b.atom);\n    });\n    return mapping.map((a) => a.index);\n}\n//# sourceMappingURL=findMFsSync.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findMFs = findMFs;\nconst findMFsSync_1 = require(\"./findMFsSync\");\n/** @typedef {import('./types').MFResult} MFResult */\n/** @typedef {import('./types').MFFinderOptions} MFFinderOptions */\n/**\n * @param {number} targetMass - Monoisotopic mass\n * @param {MFFinderOptions} [options={}]\n * @returns {Promise<MFResult[]>}\n */\nasync function findMFs(targetMass, options = {}) {\n    return (0, findMFsSync_1.findMFsSync)(targetMass, options);\n}\n//# sourceMappingURL=findMFs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfIncluded = mfIncluded;\nconst mf_parser_1 = require(\"mf-parser\");\nconst findMFsSync_js_1 = require(\"./findMFsSync.js\");\n/**\n * @param {string}        mf - the molecular formula to check\n * @param {string}        range - the range of MF to explore\n * @param {object}        [options={}]\n * @param {number}        [options.maxIterations=10000000] - Maximum number of iterations\n * @param {boolean}       [options.allowNeutral=true]\n * @param {string}        [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {object}        [options.filter={}]\n * @param {number}        [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}        [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}       [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}        [options.filter.unsaturation={}]\n * @param {number}        [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}        [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}        [options.filter.atoms] - object of atom:{min, max}\n * @param {function}      [options.filter.callback] - a function to filter the MF\n * @returns {boolean}\n */\nfunction mfIncluded(mf, range, options = {}) {\n    let targetEM = new mf_parser_1.MF(mf).getInfo().monoisotopicMass;\n    let results = (0, findMFsSync_js_1.findMFsSync)(targetEM, {\n        allowNeutral: true,\n        ...options,\n        ranges: range,\n        precision: 0.0000001,\n        limit: 1,\n    });\n    return results.mfs.length > 0;\n}\n//# sourceMappingURL=mfIncluded.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromMonoisotopicMass = fromMonoisotopicMass;\nconst mf_finder_1 = require(\"mf-finder\");\n/**\n * Generates a database 'monoisotopic' from a monoisotopic mass and various options\n * @param {number|string|array}    masses - Monoisotopic mass\n * @param {object}    [options={}]\n * @param {number}    [options.maxIterations=10000000] - Maximum number of iterations\n * @param {function}  [options.onStep] - Callback to do after each step\n * @param {boolean}   [options.allowNeutral=true]\n * @param {boolean}   [options.uniqueMFs=true]\n * @param {number}    [options.limit=1000] - Maximum number of results\n * @param {string}    [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string}    [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number}    [options.precision=100] - Allowed mass range based on precision\n * @param {object}    [options.filter={}]\n * @param {number}    [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}    [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}   [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}    [options.filter.unsaturation={}]\n * @param {number}    [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}    [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}    [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}    [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}    [options.filter.atoms] - object of atom:{min, max}\n * @param {function}  [options.filter.callback] - a function to filter the MF\n * @returns {Promise}\n */\nasync function fromMonoisotopicMass(masses, options = {}) {\n    if (typeof masses === 'string') {\n        masses = masses.split(/[\\t\\n\\r ,;]/).map(Number);\n    }\n    if (typeof masses === 'number') {\n        masses = [masses];\n    }\n    let results = [];\n    for (let mass of masses) {\n        results.push(await (0, mf_finder_1.findMFs)(mass, options));\n    }\n    return {\n        mfs: results.flatMap((entry) => entry.mfs),\n        info: {\n            numberMFEvaluated: results.reduce((sum, current) => sum + current.info.numberMFEvaluated, 0),\n            numberResults: results.reduce((sum, current) => sum + current.info.numberResults, 0),\n        },\n    };\n}\n//# sourceMappingURL=fromMonoisotopicMass.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaks = getPeaks;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array of peaks\n * @param {array} peaks - array of all the peaks\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.limit=undefined] - maximal number of peaks (based on intensity)\n * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n * @returns {array} - copy of peaks with 'close' annotation\n */\nfunction getPeaks(peaks, options = {}) {\n    const { from = (0, ml_spectra_processing_1.xyObjectMinXPoint)(peaks).x, to = (0, ml_spectra_processing_1.xyObjectMaxXPoint)(peaks).x, threshold = 0.01, limit, sumValue, } = options;\n    let maxY = Number.MIN_SAFE_INTEGER;\n    for (let peak of peaks) {\n        if (peak.y > maxY)\n            maxY = peak.y;\n    }\n    let minY = maxY * threshold;\n    peaks = peaks.filter((peak) => peak.x >= from && peak.x <= to && peak.y >= minY);\n    if (limit && peaks.length > limit) {\n        peaks.sort((a, b) => b.y - a.y);\n        peaks = peaks.slice(0, limit);\n    }\n    if (sumValue) {\n        peaks = structuredClone(peaks);\n        const currentSum = (0, ml_spectra_processing_1.xyObjectSumY)(peaks);\n        const ratio = sumValue / currentSum;\n        for (const peak of peaks) {\n            peak.y *= ratio;\n        }\n    }\n    return peaks.sort((a, b) => a.x - b.x);\n}\n//# sourceMappingURL=getPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFragmentPeaks = getFragmentPeaks;\nconst mf_parser_1 = require(\"mf-parser\");\nconst fromMonoisotopicMass_1 = require(\"./from/fromMonoisotopicMass\");\nconst getPeaks_js_1 = require(\"./getPeaks.js\");\n/**\n * Filter the array of peaks\n * @param {array} peaks - array of all the peaks\n * @param {string} mf - Molecular formula of the parent molecule\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.limit=undefined] - maximal number of peaks (based on intensity)\n * @param {string} [options.ionizations]\n * @param {number} [options.precision]\n * @returns {array} - copy of peaks with 'close' annotation\n */\nasync function getFragmentPeaks(peaks, mf, options = {}) {\n    const { ionizations = '', precision } = options;\n    const mfInfo = new mf_parser_1.MF(mf).getInfo();\n    const ranges = Object.keys(mfInfo.atoms)\n        .map((key) => `${key}0-${mfInfo.atoms[key]}`)\n        .join(' ');\n    peaks = (0, getPeaks_js_1.getPeaks)(peaks, options);\n    for (let peak of peaks) {\n        const { mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(peak.x, {\n            precision,\n            ranges,\n            ionizations,\n        });\n        peak.mfs = mfs;\n    }\n    peaks = peaks.filter((peak) => peak.mfs.length > 0);\n    return peaks;\n}\n//# sourceMappingURL=getFragmentPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMassRemainder = getMassRemainder;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Remove an integer number of time the specifiedd monoisotopic mass.\n * Mass remainder analysis (MARA): https://doi.org/10.1021/acs.analchem.7b04730\n * @param {object} spectrum\n * @param {number} mass\n * @param {object} [options={}]\n * @param {number} [options.delta=0.001]\n */\nfunction getMassRemainder(spectrum, mass, options = {}) {\n    const { delta = 0.001 } = options;\n    const x = spectrum.x.slice();\n    const y = spectrum.y;\n    for (let i = 0; i < x.length; i++) {\n        const factor = Math.floor(x[i] / mass);\n        x[i] = x[i] - factor * mass;\n    }\n    // we sort and join\n    return (0, ml_spectra_processing_1.xyJoinX)((0, ml_spectra_processing_1.xySortX)({ x, y }), { delta });\n}\n//# sourceMappingURL=getMassRemainder.js.map","export function calculateOverlapFromDiff(diffs) {\n    if (diffs[1].length === 0)\n        return 0;\n    let sumPos = 0;\n    for (let i = 0; i < diffs[1].length; i++) {\n        sumPos += Math.abs(diffs[1][i]);\n    }\n    return 1 - sumPos;\n}\n//# sourceMappingURL=calculateOverlapFromDiff.js.map","/**\n * This code requires the use of an array like  [[x1,y1],[x2,y2], ...]\n * If it is not the right format, we will just convert it\n * Otherwise we return the correct format\n * @param {Peaks} peaks\n * @returns [number[], number[]]\n */\nexport function checkPeaks(peaks) {\n    // if it is already a 2D array of points, we just return them\n    if (Array.isArray(peaks) && Array.isArray(peaks[0]) && peaks.length === 2) {\n        return peaks;\n    }\n    if (Array.isArray(peaks.x) && Array.isArray(peaks.y)) {\n        return [peaks.x, peaks.y];\n    }\n    const x = new Array(peaks.length);\n    const y = new Array(peaks.length);\n    for (let i = 0; i < peaks.length; i++) {\n        x[i] = peaks[i][0];\n        y[i] = peaks[i][1];\n    }\n    return [x, y];\n}\n//# sourceMappingURL=checkPeaks.js.map","export function extract(array, from, to) {\n    const newArray = [[], []];\n    let j = 0;\n    const length = array[0] ? array[0].length : 0;\n    for (let i = 0; i < length; i++) {\n        if ((!from || array[0][i] >= from) && (!to || array[0][i] <= to)) {\n            newArray[0][j] = array[0][i];\n            newArray[1][j] = array[1][i];\n            j++;\n        }\n    }\n    return newArray;\n}\n//# sourceMappingURL=extract.js.map","// returns an new array based on array1 where there is a peak of array2 at a distance under width/2\nexport function getCommonArray(array1, array2, width) {\n    const newArray = [[], []];\n    let pos2 = 0;\n    width /= 2;\n    let j = 0;\n    const array1Length = array1[0] ? array1[0].length : 0;\n    const array2Length = array2[0] ? array2[0].length : 0;\n    for (let i = 0; i < array1Length; i++) {\n        while (pos2 < array2Length && array1[0][i] > array2[0][pos2] + width) {\n            pos2++;\n        }\n        if (pos2 < array2Length && array1[0][i] > array2[0][pos2] - width) {\n            newArray[0][j] = array1[0][i];\n            newArray[1][j] = array1[1][i];\n            j++;\n        }\n    }\n    return newArray;\n}\n//# sourceMappingURL=getCommonArray.js.map","'use strict';\n\nfunction compareNumbers(a, b) {\n    return a - b;\n}\n\n/**\n * Computes the sum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.sum = function sum(values) {\n    var sum = 0;\n    for (var i = 0; i < values.length; i++) {\n        sum += values[i];\n    }\n    return sum;\n};\n\n/**\n * Computes the maximum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.max = function max(values) {\n    var max = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] > max) max = values[i];\n    }\n    return max;\n};\n\n/**\n * Computes the minimum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.min = function min(values) {\n    var min = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] < min) min = values[i];\n    }\n    return min;\n};\n\n/**\n * Computes the min and max of the given values\n * @param {Array} values\n * @returns {{min: number, max: number}}\n */\nexports.minMax = function minMax(values) {\n    var min = values[0];\n    var max = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] < min) min = values[i];\n        if (values[i] > max) max = values[i];\n    }\n    return {\n        min: min,\n        max: max\n    };\n};\n\n/**\n * Computes the arithmetic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.arithmeticMean = function arithmeticMean(values) {\n    var sum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        sum += values[i];\n    }\n    return sum / l;\n};\n\n/**\n * {@link arithmeticMean}\n */\nexports.mean = exports.arithmeticMean;\n\n/**\n * Computes the geometric mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.geometricMean = function geometricMean(values) {\n    var mul = 1;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        mul *= values[i];\n    }\n    return Math.pow(mul, 1 / l);\n};\n\n/**\n * Computes the mean of the log of the given values\n * If the return value is exponentiated, it gives the same result as the\n * geometric mean.\n * @param {Array} values\n * @returns {number}\n */\nexports.logMean = function logMean(values) {\n    var lnsum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        lnsum += Math.log(values[i]);\n    }\n    return lnsum / l;\n};\n\n/**\n * Computes the weighted grand mean for a list of means and sample sizes\n * @param {Array} means - Mean values for each set of samples\n * @param {Array} samples - Number of original values for each set of samples\n * @returns {number}\n */\nexports.grandMean = function grandMean(means, samples) {\n    var sum = 0;\n    var n = 0;\n    var l = means.length;\n    for (var i = 0; i < l; i++) {\n        sum += samples[i] * means[i];\n        n += samples[i];\n    }\n    return sum / n;\n};\n\n/**\n * Computes the truncated mean of the given values using a given percentage\n * @param {Array} values\n * @param {number} percent - The percentage of values to keep (range: [0,1])\n * @param {boolean} [alreadySorted=false]\n * @returns {number}\n */\nexports.truncatedMean = function truncatedMean(values, percent, alreadySorted) {\n    if (alreadySorted === undefined) alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n    var l = values.length;\n    var k = Math.floor(l * percent);\n    var sum = 0;\n    for (var i = k; i < (l - k); i++) {\n        sum += values[i];\n    }\n    return sum / (l - 2 * k);\n};\n\n/**\n * Computes the harmonic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.harmonicMean = function harmonicMean(values) {\n    var sum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        if (values[i] === 0) {\n            throw new RangeError('value at index ' + i + 'is zero');\n        }\n        sum += 1 / values[i];\n    }\n    return l / sum;\n};\n\n/**\n * Computes the contraharmonic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.contraHarmonicMean = function contraHarmonicMean(values) {\n    var r1 = 0;\n    var r2 = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        r1 += values[i] * values[i];\n        r2 += values[i];\n    }\n    if (r2 < 0) {\n        throw new RangeError('sum of values is negative');\n    }\n    return r1 / r2;\n};\n\n/**\n * Computes the median of the given values\n * @param {Array} values\n * @param {boolean} [alreadySorted=false]\n * @returns {number}\n */\nexports.median = function median(values, alreadySorted) {\n    if (alreadySorted === undefined) alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n    var l = values.length;\n    var half = Math.floor(l / 2);\n    if (l % 2 === 0) {\n        return (values[half - 1] + values[half]) * 0.5;\n    } else {\n        return values[half];\n    }\n};\n\n/**\n * Computes the variance of the given values\n * @param {Array} values\n * @param {boolean} [unbiased=true] - if true, divide by (n-1); if false, divide by n.\n * @returns {number}\n */\nexports.variance = function variance(values, unbiased) {\n    if (unbiased === undefined) unbiased = true;\n    var theMean = exports.mean(values);\n    var theVariance = 0;\n    var l = values.length;\n\n    for (var i = 0; i < l; i++) {\n        var x = values[i] - theMean;\n        theVariance += x * x;\n    }\n\n    if (unbiased) {\n        return theVariance / (l - 1);\n    } else {\n        return theVariance / l;\n    }\n};\n\n/**\n * Computes the standard deviation of the given values\n * @param {Array} values\n * @param {boolean} [unbiased=true] - if true, divide by (n-1); if false, divide by n.\n * @returns {number}\n */\nexports.standardDeviation = function standardDeviation(values, unbiased) {\n    return Math.sqrt(exports.variance(values, unbiased));\n};\n\nexports.standardError = function standardError(values) {\n    return exports.standardDeviation(values) / Math.sqrt(values.length);\n};\n\n/**\n * IEEE Transactions on biomedical engineering, vol. 52, no. 1, january 2005, p. 76-\n * Calculate the standard deviation via the Median of the absolute deviation\n *  The formula for the standard deviation only holds for Gaussian random variables.\n * @returns {{mean: number, stdev: number}}\n */\nexports.robustMeanAndStdev = function robustMeanAndStdev(y) {\n    var mean = 0, stdev = 0;\n    var length = y.length, i = 0;\n    for (i = 0; i < length; i++) {\n        mean += y[i];\n    }\n    mean /= length;\n    var averageDeviations = new Array(length);\n    for (i = 0; i < length; i++)\n        averageDeviations[i] = Math.abs(y[i] - mean);\n    averageDeviations.sort(compareNumbers);\n    if (length % 2 === 1) {\n        stdev = averageDeviations[(length - 1) / 2] / 0.6745;\n    } else {\n        stdev = 0.5 * (averageDeviations[length / 2] + averageDeviations[length / 2 - 1]) / 0.6745;\n    }\n\n    return {\n        mean: mean,\n        stdev: stdev\n    };\n};\n\nexports.quartiles = function quartiles(values, alreadySorted) {\n    if (typeof (alreadySorted) === 'undefined') alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n\n    var quart = values.length / 4;\n    var q1 = values[Math.ceil(quart) - 1];\n    var q2 = exports.median(values, true);\n    var q3 = values[Math.ceil(quart * 3) - 1];\n\n    return {q1: q1, q2: q2, q3: q3};\n};\n\nexports.pooledStandardDeviation = function pooledStandardDeviation(samples, unbiased) {\n    return Math.sqrt(exports.pooledVariance(samples, unbiased));\n};\n\nexports.pooledVariance = function pooledVariance(samples, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var sum = 0;\n    var length = 0, l = samples.length;\n    for (var i = 0; i < l; i++) {\n        var values = samples[i];\n        var vari = exports.variance(values);\n\n        sum += (values.length - 1) * vari;\n\n        if (unbiased)\n            length += values.length - 1;\n        else\n            length += values.length;\n    }\n    return sum / length;\n};\n\nexports.mode = function mode(values) {\n    var l = values.length,\n        itemCount = new Array(l),\n        i;\n    for (i = 0; i < l; i++) {\n        itemCount[i] = 0;\n    }\n    var itemArray = new Array(l);\n    var count = 0;\n\n    for (i = 0; i < l; i++) {\n        var index = itemArray.indexOf(values[i]);\n        if (index >= 0)\n            itemCount[index]++;\n        else {\n            itemArray[count] = values[i];\n            itemCount[count] = 1;\n            count++;\n        }\n    }\n\n    var maxValue = 0, maxIndex = 0;\n    for (i = 0; i < count; i++) {\n        if (itemCount[i] > maxValue) {\n            maxValue = itemCount[i];\n            maxIndex = i;\n        }\n    }\n\n    return itemArray[maxIndex];\n};\n\nexports.covariance = function covariance(vector1, vector2, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var mean1 = exports.mean(vector1);\n    var mean2 = exports.mean(vector2);\n\n    if (vector1.length !== vector2.length)\n        throw 'Vectors do not have the same dimensions';\n\n    var cov = 0, l = vector1.length;\n    for (var i = 0; i < l; i++) {\n        var x = vector1[i] - mean1;\n        var y = vector2[i] - mean2;\n        cov += x * y;\n    }\n\n    if (unbiased)\n        return cov / (l - 1);\n    else\n        return cov / l;\n};\n\nexports.skewness = function skewness(values, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var theMean = exports.mean(values);\n\n    var s2 = 0, s3 = 0, l = values.length;\n    for (var i = 0; i < l; i++) {\n        var dev = values[i] - theMean;\n        s2 += dev * dev;\n        s3 += dev * dev * dev;\n    }\n    var m2 = s2 / l;\n    var m3 = s3 / l;\n\n    var g = m3 / (Math.pow(m2, 3 / 2.0));\n    if (unbiased) {\n        var a = Math.sqrt(l * (l - 1));\n        var b = l - 2;\n        return (a / b) * g;\n    } else {\n        return g;\n    }\n};\n\nexports.kurtosis = function kurtosis(values, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var theMean = exports.mean(values);\n    var n = values.length, s2 = 0, s4 = 0;\n\n    for (var i = 0; i < n; i++) {\n        var dev = values[i] - theMean;\n        s2 += dev * dev;\n        s4 += dev * dev * dev * dev;\n    }\n    var m2 = s2 / n;\n    var m4 = s4 / n;\n\n    if (unbiased) {\n        var v = s2 / (n - 1);\n        var a = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3));\n        var b = s4 / (v * v);\n        var c = ((n - 1) * (n - 1)) / ((n - 2) * (n - 3));\n\n        return a * b - 3 * c;\n    } else {\n        return m4 / (m2 * m2) - 3;\n    }\n};\n\nexports.entropy = function entropy(values, eps) {\n    if (typeof (eps) === 'undefined') eps = 0;\n    var sum = 0, l = values.length;\n    for (var i = 0; i < l; i++)\n        sum += values[i] * Math.log(values[i] + eps);\n    return -sum;\n};\n\nexports.weightedMean = function weightedMean(values, weights) {\n    var sum = 0, l = values.length;\n    for (var i = 0; i < l; i++)\n        sum += values[i] * weights[i];\n    return sum;\n};\n\nexports.weightedStandardDeviation = function weightedStandardDeviation(values, weights) {\n    return Math.sqrt(exports.weightedVariance(values, weights));\n};\n\nexports.weightedVariance = function weightedVariance(values, weights) {\n    var theMean = exports.weightedMean(values, weights);\n    var vari = 0, l = values.length;\n    var a = 0, b = 0;\n\n    for (var i = 0; i < l; i++) {\n        var z = values[i] - theMean;\n        var w = weights[i];\n\n        vari += w * (z * z);\n        b += w;\n        a += w * w;\n    }\n\n    return vari * (b / (b * b - a));\n};\n\nexports.center = function center(values, inPlace) {\n    if (typeof (inPlace) === 'undefined') inPlace = false;\n\n    var result = values;\n    if (!inPlace)\n        result = [].concat(values);\n\n    var theMean = exports.mean(result), l = result.length;\n    for (var i = 0; i < l; i++)\n        result[i] -= theMean;\n};\n\nexports.standardize = function standardize(values, standardDev, inPlace) {\n    if (typeof (standardDev) === 'undefined') standardDev = exports.standardDeviation(values);\n    if (typeof (inPlace) === 'undefined') inPlace = false;\n    var l = values.length;\n    var result = inPlace ? values : new Array(l);\n    for (var i = 0; i < l; i++)\n        result[i] = values[i] / standardDev;\n    return result;\n};\n\nexports.cumulativeSum = function cumulativeSum(array) {\n    var l = array.length;\n    var result = new Array(l);\n    result[0] = array[0];\n    for (var i = 1; i < l; i++)\n        result[i] = result[i - 1] + array[i];\n    return result;\n};\n","'use strict';\n\nexports.array = require('./array');\nexports.matrix = require('./matrix');\n","import { array as StatArray } from 'ml-stat';\nexport function normalize(array) {\n    const min = StatArray.min(array[1]);\n    const max = StatArray.max(array[1]);\n    const sum = StatArray.sum(array[1]);\n    const length = array[1] ? array[1].length : 0;\n    if (sum !== 0) {\n        for (let i = 0; i < length; i++) {\n            array[1][i] /= sum;\n        }\n    }\n    return {\n        sum,\n        min,\n        max,\n    };\n}\n//# sourceMappingURL=normalize.js.map","import { extract } from './extract';\nimport { getCommonArray } from './getCommonArray';\nimport { normalize } from './normalize';\nimport { COMMON_SECOND, COMMON_FIRST } from './index';\n// this method will systematically take care of both array\nexport function commonExtractAndNormalize(array1, array2, width, from, to, common) {\n    if (!Array.isArray(array1) || !Array.isArray(array2)) {\n        return {\n            info: undefined,\n            data: undefined,\n        };\n    }\n    const extract1 = extract(array1, from, to);\n    const extract2 = extract(array2, from, to);\n    let common1, common2, info1, info2;\n    if (common & COMMON_SECOND) {\n        common1 = getCommonArray(extract1, extract2, width);\n        info1 = normalize(common1);\n    }\n    else {\n        common1 = extract1;\n        info1 = normalize(common1);\n    }\n    if (common & COMMON_FIRST) {\n        common2 = getCommonArray(extract2, extract1, width);\n        info2 = normalize(common2);\n    }\n    else {\n        common2 = extract2;\n        info2 = normalize(common2);\n    }\n    return {\n        info1,\n        info2,\n        data1: common1,\n        data2: common2,\n    };\n}\n//# sourceMappingURL=commonExtractAndNormalize.js.map","import { extract } from './extract';\nimport { normalize } from './normalize';\nexport function extractAndNormalize(array, from, to) {\n    if (!Array.isArray(array)) {\n        return {\n            info: undefined,\n            data: undefined,\n        };\n    }\n    const newArray = extract(array, from, to);\n    const info = normalize(newArray);\n    return {\n        info,\n        data: newArray,\n    };\n}\n//# sourceMappingURL=extractAndNormalize.js.map","// Adapted from: http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/1968345#1968345\nexport function getIntersection(segment1, segment2) {\n    const p0X = segment1[0][0];\n    const p0Y = segment1[0][1];\n    const p1X = segment1[1][0];\n    const p1Y = segment1[1][1];\n    const p2X = segment2[0][0];\n    const p2Y = segment2[0][1];\n    const p3X = segment2[1][0];\n    const p3Y = segment2[1][1];\n    const s1X = p1X - p0X;\n    const s1Y = p1Y - p0Y;\n    const s2X = p3X - p2X;\n    const s2Y = p3Y - p2Y;\n    const s = (-s1Y * (p0X - p2X) + s1X * (p0Y - p2Y)) / (-s2X * s1Y + s1X * s2Y);\n    const t = (s2X * (p0Y - p2Y) - s2Y * (p0X - p2X)) / (-s2X * s1Y + s1X * s2Y);\n    if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n        return {\n            x: p0X + t * s1X,\n            y: p0Y + t * s1Y,\n        };\n    }\n    return null; // No collision\n}\n//# sourceMappingURL=getIntersection.js.map","import { calculateOverlapFromDiff } from './calculateOverlapFromDiff';\nimport { checkPeaks } from './checkPeaks';\nimport { commonExtractAndNormalize } from './commonExtractAndNormalize';\nimport { extract } from './extract';\nimport { extractAndNormalize } from './extractAndNormalize';\nimport { getCommonArray } from './getCommonArray.js';\nimport { getIntersection } from './getIntersection';\nimport { normalize } from './normalize';\nexport const COMMON_NO = 0;\nexport const COMMON_FIRST = 1;\nexport const COMMON_SECOND = 2;\nexport const COMMON_BOTH = 3;\n/**\n * A number, or a string containing a number.\n * @typedef {([number[],number[]]|[number,number][]|{x:number[],y:number[]})} Peaks\n */\n/**\n * Create a comparator class\n * {object} [options={}]\n * {string} [options.common=''] should we take only common peaks 'first', 'second', 'both', ''\n * {number} [options.widthBottom=2] bottom trapezoid width for similarity evaluation\n * {number} [options.widthTop=1] top trapezoid width for similarity evaluation\n * {number} [options.from] from region used for similarity calculation\n * {number} [options.to] to region used for similarity calculation\n */\nexport class Comparator {\n    constructor(options = {}) {\n        this.array1 = [];\n        this.array2 = [];\n        this.setOptions(options);\n    }\n    /*\n       2 formats are allowed:\n       [[x1,x2,...],[y1,y2,...]] or [[x1,y1],[x2,y2], ...]\n      */\n    setOptions(options = {}) {\n        if (typeof options.common === 'string') {\n            if (options.common.toLowerCase() === 'first') {\n                this.common = COMMON_FIRST;\n            }\n            else if (options.common.toLowerCase() === 'second') {\n                this.common = COMMON_SECOND;\n            }\n            else if (options.common.toLowerCase() === 'both') {\n                this.common = COMMON_BOTH;\n            }\n            else {\n                this.common = COMMON_NO;\n            }\n        }\n        else if (options.common === true) {\n            this.common = COMMON_BOTH;\n        }\n        else {\n            this.common = COMMON_NO;\n        }\n        this.trapezoid = options.trapezoid;\n        this.commonFactor = options.commonFactor || this.commonFactor || 4;\n        const { widthBottom = this.widthBottom || 2, widthTop = this.widthTop || 1, from = this.from, to = this.to, } = options;\n        this.setTrapezoid(widthBottom, widthTop);\n        this.setFromTo(from, to);\n    }\n    /**\n     *\n     * @param {Peaks} peaks\n     */\n    setPeaks1(peaks) {\n        this.array1 = checkPeaks(peaks);\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            const extract = extractAndNormalize(this.array1, this.from, this.to);\n            this.array1Extract = extract.data;\n            this.array1ExtractInfo = extract.info;\n        }\n    }\n    /**\n     *\n     * @param {Peaks} peaks\n     */\n    setPeaks2(peaks) {\n        this.array2 = checkPeaks(peaks);\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            const extract = extractAndNormalize(this.array2, this.from, this.to);\n            this.array2Extract = extract.data;\n            this.array2ExtractInfo = extract.info;\n        }\n    }\n    getExtract1() {\n        return this.array1Extract;\n    }\n    getExtract2() {\n        return this.array2Extract;\n    }\n    getExtractInfo1() {\n        return this.array1ExtractInfo;\n    }\n    getExtractInfo2() {\n        return this.array2ExtractInfo;\n    }\n    /**\n     * Set the new bottom and top width of the trapezoid\n     * @param {number} newWidthBottom\n     * @param {number} newWidthTop\n     */\n    setTrapezoid(newWidthBottom, newWidthTop) {\n        this.widthTop = newWidthTop;\n        this.widthBottom = newWidthBottom;\n        this.widthSlope = (this.widthBottom - this.widthTop) / 2;\n        if (this.widthBottom < this.widthTop) {\n            throw new Error('widthBottom has to be larger than widthTop');\n        }\n    }\n    /**\n     * Set the from / to for comparison\n     * @param {number} newFrom - set the new from value\n     * @param {number} newTo - set the new to value\n     * @returns\n     */\n    setFromTo(newFrom, newTo) {\n        if (newFrom === this.from && newTo === this.to)\n            return;\n        this.from = newFrom;\n        this.to = newTo;\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common, this.commonFactor);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            let extract1 = extractAndNormalize(this.array1, this.from, this.to);\n            this.array1Extract = extract1.data;\n            this.array1ExtractInfo = extract1.info;\n            let extract2 = extractAndNormalize(this.array2, this.from, this.to);\n            this.array2Extract = extract2.data;\n            this.array2ExtractInfo = extract2.info;\n        }\n    }\n    /**\n     *\n     * @param {number} x1\n     * @param {number} y1\n     * @param {number} x2\n     * @param {number} y2\n     * @returns\n     */\n    getOverlap(x1, y1, x2, y2) {\n        if (y1 === 0 || y2 === 0)\n            return 0;\n        // TAKE CARE !!! We multiply the diff by 2 !!!\n        const diff = Math.abs(x1 - x2) * 2;\n        if (diff > this.widthBottom)\n            return 0;\n        if (diff <= this.widthTop) {\n            return Math.min(y1, y2);\n        }\n        const maxValue = (Math.max(y1, y2) * (this.widthBottom - diff)) /\n            (this.widthBottom - this.widthTop);\n        return Math.min(y1, y2, maxValue);\n    }\n    /**\n     * This is the old trapezoid similarity\n     * @param {number} x1\n     * @param {number} y1\n     * @param {number} x2\n     * @param {number} y2\n     * @param {number} widthTop\n     * @param {number} widthBottom\n     * @returns\n     */\n    getOverlapTrapezoid(x1, y1, x2, y2, widthTop, widthBottom) {\n        // eslint-disable-next-line no-console\n        console.error('getOverlapTrapezoid should not be used anymore');\n        const factor = 2 / (widthTop + widthBottom); // correction for surface=1\n        if (y1 === 0 || y2 === 0)\n            return 0;\n        if (x1 === x2) {\n            // they have the same position\n            return Math.min(y1, y2);\n        }\n        const diff = Math.abs(x1 - x2);\n        if (diff >= widthBottom)\n            return 0;\n        if (y1 === y2) {\n            // do they have the same height ???\n            // we need to find the common length\n            if (diff <= widthTop) {\n                return ((widthTop + widthBottom) / 2 - diff) * y1 * factor;\n            }\n            else if (diff <= widthBottom) {\n                return ((((((widthBottom - diff) * y1) / 2) * (diff - widthTop)) /\n                    (widthBottom - widthTop)) *\n                    factor);\n            }\n            return 0;\n        }\n        else {\n            // the height are different and not the same position ...\n            // we need to consider only one segment to find its intersection\n            const small = Math.min(y1, y2);\n            const big = Math.max(y1, y2);\n            const targets = [\n                [\n                    [0, 0],\n                    [this.widthSlope, small],\n                ],\n                [\n                    [this.widthSlope, small],\n                    [this.widthSlope + widthTop, small],\n                ],\n                [\n                    [widthTop + this.widthSlope, small],\n                    [widthBottom, 0],\n                ],\n            ];\n            let segment;\n            if ((x1 > x2 && y1 > y2) || (x1 < x2 && y1 < y2)) {\n                segment = [\n                    [diff, 0],\n                    [diff + this.widthSlope, big],\n                ];\n            }\n            else {\n                segment = [\n                    [diff + this.widthSlope, big],\n                    [diff, 0],\n                ];\n            }\n            for (let i = 0; i < 3; i++) {\n                const intersection = getIntersection(targets[i], segment);\n                if (intersection) {\n                    switch (i) {\n                        case 0:\n                            return small - ((diff * intersection.y) / 2) * factor;\n                        case 1: // to simplify ...\n                            //     console.log(\"           \",widthSlope,small,big,intersection.x)\n                            return ((((this.widthSlope * small) / (2 * big)) * small +\n                                (widthTop + this.widthSlope - intersection.x) * small +\n                                (this.widthSlope * small) / 2) *\n                                factor);\n                        case 2:\n                            return (((widthBottom - diff) * intersection.y) / 2) * factor;\n                        default:\n                            throw new Error(`unexpected intersection value: ${i}`);\n                    }\n                }\n            }\n        }\n        return NaN;\n    }\n    /**\n     * This method calculates the total diff. The sum of positive value will yield to overlap\n     * @returns\n     */\n    calculateDiff() {\n        // we need to take 2 pointers\n        // and travel progressively between them ...\n        const newFirst = [\n            this.array1Extract[0].slice(),\n            this.array1Extract[1].slice(),\n        ];\n        const newSecond = [\n            this.array2Extract[0].slice(),\n            this.array2Extract[1].slice(),\n        ];\n        const array1Length = this.array1Extract[0]\n            ? this.array1Extract[0].length\n            : 0;\n        const array2Length = this.array2Extract[0]\n            ? this.array2Extract[0].length\n            : 0;\n        let pos1 = 0;\n        let pos2 = 0;\n        let previous2 = 0;\n        while (pos1 < array1Length) {\n            const diff = newFirst[0][pos1] - this.array2Extract[0][pos2];\n            if (Math.abs(diff) < this.widthBottom) {\n                // there is some overlap\n                let overlap;\n                if (this.trapezoid) {\n                    // old trapezoid overlap similarity\n                    overlap = this.getOverlapTrapezoid(newFirst[0][pos1], newFirst[1][pos1], newSecond[0][pos2], newSecond[1][pos2], this.widthTop, this.widthBottom);\n                }\n                else {\n                    overlap = this.getOverlap(newFirst[0][pos1], newFirst[1][pos1], newSecond[0][pos2], newSecond[1][pos2], this.widthTop, this.widthBottom);\n                }\n                newFirst[1][pos1] -= overlap;\n                newSecond[1][pos2] -= overlap;\n                if (pos2 < array2Length - 1) {\n                    pos2++;\n                }\n                else {\n                    pos1++;\n                    pos2 = previous2;\n                }\n            }\n            else if (diff > 0 && pos2 < array2Length - 1) {\n                pos2++;\n                previous2 = pos2;\n            }\n            else {\n                pos1++;\n                pos2 = previous2;\n            }\n        }\n        return newSecond;\n    }\n    /**\n     * Set the new peaks and return info\n     * @param {Peaks} newPeaks1\n     * @param {Peaks} newPeaks2\n     * @returns\n     */\n    getSimilarity(newPeaks1, newPeaks2) {\n        if (newPeaks1)\n            this.setPeaks1(newPeaks1);\n        if (newPeaks2)\n            this.setPeaks2(newPeaks2);\n        const diff = this.calculateDiff();\n        return {\n            diff,\n            extract1: this.getExtract1(),\n            extract2: this.getExtract2(),\n            extractInfo1: this.getExtractInfo1(),\n            extractInfo2: this.getExtractInfo2(),\n            similarity: calculateOverlapFromDiff(diff),\n            widthBottom: this.widthBottom,\n            widthTop: this.widthTop,\n        };\n    }\n    /**\n     * This works mainly when you have a array1 that is fixed\n     * newPeaks2 have to be normalized ! (sum to 1)\n     * @param {Peaks} newPeaks2\n     * @param {number} from\n     * @param {number} to\n     * @returns\n     */\n    fastSimilarity(newPeaks2, from, to) {\n        this.array1Extract = extract(this.array1, from, to);\n        this.array2Extract = newPeaks2;\n        if (this.common & COMMON_SECOND) {\n            this.array1Extract = getCommonArray(this.array1Extract, this.array2Extract, this.widthBottom);\n        }\n        normalize(this.array1Extract);\n        const diff = this.calculateDiff();\n        return calculateOverlapFromDiff(diff);\n    }\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeakChargeBySimilarity = getPeakChargeBySimilarity;\nconst peaks_similarity_1 = require(\"peaks-similarity\");\n/**\n * @param {object}   [options={}]\n * @param {number}   [options.minCharge=1]\n * @param {number}   [options.maxCharge=10]\n * @param {object}   [options.similarity={}]\n * @param {number}   [options.similarity.widthBottom]\n * @param {number}   [options.similarity.widthTop]\n * @param {object}   [options.similarity.widthFunction] - function called with mass that should return an object width containing top and bottom\n * @param {object}   [options.similarity.zone={}]\n * @param {number}   [options.similarity.zone.low=-0.5] - window shift based on observed monoisotopic mass\n * @param {number}   [options.similarity.zone.high=2.5] - to value for the comparison window\n * @param {string}   [options.similarity.common]\n */\nconst NEUTRON_MASS = 1;\nfunction getPeakChargeBySimilarity(spectrum, targetMass, options = {}) {\n    let { similarity = {}, minCharge = 1, maxCharge = 10 } = options;\n    let { zone = {}, widthFunction } = similarity;\n    let { low = -0.5, high = 2.5 } = zone;\n    if (!spectrum || spectrum.data.x.length === 0) {\n        throw new Error('You need to add an experimental spectrum first using setMassSpectrum');\n    }\n    let width = {\n        bottom: similarity.widthBottom,\n        top: similarity.widthTop,\n    };\n    similarity = structuredClone(similarity);\n    similarity.common = 'second';\n    let experimentalData = spectrum.data;\n    let similarityProcessor = new peaks_similarity_1.Comparator(similarity);\n    similarityProcessor.setPeaks1([experimentalData.x, experimentalData.y]);\n    if (widthFunction && typeof widthFunction === 'string') {\n        // eslint-disable-next-line no-new-func\n        widthFunction = new Function('mass', widthFunction);\n        let checkTopBottom = widthFunction(123);\n        if (!checkTopBottom.bottom || !checkTopBottom.top) {\n            throw new Error('widthFunction should return an object with bottom and top properties');\n        }\n    }\n    let fromCharge = minCharge * maxCharge > 0\n        ? Math.round(Math.min(Math.abs(minCharge), Math.abs(maxCharge)))\n        : 1;\n    let toCharge = Math.round(Math.max(Math.abs(minCharge), Math.abs(maxCharge)));\n    let fromIsotope = Math.ceil(low);\n    let toIsotope = Math.floor(high);\n    let isotopeHeight = 1 / (toIsotope - fromIsotope + 1);\n    let results = [];\n    for (let charge = fromCharge; charge < toCharge + 1; charge++) {\n        let isotopePositions = { x: [], y: [] };\n        for (let isotopePosition = fromIsotope; isotopePosition < toIsotope + 1; isotopePosition++) {\n            isotopePositions.x.push(targetMass + (isotopePosition * NEUTRON_MASS) / charge);\n            isotopePositions.y.push(isotopeHeight);\n        }\n        let from = targetMass + low / Math.abs(charge);\n        let to = targetMass + high / Math.abs(charge);\n        similarityProcessor.setFromTo(from, to);\n        if (widthFunction) {\n            width = widthFunction(targetMass);\n            similarityProcessor.setTrapezoid(width.bottom, width.top);\n        }\n        similarityProcessor.setPeaks2([isotopePositions.x, isotopePositions.y]);\n        let result = similarityProcessor.getSimilarity();\n        results.push({ charge, similarity: result.similarity });\n    }\n    return results.sort((a, b) => b.similarity - a.similarity)[0].charge;\n}\n//# sourceMappingURL=getPeakChargeBySimilarity.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaksWithCharge = getPeaksWithCharge;\n// We can not really take the real value of the neutron because it varies from one element to another.\nconst NEUTRON_MASS = 1;\n/**\n *\n * @param {Array} selectedPeaks\n * @param {Array} allPeaks\n * @param {object} [options={}]\n * @param {number} [options.min=1]\n * @param {number} [options.max=10]\n * @param {number} [options.low=-1]\n * @param {number} [options.high=1]\n * @param {number} [options.precision=30]\n * @returns\n */\nfunction getPeaksWithCharge(selectedPeaks, allPeaks, options = {}) {\n    let { precision = 100, low = -1, high = 1, min: minCharge = 1, max: maxCharge = 10, } = options;\n    let fromCharge = minCharge * maxCharge > 0\n        ? Math.round(Math.min(Math.abs(minCharge), Math.abs(maxCharge)))\n        : 1;\n    let toCharge = Math.round(Math.max(Math.abs(minCharge), Math.abs(maxCharge)));\n    let fromIsotope = Math.ceil(low);\n    let toIsotope = Math.floor(high);\n    let numberIsotopes = toIsotope - fromIsotope + 1;\n    let isotopeIntensity = 1 / numberIsotopes;\n    let fromIndex = 0;\n    let localFromIndex = 0;\n    let localToIndex = 0;\n    const peaksWithCharge = [];\n    for (const peak of selectedPeaks) {\n        let targetMass = peak.x;\n        localFromIndex = fromIndex;\n        let bestCharge = fromCharge;\n        let bestChargeMatch = 0;\n        for (let charge = fromCharge; charge < toCharge + 1; charge++) {\n            let theoreticalPositions = {\n                x: [],\n                y: new Array(numberIsotopes).fill(isotopeIntensity),\n            };\n            let massRange = precision * 1e-6 * targetMass;\n            for (let isotopePosition = fromIsotope; isotopePosition < toIsotope + 1; isotopePosition++) {\n                theoreticalPositions.x.push(targetMass + (isotopePosition * NEUTRON_MASS) / charge);\n            }\n            let fromMass = targetMass + low / Math.abs(charge) - massRange;\n            let toMass = targetMass + high / Math.abs(charge) + massRange;\n            if (charge === 1) {\n                // we may move the fromIndex\n                while (allPeaks[fromIndex].x < fromMass) {\n                    fromIndex++;\n                }\n            }\n            /*\n             * Find the from / to index for the specific peak and specific charge\n             */\n            while (allPeaks[localFromIndex].x < fromMass) {\n                localFromIndex++;\n            }\n            localToIndex = localFromIndex;\n            let localHeightSum = 0;\n            while (localToIndex < allPeaks.length &&\n                allPeaks[localToIndex].x < toMass) {\n                localHeightSum += allPeaks[localToIndex].y;\n                localToIndex++;\n            }\n            localToIndex--;\n            //  console.log({ localFromIndex, localToIndex });\n            /*\n              Calculate the overlap for a specific peak and specific charge\n            */\n            let currentTheoreticalPosition = 0;\n            let theoreticalMaxValue = 1 / numberIsotopes;\n            let totalMatch = 0;\n            for (let index = localFromIndex; index <= localToIndex; index++) {\n                let minMass = theoreticalPositions.x[currentTheoreticalPosition] -\n                    massRange / charge;\n                let maxMass = theoreticalPositions.x[currentTheoreticalPosition] +\n                    massRange / charge;\n                while (maxMass < allPeaks[index].x) {\n                    currentTheoreticalPosition++;\n                    theoreticalMaxValue = 1 / numberIsotopes;\n                    minMass =\n                        theoreticalPositions.x[currentTheoreticalPosition] -\n                            massRange / charge;\n                    maxMass =\n                        theoreticalPositions.x[currentTheoreticalPosition] +\n                            massRange / charge;\n                }\n                while (index < allPeaks.length && allPeaks[index].x < minMass) {\n                    index++;\n                }\n                //    console.log({ index, minMass, maxMass, massRange, localHeightSum });\n                if (index < allPeaks.length && allPeaks[index].x <= maxMass) {\n                    while (index < allPeaks.length && allPeaks[index].x <= maxMass) {\n                        if (allPeaks[index].x >= minMass && allPeaks[index].x <= maxMass) {\n                            let value = allPeaks[index].y / localHeightSum;\n                            //      console.log({ theoreticalMaxValue, value });\n                            value = Math.min(theoreticalMaxValue, value);\n                            theoreticalMaxValue -= value;\n                            totalMatch += value;\n                        }\n                        index++;\n                    }\n                    index--;\n                }\n                if (totalMatch > bestChargeMatch) {\n                    bestCharge = charge;\n                    bestChargeMatch = totalMatch;\n                }\n            }\n        }\n        peaksWithCharge.push({ ...peak, charge: bestCharge });\n    }\n    return peaksWithCharge;\n}\n//# sourceMappingURL=getPeaksWithCharge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isContinuous = isContinuous;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * When a spectrum is continous ?\n * - has more than 100 points\n * - deltaX change can not be more than a factor 2\n * - deltaX may not be larger than 0.1\n * - if y is zero it does not count\n * @param {object} spectrum\n * @param {object} [options={}]\n * @param {number} [options.minLength=100]\n * @param {number} [options.relativeHeightThreshold=0.001] // Under this value the\n * @param {number} [options.maxDeltaRatio=3]\n */\nfunction isContinuous(spectrum, options = {}) {\n    const { minLength = 100, maxDeltaRatio = 3, relativeHeightThreshold = 0.001, } = options;\n    const minHeight = (0, ml_spectra_processing_1.xMaxValue)(spectrum.data.y) * relativeHeightThreshold;\n    const minRadio = 1 / maxDeltaRatio;\n    const maxRatio = 1 * maxDeltaRatio;\n    if (spectrum.continuous === undefined) {\n        let xs = spectrum.data.x;\n        let ys = spectrum.data.y;\n        if (xs.length < minLength) {\n            spectrum.continuous = false;\n        }\n        else {\n            let previousDelta = xs[1] - xs[0];\n            spectrum.continuous = true;\n            let success = 0;\n            let failed = 0;\n            for (let i = 0; i < xs.length - 1; i++) {\n                if (ys[i] < minHeight || ys[i + 1] < minHeight) {\n                    previousDelta = 0;\n                    continue;\n                }\n                let delta = xs[i + 1] - xs[i];\n                if (previousDelta) {\n                    let ratio = delta / previousDelta;\n                    if ((Math.abs(delta) > 0.1 || ratio < minRadio || ratio > maxRatio) &&\n                        ys[i] !== 0 &&\n                        ys[i + 1] !== 0) {\n                        failed++;\n                    }\n                    else {\n                        success++;\n                    }\n                }\n                previousDelta = delta;\n            }\n            if (success / failed < 10) {\n                spectrum.continuous = false;\n            }\n        }\n    }\n    return spectrum.continuous;\n}\n//# sourceMappingURL=isContinuous.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.peakPicking = peakPicking;\nconst ml_gsd_1 = require(\"ml-gsd\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array of peaks\n * @param {import('./Spectrum')} spectrum - array of all the peaks\n * @returns {array}\n */\nfunction peakPicking(spectrum) {\n    if (!spectrum.peaks || spectrum.peaks.length === 0) {\n        spectrum.peaks = [];\n        const keys = Object.keys(spectrum.data).filter((key) => key !== 'x' && key !== 'y');\n        if (spectrum.isContinuous()) {\n            // some experimental data are really problematic and we need to add this line\n            const data = (0, ml_spectra_processing_1.xyEnsureGrowingX)(spectrum.data);\n            const gsdPeaks = (0, ml_gsd_1.gsd)(data, {\n                minMaxRatio: spectrum.options.threshold || 0.00025, // Threshold to determine if a given peak should be considered as a noise\n                realTopDetection: true,\n                smoothY: false,\n                sgOptions: { windowSize: 7, polynomial: 3 },\n            });\n            for (let gsdPeak of gsdPeaks) {\n                const peak = { x: gsdPeak.x, y: gsdPeak.y, width: gsdPeak.width };\n                for (let key of keys) {\n                    peak[key] = spectrum.data[key][gsdPeak.index];\n                }\n                spectrum.peaks.push(peak);\n            }\n        }\n        else {\n            spectrum.peaks = [];\n            let data = spectrum.data;\n            for (let i = 0; i < data.x.length; i++) {\n                const peak = {\n                    x: data.x[i],\n                    y: data.y[i],\n                    width: 0,\n                };\n                for (let key of keys) {\n                    peak[key] = spectrum.data[key][i];\n                }\n                spectrum.peaks.push(peak);\n            }\n        }\n    }\n    return spectrum.peaks;\n}\n//# sourceMappingURL=peakPicking.js.map","import { BaseRegression, checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\n/**\n * Class representing simple linear regression.\n * The regression uses OLS to calculate intercept and slope.\n */\nexport class SimpleLinearRegression extends BaseRegression {\n    /**\n     * @param x - explanatory variable\n     * @param y - response variable\n     */\n    constructor(x, y) {\n        super();\n        // @ts-expect-error internal use of the constructor, from `this.load`\n        if (x === true) {\n            // @ts-expect-error internal use of the constructor, from `this.load`\n            const yObj = y;\n            this.slope = yObj.slope;\n            this.intercept = yObj.intercept;\n            this.coefficients = [yObj.intercept, yObj.slope];\n        }\n        else {\n            checkArrayLength(x, y);\n            const result = regress(x, y);\n            this.slope = result.slope;\n            this.intercept = result.intercept;\n            this.coefficients = [result.intercept, result.slope];\n        }\n    }\n    /**\n     * Get the parameters and model name in JSON format\n     * @returns\n     */\n    toJSON() {\n        return {\n            name: 'simpleLinearRegression',\n            slope: this.slope,\n            intercept: this.intercept,\n        };\n    }\n    _predict(x) {\n        return this.slope * x + this.intercept;\n    }\n    /**\n     * Finds x for the given y value.\n     * @param y - response variable value\n     * @returns - x value\n     */\n    computeX(y) {\n        return (y - this.intercept) / this.slope;\n    }\n    /**\n     * Strings the linear function in the form 'f(x) = ax + b'\n     * @param precision - number of significant figures.\n     * @returns\n     */\n    toString(precision) {\n        let result = 'f(x) = ';\n        if (this.slope !== 0) {\n            const xFactor = maybeToPrecision(this.slope, precision);\n            result += `${xFactor === '1' ? '' : `${xFactor} * `}x`;\n            if (this.intercept !== 0) {\n                const absIntercept = Math.abs(this.intercept);\n                const operator = absIntercept === this.intercept ? '+' : '-';\n                result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n            }\n        }\n        else {\n            result += maybeToPrecision(this.intercept, precision);\n        }\n        return result;\n    }\n    /**\n     * Strings the linear function in the form 'f(x) = ax + b'\n     * @param precision - number of significant figures.\n     * @returns\n     */\n    toLaTeX(precision) {\n        return this.toString(precision);\n    }\n    /**\n     * Class instance from a JSON Object.\n     * @param json\n     * @returns\n     */\n    static load(json) {\n        if (json.name !== 'simpleLinearRegression') {\n            throw new TypeError('not a SLR model');\n        }\n        // @ts-expect-error internal use of the constructor\n        return new SimpleLinearRegression(true, json);\n    }\n}\n/**\n * Internal  function.\n * It determines the parameters (slope, intercept) of the line that best fit the `x,y` vector-data (simple linear regression).\n * @param x - explanatory variable\n * @param y - response variable\n * @returns - slope and intercept of the best fit line\n */\nfunction regress(x, y) {\n    const n = x.length;\n    let xSum = 0;\n    let ySum = 0;\n    let xSquared = 0;\n    let xY = 0;\n    for (let i = 0; i < n; i++) {\n        xSum += x[i];\n        ySum += y[i];\n        xSquared += x[i] * x[i];\n        xY += x[i] * y[i];\n    }\n    const numerator = n * xY - xSum * ySum;\n    const slope = numerator / (n * xSquared - xSum * xSum);\n    return {\n        slope,\n        intercept: (1 / n) * ySum - slope * (1 / n) * xSum,\n    };\n}\n//# sourceMappingURL=index.js.map","import {\n  BaseRegression,\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\nimport { SimpleLinearRegression } from 'ml-regression-simple-linear';\n\nexport class PowerRegression extends BaseRegression {\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      // reloading model\n      this.A = y.A;\n      this.B = y.B;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y);\n    }\n  }\n\n  _predict(newInputs) {\n    return this.A * newInputs ** this.B;\n  }\n\n  toJSON() {\n    return {\n      name: 'powerRegression',\n      A: this.A,\n      B: this.B,\n    };\n  }\n\n  toString(precision) {\n    return `f(x) = ${maybeToPrecision(\n      this.A,\n      precision,\n    )} * x^${maybeToPrecision(this.B, precision)}`;\n  }\n\n  toLaTeX(precision) {\n    let latex = '';\n    if (this.B >= 0) {\n      latex = `f(x) = ${maybeToPrecision(\n        this.A,\n        precision,\n      )}x^{${maybeToPrecision(this.B, precision)}}`;\n    } else {\n      latex = `f(x) = \\\\frac{${maybeToPrecision(\n        this.A,\n        precision,\n      )}}{x^{${maybeToPrecision(-this.B, precision)}}}`;\n    }\n    latex = latex.replace(/e([+-]?[0-9]+)/g, 'e^{$1}');\n    return latex;\n  }\n\n  static load(json) {\n    if (json.name !== 'powerRegression') {\n      throw new TypeError('not a power regression model');\n    }\n    return new PowerRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y) {\n  const n = x.length;\n  const xl = new Array(n);\n  const yl = new Array(n);\n  for (let i = 0; i < n; i++) {\n    xl[i] = Math.log(x[i]);\n    yl[i] = Math.log(y[i]);\n  }\n\n  const linear = new SimpleLinearRegression(xl, yl);\n  pr.A = Math.exp(linear.intercept);\n  pr.B = linear.slope;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.peaksWidth = peaksWidth;\nconst ml_regression_power_1 = require(\"ml-regression-power\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nfunction peaksWidth(peaks) {\n    let xs = peaks.map((peak) => peak.x);\n    let widths = peaks.map((peak) => peak.width);\n    if (xs.length < 2) {\n        throw new Error(`peaksWidth: not enough peaks (less than 2) for automatic width calculation: ${xs.length}`);\n    }\n    let regression = new ml_regression_power_1.PowerRegression(xs, widths);\n    if (Number.isNaN(regression.A) || Number.isNaN(regression.B)) {\n        throw new Error('peaksWidth: can not calculate regression');\n    }\n    let from = (0, ml_spectra_processing_1.xMinValue)(xs);\n    let to = (0, ml_spectra_processing_1.xMaxValue)(xs);\n    let regressionChart = { x: [], y: [] };\n    for (let x = from; x <= to; x += (to - from) / 1000) {\n        regressionChart.x.push(x);\n        regressionChart.y.push(regression.predict(x));\n    }\n    return {\n        widths: {\n            x: xs,\n            y: widths,\n        },\n        fit: regressionChart,\n        score: regression.score(xs, widths),\n        predictFct: regression.predict.bind(regression),\n        tex: regression.toLaTeX(3),\n        A: regression.A,\n        B: regression.B,\n        predictFctString: `${regression.A} * mass ** ${regression.B}`,\n    };\n}\n//# sourceMappingURL=peaksWidth.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Spectrum = void 0;\nexports.fromPeaks = fromPeaks;\nexports.fromText = fromText;\nconst is_any_array_1 = require(\"is-any-array\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst xy_parser_1 = require(\"xy-parser\");\nconst getBestPeaks_js_1 = require(\"./getBestPeaks.js\");\nconst getFragmentPeaks_js_1 = require(\"./getFragmentPeaks.js\");\nconst getMassRemainder_js_1 = require(\"./getMassRemainder.js\");\nconst getPeakChargeBySimilarity_js_1 = require(\"./getPeakChargeBySimilarity.js\");\nconst getPeaks_js_1 = require(\"./getPeaks.js\");\nconst getPeaksWithCharge_js_1 = require(\"./getPeaksWithCharge.js\");\nconst isContinuous_js_1 = require(\"./isContinuous.js\");\nconst peakPicking_js_1 = require(\"./peakPicking.js\");\nconst peaksWidth_js_1 = require(\"./peaksWidth.js\");\nconst defaultData = { x: [], y: [] };\n/**\n * Class dealing with mass spectra and peak picking\n */\nclass Spectrum {\n    /**\n     *\n     * @param {import('cheminfo-types').DataXY} data\n     * @param {object} [options={}]\n     * @param {number} [options.threshold=0.00025]\n     */\n    constructor(data = defaultData, options = {}) {\n        if (typeof data !== 'object' ||\n            !(0, is_any_array_1.isAnyArray)(data.x) ||\n            !(0, is_any_array_1.isAnyArray)(data.y)) {\n            throw new TypeError('Spectrum data must be an object with x:[], y:[]');\n        }\n        this.data = { ...data };\n        this.options = { threshold: 0.00025, ...options };\n        Object.defineProperty(this.data, 'xOriginal', {\n            enumerable: false,\n            writable: true,\n        });\n        if (this.data && this.data.x.length > 0) {\n            this.info = {\n                minX: (0, ml_spectra_processing_1.xMinValue)(this.data.x),\n                maxX: (0, ml_spectra_processing_1.xMaxValue)(this.data.x),\n                minY: (0, ml_spectra_processing_1.xMinValue)(this.data.y),\n                maxY: (0, ml_spectra_processing_1.xMaxValue)(this.data.y),\n            };\n        }\n        else {\n            this.info = {\n                minX: Number.NaN,\n                maxX: Number.NaN,\n                minY: Number.NaN,\n                maxY: Number.NaN,\n            };\n        }\n        this.cache = {};\n        /**\n         * someProperty is an example property that is set to `true`\n         * @type {array}\n         * @public\n         */\n        this.peaks = [];\n    }\n    minMaxX() {\n        return (0, ml_spectra_processing_1.xMinMaxValues)(this.data.x);\n    }\n    /**\n     *\n     * @param {import('ml-spectra-processing').XYMaxYOptions} options\n     * @returns\n     */\n    maxY(options) {\n        return (0, ml_spectra_processing_1.xyMaxY)(this.data, options);\n    }\n    sumY() {\n        if (!this.cache.sumY) {\n            this.cache.sumY = (0, ml_spectra_processing_1.xSum)(this.data.y);\n        }\n        return this.cache.sumY;\n    }\n    scaleY(intensity = 1) {\n        this.data.y = Array.from((0, ml_spectra_processing_1.xNormed)(this.data.y, { value: intensity, algorithm: 'max' }));\n        return this;\n    }\n    rescaleX(callback) {\n        this.ensureOriginalX();\n        for (let i = 0; i < this.data.x.length; i++) {\n            this.data.x[i] = callback(this.data.xOriginal[i]);\n        }\n        return this;\n    }\n    ensureOriginalX() {\n        if (!this.data.xOriginal) {\n            this.data.xOriginal = this.data.x.slice(0);\n        }\n    }\n    normedY(total = 1) {\n        this.data.y = (0, ml_spectra_processing_1.xNormed)(this.data.y, { value: total });\n        return this;\n    }\n    peakPicking() {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return this.peaks;\n    }\n    peaksWidth() {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, peaksWidth_js_1.peaksWidth)(this.peaks);\n    }\n    getBestPeaks(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getBestPeaks_js_1.getBestPeaks)(this.peaks, options);\n    }\n    /**\n     * This is a very intensive function so better to calculate it on a selection of peaks\n     * @param {Array} selectedPeaks\n     * @param {object} [options={}]\n     * @param {number} [options.min=1]\n     * @param {number} [options.max=10]\n     * @param {number} [options.low=-1]\n     * @param {number} [options.high=1]\n     * @param {number} [options.precision=30]\n     * @returns\n     */\n    getSelectedPeaksWithCharge(selectedPeaks, options) {\n        return (0, getPeaksWithCharge_js_1.getPeaksWithCharge)(selectedPeaks, this.peaks, options);\n    }\n    getPeakChargeBySimilarity(targetMass, options) {\n        return (0, getPeakChargeBySimilarity_js_1.getPeakChargeBySimilarity)(this, targetMass, options);\n    }\n    getPeaks(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getPeaks_js_1.getPeaks)(this.peaks, options);\n    }\n    getPeaksAsDataXY(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        const peaks = (0, getPeaks_js_1.getPeaks)(this.peaks, options);\n        return {\n            x: peaks.map((peak) => peak.x),\n            y: peaks.map((peak) => peak.y),\n        };\n    }\n    /**\n     * Returns also peaks possible for a specific molecular formula\n     * @example\n     *  const spectrum = new Spectrum({x:[], y:[]})\n     *  await spectrum.getFragmentPeaks();\n     * @param {string} mf\n     * @param {object} options\n     * @returns\n     */\n    getFragmentPeaksFct(mf, options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getFragmentPeaks_js_1.getFragmentPeaks)(this.peaks, mf, options);\n    }\n    isContinuous() {\n        return (0, isContinuous_js_1.isContinuous)(this);\n    }\n    /**\n     * Remove an integer number of time the specifiedd monoisotopic mass\n     * Mass remainder analysis (MARA): https://doi.org/10.1021/acs.analchem.7b04730\n     */\n    getMassRemainderFct(mass, options = {}) {\n        return (0, getMassRemainder_js_1.getMassRemainder)(this.data, mass, options);\n    }\n}\nexports.Spectrum = Spectrum;\nfunction fromPeaks(peaks) {\n    if (peaks.length === 0)\n        return new Spectrum();\n    const data = {};\n    for (let key of Object.keys(peaks[0])) {\n        data[key] = peaks.map((peak) => peak[key]);\n    }\n    return new Spectrum(data);\n}\nfunction fromText(text, options) {\n    const data = (0, xy_parser_1.parseXY)(text);\n    return new Spectrum(data, options);\n}\n//# sourceMappingURL=Spectrum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MSComparator = void 0;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nclass MSComparator {\n    /**\n     * Create a class that will be able to get the similarity between 2 spectra\n     * The similarity is based on 'cosine' similarity. The goal is 2 prepare 2 vectors\n     * on which the similarity is calculated.\n     * The vectors are created by taking the mass and the intensity of the peaks.\n     * @param {object} [options={}]\n     * @param {number} [options.nbPeaks] - Before comparing spectra how many peaks should be kept\n     * @param {number} [options.minNbCommonPeaks] - Minimum number of peaks in common to consider any similarity\n     * @param {number} [options.minIntensity] - What is the minimal relative intensity to keep a peak\n     * @param {number} [options.massPower=3] - High power will give more weight to the mass. If you would prefer to observe fragments you should use a number less than 1\n     * @param {number} [options.intensityPower=0.6] - How important is the intensity. By default we don't give to much importance to it\n     * @param {number[]} [options.selectedMasses] - List of allowed masses.\n     * @param {number|Function} [options.delta=0.1] - Tolerance in Da (u) to consider 2 peaks as aligned. If a function is provided it will be called with the mass of the peak\n     */\n    constructor(options = {}) {\n        this.options = {\n            massPower: 3,\n            intensityPower: 0.6,\n            delta: 0.1,\n            ...options,\n        };\n        this.cache = new WeakMap();\n    }\n    /**\n     * Get the similarity between a spectrum and a list of masses.\n     * The main issue is that we don't have the intensity of the peaks.\n     * So we will use the intensity of the closest peak.\n     * @param {import('cheminfo-types').DataXY} dataXY\n     * @param {number[]} masses\n     */\n    getSimilarityToMasses(dataXY, masses) {\n        const data1 = normalizeAndCacheData(this.cache, dataXY, this.options);\n        const data2 = {\n            x: Float64Array.from(masses),\n            y: new Float64Array(masses.length).fill(1),\n        };\n        let aligned;\n        if (this.options.selectedMasses?.length > 0) {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([\n                data1,\n                data2,\n                {\n                    // this allows to force the selection of some specific masses\n                    x: Float64Array.from(this.options.selectedMasses),\n                    y: new Float64Array(this.options.selectedMasses.length).fill(1),\n                },\n            ], {\n                delta: this.options.delta,\n                requiredY: true,\n            });\n        }\n        else {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([data1, data2], {\n                delta: this.options.delta,\n            });\n        }\n        // because we don't have any idea of the intensity we will use the intensity of the experimental peak\n        // and otherwise we ignore the theoretical peak\n        for (let i = 0; i < aligned.ys[0].length; i++) {\n            if (aligned.ys[0][i] === 0) {\n                aligned.ys[1][i] = 0;\n            }\n            if (aligned.ys[0][i] > 0 && aligned.ys[1][i] !== 0) {\n                aligned.ys[1][i] = aligned.ys[0][i];\n            }\n        }\n        return returnSimilarity(aligned, this.options);\n    }\n    /**\n     *\n     * @param {import('cheminfo-types').DataXY} dataXY1\n     * @param {import('cheminfo-types').DataXY} dataXY2\n     */\n    getSimilarity(dataXY1, dataXY2) {\n        const data1 = normalizeAndCacheData(this.cache, dataXY1, this.options);\n        const data2 = normalizeAndCacheData(this.cache, dataXY2, this.options);\n        let aligned;\n        if (this.options.selectedMasses?.length > 0) {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([\n                data1,\n                data2,\n                {\n                    // this allows to force the selection of some specific masses\n                    x: Float64Array.from(this.options.selectedMasses),\n                    y: new Float64Array(this.options.selectedMasses.length).fill(1),\n                },\n            ], {\n                delta: this.options.delta,\n                requiredY: true,\n            });\n        }\n        else {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([data1, data2], {\n                delta: this.options.delta,\n            });\n        }\n        return returnSimilarity(aligned, this.options);\n    }\n}\nexports.MSComparator = MSComparator;\n/**\n *\n * @param {WeakMap} cache\n * @param {import('cheminfo-types').DataXY} dataXY\n * @param {object} [options={}]\n * @param {number} [options.nbPeaks]\n * @param {number} [options.minIntensity]\n */\nfunction normalizeAndCacheData(cache, dataXY, options = {}) {\n    const { nbPeaks, minIntensity } = options;\n    if (cache.has(dataXY))\n        return cache.get(dataXY);\n    let data = { ...dataXY };\n    if ((0, ml_spectra_processing_1.xIsMonotonic)(data.x) !== 1) {\n        data = (0, ml_spectra_processing_1.xySortX)(data);\n    }\n    if (minIntensity !== undefined) {\n        data = (0, ml_spectra_processing_1.xyFilterMinYValue)(data, minIntensity);\n    }\n    if (nbPeaks !== undefined) {\n        data = (0, ml_spectra_processing_1.xyFilterTopYValues)(data, nbPeaks);\n    }\n    cache.set(dataXY, data);\n    return data;\n}\n/**\n *\n * @param {*} aligned\n * @param {object} [options={}]\n * @param {number} [options.massPower]\n * @param {number} [options.intensityPower]\n * @param {number} [options.minNbCommonPeaks]\n\n * @returns\n */\nfunction returnSimilarity(aligned, options = {}) {\n    const { massPower, intensityPower, minNbCommonPeaks } = options;\n    let nbCommonPeaks = 0;\n    let nbPeaks1 = 0;\n    let nbPeaks2 = 0;\n    for (let i = 0; i < aligned.ys[0].length; i++) {\n        if (aligned.ys[0][i] !== 0) {\n            nbPeaks1++;\n        }\n        if (aligned.ys[1][i] !== 0) {\n            nbPeaks2++;\n        }\n        if (aligned.ys[0][i] !== 0 && aligned.ys[1][i] !== 0) {\n            nbCommonPeaks++;\n        }\n    }\n    if (nbCommonPeaks === 0 ||\n        (minNbCommonPeaks && nbCommonPeaks < minNbCommonPeaks)) {\n        return {\n            nbCommonPeaks,\n            nbPeaks1,\n            nbPeaks2,\n            tanimoto: 0,\n            cosine: 0,\n        };\n    }\n    const vector1 = new Float64Array(aligned.x.length);\n    const vector2 = new Float64Array(aligned.x.length);\n    for (let i = 0; i < aligned.x.length; i++) {\n        vector1[i] = aligned.x[i] ** massPower * aligned.ys[0][i] ** intensityPower;\n        vector2[i] = aligned.x[i] ** massPower * aligned.ys[1][i] ** intensityPower;\n    }\n    return {\n        nbCommonPeaks,\n        nbPeaks1,\n        nbPeaks2,\n        tanimoto: nbCommonPeaks / (nbPeaks1 + nbPeaks2 - nbCommonPeaks),\n        cosine: cosineSimilarity(vector1, vector2),\n    };\n}\n/**\n * Returns the average of cosine distances between vectors a and b\n * Copied from https://github.com/mljs/distance/blob/0b15acd6476413f4111cb4852ca1bec9edaa2805/src/similarities/cosine.ts\n * @param a {import('cheminfo-types').NumberArray} - first vector\n * @param b {import('cheminfo-types').NumberArray} - second vector\n * @returns {number} - cosine similarity\n */\nfunction cosineSimilarity(a, b) {\n    let p = 0;\n    let p2 = 0;\n    let q2 = 0;\n    for (let i = 0; i < a.length; i++) {\n        p += a[i] * b[i];\n        p2 += a[i] * a[i];\n        q2 += b[i] * b[i];\n    }\n    return p / (Math.sqrt(p2) * Math.sqrt(q2));\n}\n//# sourceMappingURL=MSComparator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaksAnnotation = getPeaksAnnotation;\nconst fromMonoisotopicMass_1 = require(\"../from/fromMonoisotopicMass\");\n/**\n *\n * @param {array} bestPeaks\n * @param {object} [options={}]\n * @param {number} [options.numberDigits=5]\n * @param {number} [options.numberMFs=0]\n * @param {boolean} [options.showMF=false]\n * @param {array} [options.mfColors={}]\n * @param {number} [options.charge=1]\n * @param {number} [options.shift=0]\n * @param {object} [options.mfPrefs]\n * @param {number} [options.displayCharge=true]\n * @param {number} [options.displayProperties=[]] Array of properties name to display\n * @returns {Promise}\n */\nasync function getPeaksAnnotation(bestPeaks, options = {}) {\n    let { numberDigits = 5, shift = 0, showMF = false, numberMFs = 0, charge = 1, mfPrefs = {}, displayCharge = true, displayProperties = [], mfColors = [\n        { limit: 3, color: 'green' },\n        { limit: 20, color: 'lightgreen' },\n        { limit: 50, color: 'lightorange' },\n    ], } = options;\n    if (showMF && !numberMFs)\n        numberMFs = 1;\n    let annotations = [];\n    bestPeaks.sort((a, b) => (a.close ? -1 : b.close ? 1 : 0));\n    for (let peak of bestPeaks) {\n        let textLine = 0;\n        let annotation;\n        if (peak.close) {\n            annotation = {\n                type: 'line',\n                _highlight: peak._highlight,\n                info: peak,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-5px',\n                        x: peak.x,\n                    },\n                    {\n                        y: peak.y,\n                        dy: '-15px',\n                        x: peak.x,\n                    },\n                ],\n            };\n            annotations.push(annotation);\n            annotation = {\n                type: 'ellipse',\n                _highlight: peak._highlight,\n                info: peak,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-15px',\n                        x: peak.x,\n                    },\n                ],\n                props: {\n                    rx: '3px',\n                    ry: '3px',\n                    fillOpacity: 0.3,\n                },\n            };\n        }\n        else {\n            annotation = {\n                type: 'line',\n                _highlight: peak._highlight,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-5px',\n                        x: peak.x,\n                    },\n                    {\n                        y: peak.y,\n                        dy: '-25px',\n                        x: peak.x,\n                    },\n                ],\n                labels: [\n                    {\n                        text: (peak.x + shift).toFixed(numberDigits),\n                        color: 'red',\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    },\n                ],\n            };\n            if (displayCharge && peak.charge !== undefined) {\n                annotation.labels.push({\n                    text: `Z:${peak.charge}`,\n                    color: 'grey',\n                    position: {\n                        x: peak.x,\n                        y: peak.y,\n                        dy: '-4px',\n                        dx: '2px',\n                    },\n                });\n            }\n            let mfs = [];\n            if (numberMFs) {\n                // we have 2 cases. Either there is a shift and we deal with differences\n                // otherwise it is absolute\n                // if there is a shift we consider only a neutral loss and the parameter charge is important\n                // we also check that the selected peak (for relative mass) is not the current peak\n                if (shift && Math.abs(peak.x + shift) > Number.EPSILON) {\n                    // neutral loss\n                    let currentMfPrefs = {\n                        ...mfPrefs,\n                        allowNeutral: true,\n                        ionizations: '',\n                    };\n                    // we need to deal with the precision and increase it\n                    currentMfPrefs.precision =\n                        (currentMfPrefs.precision / Math.max(Math.abs(peak.x + shift), 1)) *\n                            peak.x;\n                    ({ mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(Math.abs((peak.x + shift) * charge), currentMfPrefs));\n                }\n                else {\n                    ({ mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(Math.abs(peak.x * charge), mfPrefs));\n                }\n                let numberOfMFS = Math.min(mfs.length, numberMFs);\n                for (let i = 0; i < numberOfMFS; i++) {\n                    let mf = mfs[i];\n                    let ppm = shift ? (mf.ms.ppm / shift) * mfs[0].ms.em : mf.ms.ppm;\n                    annotation.labels.push({\n                        text: mf.mf,\n                        color: getColor(mfColors, Math.abs(ppm)),\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    });\n                }\n            }\n            if (displayProperties.length > 0) {\n                for (let property of displayProperties) {\n                    annotation.labels.push({\n                        text: peak[property],\n                        color: 'red',\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    });\n                }\n            }\n        }\n        annotations.push(annotation);\n    }\n    return annotations;\n}\nfunction getColor(colors, value) {\n    for (let color of colors) {\n        if (value < color.limit)\n            return color.color;\n    }\n    return 'lightgrey';\n}\n//# sourceMappingURL=getPeaksAnnotation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsGraph = void 0;\nconst getPeaksAnnotation_js_1 = require(\"./getPeaksAnnotation.js\");\nexports.JsGraph = {\n    getPeaksAnnotation: getPeaksAnnotation_js_1.getPeaksAnnotation,\n};\n//# sourceMappingURL=index.js.map","/**\n * Creates annotations for jsgraph that allows to display the result of peak picking\n * @param peaks - Array of peaks to create annotations for\n * @param options - Configuration options for the annotations\n * @returns Array of annotations\n */\nexport function getAnnotations(peaks, options = {}) {\n    const { fillColor = 'green', strokeColor = 'red', creationFct } = options;\n    const annotations = peaks.map((peak) => {\n        const annotation = {\n            line: 1,\n            type: 'rect',\n            strokeColor,\n            strokeWidth: 0,\n            fillColor,\n        };\n        if (creationFct) {\n            creationFct(annotation, peak);\n        }\n        annotationPeak(annotation, peak, options);\n        return annotation;\n    });\n    return annotations;\n}\nfunction annotationPeak(annotation, peak, options = {}) {\n    const { showAssignment = true, showIntensity = true, showMass = true, } = options;\n    const labels = [];\n    let line = 0;\n    const shiftY = -3;\n    if (showMass) {\n        labels.push({\n            text: `m/z: ${peak.mass?.toFixed(0)}`,\n            size: '18px',\n            anchor: 'left',\n            color: 'green',\n            position: {\n                x: peak.mass,\n                y: peak.intensity,\n                dy: `${shiftY - line * 14}px`,\n                dx: '3px',\n            },\n        });\n        line++;\n    }\n    if (showIntensity) {\n        labels.push({\n            text: `${peak.intensity?.toFixed(0)}%`,\n            size: '18px',\n            anchor: 'left',\n            color: 'green',\n            position: {\n                x: peak.mass,\n                y: peak.intensity,\n                dy: `${shiftY - line * 14}px`,\n                dx: '3px',\n            },\n        });\n        line++;\n    }\n    if (showAssignment && peak.assignment) {\n        labels.push({\n            text: peak.assignment,\n            size: '18px',\n            anchor: 'middle',\n            color: 'red',\n            position: {\n                x: peak.mass,\n                y: peak.intensity,\n                dy: `${shiftY - 3 - line * 14}px`,\n            },\n        });\n        // line++; // it it the last one we do not increase the line number\n    }\n    annotation.labels = labels;\n    annotation.position = [\n        {\n            x: peak.mass,\n            y: peak.intensity,\n            dy: '-1px',\n            dx: '-1px',\n        },\n        {\n            x: peak.mass,\n            y: peak.intensity,\n            dy: `-${3 + line * 14}px`,\n            dx: '1px',\n        },\n    ];\n}\n//# sourceMappingURL=getAnnotations.js.map","import { xNormed } from 'ml-spectra-processing';\n/**\n * We will force maxY to 100\n * @param variables - The variables object containing x and y data\n * @returns - The modified variables object with y data normalized\n */\nexport function spectrumCallback(variables) {\n    variables.y.data = xNormed(variables.y.data, {\n        algorithm: 'max',\n        value: 100,\n    });\n    return variables;\n}\n//# sourceMappingURL=spectrumCallback.js.map","import { Analysis } from 'common-spectrum';\nimport { ensureString } from 'ensure-string';\nimport { parseXYAndKeepInfo } from 'xy-parser';\nimport { spectrumCallback } from \"./utils/spectrumCallback.js\";\nexport function fromText(blob, options = {}) {\n    const text = ensureString(blob);\n    const { title } = options;\n    const { data, info } = parseXYAndKeepInfo(text, {\n        bestGuess: true,\n        ...options,\n    });\n    const spectrum = {\n        x: {\n            data: data.x,\n            units: 'm/z',\n            label: 'm/z',\n        },\n        y: {\n            data: data.y,\n            units: '',\n            label: 'Relative intensity',\n        },\n    };\n    const meta = {};\n    let index = 1;\n    for (const item of info) {\n        meta[`Info ${index++}`] = item.value;\n    }\n    const analysis = new Analysis({\n        spectrumCallback,\n    });\n    analysis.pushSpectrum(spectrum, {\n        dataType: 'MASS SPECTRUM',\n        title,\n        meta,\n    });\n    return analysis;\n}\n//# sourceMappingURL=fromText.js.map","import { fromJcamp as commonFromJcamp } from 'common-spectrum';\nimport { spectrumCallback } from \"./utils/spectrumCallback.js\";\n/**\n * Creates a new Analysis from a SPC buffer\n * @param jcamp\n * @param [options={}]\n * @param [options.id=Math.random()]\n * @param [options.label=options.id] - human redeable label\n * @param [options.spectrumCallback] - a callback to apply on variables when creating spectrum. Default will add a and t\n * @returns - New class element with the given data\n */\nexport function fromJcamp(jcamp, options = {}) {\n    return commonFromJcamp(jcamp, { ...options, spectrumCallback });\n}\n//# sourceMappingURL=fromJcamp.js.map","import { JSGraph as OriginalJSGraph, peakPicking as originalPeakPicking, } from 'common-spectrum';\nimport { Spectrum } from 'ms-spectrum';\nimport { getAnnotations } from \"./jsgraph/getAnnotations.js\";\nexport { AnalysesManager, Analysis, toJcamp } from 'common-spectrum';\nexport { fromText } from \"./from/fromText.js\";\nexport { fromJcamp } from \"./from/fromJcamp.js\";\nexport function autoPeakPicking(spectrum, options = {}) {\n    options = {\n        threshold: 0.1,\n        numberSlots: 20,\n        numberCloseSlots: 40,\n        ...options,\n    };\n    const data = {\n        x: spectrum.variables.x.data,\n        y: spectrum.variables.y.data,\n    };\n    const msSpectrum = new Spectrum(data);\n    // we need to know the global best peaks to know his intensity and set it to 100\n    const minMaxX = msSpectrum.minMaxX();\n    const maxY = msSpectrum\n        .getBestPeaks({\n        ...options,\n        from: minMaxX.min,\n        to: minMaxX.max,\n    })\n        .sort((a, b) => b.y - a.y)[0]?.y;\n    const maxRatio = maxY ? 100 / maxY : 1;\n    const peaks = msSpectrum.getBestPeaks(options);\n    return peaks.map((peak) => {\n        return {\n            mass: peak.x,\n            intensity: peak.y * maxRatio,\n        };\n    });\n}\nexport function peakPicking(spectrum, target) {\n    const peak = originalPeakPicking(spectrum, target, {\n        xVariable: 'x',\n        yVariable: 'y',\n        optimize: false,\n        // we could optimize the peaks but it depends of the width\n        // and also if it is continuous or not. Not obvious\n        // if we optimize we need to add this parameters for high res spectrum\n        //   shape: { kind: 'gaussian', fwhm: 0.01 },\n        max: true,\n    });\n    if (!peak)\n        return undefined;\n    return {\n        mass: peak.x,\n        intensity: peak.y,\n    };\n}\nexport const JSGraph = { ...OriginalJSGraph, getAnnotations };\n//# sourceMappingURL=index.js.map"],"names":["reimAbsolute","data","length","re","im","newArray","Float64Array","i","Math","hypot","toString","Object","prototype","isAnyArray","value","tag","call","endsWith","includes","getOutputArray","output","undefined","TypeError","xAbsolute","array","tmpArray","slice","xMedian","input","options","exact","middleIndex","calcMiddle","median","quickSelect","medianNext","low","high","middle","currentLow","currentHigh","swap","j","temp","floor","xAbsoluteMedian","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","xDotProduct","A","B","g","result","xCrossCorrelation","tau","lag","n","q","k","w","l","xAutoCorrelation","xBoxPlot","sort","posQ1","posQ3","medianPos","q1MinProportion","q3MinProportion","medianMinProportion","min","q1","q3","max","at","xBoxPlotWithOutliers","boxPlot","iqr","lowerWhisker","upperWhisker","outliers","minWhisker","maxWhisker","push","info","xCheckLengths","xCorrelation","sumA","sumA2","sumB","sumB2","sumAB","a","b","sqrt","arguments","_options$fromIndex","_options$toIndex","isInteger","maxValue","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","loop","get","line","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","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","checkNonEmpty","isEmpty","sumByRow","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","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","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","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","first","last","flipColumns","kroneckerProduct","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","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","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","ra","sa","vr","vi","notlast","cdivres","cdiv","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","counter","xResidual","residual","yResidual","betas","CHO","EVD","Matrix_1","MatrixTransposeView_1","NIPALS","Nipals","SVD","_default","default","inverse_1","solve_1","absDiff","xCostMatrix","rowsArray","columnsArray","nbRows","nbColumns","xCumulative","xMean","sumValue","xVariance","sqrError","xStandardDeviation","xDistributionStats","sd","nb","xDivide","xEnsureFloat64","xGetTargetIndex","targetIndex","FFT","_csize","table","angle","PI","power","_width","_bitrev","revShift","_out","_data","_inv","fft","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","C","D","Ar","Ai","Br","Bi","Cr","Ci","Dr","Di","MAr","MAi","tableBr","tableBi","MBr","MBi","tableCr","tableCi","MCr","MCi","tableDr","tableDi","MDr","MDi","T0r","T0i","T1r","T1i","T2r","T2i","T3r","T3i","FAr","FAi","FCr","FCi","FBr","FBi","FDr","FDi","evenR","evenI","oddR","oddI","leftR","leftI","rightR","rightI","step2","step3","_singleRealTransform2","_singleRealTransform4","halfLen","hquarterLen","ST0r","ST0i","ST1r","ST1i","ST2r","ST2i","ST3r","ST3i","SFAr","SFAi","SFBr","SFBi","SA","SB","createNumberArray","ArrayConstructor","createDoubleArray","createFromToArray","includeFrom","includeTo","distribution","delta","base","firstExponent","LOOP","FLOAT_MUL","sh1","sh2","sh3","multiplyUint32","nlo","nhi","XSadd","state","seed","Date","now","Uint32Array","init","getFloat","bind","getUint32","nextState","periodCertification","createRandomArray","generator","gaussianGenerator","GaussianGenerator","generateGaussian","String","val","createStepArray","getRescaler","targetMin","targetMax","clamp","algorithmOptions","algorithm","originalMin","originalMax","convert","getDataConverter","originalRange","targetRange","rescaler","valueScaled","kind","isPowerOfTwo","nextPowerOfTwo","recursiveResolve","object","promises","appendPromises","Promise","all","key","then","recursiveUntypeArrays","modifier","ArrayBuffer","isView","replacer","space","internalReplacer","xSubtract","calculateAdaptiveWeights","yData","baseline","weights","controlPoints","factorStd","learningRate","minWeight","absResiduals","medAbsRes","mad","rawWeights","maxWeight","MIN_SAFE_INTEGER","newWeights","oneMinusLearningRate","weight","xHilbertTransform","forceFFT","hilbertTransformWithFFT","resampling","hilbertTransform","fftResult","multiplier","hilbertSignal","inClockwise","aSum","cSum","oldLength","ratio","currentIndex","xMaxValue","xMinValue","xHistogram","histogram","centerX","nbSlots","logBaseX","logBaseY","absolute","logOfBase","slotSize","xIsEquallySpaced","tolerance","maxDx","minDx","MAX_SAFE_INTEGER","absoluteDifference","xIsMonotonic","xMassCenterVectorSimilarity","recenter","similarityFct","depth1","getDepth","depth2","depth","similarity","level","maxSimilarity","slot","value1","value2","shiftSubTree","currentLevel","levelSlotShift","levelShift","levelSlotSize","slotIndex","xMaxAbsoluteValue","xMaxIndex","xMeanAbsoluteError","xMeanSquaredError","xMeanWeighted","sumWeights","xMedianAbsoluteDeviation","averageDeviations","xMinIndex","xMinMaxDelta","minDelta","maxDelta","xMinMaxValues","xMode","maxCount","counts","Y1","P1","Q1","Y2","P2","Q2","Y3","P3","Q3","Y4","P4","Q4","Y5","P5","Q5","polyval","coef","calc","P","Q","erfcinv","simpleNormInv","magnitudeMode","SQRT2","simpleNormInvNumber","xNoiseSanPlot","cutOff","refine","scaleFactor","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","xAxis","_e","xNoiseStandardDeviation","xNorm","xSum","xNormed","absoluteSumValue","absoluteSum","currentMaxValue","sumFactor","xPadding","fromEnd","toEnd","xParetoNormalization","sqrtSD","xRobustDistributionStats","filteredArray","xRemoveOutliersIQR","higherWhisker","xRescale","xRolling","window","padding","padded","subarray","xRollingAverage","xRollingMax","xRollingMedian","xRollingMin","xRotate","xSampling","downSampling","xSequentialFillFromStep","parameters","xSequentialFillFromTo","xSortAscending","isArray","xSortDescending","xUniqueSorted","Set","matrixCholeskySolver","nonZerosArray","permutationEncoded","pinv","mt","ar","ac","ap","ai","ax","lnz","colOffset","adr","lp","parent","lnzArray","flag","pattern","bp1","ldlSymbolic","lx","li","ldlNumeric","ldlPerm","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPermt","kk","p2","lKi","addWeights","nbPoints","newLeftHandSide","newRightHandSide","next","createSystemMatrix","lambda","upperTriangularNonZeros","xWhittakerSmoother","getWeightsAndControlPoints","prevBaseline","iteration","Infinity","cho","newBaseline","calculateDelta","xWhitakerSmoother","reimPhaseCorrection","phi0","phi1","firstAngle","beta","cosTheta","sinTheta","newRe","newIm","newCosTheta","newSinTheta","reimAutoPhaseCorrection","minRegSize","factorNoise","maxDistanceToJoin","finalPeaks","detectBaselineRegions","indexMask","x0","reTmp","imTmp","autoPhaseRegion","ph1","ph0","determiningGlobalValues","map","area","phased","toRadians","ph0Values","weightedLinearRegression","maxDiff","predictedPh0","magnitudeData","ds","holoborodko","peaksDs","robustBaseLineRegionsDetection","peaksSp","start","stop","nSteps","maxSteps","bestAng","minArea","dAng","tmpPhased","negArea","getNegArea","sumX","dk","Uint8Array","change","noiseLevel","prev","sxtw","swx","sw","sxtwy","swy","detMx","inMx","degree","reimFFT","applyZeroShift","csize","complexArray","zeroShift","reimZeroFilling","totalLength","newRE","newIM","xyAlign","data1","data2","common","y1","y2","length1","length2","difference","weightedX","xyCheck","xyCovariance","meanX","meanY","xyMaxYPoint","current","STEPS","xyCumulativeDistributionStatistics","maxY","x25","x50","x75","x100","currentStep","breakPoint","sumXY","sumY","xyEnsureFloat64","xyEnsureGrowingX","prevX","zonesNormalize","zones","exclusions","zone","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","zoneIndex","zonesWithPoints","numberOfPoints","normalizedZones","zonesWithNumberOfPoints","totalSize","reduce","previous","unitsPerPoint","currentTotal","tempZone","tempZoneNumberOfPoints","equallySpacedSlot","xLength","halfStep","lastStep","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","main","integral","x1","slope","intercept","equallySpacedSmooth","initialOriginalStep","lastOriginalStep","sumAtMin","sumAtMax","getSlope","y0","xyEquallySpaced","variant","zonesWithPointsRes","xResult","yResult","zoneResult","processZone","concat","xyExtract","newX","newY","position","xyFilter","xyFilterMinYValue","minRelativeYValue","xyFilterTopYValues","nbPeaks","descending","nbThreshold","xyFilterX","currentZoneIndex","xyFilterXPositive","xyFindClosestPoint","xyGetNMaxY","numberMaxPoints","xyGrowingX","xyIntegral","xyIntegration","currentxyIntegral","currentxyIntegration","xyJoinX","deltaIsFunction","currentDelta","xyMassCenter","sumYs","sumProducts","xyMassCenterVector","weightedIntegral","getWeightedIntegral","endIndexes","Int32Array","beginIndexes","currentBeginIndex","currentEndIndex","currentIntegration","nextIndex","firstIntegration","totalIntegration","totalWeightedIntegral","currentX","lastIntegration","xyMaxClosestYPoint","previousIndex","xyMaxY","xyMaximaY","maxima","startEqualIndex","xyMaxMerge","groupWidth","merged","maxAbscissa","currentxyMaxY","xyMedian","cumSumY","xyMergeByCentroids","centroids","mergedPoints","originalIndex","mergedIndex","xyMinClosestYPoint","minY","xyMinimaY","xyMinYPoint","xyPeakInfo","newDiff","after","before","inflectionBefore","inflectionAfter","extrema","inflectionMiddle","xyRealMaxYPoint","gamma","xyRealMinYPoint","xyReduce","optimize","internalZones","totalPoints","getInternalZones","notEnoughPoints","appendFromTo","zoneNbPoints","xyReduceNonContinuous","maxApproximateNbPoints","deltaX","internalZone","maxNbPoints","currentY","lastX","xyRolling","xySetYValue","xySortX","xyObject","response","xyToXYArray","objectArray","xyToXYObject","xyUniqueX","isSorted","average","cumulativeY","xyWeightedMerge","weightedAbscissa","xy2ToXY","xy2","xyValue","xreimSortX","xreimZeroFilling","getSlots","possibleXs","flatMap","currentSlot","number","slots","xyArrayAlign","requiredY","ys","positions","filterRequiredY","newYs","xyArrayWeightedMerge","deltaNumber","point","nextValue","maxX","sameSlot","minX","getSlotsToFirst","firstXs","otherXs","currentPosition","xyArrayAlignToFirst","xyArrayMerge","xyObjectCheck","points","xyObjectMaxXPoint","xyObjectMinXPoint","xyObjectBestPoints","numberCloseSlots","numberSlots","closeSlot","selected","monoisotopic","peakLoop","item","close","existing","newPeak","xyObjectJoinX","xError","xyObjectMaxYPoint","xyObjectMinMaxValues","xyObjectMinYPoint","xyObjectNormedY","structuredClone","normalizedYs","xyObjectSlotX","slotWidth","halfSlot","xyObjectSortX","xyObjectSumY","xyObjectToXY","entry","matrixAbsoluteMedian","flatten","currentRow","matrixCreateEmpty","matrixApplyNumericalEncoding","matrixInitial","dictionary","arrayOfValues","matrixAutoCorrelation","targetArray","sourceArray","matrixBoxPlot","columnArray","q1max","q3min","middleOver","matrixCenterZMean","matrixCheck","firstLength","matrixClone","matrixColumnsCorrelation","matrixCuthillMckee","list","adj","visited","toVisit","eol","ptr","nbhd","matrixCheckRanges","boundaries","matrixGetSubMatrix","duplicate","matrixMinMaxAbsoluteZ","matrixMinMaxZ","matrixHistogram","minMax","xHistogramOptions","finalHistogram","matrixMaxAbsoluteZ","matrixToArray","matrixMedian","matrixNoiseStandardDeviation","matrixNumericalDecoding","invertedDictionary","ret","matrixNumericalEncoding","dictCategoricalToNumerical","matrixPQN","matrixB","normalizationFactor","referenceSpectrum","currentVariable","medianOfQuotients","quotients","matrixSetSubMatrix","matrixZPivotRescale","matrixZRescale","matrixZRescalePerColumn","matrixTranspose","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","getNormalizationAnnotations","boundary","annotations","exclusion","ignore","annotation","strokeWidth","fillColor","centerMean","centerMedian","normed","divideBySD","paretoNormalization","Ap","Lp","Parent","Lnz","Flag","Ax","Li","Lx","Pattern","prepare","M","Pinv","Mt","LNZ","coloffset","cuthillMckee_1","cuthillMckee","compareNum","getClosestNumber","goal","closest","curr","getCloseIndex","indexOf","updateSystem","newVector","getDeltaMatrix","lowerTriangularNonZeros","permutationEncodedArray","getControlPoints","Int8Array","forEach","indexFrom","indexTo","airPLS","sumNegDifferences","corrected","stopCriterion","getStopCriterion","prevNegSum","cholesky","applyCorrection","absChange","_typeof","obj","sequentialFill","_options","_options$from","_options$to","_options$size","_i","airPLSBaseline","numberPoints","regressionOptions","airpls","correctedSpectrum","checkArrayLength","BaseRegression","new","predict","_predict","xVal","train","precision","toLaTeX","score","ySum","chi2","rmsd","xSquared","ySquared","xY","maybeToPrecision","figures","toPrecision","PolynomialRegression","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","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","optimizeTop","peaks","peak","xCurrent","xPrevious","gsd","sgOptions","smoothY","maxCriteria","minMaxRatio","realTopDetection","noiseInfo","xValue","dY","ddY","yThreshold","dX","lastMax","lastMin","minddY","intervalL","intervalR","lastK","minddYIndex","possible","minDistance","currentDistance","crypto","randomUUID","inflectionPoints","GAUSSIAN_EXP_FACTOR","LN2","ROOT_PI_OVER_LN2","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","erfinv","ln1MinusXSqrd","lnEtcBy2Plus2","firstSqrt","secondSqrt","Gaussian","fwhm","gaussianWidthToFWHM","fwhmToWidth","gaussianFwhmToWidth","widthToFWHM","gaussianFct","getArea","height","calculateGaussianHeight","getGaussianArea","getFactor","getGaussianFactor","getData","getGaussianData","calculateHeight","getParameters","shape","Lorentzian","lorentzianFwhmToWidth","lorentzianWidthToFWHM","lorentzianFct","getLorentzianArea","getLorentzianFactor","getLorentzianData","calculateLorentzianHeight","halfResidual","quantileFunction","LorentzianDispersive","lorentzianDispersiveFct","_height","getLorentzianDispersiveData","PseudoVoigt","mu","pseudoVoigtFwhmToWidth","pseudoVoigtWidthToFWHM","pseudoVoigtFct","getPseudoVoigtArea","getPseudoVoigtFactor","calculatePseudoVoigtHeight","getPseudoVoigtData","GeneralizedLorentzian","generalizedLorentzianFwhmToWidth","generalizedLorentzianWidthToFWHM","generalizedLorentzianFct","getGeneralizedLorentzianArea","getGeneralizedLorentzianFactor","getGeneralizedLorentzianData","calculateGeneralizedLorentzianHeight","getShape1D","getSumOfShapes","internalPeaks","sumOfShapes","totalY","peakX","shapeFctKey","shapeFct","assert","message","DefaultParameters","peakShape","gradientDifference","properties","getInternalPeaks","minMaxY","shiftValue","normalizedPeaks","propertiesValues","parameter","property","propertyValue","getNormalizedValue","generalParameterValue","defaultParameterValues","checkOptions","timeout","initialValues","damping","dampingStepUp","dampingStepDown","errorTolerance","centralDifference","improvementThreshold","minValues","maxValues","parLen","gradientDifferenceArray","getGradientDifferenceArray","filler","getFiller","checkTimeout","getCheckTimeout","weightSquare","_","dataLength","endTime","errorCalculation","parameterizedFunction","func","gradientFunction","evaluatedData","params","paramFunction","nbParams","param","auxParams","funcParam","funcParam2","matrixFunction","gradientFunc","residualError","inverseMatrix","jacobianWeightResidualError","perturbations","levenbergMarquardt","checkedOptions","optimalError","optimalParameters","converged","previousError","improvementMetric","parameterValues","parameterError","iterations","antiLowerConvexHull","currentPoint","moveOn","det","leftTurn","moveBack","direct","objectiveFunction","lowerBoundaries","upperBoundaries","epsilon","tolerance2","initialState","diffBorders","numberOfRectangles","totalIterations","unitaryCoordinates","middlePoint","bestCurrentValue","fCalls","smallerDistance","edgeSizes","diagonalDistances","functionValues","differentDistances","smallerValuesByDistance","choiceLimit","originalCoordinates","getMinIndex","S1","optimumValuesIndex","S3","a1","b1","a2","b2","S2","xHull","yHull","lowerIndexHull","largerSide","largeSidesIndex","bestFunctionValues","firstMiddleCenter","secondMiddleCenter","firstMiddleValue","secondMiddleValue","firstMinValue","secondMinValue","ix1","ix2","minFunctionValue","pair","finalState","minimizer","optima","directOptimization","getObjectiveFunction","selectMethod","optimizationOptions","normalizedY","gradientDifferences","optimization","fitted","fittedValues","newPeaks","addMissingShape","shapeInstance","hasShape","groupPeaks","parse","previousPeak","currentGroup","groups","optimizePeaksWithLogs","peakList","groupingFactor","factorLimits","logs","peakGroup","firstPeak","lastPeak","groupSize","time","optimizedPeaks","optimizePeaks","addMissingIDs","joinBroadPeaks","broadWidth","broadRatio","broadLines","getGSDPeakOptimizedStructure","maxDdy","candidates","indexes","initialWidth","find","pushBackPeaks","broadenPeaks","overlap","mapPeaks","nextPeak","xFrom","xTo","setShape","calibrateX","targetX","gsdOptions","xFunction","function","yFunction","setMaxY","setMinY","filterXY","filters","filterFct","Filters","getNormalizedSpectrum","newSpectrum","title","dataType","meta","isMonotonic","global","factory","module","exports","this","isString","isFiniteImpl","isNumber","uniq","strings","seen","hasOwnProperty","compareArray","assign","keys","mulSafe","decimals","arg","getFractional","divSafe","den","invDen","QtyError","err","create","stack","throwIncompatibleUnits","left","right","UNITS","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","numerator","denominator","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","unitKeys","substr","getKinds","toLowerCase","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","unitSignatureVector","isBase","toBase","SIGN","INTEGER","SIGNED_INTEGER","FRACTION","FLOAT","EXPONENT","SCI_NUMBER","SIGNED_NUMBER","QTY_STRING","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","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","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","has","getSpectra","getAnalysisBySpectrumId","getSpectrumById","getDistinctTitles","getDistinctUnits","getDistinctLabelUnits","normalizeLabelUnits","getDistinctLabels","getDistinctDataTypes","getDistinctMeta","removeAllAnalyses","removeAnalysis","originalLabel","originalUnits","search","isUtf8","buf","ensureString","blob","encoding","guessEncoding","decoder","TextDecoder","decode","uint8","buffer","byteOffset","byteLength","isutf8","parseString","lowercase","gyromagneticRatioMHzT","getGyromagneticNucleus","nucleus","gyromagneticRatio","nucleusNumber","filteredNuclei","getGyromagneticRatio","realNucleus","fromEntries","_ref","quickSelectMedian","$","ee","te","ms","pageValue","chromatogram","ne","E","logger","xFactor","yFactor","isXYdata","firstX","firstY","o","codePointAt","N","S","O","R","isPeaktable","me","ce","isXYAdata","oe","lastY","ue","ie","minZ","maxZ","noise","ntuples","symbol","some","se","Z","nbContourLevels","I","le","K","noiseMultiplier","zValue","lines","T","segments","G","noContour","contourLines","observeFrequency","shiftOffsetVal","$NUC2","$NUC1","yType","xType","W","pageSymbol","J","intensity","pe","twoD","wantXY","profiling","keepSpectra","dynamicTyping","ae","charAt","vardim","varname","ge","removeComments","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","withoutXY","noTrimRegExp","be","debug","children","datatable","dataClass","jcampDX","jcampCS","shiftOffsetNum","vartype","varform","page","sampleDescription","pop","de","fromJcamp","jcamp","addJcamp","converted","currentSpectrum","text","uniqueX","bestGuess","keepInfo","xColumn","yColumn","numberColumns","maxNumberColumns","minNumberColumns","fields","skipFirstColumn","parseXY","parseXYAndKeepInfo","addInfoData","header","checkNumberOrArray","getExtremeValues","firstRow","firstLast","creatorNtuples","owner","origin","resInfo","varName","varType","varDim","isDependent","getFactorNumber","getBestFactor","onlyInteger","extremeValues","getNumber","rounded","peakTableCreator","rescaleAndEnsureInteger","newLine","pseudoDigits","SQZ_P","SQZ_N","DIF_P","DIF_N","DUP","maxLinelength","vectorEncoder","intervalX","xyEncoding","fixEncoding","squeezedEncoding","differenceEncoding","differenceDuplicateEncoding","commaSeparatedValuesEncoding","packedEncoding","separator","outputData","squeezedDigit","mult","charCount","encodedData","encodedNumber","diffData","numDiff","differenceDigit","duplicateDigit","sqzDigits","charCodeAt","substring","diffDigits","dupDigits","xyDataCreator","fromVariables","forceNtuples","jcampOptions","xData","toJcamps","jcamps","getJcamp","toJcamp","peakPicking","isMax","optimizedPeak","optimizedIndex","maximumY","optimizePeak","optimized","JSGraph","getBestPeaks","searchMonoisotopicRatio","ml_spectra_processing_1","nextItem","atomSorter","elementsAndIsotopes","nominal","mass","abundance","monoisotopicMass","elements","elementsAndIsotopes_js_1","elementsAndIsotopesObject","elementsAndStableIsotopes","elementsAndStableIsotopesObject","elementsObject","isotopesObject","elementsAndIsotopesObject_js_1","isotope","isotopes","stableIsotopesObject","mostAbundant","unsaturationsObject","Na","Ca","Si","Cl","groupsObject","groupsObject_js_1","groupsToSequence","mf","part","usefulParts","oneLetter","Kind","BEGIN","ATOM","MULTIPLIER_RANGE","ISOTOPE","ISOTOPE_RATIO","CHARGE","SALT","OPENING_PARENTHESIS","CLOSING_PARENTHESIS","PRE_MULTIPLIER","MULTIPLIER","TEXT","parseCharge_1","parseCharge","charge","chargeNumber","Kind_1","require$$3","require$$4","expandGroups","lastKind","char","ascii","nextAscii","MFError","ANCHOR","getAtom","getParenthesisCharge","getIsotope","isotopeRatio","getCurlyBracketIsotopeRatio","lastResult","atom","getNonParenthesisCharge","COMMENT","checkParenthesis","fromCharCode","indexOfDash","parseNumberWithDivision","chemical_elements_1","group","chemical_groups_1","expandedGroups","begin","SyntaxError","parsed","realMultiplier","currentMultiplier","multipliers","newParsed","distinctParsedObject","atomA","atomB","subSuperscript","superscript","Format","SUBSCRIPT","SUPERSCRIPT","improveLinesForDisplay","Kind_js_1","beginCounter","endCounter","minCounter","nbParenthesisToSuppress","toSuppress","formatCharge_js_1","require$$2","improveLinesForDisplay_js_1","toDisplay","specialCases","Format_1","SUPERIMPOSE","over","formatCharge","under","nbElectrons","isMF_1","isMF","tmpMF","Style","toHtml_1","toHtml","html","Style_1","SUPERIMPOSE_SUP_SUB","ensureCase_1","ensureCase","newPart","two","one","groupIdentical","parenthesisLevel","currentPart","comments","optimizeRanges","mfs","createMFs","newParts","mfsObject","hasRange","comment","currents","getMF","getIsotopeRatioInfo_1","getIsotopeRatioInfo","isotopesArray","ratios","getEA_1","getEA","addMass","isotopeRatioInfo","eas","getElements_1","getElements","addElement","newElement","getNumberOfIsotopologues","atoms","nbIsotopes","nbAtoms","getNbCombinationsPerAtom","partToAtoms_1","partToAtoms","partToMF_1","partToMF","neutral","getInfoInternal_1","getInfoInternal","getNumberOfIsotopologues_1","require$$5","require$$6","customUnsaturations","emFieldName","msemFieldName","oneResult","getProcessedPart","nbIsotopologues","unsaturation","currentElement","validUnsaturation","getIsotopesInfo","getDistribution","toDisplay_js_1","partsToDisplay","partLine","partsToMF_1","partsToMF","toParts","expand","shouldExpandgroupsObject","createNewPart","openingParenthesis","closingParenthesis","preMultiplier","postMultiplier","previousKind","globalPartMultiplier","expandgroupsObject","combineAtomsIsotopesCharges","expanded","currentKey","atom_sorter_1","calculateAndSortKeys","getKey","stringComparator","toText_1","toText","subSuperscript_1","subscript","MFInternal_1","MFInternal","flatten_1","require$$7","require$$8","require$$9","require$$10","toParts_1","require$$11","parse_1","displayed","toCanonicText","getInfo","ea","isotopesInfo","toMF","toNeutralMF","MF_1","MF","internal","parse_js_1","toHtml_js_1","unsaturationMatcher_1","unsaturationMatcher","onlyNonInteger","generalMatcher","minMW","maxMW","minEM","maxEM","minCharge","maxCharge","absoluteCharge","mw","em","unsaturationMatcher_js_1","ensureUppercaseSequence_1","ensureUppercaseSequence","sequence","parenthesisCounter","currentSymbol","getEutrophicationPotential_1","getEutrophicationPotential","mf_parser_1","mfString","nC","nO","nN","nP","vRef","mwRef","thOD","nH","ep","getMsem_1","getMsem","ELECTRON_MASS","getMsInfo","allowNeutralMolecules","ionization","forceIonization","targetMass","realIonization","ppm","getRangesForFragment_1","getRangesForFragment","ranges","newRanges","currentMF","possibilities","MFRange_1","MFRange","getRange","isInRange","rangeIndex","rangeElement","targetElement","currentRange","mfDiff_1","mfDiff","mfString1","mfString2","mf1","mf2","preprocessIonizations_1","preprocessIonizations","ionizationsString","ionizations","preprocessRanges_1","preprocessRanges","possibility","originalMinCount","originalMaxCount","currentMinCount","currentMaxCount","currentCount","currentMonoisotopicMass","currentCharge","currentUnsaturation","initialOrder","minInnerMass","maxInnerMass","minInnerCharge","maxInnerCharge","minMass","maxMass","innerCharge","isGroup","innerPossibility","msemMatcher","targetMasses","minMSEM","maxMSEM","allowNegativeAtoms","msInfo","mf_utilities_1","ionizationAtoms","atomKeys","TargetMassCache_1","TargetMassCache","allowNeutral","firstPossibility","currentMinCharge","currentMaxCharge","findMFsSync","uniqueMFs","targetMassCache","filterUnsaturation","fakeMinUnsaturation","fakeMaxUnsaturation","advancedFilter","numberMFEvaluated","numberResults","currentIonization","orderMapping","getOrderMapping","theEnd","maxPosition","lastPosition","currentAtom","lastPossibility","unsaturationValue","isOdd","isValid","filterCharge","getMinMass","getResult","mf_matcher_1","newResult","updateCurrentAtom","previousAtom","setCurrentMinMax","ensureUniqueMF","bestCounts","previousEM","currentCounts","findMFs_1","findMFs","mfIncluded","targetEM","findMFsSync_js_1","fromMonoisotopicMass","masses","mf_finder_1","getPeaks","getFragmentPeaks","mfInfo","getPeaks_js_1","fromMonoisotopicMass_1","getMassRemainder","calculateOverlapFromDiff","diffs","sumPos","checkPeaks","extract","getCommonArray","pos2","array1Length","array2Length","arithmeticMean","geometricMean","logMean","lnsum","grandMean","means","samples","truncatedMean","percent","alreadySorted","harmonicMean","contraHarmonicMean","theMean","theVariance","standardError","robustMeanAndStdev","stdev","quartiles","quart","q2","pooledStandardDeviation","pooledVariance","vari","mode","itemCount","itemArray","mean1","mean2","skewness","s3","dev","kurtosis","s4","entropy","weightedMean","weightedStandardDeviation","weightedVariance","inPlace","standardize","standardDev","StatArray","commonExtractAndNormalize","extract1","extract2","common1","common2","info1","info2","COMMON_SECOND","COMMON_FIRST","extractAndNormalize","getIntersection","segment1","segment2","p0X","p0Y","p1X","p1Y","p2X","p2Y","p3X","p3Y","s1X","s1Y","s2X","s2Y","COMMON_NO","COMMON_BOTH","Comparator","setOptions","trapezoid","commonFactor","widthBottom","widthTop","setTrapezoid","setFromTo","setPeaks1","extracts","array1Extract","array1ExtractInfo","array2Extract","array2ExtractInfo","setPeaks2","getExtract1","getExtract2","getExtractInfo1","getExtractInfo2","newWidthBottom","newWidthTop","widthSlope","newFrom","newTo","getOverlap","x2","getOverlapTrapezoid","small","big","targets","segment","intersection","calculateDiff","newFirst","newSecond","pos1","previous2","getSimilarity","newPeaks1","newPeaks2","extractInfo1","extractInfo2","fastSimilarity","NEUTRON_MASS","getPeakChargeBySimilarity","widthFunction","experimentalData","similarityProcessor","peaks_similarity_1","checkTopBottom","fromCharge","toCharge","fromIsotope","toIsotope","isotopeHeight","getPeaksWithCharge_1","getPeaksWithCharge","selectedPeaks","allPeaks","numberIsotopes","isotopeIntensity","localFromIndex","localToIndex","peaksWithCharge","bestCharge","theoreticalPositions","massRange","isotopePosition","fromMass","toMass","localHeightSum","currentTheoreticalPosition","theoreticalMaxValue","isContinuous","maxDeltaRatio","relativeHeightThreshold","minHeight","minRadio","maxRatio","continuous","previousDelta","failed","success","gsdPeaks","ml_gsd_1","gsdPeak","SimpleLinearRegression","yObj","computeX","absIntercept","operator","PowerRegression","newInputs","latex","pr","xl","yl","linear","peaksWidth_1","peaksWidth","ml_regression_power_1","widths","regressionChart","fit","predictFct","tex","Spectrum_1","Spectrum","fromPeaks","is_any_array_1","xy_parser_1","getPeaksWithCharge_js_1","defaultData","minMaxX","scaleY","rescaleX","ensureOriginalX","xOriginal","normedY","total","peakPicking_js_1","getBestPeaks_js_1","getSelectedPeaksWithCharge","getFragmentPeaksFct","MSComparator_1","massPower","intensityPower","getSimilarityToMasses","dataXY","normalizeAndCacheData","selectedMasses","aligned","dataXY1","dataXY2","returnSimilarity","minIntensity","minNbCommonPeaks","nbCommonPeaks","nbPeaks2","nbPeaks1","tanimoto","cosine","getPeaksAnnotation","bestPeaks","numberDigits","showMF","numberMFs","mfPrefs","displayCharge","displayProperties","mfColors","_highlight","dy","rx","ry","fillOpacity","textLine","dx","currentMfPrefs","numberOfMFS","getColor","jsgraph","JsGraph","getAnnotations","strokeColor","creationFct","annotationPeak","showAssignment","showIntensity","showMass","shiftY","anchor","assignment","fromText","commonFromJcamp","autoPeakPicking","msSpectrum","originalPeakPicking","OriginalJSGraph"],"mappings":"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qBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;IAAA,KAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;IAAA,KAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAq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AA,EAClB;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;IAAA,KAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC5B;IAAAD,IAAAA;IAAqBC,IAAAA,IAAK,EAAE;SAC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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399]}