{"version":3,"file":"tga-spectrum.js","sources":["../node_modules/common-spectrum/src/jsgraph/addStyle.js","../node_modules/common-spectrum/src/jsgraph/colors.js","../node_modules/common-spectrum/src/jsgraph/getJSGraph.js","../node_modules/common-spectrum/src/jsgraph/getNormalizationAnnotations.js","../node_modules/common-spectrum/src/reactPlot/getReactPlotJSON.js","../node_modules/common-spectrum/src/util/appendDistinctParameter.js","../node_modules/common-spectrum/src/util/appendDistinctValue.js","../node_modules/common-spectrum/src/AnalysesManager.js","../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-spectra-processing/src/x/xAdd.js","../node_modules/ml-spectra-processing/src/x/xMultiply.js","../node_modules/ml-spectra-processing/src/x/xDivide.js","../node_modules/ml-spectra-processing/src/x/xIsMonotone.js","../node_modules/ml-spectra-processing/src/x/xCheck.js","../node_modules/d3-array/build/d3-array.js","../node_modules/ml-array-sum/lib-es6/index.js","../node_modules/ml-array-mean/lib-es6/index.js","../node_modules/ml-spectra-processing/src/x/xPadding.js","../node_modules/ml-spectra-processing/src/x/xRolling.js","../node_modules/ml-spectra-processing/src/x/xRollingAverage.js","../node_modules/ml-spectra-processing/src/x/xRollingMedian.js","../node_modules/ml-spectra-processing/src/x/xSubtract.js","../node_modules/assign-symbols/index.js","../node_modules/assign-deep/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/transpose.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/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/baselines/src/output.js","../node_modules/baselines/src/airPLS.js","../node_modules/ml-regression-base/node_modules/is-any-array/src/index.js","../node_modules/ml-regression-base/src/maybeToPrecision.js","../node_modules/ml-regression-base/src/checkArrayLength.js","../node_modules/ml-regression-base/src/index.js","../node_modules/ml-regression-polynomial/src/index.js","../node_modules/ml-baseline-correction-regression/src/index.js","../node_modules/baselines/src/iterativePolynomial.js","../node_modules/baselines/src/rollingAverage.js","../node_modules/ml-rolling-ball-baseline/src/rollingBall.js","../node_modules/baselines/src/rollingBall.js","../node_modules/baselines/src/rollingMedian.js","../node_modules/ml-array-normed/lib-es6/index.js","../node_modules/ml-array-sequential-fill/node_modules/is-any-array/src/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-zones/src/normalize.js","../node_modules/ml-zones/src/invert.js","../node_modules/ml-zones/src/zonesWithPoints.js","../node_modules/ml-array-xy-equally-spaced/src/integral.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSmooth.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSlot.js","../node_modules/ml-array-xy-equally-spaced/src/index.js","../node_modules/ml-array-xy-filter-x/src/getZones.js","../node_modules/ml-array-xy-filter-x/src/index.js","../node_modules/ml-pad-array/src/index.js","../node_modules/ml-savitzky-golay/src/index.js","../node_modules/ml-stat/array.js","../node_modules/common-spectrum/src/util/getNormalizedSpectrum.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/src/util/convertUnit.js","../node_modules/common-spectrum/src/util/ensureRegexp.js","../node_modules/common-spectrum/src/util/getConvertedVariable.js","../node_modules/common-spectrum/src/util/getXYSpectrum.js","../node_modules/common-spectrum/src/Analysis.js","../node_modules/jcampconverter/src/complexChromatogram.js","../node_modules/jcampconverter/src/convertToFloatArray.js","../node_modules/jcampconverter/src/parse/fastParseXYData.js","../node_modules/jcampconverter/src/parse/parsePeakTable.js","../node_modules/jcampconverter/src/parse/parseXYA.js","../node_modules/jcampconverter/src/2d/convertTo3DZ.js","../node_modules/jcampconverter/src/2d/generateContourLines.js","../node_modules/jcampconverter/src/2d/add2D.js","../node_modules/ml-fft/src/fftlib.js","../node_modules/nmr-processing/src/constants/gyromagneticRatio.js","../node_modules/jcampconverter/src/postProcessingNMR.js","../node_modules/jcampconverter/src/profiling.js","../node_modules/jcampconverter/src/simpleChromatogram.js","../node_modules/jcampconverter/src/postProcessing.js","../node_modules/jcampconverter/src/prepareNtuplesDatatable.js","../node_modules/jcampconverter/src/prepareSpectrum.js","../node_modules/jcampconverter/src/convert.js","../node_modules/common-spectrum/src/from/fromJcamp.js","../node_modules/convert-to-jcamp/src/creatorNtuples.js","../node_modules/convert-to-jcamp/src/fromJSON.js","../node_modules/convert-to-jcamp/src/fromVariables.js","../node_modules/common-spectrum/src/to/toJcamps.js","../node_modules/common-spectrum/src/to/toJcamp.js","../node_modules/common-spectrum/src/index.js","../src/from/parsePerkinElmer.js","../src/from/fromPerkinElmer.js","../node_modules/papaparse/papaparse.min.js","../src/from/fromPerkinElmerCSV.js","../src/from/parseTAInstruments.js","../src/from/fromTAInstruments.js","../src/from/parseTAInstrumentsExcel.js","../src/from/fromTAInstrumentsExcel.js"],"sourcesContent":["export function addStyle(serie, spectrum, options = {}) {\n  let { color = '#A9A9A9', opacity = 1, lineWidth = 1 } = options;\n  if (color.match(/#[0-9A-F]{6}$/i)) {\n    color = (color + ((opacity * 255) >> 0).toString(16)).toUpperCase();\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","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","import { addStyle } from './addStyle';\nimport { COLORS } from './colors';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param {Array<Analysis>} analyses\n * @param {object} [options={}]\n * @param {Array} [options.ids] List of spectra ids, by all\n * @param {Array} [options.colors] List of colors\n * @param {Array} [options.opacities=[1]] List of opacities\n * @param {Array} [options.linesWidth=[1]] List of linesWidth\n * @param {object} [options.selector={}]\n * @param {object} [options.normalization]\n */\nexport function getJSGraph(analyses, options = {}) {\n  const {\n    colors = COLORS,\n    opacities = [1],\n    linesWidth = [1],\n    selector,\n    normalization,\n  } = options;\n  let series = [];\n\n  let xLabel = '';\n  let yLabel = '';\n\n  for (let i = 0; i < analyses.length; i++) {\n    const analysis = analyses[i];\n    let serie = {};\n    let currentData = analysis.getNormalizedSpectrum({\n      selector,\n      normalization,\n    });\n    if (!currentData) continue;\n    if (!xLabel) xLabel = currentData.variables.x.label;\n    if (!yLabel) yLabel = currentData.variables.y.label;\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: currentData.variables.x.data,\n      y: currentData.variables.y.data,\n    };\n    series.push(serie);\n  }\n  return {\n    axes: {\n      x: {\n        label: xLabel,\n        unit: '',\n        flipped: false,\n        display: true,\n      },\n      y: {\n        label: yLabel,\n        unit: '',\n        flipped: false,\n        display: true,\n      },\n    },\n    series,\n  };\n}\n","/**\n * Returns a JSGraph annotation that represents the normalization\n * @param {object} [filter={}]\n * @param {object} [filter.exclusions=[]] Array of exclusions zones\n * @param {object} [boundary={y: {min:'0px', max:'2000px'}}] Height of the annotation\n */\n\nexport function getNormalizationAnnotations(\n  filter = {},\n  boundary = { y: { min: '0px', max: '2000px' } },\n) {\n  let { exclusions = [] } = filter;\n\n  let annotations = [];\n  exclusions = exclusions.filter((exclusion) => !exclusion.ignore);\n  annotations = exclusions.map((exclusion) => {\n    let annotation = {\n      type: 'rect',\n      position: [\n        { x: exclusion.from, y: boundary.y.min },\n        { x: exclusion.to, y: boundary.y.max },\n      ],\n      strokeWidth: 0,\n      fillColor: 'rgba(255,255,224,1)',\n    };\n    return annotation;\n  });\n  if (filter.from !== undefined) {\n    annotations.push({\n      type: 'rect',\n      position: [\n        { x: Number.MIN_SAFE_INTEGER, y: boundary.y.min },\n        { x: filter.from, y: boundary.y.max },\n      ],\n      strokeWidth: 0,\n      fillColor: 'rgba(255,255,224,1)',\n    });\n  }\n  if (filter.to !== undefined) {\n    annotations.push({\n      type: 'rect',\n      position: [\n        { x: filter.to, y: boundary.y.min },\n        { x: Number.MAX_SAFE_INTEGER, y: boundary.y.max },\n      ],\n      strokeWidth: 0,\n      fillColor: 'rgba(255,255,224,1)',\n    });\n  }\n  return annotations;\n}\n","/**\n * Parses from {x[], y[]} to [{x,y}]\n * @param {Array<number>} x\n * @param {Array<number>} y\n */\nfunction getData(x, y) {\n  let data = new Array(x.length);\n  for (let i = 0; i < x.length; i++) {\n    data[i] = { x: x[i], y: y[i] };\n  }\n  return data;\n}\n\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param {Array<Analysis>} analyses\n * @param {object} query\n * @param {object} [options]\n * @param {object} [options.xAxis]\n * @param {object} [options.yAxis]\n * @param {object} [options.series]\n * @param {object} [options.dimentions]\n */\nexport function getReactPlotJSON(analyses, query, options = {}) {\n  const {\n    xAxis: xAxisOptions = {},\n    yAxis: yAxisOptions = { labelSpace: 40 },\n    series: seriesOptions = { displayMarker: true },\n    dimentions = { width: 550, height: 500 },\n  } = options;\n  let series = [];\n  let meta = [];\n  let xAxis;\n  let yAxis;\n\n  for (let i = 0; i < analyses.length; i++) {\n    const analysis = analyses[i];\n    const spectra = analysis.getXYSpectrum(query);\n    if (!spectra) continue;\n\n    meta.push(spectra.meta);\n\n    xAxis = {\n      id: 'x',\n      label: spectra.variables.x.label,\n      ...xAxisOptions,\n      position: 'bottom',\n    };\n    yAxis = {\n      id: 'y',\n      label: spectra.variables.y.label,\n      ...yAxisOptions,\n      position: 'left',\n    };\n\n    const data = getData(spectra.variables.x.data, spectra.variables.y.data);\n    const serie = {\n      type: 'line',\n      label: spectra.title,\n      data,\n      ...seriesOptions,\n    };\n    series.push(serie);\n  }\n\n  return {\n    series,\n    axes: [xAxis, yAxis],\n    dimentions,\n    meta,\n  };\n}\n","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","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","import { appendDistinctParameter } from './util/appendDistinctParameter';\nimport { appendDistinctValue } from './util/appendDistinctValue';\n\nexport class AnalysesManager {\n  constructor() {\n    this.analyses = [];\n  }\n\n  addAnalysis(analysis) {\n    let index = this.getAnalysisIndex(analysis.id);\n    if (index === undefined) {\n      this.analyses.push(analysis);\n    } else {\n      this.analyses[index] = analysis;\n    }\n  }\n\n  getAnalyses(options = {}) {\n    const { ids } = options;\n    let analyses = [];\n    for (const analysis of this.analyses) {\n      if (!ids || ids.includes(analysis.id)) {\n        analyses.push(analysis);\n      }\n    }\n    return analyses;\n  }\n\n  getSpectra() {\n    const spectra = [];\n    for (const analysis of this.analyses) {\n      spectra.push(...analysis.spectra);\n    }\n    return spectra;\n  }\n\n  /**\n   * Get an array of objects (key + count) of all the titles\n   */\n  getDistinctTitles() {\n    let values = {};\n    for (let spectrum of this.getSpectra()) {\n      appendDistinctValue(values, spectrum.title);\n    }\n    return Object.keys(values).map((key) => values[key]);\n  }\n\n  /**\n   * Get an array of objects (key + count) of all the units\n   */\n  getDistinctUnits() {\n    let values = {};\n    for (let spectrum of this.getSpectra()) {\n      if (spectrum.variables) {\n        for (let key in spectrum.variables) {\n          appendDistinctValue(\n            values,\n            spectrum.variables[key].units.replace(/\\s+\\[.*/, ''),\n          );\n        }\n      }\n    }\n    return Object.keys(values).map((key) => values[key]);\n  }\n\n  /**\n   * Get an array of objects (key + count) of all the labels\n   */\n  getDistinctLabels() {\n    let values = {};\n    for (let spectrum of this.getSpectra()) {\n      if (spectrum.variables) {\n        for (let key in spectrum.variables) {\n          appendDistinctValue(\n            values,\n            spectrum.variables[key].label.replace(/\\s+\\[.*/, ''),\n          );\n        }\n      }\n    }\n    return Object.keys(values).map((key) => values[key]);\n  }\n\n  /**\n   * Get an array of objects (key + count) of all the dataTypes\n   */\n  getDistinctDataTypes() {\n    let values = {};\n    for (let spectrum of this.getSpectra()) {\n      appendDistinctValue(values, spectrum.dataType);\n    }\n    return Object.keys(values).map((key) => values[key]);\n  }\n\n  /**\n   * Get an array of objects (key + count) of all the meta\n   */\n  getDistinctMeta() {\n    let values = {};\n    for (let spectrum of this.getSpectra()) {\n      if (spectrum.meta) {\n        for (let key in spectrum.meta) {\n          appendDistinctParameter(values, key, spectrum.meta[key]);\n        }\n      }\n    }\n    return Object.keys(values).map((key) => values[key]);\n  }\n\n  removeAllAnalyses() {\n    this.analyses.splice(0);\n  }\n\n  /**\n   * Remove the analysis from the AnalysesManager for the specified id\n   * @param {string} id\n   */\n  removeAnalysis(id) {\n    let index = this.getAnalysisIndex(id);\n    if (index === undefined) return undefined;\n    return this.analyses.splice(index, 1);\n  }\n\n  /**\n   * Returns the index of the analysis in the analyses array\n   * @param {string} id\n   * @returns {number}\n   */\n  getAnalysisIndex(id) {\n    if (!id) return undefined;\n    for (let i = 0; i < this.analyses.length; i++) {\n      let analysis = this.analyses[i];\n      if (analysis.id === id) return i;\n    }\n    return undefined;\n  }\n\n  /**\n   * Checks if the ID of an analysis exists in the AnalysesManager\n   * @param {string} id\n   */\n  includes(id) {\n    return !isNaN(this.getAnalysisIndex(id));\n  }\n}\n","const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","import isArray from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(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 default max;\n","import isArray from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(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 default min;\n","(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 isArray from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isArray(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 default median;\n","import isAnyArray from 'is-any-array';\n\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 {Array<Number>} array1 - the array that will be rotated\n * @param {Array|Number} array2\n * @return {Array}\n */\nexport function xAdd(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (isAnyArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] + constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] + array2[i];\n    }\n  }\n\n  return array3;\n}\n","import isAnyArray from 'is-any-array';\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 {Array} array1 - the array that will be rotated\n * @param {Array|Number} array2\n * @return {Float64Array}\n */\nexport function xMultiply(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (isAnyArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Float64Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] * constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] * array2[i];\n    }\n  }\n\n  return array3;\n}\n","import isAnyArray from 'is-any-array';\n\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 {Array<Number>} array1 - the array that will be rotated\n * @param {Array<Number>|Number} array2\n * @return {Array}\n */\nexport function xDivide(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (isAnyArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] / constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] / array2[i];\n    }\n  }\n\n  return array3;\n}\n","/**\n * Returns true if x is monotone\n * @param {Array} array\n * @return {boolean}\n */\nexport function xIsMonotone(array) {\n  if (array.length <= 2) {\n    return true;\n  }\n  if (array[0] === array[1]) {\n    // maybe a constant series\n    for (let i = 1; i < array.length - 1; i++) {\n      if (array[i] !== array[i + 1]) return false;\n    }\n    return true;\n  }\n\n  if (array[0] < array[array.length - 1]) {\n    for (let i = 0; i < array.length - 1; i++) {\n      if (array[i] >= array[i + 1]) return false;\n    }\n  } else {\n    for (let i = 0; i < array.length - 1; i++) {\n      if (array[i] <= array[i + 1]) return false;\n    }\n  }\n  return true;\n}\n","import isArray from 'is-any-array';\n\n/**\n * Checks if input is valdi\n * @param {Array<number>} input\n\n */\nexport default function xCheck(input) {\n  if (!isArray(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\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","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.d3_array = {})));\n}(this, function (exports) { 'use strict';\n\n  function ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n\n  function bisector(compare) {\n    if (compare.length === 1) compare = ascendingComparator(compare);\n    return {\n      left: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) < 0) lo = mid + 1;\n          else hi = mid;\n        }\n        return lo;\n      },\n      right: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) > 0) hi = mid;\n          else lo = mid + 1;\n        }\n        return lo;\n      }\n    };\n  }\n\n  function ascendingComparator(f) {\n    return function(d, x) {\n      return ascending(f(d), x);\n    };\n  }\n\n  var ascendingBisect = bisector(ascending);\n  var bisectRight = ascendingBisect.right;\n  var bisectLeft = ascendingBisect.left;\n\n  function descending(a, b) {\n    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n  }\n\n  function number$1(x) {\n    return x === null ? NaN : +x;\n  }\n\n  function variance(array, f) {\n    var n = array.length,\n        m = 0,\n        a,\n        d,\n        s = 0,\n        i = -1,\n        j = 0;\n\n    if (f == null) {\n      while (++i < n) {\n        if (!isNaN(a = number$1(array[i]))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n\n    else {\n      while (++i < n) {\n        if (!isNaN(a = number$1(f(array[i], i, array)))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n\n    if (j > 1) return s / (j - 1);\n  }\n\n  function deviation(array, f) {\n    var v = variance(array, f);\n    return v ? Math.sqrt(v) : v;\n  }\n\n  function extent(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b,\n        c;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }\n      while (++i < n) if ((b = array[i]) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n\n    return [a, c];\n  }\n\n  function constant(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function identity(x) {\n    return x;\n  }\n\n  function range(start, stop, step) {\n    start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n    var i = -1,\n        n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n        range = new Array(n);\n\n    while (++i < n) {\n      range[i] = start + i * step;\n    }\n\n    return range;\n  }\n\n  var e10 = Math.sqrt(50);\n  var e5 = Math.sqrt(10);\n  var e2 = Math.sqrt(2);\n  function ticks(start, stop, count) {\n    var step = tickStep(start, stop, count);\n    return range(\n      Math.ceil(start / step) * step,\n      Math.floor(stop / step) * step + step / 2, // inclusive\n      step\n    );\n  }\n\n  function tickStep(start, stop, count) {\n    var step0 = Math.abs(stop - start) / Math.max(0, count),\n        step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n        error = step0 / step1;\n    if (error >= e10) step1 *= 10;\n    else if (error >= e5) step1 *= 5;\n    else if (error >= e2) step1 *= 2;\n    return stop < start ? -step1 : step1;\n  }\n\n  function sturges(values) {\n    return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n  }\n\n  function number(x) {\n    return +x;\n  }\n\n  function histogram() {\n    var value = identity,\n        domain = extent,\n        threshold = sturges;\n\n    function histogram(data) {\n      var i,\n          n = data.length,\n          x,\n          values = new Array(n);\n\n      // Coerce values to numbers.\n      for (i = 0; i < n; ++i) {\n        values[i] = +value(data[i], i, data);\n      }\n\n      var xz = domain(values),\n          x0 = +xz[0],\n          x1 = +xz[1],\n          tz = threshold(values, x0, x1);\n\n      // Convert number of thresholds into uniform thresholds.\n      if (!Array.isArray(tz)) tz = ticks(x0, x1, +tz);\n\n      // Coerce thresholds to numbers, ignoring any outside the domain.\n      var m = tz.length;\n      for (i = 0; i < m; ++i) tz[i] = +tz[i];\n      while (tz[0] <= x0) tz.shift(), --m;\n      while (tz[m - 1] >= x1) tz.pop(), --m;\n\n      var bins = new Array(m + 1),\n          bin;\n\n      // Initialize bins.\n      for (i = 0; i <= m; ++i) {\n        bin = bins[i] = [];\n        bin.x0 = i > 0 ? tz[i - 1] : x0;\n        bin.x1 = i < m ? tz[i] : x1;\n      }\n\n      // Assign data to bins by value, ignoring any outside the domain.\n      for (i = 0; i < n; ++i) {\n        x = values[i];\n        if (x0 <= x && x <= x1) {\n          bins[bisectRight(tz, x, 0, m)].push(data[i]);\n        }\n      }\n\n      return bins;\n    }\n\n    histogram.value = function(_) {\n      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), histogram) : value;\n    };\n\n    histogram.domain = function(_) {\n      return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), histogram) : domain;\n    };\n\n    histogram.thresholds = function(_) {\n      if (!arguments.length) return threshold;\n      threshold = typeof _ === \"function\" ? _\n          : Array.isArray(_) ? constant(Array.prototype.map.call(_, number))\n          : constant(+_);\n      return histogram;\n    };\n\n    return histogram;\n  }\n\n  function quantile(array, p, f) {\n    if (f == null) f = number$1;\n    if (!(n = array.length)) return;\n    if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);\n    if (p >= 1) return +f(array[n - 1], n - 1, array);\n    var n,\n        h = (n - 1) * p,\n        i = Math.floor(h),\n        a = +f(array[i], i, array),\n        b = +f(array[i + 1], i + 1, array);\n    return a + (b - a) * (h - i);\n  }\n\n  function freedmanDiaconis(values, min, max) {\n    values.sort(ascending);\n    return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n  }\n\n  function scott(values, min, max) {\n    return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n  }\n\n  function max(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;\n    }\n\n    return a;\n  }\n\n  function mean(array, f) {\n    var s = 0,\n        n = array.length,\n        a,\n        i = -1,\n        j = n;\n\n    if (f == null) {\n      while (++i < n) if (!isNaN(a = number$1(array[i]))) s += a; else --j;\n    }\n\n    else {\n      while (++i < n) if (!isNaN(a = number$1(f(array[i], i, array)))) s += a; else --j;\n    }\n\n    if (j) return s / j;\n  }\n\n  function median(array, f) {\n    var numbers = [],\n        n = array.length,\n        a,\n        i = -1;\n\n    if (f == null) {\n      while (++i < n) if (!isNaN(a = number$1(array[i]))) numbers.push(a);\n    }\n\n    else {\n      while (++i < n) if (!isNaN(a = number$1(f(array[i], i, array)))) numbers.push(a);\n    }\n\n    return quantile(numbers.sort(ascending), 0.5);\n  }\n\n  function merge(arrays) {\n    var n = arrays.length,\n        m,\n        i = -1,\n        j = 0,\n        merged,\n        array;\n\n    while (++i < n) j += arrays[i].length;\n    merged = new Array(j);\n\n    while (--n >= 0) {\n      array = arrays[n];\n      m = array.length;\n      while (--m >= 0) {\n        merged[--j] = array[m];\n      }\n    }\n\n    return merged;\n  }\n\n  function min(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;\n    }\n\n    return a;\n  }\n\n  function pairs(array) {\n    var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n    while (i < n) pairs[i] = [p, p = array[++i]];\n    return pairs;\n  }\n\n  function permute(array, indexes) {\n    var i = indexes.length, permutes = new Array(i);\n    while (i--) permutes[i] = array[indexes[i]];\n    return permutes;\n  }\n\n  function scan(array, compare) {\n    if (!(n = array.length)) return;\n    var i = 0,\n        n,\n        j = 0,\n        xi,\n        xj = array[j];\n\n    if (!compare) compare = ascending;\n\n    while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;\n\n    if (compare(xj, xj) === 0) return j;\n  }\n\n  function shuffle(array, i0, i1) {\n    var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n        t,\n        i;\n\n    while (m) {\n      i = Math.random() * m-- | 0;\n      t = array[m + i0];\n      array[m + i0] = array[i + i0];\n      array[i + i0] = t;\n    }\n\n    return array;\n  }\n\n  function sum(array, f) {\n    var s = 0,\n        n = array.length,\n        a,\n        i = -1;\n\n    if (f == null) {\n      while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.\n    }\n\n    else {\n      while (++i < n) if (a = +f(array[i], i, array)) s += a;\n    }\n\n    return s;\n  }\n\n  function transpose(matrix) {\n    if (!(n = matrix.length)) return [];\n    for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n      for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n        row[j] = matrix[j][i];\n      }\n    }\n    return transpose;\n  }\n\n  function length(d) {\n    return d.length;\n  }\n\n  function zip() {\n    return transpose(arguments);\n  }\n\n  var version = \"0.7.1\";\n\n  exports.version = version;\n  exports.bisect = bisectRight;\n  exports.bisectRight = bisectRight;\n  exports.bisectLeft = bisectLeft;\n  exports.ascending = ascending;\n  exports.bisector = bisector;\n  exports.descending = descending;\n  exports.deviation = deviation;\n  exports.extent = extent;\n  exports.histogram = histogram;\n  exports.thresholdFreedmanDiaconis = freedmanDiaconis;\n  exports.thresholdScott = scott;\n  exports.thresholdSturges = sturges;\n  exports.max = max;\n  exports.mean = mean;\n  exports.median = median;\n  exports.merge = merge;\n  exports.min = min;\n  exports.pairs = pairs;\n  exports.permute = permute;\n  exports.quantile = quantile;\n  exports.range = range;\n  exports.scan = scan;\n  exports.shuffle = shuffle;\n  exports.sum = sum;\n  exports.ticks = ticks;\n  exports.tickStep = tickStep;\n  exports.transpose = transpose;\n  exports.variance = variance;\n  exports.zip = zip;\n\n}));","import isArray from 'is-any-array';\n\nfunction sum(input) {\n  if (!isArray(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 sumValue = 0;\n\n  for (var i = 0; i < input.length; i++) {\n    sumValue += input[i];\n  }\n\n  return sumValue;\n}\n\nexport default sum;\n","import sum from 'ml-array-sum';\n\nfunction mean(input) {\n  return sum(input) / input.length;\n}\n\nexport default mean;\n","import xCheck from './xCheck';\n\n/**\n * This function pads an array\n * @param {Array} array - the array that will be padded\n * @param {object} [options={}]\n * @param {string} [options.algorithm=''] '', value, circular, duplicate\n * @param {number} [options.size=0] padding size before first element and after last element\n * @param {number} [options.value=0] value to use for padding (if algorithm='value')\n * @return {Array}\n */\nexport function xPadding(array, options = {}) {\n  const { size = 0, value = 0, algorithm = '' } = options;\n  xCheck(array);\n\n  if (!algorithm) {\n    if (array instanceof Float64Array) {\n      return array.slice();\n    } else {\n      return Float64Array.from(array);\n    }\n  }\n\n  let result = new Float64Array(array.length + size * 2);\n\n  for (let i = 0; i < array.length; i++) {\n    result[i + size] = array[i];\n  }\n\n  let fromEnd = size + array.length;\n  let toEnd = 2 * size + array.length;\n\n  switch (algorithm.toLowerCase()) {\n    case 'value':\n      for (let i = 0; i < size; i++) {\n        result[i] = value;\n      }\n      for (let i = fromEnd; i < toEnd; i++) {\n        result[i] = value;\n      }\n      break;\n    case 'duplicate':\n      for (let i = 0; i < size; i++) {\n        result[i] = array[0];\n      }\n      for (let i = fromEnd; i < toEnd; i++) {\n        result[i] = array[array.length - 1];\n      }\n      break;\n    case 'circular':\n      for (let i = 0; i < size; i++) {\n        result[i] =\n          array[(array.length - (size % array.length) + i) % array.length];\n      }\n      for (let i = 0; i < size; i++) {\n        result[i + fromEnd] = array[i % array.length];\n      }\n      break;\n    default:\n      throw Error('xPadding: unknown algorithm');\n  }\n\n  return result;\n}\n","import xCheck from './xCheck';\nimport { xPadding } from './xPadding';\n/**\n * This function calculates a rolling average\n * @param {Array<Number>} array - the array that will be rotated\n * @param {function} fct callback function that from an array returns a value.\n * @param {object} [options={}]\n * @param {number} [options.window=5] rolling window\n * @param {string} [options.padding.size=0] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='value'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @return {Array<Number>}\n */\nexport function xRolling(array, fct, options = {}) {\n  xCheck(array);\n  if (typeof fct !== 'function') throw Error('fct has to be a function');\n\n  const { window = 5, padding = {} } = options;\n  const { size = window - 1, algorithm, value } = padding;\n\n  array = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n\n  const newArray = [];\n  for (let i = 0; i < array.length - window + 1; i++) {\n    let subArray = new Float64Array(array.buffer, i * 8, window);\n    // we will send a view to the original buffer\n    newArray.push(fct(subArray));\n  }\n\n  return newArray;\n}\n","import mean from 'ml-array-mean';\n\nimport { xRolling } from './xRolling';\n\n/**\n * This function calculates a rolling average\n * @param {Array<Number>} array - the array that will be rotated\n * @param {object} [options={}]\n * @param {number} [options.window=5] rolling window\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm=''] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @return {Array<Number>}\n */\nexport function xRollingAverage(array, options = {}) {\n  return xRolling(array, mean, options);\n}\n","import median from 'ml-array-median';\n\nimport { xRolling } from './xRolling';\n\n/**\n * This function calculates a rolling average\n * @param {Array<Number>} array - the array that will be rotated\n * @param {object} [options={}]\n * @param {number} [options.window=5] rolling window\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm=''] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @return {Array<Number>}\n */\nexport function xRollingMedian(array, options = {}) {\n  return xRolling(array, median, options);\n}\n","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 {Array} array1 - the array that will be rotated\n * @param {Array|Number} array2\n * @return {Array}\n */\nexport function xSubtract(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (isAnyArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] - constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] - array2[i];\n    }\n  }\n\n  return array3;\n}\n","/*!\n * assign-symbols <https://github.com/jonschlinkert/assign-symbols>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst toString = Object.prototype.toString;\nconst isEnumerable = Object.prototype.propertyIsEnumerable;\nconst getSymbols = Object.getOwnPropertySymbols;\n\nmodule.exports = (target, ...args) => {\n  if (!isObject(target)) {\n    throw new TypeError('expected the first argument to be an object');\n  }\n\n  if (args.length === 0 || typeof Symbol !== 'function' || typeof getSymbols !== 'function') {\n    return target;\n  }\n\n  for (let arg of args) {\n    let names = getSymbols(arg);\n\n    for (let key of names) {\n      if (isEnumerable.call(arg, key)) {\n        target[key] = arg[key];\n      }\n    }\n  }\n  return target;\n};\n\nfunction isObject(val) {\n  return typeof val === 'function' || toString.call(val) === '[object Object]' || Array.isArray(val);\n}\n","/*!\n * assign-deep <https://github.com/jonschlinkert/assign-deep>\n *\n * Copyright (c) 2017-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst toString = Object.prototype.toString;\nconst assignSymbols = require('assign-symbols');\n\nconst isValidKey = key => {\n  return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n};\n\nconst assign = module.exports = (target, ...args) => {\n  let i = 0;\n  if (isPrimitive(target)) target = args[i++];\n  if (!target) target = {};\n  for (; i < args.length; i++) {\n    if (isObject(args[i])) {\n      for (const key of Object.keys(args[i])) {\n        if (isValidKey(key)) {\n          if (isObject(target[key]) && isObject(args[i][key])) {\n            assign(target[key], args[i][key]);\n          } else {\n            target[key] = args[i][key];\n          }\n        }\n      }\n      assignSymbols(target, args[i]);\n    }\n  }\n  return target;\n};\n\nfunction isObject(val) {\n  return typeof val === 'function' || toString.call(val) === '[object Object]';\n}\n\nfunction isPrimitive(val) {\n  return typeof val === 'object' ? val === null : typeof val !== 'function';\n}\n","import isArray 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 (!isArray(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 (!isArray(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 default rescale;\n","const indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\nexport function inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nexport function inspectMatrixWithOptions(matrix, options = {}) {\n  const { maxRows = 15, maxColumns = 10, maxNumSize = 8 } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\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));\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) {\n  const numStr = String(num);\n  if (numStr.length <= maxNumSize) {\n    return numStr.padEnd(maxNumSize, ' ');\n  }\n  const precise = num.toPrecision(maxNumSize - 2);\n  if (precise.length <= maxNumSize) {\n    return precise;\n  }\n  const exponential = num.toExponential(maxNumSize - 2);\n  const eIndex = exponential.indexOf('e');\n  const e = exponential.slice(eIndex);\n  return exponential.slice(0, maxNumSize - e.length) + e;\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), value));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\n      }\n    }\n    return this;\n  };\n}\n","/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nexport function checkIndices(matrix, rowIndices, columnIndices) {\n  return {\n    row: checkRowIndices(matrix, rowIndices),\n    column: checkColumnIndices(matrix, columnIndices),\n  };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n  if (typeof rowIndices !== 'object') {\n    throw new TypeError('unexpected type for row indices');\n  }\n\n  let rowOut = rowIndices.some((r) => {\n    return r < 0 || r >= matrix.rows;\n  });\n\n  if (rowOut) {\n    throw new RangeError('row indices are out of range');\n  }\n\n  if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n  return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n  if (typeof columnIndices !== 'object') {\n    throw new TypeError('unexpected type for column indices');\n  }\n\n  let columnOut = columnIndices.some((c) => {\n    return c < 0 || c >= matrix.columns;\n  });\n\n  if (columnOut) {\n    throw new RangeError('column indices are out of range');\n  }\n  if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n  return columnIndices;\n}\n\nexport function checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nexport function newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nexport function checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nexport function varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nexport function varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nexport function centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nexport function centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nexport function centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nexport function getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nexport function getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nexport function getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n","import rescale from 'ml-array-rescale';\n\nimport { inspectMatrix, inspectMatrixWithOptions } from './inspect';\nimport { installMathOperations } from './mathOperations';\nimport {\n  sumByRow,\n  sumByColumn,\n  sumAll,\n  productByRow,\n  productByColumn,\n  productAll,\n  varianceByRow,\n  varianceByColumn,\n  varianceAll,\n  centerByRow,\n  centerByColumn,\n  centerAll,\n  scaleByRow,\n  scaleByColumn,\n  scaleAll,\n  getScaleByRow,\n  getScaleByColumn,\n  getScaleAll,\n} from './stat';\nimport {\n  checkRowVector,\n  checkRowIndex,\n  checkColumnIndex,\n  checkColumnVector,\n  checkRange,\n  checkIndices,\n  checkNonEmpty,\n} from './util';\n\nexport class AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(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        }\n      }\n    }\n    return v;\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() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(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        }\n      }\n    }\n    return v;\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    let result = 0;\n    if (type === 'max') {\n      return this.max();\n    } else if (type === 'frobenius') {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j < this.columns; j++) {\n          result = result + this.get(i, j) * this.get(i, j);\n        }\n      }\n      return Math.sqrt(result);\n    } else {\n      throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      resultat = resultat.setSubMatrix(c11, 0, 0);\n      resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n      resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n      resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n      return resultat.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min: min,\n          max: max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  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    let indices = checkIndices(this, rowIndices, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < indices.row.length; i++) {\n      let rowIndex = indices.row[i];\n      for (let j = 0; j < indices.column.length; j++) {\n        let columnIndex = indices.column[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let row = 0; row < this.rows; row++) {\n      for (let column = 0; column < this.columns; column++) {\n        newMatrix.set(row, column, this.get(row, column));\n      }\n    }\n    return newMatrix;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!Array.isArray(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 (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!Array.isArray(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 (!Array.isArray(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 (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[\n    Symbol.for('nodejs.util.inspect.custom')\n  ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      // eslint-disable-next-line no-constructor-return\n      return nRows.clone();\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      // Create an empty matrix\n      this.data = [];\n      if (Number.isInteger(nColumns) && nColumns >= 0) {\n        for (let i = 0; i < nRows; i++) {\n          this.data.push(new Float64Array(nColumns));\n        }\n      } else {\n        throw new TypeError('nColumns must be a positive integer');\n      }\n    } else if (Array.isArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { AbstractMatrix } from '../matrix';\n\nexport default class BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n","import BaseView from './base';\n\nexport default class MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n","export function hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let iter = 0;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          iter = iter + 1;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          iter = 0;\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nexport function solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n","function 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}\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}\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 function(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 Cholesky from './choleskySolver';\nimport { updateSystem, getDeltaMatrix, getCloseIndex } from './utils';\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/master/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.factorCriterion = 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 x axis values to force that baseline cross those points.\n * @param {Array<number>} [options.baseLineZones = []] - 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 */\nfunction airPLS(x, y, options = {}) {\n  let {\n    maxIterations = 100,\n    lambda = 100,\n    factorCriterion = 0.001,\n    weights = new Array(y.length).fill(1),\n    controlPoints = [],\n    baseLineZones = [],\n  } = options;\n\n  if (controlPoints.length > 0) {\n    controlPoints.forEach((e, i, arr) => (arr[i] = getCloseIndex(x, e)));\n  }\n  if (baseLineZones.length > 0) {\n    baseLineZones.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.push(i);\n      }\n    });\n  }\n\n  let baseline, iteration;\n  let nbPoints = y.length;\n  let l = nbPoints - 1;\n  let sumNegDifferences = Number.MAX_SAFE_INTEGER;\n  let stopCriterion =\n    factorCriterion * y.reduce((sum, e) => Math.abs(e) + sum, 0);\n\n  let { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(\n    nbPoints,\n    lambda,\n  );\n\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, nbPoints, permutationEncodedArray);\n\n    baseline = cho(rightHandSide);\n\n    sumNegDifferences = 0;\n\n    let difference = y.map(calculateError);\n\n    let maxNegativeDiff = -1 * Number.MAX_SAFE_INTEGER;\n    for (let i = 1; i < l; i++) {\n      let diff = difference[i];\n      if (diff >= 0) {\n        weights[i] = 0;\n      } else {\n        weights[i] = Math.exp((iteration * diff) / sumNegDifferences);\n        if (maxNegativeDiff < diff) maxNegativeDiff = diff;\n      }\n    }\n\n    let value = Math.exp((iteration * maxNegativeDiff) / sumNegDifferences);\n    weights[0] = value;\n    weights[l] = value;\n    controlPoints.forEach((i) => (weights[i] = value));\n  }\n\n  return {\n    corrected: y.map((e, i) => e - baseline[i]),\n    baseline,\n    iteration,\n    error: sumNegDifferences,\n  };\n\n  function calculateError(e, i) {\n    let diff = e - baseline[i];\n    if (diff < 0) sumNegDifferences += diff;\n    return diff;\n  }\n}\n\nexport { airPLS as default };\n","/**\n * Output class for baseline corrections\n *\n * @export\n * @class Baseline\n */\nexport class BaselineOutput {\n  /**\n   *Creates an instance of BaselineOutput.\n   * @param {Array<number>} baseline\n   * @param {Array<number>} correctedSpectrum\n   * @memberof Baseline\n   */\n  constructor(baseline, correctedSpectrum) {\n    this.baseline = baseline;\n    this.correctedSpectrum = correctedSpectrum;\n  }\n}\n","import airpls from 'ml-airpls';\n\nimport { BaselineOutput } from './output.js';\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>} spectrum\n * @param {Array<number>} x Optional, Independent axis variable. If not specified, we use a linear grid\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 * @returns {BaselineOutput}\n */\nexport function airPLSBaseline(spectrum, x, options = {}) {\n  const numberPoints = spectrum.length;\n  if (!x) {\n    x = [...Array(numberPoints).keys()];\n  }\n\n  let output = airpls(x, spectrum, options);\n\n  return new BaselineOutput(output.baseline, output.corrected);\n}\n","'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","export default function maybeToPrecision(value, digits) {\n  if (value < 0) {\n    value = 0 - value;\n    if (typeof digits === 'number') {\n      return `- ${value.toPrecision(digits)}`;\n    } else {\n      return `- ${value.toString()}`;\n    }\n  } else {\n    if (typeof digits === 'number') {\n      return value.toPrecision(digits);\n    } else {\n      return value.toString();\n    }\n  }\n}\n","import isAnyArray from 'is-any-array';\n\nexport default function checkArraySize(x, y) {\n  if (!isAnyArray(x) || !isAnyArray(y)) {\n    throw new TypeError('x and y must be arrays');\n  }\n  if (x.length !== y.length) {\n    throw new RangeError('x and y arrays must have the same length');\n  }\n}\n","import isAnyArray from 'is-any-array';\n\nexport { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\nexport default class BaseRegression {\n  constructor() {\n    if (new.target === BaseRegression) {\n      throw new Error('BaseRegression must be subclassed');\n    }\n  }\n\n  predict(x) {\n    if (typeof x === 'number') {\n      return this._predict(x);\n    } else if (isAnyArray(x)) {\n      const y = [];\n      for (let i = 0; i < x.length; i++) {\n        y.push(this._predict(x[i]));\n      }\n      return y;\n    } else {\n      throw new TypeError('x must be a number or array');\n    }\n  }\n\n  _predict() {\n    throw new Error('_predict must be implemented');\n  }\n\n  train() {\n    // Do nothing for this package\n  }\n\n  toString() {\n    return '';\n  }\n\n  toLaTeX() {\n    return '';\n  }\n\n  /**\n   * Return the correlation coefficient of determination (r) and chi-square.\n   * @param {Array<number>} x\n   * @param {Array<number>} y\n   * @return {object}\n   */\n  score(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y) || x.length !== y.length) {\n      throw new Error('x and y must be arrays of the same length');\n    }\n\n    const n = x.length;\n    const y2 = new Array(n);\n    for (let i = 0; i < n; i++) {\n      y2[i] = this._predict(x[i]);\n    }\n\n    let xSum = 0;\n    let ySum = 0;\n    let chi2 = 0;\n    let rmsd = 0;\n    let xSquared = 0;\n    let ySquared = 0;\n    let xY = 0;\n    for (let i = 0; i < n; i++) {\n      xSum += y2[i];\n      ySum += y[i];\n      xSquared += y2[i] * y2[i];\n      ySquared += y[i] * y[i];\n      xY += y2[i] * y[i];\n      if (y[i] !== 0) {\n        chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n      }\n      rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n    }\n\n    const r =\n      (n * xY - xSum * ySum) /\n      Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n\n    return {\n      r: r,\n      r2: r * r,\n      chi2: chi2,\n      rmsd: Math.sqrt(rmsd / n),\n    };\n  }\n}\n","import BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\nimport { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\n\nexport default class PolynomialRegression extends BaseRegression {\n  constructor(x, y, degree) {\n    super();\n    if (x === true) {\n      this.degree = y.degree;\n      this.powers = y.powers;\n      this.coefficients = y.coefficients;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y, degree);\n    }\n  }\n\n  _predict(x) {\n    let y = 0;\n    for (let k = 0; k < this.powers.length; k++) {\n      y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n    }\n    return y;\n  }\n\n  toJSON() {\n    return {\n      name: 'polynomialRegression',\n      degree: this.degree,\n      powers: this.powers,\n      coefficients: this.coefficients,\n    };\n  }\n\n  toString(precision) {\n    return this._toFormula(precision, false);\n  }\n\n  toLaTeX(precision) {\n    return this._toFormula(precision, true);\n  }\n\n  _toFormula(precision, isLaTeX) {\n    let sup = '^';\n    let closeSup = '';\n    let times = ' * ';\n    if (isLaTeX) {\n      sup = '^{';\n      closeSup = '}';\n      times = '';\n    }\n\n    let fn = '';\n    let str = '';\n    for (let k = 0; k < this.coefficients.length; k++) {\n      str = '';\n      if (this.coefficients[k] !== 0) {\n        if (this.powers[k] === 0) {\n          str = maybeToPrecision(this.coefficients[k], precision);\n        } else {\n          if (this.powers[k] === 1) {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x`;\n          } else {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x${sup}${this.powers[k]}${closeSup}`;\n          }\n        }\n\n        if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n          str = ` + ${str}`;\n        } else if (k !== this.coefficients.length - 1) {\n          str = ` ${str}`;\n        }\n      }\n      fn = str + fn;\n    }\n    if (fn.charAt(0) === '+') {\n      fn = fn.slice(1);\n    }\n\n    return `f(x) = ${fn}`;\n  }\n\n  static load(json) {\n    if (json.name !== 'polynomialRegression') {\n      throw new TypeError('not a polynomial regression model');\n    }\n    return new PolynomialRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y, degree) {\n  const n = x.length;\n  let powers;\n  if (Array.isArray(degree)) {\n    powers = degree;\n    degree = powers.length;\n  } else {\n    degree++;\n    powers = new Array(degree);\n    for (let k = 0; k < degree; k++) {\n      powers[k] = k;\n    }\n  }\n  const F = new Matrix(n, degree);\n  const Y = new Matrix([y]);\n  for (let k = 0; k < degree; k++) {\n    for (let i = 0; i < n; i++) {\n      if (powers[k] === 0) {\n        F.set(i, k, 1);\n      } else {\n        F.set(i, k, Math.pow(x[i], powers[k]));\n      }\n    }\n  }\n\n  const FT = new MatrixTransposeView(F);\n  const A = FT.mmul(F);\n  const B = FT.mmul(new MatrixTransposeView(Y));\n\n  pr.degree = degree - 1;\n  pr.powers = powers;\n  pr.coefficients = solve(A, B).to1DArray();\n}\n","import PolynomialRegression from 'ml-regression-polynomial';\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 default 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: regression,\n  };\n}\n","import baselineCorrection from 'ml-baseline-correction-regression';\n\nimport { BaselineOutput } from './output.js';\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>} spectrum\n * @param {Array<number>} x Optional, Independent axis variable. If not specified, we use a linear grid\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 * @returns {BaselineOutput}\n */\nexport function iterativePolynomialBaseline(spectrum, x, options = {}) {\n  const numberPoints = spectrum.length;\n  if (!x) {\n    x = [...Array(numberPoints).keys()];\n  }\n\n  let output = baselineCorrection(x, spectrum, options);\n\n  return new BaselineOutput(output.baseline, output.corrected);\n}\n","import { xRollingAverage } from 'ml-spectra-processing';\n\nimport { BaselineOutput } from './output.js';\n\n/**\n\n *\n * @export\n * @param {Array<number>} spectrum\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(spectrum, options = {}) {\n  let window = Math.max(Math.round(spectrum.length * 0.1), 2);\n  let defaults = {\n    window: window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = Object.assign({}, defaults, options);\n  let baseline = xRollingAverage(spectrum, actualOptions);\n  let corrected = new Float64Array(spectrum.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = spectrum[i] - baseline[i];\n  }\n\n  return new BaselineOutput(baseline, corrected);\n}\n","import isAnyArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\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 * Following the implementation of the R baseline package (2)\n *\n * Reference:\n * (1) Kneen, M. A.; Annegarn, H. J.\n *     Algorithm for Fitting XRF, SEM and PIXE X-Ray Spectra Backgrounds.\n *     Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms 1996, 109–110, 209–213.\n *     https://doi.org/10.1016/0168-583X(95)00908-6.\n * (2) Kristian Hovde Liland, Bjørn-Helge Mevik, Roberto Canteri: baseline.\n *     https://cran.r-project.org/web/packages/baseline/index.html\n * @export\n * @param {Array} spectrum\n * @param {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 */\nexport function rollingBall(spectrum, options = {}) {\n  if (!isAnyArray(spectrum)) {\n    throw new Error('Spectrum must be an array');\n  }\n\n  if (spectrum.length === 0) {\n    throw new TypeError('Spectrum must not be empty');\n  }\n\n  const numberPoints = spectrum.length;\n  const maxima = new Float64Array(numberPoints);\n  const minima = new Float64Array(numberPoints);\n  const baseline = new Float64Array(numberPoints);\n\n  // windowM 4 percent of spectrum length\n  // windowS 8 percent of spectrum length\n\n  const {\n    windowM = Math.round(numberPoints * 0.04),\n    windowS = Math.round(numberPoints * 0.04),\n  } = options;\n\n  /* Find the minima */\n  let u1 = Math.ceil((windowM + 1) / 2);\n  let u2 = 0;\n\n  minima[0] = min(spectrum, { fromIndex: 0, toIndex: u1 + 1 });\n  /* Start of spectrum */\n  for (let i = 1; i < windowM; i++) {\n    u2 = u1 + 1 + ((i + 1) % 2);\n    minima[i] = Math.min(\n      min(spectrum, { fromIndex: u1 + 1, toIndex: u2 + 1 }),\n      minima[i - 1],\n    );\n    u1 = u2;\n  }\n\n  /* Main part of spectrum */\n  for (let j = windowM; j < numberPoints - windowM; j++) {\n    if (\n      spectrum[u1 + 1] <= minima[j - 1] &&\n      spectrum[u1 - windowM] !== minima[j - 1]\n    ) {\n      minima[j] = spectrum[u1 + 1];\n    } else {\n      minima[j] = min(spectrum, {\n        fromIndex: j - windowM,\n        toIndex: j + windowM + 1,\n      });\n    }\n    u1 = u1 + 1;\n  }\n  u1 = numberPoints - 2 * windowM - 2;\n\n  /* End part of spectrum */\n  for (let k = numberPoints - windowM; k < numberPoints; k++) {\n    u2 = u1 + 1 + (k % 2);\n    if (min(spectrum, { fromIndex: u1, toIndex: u2 }) > minima[k - 1]) {\n      minima[k] = minima[k - 1];\n    } else {\n      minima[k] = min(spectrum, { fromIndex: u2, toIndex: numberPoints - 1 });\n    }\n    u1 = u2;\n  }\n\n  /* Maximization */\n  u1 = Math.ceil((windowM + 1) / 2);\n  maxima[0] = max(minima, { fromIndex: 0, toIndex: u1 + 1 });\n\n  /* Start of spectrum */\n  for (let i = 1; i < windowM; i++) {\n    u2 = u1 + 1 + ((i + 1) % 2);\n    maxima[i] = Math.max(\n      max(minima, { fromIndex: u1 + 1, toIndex: u2 + 1 }),\n      maxima[i - 1],\n    );\n    u1 = u2;\n  }\n\n  /* Main part of spectrum */\n  for (let j = windowM; j < numberPoints - windowM; j++) {\n    if (\n      minima[u1 + 1] >= maxima[j - 1] &&\n      minima[u1 - windowM] !== maxima[j - 1]\n    ) {\n      maxima[j] = minima[u1 + 1];\n    } else {\n      maxima[j] = max(minima, {\n        fromIndex: j - windowM,\n        toIndex: j + windowM + 1,\n      });\n    }\n    u1 += 1;\n  }\n\n  /* End part of spectrum */\n  u1 = numberPoints - 2 * windowM - 2;\n  for (let k = numberPoints - windowM; k < numberPoints; k++) {\n    u2 = u1 + 1 + (k % 2);\n    if (max(minima, { fromIndex: u1, toIndex: u2 }) < maxima[k - 1]) {\n      maxima[k] = maxima[k - 1];\n    } else {\n      maxima[k] = max(minima, {\n        fromIndex: u2,\n        toIndex: numberPoints - 1,\n      });\n    }\n    u1 = u2;\n  }\n\n  /* Now, averaging to smooth */\n  /* start of spectrum */\n  u1 = Math.ceil(windowS / 2) - 1;\n  let v = maxima.slice(0, u1 + 1).reduce((a, b) => a + b, 0);\n\n  for (let i = 0; i < windowS; i++) {\n    u2 = u1 + 1 + ((i + 1) % 2);\n    v += maxima.slice(u1 + 1, u2 + 1).reduce((a, b) => a + b, 0);\n    baseline[i] = v / u2;\n    u1 = u2;\n  }\n\n  /* middle of spectrum */\n  v = maxima.slice(0, windowS * 2 + 1).reduce((a, b) => a + b, 0);\n  baseline[windowS] = v / (2 * windowS + 1);\n  for (let j = windowS + 1; j < numberPoints - windowS; j++) {\n    v = v - maxima[j - windowS - 1] + maxima[j + windowS];\n    baseline[j] = v / (2 * windowS + 1);\n  }\n\n  u1 = numberPoints - 2 * windowS;\n  v -= maxima[u1];\n  baseline[numberPoints - windowS] = v / (2 * windowS);\n\n  /* Finally, end of the spectrum */\n\n  for (let k = numberPoints - windowS + 1; k < numberPoints; k++) {\n    u2 = u1 + 1 + (k % 2);\n    v -= maxima.slice(u1, u2).reduce((a, b) => a + b, 0);\n    baseline[k] = v / (numberPoints - u2 + 1);\n    u1 = u2;\n  }\n\n  return baseline;\n}\n","import { rollingBall } from 'ml-rolling-ball-baseline';\n\nimport { BaselineOutput } from './output.js';\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>} spectrum\n * @param {Object} [options={}]\n * @param {Number} [options.windowM] - width of local window for minimization/maximization, defaults to 4% of the spectrum length\n * @param {Number} [options.windowS] - width of local window for smoothing, defaults to 8% of the specturm length\n * @returns {BaselineOutput}\n */\nexport function rollingBallBaseline(spectrum, options = {}) {\n  const baseline = rollingBall(spectrum, options);\n  let corrected = new Float64Array(spectrum.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = spectrum[i] - baseline[i];\n  }\n\n  return new BaselineOutput(baseline, corrected);\n}\n","import { xRollingMedian } from 'ml-spectra-processing';\n\nimport { BaselineOutput } from './output.js';\n\n/**\n\n *\n * @export\n * @param {Array<number>} spectrum\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(spectrum, options = {}) {\n  let window = Math.max(Math.round(spectrum.length * 0.1), 2);\n  let defaults = {\n    window: window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = Object.assign({}, defaults, options);\n  let baseline = xRollingMedian(spectrum, actualOptions);\n  let corrected = new Float64Array(spectrum.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = spectrum[i] - baseline[i];\n  }\n\n  return new BaselineOutput(baseline, corrected);\n}\n","import isArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport sum from 'ml-array-sum';\n\nfunction norm(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _options$algorithm = options.algorithm,\n      algorithm = _options$algorithm === void 0 ? 'absolute' : _options$algorithm,\n      _options$sumValue = options.sumValue,\n      sumValue = _options$sumValue === void 0 ? 1 : _options$sumValue,\n      _options$maxValue = options.maxValue,\n      maxValue = _options$maxValue === void 0 ? 1 : _options$maxValue;\n\n  if (!isArray(input)) {\n    throw new Error('input must be an array');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isArray(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  if (input.length === 0) {\n    throw new Error('input must not be empty');\n  }\n\n  switch (algorithm.toLowerCase()) {\n    case 'absolute':\n      {\n        var absoluteSumValue = absoluteSum(input) / sumValue;\n        if (absoluteSumValue === 0) return input.slice(0);\n\n        for (var i = 0; i < input.length; i++) {\n          output[i] = input[i] / absoluteSumValue;\n        }\n\n        return output;\n      }\n\n    case 'max':\n      {\n        var currentMaxValue = max(input);\n        if (currentMaxValue === 0) return input.slice(0);\n        var factor = maxValue / currentMaxValue;\n\n        for (var _i = 0; _i < input.length; _i++) {\n          output[_i] = input[_i] * factor;\n        }\n\n        return output;\n      }\n\n    case 'sum':\n      {\n        var sumFactor = sum(input) / sumValue;\n        if (sumFactor === 0) return input.slice(0);\n\n        for (var _i2 = 0; _i2 < input.length; _i2++) {\n          output[_i2] = input[_i2] / sumFactor;\n        }\n\n        return output;\n      }\n\n    default:\n      throw new Error(\"norm: unknown algorithm: \".concat(algorithm));\n  }\n}\n\nfunction absoluteSum(input) {\n  var sumValue = 0;\n\n  for (var i = 0; i < input.length; i++) {\n    sumValue += Math.abs(input[i]);\n  }\n\n  return sumValue;\n}\n\nexport default norm;\n","const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","import isArray 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/**\r\n * Fill an array with sequential numbers\r\n * @param {Array<number>} [input] - optional destination array (if not provided a new array will be created)\r\n * @param {object} [options={}]\r\n * @param {number} [options.from=0] - first value in the array\r\n * @param {number} [options.to=10] - last value in the array\r\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\r\n * @param {number} [options.step] - if not provided calculated from size\r\n * @return {Array<number>}\r\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' && !isArray(input)) {\n    options = input;\n    input = [];\n  }\n\n  if (!isArray(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 default sequentialFill;\n","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n *\n * The method will always check if from if lower than to and will swap if required.\n * @param {Array} [zones=[]]\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of a zone\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of a zone\n */\n\nexport function normalize(zones = [], options = {}) {\n  if (zones.length === 0) return [];\n  let {\n    from = Number.NEGATIVE_INFINITY,\n    to = Number.POSITIVE_INFINITY,\n  } = options;\n  if (from > to) [from, to] = [to, from];\n\n  zones = JSON.parse(JSON.stringify(zones)).map((zone) =>\n    zone.from > zone.to ? { from: zone.to, to: zone.from } : zone,\n  );\n  zones = zones.sort((a, b) => {\n    if (a.from !== b.from) return a.from - b.from;\n    return a.to - b.to;\n  });\n\n  zones.forEach((zone) => {\n    if (from > zone.from) zone.from = from;\n    if (to < zone.to) zone.to = to;\n  });\n\n  zones = zones.filter((zone) => zone.from <= zone.to);\n  if (zones.length === 0) return [];\n\n  let currentZone = zones[0];\n  let result = [currentZone];\n  for (let i = 1; i < zones.length; i++) {\n    let zone = zones[i];\n    if (zone.from <= currentZone.to) {\n      currentZone.to = zone.to;\n    } else {\n      currentZone = zone;\n      result.push(currentZone);\n    }\n  }\n  return result;\n}\n","import { normalize } from './normalize';\n\n/**\n * Convert an array of exclusions and keep only from / to\n *\n * The method will always check if from if lower than to and will swap if required.\n * @param {Array} [exclusions=[]]\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of zones (after inversion)\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of zones (after inversion)\n */\n\nexport function invert(exclusions = [], options = {}) {\n  let {\n    from = Number.NEGATIVE_INFINITY,\n    to = Number.POSITIVE_INFINITY,\n  } = options;\n  if (from > to) [from, to] = [to, from];\n\n  exclusions = normalize(exclusions, { from, to });\n  if (exclusions.length === 0) return [{ from, to }];\n\n  let zones = [];\n  for (let i = 0; i < exclusions.length; i++) {\n    let exclusion = exclusions[i];\n    let nextExclusion = exclusions[i + 1];\n    if (i === 0) {\n      if (exclusion.from > from) {\n        zones.push({ from, to: exclusion.from });\n      }\n    }\n    if (i === exclusions.length - 1) {\n      if (exclusion.to < to) {\n        zones.push({ from: exclusion.to, to });\n      }\n    } else {\n      zones.push({ from: exclusion.to, to: nextExclusion.from });\n    }\n  }\n\n  return zones;\n}\n","import { normalize } from './normalize';\n\n/**\n * Add the number of points per zone to reach a specified total\n * @param {Array} [zones=[]]\n * @param {number} [numberOfPoints] Total number of points to distribute between zones\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of a zone\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of a zone\n */\n\nexport function zonesWithPoints(zones, numberOfPoints, options = {}) {\n  if (zones.length === 0) return zones;\n  zones = normalize(zones, options);\n\n  const totalSize = zones.reduce((previous, current) => {\n    return previous + (current.to - current.from);\n  }, 0);\n\n  let unitsPerPoint = totalSize / numberOfPoints;\n  let currentTotal = 0;\n  for (let i = 0; i < zones.length - 1; i++) {\n    let zone = zones[i];\n    zone.numberOfPoints = Math.min(\n      Math.round((zone.to - zone.from) / unitsPerPoint),\n      numberOfPoints - currentTotal,\n    );\n    currentTotal += zone.numberOfPoints;\n  }\n\n  zones[zones.length - 1].numberOfPoints = numberOfPoints - currentTotal;\n\n  return zones;\n}\n","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param {number} x0\n * @param {number} x1\n * @param {number} slope\n * @param {number} intercept\n * @return {number} integral value.\n */\nexport default function integral(x0, x1, slope, intercept) {\n  return (\n    0.5 * slope * x1 * x1 +\n    intercept * x1 -\n    (0.5 * slope * x0 * x0 + intercept * x0)\n  );\n}\n","import integral from './integral';\n\n/**\n * function that retrieves the getEquallySpacedData with the variant \"smooth\"\n *\n * @param {Array<number>} x\n * @param {Array<number>} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(x, y, from, to, numberOfPoints) {\n  let xLength = x.length;\n\n  let step = (to - from) / (numberOfPoints - 1);\n  let halfStep = step / 2;\n\n  let output = new Array(numberOfPoints);\n\n  let initialOriginalStep = x[1] - x[0];\n  let lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n\n  // Init main variables\n  let min = from - halfStep;\n  let max = from + halfStep;\n\n  let previousX = Number.MIN_VALUE;\n  let previousY = 0;\n  let nextX = x[0] - initialOriginalStep;\n  let nextY = 0;\n\n  let currentValue = 0;\n  let slope = 0;\n  let intercept = 0;\n  let sumAtMin = 0;\n  let sumAtMax = 0;\n\n  let i = 0; // index of input\n  let j = 0; // index of output\n\n  function getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n  }\n\n  let add = 0;\n  main: while (true) {\n    if (previousX <= min && min <= nextX) {\n      add = integral(0, min - previousX, slope, previousY);\n      sumAtMin = currentValue + add;\n    }\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\n      output[j++] = (sumAtMax - sumAtMin) / step;\n\n      if (j === numberOfPoints) {\n        break main;\n      }\n\n      min = max;\n      max += step;\n      sumAtMin = sumAtMax;\n    }\n\n    currentValue += integral(previousX, nextX, slope, intercept);\n\n    previousX = nextX;\n    previousY = nextY;\n\n    if (i < xLength) {\n      nextX = x[i];\n      nextY = y[i];\n      i++;\n    } else if (i === xLength) {\n      nextX += lastOriginalStep;\n      nextY = 0;\n    }\n\n    slope = getSlope(previousX, previousY, nextX, nextY);\n    intercept = -slope * previousX + previousY;\n  }\n\n  return output;\n}\n","/**\n * function that retrieves the getEquallySpacedData with the variant \"slot\"\n *\n * @param {Array<number>} x\n * @param {Array<number>} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(x, y, from, to, numberOfPoints) {\n  let xLength = x.length;\n\n  let step = (to - from) / (numberOfPoints - 1);\n  let halfStep = step / 2;\n  let lastStep = x[x.length - 1] - x[x.length - 2];\n\n  let start = from - halfStep;\n  let output = new Array(numberOfPoints);\n\n  // Init main variables\n  let min = start;\n  let max = start + step;\n\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\n  let currentValue = 0;\n\n  // for slot algorithm\n  let currentPoints = 0;\n\n  let i = 1; // index of input\n  let j = 0; // index of output\n\n  main: while (true) {\n    if (previousX >= nextX) throw new Error('x must be an increasing serie');\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\n      output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n      j++;\n\n      if (j === numberOfPoints) {\n        break main;\n      }\n\n      min = max;\n      max += step;\n      currentValue = 0;\n      currentPoints = 0;\n    }\n\n    if (previousX > min) {\n      currentValue += previousY;\n      currentPoints++;\n    }\n\n    if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n      currentPoints--;\n    }\n\n    previousX = nextX;\n    previousY = nextY;\n\n    if (i < xLength) {\n      nextX = x[i];\n      nextY = y[i];\n      i++;\n    } else {\n      nextX += lastStep;\n      nextY = 0;\n      frontOutsideSpectra++;\n    }\n  }\n\n  return output;\n}\n","import sequentialFill from 'ml-array-sequential-fill';\nimport { zonesWithPoints, invert } from 'ml-zones';\n\nimport equallySpacedSmooth from './equallySpacedSmooth';\nimport equallySpacedSlot from './equallySpacedSlot';\n\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 the new 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 the new array.\n *\n * If exclusions zone are present, zones are ignored !\n * @param {object} [arrayXY={}] - object containing 2 properties x and y (both an array)\n * @param {object} [options={}]\n * @param {number} [options.from=x[0]]\n * @param {number} [options.to=x[x.length-1]]\n * @param {string} [options.variant='smooth']\n * @param {number} [options.numberOfPoints=100]\n * @param {Array} [options.exclusions=[]] array of from / to that should be skipped for the generation of the points\n * @param {Array} [options.zones=[]] array of from / to that should be kept\n * @return {object<x: Array, y:Array>} new object with x / y array with the equally spaced data.\n */\n\nexport default function equallySpaced(arrayXY = {}, options = {}) {\n  let { x, y } = arrayXY;\n  let xLength = x.length;\n  let reverse = false;\n  if (x.length > 1 && x[0] > x[1]) {\n    x = x.slice().reverse();\n    y = y.slice().reverse();\n    reverse = true;\n  }\n\n  let {\n    from = x[0],\n    to = x[xLength - 1],\n    variant = 'smooth',\n    numberOfPoints = 100,\n    exclusions = [],\n    zones = [],\n  } = options;\n\n  if (xLength !== y.length) {\n    throw new RangeError(\"the x and y vector doesn't have the same size.\");\n  }\n\n  if (typeof from !== 'number' || isNaN(from)) {\n    throw new RangeError(\"'from' option must be a number\");\n  }\n\n  if (typeof to !== 'number' || isNaN(to)) {\n    throw new RangeError(\"'to' option must be a number\");\n  }\n\n  if (typeof numberOfPoints !== 'number' || isNaN(numberOfPoints)) {\n    throw new RangeError(\"'numberOfPoints' option must be a number\");\n  }\n\n  if (numberOfPoints < 2) {\n    throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n  }\n\n  if (zones.length === 0) {\n    zones = invert(exclusions, { from, to });\n  }\n\n  zones = zonesWithPoints(zones, numberOfPoints, { from, to });\n\n  let xResult = [];\n  let yResult = [];\n  for (let zone of zones) {\n    let zoneResult = processZone(\n      x,\n      y,\n      zone.from,\n      zone.to,\n      zone.numberOfPoints,\n      variant,\n      reverse,\n    );\n\n    xResult = xResult.concat(zoneResult.x);\n    yResult = yResult.concat(zoneResult.y);\n  }\n  if (reverse) {\n    if (from < to) {\n      return { x: xResult.reverse(), y: yResult.reverse() };\n    } else {\n      return { x: xResult, y: yResult };\n    }\n  } else {\n    if (from < to) {\n      return { x: xResult, y: yResult };\n    } else {\n      return { x: xResult.reverse(), y: yResult.reverse() };\n    }\n  }\n}\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\n  let output =\n    variant === 'slot'\n      ? equallySpacedSlot(x, y, from, to, numberOfPoints)\n      : equallySpacedSmooth(x, y, from, to, numberOfPoints);\n\n  return {\n    x: sequentialFill({\n      from,\n      to,\n      size: numberOfPoints,\n    }),\n    y: output,\n  };\n}\n","export default function getZones(from, to, exclusions = []) {\n  if (from > to) {\n    [from, to] = [to, from];\n  }\n\n  // in exclusions from and to have to be defined\n  exclusions = exclusions.filter(\n    (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n  );\n\n  exclusions = JSON.parse(JSON.stringify(exclusions));\n  // we ensure that from before to\n  exclusions.forEach((exclusion) => {\n    if (exclusion.from > exclusion.to) {\n      [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n    }\n  });\n\n  exclusions.sort((a, b) => a.from - b.from);\n\n  // we will rework the exclusions in order to remove overlap and outside range (from / to)\n  exclusions.forEach((exclusion) => {\n    if (exclusion.from < from) exclusion.from = from;\n    if (exclusion.to > to) exclusion.to = to;\n  });\n  for (let i = 0; i < exclusions.length - 1; i++) {\n    if (exclusions[i].to > exclusions[i + 1].from) {\n      exclusions[i].to = exclusions[i + 1].from;\n    }\n  }\n  exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n  if (!exclusions || exclusions.length === 0) {\n    return [{ from, to }];\n  }\n\n  let zones = [];\n  let currentFrom = from;\n  for (let exclusion of exclusions) {\n    if (currentFrom < exclusion.from) {\n      zones.push({\n        from: currentFrom,\n        to: exclusion.from\n      });\n    }\n\n    currentFrom = exclusion.to;\n  }\n  if (currentFrom < to) {\n    zones.push({\n      from: currentFrom,\n      to: to\n    });\n  }\n\n  return zones;\n}\n","import getZones from './getZones';\n\n/**\n * Filter an array x/y based on various criteria\n * x points are expected to be sorted\n *\n * @param {object} points\n * @param {object} [options={}]\n * @param {array} [options.from]\n * @param {array} [options.to]\n * @param {array} [options.exclusions=[]]\n * @return {{x: Array<number>, y: Array<number>}}\n */\n\nexport default function filterX(points, options = {}) {\n  const { x, y } = points;\n  const { from = x[0], to = x[x.length - 1], exclusions = [] } = options;\n\n  let zones = getZones(from, to, exclusions);\n\n\n  let currentZoneIndex = 0;\n  let newX = [];\n  let newY = [];\n  let position = 0;\n  while (position < x.length) {\n    if (\n      x[position] <= zones[currentZoneIndex].to &&\n      x[position] >= zones[currentZoneIndex].from\n    ) {\n      newX.push(x[position]);\n      newY.push(y[position]);\n    } else {\n      if (x[position] > zones[currentZoneIndex].to) {\n        currentZoneIndex++;\n        if (!zones[currentZoneIndex]) break;\n      }\n    }\n    position++;\n  }\n\n  return {\n    x: newX,\n    y: newY\n  };\n}\n","'use strict';\n\nvar defaultOptions = {\n  size: 1,\n  value: 0\n};\n\n/**\n * Case when the entry is an array\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction arrayCase(data, options) {\n  var len = data.length;\n  if (typeof options.size === 'number') {\n    options.size = [options.size, options.size];\n  }\n\n  var cond = len + options.size[0] + options.size[1];\n\n  var output;\n  if (options.output) {\n    if (options.output.length !== cond) {\n      throw new RangeError('Wrong output size');\n    }\n    output = options.output;\n  } else {\n    output = new Array(cond);\n  }\n\n  var i;\n  if (options.value === 'circular') {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) {\n        output[i] = data[(len - (options.size[0] % len) + i) % len];\n      } else if (i < options.size[0] + len) {\n        output[i] = data[i - options.size[0]];\n      } else {\n        output[i] = data[(i - options.size[0]) % len];\n      }\n    }\n  } else if (options.value === 'replicate') {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = data[0];\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = data[len - 1];\n    }\n  } else if (options.value === 'symmetric') {\n    if (options.size[0] > len || options.size[1] > len) {\n      throw new RangeError(\n        'expanded value should not be bigger than the data length'\n      );\n    }\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = data[options.size[0] - 1 - i];\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = data[2 * len + options.size[0] - i - 1];\n    }\n  } else {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = options.value;\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = options.value;\n    }\n  }\n\n  return output;\n}\n\n/**\n * Case when the entry is a matrix\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction matrixCase(data, options) {\n  // var row = data.length;\n  // var col = data[0].length;\n  if (options.size[0] === undefined) {\n    options.size = [options.size, options.size, options.size, options.size];\n  }\n  throw new Error('matrix not supported yet, sorry');\n}\n\n/**\n * Pads and array\n * @param {Array <number>} data\n * @param {object} options\n */\nfunction padArray(data, options) {\n  options = Object.assign({}, defaultOptions, options);\n  if (Array.isArray(data)) {\n    if (Array.isArray(data[0])) return matrixCase(data, options);\n    else return arrayCase(data, options);\n  } else {\n    throw new TypeError('data should be an array');\n  }\n}\n\nmodule.exports = padArray;\n","import { Matrix, MatrixTransposeView, inverse } from 'ml-matrix';\nimport padArray from 'ml-pad-array';\n\n/**\n * Factorial of a number\n * @ignore\n * @param n\n * @return {number}\n */\nfunction factorial(n) {\n  let r = 1;\n  while (n > 0) r *= n--;\n  return r;\n}\n\nconst defaultOptions = {\n  windowSize: 5,\n  derivative: 1,\n  polynomial: 2,\n  pad: 'none',\n  padValue: 'replicate',\n};\n\n/**\n * Savitzky-Golay filter\n * @param {Array <number>} data\n * @param {number} h\n * @param {Object} options\n * @returns {Array}\n */\nexport default function savitzkyGolay(data, h, options) {\n  options = Object.assign({}, defaultOptions, options);\n  if (\n    options.windowSize % 2 === 0 ||\n    options.windowSize < 5 ||\n    !Number.isInteger(options.windowSize)\n  ) {\n    throw new RangeError(\n      'Invalid window size (should be odd and at least 5 integer number)',\n    );\n  }\n  if (options.derivative < 0 || !Number.isInteger(options.derivative)) {\n    throw new RangeError('Derivative should be a positive integer');\n  }\n  if (options.polynomial < 1 || !Number.isInteger(options.polynomial)) {\n    throw new RangeError('Polynomial should be a positive integer');\n  }\n\n  let C, norm;\n  let step = Math.floor(options.windowSize / 2);\n\n  if (options.pad === 'pre') {\n    data = padArray(data, { size: step, value: options.padValue });\n  }\n\n  let ans = new Array(data.length - 2 * step);\n\n  if (\n    options.windowSize === 5 &&\n    options.polynomial === 2 &&\n    (options.derivative === 1 || options.derivative === 2)\n  ) {\n    if (options.derivative === 1) {\n      C = [-2, -1, 0, 1, 2];\n      norm = 10;\n    } else {\n      C = [2, -1, -2, -1, 2];\n      norm = 7;\n    }\n  } else {\n    let J = Matrix.ones(options.windowSize, options.polynomial + 1);\n    let inic = -(options.windowSize - 1) / 2;\n    for (let i = 0; i < J.rows; i++) {\n      for (let j = 0; j < J.columns; j++) {\n        if (inic + 1 !== 0 || j !== 0) J.set(i, j, Math.pow(inic + i, j));\n      }\n    }\n    let Jtranspose = new MatrixTransposeView(J);\n    let Jinv = inverse(Jtranspose.mmul(J));\n    C = Jinv.mmul(Jtranspose);\n    C = C.getRow(options.derivative);\n    norm = 1 / factorial(options.derivative);\n  }\n  let det = norm * Math.pow(h, options.derivative);\n  for (let k = step; k < data.length - step; k++) {\n    let d = 0;\n    for (let l = 0; l < C.length; l++) d += (C[l] * data[l + k - step]) / det;\n    ans[k - step] = d;\n  }\n\n  if (options.pad === 'post') {\n    ans = padArray(ans, { size: step, value: options.padValue });\n  }\n\n  return ans;\n}\n","'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","import {\n  airPLSBaseline,\n  rollingAverageBaseline,\n  iterativePolynomialBaseline,\n  rollingBallBaseline,\n  rollingMedianBaseline,\n} from 'baselines';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport normed from 'ml-array-normed';\nimport rescale from 'ml-array-rescale';\nimport equallySpaced from 'ml-array-xy-equally-spaced';\nimport filterX from 'ml-array-xy-filter-x';\nimport savitzkyGolay from 'ml-savitzky-golay';\nimport {\n  xDivide,\n  xSubtract,\n  xMultiply,\n  xAdd,\n  xIsMonotone,\n} from 'ml-spectra-processing';\nimport Stat from 'ml-stat/array';\n/**\n *\n * @private\n * @param {object} spectrum\n * @param {object} [options={}]\n * @param {number} [options.from=x.min]\n * @param {number} [options.to=x.max]\n * @param {number} [options.numberOfPoints]\n * @param {String} [options.processing] Allows to calculate derivatives\n * @param {Array} [options.filters=[]] Array of object containing 'name' (centerMean, divideSD, normalize, rescale) and 'options'\n * @param {Array} [options.exclusions=[]]\n * @returns {DataXY}\n */\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n  let data = {\n    x: spectrum.variables.x.data,\n    y: spectrum.variables.y.data,\n  };\n  let newSpectrum = {\n    variables: {\n      x: {\n        data: spectrum.variables.x.data,\n        units: spectrum.variables.x.units,\n        label: spectrum.variables.x.label,\n      },\n      y: {\n        data: spectrum.variables.y.data,\n        units: spectrum.variables.y.units,\n        label: spectrum.variables.y.label,\n      },\n    },\n  };\n  if (spectrum.title) newSpectrum.title = spectrum.title;\n  if (spectrum.dataType) newSpectrum.dataType = spectrum.dataType;\n  if (spectrum.meta) newSpectrum.meta = spectrum.meta;\n\n  let {\n    from = spectrum.variables.x.min,\n    to = spectrum.variables.x.max,\n    numberOfPoints,\n    filters = [],\n    exclusions = [],\n    processing = '',\n  } = options;\n  let { x, y } = filterX(data, { from, to });\n\n  switch (processing) {\n    case 'firstDerivative':\n      if (options.processing) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label =\n          newSpectrum.variables.y.label &&\n          `1st derivative of ${newSpectrum.variables.y.label.replace(\n            /\\s*\\[.*\\]/,\n            '',\n          )}`;\n        y = savitzkyGolay(y, 1, {\n          derivative: 1,\n          polynomial: 2,\n          windowSize: 5,\n        });\n        x = x.slice(2, x.length - 2);\n      }\n      break;\n    case 'secondDerivative':\n      if (options.processing) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label =\n          newSpectrum.variables.y.label &&\n          `2nd derivative of ${newSpectrum.variables.y.label.replace(\n            /\\s*\\[.*\\]/,\n            '',\n          )}`;\n        y = savitzkyGolay(y, 1, {\n          derivative: 2,\n          polynomial: 2,\n          windowSize: 5,\n        });\n        x = x.slice(2, x.length - 2);\n      }\n      break;\n    case 'thirdDerivative':\n      if (options.processing) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label =\n          newSpectrum.variables.y.label &&\n          `3rd derivative of ${newSpectrum.variables.y.label.replace(\n            /\\s*\\[.*\\]/,\n            '',\n          )}`;\n        y = savitzkyGolay(y, 1, {\n          derivative: 3,\n          polynomial: 2,\n          windowSize: 5,\n        });\n        x = x.slice(2, x.length - 2);\n      }\n      break;\n    default:\n  }\n\n  if (filters.length) {\n    // filters change the y axis, we get rid of the units\n    newSpectrum.variables.y.units = '';\n    newSpectrum.variables.y.label =\n      newSpectrum.variables.y.label &&\n      newSpectrum.variables.y.label.replace(/\\s*\\[.*\\]/, '');\n  }\n\n  for (let filter of filters) {\n    let filterOptions = filter.options || {};\n    switch (filter.name.toLowerCase()) {\n      case 'centermean': {\n        let mean = Stat.mean(y);\n        y = xSubtract(y, mean);\n        break;\n      }\n      case 'dividebysd': {\n        let std = Stat.standardDeviation(y);\n        y = xDivide(y, std);\n        break;\n      }\n      case 'normalize': {\n        y = normed(y, {\n          sumValue: filterOptions.value ? Number(filterOptions.value) : 1,\n          algorithm: 'absolute',\n        });\n        break;\n      }\n      case 'rescale': {\n        y = rescale(y, {\n          min: filterOptions.min ? Number(filterOptions.min) : 0,\n          max: filterOptions.max ? Number(filterOptions.max) : 1,\n        });\n        break;\n      }\n      case 'dividebymax': {\n        let maxValue = max(y);\n        y = xDivide(y, maxValue);\n        break;\n      }\n      case 'multiply': {\n        y = xMultiply(y, filterOptions.value ? Number(filterOptions.value) : 1);\n        break;\n      }\n      case 'add': {\n        y = xAdd(y, filterOptions.value ? Number(filterOptions.value) : 0);\n        break;\n      }\n      case 'airplsbaseline': {\n        y = airPLSBaseline(y, filterOptions).correctedSpectrum;\n        break;\n      }\n      case 'rollingaveragebaseline': {\n        y = rollingAverageBaseline(y, filterOptions).correctedSpectrum;\n        break;\n      }\n      case 'iterativepolynomialbaseline': {\n        y = iterativePolynomialBaseline(y, undefined, filterOptions)\n          .correctedSpectrum;\n        break;\n      }\n      case 'rollingballbaseline': {\n        y = rollingBallBaseline(y, filterOptions).correctedSpectrum;\n        break;\n      }\n      case 'rollingmedianbaseline': {\n        y = rollingMedianBaseline(y, filterOptions).correctedSpectrum;\n        break;\n      }\n      case '':\n      case undefined:\n        break;\n      default:\n        throw new Error(`Unknown process kind: ${process.kind}`);\n    }\n  }\n\n  if (!numberOfPoints) {\n    data = filterX({ x, y }, { from, to, exclusions });\n  } else {\n    data = equallySpaced({ x, y }, { from, to, numberOfPoints, exclusions });\n  }\n\n  newSpectrum.variables.x.data = x;\n  newSpectrum.variables.x.min = min(x);\n  newSpectrum.variables.x.max = max(x);\n  newSpectrum.variables.x.isMonotone = xIsMonotone(x);\n  newSpectrum.variables.y.data = y;\n  newSpectrum.variables.y.min = min(y);\n  newSpectrum.variables.y.max = max(y);\n  newSpectrum.variables.y.isMonotone = xIsMonotone(y);\n\n  return newSpectrum;\n}\n","/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Qty = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-imp\", \"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<Gal>\" : [[\"Gal\"], 1e-2, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.7.6\";\n\n  return Qty;\n\n})));\n","import Qty from 'js-quantities';\n\nexport function convertUnit(array, fromUnit, toUnit) {\n  fromUnit = normalize(fromUnit);\n  toUnit = normalize(toUnit);\n\n  if (fromUnit === toUnit) return array;\n\n  try {\n    const convert = Qty.swiftConverter(fromUnit, toUnit); // Configures converter\n    return convert(array);\n  } catch (e) {\n    return undefined;\n  }\n}\n\nfunction normalize(unit) {\n  unit = unit.replace(/°C/g, 'tempC');\n  unit = unit.replace(/°F/g, 'tempF');\n  unit = unit.replace(/(^|\\W)K(\\W|$)/g, '$1tempK$2');\n  return unit;\n}\n","const testRegExp = /^\\/((?:\\\\\\/|[^/])+)\\/([migyu]{0,5})?$/;\n\nexport function ensureRegexp(string) {\n  const parts = testRegExp.exec(string);\n  if (parts) {\n    try {\n      return new RegExp(parts[1], parts[2]);\n    } catch (err) {\n      return stringToRegexp(string);\n    }\n  } else {\n    return stringToRegexp(string);\n  }\n}\n\nfunction stringToRegexp(string, flags = 'i') {\n  return new RegExp(\n    string.replace(/[[\\]\\\\{}()+*?.$^|]/g, function (match) {\n      return `\\\\${match}`;\n    }),\n    flags,\n  );\n}\n","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport { xIsMonotone } from 'ml-spectra-processing';\n\nimport { convertUnit } from './convertUnit';\n\nexport function getConvertedVariable(variable, newUnits) {\n  const data =\n    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,\n    min: min(data),\n    max: max(data),\n    isMonotone: xIsMonotone(data),\n  };\n}\n","import { convertUnit } from './convertUnit';\nimport { ensureRegexp } from './ensureRegexp';\nimport { getConvertedVariable } from './getConvertedVariable';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param {Array} [spectra] Array of spectra\n * @param {object} [selector={}]\n * @param {string} [selector.units] Units separated by \"vs\", e.g., \"g vs °C\"\n * @param {string} [selector.xUnits]\n * @param {string} [selector.yUnits]\n * @param {string} [selector.labels] Labels separated by \"vs\", e.g., \"relative pressure vs excess adsorption\"\n * @param {string} [selector.xLabel] will be converted to case insensitive regexp\n * @param {string} [selector.yLabel] will be converted to case insensitive regexp\n * @param {string} [selector.dataType] will be converted to case insensitive regexp\n * @param {string} [selector.title] will be converted to case insensitive regexp\n * @param {object} [selector.meta] object of key/value to filter meta information. Each value will be converted to case insensitive regexp\n * @returns {Spectrum}\n */\n\nexport function getXYSpectrum(spectra = [], selector = {}) {\n  if (spectra.length < 1) return;\n\n  for (let spectrum of spectra) {\n    let variableNames = Object.keys(spectrum.variables);\n    if (!variableNames.length > 1) continue;\n    let {\n      dataType,\n      title,\n      xUnits,\n      yUnits,\n      units,\n      labels,\n      xLabel,\n      yLabel,\n      meta,\n    } = selector;\n\n    // we filter on generatl spectrum information\n    if (dataType) {\n      dataType = ensureRegexp(dataType);\n      if (!spectrum.dataType || !spectrum.dataType.match(dataType)) continue;\n    }\n\n    if (title) {\n      title = ensureRegexp(title);\n      if (!spectrum.title || !spectrum.title.match(title)) continue;\n    }\n\n    if (meta && typeof meta === 'object') {\n      if (!spectrum.meta) continue;\n      for (let key in spectrum.meta) {\n        if (!spectrum.meta[key]) continue;\n        let value = ensureRegexp(spectrum.meta[key]);\n        if (!spectrum.meta[key].match(value)) continue;\n      }\n    }\n\n    if (units && !xUnits && !yUnits) [yUnits, xUnits] = units.split(/\\s*vs\\s*/);\n    if (labels && !xLabel && !yLabel) {\n      [xLabel, yLabel] = labels.split(/\\s*vs\\s*/);\n    }\n\n    if (xLabel) xLabel = ensureRegexp(xLabel);\n    if (yLabel) yLabel = ensureRegexp(yLabel);\n\n    let x = getPossibleVariable(spectrum.variables, {\n      units: xUnits,\n      label: xLabel,\n      variableName: 'x',\n    });\n    let y = getPossibleVariable(spectrum.variables, {\n      units: yUnits,\n      label: yLabel,\n      variableName: 'y',\n    });\n\n    if (x && y) {\n      return {\n        title: spectrum.title,\n        dataType: spectrum.dataType,\n        meta: spectrum.meta,\n        variables: { x, y },\n      };\n    }\n  }\n  return;\n}\n\nfunction getPossibleVariable(variables, selector = {}) {\n  const { units, label, variableName } = selector;\n  let possible = { ...variables };\n  if (units !== undefined) {\n    for (let key in possible) {\n      let converted = convertUnit(1, variables[key].units, units);\n      if (converted) {\n        possible[key] = getConvertedVariable(variables[key], units);\n      } else {\n        delete possible[key];\n      }\n    }\n  }\n\n  if (label !== undefined) {\n    for (let key in possible) {\n      if (!variables[key].label.match(label)) {\n        delete possible[key];\n      }\n    }\n  }\n\n  if (possible[variableName]) return possible[variableName];\n  if (possible[variableName.toUpperCase()]) {\n    return possible[variableName.toUpperCase()];\n  }\n  if (Object.keys(possible).length > 0) {\n    return possible[Object.keys(possible)[0]];\n  }\n}\n","import isAnyArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport { xIsMonotone } from 'ml-spectra-processing';\n\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum';\nimport { getXYSpectrum } from './util/getXYSpectrum';\n\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 * @class Analysis\n * @param {object} [options={}]\n * @param {string} [options.id=randomString] unique identifier\n * @param {string} [options.label=options.id] human redeable label\n */\nexport class Analysis {\n  constructor(options = {}) {\n    this.id = options.id || Math.random().toString(36).substring(2, 10);\n    this.label = options.label || this.id;\n    this.spectra = [];\n    this.cache = {};\n  }\n\n  /**\n   * Add a spectrum in the internal spectra variable\n   * @param {object} [variables]\n   * @param {object} [variables.x]\n   * @param {array} [variables.x.data]\n   * @param {array} [variables.x.units='x']\n   * @param {array} [variables.x.label='x']\n   * @param {object} [variables.y]\n   * @param {array} [variables.y.data]\n   * @param {array} [variables.y.units='y']\n   * @param {array} [variables.y.label='y']\n   * @param {object} [options={}]\n   * @param {string} [options.dataType='']\n   * @param {string} [options.title='']\n   * @param {string} [options.meta={}]\n   * @param {string} [options.tmp={}] Any temporary data\n   */\n  pushSpectrum(variables, options = {}) {\n    this.spectra.push(standardizeData(variables, options));\n    this.cache = {};\n  }\n\n  /**\n   * Retrieve a Spectrum based on x/y units\n   * @param {object} [selector={}]\n   * @param {string} [selector.units] Units separated by vs like for example \"g vs °C\"\n   * @param {string} [selector.xUnits] if undefined takes the first variable\n   * @param {string} [selector.yUnits] if undefined takes the second variable\n   * @returns {Spectrum}\n   */\n  getXYSpectrum(selector = {}) {\n    let id = JSON.stringify(selector);\n    if (!this.cache[id]) {\n      this.cache[id] = getXYSpectrum(this.spectra, selector);\n    }\n    return this.cache[id];\n  }\n\n  /**\n   * Retrieve a xy object\n   * @param {object} [selector={}]\n   * @param {string} [selector.units] Units separated by vs like for example \"g vs °C\"\n   * @param {string} [selector.xUnits] if undefined takes the first variable\n   * @param {string} [selector.yUnits] if undefined takes the second variable\n   * @returns {Spectrum}\n   */\n  getXY(selector = {}) {\n    let spectrum = this.getXYSpectrum(selector);\n    if (!spectrum) return undefined;\n    return {\n      x: spectrum.variables.x.data,\n      y: spectrum.variables.y.data,\n    };\n  }\n\n  /**\n   * Return the data object for specific x/y units with possibly some\n   * normalization options\n   * @param {object} [options={}]\n   * @param {object} [options.selector]\n   * @param {string} [options.selector.xUnits] // if undefined takes the first variable\n   * @param {string} [options.selector.yUnits] // if undefined takes the second variable\n   * @param {object} [options.normalization]\n   *\n   */\n  getNormalizedSpectrum(options = {}) {\n    const { normalization, selector } = options;\n    const spectrum = this.getXYSpectrum(selector);\n    if (!spectrum) return undefined;\n    return getNormalizedSpectrum(spectrum, normalization);\n  }\n\n  /**\n   * Returns the xLabel\n   * @param {object} [selector]\n   * @param {string} [selector.xUnits] // if undefined takes the first variable\n   * @param {string} [selector.yUnits] // if undefined takes the second variable\n   * @returns {string}\n   */\n  getXLabel(selector) {\n    return this.getXYSpectrum(selector).variables.x.label;\n  }\n\n  /**\n   * Returns the yLabel\n   * @param {object} [selector]\n   * @param {string} [selector.xUnits] // if undefined takes the first variable\n   * @param {string} [selector.yUnits] // if undefined takes the second variable\n   * @returns {string}\n   */\n  getYLabel(selector) {\n    return this.getXYSpectrum(selector).variables.y.label;\n  }\n}\n\n/**\n * Internal function that ensure the order of x / y array\n * @param {DataXY} [variables]\n * @param {object} [options={}]\n * @param {string} [options.dataType='']\n * @param {string} [options.title='']\n * @param {string} [options.meta={}]\n * @param {string} [options.tmp={}] Any temporary data\n * @return {Spectrum}\n */\nfunction standardizeData(variables, options = {}) {\n  let { meta = {}, tmp = {}, dataType = '', title = '' } = options;\n\n  let xVariable = variables.x;\n  let yVariable = variables.y;\n  if (!xVariable || !yVariable) {\n    throw Error('A spectrum must contain at least x and y variables');\n  }\n  if (!isAnyArray(xVariable.data) || !isAnyArray(yVariable.data)) {\n    throw Error('x and y variables must contain an array data');\n  }\n\n  let x = xVariable.data;\n  let reverse = x && x.length > 1 && x[0] > x[x.length - 1];\n\n  for (let key in variables) {\n    let variable = variables[key];\n    if (reverse) variable.data = variable.data.reverse();\n    variable.label = variable.label || key;\n    variable.units =\n      variable.units || variable.label.replace(/^.*[([](.*)[)\\]].*$/, '$1');\n    variable.min = min(variable.data);\n    variable.max = max(variable.data);\n    variable.isMonotone = xIsMonotone(variable.data);\n  }\n\n  return {\n    variables,\n    title,\n    dataType,\n    meta,\n    tmp,\n  };\n}\n","const GC_MS_FIELDS = ['TIC', '.RIC', 'SCANNUMBER'];\n\nexport function complexChromatogram(result) {\n  let spectra = result.spectra;\n  let length = spectra.length;\n  let chromatogram = {\n    times: new Array(length),\n    series: {\n      ms: {\n        dimension: 2,\n        data: new Array(length),\n      },\n    },\n  };\n\n  let existingGCMSFields = [];\n  for (let i = 0; i < GC_MS_FIELDS.length; i++) {\n    let label = convertMSFieldToLabel(GC_MS_FIELDS[i]);\n    if (spectra[0][label]) {\n      existingGCMSFields.push(label);\n      chromatogram.series[label] = {\n        dimension: 1,\n        data: new Array(length),\n      };\n    }\n  }\n\n  for (let i = 0; i < length; i++) {\n    let spectrum = spectra[i];\n    chromatogram.times[i] = spectrum.pageValue;\n    for (let j = 0; j < existingGCMSFields.length; j++) {\n      chromatogram.series[existingGCMSFields[j]].data[i] = parseFloat(\n        spectrum[existingGCMSFields[j]],\n      );\n    }\n    if (spectrum.data) {\n      chromatogram.series.ms.data[i] = [spectrum.data.x, spectrum.data.y];\n    }\n  }\n  result.chromatogram = chromatogram;\n}\n\nexport function isMSField(canonicDataLabel) {\n  return GC_MS_FIELDS.indexOf(canonicDataLabel) !== -1;\n}\n\nexport function convertMSFieldToLabel(value) {\n  return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n}\n","export default function convertToFloatArray(stringArray) {\n  let floatArray = [];\n  for (let i = 0; i < stringArray.length; i++) {\n    floatArray.push(parseFloat(stringArray[i]));\n  }\n  return floatArray;\n}\n","export default function fastParseXYData(spectrum, value) {\n  // TODO need to deal with result\n  //  console.log(value);\n  // we check if deltaX is defined otherwise we calculate it\n\n  let yFactor = spectrum.yFactor;\n  let deltaX = spectrum.deltaX;\n\n  spectrum.isXYdata = true;\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  let currentX = spectrum.firstX;\n  let currentY = spectrum.firstY;\n\n  // we skip the first line\n  //\n  let endLine = false;\n  let ascii;\n  let i = 0;\n  for (; i < value.length; i++) {\n    ascii = value.charCodeAt(i);\n    if (ascii === 13 || ascii === 10) {\n      endLine = true;\n    } else {\n      if (endLine) break;\n    }\n  }\n\n  // we proceed taking the i after the first line\n  let newLine = true;\n  let isDifference = false;\n  let isLastDifference = false;\n  let lastDifference = 0;\n  let isDuplicate = false;\n  let inComment = false;\n  let currentValue = 0; // can be a difference or a duplicate\n  let lastValue = 0; // must be the real last value\n  let isNegative = false;\n  let inValue = false;\n  let skipFirstValue = false;\n  let decimalPosition = 0;\n  for (; i <= value.length; i++) {\n    if (i === value.length) ascii = 13;\n    else ascii = value.charCodeAt(i);\n    if (inComment) {\n      // we should ignore the text if we are after $$\n      if (ascii === 13 || ascii === 10) {\n        newLine = true;\n        inComment = false;\n      }\n    } else {\n      // when is it a new value ?\n      // when it is not a digit, . or comma\n      // it is a number that is either new or we continue\n      if (ascii <= 57 && ascii >= 48) {\n        // a number\n        inValue = true;\n        if (decimalPosition > 0) {\n          currentValue += (ascii - 48) / Math.pow(10, decimalPosition++);\n        } else {\n          currentValue *= 10;\n          currentValue += ascii - 48;\n        }\n      } else if (ascii === 44 || ascii === 46) {\n        // a \",\" or \".\"\n        inValue = true;\n        decimalPosition++;\n      } else {\n        if (inValue) {\n          // need to process the previous value\n          if (newLine) {\n            newLine = false; // we don't check the X value\n            // console.log(\"NEW LINE\",isDifference, lastDifference);\n            // if new line and lastDifference, the first value is just a check !\n            // that we don't check ...\n            if (isLastDifference) skipFirstValue = true;\n          } else {\n            // need to deal with duplicate and differences\n            if (skipFirstValue) {\n              skipFirstValue = false;\n            } else {\n              if (isDifference) {\n                lastDifference = isNegative ? 0 - currentValue : currentValue;\n                isLastDifference = true;\n                isDifference = false;\n              } else if (!isDuplicate) {\n                lastValue = isNegative ? 0 - currentValue : currentValue;\n              }\n              let duplicate = isDuplicate ? currentValue - 1 : 1;\n              for (let j = 0; j < duplicate; j++) {\n                if (isLastDifference) {\n                  currentY += lastDifference;\n                } else {\n                  currentY = lastValue;\n                }\n                currentData.x.push(currentX);\n                currentData.y.push(currentY * yFactor);\n                currentX += deltaX;\n              }\n            }\n          }\n          isNegative = false;\n          currentValue = 0;\n          decimalPosition = 0;\n          inValue = false;\n          isDuplicate = false;\n        }\n\n        // positive SQZ digits @ A B C D E F G H I (ascii 64-73)\n        if (ascii < 74 && ascii > 63) {\n          inValue = true;\n          isLastDifference = false;\n          currentValue = ascii - 64;\n        } else if (ascii > 96 && ascii < 106) {\n          // negative SQZ digits a b c d e f g h i (ascii 97-105)\n          inValue = true;\n          isLastDifference = false;\n          currentValue = ascii - 96;\n          isNegative = true;\n        } else if (ascii === 115) {\n          // DUP digits S T U V W X Y Z s (ascii 83-90, 115)\n          inValue = true;\n          isDuplicate = true;\n          currentValue = 9;\n        } else if (ascii > 82 && ascii < 91) {\n          inValue = true;\n          isDuplicate = true;\n          currentValue = ascii - 82;\n        } else if (ascii > 73 && ascii < 83) {\n          // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n          inValue = true;\n          isDifference = true;\n          currentValue = ascii - 73;\n        } else if (ascii > 105 && ascii < 115) {\n          // negative DIF digits j k l m n o p q r (ascii 106-114)\n          inValue = true;\n          isDifference = true;\n          currentValue = ascii - 105;\n          isNegative = true;\n        } else if (ascii === 36 && value.charCodeAt(i + 1) === 36) {\n          // $ sign, we need to check the next one\n          inValue = true;\n          inComment = true;\n        } else if (ascii === 37) {\n          // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n          inValue = true;\n          isDifference = true;\n          currentValue = 0;\n          isNegative = false;\n        } else if (ascii === 45) {\n          // a \"-\"\n          // check if after there is a number, decimal or comma\n          let ascii2 = value.charCodeAt(i + 1);\n          if (\n            (ascii2 >= 48 && ascii2 <= 57) ||\n            ascii2 === 44 ||\n            ascii2 === 46\n          ) {\n            inValue = true;\n            if (!newLine) isLastDifference = false;\n            isNegative = true;\n          }\n        } else if (ascii === 13 || ascii === 10) {\n          newLine = true;\n          inComment = false;\n        }\n        // and now analyse the details ... space or tabulation\n        // if \"+\" we just don't care\n      }\n    }\n  }\n}\n","const removeCommentRegExp = /\\$\\$.*/;\nconst peakTableSplitRegExp = /[,\\t ]+/;\n\nexport default function parsePeakTable(spectrum, value, result) {\n  spectrum.isPeaktable = true;\n\n  if (!spectrum.variables || Object.keys(spectrum.variables) === 2) {\n    parseXY(spectrum, value, result);\n  } else {\n    parseXYZ(spectrum, value, result);\n  }\n\n  // we will add the data in the variables\n  if (spectrum.variables) {\n    for (let key in spectrum.variables) {\n      spectrum.variables[key].data = spectrum.data[key];\n    }\n  }\n}\n\nfunction parseXY(spectrum, value, result) {\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  // counts for around 20% of the time\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    let values = lines[i]\n      .trim()\n      .replace(removeCommentRegExp, '')\n      .split(peakTableSplitRegExp);\n    if (values.length % 2 === 0) {\n      for (let j = 0; j < values.length; j = j + 2) {\n        // takes around 40% of the time to add and parse the 2 values nearly exclusively because of parseFloat\n        currentData.x.push(parseFloat(values[j]) * spectrum.xFactor);\n        currentData.y.push(parseFloat(values[j + 1]) * spectrum.yFactor);\n      }\n    } else {\n      result.logs.push(`Format error: ${values}`);\n    }\n  }\n}\n\nfunction parseXYZ(spectrum, value, result) {\n  let currentData = {};\n  let variables = Object.keys(spectrum.variables);\n  let numberOfVariables = variables.length;\n  variables.forEach((variable) => (currentData[variable] = []));\n  spectrum.data = currentData;\n\n  // counts for around 20% of the time\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    let values = lines[i]\n      .trim()\n      .replace(removeCommentRegExp, '')\n      .split(peakTableSplitRegExp);\n    if (values.length % numberOfVariables === 0) {\n      for (let j = 0; j < values.length; j++) {\n        // todo should try to find a xFactor (y, ...)\n        currentData[variables[j % numberOfVariables]].push(\n          parseFloat(values[j]),\n        );\n      }\n    } else {\n      result.logs.push(`Format error: ${values}`);\n    }\n  }\n}\n","export default function parseXYA(spectrum, value) {\n  let removeSymbolRegExp = /(\\(+|\\)+|<+|>+|\\s+)/g;\n\n  spectrum.isXYAdata = true;\n  let values;\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    values = lines[i].trim().replace(removeSymbolRegExp, '').split(',');\n    currentData.x.push(parseFloat(values[0]));\n    currentData.y.push(parseFloat(values[1]));\n  }\n}\n","import getMedian from 'ml-array-median';\n\nexport default function convertTo3DZ(spectra) {\n  let minZ = spectra[0].data.y[0];\n  let maxZ = minZ;\n  let ySize = spectra.length;\n  let xSize = spectra[0].data.x.length;\n\n  let z = new Array(ySize);\n  for (let i = 0; i < ySize; i++) {\n    z[i] = spectra[i].data.y;\n    for (let j = 0; j < xSize; j++) {\n      let value = z[i][j];\n      if (value < minZ) minZ = value;\n      if (value > maxZ) maxZ = value;\n    }\n  }\n\n  const firstX = spectra[0].data.x[0];\n  const lastX = spectra[0].data.x[spectra[0].data.x.length - 1]; // has to be -2 because it is a 1D array [x,y,x,y,...]\n  const firstY = spectra[0].pageValue;\n  const lastY = spectra[ySize - 1].pageValue;\n\n  // Because the min / max value are the only information about the matrix if we invert\n  // min and max we need to invert the array\n  if (firstX > lastX) {\n    for (let spectrum of z) {\n      spectrum.reverse();\n    }\n  }\n  if (firstY > lastY) {\n    z.reverse();\n  }\n\n  return {\n    z: z,\n    minX: Math.min(firstX, lastX),\n    maxX: Math.max(firstX, lastX),\n    minY: Math.min(firstY, lastY),\n    maxY: Math.max(firstY, lastY),\n    minZ: minZ,\n    maxZ: maxZ,\n    noise: getMedian(z[0].map(Math.abs)),\n  };\n}\n","export default function generateContourLines(zData, options) {\n  let noise = zData.noise;\n  let z = zData.z;\n  let povarHeight0, povarHeight1, povarHeight2, povarHeight3;\n  let isOver0, isOver1, isOver2, isOver3;\n  let nbSubSpectra = z.length;\n  let nbPovars = z[0].length;\n  let pAx, pAy, pBx, pBy;\n\n  let x0 = zData.minX;\n  let xN = zData.maxX;\n  let dx = (xN - x0) / (nbPovars - 1);\n  let y0 = zData.minY;\n  let yN = zData.maxY;\n  let dy = (yN - y0) / (nbSubSpectra - 1);\n  let minZ = zData.minZ;\n  let maxZ = zData.maxZ;\n\n  // System.out.prvarln('y0 '+y0+' yN '+yN);\n  // -------------------------\n  // Povars attribution\n  //\n  // 0----1\n  // |  / |\n  // | /  |\n  // 2----3\n  //\n  // ---------------------d------\n\n  let iter = options.nbContourLevels * 2;\n  let contourLevels = new Array(iter);\n  let lineZValue;\n  for (let level = 0; level < iter; level++) {\n    // multiply by 2 for positif and negatif\n    let contourLevel = {};\n    contourLevels[level] = contourLevel;\n    let side = level % 2;\n    let factor =\n      (maxZ - options.noiseMultiplier * noise) *\n      Math.exp((level >> 1) - options.nbContourLevels);\n    if (side === 0) {\n      lineZValue = factor + options.noiseMultiplier * noise;\n    } else {\n      lineZValue = 0 - factor - options.noiseMultiplier * noise;\n    }\n    let lines = [];\n    contourLevel.zValue = lineZValue;\n    contourLevel.lines = lines;\n\n    if (lineZValue <= minZ || lineZValue >= maxZ) continue;\n\n    for (let iSubSpectra = 0; iSubSpectra < nbSubSpectra - 1; iSubSpectra++) {\n      let subSpectra = z[iSubSpectra];\n      let subSpectraAfter = z[iSubSpectra + 1];\n      for (let povar = 0; povar < nbPovars - 1; povar++) {\n        povarHeight0 = subSpectra[povar];\n        povarHeight1 = subSpectra[povar + 1];\n        povarHeight2 = subSpectraAfter[povar];\n        povarHeight3 = subSpectraAfter[povar + 1];\n\n        isOver0 = povarHeight0 > lineZValue;\n        isOver1 = povarHeight1 > lineZValue;\n        isOver2 = povarHeight2 > lineZValue;\n        isOver3 = povarHeight3 > lineZValue;\n\n        // Example povar0 is over the plane and povar1 and\n        // povar2 are below, we find the varersections and add\n        // the segment\n        if (isOver0 !== isOver1 && isOver0 !== isOver2) {\n          pAx =\n            povar + (lineZValue - povarHeight0) / (povarHeight1 - povarHeight0);\n          pAy = iSubSpectra;\n          pBx = povar;\n          pBy =\n            iSubSpectra +\n            (lineZValue - povarHeight0) / (povarHeight2 - povarHeight0);\n          lines.push(pAx * dx + x0);\n          lines.push(pAy * dy + y0);\n          lines.push(pBx * dx + x0);\n          lines.push(pBy * dy + y0);\n        }\n        // remove push does not help !!!!\n        if (isOver3 !== isOver1 && isOver3 !== isOver2) {\n          pAx = povar + 1;\n          pAy =\n            iSubSpectra +\n            1 -\n            (lineZValue - povarHeight3) / (povarHeight1 - povarHeight3);\n          pBx =\n            povar +\n            1 -\n            (lineZValue - povarHeight3) / (povarHeight2 - povarHeight3);\n          pBy = iSubSpectra + 1;\n          lines.push(pAx * dx + x0);\n          lines.push(pAy * dy + y0);\n          lines.push(pBx * dx + x0);\n          lines.push(pBy * dy + y0);\n        }\n        // test around the diagonal\n        if (isOver1 !== isOver2) {\n          pAx =\n            (povar +\n              1 -\n              (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n              dx +\n            x0;\n          pAy =\n            (iSubSpectra +\n              (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n              dy +\n            y0;\n          if (isOver1 !== isOver0) {\n            pBx =\n              povar +\n              1 -\n              (lineZValue - povarHeight1) / (povarHeight0 - povarHeight1);\n            pBy = iSubSpectra;\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver2 !== isOver0) {\n            pBx = povar;\n            pBy =\n              iSubSpectra +\n              1 -\n              (lineZValue - povarHeight2) / (povarHeight0 - povarHeight2);\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver1 !== isOver3) {\n            pBx = povar + 1;\n            pBy =\n              iSubSpectra +\n              (lineZValue - povarHeight1) / (povarHeight3 - povarHeight1);\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver2 !== isOver3) {\n            pBx =\n              povar +\n              (lineZValue - povarHeight2) / (povarHeight3 - povarHeight2);\n            pBy = iSubSpectra + 1;\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n        }\n      }\n    }\n  }\n\n  return {\n    minX: zData.minX,\n    maxX: zData.maxX,\n    minY: zData.minY,\n    maxY: zData.maxY,\n    segments: contourLevels,\n  };\n}\n","import convertTo3DZ from './convertTo3DZ';\nimport generateContourLines from './generateContourLines';\n\nexport default function add2D(result, options) {\n  let zData = convertTo3DZ(result.spectra);\n  if (!options.noContour) {\n    result.contourLines = generateContourLines(zData, options);\n    delete zData.z;\n  }\n  result.minMax = zData;\n}\n","/**\n * Fast Fourier Transform module\n * 1D-FFT/IFFT, 2D-FFT/IFFT (radix-2)\n */\nvar FFT = (function(){\n  var FFT;  \n  \n  if(typeof exports !== 'undefined') {\n    FFT = exports;   // for CommonJS\n  } else {\n    FFT = {};\n  }\n  \n  var version = {\n    release: '0.3.0',\n    date: '2013-03'\n  };\n  FFT.toString = function() {\n    return \"version \" + version.release + \", released \" + version.date;\n  };\n\n  // core operations\n  var _n = 0,          // order\n      _bitrev = null,  // bit reversal table\n      _cstb = null;    // sin/cos table\n\n  var core = {\n    init : function(n) {\n      if(n !== 0 && (n & (n - 1)) === 0) {\n        _n = n;\n        core._initArray();\n        core._makeBitReversalTable();\n        core._makeCosSinTable();\n      } else {\n        throw new Error(\"init: radix-2 required\");\n      }\n    },\n    // 1D-FFT\n    fft1d : function(re, im) {\n      core.fft(re, im, 1);\n    },\n    // 1D-IFFT\n    ifft1d : function(re, im) {\n      var n = 1/_n;\n      core.fft(re, im, -1);\n      for(var i=0; i<_n; i++) {\n        re[i] *= n;\n        im[i] *= n;\n      }\n    },\n     // 1D-IFFT\n    bt1d : function(re, im) {\n      core.fft(re, im, -1);\n    },\n    // 2D-FFT Not very useful if the number of rows have to be equal to cols\n    fft2d : function(re, im) {\n      var tre = [],\n          tim = [],\n          i = 0;\n      // x-axis\n      for(var y=0; y<_n; y++) {\n        i = y*_n;\n        for(var x1=0; x1<_n; x1++) {\n          tre[x1] = re[x1 + i];\n          tim[x1] = im[x1 + i];\n        }\n        core.fft1d(tre, tim);\n        for(var x2=0; x2<_n; x2++) {\n          re[x2 + i] = tre[x2];\n          im[x2 + i] = tim[x2];\n        }\n      }\n      // y-axis\n      for(var x=0; x<_n; x++) {\n        for(var y1=0; y1<_n; y1++) {\n          i = x + y1*_n;\n          tre[y1] = re[i];\n          tim[y1] = im[i];\n        }\n        core.fft1d(tre, tim);\n        for(var y2=0; y2<_n; y2++) {\n          i = x + y2*_n;\n          re[i] = tre[y2];\n          im[i] = tim[y2];\n        }\n      }\n    },\n    // 2D-IFFT\n    ifft2d : function(re, im) {\n      var tre = [],\n          tim = [],\n          i = 0;\n      // x-axis\n      for(var y=0; y<_n; y++) {\n        i = y*_n;\n        for(var x1=0; x1<_n; x1++) {\n          tre[x1] = re[x1 + i];\n          tim[x1] = im[x1 + i];\n        }\n        core.ifft1d(tre, tim);\n        for(var x2=0; x2<_n; x2++) {\n          re[x2 + i] = tre[x2];\n          im[x2 + i] = tim[x2];\n        }\n      }\n      // y-axis\n      for(var x=0; x<_n; x++) {\n        for(var y1=0; y1<_n; y1++) {\n          i = x + y1*_n;\n          tre[y1] = re[i];\n          tim[y1] = im[i];\n        }\n        core.ifft1d(tre, tim);\n        for(var y2=0; y2<_n; y2++) {\n          i = x + y2*_n;\n          re[i] = tre[y2];\n          im[i] = tim[y2];\n        }\n      }\n    },\n    // core operation of FFT\n    fft : function(re, im, inv) {\n      var d, h, ik, m, tmp, wr, wi, xr, xi,\n          n4 = _n >> 2;\n      // bit reversal\n      for(var l=0; l<_n; l++) {\n        m = _bitrev[l];\n        if(l < m) {\n          tmp = re[l];\n          re[l] = re[m];\n          re[m] = tmp;\n          tmp = im[l];\n          im[l] = im[m];\n          im[m] = tmp;\n        }\n      }\n      // butterfly operation\n      for(var k=1; k<_n; k<<=1) {\n        h = 0;\n        d = _n/(k << 1);\n        for(var j=0; j<k; j++) {\n          wr = _cstb[h + n4];\n          wi = inv*_cstb[h];\n          for(var i=j; i<_n; i+=(k<<1)) {\n            ik = i + k;\n            xr = wr*re[ik] + wi*im[ik];\n            xi = wr*im[ik] - wi*re[ik];\n            re[ik] = re[i] - xr;\n            re[i] += xr;\n            im[ik] = im[i] - xi;\n            im[i] += xi;\n          }\n          h += d;\n        }\n      }\n    },\n    // initialize the array (supports TypedArray)\n    _initArray : function() {\n      if(typeof Uint32Array !== 'undefined') {\n        _bitrev = new Uint32Array(_n);\n      } else {\n        _bitrev = [];\n      }\n      if(typeof Float64Array !== 'undefined') {\n        _cstb = new Float64Array(_n*1.25);\n      } else {\n        _cstb = [];\n      }\n    },\n    // zero padding\n    _paddingZero : function() {\n      // TODO\n    },\n    // makes bit reversal table\n    _makeBitReversalTable : function() {\n      var i = 0,\n          j = 0,\n          k = 0;\n      _bitrev[0] = 0;\n      while(++i < _n) {\n        k = _n >> 1;\n        while(k <= j) {\n          j -= k;\n          k >>= 1;\n        }\n        j += k;\n        _bitrev[i] = j;\n      }\n    },\n    // makes trigonometiric function table\n    _makeCosSinTable : function() {\n      var n2 = _n >> 1,\n          n4 = _n >> 2,\n          n8 = _n >> 3,\n          n2p4 = n2 + n4,\n          t = Math.sin(Math.PI/_n),\n          dc = 2*t*t,\n          ds = Math.sqrt(dc*(2 - dc)),\n          c = _cstb[n4] = 1,\n          s = _cstb[0] = 0;\n      t = 2*dc;\n      for(var i=1; i<n8; i++) {\n        c -= dc;\n        dc += t*c;\n        s += ds;\n        ds -= t*s;\n        _cstb[i] = s;\n        _cstb[n4 - i] = c;\n      }\n      if(n8 !== 0) {\n        _cstb[n8] = Math.sqrt(0.5);\n      }\n      for(var j=0; j<n4; j++) {\n        _cstb[n2 - j]  = _cstb[j];\n      }\n      for(var k=0; k<n2p4; k++) {\n        _cstb[k + n2] = -_cstb[k];\n      }\n    }\n  };\n  // aliases (public APIs)\n  var apis = ['init', 'fft1d', 'ifft1d', 'fft2d', 'ifft2d'];\n  for(var i=0; i<apis.length; i++) {\n    FFT[apis[i]] = core[apis[i]];\n  }\n  FFT.bt = core.bt1d;\n  FFT.fft = core.fft1d;\n  FFT.ifft = core.ifft1d;\n  \n  return FFT;\n}).call(this);\n","// sources:\n// https://en.wikipedia.org/wiki/Gyromagnetic_ratio\n\n// TODO: #13 can we have a better source and more digits ? @jwist\n\nexport const gyromagneticRatio = {\n  '1H': 267.52218744e6,\n  '2H': 41.065e6,\n  '3H': 285.3508e6,\n  '3He': -203.789e6,\n  '7Li': 103.962e6,\n  '13C': 67.28284e6,\n  '14N': 19.331e6,\n  '15N': -27.116e6,\n  '17O': -36.264e6,\n  '19F': 251.662e6,\n  '23Na': 70.761e6,\n  '27Al': 69.763e6,\n  '29Si': -53.19e6,\n  '31P': 108.291e6,\n  '57Fe': 8.681e6,\n  '63Cu': 71.118e6,\n  '67Zn': 16.767e6,\n  '129Xe': -73.997e6,\n};\n","import { gyromagneticRatio } from 'nmr-processing';\n\nexport default function postProcessingNMR(entriesFlat) {\n  // specific NMR functions\n  let observeFrequency = 0;\n  let shiftOffsetVal = 0;\n\n  for (let entry of entriesFlat) {\n    for (let spectrum of entry.spectra) {\n      if (entry.ntuples && entry.ntuples.symbol) {\n        if (!observeFrequency && spectrum.observeFrequency) {\n          observeFrequency = spectrum.observeFrequency;\n        }\n        if (!shiftOffsetVal && spectrum.shiftOffsetVal) {\n          shiftOffsetVal = spectrum.shiftOffsetVal;\n        }\n      } else {\n        observeFrequency = spectrum.observeFrequency;\n        shiftOffsetVal = spectrum.shiftOffsetVal;\n      }\n\n      if (observeFrequency) {\n        if (spectrum.xUnits && spectrum.xUnits.toUpperCase().includes('HZ')) {\n          spectrum.xUnits = 'PPM';\n          spectrum.xFactor = spectrum.xFactor / observeFrequency;\n          spectrum.firstX = spectrum.firstX / observeFrequency;\n          spectrum.lastX = spectrum.lastX / observeFrequency;\n          spectrum.deltaX = spectrum.deltaX / observeFrequency;\n          for (let i = 0; i < spectrum.data.x.length; i++) {\n            spectrum.data.x[i] /= observeFrequency;\n          }\n        }\n      }\n      if (shiftOffsetVal) {\n        let shift = spectrum.firstX - shiftOffsetVal;\n        spectrum.firstX = spectrum.firstX - shift;\n        spectrum.lastX = spectrum.lastX - shift;\n        for (let i = 0; i < spectrum.data.x.length; i++) {\n          spectrum.data.x[i] -= shift;\n        }\n      }\n\n      // we will check if some nucleus are missing ...\n      if (entry.ntuples && entry.ntuples.nucleus && entry.ntuples.symbol) {\n        for (let i = 0; i < entry.ntuples.nucleus.length; i++) {\n          let symbol = entry.ntuples.symbol[i];\n          let nucleus = entry.ntuples.nucleus[i];\n          if (symbol.startsWith('F') && !nucleus) {\n            if (symbol === 'F1') entry.ntuples.nucleus[i] = entry.tmp.$NUC2;\n            if (symbol === 'F2') entry.ntuples.nucleus[i] = entry.tmp.$NUC1;\n          }\n          if (symbol === 'F2') {\n            entry.yType = entry.ntuples.nucleus[0];\n          }\n        }\n      }\n\n      if (\n        observeFrequency &&\n        entry.ntuples &&\n        entry.ntuples.symbol &&\n        entry.ntuples.nucleus\n      ) {\n        let unit = '';\n        let pageSymbolIndex = entry.ntuples.symbol.indexOf(spectrum.pageSymbol);\n        if (entry.ntuples.units && entry.ntuples.units[pageSymbolIndex]) {\n          unit = entry.ntuples.units[pageSymbolIndex];\n        }\n        if (unit !== 'PPM') {\n          if (pageSymbolIndex !== 0) {\n            throw Error('Not sure about this ntuples format');\n          }\n\n          let ratio0 = gyromagneticRatio[entry.ntuples.nucleus[0]];\n          let ratio1 = gyromagneticRatio[entry.ntuples.nucleus[1]];\n          if (!ratio0 || !ratio1) {\n            throw Error('Problem with determination of gyromagnetic ratio');\n          }\n          let ratio = (ratio0 / ratio1) * observeFrequency;\n          spectrum.pageValue /= ratio;\n        }\n      }\n    }\n  }\n}\n","export default function profiling(result, action, options) {\n  if (result.profiling) {\n    result.profiling.push({\n      action,\n      time: Date.now() - options.start,\n    });\n  }\n}\n","export default function simpleChromatogram(result) {\n  let data = result.spectra[0].data;\n  result.chromatogram = {\n    times: data.x.slice(),\n    series: {\n      intensity: {\n        dimension: 1,\n        data: data.y.slice(),\n      },\n    },\n  };\n}\n","import add2D from './2d/add2D';\nimport { complexChromatogram } from './complexChromatogram';\nimport postProcessingNMR from './postProcessingNMR';\nimport profiling from './profiling';\nimport simpleChromatogram from './simpleChromatogram';\n\nexport default function postProcessing(entriesFlat, result, options) {\n  // converting Hz to ppm\n  postProcessingNMR(entriesFlat);\n\n  for (let entry of entriesFlat) {\n    if (Object.keys(entry.ntuples).length > 0) {\n      let newNtuples = [];\n      let keys = Object.keys(entry.ntuples);\n      for (let i = 0; i < keys.length; i++) {\n        let key = keys[i];\n        let values = entry.ntuples[key];\n        for (let j = 0; j < values.length; j++) {\n          if (!newNtuples[j]) newNtuples[j] = {};\n          newNtuples[j][key] = values[j];\n        }\n      }\n      entry.ntuples = newNtuples;\n    }\n\n    if (entry.twoD && options.wantXY) {\n      add2D(entry, options);\n\n      profiling(result, 'Finished countour plot calculation', options);\n\n      if (!options.keepSpectra) {\n        delete entry.spectra;\n      }\n    }\n\n    // maybe it is a GC (HPLC) / MS. In this case we add a new format\n    if (options.chromatogram) {\n      if (entry.spectra.length > 1) {\n        complexChromatogram(entry);\n      } else {\n        simpleChromatogram(entry);\n      }\n      profiling(result, 'Finished chromatogram calculation', options);\n    }\n    delete entry.tmp;\n  }\n}\n","export default function prepareNtuplesDatatable(currentEntry, spectrum, kind) {\n  let xIndex = -1;\n  let yIndex = -1;\n  let firstVariable = '';\n  let secondVariable = '';\n  if (kind.indexOf('++') > 0) {\n    firstVariable = kind.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/, '$1');\n    secondVariable = kind.replace(/.*\\.\\.([a-zA-Z0-9]+).*/, '$1');\n  } else {\n    kind = kind.replace(/[^a-zA-Z]/g, '');\n    firstVariable = kind.charAt(0);\n    secondVariable = kind.charAt(1);\n    spectrum.variables = {};\n    for (let symbol of kind) {\n      let lowerCaseSymbol = symbol.toLowerCase();\n      let index = currentEntry.ntuples.symbol.indexOf(symbol);\n      if (index === -1) throw Error(`Symbol undefined: ${symbol}`);\n      spectrum.variables[lowerCaseSymbol] = {};\n      for (let key in currentEntry.ntuples) {\n        if (currentEntry.ntuples[key][index]) {\n          spectrum.variables[lowerCaseSymbol][key.replace(/^var/, '')] =\n            currentEntry.ntuples[key][index];\n        }\n      }\n    }\n  }\n  xIndex = currentEntry.ntuples.symbol.indexOf(firstVariable);\n  yIndex = currentEntry.ntuples.symbol.indexOf(secondVariable);\n\n  if (xIndex === -1) xIndex = 0;\n  if (yIndex === -1) yIndex = 0;\n\n  if (currentEntry.ntuples.first) {\n    if (currentEntry.ntuples.first.length > xIndex) {\n      spectrum.firstX = currentEntry.ntuples.first[xIndex];\n    }\n    if (currentEntry.ntuples.first.length > yIndex) {\n      spectrum.firstY = currentEntry.ntuples.first[yIndex];\n    }\n  }\n  if (currentEntry.ntuples.last) {\n    if (currentEntry.ntuples.last.length > xIndex) {\n      spectrum.lastX = currentEntry.ntuples.last[xIndex];\n    }\n    if (currentEntry.ntuples.last.length > yIndex) {\n      spectrum.lastY = currentEntry.ntuples.last[yIndex];\n    }\n  }\n  if (\n    currentEntry.ntuples.vardim &&\n    currentEntry.ntuples.vardim.length > xIndex\n  ) {\n    spectrum.nbPoints = currentEntry.ntuples.vardim[xIndex];\n  }\n  if (currentEntry.ntuples.factor) {\n    if (currentEntry.ntuples.factor.length > xIndex) {\n      spectrum.xFactor = currentEntry.ntuples.factor[xIndex];\n    }\n    if (currentEntry.ntuples.factor.length > yIndex) {\n      spectrum.yFactor = currentEntry.ntuples.factor[yIndex];\n    }\n  }\n  if (currentEntry.ntuples.units) {\n    if (currentEntry.ntuples.units.length > xIndex) {\n      if (\n        currentEntry.ntuples.varname &&\n        currentEntry.ntuples.varname[xIndex]\n      ) {\n        spectrum.xUnits = `${currentEntry.ntuples.varname[xIndex]} [${currentEntry.ntuples.units[xIndex]}]`;\n      } else {\n        spectrum.xUnits = currentEntry.ntuples.units[xIndex];\n      }\n    }\n    if (currentEntry.ntuples.units.length > yIndex) {\n      if (\n        currentEntry.ntuples.varname &&\n        currentEntry.ntuples.varname[yIndex]\n      ) {\n        spectrum.yUnits = `${currentEntry.ntuples.varname[yIndex]} [${currentEntry.ntuples.units[yIndex]}]`;\n      } else {\n        spectrum.yUnits = currentEntry.ntuples.units[yIndex];\n      }\n    }\n  }\n}\n","export default function prepareSpectrum(spectrum) {\n  if (!spectrum.xFactor) spectrum.xFactor = 1;\n  if (!spectrum.yFactor) spectrum.yFactor = 1;\n}\n","import { isMSField, convertMSFieldToLabel } from './complexChromatogram';\nimport convertToFloatArray from './convertToFloatArray';\nimport fastParseXYData from './parse/fastParseXYData';\nimport parsePeakTable from './parse/parsePeakTable';\nimport parseXYA from './parse/parseXYA';\nimport postProcessing from './postProcessing';\nimport prepareNtuplesDatatable from './prepareNtuplesDatatable';\nimport prepareSpectrum from './prepareSpectrum';\nimport profiling from './profiling';\n\n// the following RegExp can only be used for XYdata, some peakTables have values with a \"E-5\" ...\nconst ntuplesSeparatorRegExp = /[ \\t]*,[ \\t]*/;\nconst numberRegExp = /^[-+]?[0-9]*\\.?[0-9]+(e[-+]?[0-9]+)?$/;\n\nclass Spectrum {}\n\nconst defaultOptions = {\n  keepRecordsRegExp: /^$/,\n  canonicDataLabels: true,\n  canonicMetadataLabels: false,\n  dynamicTyping: true,\n  withoutXY: false,\n  chromatogram: false,\n  keepSpectra: false,\n  noContour: false,\n  nbContourLevels: 7,\n  noiseMultiplier: 5,\n  profiling: false,\n};\n\n/**\n *\n * @param {text} jcamp\n * @param {object} [options]\n * @param {number} [options.keepRecordsRegExp=/^$/] By default we don't keep meta information\n * @param {number} [options.canonicDataLabels=true] Canonize the Labels (uppercase without symbol)\n * @param {number} [options.canonicMetadataLabels=false] Canonize the metadata Labels (uppercase without symbol)\n * @param {number} [options.dynamicTyping=false] Convert numbers to Number\n * @param {number} [options.withoutXY=false] Remove the XY data\n * @param {number} [options.chromatogram=false] Special post-processing for GC / HPLC / MS\n * @param {number} [options.keepSpectra=false] Force to keep the spectra in case of 2D\n * @param {number} [options.noContour=false] Don't calculate countour in case of 2D\n * @param {number} [options.nbContourLevels=7] Number of positive / negative contour levels to calculate\n * @param {number} [options.noiseMultiplier=5] Define for 2D the level as 5 times the median as default\n * @param {number} [options.profiling=false] Add profiling information\n */\n\nexport default function convert(jcamp, options = {}) {\n  options = Object.assign({}, defaultOptions, options);\n  options.wantXY = !options.withoutXY;\n  options.start = Date.now();\n\n  let entriesFlat = [];\n\n  let result = {\n    profiling: options.profiling ? [] : false,\n    logs: [],\n    entries: [],\n  };\n\n  let tmpResult = { children: [] };\n  let currentEntry = tmpResult;\n  let parentsStack = [];\n\n  let spectrum = new Spectrum();\n\n  if (typeof jcamp !== 'string') {\n    throw new TypeError('the JCAMP should be a string');\n  }\n\n  profiling(result, 'Before split to LDRS', options);\n\n  let ldrs = jcamp.replace(/[\\r\\n]+##/g, '\\n##').split('\\n##');\n\n  profiling(result, 'Split to LDRS', options);\n\n  if (ldrs[0]) ldrs[0] = ldrs[0].replace(/^[\\r\\n ]*##/, '');\n\n  for (let ldr of ldrs) {\n    // This is a new LDR\n    let position = ldr.indexOf('=');\n    let dataLabel = position > 0 ? ldr.substring(0, position) : ldr;\n    let dataValue = position > 0 ? ldr.substring(position + 1).trim() : '';\n\n    let canonicDataLabel = dataLabel.replace(/[_ -]/g, '').toUpperCase();\n\n    if (canonicDataLabel === 'DATATABLE') {\n      let endLine = dataValue.indexOf('\\n');\n      if (endLine === -1) endLine = dataValue.indexOf('\\r');\n      if (endLine > 0) {\n        // ##DATA TABLE= (X++(I..I)), XYDATA\n        // We need to find the variables\n\n        let infos = dataValue.substring(0, endLine).split(/[ ,;\\t]+/);\n        prepareNtuplesDatatable(currentEntry, spectrum, infos[0]);\n\n        spectrum.datatable = infos[0];\n        if (infos[1] && infos[1].indexOf('PEAKS') > -1) {\n          canonicDataLabel = 'PEAKTABLE';\n        } else if (\n          infos[1] &&\n          (infos[1].indexOf('XYDATA') || infos[0].indexOf('++') > 0)\n        ) {\n          canonicDataLabel = 'XYDATA';\n          spectrum.deltaX =\n            (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n        }\n      }\n    }\n\n    if (canonicDataLabel === 'XYDATA') {\n      if (options.wantXY) {\n        prepareSpectrum(spectrum);\n        // well apparently we should still consider it is a PEAK TABLE if there are no '++' after\n        if (dataValue.match(/.*\\+\\+.*/)) {\n          // ex: (X++(Y..Y))\n          spectrum.deltaX =\n            (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n\n          fastParseXYData(spectrum, dataValue, result);\n        } else {\n          parsePeakTable(spectrum, dataValue, result);\n        }\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    } else if (canonicDataLabel === 'PEAKTABLE') {\n      if (options.wantXY) {\n        prepareSpectrum(spectrum);\n        parsePeakTable(spectrum, dataValue, result);\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    }\n    if (canonicDataLabel === 'PEAKASSIGNMENTS') {\n      if (options.wantXY) {\n        if (dataValue.match(/.*(XYA).*/)) {\n          // ex: (XYA)\n          parseXYA(spectrum, dataValue);\n        }\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    }\n\n    if (canonicDataLabel === 'TITLE') {\n      let parentEntry = currentEntry;\n      if (!parentEntry.children) {\n        parentEntry.children = [];\n      }\n      currentEntry = {\n        spectra: [],\n        ntuples: {},\n        info: {},\n        meta: {},\n        tmp: {}, // tmp information we need to keep for postprocessing\n      };\n      parentEntry.children.push(currentEntry);\n      parentsStack.push(parentEntry);\n      entriesFlat.push(currentEntry);\n      currentEntry.title = dataValue;\n    } else if (canonicDataLabel === 'DATATYPE') {\n      currentEntry.dataType = dataValue;\n      if (dataValue.toLowerCase().indexOf('nd') > -1) {\n        currentEntry.twoD = true;\n      }\n    } else if (canonicDataLabel === 'NTUPLES') {\n      if (dataValue.toLowerCase().indexOf('nd') > -1) {\n        currentEntry.twoD = true;\n      }\n    } else if (canonicDataLabel === 'DATACLASS') {\n      currentEntry.dataClass = dataValue;\n    } else if (canonicDataLabel === 'XUNITS') {\n      spectrum.xUnits = dataValue;\n    } else if (canonicDataLabel === 'YUNITS') {\n      spectrum.yUnits = dataValue;\n    } else if (canonicDataLabel === 'FIRSTX') {\n      spectrum.firstX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'LASTX') {\n      spectrum.lastX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'FIRSTY') {\n      spectrum.firstY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'LASTY') {\n      spectrum.lastY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'NPOINTS') {\n      spectrum.nbPoints = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'XFACTOR') {\n      spectrum.xFactor = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'YFACTOR') {\n      spectrum.yFactor = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MAXX') {\n      spectrum.maxX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MINX') {\n      spectrum.minX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MAXY') {\n      spectrum.maxY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MINY') {\n      spectrum.minY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'DELTAX') {\n      spectrum.deltaX = parseFloat(dataValue);\n    } else if (\n      canonicDataLabel === '.OBSERVEFREQUENCY' ||\n      canonicDataLabel === '$SFO1'\n    ) {\n      if (!spectrum.observeFrequency) {\n        spectrum.observeFrequency = parseFloat(dataValue);\n      }\n    } else if (canonicDataLabel === '.OBSERVENUCLEUS') {\n      if (!spectrum.xType) {\n        currentEntry.xType = dataValue.replace(/[^a-zA-Z0-9]/g, '');\n      }\n    } else if (canonicDataLabel === '$OFFSET') {\n      // OFFSET for Bruker spectra\n      currentEntry.shiftOffsetNum = 0;\n      if (!spectrum.shiftOffsetVal) {\n        spectrum.shiftOffsetVal = parseFloat(dataValue);\n      }\n    } else if (canonicDataLabel === '$REFERENCEPOINT') {\n      // OFFSET for Varian spectra\n      // if we activate this part it does not work for ACD specmanager\n      //         } else if (canonicDataLabel=='.SHIFTREFERENCE') {   // OFFSET FOR Bruker Spectra\n      //                 var parts = dataValue.split(/ *, */);\n      //                 currentEntry.shiftOffsetNum = parseInt(parts[2].trim());\n      //                 spectrum.shiftOffsetVal = parseFloat(parts[3].trim());\n    } else if (canonicDataLabel === 'VARNAME') {\n      currentEntry.ntuples.varname = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'SYMBOL') {\n      currentEntry.ntuples.symbol = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARTYPE') {\n      currentEntry.ntuples.vartype = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARFORM') {\n      currentEntry.ntuples.varform = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARDIM') {\n      currentEntry.ntuples.vardim = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'UNITS') {\n      currentEntry.ntuples.units = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'FACTOR') {\n      currentEntry.ntuples.factor = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'FIRST') {\n      currentEntry.ntuples.first = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'LAST') {\n      currentEntry.ntuples.last = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'MIN') {\n      currentEntry.ntuples.min = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'MAX') {\n      currentEntry.ntuples.max = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === '.NUCLEUS') {\n      if (currentEntry.ntuples) {\n        currentEntry.ntuples.nucleus = dataValue.split(ntuplesSeparatorRegExp);\n      }\n    } else if (canonicDataLabel === 'PAGE') {\n      spectrum.page = dataValue.trim();\n      spectrum.pageValue = parseFloat(dataValue.replace(/^.*=/, ''));\n      spectrum.pageSymbol = spectrum.page.replace(/[=].*/, '');\n    } else if (canonicDataLabel === 'RETENTIONTIME') {\n      spectrum.pageValue = parseFloat(dataValue);\n    } else if (isMSField(canonicDataLabel)) {\n      spectrum[convertMSFieldToLabel(canonicDataLabel)] = dataValue;\n    } else if (canonicDataLabel === 'SAMPLEDESCRIPTION') {\n      spectrum.sampleDescription = dataValue;\n    } else if (canonicDataLabel.startsWith('$NUC')) {\n      if (!currentEntry.tmp[canonicDataLabel] && !dataValue.includes('off')) {\n        currentEntry.tmp[canonicDataLabel] = dataValue.replace(/[<>]/g, '');\n      }\n    } else if (canonicDataLabel === 'END') {\n      currentEntry = parentsStack.pop();\n    }\n\n    if (\n      currentEntry &&\n      currentEntry.info &&\n      currentEntry.meta &&\n      canonicDataLabel.match(options.keepRecordsRegExp)\n    ) {\n      let value = dataValue.trim();\n      let target, label;\n      if (dataLabel.startsWith('$')) {\n        label = options.canonicMetadataLabels\n          ? canonicDataLabel.substring(1)\n          : dataLabel.substring(1);\n        target = currentEntry.meta;\n      } else {\n        label = options.canonicDataLabels ? canonicDataLabel : dataLabel;\n        target = currentEntry.info;\n      }\n\n      if (options.dynamicTyping) {\n        if (value.match(numberRegExp)) {\n          value = Number.parseFloat(value);\n        }\n      }\n      if (target[label]) {\n        if (!Array.isArray(target[label])) {\n          target[label] = [target[label]];\n        }\n        target[label].push(value);\n      } else {\n        target[label] = value;\n      }\n    }\n  }\n\n  profiling(result, 'Finished parsing', options);\n\n  postProcessing(entriesFlat, result, options);\n\n  profiling(result, 'Total time', options);\n\n  /*\n  if (result.children && result.children.length>0) {\n    result = { ...result, ...result.children[0] };\n  }\n  */\n  result.entries = tmpResult.children;\n  result.flatten = entriesFlat;\n\n  return result;\n}\n","import { convert } from 'jcampconverter';\n\nimport { Analysis } from '../Analysis';\n\n/**\n * Creates a new Analysis from a JCAMP string\n * @param {string} jcamp - String containing the JCAMP data\n * @param {object} [options={}]\n * @param {object} [options.id=Math.random()]\n * @param {string} [options.label=options.id] human redeable label\n * @return {Analysis} - New class element with the given data\n */\nexport function fromJcamp(jcamp, options = {}) {\n  let analysis = new Analysis(options);\n  addJcamp(analysis, jcamp, options);\n  return analysis;\n}\n\nfunction addJcamp(analysis, jcamp) {\n  let converted = convert(jcamp, {\n    keepRecordsRegExp: /.*/,\n  });\n\n  for (let entry of converted.flatten) {\n    let currentSpectrum = entry.spectra[0];\n\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    } else {\n      for (let key in currentSpectrum.variables) {\n        const variable = currentSpectrum.variables[key];\n        if (variable.label) continue;\n        variable.label = variable.name || variable.symbol || key;\n        if (variable.units && !variable.label.includes(variable.units)) {\n          variable.label += ` [${variable.units}]`;\n        }\n      }\n    }\n\n    analysis.pushSpectrum(currentSpectrum.variables, {\n      dataType: entry.dataType,\n      title: entry.title,\n      meta: entry.meta,\n    });\n  }\n}\n","import maxFct from 'ml-array-max';\nimport minFct from 'ml-array-min';\n\n/**\n * Parse from a xyxy data array\n * @param {Array<Array<number>>} variables\n * @param {object} [meta] - same metadata object format that the fromText\n * @return {string} JCAMP of the input\n */\nexport default function creatorNtuples(variables, options) {\n  const { meta = {}, info = {} } = options;\n\n  const { title = '', owner = '', origin = '', dataType = '' } = info;\n\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 factor = [];\n\n  const keys = Object.keys(variables);\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i];\n    let variable = variables[key];\n\n    let name = variable.label && variable.label.replace(/ *\\[.*/, '');\n    let unit = variable.label && variable.label.replace(/.*\\[(.*)\\].*/, '$1');\n\n    symbol.push(variable.symbol || key);\n    varName.push(variable.name || name || key);\n    varDim.push(variables[key].data.length);\n\n    varType.push(\n      variable.type\n        ? variable.type.toUpperCase()\n        : i === 0\n        ? 'INDEPENDENT'\n        : 'DEPENDENT',\n    );\n    units.push(variable.units || unit || '');\n    first.push(variables[key][0]);\n    last.push(variables[key][variables[key].length - 1]);\n    min.push(minFct(variables[key].data));\n    max.push(maxFct(variables[key].data));\n    factor.push(1);\n  }\n\n  let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n\n  for (const key of Object.keys(meta)) {\n    header += `##$${key}=${meta[key]}\\n`;\n  }\n\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##PAGE= N=1\\n`;\n\n  header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n\n  for (let i = 0; i < variables[keys[0]].data.length; i++) {\n    let point = [];\n    for (let key of keys) {\n      point.push(variables[key].data[i]);\n    }\n    header += `${point.join('\\t')}\\n`;\n  }\n\n  header += '##END';\n  return header;\n}\n","/**\n * Create a jcamp\n * @param {object} data - object of array\n * @param {object} [options={}] - metadata object\n * @param {string} [options.info={}] - metadata of the file\n * @param {string} [options.info.title = ''] - title of the file\n * @param {string} [options.info.owner = ''] - owner of the file\n * @param {string} [options.info.origin = ''] - origin of the file\n * @param {string} [options.info.dataType = ''] - type of data\n * @param {string} [options.info.xUnits = ''] - units for the x axis for variables===undefined\n * @param {string} [options.info.yUnits = ''] - units for the y axis for variables===undefined\n * @param {object} [options.meta = {}] - comments to add to the file\n\n * @return {string} JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n  const { meta = {}, info = {} } = options;\n\n  const {\n    title = '',\n    owner = '',\n    origin = '',\n    dataType = '',\n    xUnits = '',\n    yUnits = '',\n  } = info;\n  let firstX = Number.POSITIVE_INFINITY;\n  let lastX = Number.NEGATIVE_INFINITY;\n  let firstY = Number.POSITIVE_INFINITY;\n  let lastY = Number.NEGATIVE_INFINITY;\n  let points = [];\n\n  for (let i = 0; i < data.x.length; i++) {\n    let x = data.x[i];\n    let y = data.y[i];\n    if (firstX > x) {\n      firstX = x;\n    }\n    if (lastX < x) {\n      lastX = x;\n    }\n    if (firstY > y) {\n      firstY = y;\n    }\n    if (lastY < y) {\n      lastY = y;\n    }\n    points.push(`${x} ${y}`);\n  }\n\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##FIRSTX=${firstX}\n##LASTX=${lastX}\n##FIRSTY=${firstY}\n##LASTY=${lastY}\\n`;\n\n  for (const key of Object.keys(meta)) {\n    header += `##$${key}=${meta[key]}\\n`;\n  }\n\n  // we leave the header and utf8 fonts ${header.replace(/[^\\t\\r\\n\\x20-\\x7F]/g, '')\n\n  return `${header}##NPOINTS=${points.length}\n##PEAK TABLE=(XY..XY)\n${points.join('\\n')}\n##END`;\n}\n","import creatorNtuples from './creatorNtuples';\nimport { fromJSON } from './fromJSON';\n\n/**\n * Create a jcamp from variables\n * @param {Array<Variable} [variables={}] - object of variables\n * @param {string} [options.info={}] - metadata of the file\n * @param {string} [options.info.title = ''] - title of the file\n * @param {string} [options.info.owner = ''] - owner of the file\n * @param {string} [options.info.origin = ''] - origin of the file\n * @param {string} [options.info.dataType = ''] - type of data\n * @param {object} [options.meta = {}] - comments to add to the file\n * @param {object} [options.forceNtuples = false] - force the ntuples format even if there is only x and y variables\n */\nexport function fromVariables(variables = {}, options = {}) {\n  const { info, meta, forceNtuples } = options;\n\n  let jcampOptions = {\n    info,\n    meta,\n  };\n\n  let keys = Object.keys(variables).map((key) => key.toLowerCase());\n  if (\n    keys.length === 2 &&\n    keys.includes('x') &&\n    keys.includes('y') &&\n    !forceNtuples\n  ) {\n    let x = variables.x;\n    let xLabel = x.label || x.name || 'x';\n\n    jcampOptions.info.xUnits = xLabel.includes(variables.x.units)\n      ? xLabel\n      : `${xLabel} [${variables.x.units}]`;\n\n    let y = variables.y;\n    let yLabel = y.label || y.name || 'y';\n\n    jcampOptions.info.yUnits = yLabel.includes(variables.y.units)\n      ? yLabel\n      : `${yLabel} [${variables.y.units}]`;\n    return fromJSON({ x: variables.x.data, y: variables.y.data }, jcampOptions);\n  } else {\n    return creatorNtuples(variables, options);\n  }\n}\n","import { fromVariables } from 'convert-to-jcamp';\n\nexport function toJcamps(analysis, options = {}) {\n  let jcamps = [];\n  for (let spectrum of analysis.spectra) {\n    jcamps.push(getJcamp(spectrum, options));\n  }\n  return jcamps;\n}\n\nfunction getJcamp(spectrum, options) {\n  const { info = {}, meta = {} } = options;\n\n  let jcampOptions = {\n    options: {},\n    info: {\n      title: spectrum.title,\n      dataType: spectrum.dataType,\n      ...info,\n    },\n    meta: { ...spectrum.meta, ...meta },\n  };\n\n  return fromVariables(spectrum.variables, jcampOptions);\n}\n","import { toJcamps } from './toJcamps';\n\nexport function toJcamp(analysis, options = {}) {\n  return toJcamps(analysis, options).join('\\n');\n}\n","/**\n * @typedef {Object} DataXY\n * @property {Array<Number>} x Array of x values\n * @property {Array<Number>} y Array of y values\n */\n\n/**\n * @typedef {Object} Spectrum\n * @property {Array<Number>} x Array of x values\n * @property {Array<Number>} y Array of y values\n * @property {string} xLabel\n * @property {string} yLabel\n * @property {string} title\n * @property {object} meta\n */\n\nimport { getJSGraph } from './jsgraph/getJSGraph';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations';\nimport { getReactPlotJSON } from './reactPlot/getReactPlotJSON';\n\nexport * from './AnalysesManager';\nexport * from './Analysis';\nexport * from './from/fromJcamp';\nexport * from './to/toJcamp';\nexport * from './to/toJcamps';\nexport * from './util/getNormalizedSpectrum';\n\nexport const JSGraph = {\n  getJSGraph,\n  getReactPlotJSON,\n  getNormalizationAnnotations,\n};\n","export function parsePerkinElmer(text) {\n  let lines = text.split(/[\\r\\n]+/);\n  let result = {\n    meta: { methodSteps: [] },\n    data: { time: [], weight: [], temperature: [] },\n  };\n  let section = '';\n  let inMethodSteps = false;\n  for (let line of lines) {\n    if (inMethodSteps) {\n      if (line.startsWith('1) TGA')) {\n        inMethodSteps = false;\n      } else {\n        if (line[0] !== '\\t' && line.length > 2) {\n          result.meta.methodSteps.push(line.replace(/\\t\\n,+$/g, ''));\n        }\n      }\n    } else if (line.match(/^[a-zA-Z -]+$/)) {\n      section = trim(line);\n    } else if (line.match(/.*:.*/)) {\n      let position = line.indexOf(':');\n      let description = line.substring(0, position);\n      let value = trim(line.substring(position + 1));\n      result.meta[(section ? `${section}_` : '') + description] = value;\n    } else if (line.match(/^[0-9\\t .]+$/)) {\n      let fields = line.replace(/^\\t/, '').split('\\t');\n      result.data.time.push(Number(fields[0] * 60));\n      result.data.weight.push(Number(fields[1]));\n      result.data.temperature.push(Number(fields[4]));\n    } else {\n      //  console.log('Problem: ', line);\n    }\n    if (line.startsWith('Method Steps:')) {\n      inMethodSteps = true;\n    }\n  }\n  return result;\n}\nfunction trim(string) {\n  return string.replace(/^[ \\t]*(.*?)[ \\t]*$/, '$1');\n}\n","import { Analysis } from '..';\n\nimport { parsePerkinElmer } from './parsePerkinElmer';\n\n/**\n * Creates a new Chromatogram element based in a JCAMP string\n * @param {string} text - String containing the JCAMP data\n * @return {Analysis} - New class element with the given data\n */\nexport function fromPerkinElmer(text) {\n  let analysis = new Analysis();\n  let spectrum = parsePerkinElmer(text);\n\n  analysis.pushSpectrum(\n    {\n      x: {\n        data: spectrum.data.temperature,\n        label: 'Temperature [°C]',\n      },\n      y: {\n        data: spectrum.data.weight,\n        label: 'Weight [mg]',\n      },\n    },\n    {\n      dataType: 'TGA',\n      title: spectrum.meta['Sample ID'],\n      meta: spectrum.meta,\n    },\n  );\n  analysis.pushSpectrum(\n    {\n      x: {\n        data: spectrum.data.time,\n        label: 'Time [min]',\n      },\n      y: {\n        data: spectrum.data.weight,\n        label: 'Weight [mg]',\n      },\n    },\n    {\n      dataType: 'TGA',\n      title: spectrum.meta['Sample ID'],\n      meta: spectrum.meta,\n    },\n  );\n  return analysis;\n}\n","/* @license\nPapa Parse\nv5.3.0\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n!function(e,t){\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()}(this,function s(){\"use strict\";var f=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=n&&/blob:/i.test((f.location||{}).protocol),a={},h=0,b={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;U(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!U(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var r=function(){if(!b.WORKERS_SUPPORTED)return!1;var e=(i=f.URL||f.webkitURL||null,r=s.toString(),b.BLOB_URL||(b.BLOB_URL=i.createObjectURL(new Blob([\"(\",r,\")();\"],{type:\"text/javascript\"})))),t=new f.Worker(e);var i,r;return t.onmessage=m,t.id=h++,a[t.id]=t}();return r.userStep=t.step,r.userChunk=t.chunk,r.userComplete=t.complete,r.userError=t.error,t.step=U(t.step),t.chunk=U(t.chunk),t.complete=U(t.complete),t.error=U(t.error),delete t.worker,void r.postMessage({input:e,config:t,workerId:r.id})}var n=null;b.NODE_STREAM_INPUT,\"string\"==typeof e?n=t.download?new l(t):new p(t):!0===e.readable&&U(e.read)&&U(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,m=!0,_=\",\",v=\"\\r\\n\",s='\"',a=s+s,i=!1,r=null,o=!1;!function(){if(\"object\"!=typeof t)return;\"string\"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(_=t.delimiter);(\"boolean\"==typeof t.quotes||\"function\"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines);\"string\"==typeof t.newline&&(v=t.newline);\"string\"==typeof t.quoteChar&&(s=t.quoteChar);\"boolean\"==typeof t.header&&(m=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s);\"boolean\"==typeof t.escapeFormulae&&(o=t.escapeFormulae)}();var h=new RegExp(q(s),\"g\");\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,i);if(\"object\"==typeof e[0])return f(r||u(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:u(e.data[0])),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function u(e){if(\"object\"!=typeof e)return[];var t=[];for(var i in e)t.push(i);return t}function f(e,t,i){var r=\"\";\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0<e.length,s=!Array.isArray(t[0]);if(n&&m){for(var a=0;a<e.length;a++)0<a&&(r+=_),r+=y(e[a],a);0<t.length&&(r+=v)}for(var o=0;o<t.length;o++){var h=n?e.length:t[o].length,u=!1,f=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u=\"greedy\"===i?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===i&&n){for(var d=[],l=0;l<h;l++){var c=s?e[l]:l;d.push(t[o][c])}u=\"\"===d.join(\"\").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!f&&(r+=_);var g=n&&s?e[p]:p;r+=y(t[o][g],p)}o<t.length-1&&(!i||0<h&&!f)&&(r+=v)}}return r}function y(e,t){if(null==e)return\"\";if(e.constructor===Date)return JSON.stringify(e).slice(1,25);!0===o&&\"string\"==typeof e&&null!==e.match(/^[=+\\-@].*$/)&&(e=\"'\"+e);var i=e.toString().replace(h,a),r=\"boolean\"==typeof n&&n||\"function\"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||function(e,t){for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1}(i,b.BAD_DELIMITERS)||-1<i.indexOf(_)||\" \"===i.charAt(0)||\" \"===i.charAt(i.length-1);return r?s+i+s:i}}};if(b.RECORD_SEP=String.fromCharCode(30),b.UNIT_SEP=String.fromCharCode(31),b.BYTE_ORDER_MARK=\"\\ufeff\",b.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',b.BYTE_ORDER_MARK],b.WORKERS_SUPPORTED=!n&&!!f.Worker,b.NODE_STREAM_INPUT=1,b.LocalChunkSize=10485760,b.RemoteChunkSize=5242880,b.DefaultDelimiter=\",\",b.Parser=w,b.ParserHandle=i,b.NetworkStreamer=l,b.FileStreamer=c,b.StringStreamer=p,b.ReadableStreamStreamer=g,f.jQuery){var d=f.jQuery;d.fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&f.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0!==h.length){var e,t,i,r,n=h[0];if(U(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,i=n.inputElem,r=s.reason,void(U(o.error)&&o.error({name:e},t,i,r));if(\"skip\"===s.action)return void u();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void u()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){U(a)&&a(e,n.file,n.inputElem),u()},b.parse(n.file,n.instanceConfig)}else U(o.complete)&&o.complete()}function u(){h.splice(0,1),e()}}}function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=E(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(e,t){if(this.isFirstChunk&&U(this._config.beforeFirstChunk)){var i=this._config.beforeFirstChunk(e);void 0!==i&&(e=i)}this.isFirstChunk=!1,this._halted=!1;var r=this._partialLine+e;this._partialLine=\"\";var n=this._handle.parse(r,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=n.meta.cursor;this._finished||(this._partialLine=r.substring(s-this._baseIndex),this._baseIndex=s),n&&n.data&&(this._rowCount+=n.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(U(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!U(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0},this._sendError=function(e){U(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1})}}function l(e){var r;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),u.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),n||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)r.setRequestHeader(t,e[t])}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i)}try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:r.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader(\"Content-Range\");if(null===t)return-1;return parseInt(t.substring(t.lastIndexOf(\"/\")+1))}(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){var t=r.statusText||e;this._sendError(new Error(t))}}function c(e){var r,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),u.call(this,e);var s=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((r=new FileReader).onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)):r=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input;if(this._config.chunkSize){var t=Math.min(this._start+this._config.chunkSize,this._input.size);e=n.call(e,this._start,t)}var i=r.readAsText(e,this._config.encoding);s||this._chunkLoaded({target:{result:i}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(r.error)}}function p(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=i.substring(0,t),i=i.substring(t)):(e=i,i=\"\"),this._finished=!i,this.parseChunk(e)}}}function g(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(_){var a,o,h,r=Math.pow(2,53),n=-r,s=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)(e[-+]?\\d+)?\\s*$/,u=/(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/,t=this,i=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(U(_.step)){var p=_.step;_.step=function(e){if(c=e,m())g();else{if(g(),0===c.data.length)return;i+=e.data.length,_.preview&&i>_.preview?o.abort():(c.data=c.data[0],p(c,t))}}}function v(e){return\"greedy\"===_.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(c&&h&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+b.DefaultDelimiter+\"'\"),h=!1),_.skipEmptyLines)for(var e=0;e<c.data.length;e++)v(c.data[e])&&c.data.splice(e--,1);return m()&&function(){if(!c)return;function e(e,t){U(_.transformHeader)&&(e=_.transformHeader(e,t)),l.push(e)}if(Array.isArray(c.data[0])){for(var t=0;m()&&t<c.data.length;t++)c.data[t].forEach(e);c.data.splice(0,1)}else c.data.forEach(e)}(),function(){if(!c||!_.header&&!_.dynamicTyping&&!_.transform)return c;function e(e,t){var i,r=_.header?{}:[];for(i=0;i<e.length;i++){var n=i,s=e[i];_.header&&(n=i>=l.length?\"__parsed_extra\":l[i]),_.transform&&(s=_.transform(s,n)),s=y(n,s),\"__parsed_extra\"===n?(r[n]=r[n]||[],r[n].push(s)):r[n]=s}return _.header&&(i>l.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+l.length+\" fields but parsed \"+i,f+t):i<l.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+l.length+\" fields but parsed \"+i,f+t)),r}var t=1;!c.data.length||Array.isArray(c.data[0])?(c.data=c.data.map(e),t=c.data.length):c.data=e(c.data,0);_.header&&c.meta&&(c.meta.fields=l);return f+=t,c}()}function m(){return _.header&&0===l.length}function y(e,t){return i=e,_.dynamicTypingFunction&&void 0===_.dynamicTyping[i]&&(_.dynamicTyping[i]=_.dynamicTypingFunction(i)),!0===(_.dynamicTyping[i]||_.dynamicTyping)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&(function(e){if(s.test(e)){var t=parseFloat(e);if(n<t&&t<r)return!0}return!1}(t)?parseFloat(t):u.test(t)?new Date(t):\"\"===t?null:t):t;var i}function k(e,t,i,r){var n={type:e,code:t,message:i};void 0!==r&&(n.row=r),c.errors.push(n)}this.parse=function(e,t,i){var r=_.quoteChar||'\"';if(_.newline||(_.newline=function(e,t){e=e.substring(0,1048576);var i=new RegExp(q(t)+\"([^]*?)\"+q(t),\"gm\"),r=(e=e.replace(i,\"\")).split(\"\\r\"),n=e.split(\"\\n\"),s=1<n.length&&n[0].length<r[0].length;if(1===r.length||s)return\"\\n\";for(var a=0,o=0;o<r.length;o++)\"\\n\"===r[o][0]&&a++;return a>=r.length/2?\"\\r\\n\":\"\\r\"}(e,r)),h=!1,_.delimiter)U(_.delimiter)&&(_.delimiter=_.delimiter(e),c.meta.delimiter=_.delimiter);else{var n=function(e,t,i,r,n){var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",b.RECORD_SEP,b.UNIT_SEP];for(var u=0;u<n.length;u++){var f=n[u],d=0,l=0,c=0;o=void 0;for(var p=new w({comments:r,delimiter:f,newline:t,preview:10}).parse(e),g=0;g<p.data.length;g++)if(i&&v(p.data[g]))c++;else{var m=p.data[g].length;l+=m,void 0!==o?0<m&&(d+=Math.abs(m-o),o=m):o=m}0<p.data.length&&(l/=p.data.length-c),(void 0===a||d<=a)&&(void 0===h||h<l)&&1.99<l&&(a=d,s=f,h=l)}return{successful:!!(_.delimiter=s),bestDelimiter:s}}(e,_.newline,_.skipEmptyLines,_.comments,_.delimitersToGuess);n.successful?_.delimiter=n.bestDelimiter:(h=!0,_.delimiter=b.DefaultDelimiter),c.meta.delimiter=_.delimiter}var s=E(_);return _.preview&&_.header&&s.preview++,a=e,o=new w(s),c=o.parse(a,t,i),g(),d?{meta:{paused:!0}}:c||{meta:{paused:!1}}},this.paused=function(){return d},this.pause=function(){d=!0,o.abort(),a=U(_.chunk)?\"\":a.substring(o.getCharIndex())},this.resume=function(){t.streamer._halted?(d=!1,t.streamer.parseChunk(a,!0)):setTimeout(t.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,o.abort(),c.meta.aborted=!0,U(_.complete)&&_.complete(c),a=\"\"}}function q(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function w(e){var O,D=(e=e||{}).delimiter,I=e.newline,T=e.comments,A=e.step,L=e.preview,F=e.fastMode,z=O=void 0===e.quoteChar?'\"':e.quoteChar;if(void 0!==e.escapeChar&&(z=e.escapeChar),(\"string\"!=typeof D||-1<b.BAD_DELIMITERS.indexOf(D))&&(D=\",\"),T===D)throw new Error(\"Comment character same as delimiter\");!0===T?T=\"#\":(\"string\"!=typeof T||-1<b.BAD_DELIMITERS.indexOf(T))&&(T=!1),\"\\n\"!==I&&\"\\r\"!==I&&\"\\r\\n\"!==I&&(I=\"\\n\");var M=0,j=!1;this.parse=function(a,t,i){if(\"string\"!=typeof a)throw new Error(\"Input must be a string\");var r=a.length,e=D.length,n=I.length,s=T.length,o=U(A),h=[],u=[],f=[],d=M=0;if(!a)return R();if(F||!1!==F&&-1===a.indexOf(O)){for(var l=a.split(I),c=0;c<l.length;c++){if(f=l[c],M+=f.length,c!==l.length-1)M+=I.length;else if(i)return R();if(!T||f.substring(0,s)!==T){if(o){if(h=[],b(f.split(D)),S(),j)return R()}else b(f.split(D));if(L&&L<=c)return h=h.slice(0,L),R(!0)}}return R()}for(var p=a.indexOf(D,M),g=a.indexOf(I,M),m=new RegExp(q(z)+q(O),\"g\"),_=a.indexOf(O,M);;)if(a[M]!==O)if(T&&0===f.length&&a.substring(M,M+s)===T){if(-1===g)return R();M=g+n,g=a.indexOf(I,M),p=a.indexOf(D,M)}else{if(-1!==p&&(p<g||-1===g)){if(!(p<_)){f.push(a.substring(M,p)),M=p+e,p=a.indexOf(D,M);continue}var v=x(p,_,g);if(v&&void 0!==v.nextDelim){p=v.nextDelim,_=v.quoteSearch,f.push(a.substring(M,p)),M=p+e,p=a.indexOf(D,M);continue}}if(-1===g)break;if(f.push(a.substring(M,g)),C(g+n),o&&(S(),j))return R();if(L&&h.length>=L)return R(!0)}else for(_=M,M++;;){if(-1===(_=a.indexOf(O,_+1)))return i||u.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:h.length,index:M}),E();if(_===r-1)return E(a.substring(M,_).replace(m,O));if(O!==z||a[_+1]!==z){if(O===z||0===_||a[_-1]!==z){-1!==p&&p<_+1&&(p=a.indexOf(D,_+1)),-1!==g&&g<_+1&&(g=a.indexOf(I,_+1));var y=w(-1===g?p:Math.min(p,g));if(a[_+1+y]===D){f.push(a.substring(M,_).replace(m,O)),a[M=_+1+y+e]!==O&&(_=a.indexOf(O,M)),p=a.indexOf(D,M),g=a.indexOf(I,M);break}var k=w(g);if(a.substring(_+1+k,_+1+k+n)===I){if(f.push(a.substring(M,_).replace(m,O)),C(_+1+k+n),p=a.indexOf(D,M),_=a.indexOf(O,M),o&&(S(),j))return R();if(L&&h.length>=L)return R(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:M}),_++}}else _++}return E();function b(e){h.push(e),d=M}function w(e){var t=0;if(-1!==e){var i=a.substring(_+1,e);i&&\"\"===i.trim()&&(t=i.length)}return t}function E(e){return i||(void 0===e&&(e=a.substring(M)),f.push(e),M=r,b(f),o&&S()),R()}function C(e){M=e,b(f),f=[],g=a.indexOf(I,M)}function R(e){return{data:h,errors:u,meta:{delimiter:D,linebreak:I,aborted:j,truncated:!!e,cursor:d+(t||0)}}}function S(){A(R()),h=[],u=[]}function x(e,t,i){var r={nextDelim:void 0,quoteSearch:void 0},n=a.indexOf(O,t+1);if(t<e&&e<n&&(n<i||-1===i)){var s=a.indexOf(D,n);if(-1===s)return r;n<s&&(n=a.indexOf(O,n+1)),r=x(s,n,i)}else r={nextDelim:e,quoteSearch:t};return r}},this.abort=function(){j=!0},this.getCharIndex=function(){return M}}function m(e){var t=e.data,i=a[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,_(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:v,resume:v};if(U(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!r);s++);delete t.results}else U(i.userChunk)&&(i.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!r&&_(t.workerId,t.results)}function _(e,t){var i=a[e];U(i.userComplete)&&i.userComplete(t),i.terminate(),delete a[e]}function v(){throw new Error(\"Not implemented.\")}function E(e){if(\"object\"!=typeof e||null===e)return e;var t=Array.isArray(e)?[]:{};for(var i in e)t[i]=E(e[i]);return t}function y(e,t){return function(){e.apply(t,arguments)}}function U(e){return\"function\"==typeof e}return o&&(f.onmessage=function(e){var t=e.data;void 0===b.WORKER_ID&&t&&(b.WORKER_ID=t.workerId);if(\"string\"==typeof t.input)f.postMessage({workerId:b.WORKER_ID,results:b.parse(t.input,t.config),finished:!0});else if(f.File&&t.input instanceof File||t.input instanceof Object){var i=b.parse(t.input,t.config);i&&f.postMessage({workerId:b.WORKER_ID,results:i,finished:!0})}}),(l.prototype=Object.create(u.prototype)).constructor=l,(c.prototype=Object.create(u.prototype)).constructor=c,(p.prototype=Object.create(p.prototype)).constructor=p,(g.prototype=Object.create(u.prototype)).constructor=g,b});","import Papa from 'papaparse';\n\nimport { Analysis } from '..';\n\n/**\n * Creates a new Chromatogram element based in a JCAMP string\n * @param {string} text - String containing the JCAMP data\n * @return {Analysis} - New class element with the given data\n */\nexport function fromPerkinElmerCSV(text) {\n  let parsed = Papa.parse(text, {\n    skipEmptyLines: true,\n    header: true,\n    dynamicTyping: true,\n  }).data;\n\n  let analysis = new Analysis();\n  analysis.pushSpectrum(\n    {\n      x: {\n        data: parsed.map((d) => d['Sample Temperature']),\n        label: 'Sample temperature [°C]',\n        type: 'dependent',\n      },\n      y: {\n        data: parsed.map((d) => d['Unsubtracted Weight']),\n        label: 'Weight [mg]',\n        type: 'dependent',\n      },\n      p: {\n        data: parsed.map((d) => d['Program Temperature']),\n        label: 'Program temperature [°C]',\n        type: 'dependent',\n      },\n      t: {\n        data: parsed.map((d) => d.Time),\n        label: 'Time [min]',\n        type: 'independent',\n      },\n    },\n    { dataType: 'TGA' },\n  );\n\n  return analysis;\n}\n","export function parseTAInstruments(text) {\n  let lines = text\n    .split(/\\r?\\n/)\n    .filter((line) => !line.match(/(^\\s*$)|(^StartOfData$)/));\n\n  let meta = parseMeta(lines);\n\n  let parsed = lines\n    .slice(meta.dataStart, lines.length)\n    .filter((line) => !line.startsWith('-'))\n    .map((line) => line.replace(/^\\s/g, '').split(/\\s+/).map(Number));\n  meta.balancePurgeFlow = [];\n  meta.samplePurgeFlow = [];\n  // We now assume that we always have 5 columns in the same order ...\n  let result = {\n    meta: meta,\n    data: {\n      time: [],\n      weight: [],\n      temperature: [],\n    },\n  };\n  result.data.time = parsed.map((fields) => fields[0]);\n  result.data.temperature = parsed.map((fields) => fields[1]);\n  result.data.weight = parsed.map((fields) => fields[2]);\n  result.meta.balancePurgeFlow = parsed.map((fields) => fields[3]);\n  result.meta.samplePurgeFlow = parsed.map((fields) => fields[4]);\n\n  return result;\n}\n\nfunction splitTrim(string, item = 1) {\n  return string.split(/\\t/)[item].replace(/^[ \\t]*(.*?)[ \\t]*$/, '$1');\n}\n\nfunction parseMeta(lines) {\n  let meta = { comments: [], methodSteps: [] };\n  for (let [i, line] of lines.entries()) {\n    if (line.match(/^Instrument/)) {\n      meta.instrument = splitTrim(line);\n    } else if (line.match(/^InstSerial/)) {\n      meta.instrumentSerial = splitTrim(line);\n    } else if (line.match(/^Sample/)) {\n      meta.sampleName = splitTrim(line);\n    } else if (line.match(/^Size/)) {\n      meta.weight = parseFloat(splitTrim(line));\n      meta.weightUnit = splitTrim(line, 2);\n    } else if (line.match(/^Xcomment|^Comment/)) {\n      meta.comments.push(splitTrim(line));\n    } else if (line.match(/^Method/)) {\n      meta.method = splitTrim(line);\n    } else if (line.match(/^Mode/)) {\n      meta.mode = splitTrim(line);\n    } else if (line.match(/^File/)) {\n      meta.file = splitTrim(line);\n    } else if (line.match(/^Date/)) {\n      meta.date = splitTrim(line);\n    } else if (line.match(/^Time/)) {\n      meta.time = splitTrim(line);\n    } else if (line.match(/^OrgMethod/)) {\n      meta.methodSteps.push(splitTrim(line));\n    } else if (line.match(/^Controls/)) {\n      meta.controls = splitTrim(line);\n    } else if (line.match(/^FurnaceType/)) {\n      meta.furnaceType = splitTrim(line);\n    } else if (line.match(/^Operator/)) {\n      meta.operator = splitTrim(line);\n    } else if (line.match(/^RunSerial/)) {\n      meta.runSerial = splitTrim(line);\n    } else if (line.match(/^ProcName/)) {\n      meta.procName = splitTrim(line);\n    } else if (line.match(/^OrgFile/)) {\n      meta.dataStart = i + 1;\n      break;\n    }\n  }\n\n  return meta;\n}\n","import { Analysis } from '..';\n\nimport { parseTAInstruments } from './parseTAInstruments';\n\nexport function fromTAInstruments(text) {\n  let analysis = new Analysis();\n  let parsed = parseTAInstruments(text);\n\n  analysis.pushSpectrum(\n    {\n      x: {\n        data: parsed.data.temperature,\n        type: 'dependent',\n        label: 'Program temperature [°C]',\n      },\n      y: {\n        data: parsed.data.weight,\n        type: 'dependent',\n        label: 'Weight [mg]',\n      },\n      t: {\n        data: parsed.data.time,\n        type: 'independent',\n        label: 'Time [min]',\n      },\n    },\n    { dataType: 'TGA', title: parsed.meta.sampleName, meta: parsed.meta },\n  );\n\n  return analysis;\n}\n","let xlsx = require('xlsx');\n\nfunction valueElseUndefined(cell) {\n  return cell ? cell.v : undefined;\n}\n\nfunction valueElseUndefinedFloat(cell) {\n  return cell ? parseFloat(cell.v) : undefined;\n}\n\nfunction parseDataSheet(sheet) {\n  let range = xlsx.utils.decode_range(sheet['!ref']);\n  let data = [[], [], [], []]; // we assume that it is time, temperature, weight, weight %\n  let rowNum;\n  let colNum;\n  for (rowNum = range.s.r + 4; rowNum <= range.e.r; rowNum++) {\n    // the first row seems to always be constant\n    for (colNum = 0; colNum <= 3; colNum++) {\n      data[colNum].push(\n        valueElseUndefinedFloat(\n          sheet[xlsx.utils.encode_cell({ r: rowNum, c: colNum })],\n        ),\n      );\n    }\n  }\n\n  return data;\n}\n\nfunction parseMeta(detailsSheet) {\n  let meta = {};\n  meta.fileName = valueElseUndefined(detailsSheet.B1);\n  meta.instrumentName = valueElseUndefined(detailsSheet.B2);\n  meta.operator = valueElseUndefined(detailsSheet.B3);\n  meta.date = valueElseUndefined(detailsSheet.B8);\n  meta.sampleName = valueElseUndefined(detailsSheet.B5);\n  meta.procedure = valueElseUndefined(detailsSheet.B6)\n    .split(';')\n    .map(function (item) {\n      return item.trim();\n    });\n  let mass = valueElseUndefined(detailsSheet.B16).split(' ');\n  meta.sampleWeight = parseFloat(mass[0]);\n  meta.sampleWeightUnit = mass[1].trim();\n  meta.comments = valueElseUndefined(detailsSheet.B18);\n\n  return meta;\n}\n\nexport function parseTAInstrumentsExcel(inputData) {\n  const workbook = xlsx.read(inputData);\n  let meta = parseMeta(workbook.Sheets.Details);\n\n  let data = {\n    time: [],\n    temperature: [],\n    weight: [],\n    weightPercent: [],\n  };\n\n  let parsedData;\n\n  workbook.SheetNames.forEach((sheetName) => {\n    if (sheetName !== 'Details') {\n      parsedData = parseDataSheet(workbook.Sheets[sheetName]);\n      data.time.push(...parsedData[0]);\n      data.temperature.push(...parsedData[1]);\n      data.weight.push(...parsedData[2]);\n      data.weightPercent.push(...parsedData[3]);\n    }\n  });\n\n  data.meta = meta;\n\n  return data;\n}\n\nexport const testables = {\n  parseMeta: parseMeta,\n  parseDataSheet: parseDataSheet,\n};\n","import { Analysis } from '..';\n\nimport { parseTAInstrumentsExcel } from './parseTAInstrumentsExcel';\n\nexport function fromTAInstrumentsExcel(text) {\n  let analysis = new Analysis();\n  let parsed = parseTAInstrumentsExcel(text);\n\n  analysis.pushSpectrum(\n    {\n      x: {\n        data: parsed.temperature,\n        type: 'dependent',\n        label: 'Program temperature [°C]',\n      },\n      y: {\n        data: parsed.weight,\n        type: 'dependent',\n        label: 'Weight [mg]',\n      },\n      z: {\n        data: parsed.weightPercent,\n        type: 'dependent',\n        label: 'Weight [%]',\n      },\n      t: {\n        data: parsed.time,\n        type: 'independent',\n        label: 'Time [s]',\n      },\n    },\n    { dataType: 'TGA', title: parsed.meta.sampleName, meta: parsed.meta },\n  );\n\n  return analysis;\n}\n"],"names":["addStyle","serie","spectrum","options","color","opacity","lineWidth","match","toString","toUpperCase","replace","style","name","line","width","dash","label","id","COLORS","getJSGraph","analyses","colors","opacities","linesWidth","selector","normalization","series","xLabel","yLabel","i","length","analysis","currentData","getNormalizedSpectrum","variables","x","y","data","push","axes","unit","flipped","display","getNormalizationAnnotations","filter","boundary","min","max","exclusions","annotations","exclusion","ignore","map","annotation","type","position","from","to","strokeWidth","fillColor","undefined","Number","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","getData","Array","getReactPlotJSON","query","xAxis","xAxisOptions","yAxis","yAxisOptions","labelSpace","seriesOptions","displayMarker","dimentions","height","meta","spectra","getXYSpectrum","title","appendDistinctParameter","values","key","value","count","includes","appendDistinctValue","AnalysesManager","constructor","addAnalysis","index","getAnalysisIndex","getAnalyses","ids","getSpectra","getDistinctTitles","Object","keys","getDistinctUnits","units","getDistinctLabels","getDistinctDataTypes","dataType","getDistinctMeta","removeAllAnalyses","splice","removeAnalysis","isNaN","prototype","isAnyArray","object","call","endsWith","input","arguments","isArray","TypeError","_options$fromIndex","fromIndex","_options$toIndex","toIndex","isInteger","Error","maxValue","minValue","a","d","e","f","g","h","j","c","b","_ref","module","exports","window","median","quickSelectMedian","slice","xAdd","array1","array2","isConstant","constant","array3","xMultiply","Float64Array","xDivide","xIsMonotone","array","xCheck","global","factory","this","ascending","NaN","bisector","compare","ascendingComparator","left","lo","hi","mid","right","ascendingBisect","bisectRight","bisectLeft","descending","number$1","variance","n","m","s","deviation","v","Math","sqrt","extent","identity","range","start","stop","step","ceil","e10","e5","e2","ticks","tickStep","floor","step0","abs","step1","pow","log","LN10","error","sturges","LN2","number","histogram","domain","threshold","xz","x0","x1","tz","shift","pop","bins","bin","_","thresholds","quantile","p","freedmanDiaconis","sort","scott","mean","numbers","merge","arrays","merged","pairs","permute","indexes","permutes","scan","xi","xj","shuffle","i0","i1","t","random","sum","transpose","matrix","row","zip","version","bisect","thresholdFreedmanDiaconis","thresholdScott","thresholdSturges","sumValue","xPadding","size","algorithm","result","fromEnd","toEnd","toLowerCase","xRolling","fct","padding","newArray","subArray","buffer","xRollingAverage","xRollingMedian","xSubtract","isEnumerable","propertyIsEnumerable","getSymbols","getOwnPropertySymbols","target","args","isObject","Symbol","arg","names","val","isValidKey","assign","isPrimitive","assignSymbols","rescale","output","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","inspectData","rows","columns","maxI","maxJ","formatNumber","get","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","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","clz32","cos","cosh","exp","expm1","fround","log1p","log10","log2","round","sign","sin","sinh","tan","tanh","trunc","arg0","powS","powM","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","checkRowIndices","column","checkColumnIndices","rowOut","some","r","columnOut","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","checkNonEmpty","isEmpty","sumByRow","sumByColumn","sumAll","productByRow","productByColumn","productAll","varianceByRow","unbiased","cols","sum1","sum2","varianceByColumn","varianceAll","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","rowVector","columnVector","zeros","ones","fill","rand","randInt","interval","eye","diag","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","iMax","swapRows","tmp","reducedEchelonForm","maxRow","pivot","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","r1","c1","r2","c2","console","warn","embed","mat","resultat","blockMult","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","sortRows","compareFunction","compareNumbers","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","center","for","randomInt","diagonal","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","addRow","removeColumn","newRow","addColumn","BaseView","MatrixTransposeView","WrapperMatrix2D","LuDecomposition","lu","pivotVector","pivotSign","LUcolj","kmax","LU","isSingular","col","solve","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","cs","sn","sp","spm1","epm1","sk","ek","Y","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","ldlSymbolic","Ap","Ai","Lp","Parent","Lnz","Flag","kk","p2","ldlNumeric","Ax","Li","Lx","D","Pattern","yi","lKi","len","top","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPerm","B","P","ldlPermt","prepare","M","Pinv","Mt","ar","ac","LNZ","coloffset","adr","bp1","cuthillMckee","compareNum","list","adj","visited","toVisit","eol","ptr","nbhd","u","getClosestNumber","goal","closest","reduce","prev","curr","getCloseIndex","updateSystem","weights","nbPoints","newVector","w","next","getDeltaMatrix","lambda","lowerTriangularNonZeros","permutationEncodedArray","airPLS","maxIterations","factorCriterion","controlPoints","baseLineZones","forEach","arr","indexFrom","indexTo","baseline","iteration","sumNegDifferences","stopCriterion","cho","Cholesky","difference","calculateError","maxNegativeDiff","diff","corrected","BaselineOutput","correctedSpectrum","airPLSBaseline","numberPoints","airpls","maybeToPrecision","digits","checkArraySize","BaseRegression","new","predict","_predict","train","toLaTeX","score","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","regress","precision","_toFormula","isLaTeX","sup","closeSup","times","fn","str","charAt","load","json","pr","F","FT","A","baselineCorrectionRegression","Regression","regressionOptions","tolerance","fitting","oldFitting","delta","regression","iterativePolynomialBaseline","baselineCorrection","rollingAverageBaseline","defaults","actualOptions","rollingBall","maxima","minima","windowM","windowS","u1","u2","rollingBallBaseline","rollingMedianBaseline","_options$algorithm","_options$sumValue","_options$maxValue","absoluteSumValue","absoluteSum","currentMaxValue","_i","sumFactor","_i2","concat","_typeof","obj","iterator","sequentialFill","_options","_options$from","_options$to","_options$size","normalize","zones","NEGATIVE_INFINITY","POSITIVE_INFINITY","JSON","parse","stringify","zone","currentZone","invert","nextExclusion","zonesWithPoints","numberOfPoints","totalSize","previous","current","unitsPerPoint","currentTotal","integral","slope","intercept","equallySpacedSmooth","xLength","halfStep","initialOriginalStep","lastOriginalStep","previousX","previousY","nextX","nextY","currentValue","sumAtMin","sumAtMax","getSlope","y0","y1","main","equallySpacedSlot","lastStep","MAX_VALUE","frontOutsideSpectra","backOutsideSpectra","currentPoints","equallySpaced","arrayXY","reverse","variant","xResult","yResult","zoneResult","processZone","getZones","currentFrom","filterX","points","currentZoneIndex","newX","newY","defaultOptions","arrayCase","cond","matrixCase","padArray","factorial","windowSize","derivative","polynomial","pad","padValue","savitzkyGolay","C","ans","J","inic","Jtranspose","Jinv","det","minMax","arithmeticMean","geometricMean","logMean","lnsum","grandMean","means","samples","truncatedMean","percent","alreadySorted","harmonicMean","contraHarmonicMean","half","theMean","theVariance","standardError","robustMeanAndStdev","stdev","averageDeviations","quartiles","quart","q1","q2","q3","pooledStandardDeviation","pooledVariance","vari","mode","itemCount","itemArray","covariance","mean1","mean2","cov","skewness","s2","s3","dev","kurtosis","s4","entropy","weightedMean","weightedStandardDeviation","weightedVariance","z","inPlace","standardize","standardDev","newSpectrum","filters","processing","filterOptions","Stat","std","normed","process","kind","isMonotone","isString","isFiniteImpl","isNumber","uniq","strings","seen","item","hasOwnProperty","compareArray","properties","mulSafe","decimals","getFractional","divSafe","den","invDen","QtyError","err","create","message","stack","throwIncompatibleUnits","UNITS","PI","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","scalar","numerator","denominator","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","unitKeys","substr","getKinds","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","unitSignatureVector","isBase","toBase","SIGN","INTEGER","SIGNED_INTEGER","FRACTION","FLOAT","EXPONENT","SCI_NUMBER","SIGNED_NUMBER","QTY_STRING","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","trim","exec","scalarMatch","parseFloat","bottom","nx","UNIT_TEST_REGEX","test","parseUnits","PREFIX_REGEX","UNIT_REGEX","BOUNDARY_REGEX","UNIT_MATCH","UNIT_MATCH_REGEX","parsedUnitsCache","cached","unitMatch","normalizedUnits","globalParse","isQty","Qty","initValue","initUnits","assertValidConstructorArgs","baseScalar","_conversionCache","isDefinitionObject","updateBaseScalar","isTemperature","base","KINDS","knownSignature","isDegrees","subtractTemperatures","lhs","rhs","lhsUnits","rhsConverted","dstDegrees","getDegreeUnits","subtractTempDegrees","deg","tempDegrees","addTempDegrees","toDegrees","src","dst","srcDegK","toDegK","dstUnits","dstScalar","qty","toTemp","toTempK","isCompatible","isInverse","baseUnitCache","toBaseUnits","toFloat","isUnitless","toPrec","precQuantity","precRoundedResult","swiftConverter","srcUnits","srcQty","dstQty","eq","convert","converter","op1","op2","numdenscale","cleanTerms","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","direction","prefix","prefixValue","combinedPrefixValue","prop","compareTo","lt","lte","gt","gte","same","every","_isBase","NestedMap","childMap","defaultFormatter","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","out","outScalar","format","targetQty","stringifiedUnitsCache","stringified","isUnity","simplify","getOutputNames","unitNames","token","tokenNext","unitCounts","acc","unitCounter","unitCount","convertUnit","fromUnit","toUnit","testRegExp","ensureRegexp","string","parts","stringToRegexp","flags","getConvertedVariable","variable","newUnits","variableNames","xUnits","yUnits","labels","split","getPossibleVariable","variableName","possible","converted","Analysis","substring","cache","pushSpectrum","standardizeData","getXY","getXLabel","getYLabel","xVariable","yVariable","GC_MS_FIELDS","complexChromatogram","chromatogram","ms","dimension","existingGCMSFields","convertMSFieldToLabel","pageValue","isMSField","canonicDataLabel","convertToFloatArray","stringArray","floatArray","fastParseXYData","yFactor","deltaX","isXYdata","currentX","firstX","currentY","firstY","endLine","ascii","charCodeAt","newLine","isDifference","isLastDifference","lastDifference","isDuplicate","inComment","lastValue","isNegative","inValue","skipFirstValue","decimalPosition","duplicate","ascii2","removeCommentRegExp","peakTableSplitRegExp","parsePeakTable","isPeaktable","parseXY","parseXYZ","lines","xFactor","logs","numberOfVariables","parseXYA","removeSymbolRegExp","isXYAdata","convertTo3DZ","minZ","maxZ","ySize","xSize","lastX","lastY","minX","maxX","minY","maxY","noise","getMedian","generateContourLines","zData","povarHeight0","povarHeight1","povarHeight2","povarHeight3","isOver0","isOver1","isOver2","isOver3","nbSubSpectra","nbPovars","pAx","pAy","pBx","pBy","xN","dx","yN","dy","iter","nbContourLevels","contourLevels","lineZValue","level","contourLevel","side","noiseMultiplier","zValue","iSubSpectra","subSpectra","subSpectraAfter","povar","segments","add2D","noContour","contourLines","FFT","release","date","_n","_bitrev","_cstb","core","init","_initArray","_makeBitReversalTable","_makeCosSinTable","fft1d","re","im","fft","ifft1d","bt1d","fft2d","tre","tim","x2","ifft2d","inv","ik","wr","wi","xr","n4","Uint32Array","_paddingZero","n2","n8","n2p4","dc","ds","apis","bt","ifft","gyromagneticRatio","postProcessingNMR","entriesFlat","observeFrequency","shiftOffsetVal","entry","ntuples","symbol","nucleus","startsWith","$NUC2","$NUC1","yType","pageSymbolIndex","pageSymbol","ratio0","ratio1","ratio","profiling","action","time","Date","now","simpleChromatogram","intensity","postProcessing","newNtuples","twoD","wantXY","keepSpectra","prepareNtuplesDatatable","currentEntry","xIndex","yIndex","firstVariable","secondVariable","lowerCaseSymbol","vardim","varname","prepareSpectrum","ntuplesSeparatorRegExp","numberRegExp","Spectrum","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","dynamicTyping","withoutXY","jcamp","entries","tmpResult","children","parentsStack","ldrs","ldr","dataLabel","dataValue","infos","datatable","parentEntry","info","dataClass","xType","shiftOffsetNum","vartype","varform","page","sampleDescription","flatten","fromJcamp","addJcamp","currentSpectrum","creatorNtuples","owner","origin","varName","varType","varDim","minFct","maxFct","header","point","fromJSON","fromVariables","forceNtuples","jcampOptions","toJcamps","jcamps","getJcamp","toJcamp","JSGraph","parsePerkinElmer","text","methodSteps","weight","temperature","section","inMethodSteps","description","fields","fromPerkinElmer","self","document","postMessage","o","location","protocol","dynamicTypingFunction","transform","worker","WORKERS_SUPPORTED","URL","webkitURL","BLOB_URL","createObjectURL","Blob","Worker","onmessage","userStep","userChunk","chunk","userComplete","complete","userError","config","workerId","download","readable","read","on","File","stream","unparse","delimiter","BAD_DELIMITERS","quotes","skipEmptyLines","newline","quoteChar","escapeChar","escapeFormulae","RECORD_SEP","fromCharCode","UNIT_SEP","BYTE_ORDER_MARK","NODE_STREAM_INPUT","LocalChunkSize","RemoteChunkSize","DefaultDelimiter","Parser","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","jQuery","each","attr","FileReader","files","file","inputElem","instanceConfig","extend","before","reason","_handle","_finished","_completed","_halted","_input","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","errors","E","chunkSize","streamer","_config","parseChunk","beforeFirstChunk","paused","aborted","cursor","preview","results","WORKER_ID","finished","_sendError","_readChunk","_chunkLoaded","XMLHttpRequest","withCredentials","onload","onerror","_chunkError","open","downloadRequestBody","downloadRequestHeaders","setRequestHeader","send","status","readyState","responseText","getResponseHeader","lastIndexOf","statusText","webkitSlice","mozSlice","FileReaderSync","readAsText","encoding","pause","resume","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","removeListener","abort","transformHeader","code","comments","successful","bestDelimiter","delimitersToGuess","getCharIndex","setTimeout","O","I","T","L","fastMode","R","S","nextDelim","quoteSearch","linebreak","truncated","terminate","fromPerkinElmerCSV","parsed","Papa","Time","parseTAInstruments","parseMeta","dataStart","balancePurgeFlow","samplePurgeFlow","splitTrim","instrument","instrumentSerial","sampleName","weightUnit","method","controls","furnaceType","operator","runSerial","procName","fromTAInstruments","xlsx","require","valueElseUndefined","cell","valueElseUndefinedFloat","parseDataSheet","sheet","utils","decode_range","rowNum","colNum","encode_cell","detailsSheet","fileName","B1","instrumentName","B2","B3","B8","B5","procedure","B6","mass","B16","sampleWeight","sampleWeightUnit","B18","parseTAInstrumentsExcel","inputData","workbook","Sheets","Details","weightPercent","parsedData","SheetNames","sheetName","fromTAInstrumentsExcel"],"mappings":"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"}