{"version":3,"file":"xrf-data.js","sources":["../node_modules/is-any-array/src/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/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-array-min/lib-es6/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-spectra-processing/src/x/xSubtract.js","../node_modules/ml-spectra-processing/src/xy/xyCheck.js","../node_modules/ml-spectra-processing/src/xy/xyEnsureGrowingX.js","../node_modules/ml-spectra-processing/src/xy/xyFilterXPositive.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/common-spectrum/lib-esm/jsgraph/addStyle.js","../node_modules/common-spectrum/lib-esm/jsgraph/colors.js","../node_modules/common-spectrum/lib-esm/jsgraph/getJSGraph.js","../node_modules/common-spectrum/lib-esm/jsgraph/getNormalizationAnnotations.js","../node_modules/common-spectrum/lib-esm/reactPlot/getReactPlotJSON.js","../node_modules/common-spectrum/lib-esm/util/appendDistinctParameter.js","../node_modules/common-spectrum/lib-esm/util/appendDistinctValue.js","../node_modules/common-spectrum/lib-esm/AnalysesManager.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/lib-esm/util/getNormalizedSpectrum.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/lib-esm/util/convertUnit.js","../node_modules/common-spectrum/lib-esm/util/ensureRegexp.js","../node_modules/common-spectrum/lib-esm/util/getConvertedVariable.js","../node_modules/common-spectrum/lib-esm/util/getXYSpectrum.js","../node_modules/common-spectrum/lib-esm/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/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/lib-esm/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/lib-esm/to/toJcamps.js","../node_modules/common-spectrum/lib-esm/to/toJcamp.js","../node_modules/common-spectrum/lib-esm/index.js","../node_modules/physical-chemistry-parser/src/xrf/panalytical/xrfParserPanalytical.js","../src/from/fromPanalytical.js"],"sourcesContent":["const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\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","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 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","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 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","import isAnyArray from 'is-any-array';\n\n/**\n * Throw an error in no an object of x,y arrays\n * @param {DataXY} [data={}]\n */\nexport function xyCheck(data = {}) {\n  if (!isAnyArray(data.x) || !isAnyArray(data.y)) {\n    throw new Error('Points must be an object of x and y arrays');\n  }\n  if (data.x.length !== data.y.length) {\n    throw new Error('The x and y arrays mush have the same length');\n  }\n}\n","import { xyCheck } from './xyCheck';\n\n/**\n * Filters x,y values to allow strictly growing values in x axis.\n * @param {DataXY} [data={}] - Object that contains property x (an ordered increasing array) and y (an array)\n * @return {DataXY}\n */\nexport function xyEnsureGrowingX(data = {}) {\n  xyCheck(data);\n  const x = Array.from(data.x);\n  const y = Array.from(data.y);\n  let prevX = -Infinity;\n  let ansX = [];\n  let ansY = [];\n\n  for (let index = 0; index < x.length; index++) {\n    if (prevX < x[index]) {\n      ansX.push(x[index]);\n      ansY.push(y[index]);\n      prevX = x[index];\n    }\n  }\n  return { x: ansX, y: ansY };\n}\n","import { xyCheck } from './xyCheck';\n/**\n * Filter out all the points for which x <= 0. Useful to display log scale data\n * @param {DataXY} [data={}]\n * @return {{x:[],y:[]}} An object with the filtered data\n */\n\nexport function xyFilterXPositive(data = {}) {\n  xyCheck(data);\n  const { x, y } = data;\n  const newX = [];\n  const newY = [];\n  for (let i = 0; i < x.length; i++) {\n    if (x[i] > 0) {\n      newX.push(x[i]);\n      newY.push(y[i]);\n    }\n  }\n\n  return { x: newX, y: newY };\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","export function addStyle(serie, spectrum, options = {}) {\n    let { color = '#A9A9A9', opacity = 1, lineWidth = 1 } = options;\n    // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n    if (color.match(/#[0-9A-F]{6}$/i)) {\n        color = (color + ((opacity * 255) >> 0).toString(16)).toUpperCase();\n    }\n    else {\n        color = color.replace(/rgb ?\\((.*)\\)/, `rgba($1,${opacity})`);\n    }\n    serie.style = [\n        {\n            name: 'unselected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth,\n                    dash: 1,\n                },\n            },\n        },\n        {\n            name: 'selected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth + 2,\n                    dash: 1,\n                },\n            },\n        },\n    ];\n    serie.name = spectrum.label || spectrum.id;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkU3R5bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvanNncmFwaC9hZGRTdHlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLFVBQVUsUUFBUSxDQUN0QixLQUE4QixFQUM5QixRQUFrQixFQUNsQixVQUF3QixFQUFFO0lBRTFCLElBQUksRUFBRSxLQUFLLEdBQUcsU0FBUyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNoRSxpRUFBaUU7SUFDakUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7UUFDakMsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDckU7U0FBTTtRQUNMLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxXQUFXLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDL0Q7SUFDRCxLQUFLLENBQUMsS0FBSyxHQUFHO1FBQ1o7WUFDRSxJQUFJLEVBQUUsWUFBWTtZQUNsQixLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFO29CQUNKLEtBQUs7b0JBQ0wsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLElBQUksRUFBRSxDQUFDO2lCQUNSO2FBQ0Y7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRTtvQkFDSixLQUFLO29CQUNMLEtBQUssRUFBRSxTQUFTLEdBQUcsQ0FBQztvQkFDcEIsSUFBSSxFQUFFLENBQUM7aUJBQ1I7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUNGLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQzdDLENBQUMifQ==","export const COLORS = [\n    '#FFB300',\n    '#803E75',\n    '#FF6800',\n    '#A6BDD7',\n    '#C10020',\n    '#CEA262',\n    '#817066',\n    '#007D34',\n    '#F6768E',\n    '#00538A',\n    '#FF7A5C',\n    '#53377A',\n    '#FF8E00',\n    '#B32851',\n    '#F4C800',\n    '#7F180D',\n    '#93AA00',\n    '#593315',\n    '#F13A13',\n    '#232C16',\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzZ3JhcGgvY29sb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztDQUNWLENBQUMifQ==","import { xyFilterXPositive } from 'ml-spectra-processing';\nimport { addStyle } from './addStyle';\nimport { COLORS } from './colors';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n */\nexport function getJSGraph(analyses, options = {}) {\n    const { colors = COLORS, opacities = [1], linesWidth = [1], selector = {}, normalization, xAxis = {}, yAxis = {}, } = options;\n    let series = [];\n    let xLabel = '';\n    let yLabel = '';\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)\n            continue;\n        if (!xLabel)\n            xLabel = currentData.variables.x.label;\n        if (!yLabel)\n            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        if (xAxis.logScale) {\n            serie.data = xyFilterXPositive(serie.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                ...xAxis,\n            },\n            y: {\n                label: yLabel,\n                unit: '',\n                flipped: false,\n                display: true,\n                ...yAxis,\n            },\n        },\n        series,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0SlNHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qc2dyYXBoL2dldEpTR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBdUJsQzs7R0FFRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBb0IsRUFBRSxVQUEwQixFQUFFO0lBQzNFLE1BQU0sRUFDSixNQUFNLEdBQUcsTUFBTSxFQUNmLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNmLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixRQUFRLEdBQUcsRUFBRSxFQUNiLGFBQWEsRUFDYixLQUFLLEdBQUcsRUFBRSxFQUNWLEtBQUssR0FBRyxFQUFFLEdBQ1gsR0FBRyxPQUFPLENBQUM7SUFDWixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxLQUFLLEdBQTRCLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUM7WUFDL0MsUUFBUTtZQUNSLGFBQWE7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVztZQUFFLFNBQVM7UUFDM0IsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNwRCxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUN4QixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDeEMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztTQUM3QyxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsSUFBSSxHQUFHO1lBQ1gsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDL0IsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDaEMsQ0FBQztRQUVGLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNsQixLQUFLLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QztRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDcEI7SUFDRCxPQUFPO1FBQ0wsSUFBSSxFQUFFO1lBQ0osQ0FBQyxFQUFFO2dCQUNELEtBQUssRUFBRSxNQUFNO2dCQUNiLElBQUksRUFBRSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRSxJQUFJO2dCQUNiLEdBQUcsS0FBSzthQUNUO1lBQ0QsQ0FBQyxFQUFFO2dCQUNELEtBQUssRUFBRSxNQUFNO2dCQUNiLElBQUksRUFBRSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRSxJQUFJO2dCQUNiLEdBQUcsS0FBSzthQUNUO1NBQ0Y7UUFDRCxNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUMifQ==","export function getNormalizationAnnotations(filter = {}, boundary = { y: { min: '0px', max: '2000px' } }) {\n    let { exclusions = [] } = filter;\n    let annotations = [];\n    exclusions = exclusions.filter((exclusion) => !exclusion.ignore);\n    annotations = exclusions.map((exclusion) => {\n        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//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Tm9ybWFsaXphdGlvbkFubm90YXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzZ3JhcGgvZ2V0Tm9ybWFsaXphdGlvbkFubm90YXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsU0FBNEIsRUFBRSxFQUM5QixRQUFRLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtJQUUvQyxJQUFJLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVqQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDckIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDekMsSUFBSSxVQUFVLEdBQUc7WUFDZixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRTtnQkFDUixFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDeEMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7YUFDdkM7WUFDRCxXQUFXLEVBQUUsQ0FBQztZQUNkLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQztRQUNGLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUM3QixXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLE1BQU07WUFDWixRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDakQsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7YUFDdEM7WUFDRCxXQUFXLEVBQUUsQ0FBQztZQUNkLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFO1FBQzNCLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRTtnQkFDUixFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDbkMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTthQUNsRDtZQUNELFdBQVcsRUFBRSxDQUFDO1lBQ2QsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQyxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMifQ==","function 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 * Generate a jsgraph chart format from an array of Analysis\n */\nexport function getReactPlotJSON(analyses, query, options = {}) {\n    const { xAxis: xAxisOptions = {}, yAxis: yAxisOptions = { labelSpace: 40 }, series: seriesOptions = { displayMarker: true }, dimentions = { width: 550, height: 500 }, } = options;\n    let series = [];\n    let meta = [];\n    let xAxis = null;\n    let yAxis = null;\n    for (const analysis of analyses) {\n        const spectra = analysis.getXYSpectrum(query);\n        if (!spectra)\n            continue;\n        if (spectra.meta) {\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        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    if (xAxis === null || yAxis === null) {\n        throw new Error('The axes were not defined');\n    }\n    return {\n        series,\n        axes: [xAxis, yAxis],\n        dimentions,\n        meta,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0UmVhY3RQbG90SlNPTi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWFjdFBsb3QvZ2V0UmVhY3RQbG90SlNPTi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQkEsU0FBUyxPQUFPLENBQUMsQ0FBYSxFQUFFLENBQWE7SUFDM0MsSUFBSSxJQUFJLEdBQWEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2hDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFFBQW9CLEVBQ3BCLEtBQW1CLEVBQ25CLFVBQTRCLEVBQUU7SUFFOUIsTUFBTSxFQUNKLEtBQUssRUFBRSxZQUFZLEdBQUcsRUFBRSxFQUN4QixLQUFLLEVBQUUsWUFBWSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUN4QyxNQUFNLEVBQUUsYUFBYSxHQUFHLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxFQUMvQyxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FDekMsR0FBRyxPQUFPLENBQUM7SUFDWixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxJQUFJLEdBQThCLEVBQUUsQ0FBQztJQUN6QyxJQUFJLEtBQUssR0FBcUIsSUFBSSxDQUFDO0lBQ25DLElBQUksS0FBSyxHQUFxQixJQUFJLENBQUM7SUFFbkMsS0FBSyxNQUFNLFFBQVEsSUFBSSxRQUFRLEVBQUU7UUFDL0IsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTztZQUFFLFNBQVM7UUFFdkIsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsS0FBSyxHQUFHO1lBQ04sRUFBRSxFQUFFLEdBQUc7WUFDUCxLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUNoQyxHQUFHLFlBQVk7WUFDZixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDO1FBQ0YsS0FBSyxHQUFHO1lBQ04sRUFBRSxFQUFFLEdBQUc7WUFDUCxLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUNoQyxHQUFHLFlBQVk7WUFDZixRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RSxNQUFNLEtBQUssR0FBbUI7WUFDNUIsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsSUFBSTtZQUNKLEdBQUcsYUFBYTtTQUNqQixDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNwQjtJQUVELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztLQUM5QztJQUVELE9BQU87UUFDTCxNQUFNO1FBQ04sSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztRQUNwQixVQUFVO1FBQ1YsSUFBSTtLQUNMLENBQUM7QUFDSixDQUFDIn0=","export function appendDistinctParameter(values, key, value) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            values: [],\n            count: 0,\n        };\n    }\n    if (!values[key].values.includes(value)) {\n        values[key].values.push(value);\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kRGlzdGluY3RQYXJhbWV0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9hcHBlbmREaXN0aW5jdFBhcmFtZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQXFDLEVBQ3JDLEdBQVcsRUFDWCxLQUFhO0lBRWIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDWixHQUFHO1lBQ0gsTUFBTSxFQUFFLEVBQUU7WUFDVixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7S0FDSDtJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN2QyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoQztJQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QixDQUFDIn0=","export function appendDistinctValue(values, key) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            count: 0,\n        };\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kRGlzdGluY3RWYWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2FwcGVuZERpc3RpbmN0VmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxNQUFtQyxFQUNuQyxHQUFXO0lBRVgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDWixHQUFHO1lBQ0gsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDO0tBQ0g7SUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEIsQ0FBQyJ9","import { appendDistinctParameter } from './util/appendDistinctParameter';\nimport { appendDistinctValue } from './util/appendDistinctValue';\nexport class AnalysesManager {\n    constructor() {\n        this.analyses = [];\n    }\n    addAnalysis(analysis) {\n        let index = this.getAnalysisIndex(analysis.id);\n        if (index === undefined) {\n            this.analyses.push(analysis);\n        }\n        else {\n            this.analyses[index] = analysis;\n        }\n    }\n    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    getSpectra() {\n        const spectra = [];\n        for (const analysis of this.analyses) {\n            spectra.push(...analysis.spectra);\n        }\n        return spectra;\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            if (spectrum.title) {\n                appendDistinctValue(values, spectrum.title);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the units\n     */\n    getDistinctUnits() {\n        var _a;\n        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (let key in spectrum.variables) {\n                    const units = (_a = spectrum.variables[key].units) === null || _a === void 0 ? void 0 : _a.replace(/\\s+\\[.*/, '');\n                    if (units) {\n                        appendDistinctValue(values, units);\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the labels\n     */\n    getDistinctLabels() {\n        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (let key in spectrum.variables) {\n                    appendDistinctValue(values, spectrum.variables[key].label.replace(/\\s+\\[.*/, ''));\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the dataTypes\n     */\n    getDistinctDataTypes() {\n        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.dataType) {\n                appendDistinctValue(values, spectrum.dataType);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the meta\n     */\n    getDistinctMeta() {\n        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    removeAllAnalyses() {\n        this.analyses.splice(0);\n    }\n    /**\n     * Remove the analysis from the AnalysesManager for the specified id\n     */\n    removeAnalysis(id) {\n        let index = this.getAnalysisIndex(id);\n        if (index === undefined)\n            return undefined;\n        return this.analyses.splice(index, 1);\n    }\n    /**\n     * Returns the index of the analysis in the analyses array\n     */\n    getAnalysisIndex(id) {\n        if (!id)\n            return undefined;\n        for (let i = 0; i < this.analyses.length; i++) {\n            let analysis = this.analyses[i];\n            if (analysis.id === id)\n                return i;\n        }\n        return undefined;\n    }\n    /**\n     * Checks if the ID of an analysis exists in the AnalysesManager\n     */\n    includes(id) {\n        const index = this.getAnalysisIndex(id);\n        return index === undefined ? false : !isNaN(index);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5hbHlzZXNNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0FuYWx5c2VzTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU1qRSxNQUFNLE9BQU8sZUFBZTtJQUcxQjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBa0I7UUFDbkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUI7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxVQUE4QixFQUFFO1FBQ2pELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxRQUFRLEdBQWUsRUFBRSxDQUFDO1FBQzlCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3pCO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sVUFBVTtRQUNmLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUks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","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 { airPLSBaseline, rollingAverageBaseline, iterativePolynomialBaseline, rollingBallBaseline, rollingMedianBaseline, } 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 { xDivide, xSubtract, xMultiply, xAdd, xIsMonotone, xyEnsureGrowingX, } from 'ml-spectra-processing';\nimport Stat from 'ml-stat/array';\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n    var _a;\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)\n        newSpectrum.title = spectrum.title;\n    if (spectrum.dataType)\n        newSpectrum.dataType = spectrum.dataType;\n    if (spectrum.meta)\n        newSpectrum.meta = spectrum.meta;\n    let { from = spectrum.variables.x.min, to = spectrum.variables.x.max, numberOfPoints, filters = [], exclusions = [], processing = '', } = options;\n    let { x, y } = filterX(data, { from, to });\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(/\\s*\\[.*\\]/, '')}`;\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(/\\s*\\[.*\\]/, '')}`;\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(/\\s*\\[.*\\]/, '')}`;\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    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 = (_a = newSpectrum.variables.y.label) === null || _a === void 0 ? void 0 : _a.replace(/\\s*\\[.*\\]/, '');\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 'ensuregrowing': {\n                const ans = xyEnsureGrowingX({ x, y });\n                x = ans.x;\n                y = ans.y;\n                break;\n            }\n            case '':\n            case undefined:\n                break;\n            default:\n                throw new Error(`Unknown process kind: ${filter.name}`);\n        }\n    }\n    if (!numberOfPoints) {\n        data = filterX({ x, y }, { from, to, exclusions });\n    }\n    else {\n        data = equallySpaced({ x, y }, { from, to, numberOfPoints, exclusions });\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    return newSpectrum;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Tm9ybWFsaXplZFNwZWN0cnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZ2V0Tm9ybWFsaXplZFNwZWN0cnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIscUJBQXFCLEdBQ3RCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUMvQixPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxPQUFPLE1BQU0sc0JBQXNCLENBQUM7QUFDM0MsT0FBTyxhQUFhLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixXQUFXLEVBQ1gsZ0JBQWdCLEdBQ2pCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBSWpDLE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsUUFBc0IsRUFDdEIsVUFBcUMsRUFBRTs7SUFFdkMsSUFBSSxJQUFJLEdBQUc7UUFDVCxDQUFDLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUM1QixDQUFDLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtLQUM3QixDQUFDO0lBQ0YsSUFBSSxXQUFXLEdBQWlCO1FBQzlCLFNBQVMsRUFBRTtZQUNULENBQUMsRUFBRTtnQkFDRCxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDL0IsS0FBSyxFQUFFLFFBQVEsQ0FB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","/*\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';\nexport function convertUnit(array, fromUnit, toUnit) {\n    fromUnit = normalize(fromUnit);\n    toUnit = normalize(toUnit);\n    if (fromUnit === toUnit)\n        return array;\n    try {\n        const convert = Qty.swiftConverter(fromUnit, toUnit); // Configures converter\n        return convert(array);\n    }\n    catch (e) {\n        return undefined;\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//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydFVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9jb252ZXJ0VW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFjaEMsTUFBTSxVQUFVLFdBQVcsQ0FDekIsS0FBVSxFQUNWLFFBQWdCLEVBQ2hCLE1BQWM7SUFFZCxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0IsSUFBSSxRQUFRLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXRDLElBQUk7UUFDRixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtRQUM3RSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN2QjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxTQUFTLENBQUM7S0FDbEI7QUFDSCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsSUFBWTtJQUM3QixJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9","const testRegExp = /^\\/((?:\\\\\\/|[^/])+)\\/([migyu]{0,5})?$/;\nexport function ensureRegexp(string) {\n    const parts = testRegExp.exec(string);\n    if (parts) {\n        try {\n            return new RegExp(parts[1], parts[2]);\n        }\n        catch (err) {\n            return stringToRegexp(string);\n        }\n    }\n    else {\n        return stringToRegexp(string);\n    }\n}\nfunction stringToRegexp(string, flags = 'i') {\n    return new RegExp(string.replace(/[[\\]\\\\{}()+*?.$^|]/g, function (match) {\n        return `\\\\${match}`;\n    }), flags);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5zdXJlUmVnZXhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZW5zdXJlUmVnZXhwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxHQUFHLHVDQUF1QyxDQUFDO0FBRTNELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBVztJQUN0QyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksS0FBSyxFQUFFO1FBQ1QsSUFBSTtZQUNGLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtLQUNGO1NBQU07UUFDTCxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMvQjtBQUNILENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxNQUFXLEVBQUUsS0FBSyxHQUFHLEdBQUc7SUFDOUMsT0FBTyxJQUFJLE1BQU0sQ0FDZixNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsS0FBYTtRQUMzRCxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxDQUNOLENBQUM7QUFDSixDQUFDIn0=","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport { xIsMonotone } from 'ml-spectra-processing';\nimport { convertUnit } from './convertUnit';\nexport function getConvertedVariable(variable, newUnits) {\n    const data = variable.units !== undefined && variable.units !== newUnits // would be nice if convertUnit would allow typedArray\n        ? convertUnit(Array.from(variable.data), variable.units, newUnits)\n        : variable.data;\n    return {\n        units: newUnits,\n        label: variable.label.replace(`[${variable.units || ''}]`, `[${newUnits}]`),\n        data: data || [],\n        min: data ? min(data) : undefined,\n        max: data ? max(data) : undefined,\n        isMonotone: xIsMonotone(data),\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q29udmVydGVkVmFyaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9nZXRDb252ZXJ0ZWRWYXJpYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUlwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsUUFBc0IsRUFDdEIsUUFBZ0I7SUFFaEIsTUFBTSxJQUFJLEdBQ1IsUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsc0RBQXNEO1FBQ2hILENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7UUFDbEUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDcEIsT0FBTztRQUNMLEtBQUssRUFBRSxRQUFRO1FBQ2YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLFFBQVEsR0FBRyxDQUFDO1FBQzNFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtRQUNoQixHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDakMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ2pDLFVBQVUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDO0tBQzlCLENBQUM7QUFDSixDQUFDIn0=","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 */\nexport function getXYSpectrum(spectra = [], selector = {}) {\n    if (spectra.length < 1)\n        return;\n    for (let spectrum of spectra) {\n        let variableNames = Object.keys(spectrum.variables);\n        if (!(variableNames.length > 1))\n            continue;\n        let { dataType, title, xUnits, yUnits, units, labels, xLabel, yLabel, meta, } = selector;\n        // we filter on generatl spectrum information\n        if (dataType) {\n            dataType = ensureRegexp(dataType);\n            if (!spectrum.dataType || !spectrum.dataType.match(dataType))\n                continue;\n        }\n        if (title) {\n            title = ensureRegexp(title);\n            if (!spectrum.title || !spectrum.title.match(title))\n                continue;\n        }\n        if (meta && typeof meta === 'object') {\n            if (!spectrum.meta)\n                continue;\n            for (let key in spectrum.meta) {\n                if (!spectrum.meta[key])\n                    continue;\n                let value = ensureRegexp(spectrum.meta[key]);\n                if (!spectrum.meta[key].match(value))\n                    continue;\n            }\n        }\n        if (units && !xUnits && !yUnits)\n            [yUnits, xUnits] = units.split(/\\s*vs\\s*/);\n        if (labels && !xLabel && !yLabel) {\n            [xLabel, yLabel] = labels.split(/\\s*vs\\s*/);\n        }\n        if (xLabel)\n            xLabel = ensureRegexp(xLabel);\n        if (yLabel)\n            yLabel = ensureRegexp(yLabel);\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        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}\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            }\n            else {\n                possible[key] = undefined;\n            }\n        }\n    }\n    if (label !== undefined) {\n        for (let key in possible) {\n            if (!variables[key].label.match(label)) {\n                possible[key] = undefined;\n            }\n        }\n    }\n    if (variableName !== undefined) {\n        if (possible[variableName])\n            return possible[variableName];\n        if (possible[variableName.toUpperCase()]) {\n            return possible[variableName.toUpperCase()];\n        }\n    }\n    const possibleFiltered = Object.values(possible).filter((val) => val !== undefined);\n    if (possibleFiltered.length > 0) {\n        return possibleFiltered[0];\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0WFlTcGVjdHJ1bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2dldFhZU3BlY3RydW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQzNCLFVBQStCLEVBQUUsRUFDakMsV0FBeUIsRUFBRTtJQUUzQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU87SUFFL0IsS0FBSyxJQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7UUFDNUIsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFBRSxTQUFTO1FBQzFDLElBQUksRUFDRixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxFQUNOLElBQUksR0FDTCxHQUFHLFFBQVEsQ0FBQztRQUViLDZDQUE2QztRQUM3QyxJQUFJLFFBQVEsRUFBRTtZQUNaLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQUUsU0FBUztTQUN4RTtRQUVELElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsUUFB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","import isAnyArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport { xIsMonotone } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum';\nimport { getXYSpectrum } from './util/getXYSpectrum';\n/**\n * Class allowing to store and manipulate an analysis.\n * An analysis may contain one or more spectra that can be selected\n * based on their units\n */\nexport class Analysis {\n    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     * Add a spectrum in the internal spectra variable\n     */\n    pushSpectrum(variables, options = {}) {\n        this.spectra.push(standardizeData(variables, options));\n        this.cache = {};\n    }\n    /**\n     * Retrieve a Spectrum based on x/y units\n     * @param selector.units Units separated by vs like for example \"g vs °C\"\n     * @param selector.xUnits if undefined takes the first variable\n     * @param selector.yUnits if undefined takes the second variable\n     */\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     * Retrieve a xy object\n     * @param selector.units Units separated by vs like for example \"g vs °C\"\n     * @param selector.xUnits if undefined takes the first variable\n     * @param selector.yUnits if undefined takes the second variable\n     */\n    getXY(selector = {}) {\n        let spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return {\n            x: spectrum.variables.x.data,\n            y: spectrum.variables.y.data,\n        };\n    }\n    /**\n     * Return the data object for specific x/y units with possibly some\n     * normalization options\n     * @param options.selector.xUnits // if undefined takes the first variable\n     * @param options.selector.yUnits // if undefined takes the second variable\n     */\n    getNormalizedSpectrum(options = {}) {\n        const { normalization, selector } = options;\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return getNormalizedSpectrum(spectrum, normalization);\n    }\n    /**\n     * Returns the xLabel\n     * @param selector.xUnits // if undefined takes the first variable\n     * @param selector.yUnits // if undefined takes the second variable\n     */\n    getXLabel(selector) {\n        var _a;\n        return (_a = this.getXYSpectrum(selector)) === null || _a === void 0 ? void 0 : _a.variables.x.label;\n    }\n    /**\n     * Returns the yLabel\n     * @param selector.xUnits // if undefined takes the first variable\n     * @param selector.yUnits // if undefined takes the second variable\n     */\n    getYLabel(selector) {\n        var _a;\n        return (_a = this.getXYSpectrum(selector)) === null || _a === void 0 ? void 0 : _a.variables.y.label;\n    }\n}\n/**\n * Internal function that ensure the order of x / y array\n */\nfunction standardizeData(variables, options = {}) {\n    let { meta = {}, tmp = {}, dataType = '', title = '' } = options;\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    let x = xVariable.data;\n    let reverse = x && x.length > 1 && x[0] > x[x.length - 1];\n    for (let key in variables) {\n        let variable = variables[key];\n        if (reverse)\n            variable.data = variable.data.reverse();\n        variable.label = variable.label || key;\n        variable.units =\n            variable.units ||\n                variable.label.replace(/^.*[([](?<units>.*)[)\\]].*$/, '$<units>');\n        variable.min = min(variable.data);\n        variable.max = max(variable.data);\n        variable.isMonotone = xIsMonotone(variable.data);\n    }\n    return {\n        variables,\n        title,\n        dataType,\n        meta,\n        tmp,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5hbHlzaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQW5hbHlzaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxVQUFVLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUMvQixPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUXBELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVdyRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFNbkIsWUFBbUIsVUFBMkIsRUFBRTtRQUM5QyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FDakIsU0FBdUMsRUFDdkMsVUFBMkMsRUFBRTtRQUU3QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksYUFBYSxDQUFDLFdBQXlCLEVBQUU7UUFDOUMsSUFBSSxFQUFFLEdBQUcs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","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","// 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';\nimport { Analysis } from '../Analysis';\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);\n    return analysis;\n}\nfunction addJcamp(analysis, jcamp) {\n    let converted = convert(jcamp, {\n        keepRecordsRegExp: /.*/,\n    });\n    for (let entry of converted.flatten) {\n        let currentSpectrum = entry.spectra[0];\n        // we ensure variables\n        if (!currentSpectrum.variables) {\n            const variables = {};\n            currentSpectrum.variables = variables;\n            variables.x = {\n                label: currentSpectrum.xUnits,\n                symbol: 'X',\n                data: currentSpectrum.data.x || currentSpectrum.data.X,\n            };\n            variables.y = {\n                label: currentSpectrum.yUnits,\n                symbol: 'Y',\n                data: currentSpectrum.data.y || currentSpectrum.data.Y,\n            };\n        }\n        else {\n            for (let key in currentSpectrum.variables) {\n                const variable = currentSpectrum.variables[key];\n                if (variable.label)\n                    continue;\n                variable.label = variable.name || variable.symbol || key;\n                if (variable.units && !variable.label.includes(variable.units)) {\n                    variable.label += ` [${variable.units}]`;\n                }\n            }\n        }\n        analysis.pushSpectrum(currentSpectrum.variables, {\n            dataType: entry.dataType,\n            title: entry.title,\n            meta: entry.meta,\n        });\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUpjYW1wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zyb20vZnJvbUpjYW1wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3ZDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWEsRUFBRSxPQUFPLEdBQUcsRUFBRTtJQUNuRCxJQUFJLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxRQUFrQixFQUFFLEtBQWE7SUFDakQsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUM3QixpQkFBaUIsRUFBRSxJQUFJO0tBQ3hCLENBQUMsQ0FBQztJQUVILEtBQUssSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTtRQUNuQyxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZDLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTtZQUM5QixNQUFNLFNBQVMsR0FBaUMsRUFBRSxDQUFDO1lBQ25ELGVBQWUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQ3RDLFNBQVMsQ0FBQyxDQUFDLEdBQUc7Z0JBQ1osS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNO2dCQUM3QixNQUFNLEVBQUUsR0FBRztnQkFDWCxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZELENBQUM7WUFDRixTQUFTLENBQUMsQ0FBQyxHQUFHO2dCQUNaLEtBQUssRUFBRSxlQUFlLENBQUMsTUFBTTtnQkFDN0IsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2RCxDQUFDO1NBQ0g7YUFBTTtZQUNMLEtBQUssSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLFNBQVMsRUFBRTtnQkFDekMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxRQUFRLENBQUMsS0FBSztvQkFBRSxTQUFTO2dCQUM3QixRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUM7Z0JBQ3pELElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDOUQsUUFBUSxDQUFDLEtBQUssSUFBSSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQztpQkFDMUM7YUFDRjtTQUNGO1FBRUQsUUFBUSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFO1lBQy9DLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQyJ9","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';\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}\nfunction getJcamp(spectrum, options) {\n    const { info = {}, meta = {} } = options;\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    return fromVariables(spectrum.variables, jcampOptions);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9KY2FtcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG8vdG9KY2FtcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBU2pELE1BQU0sVUFBVSxRQUFRLENBQUMsUUFBa0IsRUFBRSxVQUEyQixFQUFFO0lBQ3hFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixLQUFLLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7UUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDMUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsUUFBc0IsRUFBRSxPQUF3QjtJQUNoRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXpDLElBQUksWUFBWSxHQUFHO1FBQ2pCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsSUFBSSxFQUFFO1lBQ0osS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixHQUFHLElBQUk7U0FDUjtRQUNELElBQUksRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtLQUNwQyxDQUFDO0lBRUYsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN6RCxDQUFDIn0=","import { toJcamps } from './toJcamps';\nexport function toJcamp(analysis, options = {}) {\n    return toJcamps(analysis, options).join('\\n');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9KY2FtcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90by90b0pjYW1wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFNdEMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxRQUFrQixFQUFFLFVBQTJCLEVBQUU7SUFDdkUsT0FBTyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxDQUFDIn0=","import { getJSGraph } from './jsgraph/getJSGraph';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations';\nimport { getReactPlotJSON } from './reactPlot/getReactPlotJSON';\nexport * from './AnalysesManager';\nexport * from './Analysis';\nexport * from './from/fromJcamp';\nexport * from './to/toJcamp';\nexport * from './to/toJcamps';\nexport * from './to/toText';\nexport * from './util/getNormalizedSpectrum';\nexport const JSGraph = {\n    getJSGraph,\n    getReactPlotJSON,\n    getNormalizationAnnotations,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhFLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLDhCQUE4QixDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUNyQixVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLDJCQUEyQjtDQUM1QixDQUFDIn0=","const decoder = new TextDecoder('iso8859-1');\n\nexport function xrfParserPanalytical(blob) {\n  let text = decoder.decode(blob);\n\n  let lines = text.split(/\\r?\\n/);\n  let meta = {};\n  let headers;\n  let data = [];\n  let variables = {};\n  for (let line of lines) {\n    if (line.includes(':')) {\n      let fields = line.split(/ +: +/);\n      let value = fields.slice(1).join(':');\n      let numberValue = value.replace(/,/g, '.');\n      meta[fields[0]] = isNaN(numberValue) ? value : parseFloat(numberValue);\n    } else if (line.match(/^[A-Z]/)) {\n      // header of tables\n      headers = line.split(/\\t/);\n    } else {\n      data.push(\n        line.split(/\\t/).map((field) => parseFloat(field.replace(',', '.'))),\n      );\n    }\n  }\n  for (let i = 0; i < headers.length; i++) {\n    let id;\n    switch (i) {\n      case 0:\n        id = 'X';\n        break;\n      case 1:\n        id = 'Y';\n        break;\n      default:\n        id = String.fromCharCode(63 + i);\n    }\n    let units = headers[i].split('(')[1];\n    units = units ? units.replace(')', '') : '';\n    variables[id] = {\n      label: headers[i].replace(/ \\(.*/, ''),\n      units: units,\n      data: data.map((datum) => datum[i]),\n    };\n  }\n  return { meta, variables };\n}\n","import { Analysis } from 'common-spectrum';\nimport { xrfParserPanalytical } from 'physical-chemistry-parser';\n\nexport function fromPanalytical(blob) {\n  let analysis = new Analysis();\n  const parsed = xrfParserPanalytical(blob);\n\n  let meta = parsed.meta;\n  analysis.pushSpectrum(\n    {\n      x: parsed.variables.X,\n      y: parsed.variables.Y,\n    },\n    {\n      dataType: 'X-ray fluorescence (XRF)',\n      title: meta.SampleIdent,\n      meta: parsed.meta,\n    },\n  );\n\n  return analysis;\n}\n"],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","a","d","e","f","length","g","h","i","j","c","b","_ref","module","exports","window","median","input","isArray","TypeError","quickSelectMedian","slice","xAdd","array1","array2","isConstant","constant","Error","Number","array3","Array","xMultiply","Float64Array","xDivide","xIsMonotone","array","xCheck","sum","sumValue","mean","xPadding","options","size","value","algorithm","from","result","fromEnd","toEnd","toLowerCase","xRolling","fct","padding","newArray","subArray","buffer","push","xRollingAverage","xRollingMedian","min","arguments","undefined","_options$fromIndex","fromIndex","_options$toIndex","toIndex","isInteger","minValue","max","maxValue","xSubtract","xyCheck","data","x","y","xyEnsureGrowingX","prevX","Infinity","ansX","ansY","index","xyFilterXPositive","newX","newY","rescale","output","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","matrix","maxRows","maxColumns","maxNumSize","constructor","name","inspectData","rows","columns","maxI","Math","maxJ","line","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","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","exp","expm1","floor","fround","log","log1p","log10","log2","round","sign","sin","sinh","sqrt","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","rowOut","some","r","columnOut","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","checkNonEmpty","isEmpty","sumByRow","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","cols","variance","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","random","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","m","n","maxRow","p","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","NaN","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","s","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","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","center","Symbol","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","BaseView","MatrixTransposeView","WrapperMatrix2D","LuDecomposition","lu","pivotVector","pivotSign","t","LUcolj","kmax","LU","isSingular","col","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","isNaN","ks","cs","sn","sp","spm1","epm1","sk","ek","shift","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","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","range","indexFrom","indexTo","to","baseline","iteration","sumNegDifferences","MAX_SAFE_INTEGER","stopCriterion","cho","Cholesky","difference","map","calculateError","maxNegativeDiff","diff","corrected","error","BaselineOutput","correctedSpectrum","airPLSBaseline","spectrum","numberPoints","keys","airpls","maybeToPrecision","digits","checkArraySize","BaseRegression","new","target","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","assign","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","step","normalize","zones","NEGATIVE_INFINITY","POSITIVE_INFINITY","JSON","parse","stringify","zone","filter","currentZone","invert","exclusions","exclusion","nextExclusion","zonesWithPoints","numberOfPoints","totalSize","previous","current","unitsPerPoint","currentTotal","integral","x0","x1","slope","intercept","equallySpacedSmooth","xLength","halfStep","initialOriginalStep","lastOriginalStep","previousX","previousY","nextX","nextY","currentValue","sumAtMin","sumAtMax","getSlope","y0","y1","main","equallySpacedSlot","lastStep","start","MAX_VALUE","frontOutsideSpectra","backOutsideSpectra","currentPoints","equallySpaced","arrayXY","reverse","variant","xResult","yResult","zoneResult","processZone","getZones","currentFrom","filterX","points","currentZoneIndex","position","defaultOptions","arrayCase","cond","matrixCase","padArray","factorial","windowSize","derivative","polynomial","pad","padValue","savitzkyGolay","C","ans","J","inic","Jtranspose","Jinv","det","values","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","Stat","normed","global","factory","this","isString","isFiniteImpl","isNumber","uniq","strings","seen","item","hasOwnProperty","compareArray","properties","key","mulSafe","decimals","arg","getFractional","divSafe","den","invDen","val","QtyError","err","create","message","stack","throwIncompatibleUnits","left","right","UNITS","PI","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","scalar","numerator","denominator","unit","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","kind","units","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","replace","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","match","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","version","GC_MS_FIELDS","complexChromatogram","spectra","chromatogram","series","ms","dimension","existingGCMSFields","label","convertMSFieldToLabel","pageValue","isMSField","canonicDataLabel","convertToFloatArray","stringArray","floatArray","fastParseXYData","yFactor","deltaX","isXYdata","currentData","currentX","firstX","currentY","firstY","endLine","ascii","charCodeAt","newLine","isDifference","isLastDifference","lastDifference","isDuplicate","inComment","lastValue","isNegative","inValue","skipFirstValue","decimalPosition","duplicate","ascii2","removeCommentRegExp","peakTableSplitRegExp","parsePeakTable","isPeaktable","variables","parseXY","parseXYZ","lines","split","xFactor","logs","numberOfVariables","variable","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","gyromagneticRatio","postProcessingNMR","entriesFlat","observeFrequency","shiftOffsetVal","entry","ntuples","symbol","xUnits","toUpperCase","includes","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","yUnits","prepareSpectrum","ntuplesSeparatorRegExp","numberRegExp","Spectrum","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","dynamicTyping","withoutXY","jcamp","entries","tmpResult","children","parentsStack","ldrs","ldr","dataLabel","substring","dataValue","infos","datatable","parentEntry","info","meta","title","dataType","dataClass","xType","shiftOffsetNum","vartype","varform","page","sampleDescription","pop","flatten","creatorNtuples","owner","origin","varName","varType","varDim","minFct","maxFct","header","point","fromJSON","fromVariables","forceNtuples","jcampOptions","xLabel","yLabel","decoder","TextDecoder","xrfParserPanalytical","blob","text","decode","headers","fields","numberValue","field","id","fromCharCode","datum","fromPanalytical","analysis","Analysis","parsed","pushSpectrum","SampleIdent"],"mappings":"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"}