{"version":3,"file":"ml.js","sources":["../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/column.js","../node_modules/ml-matrix/src/views/columnSelection.js","../node_modules/ml-matrix/src/views/flipColumn.js","../node_modules/ml-matrix/src/views/flipRow.js","../node_modules/ml-matrix/src/views/row.js","../node_modules/ml-matrix/src/views/rowSelection.js","../node_modules/ml-matrix/src/views/selection.js","../node_modules/ml-matrix/src/views/sub.js","../node_modules/ml-matrix/src/views/transpose.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix1D.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/wrap/wrap.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/ml-matrix/src/determinant.js","../node_modules/ml-matrix/src/linearDependencies.js","../node_modules/ml-matrix/src/pseudoInverse.js","../node_modules/ml-matrix/src/covariance.js","../node_modules/ml-matrix/src/correlation.js","../node_modules/ml-matrix/src/dc/evd.js","../node_modules/ml-matrix/src/dc/cholesky.js","../node_modules/ml-matrix/src/dc/nipals.js","../node_modules/ml-array-sum/lib-es6/index.js","../node_modules/ml-array-mean/lib-es6/index.js","../node_modules/ml-cart/src/utils.js","../node_modules/ml-cart/src/TreeNode.js","../node_modules/ml-cart/src/DecisionTreeClassifier.js","../node_modules/ml-cart/src/DecisionTreeRegression.js","../node_modules/random-js/dist/random-js.esm.js","../node_modules/ml-random-forest/src/utils.js","../node_modules/ml-random-forest/src/RandomForestBase.js","../node_modules/ml-random-forest/src/RandomForestClassifier.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-random-forest/src/RandomForestRegression.js","../node_modules/ml-pca/src/pca.js","../node_modules/ml-distance-euclidean/lib-es6/euclidean.js","../node_modules/ml-distance-matrix/src/index.js","../node_modules/heap/lib/heap.js","../node_modules/heap/index.js","../node_modules/ml-hclust/src/Cluster.js","../node_modules/ml-hclust/src/agnes.js","../node_modules/ml-hclust/src/index.js","../node_modules/ml-nearest-vector/lib-es6/index.js","../node_modules/ml-kmeans/src/utils.js","../node_modules/ml-xsadd/lib-es6/xsadd.js","../node_modules/ml-random/lib-es6/choice.js","../node_modules/ml-random/lib-es6/index.js","../node_modules/ml-kmeans/src/initialization.js","../node_modules/ml-kmeans/src/KMeansResult.js","../node_modules/ml-kmeans/src/kmeans.js","../node_modules/ml-naivebayes/src/utils.js","../node_modules/ml-naivebayes/src/GaussianNB.js","../node_modules/ml-naivebayes/src/MultinomialNB.js","../node_modules/ml-knn/src/KDTree.js","../node_modules/ml-knn/src/index.js","../node_modules/ml-pls/src/util/utils.js","../node_modules/ml-pls/src/PLS.js","../node_modules/ml-pls/src/KOPLS.js","../node_modules/ml-confusion-matrix/src/index.js","../node_modules/ml-combinations/src/index.js","../node_modules/ml-cross-validation/src/getFolds.js","../node_modules/ml-cross-validation/src/sampleAClass.js","../node_modules/ml-cross-validation/src/index.js","../node_modules/ml-pls/src/OPLSNipals.js","../node_modules/ml-pls/src/util/tss.js","../node_modules/ml-pls/src/OPLS.js","../node_modules/ml-fnn/FeedForwardNeuralNetwork.js","../node_modules/ml-som/src/node-square.js","../node_modules/ml-som/src/node-hexagonal.js","../node_modules/ml-som/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-regression-simple-linear/src/index.js","../node_modules/ml-regression-exponential/src/index.js","../node_modules/ml-regression-power/src/index.js","../node_modules/ml-regression-multivariate-linear/src/index.js","../node_modules/ml-kernel-gaussian/gaussian-kernel.js","../node_modules/ml-kernel-polynomial/polynomial-kernel.js","../node_modules/ml-kernel-sigmoid/sigmoid-kernel.js","../node_modules/ml-kernel/src/kernels/anova-kernel.js","../node_modules/ml-kernel/src/kernels/cauchy-kernel.js","../node_modules/ml-kernel/src/kernels/exponential-kernel.js","../node_modules/ml-kernel/src/kernels/histogram-intersection-kernel.js","../node_modules/ml-kernel/src/kernels/laplacian-kernel.js","../node_modules/ml-kernel/src/kernels/multiquadratic-kernel.js","../node_modules/ml-kernel/src/kernels/rational-quadratic-kernel.js","../node_modules/ml-kernel/src/kernel.js","../node_modules/ml-regression-theil-sen/src/index.js","../node_modules/ml-regression-robust-polynomial/src/index.js","../node_modules/ml-levenberg-marquardt/src/errorCalculation.js","../node_modules/ml-levenberg-marquardt/src/step.js","../node_modules/ml-levenberg-marquardt/src/index.js","../node_modules/ml-fcnnls/src/util/selection.js","../node_modules/ml-fcnnls/src/util/sortCollectionSet.js","../node_modules/ml-fcnnls/src/cssls.js","../node_modules/ml-fcnnls/src/initialisation.js","../node_modules/ml-fcnnls/src/util/setDifference.js","../node_modules/ml-fcnnls/src/optimality.js","../node_modules/ml-fcnnls/src/fcnnls.js","../node_modules/ml-fcnnls/src/fcnnlsVector.js","../node_modules/binary-search/index.js","../node_modules/num-sort/index.js","../node_modules/ml-hash-table/src/primeFinder.js","../node_modules/ml-hash-table/src/HashTable.js","../node_modules/ml-sparse-matrix/src/index.js","../node_modules/ml-distance/src/distances/additiveSymmetric.js","../node_modules/ml-distance/src/distances/avg.js","../node_modules/ml-distance/src/distances/bhattacharyya.js","../node_modules/ml-distance/src/distances/canberra.js","../node_modules/ml-distance/src/distances/chebyshev.js","../node_modules/ml-distance/src/distances/clark.js","../node_modules/ml-distance/src/similarities/czekanowski.js","../node_modules/ml-distance/src/distances/czekanowski.js","../node_modules/ml-distance/src/distances/dice.js","../node_modules/ml-distance/src/distances/divergence.js","../node_modules/ml-distance/src/distances/fidelity.js","../node_modules/ml-distance/src/distances/gower.js","../node_modules/ml-distance/src/distances/harmonicMean.js","../node_modules/ml-distance/src/distances/hellinger.js","../node_modules/ml-distance/src/distances/innerProduct.js","../node_modules/ml-distance/src/distances/intersection.js","../node_modules/ml-distance/src/distances/jaccard.js","../node_modules/ml-distance/src/distances/jeffreys.js","../node_modules/ml-distance/src/distances/jensenDifference.js","../node_modules/ml-distance/src/distances/jensenShannon.js","../node_modules/ml-distance/src/distances/kdivergence.js","../node_modules/ml-distance/src/distances/kulczynski.js","../node_modules/ml-distance/src/distances/kullbackLeibler.js","../node_modules/ml-distance/src/distances/kumarHassebrook.js","../node_modules/ml-distance/src/distances/kumarJohnson.js","../node_modules/ml-distance/src/distances/lorentzian.js","../node_modules/ml-distance/src/distances/manhattan.js","../node_modules/ml-distance/src/distances/matusita.js","../node_modules/ml-distance/src/distances/minkowski.js","../node_modules/ml-distance/src/distances/motyka.js","../node_modules/ml-distance/src/distances/neyman.js","../node_modules/ml-distance/src/distances/pearson.js","../node_modules/ml-distance/src/distances/probabilisticSymmetric.js","../node_modules/ml-distance/src/distances/ruzicka.js","../node_modules/ml-distance/src/distances/soergel.js","../node_modules/ml-distance/src/distances/sorensen.js","../node_modules/ml-distance/src/distances/squared.js","../node_modules/ml-distance/src/distances/squaredChord.js","../node_modules/ml-distance/src/distances/taneja.js","../node_modules/ml-distance/src/similarities/tanimoto.js","../node_modules/ml-distance/src/distances/tanimoto.js","../node_modules/ml-distance/src/distances/topsoe.js","../node_modules/ml-distance/src/distances/waveHedges.js","../node_modules/ml-tree-similarity/src/createTree.js","../node_modules/ml-tree-similarity/src/getSimilarity.js","../node_modules/ml-tree-similarity/src/index.js","../node_modules/ml-distance/src/similarities/cosine.js","../node_modules/ml-distance/src/similarities/dice.js","../node_modules/ml-distance/src/similarities/intersection.js","../node_modules/ml-distance/src/similarities/jaccard.js","../node_modules/ml-distance/src/similarities/kulczynski.js","../node_modules/ml-distance/src/similarities/motyka.js","../node_modules/ml-distance/src/similarities/pearson.js","../node_modules/ml-distance/src/similarities/squaredChord.js","../node_modules/ml-performance/src/measures.js","../node_modules/ml-performance/src/index.js","../node_modules/ml-pad-array/src/index.js","../node_modules/ml-savitzky-golay/src/index.js","../node_modules/ml-bit-array/src/creator.js","../node_modules/ml-bit-array/src/index.js","../node_modules/ml-array-mode/lib-es6/index.js","../node_modules/ml-array-normed/lib-es6/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-array-variance/lib-es6/index.js","../node_modules/ml-array-standard-deviation/lib-es6/index.js","../node_modules/ml-array-xy-centroids-merge/src/index.js","../node_modules/ml-arrayxy-closestx/src/index.js","../node_modules/ml-array-xy-covariance/src/index.js","../node_modules/ml-array-xy-max-merge/src/index.js","../node_modules/ml-array-xy-max-y/src/index.js","../node_modules/ml-array-xy-sort-x/src/index.js","../node_modules/ml-arrayxy-uniquex/src/index.js","../node_modules/ml-array-xy-weighted-merge/src/index.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/getZones.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","../src/index.js"],"sourcesContent":["'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","import isArray from 'is-any-array';\n\n/**\n * Computes the maximum of the given values\n * @param {Array<number>} input\n * @return {number}\n */\n\nfunction max(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 maxValue = input[0];\n\n  for (var i = 1; i < input.length; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport default max;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the minimum of the given values\n * @param {Array<number>} input\n * @return {number}\n */\n\nfunction min(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 minValue = input[0];\n\n  for (var i = 1; i < input.length; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport default min;\n","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport isArray from 'is-any-array';\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","/**\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","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","export function inspectMatrix() {\n  const indent = ' '.repeat(2);\n  const indentData = ' '.repeat(4);\n  return `${this.constructor.name} {\n${indent}[\n${indentData}${inspectData(this, indentData)}\n${indent}]\n${indent}rows: ${this.rows}\n${indent}columns: ${this.columns}\n}`;\n}\n\nconst maxRows = 15;\nconst maxColumns = 10;\nconst maxNumSize = 8;\n\nfunction inspectData(matrix, indent) {\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)));\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${indent}`);\n}\n\nfunction formatNumber(num) {\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.substring(eIndex);\n  return exponential.substring(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","import rescale from 'ml-array-rescale';\n\nimport {\n  checkRowVector,\n  checkRowIndex,\n  checkColumnIndex,\n  checkColumnVector,\n  checkRange,\n  checkIndices,\n} from './util';\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 { inspectMatrix } from './inspect';\nimport { installMathOperations } from './mathOperations';\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  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    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    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    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    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    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    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    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    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    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    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    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    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      rescale(row, { min, max, output: row });\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      rescale(column, {\n        min: min,\n        max: max,\n        output: column,\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    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\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      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 = arrayData[0].length;\n      if (typeof nColumns !== 'number' || nColumns === 0) {\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    return this;\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    if (this.rows === 1) {\n      throw new RangeError('A matrix cannot have less than one row');\n    }\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, true));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    if (this.columns === 1) {\n      throw new RangeError('A matrix cannot have less than one column');\n    }\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 { checkColumnIndex } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n","import { checkColumnIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixColumnSelectionView extends BaseView {\r\n  constructor(matrix, columnIndices) {\r\n    columnIndices = checkColumnIndices(matrix, columnIndices);\r\n    super(matrix, matrix.rows, columnIndices.length);\r\n    this.columnIndices = columnIndices;\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\r\n  }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixFlipColumnView extends BaseView {\r\n  constructor(matrix) {\r\n    super(matrix, matrix.rows, matrix.columns);\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\r\n  }\r\n}\r\n","import BaseView from './base';\r\n\r\nexport default class MatrixFlipRowView extends BaseView {\r\n  constructor(matrix) {\r\n    super(matrix, matrix.rows, matrix.columns);\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\r\n  }\r\n}\r\n","import { checkRowIndex } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n","import { checkRowIndices } from '../util';\r\n\r\nimport BaseView from './base';\r\n\r\nexport default class MatrixRowSelectionView extends BaseView {\r\n  constructor(matrix, rowIndices) {\r\n    rowIndices = checkRowIndices(matrix, rowIndices);\r\n    super(matrix, rowIndices.length, matrix.columns);\r\n    this.rowIndices = rowIndices;\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\r\n  }\r\n}\r\n","import { checkIndices } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    let indices = checkIndices(matrix, rowIndices, columnIndices);\n    super(matrix, indices.row.length, indices.column.length);\n    this.rowIndices = indices.row;\n    this.columnIndices = indices.column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n","import { checkRange } from '../util';\n\nimport BaseView from './base';\n\nexport default class MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n","import BaseView from './base';\r\n\r\nexport default class MatrixTransposeView extends BaseView {\r\n  constructor(matrix) {\r\n    super(matrix, matrix.columns, matrix.rows);\r\n  }\r\n\r\n  set(rowIndex, columnIndex, value) {\r\n    this.matrix.set(columnIndex, rowIndex, value);\r\n    return this;\r\n  }\r\n\r\n  get(rowIndex, columnIndex) {\r\n    return this.matrix.get(columnIndex, rowIndex);\r\n  }\r\n}\r\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n","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 WrapperMatrix1D from './WrapperMatrix1D';\nimport WrapperMatrix2D from './WrapperMatrix2D';\n\nexport function wrap(array, options) {\n  if (Array.isArray(array)) {\n    if (array[0] && Array.isArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n","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    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","import Matrix from './matrix';\nimport LuDecomposition from './dc/lu';\nimport MatrixSelectionView from './views/selection';\n\nexport function determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n","import Matrix from './matrix';\nimport SingularValueDecomposition from './dc/svd';\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nexport function linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    let error = Matrix.sub(b, Abis.mmul(x))\n      .abs()\n      .max();\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n","import SVD from './dc/svd';\nimport Matrix from './matrix';\n\nexport function pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  let svdSolution = new SVD(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > threshold) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n","import Matrix from './matrix';\n\nexport function covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = Matrix.checkMatrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !Array.isArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = Matrix.checkMatrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n","import Matrix from './matrix';\n\nexport function correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = Matrix.checkMatrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !Array.isArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = Matrix.checkMatrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(i, j, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n    } else {\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n        V.set(j, i, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(j, i, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(k, j) * d[k];\n          e[k] += V.get(k, j) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(n - 1, i, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(k, i + 1) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(k, i + 1) * V.get(k, j);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(k, j, V.get(k, j) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(k, i + 1, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n    V.set(n - 1, j, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2, iter;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      iter = 0;\n      do {\n        iter = iter + 1;\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(k, i + 1);\n            V.set(k, i + 1, s * V.get(k, i) + c * h);\n            V.set(k, i, c * V.get(k, i) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(j, i);\n        V.set(j, i, V.get(j, k));\n        V.set(j, k, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = Boolean(positiveDefinite);\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n","import WrapperMatrix2D from '../wrap/WrapperMatrix2D';\nimport Matrix from '../matrix';\n\nexport default class nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (Array.isArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (!Y.isColumnVector() || Y.rows !== X.rows) {\n        throw new Error('Y must be a column vector of length X.rows');\n      }\n      u = Y;\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose()\n        .mmul(u)\n        .div(\n          u\n            .transpose()\n            .mmul(u)\n            .get(0, 0),\n        );\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(\n        w\n          .transpose()\n          .mmul(w)\n          .get(0, 0),\n      );\n\n      if (counter > 0) {\n        diff = t\n          .clone()\n          .sub(tOld)\n          .pow(2)\n          .sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose()\n          .mmul(t)\n          .div(\n            t\n              .transpose()\n              .mmul(t)\n              .get(0, 0),\n          );\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(\n          q\n            .transpose()\n            .mmul(q)\n            .get(0, 0),\n        );\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose()\n        .mmul(t)\n        .div(\n          t\n            .transpose()\n            .mmul(t)\n            .get(0, 0),\n        );\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u\n        .transpose()\n        .mmul(t)\n        .div(\n          t\n            .transpose()\n            .mmul(t)\n            .get(0, 0),\n        );\n      let yResidual = Y.clone().sub(\n        t\n          .clone()\n          .mulS(residual.get(0, 0))\n          .mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t\n        .transpose()\n        .mmul(t)\n        .sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mean of the given values\n * @param {Array<number>} input\n * @return {number}\n */\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\n/**\n * Computes the mean of the given values\n * @param {Array<number>} input\n * @return {number}\n */\n\nfunction mean(input) {\n  return sum(input) / input.length;\n}\n\nexport default mean;\n","import Matrix from 'ml-matrix';\nimport meanArray from 'ml-array-mean';\n\n/**\n * @private\n * return an array of probabilities of each class\n * @param {Array} array - contains the classes\n * @param {number} numberOfClasses\n * @return {Matrix} - rowVector of probabilities.\n */\nexport function toDiscreteDistribution(array, numberOfClasses) {\n  let counts = new Array(numberOfClasses).fill(0);\n  for (let i = 0; i < array.length; ++i) {\n    counts[array[i]] += 1 / array.length;\n  }\n\n  return Matrix.rowVector(counts);\n}\n\n/**\n * @private\n * Retrieves the impurity of array of predictions\n * @param {Array} array - predictions.\n * @return {number} Gini impurity\n */\nexport function giniImpurity(array) {\n  if (array.length === 0) {\n    return 0;\n  }\n\n  let probabilities = toDiscreteDistribution(\n    array,\n    getNumberOfClasses(array),\n  ).getRow(0);\n\n  let sum = 0.0;\n  for (let i = 0; i < probabilities.length; ++i) {\n    sum += probabilities[i] * probabilities[i];\n  }\n\n  return 1 - sum;\n}\n\n/**\n * @private\n * Return the number of classes given the array of predictions.\n * @param {Array} array - predictions.\n * @return {number} Number of classes.\n */\nexport function getNumberOfClasses(array) {\n  return array\n    .filter(function(val, i, arr) {\n      return arr.indexOf(val) === i;\n    })\n    .map((val) => val + 1)\n    .reduce((a, b) => Math.max(a, b));\n}\n\n/**\n * @private\n * Calculates the Gini Gain of an array of predictions and those predictions splitted by a feature.\n * @param {Array} array - Predictions\n * @param {object} splitted - Object with elements \"greater\" and \"lesser\" that contains an array of predictions splitted.\n * @return {number} - Gini Gain.\n */\n\nexport function giniGain(array, splitted) {\n  let splitsImpurity = 0.0;\n  let splits = ['greater', 'lesser'];\n\n  for (let i = 0; i < splits.length; ++i) {\n    let currentSplit = splitted[splits[i]];\n    splitsImpurity +=\n      (giniImpurity(currentSplit) * currentSplit.length) / array.length;\n  }\n\n  return giniImpurity(array) - splitsImpurity;\n}\n\n/**\n * @private\n * Calculates the squared error of a predictions values.\n * @param {Array} array - predictions values\n * @return {number} squared error.\n */\nexport function squaredError(array) {\n  let l = array.length;\n\n  let m = meanArray(array);\n  let error = 0.0;\n\n  for (let i = 0; i < l; ++i) {\n    let currentElement = array[i];\n    error += (currentElement - m) * (currentElement - m);\n  }\n\n  return error;\n}\n\n/**\n * @private\n * Calculates the sum of squared error of the two arrays that contains the splitted values.\n * @param {Array} array - this argument is no necessary but is used to fit with the main interface.\n * @param {object} splitted - Object with elements \"greater\" and \"lesser\" that contains an array of predictions splitted.\n * @return {number} - sum of squared errors.\n */\nexport function regressionError(array, splitted) {\n  let error = 0.0;\n  let splits = ['greater', 'lesser'];\n\n  for (let i = 0; i < splits.length; ++i) {\n    let currentSplit = splitted[splits[i]];\n    error += squaredError(currentSplit);\n  }\n  return error;\n}\n\n/**\n * @private\n * Split the training set and values from a given column of the training set if is less than a value\n * @param {Matrix} X - Training set.\n * @param {Array} y - Training values.\n * @param {number} column - Column to split.\n * @param {number} value - value to split the Training set and values.\n * @return {object} - Object that contains the splitted values.\n */\nexport function matrixSplitter(X, y, column, value) {\n  let lesserX = [];\n  let greaterX = [];\n  let lesserY = [];\n  let greaterY = [];\n\n  for (let i = 0; i < X.rows; ++i) {\n    if (X.get(i, column) < value) {\n      lesserX.push(X.getRow(i));\n      lesserY.push(y[i]);\n    } else {\n      greaterX.push(X.getRow(i));\n      greaterY.push(y[i]);\n    }\n  }\n\n  return {\n    greaterX: greaterX,\n    greaterY: greaterY,\n    lesserX: lesserX,\n    lesserY: lesserY,\n  };\n}\n\n/**\n * @private\n * Calculates the mean between two values\n * @param {number} a\n * @param {number} b\n * @return {number}\n */\nexport function mean(a, b) {\n  return (a + b) / 2;\n}\n\n/**\n * @private\n * Returns a list of tuples that contains the i-th element of each array.\n * @param {Array} a\n * @param {Array} b\n * @return {Array} list of tuples.\n */\nexport function zip(a, b) {\n  if (a.length !== b.length) {\n    throw new TypeError(\n      `Error on zip: the size of a: ${a.length} is different from b: ${b.length}`,\n    );\n  }\n\n  let ret = new Array(a.length);\n  for (let i = 0; i < a.length; ++i) {\n    ret[i] = [a[i], b[i]];\n  }\n\n  return ret;\n}\n","import Matrix from 'ml-matrix';\nimport mean from 'ml-array-mean';\n\nimport * as Utils from './utils';\n\nconst gainFunctions = {\n  gini: Utils.giniGain,\n  regression: Utils.regressionError,\n};\n\nconst splitFunctions = {\n  mean: Utils.mean,\n};\n\nexport default class TreeNode {\n  /**\n   * @private\n   * Constructor for a tree node given the options received on the main classes (DecisionTreeClassifier, DecisionTreeRegression)\n   * @param {object|TreeNode} options for loading\n   * @constructor\n   */\n  constructor(options) {\n    // options parameters\n    this.kind = options.kind;\n    this.gainFunction = options.gainFunction;\n    this.splitFunction = options.splitFunction;\n    this.minNumSamples = options.minNumSamples;\n    this.maxDepth = options.maxDepth;\n  }\n\n  /**\n   * @private\n   * Function that retrieve the best feature to make the split.\n   * @param {Matrix} XTranspose - Training set transposed\n   * @param {Array} y - labels or values (depending of the decision tree)\n   * @return {object} - return tree values, the best gain, column and the split value.\n   */\n  bestSplit(XTranspose, y) {\n    // Depending in the node tree class, we set the variables to check information gain (to classify)\n    // or error (for regression)\n\n    let bestGain = this.kind === 'classifier' ? -Infinity : Infinity;\n    let check = this.kind === 'classifier' ? (a, b) => a > b : (a, b) => a < b;\n\n    let maxColumn;\n    let maxValue;\n\n    for (let i = 0; i < XTranspose.rows; ++i) {\n      let currentFeature = XTranspose.getRow(i);\n      let splitValues = this.featureSplit(currentFeature, y);\n      for (let j = 0; j < splitValues.length; ++j) {\n        let currentSplitVal = splitValues[j];\n        let splitted = this.split(currentFeature, y, currentSplitVal);\n\n        let gain = gainFunctions[this.gainFunction](y, splitted);\n        if (check(gain, bestGain)) {\n          maxColumn = i;\n          maxValue = currentSplitVal;\n          bestGain = gain;\n        }\n      }\n    }\n\n    return {\n      maxGain: bestGain,\n      maxColumn: maxColumn,\n      maxValue: maxValue,\n    };\n  }\n\n  /**\n   * @private\n   * Makes the split of the training labels or values from the training set feature given a split value.\n   * @param {Array} x - Training set feature\n   * @param {Array} y - Training set value or label\n   * @param {number} splitValue\n   * @return {object}\n   */\n  split(x, y, splitValue) {\n    let lesser = [];\n    let greater = [];\n\n    for (let i = 0; i < x.length; ++i) {\n      if (x[i] < splitValue) {\n        lesser.push(y[i]);\n      } else {\n        greater.push(y[i]);\n      }\n    }\n\n    return {\n      greater: greater,\n      lesser: lesser,\n    };\n  }\n\n  /**\n   * @private\n   * Calculates the possible points to split over the tree given a training set feature and corresponding labels or values.\n   * @param {Array} x - Training set feature\n   * @param {Array} y - Training set value or label\n   * @return {Array} possible split values.\n   */\n  featureSplit(x, y) {\n    let splitValues = [];\n    let arr = Utils.zip(x, y);\n    arr.sort(function(a, b) {\n      return a[0] - b[0];\n    });\n\n    for (let i = 1; i < arr.length; ++i) {\n      if (arr[i - 1][1] !== arr[i][1]) {\n        splitValues.push(\n          splitFunctions[this.splitFunction](arr[i - 1][0], arr[i][0]),\n        );\n      }\n    }\n\n    return splitValues;\n  }\n\n  /**\n   * @private\n   * Calculate the predictions of a leaf tree node given the training labels or values\n   * @param {Array} y\n   */\n  calculatePrediction(y) {\n    if (this.kind === 'classifier') {\n      this.distribution = Utils.toDiscreteDistribution(\n        y,\n        Utils.getNumberOfClasses(y),\n      );\n      if (this.distribution.columns === 0) {\n        throw new TypeError('Error on calculate the prediction');\n      }\n    } else {\n      this.distribution = mean(y);\n    }\n  }\n\n  /**\n   * @private\n   * Train a node given the training set and labels, because it trains recursively, it also receive\n   * the current depth of the node, parent gain to avoid infinite recursion and boolean value to check if\n   * the training set is transposed.\n   * @param {Matrix} X - Training set (could be transposed or not given transposed).\n   * @param {Array} y - Training labels or values.\n   * @param {number} currentDepth - Current depth of the node.\n   * @param {number} parentGain - parent node gain or error.\n   */\n  train(X, y, currentDepth, parentGain) {\n    if (X.rows <= this.minNumSamples) {\n      this.calculatePrediction(y);\n      return;\n    }\n    if (parentGain === undefined) parentGain = 0.0;\n\n    let XTranspose = X.transpose();\n    let split = this.bestSplit(XTranspose, y);\n\n    this.splitValue = split.maxValue;\n    this.splitColumn = split.maxColumn;\n    this.gain = split.maxGain;\n\n    let splittedMatrix = Utils.matrixSplitter(\n      X,\n      y,\n      this.splitColumn,\n      this.splitValue,\n    );\n\n    if (\n      currentDepth < this.maxDepth &&\n      (this.gain > 0.01 && this.gain !== parentGain) &&\n      (splittedMatrix.lesserX.length > 0 && splittedMatrix.greaterX.length > 0)\n    ) {\n      this.left = new TreeNode(this);\n      this.right = new TreeNode(this);\n\n      let lesserX = new Matrix(splittedMatrix.lesserX);\n      let greaterX = new Matrix(splittedMatrix.greaterX);\n\n      this.left.train(\n        lesserX,\n        splittedMatrix.lesserY,\n        currentDepth + 1,\n        this.gain,\n      );\n      this.right.train(\n        greaterX,\n        splittedMatrix.greaterY,\n        currentDepth + 1,\n        this.gain,\n      );\n    } else {\n      this.calculatePrediction(y);\n    }\n  }\n\n  /**\n   * @private\n   * Calculates the prediction of a given element.\n   * @param {Array} row\n   * @return {number|Array} prediction\n   *          * if a node is a classifier returns an array of probabilities of each class.\n   *          * if a node is for regression returns a number with the prediction.\n   */\n  classify(row) {\n    if (this.right && this.left) {\n      if (row[this.splitColumn] < this.splitValue) {\n        return this.left.classify(row);\n      } else {\n        return this.right.classify(row);\n      }\n    }\n\n    return this.distribution;\n  }\n\n  /**\n   * @private\n   * Set the parameter of the current node and their children.\n   * @param {object} node - parameters of the current node and the children.\n   */\n  setNodeParameters(node) {\n    if (node.distribution !== undefined) {\n      this.distribution =\n        node.distribution.constructor === Array\n          ? new Matrix(node.distribution)\n          : node.distribution;\n    } else {\n      this.distribution = undefined;\n      this.splitValue = node.splitValue;\n      this.splitColumn = node.splitColumn;\n      this.gain = node.gain;\n\n      this.left = new TreeNode(this);\n      this.right = new TreeNode(this);\n\n      if (node.left !== {}) {\n        this.left.setNodeParameters(node.left);\n      }\n      if (node.right !== {}) {\n        this.right.setNodeParameters(node.right);\n      }\n    }\n  }\n}\n","import Matrix from 'ml-matrix';\n\nimport Tree from './TreeNode';\n\nconst defaultOptions = {\n  gainFunction: 'gini',\n  splitFunction: 'mean',\n  minNumSamples: 3,\n  maxDepth: Infinity,\n};\n\nexport class DecisionTreeClassifier {\n  /**\n   * Create new Decision Tree Classifier with CART implementation with the given options\n   * @param {object} options\n   * @param {string} [options.gainFunction=\"gini\"] - gain function to get the best split, \"gini\" the only one supported.\n   * @param {string} [options.splitFunction=\"mean\"] - given two integers from a split feature, get the value to split, \"mean\" the only one supported.\n   * @param {number} [options.minNumSamples=3] - minimum number of samples to create a leaf node to decide a class.\n   * @param {number} [options.maxDepth=Infinity] - Max depth of the tree.\n   * @param {object} model - for load purposes.\n   * @constructor\n   */\n  constructor(options, model) {\n    if (options === true) {\n      this.options = model.options;\n      this.root = new Tree(model.options);\n      this.root.setNodeParameters(model.root);\n    } else {\n      this.options = Object.assign({}, defaultOptions, options);\n      this.options.kind = 'classifier';\n    }\n  }\n\n  /**\n   * Train the decision tree with the given training set and labels.\n   * @param {Matrix|MatrixTransposeView|Array} trainingSet\n   * @param {Array} trainingLabels\n   */\n  train(trainingSet, trainingLabels) {\n    this.root = new Tree(this.options);\n    trainingSet = Matrix.checkMatrix(trainingSet);\n    this.root.train(trainingSet, trainingLabels, 0, null);\n  }\n\n  /**\n   * Predicts the output given the matrix to predict.\n   * @param {Matrix|MatrixTransposeView|Array} toPredict\n   * @return {Array} predictions\n   */\n  predict(toPredict) {\n    toPredict = Matrix.checkMatrix(toPredict);\n    let predictions = new Array(toPredict.rows);\n\n    for (let i = 0; i < toPredict.rows; ++i) {\n      predictions[i] = this.root\n        .classify(toPredict.getRow(i))\n        .maxRowIndex(0)[1];\n    }\n\n    return predictions;\n  }\n\n  /**\n   * Export the current model to JSON.\n   * @return {object} - Current model.\n   */\n  toJSON() {\n    return {\n      options: this.options,\n      root: this.root,\n      name: 'DTClassifier',\n    };\n  }\n\n  /**\n   * Load a Decision tree classifier with the given model.\n   * @param {object} model\n   * @return {DecisionTreeClassifier}\n   */\n  static load(model) {\n    if (model.name !== 'DTClassifier') {\n      throw new RangeError(`Invalid model: ${model.name}`);\n    }\n\n    return new DecisionTreeClassifier(true, model);\n  }\n}\n","import Matrix from 'ml-matrix';\n\nimport Tree from './TreeNode';\n\nconst defaultOptions = {\n  gainFunction: 'regression',\n  splitFunction: 'mean',\n  minNumSamples: 3,\n  maxDepth: Infinity,\n};\n\nexport class DecisionTreeRegression {\n  /**\n   * Create new Decision Tree Regression with CART implementation with the given options.\n   * @param {object} options\n   * @param {string} [options.gainFunction=\"regression\"] - gain function to get the best split, \"regression\" the only one supported.\n   * @param {string} [options.splitFunction=\"mean\"] - given two integers from a split feature, get the value to split, \"mean\" the only one supported.\n   * @param {number} [options.minNumSamples=3] - minimum number of samples to create a leaf node to decide a class.\n   * @param {number} [options.maxDepth=Infinity] - Max depth of the tree.\n   * @param {object} model - for load purposes.\n   */\n  constructor(options, model) {\n    if (options === true) {\n      this.options = model.options;\n      this.root = new Tree(model.options);\n      this.root.setNodeParameters(model.root);\n    } else {\n      this.options = Object.assign({}, defaultOptions, options);\n      this.options.kind = 'regression';\n    }\n  }\n\n  /**\n   * Train the decision tree with the given training set and values.\n   * @param {Matrix|MatrixTransposeView|Array} trainingSet\n   * @param {Array} trainingValues\n   */\n  train(trainingSet, trainingValues) {\n    this.root = new Tree(this.options);\n\n    if (\n      typeof trainingSet[0] !== 'undefined' &&\n      trainingSet[0].length === undefined\n    ) {\n      trainingSet = Matrix.columnVector(trainingSet);\n    } else {\n      trainingSet = Matrix.checkMatrix(trainingSet);\n    }\n    this.root.train(trainingSet, trainingValues, 0);\n  }\n\n  /**\n   * Predicts the values given the matrix to predict.\n   * @param {Matrix|MatrixTransposeView|Array} toPredict\n   * @return {Array} predictions\n   */\n  predict(toPredict) {\n    if (\n      typeof toPredict[0] !== 'undefined' &&\n      toPredict[0].length === undefined\n    ) {\n      toPredict = Matrix.columnVector(toPredict);\n    }\n    toPredict = Matrix.checkMatrix(toPredict);\n\n    let predictions = new Array(toPredict.rows);\n    for (let i = 0; i < toPredict.rows; ++i) {\n      predictions[i] = this.root.classify(toPredict.getRow(i));\n    }\n\n    return predictions;\n  }\n\n  /**\n   * Export the current model to JSON.\n   * @return {object} - Current model.\n   */\n  toJSON() {\n    return {\n      options: this.options,\n      root: this.root,\n      name: 'DTRegression',\n    };\n  }\n\n  /**\n   * Load a Decision tree regression with the given model.\n   * @param {object} model\n   * @return {DecisionTreeRegression}\n   */\n  static load(model) {\n    if (model.name !== 'DTRegression') {\n      throw new RangeError(`Invalid model:${model.name}`);\n    }\n\n    return new DecisionTreeRegression(true, model);\n  }\n}\n","const SMALLEST_UNSAFE_INTEGER = 0x20000000000000;\r\nconst LARGEST_SAFE_INTEGER = SMALLEST_UNSAFE_INTEGER - 1;\r\nconst UINT32_MAX = -1 >>> 0;\r\nconst UINT32_SIZE = UINT32_MAX + 1;\r\nconst INT32_SIZE = UINT32_SIZE / 2;\r\nconst INT32_MAX = INT32_SIZE - 1;\r\nconst UINT21_SIZE = 1 << 21;\r\nconst UINT21_MAX = UINT21_SIZE - 1;\n\n/**\r\n * Returns a value within [-0x80000000, 0x7fffffff]\r\n */\r\nfunction int32(engine) {\r\n    return engine.next() | 0;\r\n}\n\nfunction add(distribution, addend) {\r\n    if (addend === 0) {\r\n        return distribution;\r\n    }\r\n    else {\r\n        return engine => distribution(engine) + addend;\r\n    }\r\n}\n\n/**\r\n * Returns a value within [-0x20000000000000, 0x1fffffffffffff]\r\n */\r\nfunction int53(engine) {\r\n    const high = engine.next() | 0;\r\n    const low = engine.next() >>> 0;\r\n    return ((high & UINT21_MAX) * UINT32_SIZE +\r\n        low +\r\n        (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0));\r\n}\n\n/**\r\n * Returns a value within [-0x20000000000000, 0x20000000000000]\r\n */\r\nfunction int53Full(engine) {\r\n    while (true) {\r\n        const high = engine.next() | 0;\r\n        if (high & 0x400000) {\r\n            if ((high & 0x7fffff) === 0x400000 && (engine.next() | 0) === 0) {\r\n                return SMALLEST_UNSAFE_INTEGER;\r\n            }\r\n        }\r\n        else {\r\n            const low = engine.next() >>> 0;\r\n            return ((high & UINT21_MAX) * UINT32_SIZE +\r\n                low +\r\n                (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0));\r\n        }\r\n    }\r\n}\n\n/**\r\n * Returns a value within [0, 0xffffffff]\r\n */\r\nfunction uint32(engine) {\r\n    return engine.next() >>> 0;\r\n}\n\n/**\r\n * Returns a value within [0, 0x1fffffffffffff]\r\n */\r\nfunction uint53(engine) {\r\n    const high = engine.next() & UINT21_MAX;\r\n    const low = engine.next() >>> 0;\r\n    return high * UINT32_SIZE + low;\r\n}\n\n/**\r\n * Returns a value within [0, 0x20000000000000]\r\n */\r\nfunction uint53Full(engine) {\r\n    while (true) {\r\n        const high = engine.next() | 0;\r\n        if (high & UINT21_SIZE) {\r\n            if ((high & UINT21_MAX) === 0 && (engine.next() | 0) === 0) {\r\n                return SMALLEST_UNSAFE_INTEGER;\r\n            }\r\n        }\r\n        else {\r\n            const low = engine.next() >>> 0;\r\n            return (high & UINT21_MAX) * UINT32_SIZE + low;\r\n        }\r\n    }\r\n}\n\nfunction isPowerOfTwoMinusOne(value) {\r\n    return ((value + 1) & value) === 0;\r\n}\r\nfunction bitmask(masking) {\r\n    return (engine) => engine.next() & masking;\r\n}\r\nfunction downscaleToLoopCheckedRange(range) {\r\n    const extendedRange = range + 1;\r\n    const maximum = extendedRange * Math.floor(UINT32_SIZE / extendedRange);\r\n    return engine => {\r\n        let value = 0;\r\n        do {\r\n            value = engine.next() >>> 0;\r\n        } while (value >= maximum);\r\n        return value % extendedRange;\r\n    };\r\n}\r\nfunction downscaleToRange(range) {\r\n    if (isPowerOfTwoMinusOne(range)) {\r\n        return bitmask(range);\r\n    }\r\n    else {\r\n        return downscaleToLoopCheckedRange(range);\r\n    }\r\n}\r\nfunction isEvenlyDivisibleByMaxInt32(value) {\r\n    return (value | 0) === 0;\r\n}\r\nfunction upscaleWithHighMasking(masking) {\r\n    return engine => {\r\n        const high = engine.next() & masking;\r\n        const low = engine.next() >>> 0;\r\n        return high * UINT32_SIZE + low;\r\n    };\r\n}\r\nfunction upscaleToLoopCheckedRange(extendedRange) {\r\n    const maximum = extendedRange * Math.floor(SMALLEST_UNSAFE_INTEGER / extendedRange);\r\n    return engine => {\r\n        let ret = 0;\r\n        do {\r\n            const high = engine.next() & UINT21_MAX;\r\n            const low = engine.next() >>> 0;\r\n            ret = high * UINT32_SIZE + low;\r\n        } while (ret >= maximum);\r\n        return ret % extendedRange;\r\n    };\r\n}\r\nfunction upscaleWithinU53(range) {\r\n    const extendedRange = range + 1;\r\n    if (isEvenlyDivisibleByMaxInt32(extendedRange)) {\r\n        const highRange = ((extendedRange / UINT32_SIZE) | 0) - 1;\r\n        if (isPowerOfTwoMinusOne(highRange)) {\r\n            return upscaleWithHighMasking(highRange);\r\n        }\r\n    }\r\n    return upscaleToLoopCheckedRange(extendedRange);\r\n}\r\nfunction upscaleWithinI53AndLoopCheck(min, max) {\r\n    return engine => {\r\n        let ret = 0;\r\n        do {\r\n            const high = engine.next() | 0;\r\n            const low = engine.next() >>> 0;\r\n            ret =\r\n                (high & UINT21_MAX) * UINT32_SIZE +\r\n                    low +\r\n                    (high & UINT21_SIZE ? -SMALLEST_UNSAFE_INTEGER : 0);\r\n        } while (ret < min || ret > max);\r\n        return ret;\r\n    };\r\n}\r\n/**\r\n * Returns a Distribution to return a value within [min, max]\r\n * @param min The minimum integer value, inclusive. No less than -0x20000000000000.\r\n * @param max The maximum integer value, inclusive. No greater than 0x20000000000000.\r\n */\r\nfunction integer(min, max) {\r\n    min = Math.floor(min);\r\n    max = Math.floor(max);\r\n    if (min < -SMALLEST_UNSAFE_INTEGER || !isFinite(min)) {\r\n        throw new RangeError(`Expected min to be at least ${-SMALLEST_UNSAFE_INTEGER}`);\r\n    }\r\n    else if (max > SMALLEST_UNSAFE_INTEGER || !isFinite(max)) {\r\n        throw new RangeError(`Expected max to be at most ${SMALLEST_UNSAFE_INTEGER}`);\r\n    }\r\n    const range = max - min;\r\n    if (range <= 0 || !isFinite(range)) {\r\n        return () => min;\r\n    }\r\n    else if (range === UINT32_MAX) {\r\n        if (min === 0) {\r\n            return uint32;\r\n        }\r\n        else {\r\n            return add(int32, min + INT32_SIZE);\r\n        }\r\n    }\r\n    else if (range < UINT32_MAX) {\r\n        return add(downscaleToRange(range), min);\r\n    }\r\n    else if (range === LARGEST_SAFE_INTEGER) {\r\n        return add(uint53, min);\r\n    }\r\n    else if (range < LARGEST_SAFE_INTEGER) {\r\n        return add(upscaleWithinU53(range), min);\r\n    }\r\n    else if (max - 1 - min === LARGEST_SAFE_INTEGER) {\r\n        return add(uint53Full, min);\r\n    }\r\n    else if (min === -SMALLEST_UNSAFE_INTEGER &&\r\n        max === SMALLEST_UNSAFE_INTEGER) {\r\n        return int53Full;\r\n    }\r\n    else if (min === -SMALLEST_UNSAFE_INTEGER && max === LARGEST_SAFE_INTEGER) {\r\n        return int53;\r\n    }\r\n    else if (min === -LARGEST_SAFE_INTEGER && max === SMALLEST_UNSAFE_INTEGER) {\r\n        return add(int53, 1);\r\n    }\r\n    else if (max === SMALLEST_UNSAFE_INTEGER) {\r\n        return add(upscaleWithinI53AndLoopCheck(min - 1, max - 1), 1);\r\n    }\r\n    else {\r\n        return upscaleWithinI53AndLoopCheck(min, max);\r\n    }\r\n}\n\nfunction isLeastBitTrue(engine) {\r\n    return (engine.next() & 1) === 1;\r\n}\r\nfunction lessThan(distribution, value) {\r\n    return engine => distribution(engine) < value;\r\n}\r\nfunction probability(percentage) {\r\n    if (percentage <= 0) {\r\n        return () => false;\r\n    }\r\n    else if (percentage >= 1) {\r\n        return () => true;\r\n    }\r\n    else {\r\n        const scaled = percentage * UINT32_SIZE;\r\n        if (scaled % 1 === 0) {\r\n            return lessThan(int32, (scaled - INT32_SIZE) | 0);\r\n        }\r\n        else {\r\n            return lessThan(uint53, Math.round(percentage * SMALLEST_UNSAFE_INTEGER));\r\n        }\r\n    }\r\n}\r\nfunction bool(numerator, denominator) {\r\n    if (denominator == null) {\r\n        if (numerator == null) {\r\n            return isLeastBitTrue;\r\n        }\r\n        return probability(numerator);\r\n    }\r\n    else {\r\n        if (numerator <= 0) {\r\n            return () => false;\r\n        }\r\n        else if (numerator >= denominator) {\r\n            return () => true;\r\n        }\r\n        return lessThan(integer(0, denominator - 1), numerator);\r\n    }\r\n}\n\n/**\r\n * Returns a Distribution that returns a random `Date` within the inclusive\r\n * range of [`start`, `end`].\r\n * @param start The minimum `Date`\r\n * @param end The maximum `Date`\r\n */\r\nfunction date(start, end) {\r\n    const distribution = integer(+start, +end);\r\n    return engine => new Date(distribution(engine));\r\n}\n\n/**\r\n * Returns a Distribution to return a value within [1, sideCount]\r\n * @param sideCount The number of sides of the die\r\n */\r\nfunction die(sideCount) {\r\n    return integer(1, sideCount);\r\n}\n\n/**\r\n * Returns a distribution that returns an array of length `dieCount` of values\r\n * within [1, `sideCount`]\r\n * @param sideCount The number of sides of each die\r\n * @param dieCount The number of dice\r\n */\r\nfunction dice(sideCount, dieCount) {\r\n    const distribution = die(sideCount);\r\n    return engine => {\r\n        const result = [];\r\n        for (let i = 0; i < dieCount; ++i) {\r\n            result.push(distribution(engine));\r\n        }\r\n        return result;\r\n    };\r\n}\n\n// tslint:disable:unified-signatures\r\n// has 2**x chars, for faster uniform distribution\r\nconst DEFAULT_STRING_POOL = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-\";\r\nfunction string(pool = DEFAULT_STRING_POOL) {\r\n    const poolLength = pool.length;\r\n    if (!poolLength) {\r\n        throw new Error(\"Expected pool not to be an empty string\");\r\n    }\r\n    const distribution = integer(0, poolLength - 1);\r\n    return (engine, length) => {\r\n        let result = \"\";\r\n        for (let i = 0; i < length; ++i) {\r\n            const j = distribution(engine);\r\n            result += pool.charAt(j);\r\n        }\r\n        return result;\r\n    };\r\n}\n\nconst LOWER_HEX_POOL = \"0123456789abcdef\";\r\nconst lowerHex = string(LOWER_HEX_POOL);\r\nconst upperHex = string(LOWER_HEX_POOL.toUpperCase());\r\n/**\r\n * Returns a Distribution that returns a random string comprised of numbers\r\n * or the characters `abcdef` (or `ABCDEF`) of length `length`.\r\n * @param length Length of the result string\r\n * @param uppercase Whether the string should use `ABCDEF` instead of `abcdef`\r\n */\r\nfunction hex(uppercase) {\r\n    if (uppercase) {\r\n        return upperHex;\r\n    }\r\n    else {\r\n        return lowerHex;\r\n    }\r\n}\n\nfunction convertSliceArgument(value, length) {\r\n    if (value < 0) {\r\n        return Math.max(value + length, 0);\r\n    }\r\n    else {\r\n        return Math.min(value, length);\r\n    }\r\n}\n\nfunction toInteger(value) {\r\n    const num = +value;\r\n    if (num < 0) {\r\n        return Math.ceil(num);\r\n    }\r\n    else {\r\n        return Math.floor(num);\r\n    }\r\n}\n\n/**\r\n * Returns a random value within the provided `source` within the sliced\r\n * bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\nfunction pick(engine, source, begin, end) {\r\n    const length = source.length;\r\n    if (length === 0) {\r\n        throw new RangeError(\"Cannot pick from an empty array\");\r\n    }\r\n    const start = begin == null ? 0 : convertSliceArgument(toInteger(begin), length);\r\n    const finish = end === void 0 ? length : convertSliceArgument(toInteger(end), length);\r\n    if (start >= finish) {\r\n        throw new RangeError(`Cannot pick between bounds ${start} and ${finish}`);\r\n    }\r\n    const distribution = integer(start, finish - 1);\r\n    return source[distribution(engine)];\r\n}\n\nfunction multiply(distribution, multiplier) {\r\n    if (multiplier === 1) {\r\n        return distribution;\r\n    }\r\n    else if (multiplier === 0) {\r\n        return () => 0;\r\n    }\r\n    else {\r\n        return engine => distribution(engine) * multiplier;\r\n    }\r\n}\n\n/**\r\n * Returns a floating-point value within [0.0, 1.0)\r\n */\r\nfunction realZeroToOneExclusive(engine) {\r\n    return uint53(engine) / SMALLEST_UNSAFE_INTEGER;\r\n}\n\n/**\r\n * Returns a floating-point value within [0.0, 1.0]\r\n */\r\nfunction realZeroToOneInclusive(engine) {\r\n    return uint53Full(engine) / SMALLEST_UNSAFE_INTEGER;\r\n}\n\n/**\r\n * Returns a floating-point value within [min, max) or [min, max]\r\n * @param min The minimum floating-point value, inclusive.\r\n * @param max The maximum floating-point value.\r\n * @param inclusive If true, `max` will be inclusive.\r\n */\r\nfunction real(min, max, inclusive = false) {\r\n    if (!isFinite(min)) {\r\n        throw new RangeError(\"Expected min to be a finite number\");\r\n    }\r\n    else if (!isFinite(max)) {\r\n        throw new RangeError(\"Expected max to be a finite number\");\r\n    }\r\n    return add(multiply(inclusive ? realZeroToOneInclusive : realZeroToOneExclusive, max - min), min);\r\n}\n\nconst sliceArray = Array.prototype.slice;\n\n/**\r\n * Shuffles an array in-place\r\n * @param engine The Engine to use when choosing random values\r\n * @param array The array to shuffle\r\n * @param downTo minimum index to shuffle. Only used internally.\r\n */\r\nfunction shuffle(engine, array, downTo = 0) {\r\n    const length = array.length;\r\n    if (length) {\r\n        for (let i = (length - 1) >>> 0; i > downTo; --i) {\r\n            const distribution = integer(0, i);\r\n            const j = distribution(engine);\r\n            if (i !== j) {\r\n                const tmp = array[i];\r\n                array[i] = array[j];\r\n                array[j] = tmp;\r\n            }\r\n        }\r\n    }\r\n    return array;\r\n}\n\n/**\r\n * From the population array, produce an array with sampleSize elements that\r\n * are randomly chosen without repeats.\r\n * @param engine The Engine to use when choosing random values\r\n * @param population An array that has items to choose a sample from\r\n * @param sampleSize The size of the result array\r\n */\r\nfunction sample(engine, population, sampleSize) {\r\n    if (sampleSize < 0 ||\r\n        sampleSize > population.length ||\r\n        !isFinite(sampleSize)) {\r\n        throw new RangeError(\"Expected sampleSize to be within 0 and the length of the population\");\r\n    }\r\n    if (sampleSize === 0) {\r\n        return [];\r\n    }\r\n    const clone = sliceArray.call(population);\r\n    const length = clone.length;\r\n    if (length === sampleSize) {\r\n        return shuffle(engine, clone, 0);\r\n    }\r\n    const tailLength = length - sampleSize;\r\n    return shuffle(engine, clone, tailLength - 1).slice(tailLength);\r\n}\n\nconst stringRepeat = (() => {\r\n    try {\r\n        if (\"x\".repeat(3) === \"xxx\") {\r\n            return (pattern, count) => pattern.repeat(count);\r\n        }\r\n    }\r\n    catch (_) {\r\n        // nothing to do here\r\n    }\r\n    return (pattern, count) => {\r\n        let result = \"\";\r\n        while (count > 0) {\r\n            if (count & 1) {\r\n                result += pattern;\r\n            }\r\n            count >>= 1;\r\n            pattern += pattern;\r\n        }\r\n        return result;\r\n    };\r\n})();\n\nfunction zeroPad(text, zeroCount) {\r\n    return stringRepeat(\"0\", zeroCount - text.length) + text;\r\n}\r\n/**\r\n * Returns a Universally Unique Identifier Version 4.\r\n *\r\n * See http://en.wikipedia.org/wiki/Universally_unique_identifier\r\n */\r\nfunction uuid4(engine) {\r\n    const a = engine.next() >>> 0;\r\n    const b = engine.next() | 0;\r\n    const c = engine.next() | 0;\r\n    const d = engine.next() >>> 0;\r\n    return (zeroPad(a.toString(16), 8) +\r\n        \"-\" +\r\n        zeroPad((b & 0xffff).toString(16), 4) +\r\n        \"-\" +\r\n        zeroPad((((b >> 4) & 0x0fff) | 0x4000).toString(16), 4) +\r\n        \"-\" +\r\n        zeroPad(((c & 0x3fff) | 0x8000).toString(16), 4) +\r\n        \"-\" +\r\n        zeroPad(((c >> 4) & 0xffff).toString(16), 4) +\r\n        zeroPad(d.toString(16), 8));\r\n}\n\n/**\r\n * An int32-producing Engine that uses `Math.random()`\r\n */\r\nconst nativeMath = {\r\n    next() {\r\n        return (Math.random() * UINT32_SIZE) | 0;\r\n    }\r\n};\n\n// tslint:disable:unified-signatures\r\n/**\r\n * A wrapper around an Engine that provides easy-to-use methods for\r\n * producing values based on known distributions\r\n */\r\nclass Random {\r\n    /**\r\n     * Creates a new Random wrapper\r\n     * @param engine The engine to use (defaults to a `Math.random`-based implementation)\r\n     */\r\n    constructor(engine = nativeMath) {\r\n        this.engine = engine;\r\n    }\r\n    /**\r\n     * Returns a value within [-0x80000000, 0x7fffffff]\r\n     */\r\n    int32() {\r\n        return int32(this.engine);\r\n    }\r\n    /**\r\n     * Returns a value within [0, 0xffffffff]\r\n     */\r\n    uint32() {\r\n        return uint32(this.engine);\r\n    }\r\n    /**\r\n     * Returns a value within [0, 0x1fffffffffffff]\r\n     */\r\n    uint53() {\r\n        return uint53(this.engine);\r\n    }\r\n    /**\r\n     * Returns a value within [0, 0x20000000000000]\r\n     */\r\n    uint53Full() {\r\n        return uint53Full(this.engine);\r\n    }\r\n    /**\r\n     * Returns a value within [-0x20000000000000, 0x1fffffffffffff]\r\n     */\r\n    int53() {\r\n        return int53(this.engine);\r\n    }\r\n    /**\r\n     * Returns a value within [-0x20000000000000, 0x20000000000000]\r\n     */\r\n    int53Full() {\r\n        return int53Full(this.engine);\r\n    }\r\n    /**\r\n     * Returns a value within [min, max]\r\n     * @param min The minimum integer value, inclusive. No less than -0x20000000000000.\r\n     * @param max The maximum integer value, inclusive. No greater than 0x20000000000000.\r\n     */\r\n    integer(min, max) {\r\n        return integer(min, max)(this.engine);\r\n    }\r\n    /**\r\n     * Returns a floating-point value within [0.0, 1.0]\r\n     */\r\n    realZeroToOneInclusive() {\r\n        return realZeroToOneInclusive(this.engine);\r\n    }\r\n    /**\r\n     * Returns a floating-point value within [0.0, 1.0)\r\n     */\r\n    realZeroToOneExclusive() {\r\n        return realZeroToOneExclusive(this.engine);\r\n    }\r\n    /**\r\n     * Returns a floating-point value within [min, max) or [min, max]\r\n     * @param min The minimum floating-point value, inclusive.\r\n     * @param max The maximum floating-point value.\r\n     * @param inclusive If true, `max` will be inclusive.\r\n     */\r\n    real(min, max, inclusive = false) {\r\n        return real(min, max, inclusive)(this.engine);\r\n    }\r\n    bool(numerator, denominator) {\r\n        return bool(numerator, denominator)(this.engine);\r\n    }\r\n    /**\r\n     * Return a random value within the provided `source` within the sliced\r\n     * bounds of `begin` and `end`.\r\n     * @param source an array of items to pick from\r\n     * @param begin the beginning slice index (defaults to `0`)\r\n     * @param end the ending slice index (defaults to `source.length`)\r\n     */\r\n    pick(source, begin, end) {\r\n        return pick(this.engine, source, begin, end);\r\n    }\r\n    /**\r\n     * Shuffles an array in-place\r\n     * @param array The array to shuffle\r\n     */\r\n    shuffle(array) {\r\n        return shuffle(this.engine, array);\r\n    }\r\n    /**\r\n     * From the population array, returns an array with sampleSize elements that\r\n     * are randomly chosen without repeats.\r\n     * @param population An array that has items to choose a sample from\r\n     * @param sampleSize The size of the result array\r\n     */\r\n    sample(population, sampleSize) {\r\n        return sample(this.engine, population, sampleSize);\r\n    }\r\n    /**\r\n     * Returns a value within [1, sideCount]\r\n     * @param sideCount The number of sides of the die\r\n     */\r\n    die(sideCount) {\r\n        return die(sideCount)(this.engine);\r\n    }\r\n    /**\r\n     * Returns an array of length `dieCount` of values within [1, sideCount]\r\n     * @param sideCount The number of sides of each die\r\n     * @param dieCount The number of dice\r\n     */\r\n    dice(sideCount, dieCount) {\r\n        return dice(sideCount, dieCount)(this.engine);\r\n    }\r\n    /**\r\n     * Returns a Universally Unique Identifier Version 4.\r\n     *\r\n     * See http://en.wikipedia.org/wiki/Universally_unique_identifier\r\n     */\r\n    uuid4() {\r\n        return uuid4(this.engine);\r\n    }\r\n    string(length, pool) {\r\n        return string(pool)(this.engine, length);\r\n    }\r\n    /**\r\n     * Returns a random string comprised of numbers or the characters `abcdef`\r\n     * (or `ABCDEF`) of length `length`.\r\n     * @param length Length of the result string\r\n     * @param uppercase Whether the string should use `ABCDEF` instead of `abcdef`\r\n     */\r\n    hex(length, uppercase) {\r\n        return hex(uppercase)(this.engine, length);\r\n    }\r\n    /**\r\n     * Returns a random `Date` within the inclusive range of [`start`, `end`].\r\n     * @param start The minimum `Date`\r\n     * @param end The maximum `Date`\r\n     */\r\n    date(start, end) {\r\n        return date(start, end)(this.engine);\r\n    }\r\n}\n\n/**\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array\r\n */\r\nconst I32Array = (() => {\r\n    try {\r\n        const buffer = new ArrayBuffer(4);\r\n        const view = new Int32Array(buffer);\r\n        view[0] = INT32_SIZE;\r\n        if (view[0] === -INT32_SIZE) {\r\n            return Int32Array;\r\n        }\r\n    }\r\n    catch (_) {\r\n        // nothing to do here\r\n    }\r\n    return Array;\r\n})();\n\nlet data = null;\r\nconst COUNT = 128;\r\nlet index = COUNT;\r\n/**\r\n * An Engine that relies on the globally-available `crypto.getRandomValues`,\r\n * which is typically available in modern browsers.\r\n *\r\n * See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\r\n *\r\n * If unavailable or otherwise non-functioning, then `browserCrypto` will\r\n * likely `throw` on the first call to `next()`.\r\n */\r\nconst browserCrypto = {\r\n    next() {\r\n        if (index >= COUNT) {\r\n            if (data === null) {\r\n                data = new I32Array(COUNT);\r\n            }\r\n            crypto.getRandomValues(data);\r\n            index = 0;\r\n        }\r\n        return data[index++] | 0;\r\n    }\r\n};\n\n/**\r\n * Returns an array of random int32 values, based on current time\r\n * and a random number engine\r\n *\r\n * @param engine an Engine to pull random values from, default `nativeMath`\r\n * @param length the length of the Array, minimum 1, default 16\r\n */\r\nfunction createEntropy(engine = nativeMath, length = 16) {\r\n    const array = [];\r\n    array.push(new Date().getTime() | 0);\r\n    for (let i = 1; i < length; ++i) {\r\n        array[i] = engine.next() | 0;\r\n    }\r\n    return array;\r\n}\n\n/**\r\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\r\n */\r\nconst imul = (() => {\r\n    try {\r\n        if (Math.imul(UINT32_MAX, 5) === -5) {\r\n            return Math.imul;\r\n        }\r\n    }\r\n    catch (_) {\r\n        // nothing to do here\r\n    }\r\n    const UINT16_MAX = 0xffff;\r\n    return (a, b) => {\r\n        const ah = (a >>> 16) & UINT16_MAX;\r\n        const al = a & UINT16_MAX;\r\n        const bh = (b >>> 16) & UINT16_MAX;\r\n        const bl = b & UINT16_MAX;\r\n        // the shift by 0 fixes the sign on the high part\r\n        // the final |0 converts the unsigned value into a signed value\r\n        return (al * bl + (((ah * bl + al * bh) << 16) >>> 0)) | 0;\r\n    };\r\n})();\n\nconst ARRAY_SIZE = 624;\r\nconst ARRAY_MAX = ARRAY_SIZE - 1;\r\nconst M = 397;\r\nconst ARRAY_SIZE_MINUS_M = ARRAY_SIZE - M;\r\nconst A = 0x9908b0df;\r\n/**\r\n * An Engine that is a pseudorandom number generator using the Mersenne\r\n * Twister algorithm based on the prime 2**19937 − 1\r\n *\r\n * See http://en.wikipedia.org/wiki/Mersenne_twister\r\n */\r\nclass MersenneTwister19937 {\r\n    /**\r\n     * MersenneTwister19937 should not be instantiated directly.\r\n     * Instead, use the static methods `seed`, `seedWithArray`, or `autoSeed`.\r\n     */\r\n    constructor() {\r\n        this.data = new I32Array(ARRAY_SIZE);\r\n        this.index = 0; // integer within [0, 624]\r\n        this.uses = 0;\r\n    }\r\n    /**\r\n     * Returns a MersenneTwister19937 seeded with an initial int32 value\r\n     * @param initial the initial seed value\r\n     */\r\n    static seed(initial) {\r\n        return new MersenneTwister19937().seed(initial);\r\n    }\r\n    /**\r\n     * Returns a MersenneTwister19937 seeded with zero or more int32 values\r\n     * @param source A series of int32 values\r\n     */\r\n    static seedWithArray(source) {\r\n        return new MersenneTwister19937().seedWithArray(source);\r\n    }\r\n    /**\r\n     * Returns a MersenneTwister19937 seeded with the current time and\r\n     * a series of natively-generated random values\r\n     */\r\n    static autoSeed() {\r\n        return MersenneTwister19937.seedWithArray(createEntropy());\r\n    }\r\n    /**\r\n     * Returns the next int32 value of the sequence\r\n     */\r\n    next() {\r\n        if ((this.index | 0) >= ARRAY_SIZE) {\r\n            refreshData(this.data);\r\n            this.index = 0;\r\n        }\r\n        const value = this.data[this.index];\r\n        this.index = (this.index + 1) | 0;\r\n        this.uses += 1;\r\n        return temper(value) | 0;\r\n    }\r\n    /**\r\n     * Returns the number of times that the Engine has been used.\r\n     *\r\n     * This can be provided to an unused MersenneTwister19937 with the same\r\n     * seed, bringing it to the exact point that was left off.\r\n     */\r\n    getUseCount() {\r\n        return this.uses;\r\n    }\r\n    /**\r\n     * Discards one or more items from the engine\r\n     * @param count The count of items to discard\r\n     */\r\n    discard(count) {\r\n        if (count <= 0) {\r\n            return this;\r\n        }\r\n        this.uses += count;\r\n        if ((this.index | 0) >= ARRAY_SIZE) {\r\n            refreshData(this.data);\r\n            this.index = 0;\r\n        }\r\n        while (count + this.index > ARRAY_SIZE) {\r\n            count -= ARRAY_SIZE - this.index;\r\n            refreshData(this.data);\r\n            this.index = 0;\r\n        }\r\n        this.index = (this.index + count) | 0;\r\n        return this;\r\n    }\r\n    seed(initial) {\r\n        let previous = 0;\r\n        this.data[0] = previous = initial | 0;\r\n        for (let i = 1; i < ARRAY_SIZE; i = (i + 1) | 0) {\r\n            this.data[i] = previous =\r\n                (imul(previous ^ (previous >>> 30), 0x6c078965) + i) | 0;\r\n        }\r\n        this.index = ARRAY_SIZE;\r\n        this.uses = 0;\r\n        return this;\r\n    }\r\n    seedWithArray(source) {\r\n        this.seed(0x012bd6aa);\r\n        seedWithArray(this.data, source);\r\n        return this;\r\n    }\r\n}\r\nfunction refreshData(data) {\r\n    let k = 0;\r\n    let tmp = 0;\r\n    for (; (k | 0) < ARRAY_SIZE_MINUS_M; k = (k + 1) | 0) {\r\n        tmp = (data[k] & INT32_SIZE) | (data[(k + 1) | 0] & INT32_MAX);\r\n        data[k] = data[(k + M) | 0] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n    }\r\n    for (; (k | 0) < ARRAY_MAX; k = (k + 1) | 0) {\r\n        tmp = (data[k] & INT32_SIZE) | (data[(k + 1) | 0] & INT32_MAX);\r\n        data[k] =\r\n            data[(k - ARRAY_SIZE_MINUS_M) | 0] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n    }\r\n    tmp = (data[ARRAY_MAX] & INT32_SIZE) | (data[0] & INT32_MAX);\r\n    data[ARRAY_MAX] = data[M - 1] ^ (tmp >>> 1) ^ (tmp & 0x1 ? A : 0);\r\n}\r\nfunction temper(value) {\r\n    value ^= value >>> 11;\r\n    value ^= (value << 7) & 0x9d2c5680;\r\n    value ^= (value << 15) & 0xefc60000;\r\n    return value ^ (value >>> 18);\r\n}\r\nfunction seedWithArray(data, source) {\r\n    let i = 1;\r\n    let j = 0;\r\n    const sourceLength = source.length;\r\n    let k = Math.max(sourceLength, ARRAY_SIZE) | 0;\r\n    let previous = data[0] | 0;\r\n    for (; (k | 0) > 0; --k) {\r\n        data[i] = previous =\r\n            ((data[i] ^ imul(previous ^ (previous >>> 30), 0x0019660d)) +\r\n                (source[j] | 0) +\r\n                (j | 0)) |\r\n                0;\r\n        i = (i + 1) | 0;\r\n        ++j;\r\n        if ((i | 0) > ARRAY_MAX) {\r\n            data[0] = data[ARRAY_MAX];\r\n            i = 1;\r\n        }\r\n        if (j >= sourceLength) {\r\n            j = 0;\r\n        }\r\n    }\r\n    for (k = ARRAY_MAX; (k | 0) > 0; --k) {\r\n        data[i] = previous =\r\n            ((data[i] ^ imul(previous ^ (previous >>> 30), 0x5d588b65)) - i) | 0;\r\n        i = (i + 1) | 0;\r\n        if ((i | 0) > ARRAY_MAX) {\r\n            data[0] = data[ARRAY_MAX];\r\n            i = 1;\r\n        }\r\n    }\r\n    data[0] = INT32_SIZE;\r\n}\n\nlet data$1 = null;\r\nconst COUNT$1 = 128;\r\nlet index$1 = COUNT$1;\r\n/**\r\n * An Engine that relies on the node-available\r\n * `require('crypto').randomBytes`, which has been available since 0.58.\r\n *\r\n * See https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback\r\n *\r\n * If unavailable or otherwise non-functioning, then `nodeCrypto` will\r\n * likely `throw` on the first call to `next()`.\r\n */\r\nconst nodeCrypto = {\r\n    next() {\r\n        if (index$1 >= COUNT$1) {\r\n            data$1 = new Int32Array(new Int8Array(require(\"crypto\").randomBytes(4 * COUNT$1)).buffer);\r\n            index$1 = 0;\r\n        }\r\n        return data$1[index$1++] | 0;\r\n    }\r\n};\n\n/**\r\n * Returns a Distribution to random value within the provided `source`\r\n * within the sliced bounds of `begin` and `end`.\r\n * @param source an array of items to pick from\r\n * @param begin the beginning slice index (defaults to `0`)\r\n * @param end the ending slice index (defaults to `source.length`)\r\n */\r\nfunction picker(source, begin, end) {\r\n    const clone = sliceArray.call(source, begin, end);\r\n    if (clone.length === 0) {\r\n        throw new RangeError(`Cannot pick from a source with no items`);\r\n    }\r\n    const distribution = integer(0, clone.length - 1);\r\n    return engine => clone[distribution(engine)];\r\n}\n\nexport { Random, browserCrypto, nativeMath, MersenneTwister19937, nodeCrypto, bool, date, dice, die, hex, int32, int53, int53Full, integer, pick, picker, real, realZeroToOneExclusive, realZeroToOneInclusive, sample, shuffle, string, uint32, uint53, uint53Full, uuid4, createEntropy };\n//# sourceMappingURL=random-js.esm.js.map\n","import * as Random from 'random-js';\nimport Matrix from 'ml-matrix';\n\nexport function checkFloat(n) {\n  return n > 0.0 && n <= 1.0;\n}\n\n/**\n * Select n with replacement elements on the training set and values, where n is the size of the training set.\n * @ignore\n * @param {Matrix} trainingSet\n * @param {Array} trainingValue\n * @param {number} seed - seed for the random selection, must be a 32-bit integer.\n * @return {object} with new X and y.\n */\nexport function examplesBaggingWithReplacement(\n  trainingSet,\n  trainingValue,\n  seed,\n) {\n  let engine;\n  let distribution = Random.integer(0, trainingSet.rows - 1);\n  if (seed === undefined) {\n    engine = Random.MersenneTwister19937.autoSeed();\n  } else if (Number.isInteger(seed)) {\n    engine = Random.MersenneTwister19937.seed(seed);\n  } else {\n    throw new RangeError(\n      `Expected seed must be undefined or integer not ${seed}`,\n    );\n  }\n\n  let Xr = new Array(trainingSet.rows);\n  let yr = new Array(trainingSet.rows);\n\n  for (let i = 0; i < trainingSet.rows; ++i) {\n    let index = distribution(engine);\n    Xr[i] = trainingSet.getRow(index);\n    yr[i] = trainingValue[index];\n  }\n\n  return {\n    X: new Matrix(Xr),\n    y: yr,\n  };\n}\n\n/**\n * selects n features from the training set with or without replacement, returns the new training set and the indexes used.\n * @ignore\n * @param {Matrix} trainingSet\n * @param {number} n - features.\n * @param {boolean} replacement\n * @param {number} seed - seed for the random selection, must be a 32-bit integer.\n * @return {object}\n */\nexport function featureBagging(trainingSet, n, replacement, seed) {\n  if (trainingSet.columns < n) {\n    throw new RangeError(\n      'N should be less or equal to the number of columns of X',\n    );\n  }\n\n  let distribution = Random.integer(0, trainingSet.columns - 1);\n  let engine;\n  if (seed === undefined) {\n    engine = Random.MersenneTwister19937.autoSeed();\n  } else if (Number.isInteger(seed)) {\n    engine = Random.MersenneTwister19937.seed(seed);\n  } else {\n    throw new RangeError(\n      `Expected seed must be undefined or integer not ${seed}`,\n    );\n  }\n\n  let toRet = new Matrix(trainingSet.rows, n);\n\n  let usedIndex;\n  let index;\n  if (replacement) {\n    usedIndex = new Array(n);\n    for (let i = 0; i < n; ++i) {\n      index = distribution(engine);\n      usedIndex[i] = index;\n      toRet.setColumn(i, trainingSet.getColumn(index));\n    }\n  } else {\n    usedIndex = new Set();\n    index = distribution(engine);\n    for (let i = 0; i < n; ++i) {\n      while (usedIndex.has(index)) {\n        index = distribution(engine);\n      }\n      toRet.setColumn(i, trainingSet.getColumn(index));\n      usedIndex.add(index);\n    }\n    usedIndex = Array.from(usedIndex);\n  }\n\n  return {\n    X: toRet,\n    usedIndex: usedIndex,\n  };\n}\n","import {\n  DecisionTreeClassifier as DTClassifier,\n  DecisionTreeRegression as DTRegression,\n} from 'ml-cart';\nimport {\n  Matrix,\n  WrapperMatrix2D,\n  MatrixTransposeView,\n  MatrixColumnSelectionView,\n} from 'ml-matrix';\n\nimport * as Utils from './utils';\n\n/**\n * @class RandomForestBase\n */\nexport class RandomForestBase {\n  /**\n   * Create a new base random forest for a classifier or regression model.\n   * @constructor\n   * @param {object} options\n   * @param {number|String} [options.maxFeatures] - the number of features used on each estimator.\n   *        * if is an integer it selects maxFeatures elements over the sample features.\n   *        * if is a float between (0, 1), it takes the percentage of features.\n   * @param {boolean} [options.replacement] - use replacement over the sample features.\n   * @param {number} [options.seed] - seed for feature and samples selection, must be a 32-bit integer.\n   * @param {number} [options.nEstimators] - number of estimator to use.\n   * @param {object} [options.treeOptions] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n   * @param {boolean} [options.isClassifier] - boolean to check if is a classifier or regression model (used by subclasses).\n   * @param {boolean} [options.useSampleBagging] - use bagging over training samples.\n   * @param {object} model - for load purposes.\n   */\n  constructor(options, model) {\n    if (options === true) {\n      this.replacement = model.replacement;\n      this.maxFeatures = model.maxFeatures;\n      this.nEstimators = model.nEstimators;\n      this.treeOptions = model.treeOptions;\n      this.isClassifier = model.isClassifier;\n      this.seed = model.seed;\n      this.n = model.n;\n      this.indexes = model.indexes;\n      this.useSampleBagging = model.useSampleBagging;\n\n      let Estimator = this.isClassifier ? DTClassifier : DTRegression;\n      this.estimators = model.estimators.map((est) => Estimator.load(est));\n    } else {\n      this.replacement = options.replacement;\n      this.maxFeatures = options.maxFeatures;\n      this.nEstimators = options.nEstimators;\n      this.treeOptions = options.treeOptions;\n      this.isClassifier = options.isClassifier;\n      this.seed = options.seed;\n      this.useSampleBagging = options.useSampleBagging;\n    }\n  }\n\n  /**\n   * Train the decision tree with the given training set and labels.\n   * @param {Matrix|Array} trainingSet\n   * @param {Array} trainingValues\n   */\n  train(trainingSet, trainingValues) {\n    trainingSet = Matrix.checkMatrix(trainingSet);\n\n    this.maxFeatures = this.maxFeatures || trainingSet.columns;\n\n    if (Utils.checkFloat(this.maxFeatures)) {\n      this.n = Math.floor(trainingSet.columns * this.maxFeatures);\n    } else if (Number.isInteger(this.maxFeatures)) {\n      if (this.maxFeatures > trainingSet.columns) {\n        throw new RangeError(\n          `The maxFeatures parameter should be less than ${trainingSet.columns}`,\n        );\n      } else {\n        this.n = this.maxFeatures;\n      }\n    } else {\n      throw new RangeError(\n        `Cannot process the maxFeatures parameter ${this.maxFeatures}`,\n      );\n    }\n\n    let Estimator;\n    if (this.isClassifier) {\n      Estimator = DTClassifier;\n    } else {\n      Estimator = DTRegression;\n    }\n\n    this.estimators = new Array(this.nEstimators);\n    this.indexes = new Array(this.nEstimators);\n\n    for (let i = 0; i < this.nEstimators; ++i) {\n      let res = this.useSampleBagging\n        ? Utils.examplesBaggingWithReplacement(\n            trainingSet,\n            trainingValues,\n            this.seed,\n          )\n        : { X: trainingSet, y: trainingValues };\n      let X = res.X;\n      let y = res.y;\n\n      res = Utils.featureBagging(X, this.n, this.replacement, this.seed);\n      X = res.X;\n\n      this.indexes[i] = res.usedIndex;\n      this.estimators[i] = new Estimator(this.treeOptions);\n      this.estimators[i].train(X, y);\n    }\n  }\n\n  /**\n   * Method that returns the way the algorithm generates the predictions, for example, in classification\n   * you can return the mode of all predictions retrieved by the trees, or in case of regression you can\n   * use the mean or the median.\n   * @abstract\n   * @param {Array} values - predictions of the estimators.\n   * @return {number} prediction.\n   */\n  // eslint-disable-next-line no-unused-vars\n  selection(values) {\n    throw new Error(\"Abstract method 'selection' not implemented!\");\n  }\n\n  /**\n   * Predicts the output given the matrix to predict.\n   * @param {Matrix|Array} toPredict\n   * @return {Array} predictions\n   */\n  predict(toPredict) {\n    let predictionValues = new Array(this.nEstimators);\n    toPredict = Matrix.checkMatrix(toPredict);\n    for (let i = 0; i < this.nEstimators; ++i) {\n      let X = new MatrixColumnSelectionView(toPredict, this.indexes[i]); // get features for estimator\n      predictionValues[i] = this.estimators[i].predict(X);\n    }\n\n    predictionValues = new MatrixTransposeView(\n      new WrapperMatrix2D(predictionValues),\n    );\n    let predictions = new Array(predictionValues.rows);\n    for (let i = 0; i < predictionValues.rows; ++i) {\n      predictions[i] = this.selection(predictionValues.getRow(i));\n    }\n\n    return predictions;\n  }\n\n  /**\n   * Export the current model to JSON.\n   * @return {object} - Current model.\n   */\n  toJSON() {\n    return {\n      indexes: this.indexes,\n      n: this.n,\n      replacement: this.replacement,\n      maxFeatures: this.maxFeatures,\n      nEstimators: this.nEstimators,\n      treeOptions: this.treeOptions,\n      isClassifier: this.isClassifier,\n      seed: this.seed,\n      estimators: this.estimators.map((est) => est.toJSON()),\n      useSampleBagging: this.useSampleBagging,\n    };\n  }\n}\n","import { RandomForestBase } from './RandomForestBase';\n\nconst defaultOptions = {\n  maxFeatures: 1.0,\n  replacement: true,\n  nEstimators: 10,\n  seed: 42,\n  useSampleBagging: false,\n};\n\n/**\n * @class RandomForestClassifier\n * @augments RandomForestBase\n */\nexport class RandomForestClassifier extends RandomForestBase {\n  /**\n   * Create a new base random forest for a classifier or regression model.\n   * @constructor\n   * @param {object} options\n   * @param {number} [options.maxFeatures=1.0] - the number of features used on each estimator.\n   *        * if is an integer it selects maxFeatures elements over the sample features.\n   *        * if is a float between (0, 1), it takes the percentage of features.\n   * @param {boolean} [options.replacement=true] - use replacement over the sample features.\n   * @param {number} [options.seed=42] - seed for feature and samples selection, must be a 32-bit integer.\n   * @param {number} [options.nEstimators=10] - number of estimator to use.\n   * @param {object} [options.treeOptions={}] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n   * @param {boolean} [options.useSampleBagging=false] - use bagging over training samples.\n   * @param {object} model - for load purposes.\n   */\n  constructor(options, model) {\n    if (options === true) {\n      super(true, model.baseModel);\n    } else {\n      options = Object.assign({}, defaultOptions, options);\n      options.isClassifier = true;\n      super(options);\n    }\n  }\n\n  /**\n   * retrieve the prediction given the selection method.\n   * @param {Array} values - predictions of the estimators.\n   * @return {number} prediction\n   */\n  selection(values) {\n    return mode(values);\n  }\n\n  /**\n   * Export the current model to JSON.\n   * @return {object} - Current model.\n   */\n  toJSON() {\n    let baseModel = super.toJSON();\n    return {\n      baseModel: baseModel,\n      name: 'RFClassifier',\n    };\n  }\n\n  /**\n   * Load a Decision tree classifier with the given model.\n   * @param {object} model\n   * @return {RandomForestClassifier}\n   */\n  static load(model) {\n    if (model.name !== 'RFClassifier') {\n      throw new RangeError(`Invalid model: ${model.name}`);\n    }\n\n    return new RandomForestClassifier(true, model);\n  }\n}\n\n/**\n * Return the most repeated element on the array.\n * @param {Array} arr\n * @return {number} mode\n */\nfunction mode(arr) {\n  return arr\n    .sort(\n      (a, b) =>\n        arr.filter((v) => v === a).length - arr.filter((v) => v === b).length,\n    )\n    .pop();\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 quickSelectMedian from 'median-quickselect';\nimport isArray from 'is-any-array';\n\n/**\n * Computes the median of the given values\n * @param {Array<number>} input\n * @return {number}\n */\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 arrayMean from 'ml-array-mean';\nimport arrayMedian from 'ml-array-median';\n\nimport { RandomForestBase } from './RandomForestBase';\n\nconst selectionMethods = {\n  mean: arrayMean,\n  median: arrayMedian,\n};\n\nconst defaultOptions = {\n  maxFeatures: 1.0,\n  replacement: false,\n  nEstimators: 10,\n  treeOptions: {},\n  selectionMethod: 'mean',\n  seed: 42,\n  useSampleBagging: false,\n};\n\n/**\n * @class RandomForestRegression\n * @augments RandomForestBase\n */\nexport class RandomForestRegression extends RandomForestBase {\n  /**\n   * Create a new base random forest for a classifier or regression model.\n   * @constructor\n   * @param {object} options\n   * @param {number} [options.maxFeatures=1.0] - the number of features used on each estimator.\n   *        * if is an integer it selects maxFeatures elements over the sample features.\n   *        * if is a float between (0, 1), it takes the percentage of features.\n   * @param {boolean} [options.replacement=true] - use replacement over the sample features.\n   * @param {number} [options.seed=42] - seed for feature and samples selection, must be a 32-bit integer.\n   * @param {number} [options.nEstimators=10] - number of estimator to use.\n   * @param {object} [options.treeOptions={}] - options for the tree classifier, see [ml-cart]{@link https://mljs.github.io/decision-tree-cart/}\n   * @param {string} [options.selectionMethod=\"mean\"] - the way to calculate the prediction from estimators, \"mean\" and \"median\" are supported.\n   * @param {boolean} [options.useSampleBagging=false] - use bagging over training samples.\n   * @param {object} model - for load purposes.\n   */\n  constructor(options, model) {\n    if (options === true) {\n      super(true, model.baseModel);\n      this.selectionMethod = model.selectionMethod;\n    } else {\n      options = Object.assign({}, defaultOptions, options);\n\n      if (\n        !(\n          options.selectionMethod === 'mean' ||\n          options.selectionMethod === 'median'\n        )\n      ) {\n        throw new RangeError(\n          `Unsupported selection method ${options.selectionMethod}`,\n        );\n      }\n\n      options.isClassifier = false;\n\n      super(options);\n      this.selectionMethod = options.selectionMethod;\n    }\n  }\n\n  /**\n   * retrieve the prediction given the selection method.\n   * @param {Array} values - predictions of the estimators.\n   * @return {number} prediction\n   */\n  selection(values) {\n    return selectionMethods[this.selectionMethod](values);\n  }\n\n  /**\n   * Export the current model to JSON.\n   * @return {object} - Current model.\n   */\n  toJSON() {\n    let baseModel = super.toJSON();\n    return {\n      baseModel: baseModel,\n      selectionMethod: this.selectionMethod,\n      name: 'RFRegression',\n    };\n  }\n\n  /**\n   * Load a Decision tree classifier with the given model.\n   * @param {object} model\n   * @return {RandomForestRegression}\n   */\n  static load(model) {\n    if (model.name !== 'RFRegression') {\n      throw new RangeError(`Invalid model: ${model.name}`);\n    }\n\n    return new RandomForestRegression(true, model);\n  }\n}\n","import { Matrix, MatrixTransposeView, EVD, SVD, NIPALS } from 'ml-matrix';\n\n/**\n * Creates new PCA (Principal Component Analysis) from the dataset\n * @param {Matrix} dataset - dataset or covariance matrix.\n * @param {Object} [options]\n * @param {boolean} [options.isCovarianceMatrix=false] - true if the dataset is a covariance matrix.\n * @param {string} [options.method='SVD'] - select which method to use: SVD (default), covarianceMatrirx or NIPALS.\n * @param {number} [options.nCompNIPALS=2] - number of components to be computed with NIPALS.\n * @param {boolean} [options.center=true] - should the data be centered (subtract the mean).\n * @param {boolean} [options.scale=false] - should the data be scaled (divide by the standard deviation).\n * @param {boolean} [options.ignoreZeroVariance=false] - ignore columns with zero variance if `scale` is `true`.\n * */\nexport class PCA {\n  constructor(dataset, options = {}) {\n    if (dataset === true) {\n      const model = options;\n      this.center = model.center;\n      this.scale = model.scale;\n      this.means = model.means;\n      this.stdevs = model.stdevs;\n      this.U = Matrix.checkMatrix(model.U);\n      this.S = model.S;\n      this.R = model.R;\n      this.excludedFeatures = model.excludedFeatures || [];\n      return;\n    }\n\n    dataset = new Matrix(dataset);\n\n    const {\n      isCovarianceMatrix = false,\n      method = 'SVD',\n      nCompNIPALS = 2,\n      center = true,\n      scale = false,\n      ignoreZeroVariance = false,\n    } = options;\n\n    this.center = center;\n    this.scale = scale;\n    this.means = null;\n    this.stdevs = null;\n    this.excludedFeatures = [];\n\n    if (isCovarianceMatrix) {\n      // User provided a covariance matrix instead of dataset.\n      this._computeFromCovarianceMatrix(dataset);\n      return;\n    }\n\n    this._adjust(dataset, ignoreZeroVariance);\n    switch (method) {\n      case 'covarianceMatrix': {\n        // User provided a dataset but wants us to compute and use the covariance matrix.\n        const covarianceMatrix = new MatrixTransposeView(dataset)\n          .mmul(dataset)\n          .div(dataset.rows - 1);\n        this._computeFromCovarianceMatrix(covarianceMatrix);\n        break;\n      }\n      case 'NIPALS': {\n        this._computeWithNIPALS(dataset, nCompNIPALS);\n        break;\n      }\n      case 'SVD': {\n        const svd = new SVD(dataset, {\n          computeLeftSingularVectors: false,\n          computeRightSingularVectors: true,\n          autoTranspose: true,\n        });\n\n        this.U = svd.rightSingularVectors;\n\n        const singularValues = svd.diagonal;\n        const eigenvalues = [];\n        for (const singularValue of singularValues) {\n          eigenvalues.push((singularValue * singularValue) / (dataset.rows - 1));\n        }\n        this.S = eigenvalues;\n        break;\n      }\n      default: {\n        throw new Error(`unknown method: ${method}`);\n      }\n    }\n  }\n\n  /**\n   * Load a PCA model from JSON\n   * @param {Object} model\n   * @return {PCA}\n   */\n  static load(model) {\n    if (typeof model.name !== 'string') {\n      throw new TypeError('model must have a name property');\n    }\n    if (model.name !== 'PCA') {\n      throw new RangeError(`invalid model: ${model.name}`);\n    }\n    return new PCA(true, model);\n  }\n\n  /**\n   * Project the dataset into the PCA space\n   * @param {Matrix} dataset\n   * @param {Object} options\n   * @return {Matrix} dataset projected in the PCA space\n   */\n  predict(dataset, options = {}) {\n    const { nComponents = this.U.columns } = options;\n    dataset = new Matrix(dataset);\n    if (this.center) {\n      dataset.subRowVector(this.means);\n      if (this.scale) {\n        for (let i of this.excludedFeatures) {\n          dataset.removeColumn(i);\n        }\n        dataset.divRowVector(this.stdevs);\n      }\n    }\n    var predictions = dataset.mmul(this.U);\n    return predictions.subMatrix(0, predictions.rows - 1, 0, nComponents - 1);\n  }\n\n  /**\n   * Calculates the inverse PCA transform\n   * @param {Matrix} dataset\n   * @return {Matrix} dataset projected in the PCA space\n   */\n  invert(dataset) {\n    dataset = Matrix.checkMatrix(dataset);\n\n    var inverse = dataset.mmul(this.U.transpose());\n\n    if (this.center) {\n      if (this.scale) {\n        inverse.mulRowVector(this.stdevs);\n      }\n      inverse.addRowVector(this.means);\n    }\n\n    return inverse;\n  }\n\n\n  /**\n   * Returns the proportion of variance for each component\n   * @return {[number]}\n   */\n  getExplainedVariance() {\n    var sum = 0;\n    for (const s of this.S) {\n      sum += s;\n    }\n    return this.S.map((value) => value / sum);\n  }\n\n  /**\n   * Returns the cumulative proportion of variance\n   * @return {[number]}\n   */\n  getCumulativeVariance() {\n    var explained = this.getExplainedVariance();\n    for (var i = 1; i < explained.length; i++) {\n      explained[i] += explained[i - 1];\n    }\n    return explained;\n  }\n\n  /**\n   * Returns the Eigenvectors of the covariance matrix\n   * @returns {Matrix}\n   */\n  getEigenvectors() {\n    return this.U;\n  }\n\n  /**\n   * Returns the Eigenvalues (on the diagonal)\n   * @returns {[number]}\n   */\n  getEigenvalues() {\n    return this.S;\n  }\n\n  /**\n   * Returns the standard deviations of the principal components\n   * @returns {[number]}\n   */\n  getStandardDeviations() {\n    return this.S.map((x) => Math.sqrt(x));\n  }\n\n  /**\n   * Returns the loadings matrix\n   * @return {Matrix}\n   */\n  getLoadings() {\n    return this.U.transpose();\n  }\n\n  /**\n   * Export the current model to a JSON object\n   * @return {Object} model\n   */\n  toJSON() {\n    return {\n      name: 'PCA',\n      center: this.center,\n      scale: this.scale,\n      means: this.means,\n      stdevs: this.stdevs,\n      U: this.U,\n      S: this.S,\n      excludedFeatures: this.excludedFeatures,\n    };\n  }\n\n  _adjust(dataset, ignoreZeroVariance) {\n    if (this.center) {\n      const mean = dataset.mean('column');\n      const stdevs = this.scale\n        ? dataset.standardDeviation('column', { mean })\n        : null;\n      this.means = mean;\n      dataset.subRowVector(mean);\n      if (this.scale) {\n        for (let i = 0; i < stdevs.length; i++) {\n          if (stdevs[i] === 0) {\n            if (ignoreZeroVariance) {\n              dataset.removeColumn(i);\n              stdevs.splice(i, 1);\n              this.excludedFeatures.push(i);\n              i--;\n            } else {\n              throw new RangeError(\n                `Cannot scale the dataset (standard deviation is zero at index ${i}`,\n              );\n            }\n          }\n        }\n        this.stdevs = stdevs;\n        dataset.divRowVector(stdevs);\n      }\n    }\n  }\n\n  _computeFromCovarianceMatrix(dataset) {\n    const evd = new EVD(dataset, { assumeSymmetric: true });\n    this.U = evd.eigenvectorMatrix;\n    this.U.flipRows();\n    this.S = evd.realEigenvalues;\n    this.S.reverse();\n  }\n\n  _computeWithNIPALS(dataset, nCompNIPALS) {\n    this.U = new Matrix(nCompNIPALS, dataset.columns);\n    this.S = [];\n\n    let x = dataset;\n    for (let i = 0; i < nCompNIPALS; i++) {\n      let dc = new NIPALS(x);\n\n      this.U.setRow(i, dc.w.transpose());\n      this.S.push(Math.pow(dc.s.get(0, 0), 2));\n\n      x = dc.xResidual;\n    }\n    this.U = this.U.transpose(); // to be compatible with API\n  }\n}\n","export function squaredEuclidean(p, q) {\r\n    let d = 0;\r\n    for (let i = 0; i < p.length; i++) {\r\n        d += (p[i] - q[i]) * (p[i] - q[i]);\r\n    }\r\n    return d;\r\n}\r\nexport function euclidean(p, q) {\r\n    return Math.sqrt(squaredEuclidean(p, q));\r\n}\r\n","/**\n * Computes a distance/similarity matrix given an array of data and a distance/similarity function.\n * @param {Array} data An array of data\n * @param {function} distanceFn  A function that accepts two arguments and computes a distance/similarity between them\n * @return {Array<Array>} The distance/similarity matrix. The matrix is square and has a size equal to the length of\n * the data array\n */\nexport default function distanceMatrix(data, distanceFn) {\n  const result = getMatrix(data.length);\n\n  // Compute upper distance matrix\n  for (let i = 0; i < data.length; i++) {\n    for (let j = 0; j <= i; j++) {\n      result[i][j] = distanceFn(data[i], data[j]);\n      result[j][i] = result[i][j];\n    }\n  }\n\n  return result;\n}\n\nfunction getMatrix(size) {\n  const matrix = [];\n  for (let i = 0; i < size; i++) {\n    const row = [];\n    matrix.push(row);\n    for (let j = 0; j < size; j++) {\n      row.push(0);\n    }\n  }\n  return matrix;\n}\n","// Generated by CoffeeScript 1.8.0\n(function() {\n  var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\n\n  floor = Math.floor, min = Math.min;\n\n\n  /*\n  Default comparison function to be used\n   */\n\n  defaultCmp = function(x, y) {\n    if (x < y) {\n      return -1;\n    }\n    if (x > y) {\n      return 1;\n    }\n    return 0;\n  };\n\n\n  /*\n  Insert item x in list a, and keep it sorted assuming a is sorted.\n  \n  If x is already in a, insert it to the right of the rightmost x.\n  \n  Optional args lo (default 0) and hi (default a.length) bound the slice\n  of a to be searched.\n   */\n\n  insort = function(a, x, lo, hi, cmp) {\n    var mid;\n    if (lo == null) {\n      lo = 0;\n    }\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    if (lo < 0) {\n      throw new Error('lo must be non-negative');\n    }\n    if (hi == null) {\n      hi = a.length;\n    }\n    while (lo < hi) {\n      mid = floor((lo + hi) / 2);\n      if (cmp(x, a[mid]) < 0) {\n        hi = mid;\n      } else {\n        lo = mid + 1;\n      }\n    }\n    return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\n  };\n\n\n  /*\n  Push item onto heap, maintaining the heap invariant.\n   */\n\n  heappush = function(array, item, cmp) {\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    array.push(item);\n    return _siftdown(array, 0, array.length - 1, cmp);\n  };\n\n\n  /*\n  Pop the smallest item off the heap, maintaining the heap invariant.\n   */\n\n  heappop = function(array, cmp) {\n    var lastelt, returnitem;\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    lastelt = array.pop();\n    if (array.length) {\n      returnitem = array[0];\n      array[0] = lastelt;\n      _siftup(array, 0, cmp);\n    } else {\n      returnitem = lastelt;\n    }\n    return returnitem;\n  };\n\n\n  /*\n  Pop and return the current smallest value, and add the new item.\n  \n  This is more efficient than heappop() followed by heappush(), and can be\n  more appropriate when using a fixed size heap. Note that the value\n  returned may be larger than item! That constrains reasonable use of\n  this routine unless written as part of a conditional replacement:\n      if item > array[0]\n        item = heapreplace(array, item)\n   */\n\n  heapreplace = function(array, item, cmp) {\n    var returnitem;\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    returnitem = array[0];\n    array[0] = item;\n    _siftup(array, 0, cmp);\n    return returnitem;\n  };\n\n\n  /*\n  Fast version of a heappush followed by a heappop.\n   */\n\n  heappushpop = function(array, item, cmp) {\n    var _ref;\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    if (array.length && cmp(array[0], item) < 0) {\n      _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\n      _siftup(array, 0, cmp);\n    }\n    return item;\n  };\n\n\n  /*\n  Transform list into a heap, in-place, in O(array.length) time.\n   */\n\n  heapify = function(array, cmp) {\n    var i, _i, _j, _len, _ref, _ref1, _results, _results1;\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    _ref1 = (function() {\n      _results1 = [];\n      for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\n      return _results1;\n    }).apply(this).reverse();\n    _results = [];\n    for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n      i = _ref1[_i];\n      _results.push(_siftup(array, i, cmp));\n    }\n    return _results;\n  };\n\n\n  /*\n  Update the position of the given item in the heap.\n  This function should be called every time the item is being modified.\n   */\n\n  updateItem = function(array, item, cmp) {\n    var pos;\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    pos = array.indexOf(item);\n    if (pos === -1) {\n      return;\n    }\n    _siftdown(array, 0, pos, cmp);\n    return _siftup(array, pos, cmp);\n  };\n\n\n  /*\n  Find the n largest elements in a dataset.\n   */\n\n  nlargest = function(array, n, cmp) {\n    var elem, result, _i, _len, _ref;\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    result = array.slice(0, n);\n    if (!result.length) {\n      return result;\n    }\n    heapify(result, cmp);\n    _ref = array.slice(n);\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      elem = _ref[_i];\n      heappushpop(result, elem, cmp);\n    }\n    return result.sort(cmp).reverse();\n  };\n\n\n  /*\n  Find the n smallest elements in a dataset.\n   */\n\n  nsmallest = function(array, n, cmp) {\n    var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results;\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    if (n * 10 <= array.length) {\n      result = array.slice(0, n).sort(cmp);\n      if (!result.length) {\n        return result;\n      }\n      los = result[result.length - 1];\n      _ref = array.slice(n);\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        elem = _ref[_i];\n        if (cmp(elem, los) < 0) {\n          insort(result, elem, 0, null, cmp);\n          result.pop();\n          los = result[result.length - 1];\n        }\n      }\n      return result;\n    }\n    heapify(array, cmp);\n    _results = [];\n    for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {\n      _results.push(heappop(array, cmp));\n    }\n    return _results;\n  };\n\n  _siftdown = function(array, startpos, pos, cmp) {\n    var newitem, parent, parentpos;\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    newitem = array[pos];\n    while (pos > startpos) {\n      parentpos = (pos - 1) >> 1;\n      parent = array[parentpos];\n      if (cmp(newitem, parent) < 0) {\n        array[pos] = parent;\n        pos = parentpos;\n        continue;\n      }\n      break;\n    }\n    return array[pos] = newitem;\n  };\n\n  _siftup = function(array, pos, cmp) {\n    var childpos, endpos, newitem, rightpos, startpos;\n    if (cmp == null) {\n      cmp = defaultCmp;\n    }\n    endpos = array.length;\n    startpos = pos;\n    newitem = array[pos];\n    childpos = 2 * pos + 1;\n    while (childpos < endpos) {\n      rightpos = childpos + 1;\n      if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\n        childpos = rightpos;\n      }\n      array[pos] = array[childpos];\n      pos = childpos;\n      childpos = 2 * pos + 1;\n    }\n    array[pos] = newitem;\n    return _siftdown(array, startpos, pos, cmp);\n  };\n\n  Heap = (function() {\n    Heap.push = heappush;\n\n    Heap.pop = heappop;\n\n    Heap.replace = heapreplace;\n\n    Heap.pushpop = heappushpop;\n\n    Heap.heapify = heapify;\n\n    Heap.updateItem = updateItem;\n\n    Heap.nlargest = nlargest;\n\n    Heap.nsmallest = nsmallest;\n\n    function Heap(cmp) {\n      this.cmp = cmp != null ? cmp : defaultCmp;\n      this.nodes = [];\n    }\n\n    Heap.prototype.push = function(x) {\n      return heappush(this.nodes, x, this.cmp);\n    };\n\n    Heap.prototype.pop = function() {\n      return heappop(this.nodes, this.cmp);\n    };\n\n    Heap.prototype.peek = function() {\n      return this.nodes[0];\n    };\n\n    Heap.prototype.contains = function(x) {\n      return this.nodes.indexOf(x) !== -1;\n    };\n\n    Heap.prototype.replace = function(x) {\n      return heapreplace(this.nodes, x, this.cmp);\n    };\n\n    Heap.prototype.pushpop = function(x) {\n      return heappushpop(this.nodes, x, this.cmp);\n    };\n\n    Heap.prototype.heapify = function() {\n      return heapify(this.nodes, this.cmp);\n    };\n\n    Heap.prototype.updateItem = function(x) {\n      return updateItem(this.nodes, x, this.cmp);\n    };\n\n    Heap.prototype.clear = function() {\n      return this.nodes = [];\n    };\n\n    Heap.prototype.empty = function() {\n      return this.nodes.length === 0;\n    };\n\n    Heap.prototype.size = function() {\n      return this.nodes.length;\n    };\n\n    Heap.prototype.clone = function() {\n      var heap;\n      heap = new Heap();\n      heap.nodes = this.nodes.slice(0);\n      return heap;\n    };\n\n    Heap.prototype.toArray = function() {\n      return this.nodes.slice(0);\n    };\n\n    Heap.prototype.insert = Heap.prototype.push;\n\n    Heap.prototype.top = Heap.prototype.peek;\n\n    Heap.prototype.front = Heap.prototype.peek;\n\n    Heap.prototype.has = Heap.prototype.contains;\n\n    Heap.prototype.copy = Heap.prototype.clone;\n\n    return Heap;\n\n  })();\n\n  (function(root, factory) {\n    if (typeof define === 'function' && define.amd) {\n      return define([], factory);\n    } else if (typeof exports === 'object') {\n      return module.exports = factory();\n    } else {\n      return root.Heap = factory();\n    }\n  })(this, function() {\n    return Heap;\n  });\n\n}).call(this);\n","module.exports = require('./lib/heap');\n","import Heap from 'heap';\n\nexport default class Cluster {\n  constructor() {\n    this.children = [];\n    this.height = 0;\n    this.size = 1;\n    this.index = -1;\n    this.isLeaf = false;\n  }\n\n  /**\n   * Creates an array of clusters where the maximum height is smaller than the threshold\n   * @param {number} threshold\n   * @return {Array<Cluster>}\n   */\n  cut(threshold) {\n    if (typeof threshold !== 'number') {\n      throw new TypeError('threshold must be a number');\n    }\n    if (threshold < 0) {\n      throw new RangeError('threshold must be a positive number');\n    }\n    let list = [this];\n    const ans = [];\n    while (list.length > 0) {\n      const aux = list.shift();\n      if (threshold >= aux.height) {\n        ans.push(aux);\n      } else {\n        list = list.concat(aux.children);\n      }\n    }\n    return ans;\n  }\n\n  /**\n   * Merge the leaves in the minimum way to have `groups` number of clusters.\n   * @param {number} groups - Them number of children the first level of the tree should have.\n   * @return {Cluster}\n   */\n  group(groups) {\n    if (!Number.isInteger(groups) || groups < 1) {\n      throw new RangeError('groups must be a positive integer');\n    }\n\n    const heap = new Heap((a, b) => {\n      return b.height - a.height;\n    });\n\n    heap.push(this);\n\n    while (heap.size() < groups) {\n      var first = heap.pop();\n      if (first.children.length === 0) {\n        break;\n      }\n      first.children.forEach((child) => heap.push(child));\n    }\n\n    var root = new Cluster();\n    root.children = heap.toArray();\n    root.height = this.height;\n\n    return root;\n  }\n\n  /**\n   * Traverses the tree depth-first and calls the provided callback with each individual node\n   * @param {function} cb - The callback to be called on each node encounter\n   */\n  traverse(cb) {\n    function visit(root, callback) {\n      callback(root);\n      if (root.children) {\n        for (const child of root.children) {\n          visit(child, callback);\n        }\n      }\n    }\n    visit(this, cb);\n  }\n\n  /**\n   * Returns a list of indices for all the leaves of this cluster.\n   * The list is ordered in such a way that a dendrogram could be drawn without crossing branches.\n   * @returns {Array<number>}\n   */\n  indices() {\n    const result = [];\n    this.traverse((cluster) => {\n      if (cluster.isLeaf) {\n        result.push(cluster.index);\n      }\n    });\n    return result;\n  }\n}\n","import { euclidean } from 'ml-distance-euclidean';\nimport getDistanceMatrix from 'ml-distance-matrix';\nimport { Matrix } from 'ml-matrix';\n\nimport Cluster from './Cluster';\n\nfunction singleLink(dKI, dKJ) {\n  return Math.min(dKI, dKJ);\n}\n\nfunction completeLink(dKI, dKJ) {\n  return Math.max(dKI, dKJ);\n}\n\nfunction averageLink(dKI, dKJ, dIJ, ni, nj) {\n  const ai = ni / (ni + nj);\n  const aj = nj / (ni + nj);\n  return ai * dKI + aj * dKJ;\n}\n\nfunction weightedAverageLink(dKI, dKJ) {\n  return (dKI + dKJ) / 2;\n}\n\nfunction centroidLink(dKI, dKJ, dIJ, ni, nj) {\n  const ai = ni / (ni + nj);\n  const aj = nj / (ni + nj);\n  const b = -(ni * nj) / (ni + nj) ** 2;\n  return ai * dKI + aj * dKJ + b * dIJ;\n}\n\nfunction medianLink(dKI, dKJ, dIJ) {\n  return dKI / 2 + dKJ / 2 - dIJ / 4;\n}\n\nfunction wardLink(dKI, dKJ, dIJ, ni, nj, nk) {\n  const ai = (ni + nk) / (ni + nj + nk);\n  const aj = (nj + nk) / (ni + nj + nk);\n  const b = -nk / (ni + nj + nk);\n  return ai * dKI + aj * dKJ + b * dIJ;\n}\n\nfunction wardLink2(dKI, dKJ, dIJ, ni, nj, nk) {\n  const ai = (ni + nk) / (ni + nj + nk);\n  const aj = (nj + nk) / (ni + nj + nk);\n  const b = -nk / (ni + nj + nk);\n  return Math.sqrt(ai * dKI * dKI + aj * dKJ * dKJ + b * dIJ * dIJ);\n}\n\n/**\n * Continuously merge nodes that have the least dissimilarity\n * @param {Array<Array<number>>} data - Array of points to be clustered\n * @param {object} [options]\n * @param {Function} [options.distanceFunction]\n * @param {string} [options.method] - Default: `'complete'`\n * @param {boolean} [options.isDistanceMatrix] - Is the input already a distance matrix?\n * @constructor\n */\nexport function agnes(data, options = {}) {\n  const {\n    distanceFunction = euclidean,\n    method = 'complete',\n    isDistanceMatrix = false,\n  } = options;\n\n  let updateFunc;\n  if (!isDistanceMatrix) {\n    data = getDistanceMatrix(data, distanceFunction);\n  }\n  let distanceMatrix = new Matrix(data);\n  const numLeaves = distanceMatrix.rows;\n\n  // allows to use a string or a given function\n  if (typeof method === 'string') {\n    switch (method.toLowerCase()) {\n      case 'single':\n        updateFunc = singleLink;\n        break;\n      case 'complete':\n        updateFunc = completeLink;\n        break;\n      case 'average':\n      case 'upgma':\n        updateFunc = averageLink;\n        break;\n      case 'wpgma':\n        updateFunc = weightedAverageLink;\n        break;\n      case 'centroid':\n      case 'upgmc':\n        updateFunc = centroidLink;\n        break;\n      case 'median':\n      case 'wpgmc':\n        updateFunc = medianLink;\n        break;\n      case 'ward':\n        updateFunc = wardLink;\n        break;\n      case 'ward2':\n        updateFunc = wardLink2;\n        break;\n      default:\n        throw new RangeError(`unknown clustering method: ${method}`);\n    }\n  } else if (typeof method !== 'function') {\n    throw new TypeError('method must be a string or function');\n  }\n\n  let clusters = [];\n  for (let i = 0; i < numLeaves; i++) {\n    const cluster = new Cluster();\n    cluster.isLeaf = true;\n    cluster.index = i;\n    clusters.push(cluster);\n  }\n\n  for (let n = 0; n < numLeaves - 1; n++) {\n    const [row, column, distance] = getSmallestDistance(distanceMatrix);\n    const cluster1 = clusters[row];\n    const cluster2 = clusters[column];\n    const newCluster = new Cluster();\n    newCluster.size = cluster1.size + cluster2.size;\n    newCluster.children.push(cluster1, cluster2);\n    newCluster.height = distance;\n\n    const newClusters = [newCluster];\n    const newDistanceMatrix = new Matrix(\n      distanceMatrix.rows - 1,\n      distanceMatrix.rows - 1,\n    );\n    const previous = (newIndex) =>\n      getPreviousIndex(newIndex, Math.min(row, column), Math.max(row, column));\n\n    for (let i = 1; i < newDistanceMatrix.rows; i++) {\n      const prevI = previous(i);\n      const prevICluster = clusters[prevI];\n      newClusters.push(prevICluster);\n      for (let j = 0; j < i; j++) {\n        if (j === 0) {\n          const dKI = distanceMatrix.get(row, prevI);\n          const dKJ = distanceMatrix.get(prevI, column);\n          const val = updateFunc(\n            dKI,\n            dKJ,\n            distance,\n            cluster1.size,\n            cluster2.size,\n            prevICluster.size,\n          );\n          newDistanceMatrix.set(i, j, val);\n          newDistanceMatrix.set(j, i, val);\n        } else {\n          // Just copy distance from previous matrix\n          const val = distanceMatrix.get(prevI, previous(j));\n          newDistanceMatrix.set(i, j, val);\n          newDistanceMatrix.set(j, i, val);\n        }\n      }\n    }\n\n    clusters = newClusters;\n    distanceMatrix = newDistanceMatrix;\n  }\n\n  return clusters[0];\n}\n\nfunction getSmallestDistance(distance) {\n  let smallest = Infinity;\n  let smallestI = 0;\n  let smallestJ = 0;\n  for (let i = 1; i < distance.rows; i++) {\n    for (let j = 0; j < i; j++) {\n      if (distance.get(i, j) < smallest) {\n        smallest = distance.get(i, j);\n        smallestI = i;\n        smallestJ = j;\n      }\n    }\n  }\n  return [smallestI, smallestJ, smallest];\n}\n\nfunction getPreviousIndex(newIndex, prev1, prev2) {\n  newIndex -= 1;\n  if (newIndex >= prev1) newIndex++;\n  if (newIndex >= prev2) newIndex++;\n  return newIndex;\n}\n","export * from './agnes';\n// export * from './diana';\n// export * from './birch';\n// export * './cure';\n// export * from './chameleon';\n","'use strict';\nimport { squaredEuclidean } from 'ml-distance-euclidean';\nconst defaultOptions = {\n    distanceFunction: squaredEuclidean\n};\nexport default function nearestVector(listVectors, vector, options = defaultOptions) {\n    const distanceFunction = options.distanceFunction || defaultOptions.distanceFunction;\n    const similarityFunction = options.similarityFunction || defaultOptions.similarityFunction;\n    let vectorIndex = -1;\n    if (typeof similarityFunction === 'function') {\n        // maximum similarity\n        let maxSim = Number.MIN_VALUE;\n        for (let j = 0; j < listVectors.length; j++) {\n            const sim = similarityFunction(vector, listVectors[j]);\n            if (sim > maxSim) {\n                maxSim = sim;\n                vectorIndex = j;\n            }\n        }\n    }\n    else if (typeof distanceFunction === 'function') {\n        // minimum distance\n        let minDist = Number.MAX_VALUE;\n        for (let i = 0; i < listVectors.length; i++) {\n            const dist = distanceFunction(vector, listVectors[i]);\n            if (dist < minDist) {\n                minDist = dist;\n                vectorIndex = i;\n            }\n        }\n    }\n    else {\n        throw new Error(\"A similarity or distance function it's required\");\n    }\n    return vectorIndex;\n}\nexport function findNearestVector(vectorList, vector, options = defaultOptions) {\n    const index = nearestVector(vectorList, vector, options);\n    return vectorList[index];\n}\n","import nearestVector from 'ml-nearest-vector';\n\n/**\n * Calculates the distance matrix for a given array of points\n * @ignore\n * @param {Array<Array<number>>} data - the [x,y,z,...] points to cluster\n * @param {function} distance - Distance function to use between the points\n * @return {Array<Array<number>>} - matrix with the distance values\n */\nexport function calculateDistanceMatrix(data, distance) {\n  var distanceMatrix = new Array(data.length);\n  for (var i = 0; i < data.length; ++i) {\n    for (var j = i; j < data.length; ++j) {\n      if (!distanceMatrix[i]) {\n        distanceMatrix[i] = new Array(data.length);\n      }\n      if (!distanceMatrix[j]) {\n        distanceMatrix[j] = new Array(data.length);\n      }\n      const dist = distance(data[i], data[j]);\n      distanceMatrix[i][j] = dist;\n      distanceMatrix[j][i] = dist;\n    }\n  }\n  return distanceMatrix;\n}\n\n/**\n * Updates the cluster identifier based in the new data\n * @ignore\n * @param {Array<Array<number>>} data - the [x,y,z,...] points to cluster\n * @param {Array<Array<number>>} centers - the K centers in format [x,y,z,...]\n * @param {Array <number>} clusterID - the cluster identifier for each data dot\n * @param {function} distance - Distance function to use between the points\n * @return {Array} the cluster identifier for each data dot\n */\nexport function updateClusterID(data, centers, clusterID, distance) {\n  for (var i = 0; i < data.length; i++) {\n    clusterID[i] = nearestVector(centers, data[i], {\n      distanceFunction: distance\n    });\n  }\n  return clusterID;\n}\n\n/**\n * Update the center values based in the new configurations of the clusters\n * @ignore\n * @param {Array<Array<number>>} prevCenters - Centroids from the previous iteration\n * @param {Array <Array <number>>} data - the [x,y,z,...] points to cluster\n * @param {Array <number>} clusterID - the cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @return {Array} he K centers in format [x,y,z,...]\n */\nexport function updateCenters(prevCenters, data, clusterID, K) {\n  const nDim = data[0].length;\n\n  // copy previous centers\n  var centers = new Array(K);\n  var centersLen = new Array(K);\n  for (var i = 0; i < K; i++) {\n    centers[i] = new Array(nDim);\n    centersLen[i] = 0;\n    for (var j = 0; j < nDim; j++) {\n      centers[i][j] = 0;\n    }\n  }\n\n  // add the value for all dimensions of the point\n  for (var l = 0; l < data.length; l++) {\n    centersLen[clusterID[l]]++;\n    for (var dim = 0; dim < nDim; dim++) {\n      centers[clusterID[l]][dim] += data[l][dim];\n    }\n  }\n\n  // divides by length\n  for (var id = 0; id < K; id++) {\n    for (var d = 0; d < nDim; d++) {\n      if (centersLen[id]) {\n        centers[id][d] /= centersLen[id];\n      } else {\n        centers[id][d] = prevCenters[id][d];\n      }\n    }\n  }\n  return centers;\n}\n\n/**\n * The centers have moved more than the tolerance value?\n * @ignore\n * @param {Array<Array<number>>} centers - the K centers in format [x,y,z,...]\n * @param {Array<Array<number>>} oldCenters - the K old centers in format [x,y,z,...]\n * @param {function} distanceFunction - Distance function to use between the points\n * @param {number} tolerance - Allowed distance for the centroids to move\n * @return {boolean}\n */\nexport function hasConverged(centers, oldCenters, distanceFunction, tolerance) {\n  for (var i = 0; i < centers.length; i++) {\n    if (distanceFunction(centers[i], oldCenters[i]) > tolerance) {\n      return false;\n    }\n  }\n  return true;\n}\n","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiply_uint32(n, m) {\n    n >>>= 0;\n    m >>>= 0;\n    const nlo = n & 0xffff;\n    const nhi = n - nlo;\n    return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport default class XSadd {\n    constructor(seed = Date.now()) {\n        this.state = new Uint32Array(4);\n        this.init(seed);\n        this.random = this.getFloat.bind(this);\n    }\n    /**\n     * Returns a 32-bit integer r (0 <= r < 2^32)\n     */\n    getUint32() {\n        this.nextState();\n        return (this.state[3] + this.state[2]) >>> 0;\n    }\n    /**\n     * Returns a floating point number r (0.0 <= r < 1.0)\n     */\n    getFloat() {\n        return (this.getUint32() >>> 8) * FLOAT_MUL;\n    }\n    init(seed) {\n        if (!Number.isInteger(seed)) {\n            throw new TypeError('seed must be an integer');\n        }\n        this.state[0] = seed;\n        this.state[1] = 0;\n        this.state[2] = 0;\n        this.state[3] = 0;\n        for (let i = 1; i < LOOP; i++) {\n            this.state[i & 3] ^=\n                (i +\n                    multiply_uint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n                    0;\n        }\n        this.periodCertification();\n        for (let i = 0; i < LOOP; i++) {\n            this.nextState();\n        }\n    }\n    periodCertification() {\n        if (this.state[0] === 0 &&\n            this.state[1] === 0 &&\n            this.state[2] === 0 &&\n            this.state[3] === 0) {\n            this.state[0] = 88; // X\n            this.state[1] = 83; // S\n            this.state[2] = 65; // A\n            this.state[3] = 68; // D\n        }\n    }\n    nextState() {\n        let t = this.state[0];\n        t ^= t << sh1;\n        t ^= t >>> sh2;\n        t ^= this.state[3] << sh3;\n        this.state[0] = this.state[1];\n        this.state[1] = this.state[2];\n        this.state[2] = this.state[3];\n        this.state[3] = t;\n    }\n}\n","const PROB_TOLERANCE = 0.00000001;\nfunction randomChoice(values, options = {}, random = Math.random) {\n    const { size = 1, replace = false, probabilities } = options;\n    let valuesArr;\n    let cumSum;\n    if (typeof values === 'number') {\n        valuesArr = getArray(values);\n    }\n    else {\n        valuesArr = values.slice();\n    }\n    if (probabilities) {\n        if (!replace) {\n            throw new Error('choice with probabilities and no replacement is not implemented');\n        }\n        // check input is sane\n        if (probabilities.length !== valuesArr.length) {\n            throw new Error('the length of probabilities option should be equal to the number of choices');\n        }\n        cumSum = [probabilities[0]];\n        for (let i = 1; i < probabilities.length; i++) {\n            cumSum[i] = cumSum[i - 1] + probabilities[i];\n        }\n        if (Math.abs(1 - cumSum[cumSum.length - 1]) > PROB_TOLERANCE) {\n            throw new Error(`probabilities should sum to 1, but instead sums to ${cumSum[cumSum.length - 1]}`);\n        }\n    }\n    if (replace === false && size > valuesArr.length) {\n        throw new Error('size option is too large');\n    }\n    const result = [];\n    for (let i = 0; i < size; i++) {\n        const index = randomIndex(valuesArr.length, random, cumSum);\n        result.push(valuesArr[index]);\n        if (!replace) {\n            valuesArr.splice(index, 1);\n        }\n    }\n    return result;\n}\nfunction getArray(n) {\n    const arr = [];\n    for (let i = 0; i < n; i++) {\n        arr.push(i);\n    }\n    return arr;\n}\nfunction randomIndex(n, random, cumSum) {\n    const rand = random();\n    if (!cumSum) {\n        return Math.floor(rand * n);\n    }\n    else {\n        let idx = 0;\n        while (rand > cumSum[idx]) {\n            idx++;\n        }\n        return idx;\n    }\n}\nexport default randomChoice;\n","// tslint:disable-next-line\nimport XSAdd from 'ml-xsadd';\nimport choice from './choice';\n/**\n * @classdesc Random class\n */\nexport default class Random {\n    /**\n     * @param [seedOrRandom=Math.random] - Control the random number generator used by the Random class instance. Pass a random number generator function with a uniform distribution over the half-open interval [0, 1[. If seed will pass it to ml-xsadd to create a seeded random number generator. If undefined will use Math.random.\n     */\n    constructor(seedOrRandom = Math.random) {\n        if (typeof seedOrRandom === 'number') {\n            const xsadd = new XSAdd(seedOrRandom);\n            this.randomGenerator = xsadd.random;\n        }\n        else {\n            this.randomGenerator = seedOrRandom;\n        }\n    }\n    choice(values, options) {\n        if (typeof values === 'number') {\n            return choice(values, options, this.randomGenerator);\n        }\n        return choice(values, options, this.randomGenerator);\n    }\n    /**\n     * Draw a random number from a uniform distribution on [0,1)\n     * @return The random number\n     */\n    random() {\n        return this.randomGenerator();\n    }\n    /**\n     * Draw a random integer from a uniform distribution on [low, high). If only low is specified, the number is drawn on [0, low)\n     * @param low - The lower bound of the uniform distribution interval.\n     * @param high - The higher bound of the uniform distribution interval.\n     */\n    randInt(low, high) {\n        if (high === undefined) {\n            high = low;\n            low = 0;\n        }\n        return low + Math.floor(this.randomGenerator() * (high - low));\n    }\n    /**\n     * Draw several random number from a uniform distribution on [0, 1)\n     * @param size - The number of number to draw\n     * @return - The list of drawn numbers.\n     */\n    randomSample(size) {\n        const result = [];\n        for (let i = 0; i < size; i++) {\n            result.push(this.random());\n        }\n        return result;\n    }\n}\n","import Random from 'ml-random';\nimport { squaredEuclidean } from 'ml-distance-euclidean';\nimport { Matrix } from 'ml-matrix';\n\n/**\n * Choose K different random points from the original data\n * @ignore\n * @param {Array<Array<number>>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - number of clusters\n * @param {number} seed - seed for random number generation\n * @return {Array<Array<number>>} - Initial random points\n */\nexport function random(data, K, seed) {\n  const random = new Random(seed);\n  return random.choice(data, { size: K });\n}\n\n/**\n * Chooses the most distant points to a first random pick\n * @ignore\n * @param {Array<Array<number>>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - number of clusters\n * @param {Array<Array<number>>} distanceMatrix - matrix with the distance values\n * @param {number} seed - seed for random number generation\n * @return {Array<Array<number>>} - Initial random points\n */\nexport function mostDistant(data, K, distanceMatrix, seed) {\n  const random = new Random(seed);\n  var ans = new Array(K);\n  // chooses a random point as initial cluster\n  ans[0] = Math.floor(random.random() * data.length);\n\n  if (K > 1) {\n    // chooses the more distant point\n    var maxDist = { dist: -1, index: -1 };\n    for (var l = 0; l < data.length; ++l) {\n      if (distanceMatrix[ans[0]][l] > maxDist.dist) {\n        maxDist.dist = distanceMatrix[ans[0]][l];\n        maxDist.index = l;\n      }\n    }\n    ans[1] = maxDist.index;\n\n    if (K > 2) {\n      // chooses the set of points that maximises the min distance\n      for (var k = 2; k < K; ++k) {\n        var center = { dist: -1, index: -1 };\n        for (var m = 0; m < data.length; ++m) {\n          // minimum distance to centers\n          var minDistCent = { dist: Number.MAX_VALUE, index: -1 };\n          for (var n = 0; n < k; ++n) {\n            if (\n              distanceMatrix[n][m] < minDistCent.dist &&\n              ans.indexOf(m) === -1\n            ) {\n              minDistCent = {\n                dist: distanceMatrix[n][m],\n                index: m\n              };\n            }\n          }\n\n          if (\n            minDistCent.dist !== Number.MAX_VALUE &&\n            minDistCent.dist > center.dist\n          ) {\n            center = Object.assign({}, minDistCent);\n          }\n        }\n\n        ans[k] = center.index;\n      }\n    }\n  }\n\n  return ans.map((index) => data[index]);\n}\n\n// Implementation inspired from scikit\nexport function kmeanspp(X, K, options = {}) {\n  X = new Matrix(X);\n  const nSamples = X.rows;\n  const random = new Random(options.seed);\n  // Set the number of trials\n  const centers = [];\n  const localTrials = options.localTrials || 2 + Math.floor(Math.log(K));\n\n  // Pick the first center at random from the dataset\n  const firstCenterIdx = random.randInt(nSamples);\n  centers.push(X.getRow(firstCenterIdx));\n\n  // Init closest distances\n  let closestDistSquared = new Matrix(1, X.rows);\n  for (let i = 0; i < X.rows; i++) {\n    closestDistSquared.set(0, i, squaredEuclidean(X.getRow(i), centers[0]));\n  }\n  let cumSumClosestDistSquared = [cumSum(closestDistSquared.getRow(0))];\n  const factor = 1 / cumSumClosestDistSquared[0][nSamples - 1];\n  let probabilities = Matrix.mul(closestDistSquared, factor);\n\n  // Iterate over the remaining centers\n  for (let i = 1; i < K; i++) {\n    const candidateIdx = random.choice(nSamples, {\n      replace: true,\n      size: localTrials,\n      probabilities: probabilities[0]\n    });\n\n    const candidates = X.selection(candidateIdx, range(X.columns));\n    const distanceToCandidates = euclideanDistances(candidates, X);\n\n    let bestCandidate;\n    let bestPot;\n    let bestDistSquared;\n\n    for (let j = 0; j < localTrials; j++) {\n      const newDistSquared = Matrix.min(closestDistSquared, [distanceToCandidates.getRow(j)]);\n      const newPot = newDistSquared.sum();\n      if (bestCandidate === undefined || newPot < bestPot) {\n        bestCandidate = candidateIdx[j];\n        bestPot = newPot;\n        bestDistSquared = newDistSquared;\n      }\n    }\n    centers[i] = X.getRow(bestCandidate);\n    closestDistSquared = bestDistSquared;\n    cumSumClosestDistSquared = [cumSum(closestDistSquared.getRow(0))];\n    probabilities = Matrix.mul(\n      closestDistSquared,\n      1 / cumSumClosestDistSquared[0][nSamples - 1]\n    );\n  }\n  return centers;\n}\n\nfunction euclideanDistances(A, B) {\n  const result = new Matrix(A.rows, B.rows);\n  for (let i = 0; i < A.rows; i++) {\n    for (let j = 0; j < B.rows; j++) {\n      result.set(i, j, squaredEuclidean(A.getRow(i), B.getRow(j)));\n    }\n  }\n  return result;\n}\n\nfunction range(l) {\n  let r = [];\n  for (let i = 0; i < l; i++) {\n    r.push(i);\n  }\n  return r;\n}\n\nfunction cumSum(arr) {\n  let cumSum = [arr[0]];\n  for (let i = 1; i < arr.length; i++) {\n    cumSum[i] = cumSum[i - 1] + arr[i];\n  }\n  return cumSum;\n}\n","import { updateClusterID } from './utils';\n\nconst distanceSymbol = Symbol('distance');\n\nexport default class KMeansResult {\n  /**\n   * Result of the kmeans algorithm\n   * @param {Array<number>} clusters - the cluster identifier for each data dot\n   * @param {Array<Array<object>>} centroids - the K centers in format [x,y,z,...], the error and size of the cluster\n   * @param {boolean} converged - Converge criteria satisfied\n   * @param {number} iterations - Current number of iterations\n   * @param {function} distance - (*Private*) Distance function to use between the points\n   * @constructor\n   */\n  constructor(clusters, centroids, converged, iterations, distance) {\n    this.clusters = clusters;\n    this.centroids = centroids;\n    this.converged = converged;\n    this.iterations = iterations;\n    this[distanceSymbol] = distance;\n  }\n\n  /**\n   * Allows to compute for a new array of points their cluster id\n   * @param {Array<Array<number>>} data - the [x,y,z,...] points to cluster\n   * @return {Array<number>} - cluster id for each point\n   */\n  nearest(data) {\n    const clusterID = new Array(data.length);\n    const centroids = this.centroids.map(function (centroid) {\n      return centroid.centroid;\n    });\n    return updateClusterID(data, centroids, clusterID, this[distanceSymbol]);\n  }\n\n  /**\n   * Returns a KMeansResult with the error and size of the cluster\n   * @ignore\n   * @param {Array<Array<number>>} data - the [x,y,z,...] points to cluster\n   * @return {KMeansResult}\n   */\n  computeInformation(data) {\n    var enrichedCentroids = this.centroids.map(function (centroid) {\n      return {\n        centroid: centroid,\n        error: 0,\n        size: 0\n      };\n    });\n\n    for (var i = 0; i < data.length; i++) {\n      enrichedCentroids[this.clusters[i]].error += this[distanceSymbol](\n        data[i],\n        this.centroids[this.clusters[i]]\n      );\n      enrichedCentroids[this.clusters[i]].size++;\n    }\n\n    for (var j = 0; j < this.centroids.length; j++) {\n      if (enrichedCentroids[j].size) {\n        enrichedCentroids[j].error /= enrichedCentroids[j].size;\n      } else {\n        enrichedCentroids[j].error = null;\n      }\n    }\n\n    return new KMeansResult(\n      this.clusters,\n      enrichedCentroids,\n      this.converged,\n      this.iterations,\n      this[distanceSymbol]\n    );\n  }\n}\n","import { squaredEuclidean } from 'ml-distance-euclidean';\n\nimport {\n  updateClusterID,\n  updateCenters,\n  hasConverged,\n  calculateDistanceMatrix\n} from './utils';\nimport { mostDistant, random, kmeanspp } from './initialization';\nimport KMeansResult from './KMeansResult';\n\nconst defaultOptions = {\n  maxIterations: 100,\n  tolerance: 1e-6,\n  withIterations: false,\n  initialization: 'kmeans++',\n  distanceFunction: squaredEuclidean\n};\n\n/**\n * Each step operation for kmeans\n * @ignore\n * @param {Array<Array<number>>} centers - K centers in format [x,y,z,...]\n * @param {Array<Array<number>>} data - Points [x,y,z,...] to cluster\n * @param {Array<number>} clusterID - Cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n * @param {number} iterations - Current number of iterations\n * @return {KMeansResult}\n */\nfunction step(centers, data, clusterID, K, options, iterations) {\n  clusterID = updateClusterID(\n    data,\n    centers,\n    clusterID,\n    options.distanceFunction\n  );\n  var newCenters = updateCenters(centers, data, clusterID, K);\n  var converged = hasConverged(\n    newCenters,\n    centers,\n    options.distanceFunction,\n    options.tolerance\n  );\n  return new KMeansResult(\n    clusterID,\n    newCenters,\n    converged,\n    iterations,\n    options.distanceFunction\n  );\n}\n\n/**\n * Generator version for the algorithm\n * @ignore\n * @param {Array<Array<number>>} centers - K centers in format [x,y,z,...]\n * @param {Array<Array<number>>} data - Points [x,y,z,...] to cluster\n * @param {Array<number>} clusterID - Cluster identifier for each data dot\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n */\nfunction* kmeansGenerator(centers, data, clusterID, K, options) {\n  var converged = false;\n  var stepNumber = 0;\n  var stepResult;\n  while (!converged && stepNumber < options.maxIterations) {\n    stepResult = step(centers, data, clusterID, K, options, ++stepNumber);\n    yield stepResult.computeInformation(data);\n    converged = stepResult.converged;\n    centers = stepResult.centroids;\n  }\n}\n\n/**\n * K-means algorithm\n * @param {Array<Array<number>>} data - Points in the format to cluster [x,y,z,...]\n * @param {number} K - Number of clusters\n * @param {object} [options] - Option object\n * @param {number} [options.maxIterations = 100] - Maximum of iterations allowed\n * @param {number} [options.tolerance = 1e-6] - Error tolerance\n * @param {boolean} [options.withIterations = false] - Store clusters and centroids for each iteration\n * @param {function} [options.distanceFunction = squaredDistance] - Distance function to use between the points\n * @param {number} [options.seed] - Seed for random initialization.\n * @param {string|Array<Array<number>>} [options.initialization = 'kmeans++'] - K centers in format [x,y,z,...] or a method for initialize the data:\n *  * You can either specify your custom start centroids, or select one of the following initialization method:\n *  * `'kmeans++'` will use the kmeans++ method as described by http://ilpubs.stanford.edu:8090/778/1/2006-13.pdf\n *  * `'random'` will choose K random different values.\n *  * `'mostDistant'` will choose the more distant points to a first random pick\n * @return {KMeansResult} - Cluster identifier for each data dot and centroids with the following fields:\n *  * `'clusters'`: Array of indexes for the clusters.\n *  * `'centroids'`: Array with the resulting centroids.\n *  * `'iterations'`: Number of iterations that took to converge\n */\nexport default function kmeans(data, K, options) {\n  options = Object.assign({}, defaultOptions, options);\n\n  if (K <= 0 || K > data.length || !Number.isInteger(K)) {\n    throw new Error(\n      'K should be a positive integer smaller than the number of points'\n    );\n  }\n\n  var centers;\n  if (Array.isArray(options.initialization)) {\n    if (options.initialization.length !== K) {\n      throw new Error('The initial centers should have the same length as K');\n    } else {\n      centers = options.initialization;\n    }\n  } else {\n    switch (options.initialization) {\n      case 'kmeans++':\n        centers = kmeanspp(data, K, options);\n        break;\n      case 'random':\n        centers = random(data, K, options.seed);\n        break;\n      case 'mostDistant':\n        centers = mostDistant(\n          data,\n          K,\n          calculateDistanceMatrix(data, options.distanceFunction),\n          options.seed\n        );\n        break;\n      default:\n        throw new Error(\n          `Unknown initialization method: \"${options.initialization}\"`\n        );\n    }\n  }\n\n  // infinite loop until convergence\n  if (options.maxIterations === 0) {\n    options.maxIterations = Number.MAX_VALUE;\n  }\n\n  var clusterID = new Array(data.length);\n  if (options.withIterations) {\n    return kmeansGenerator(centers, data, clusterID, K, options);\n  } else {\n    var converged = false;\n    var stepNumber = 0;\n    var stepResult;\n    while (!converged && stepNumber < options.maxIterations) {\n      stepResult = step(centers, data, clusterID, K, options, ++stepNumber);\n      converged = stepResult.converged;\n      centers = stepResult.centroids;\n    }\n    return stepResult.computeInformation(data);\n  }\n}\n","import Matrix from 'ml-matrix';\n\n/**\n * @private\n * Function that retuns an array of matrices of the cases that belong to each class.\n * @param {Matrix} X - dataset\n * @param {Array} y - predictions\n * @return {Array}\n */\nexport function separateClasses(X, y) {\n  var features = X.columns;\n\n  var classes = 0;\n  var totalPerClasses = new Array(10000); // max upperbound of classes\n  for (var i = 0; i < y.length; i++) {\n    if (totalPerClasses[y[i]] === undefined) {\n      totalPerClasses[y[i]] = 0;\n      classes++;\n    }\n    totalPerClasses[y[i]]++;\n  }\n  var separatedClasses = new Array(classes);\n  var currentIndex = new Array(classes);\n  for (i = 0; i < classes; ++i) {\n    separatedClasses[i] = new Matrix(totalPerClasses[i], features);\n    currentIndex[i] = 0;\n  }\n  for (i = 0; i < X.rows; ++i) {\n    separatedClasses[y[i]].setRow(currentIndex[y[i]], X.getRow(i));\n    currentIndex[y[i]]++;\n  }\n  return separatedClasses;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport { separateClasses } from './utils';\n\nexport class GaussianNB {\n  /**\n   * Constructor for the Gaussian Naive Bayes classifier, the parameters here is just for loading purposes.\n   * @constructor\n   * @param {boolean} reload\n   * @param {object} model\n   */\n  constructor(reload, model) {\n    if (reload) {\n      this.means = model.means;\n      this.calculateProbabilities = model.calculateProbabilities;\n    }\n  }\n\n  /**\n   * Function that trains the classifier with a matrix that represents the training set and an array that\n   * represents the label of each row in the training set. the labels must be numbers between 0 to n-1 where\n   * n represents the number of classes.\n   *\n   * WARNING: in the case that one class, all the cases in one or more features have the same value, the\n   * Naive Bayes classifier will not work well.\n   * @param {Matrix|Array} trainingSet\n   * @param {Matrix|Array} trainingLabels\n   */\n  train(trainingSet, trainingLabels) {\n    var C1 = Math.sqrt(2 * Math.PI); // constant to precalculate the squared root\n    trainingSet = Matrix.checkMatrix(trainingSet);\n\n    if (trainingSet.rows !== trainingLabels.length) {\n      throw new RangeError(\n        'the size of the training set and the training labels must be the same.'\n      );\n    }\n\n    var separatedClasses = separateClasses(trainingSet, trainingLabels);\n    var calculateProbabilities = new Array(separatedClasses.length);\n    this.means = new Array(separatedClasses.length);\n    for (var i = 0; i < separatedClasses.length; ++i) {\n      var means = separatedClasses[i].mean('column');\n      var std = separatedClasses[i].standardDeviation('column', {\n        mean: means\n      });\n\n      var logPriorProbability = Math.log(\n        separatedClasses[i].rows / trainingSet.rows\n      );\n      calculateProbabilities[i] = new Array(means.length + 1);\n\n      calculateProbabilities[i][0] = logPriorProbability;\n      for (var j = 1; j < means.length + 1; ++j) {\n        var currentStd = std[j - 1];\n        calculateProbabilities[i][j] = [\n          1 / (C1 * currentStd),\n          -2 * currentStd * currentStd\n        ];\n      }\n\n      this.means[i] = means;\n    }\n\n    this.calculateProbabilities = calculateProbabilities;\n  }\n\n  /**\n   * function that predicts each row of the dataset (must be a matrix).\n   *\n   * @param {Matrix|Array} dataset\n   * @return {Array}\n   */\n  predict(dataset) {\n    dataset = Matrix.checkMatrix(dataset);\n    if (dataset.rows === this.calculateProbabilities[0].length) {\n      throw new RangeError(\n        'the dataset must have the same features as the training set'\n      );\n    }\n\n    var predictions = new Array(dataset.rows);\n\n    for (var i = 0; i < predictions.length; ++i) {\n      predictions[i] = getCurrentClass(\n        dataset.getRow(i),\n        this.means,\n        this.calculateProbabilities\n      );\n    }\n\n    return predictions;\n  }\n\n  /**\n   * Function that export the NaiveBayes model.\n   * @return {object}\n   */\n  toJSON() {\n    return {\n      modelName: 'NaiveBayes',\n      means: this.means,\n      calculateProbabilities: this.calculateProbabilities\n    };\n  }\n\n  /**\n   * Function that create a GaussianNB classifier with the given model.\n   * @param {object} model\n   * @return {GaussianNB}\n   */\n  static load(model) {\n    if (model.modelName !== 'NaiveBayes') {\n      throw new RangeError(\n        'The current model is not a Multinomial Naive Bayes, current model:',\n        model.name\n      );\n    }\n\n    return new GaussianNB(true, model);\n  }\n}\n\n/**\n * @private\n * Function the retrieves a prediction with one case.\n *\n * @param {Array} currentCase\n * @param {Array} mean - Precalculated means of each class trained\n * @param {Array} classes - Precalculated value of each class (Prior probability and probability function of each feature)\n * @return {number}\n */\nfunction getCurrentClass(currentCase, mean, classes) {\n  var maxProbability = 0;\n  var predictedClass = -1;\n\n  // going through all precalculated values for the classes\n  for (var i = 0; i < classes.length; ++i) {\n    var currentProbability = classes[i][0]; // initialize with the prior probability\n    for (var j = 1; j < classes[0][1].length + 1; ++j) {\n      currentProbability += calculateLogProbability(\n        currentCase[j - 1],\n        mean[i][j - 1],\n        classes[i][j][0],\n        classes[i][j][1]\n      );\n    }\n\n    currentProbability = Math.exp(currentProbability);\n    if (currentProbability > maxProbability) {\n      maxProbability = currentProbability;\n      predictedClass = i;\n    }\n  }\n\n  return predictedClass;\n}\n\n/**\n * @private\n * function that retrieves the probability of the feature given the class.\n * @param {number} value - value of the feature.\n * @param {number} mean - mean of the feature for the given class.\n * @param {number} C1 - precalculated value of (1 / (sqrt(2*pi) * std)).\n * @param {number} C2 - precalculated value of (2 * std^2) for the denominator of the exponential.\n * @return {number}\n */\nfunction calculateLogProbability(value, mean, C1, C2) {\n  value = value - mean;\n  return Math.log(C1 * Math.exp((value * value) / C2));\n}\n","import { Matrix } from 'ml-matrix';\n\nimport { separateClasses } from './utils';\n\nexport class MultinomialNB {\n  /**\n   * Constructor for Multinomial Naive Bayes, the model parameter is for load purposes.\n   * @constructor\n   * @param {object} model - for load purposes.\n   */\n  constructor(model) {\n    if (model) {\n      this.conditionalProbability = Matrix.checkMatrix(\n        model.conditionalProbability\n      );\n      this.priorProbability = Matrix.checkMatrix(model.priorProbability);\n    }\n  }\n\n  /**\n   * Train the classifier with the current training set and labels, the labels must be numbers between 0 and n.\n   * @param {Matrix|Array} trainingSet\n   * @param {Array} trainingLabels\n   */\n  train(trainingSet, trainingLabels) {\n    trainingSet = Matrix.checkMatrix(trainingSet);\n\n    if (trainingSet.rows !== trainingLabels.length) {\n      throw new RangeError(\n        'the size of the training set and the training labels must be the same.'\n      );\n    }\n\n    var separateClass = separateClasses(trainingSet, trainingLabels);\n\n    this.priorProbability = new Matrix(separateClass.length, 1);\n\n    for (var i = 0; i < separateClass.length; ++i) {\n      this.priorProbability.set(i, 0, Math.log(\n        separateClass[i].rows / trainingSet.rows\n      ));\n    }\n\n    var features = trainingSet.columns;\n    this.conditionalProbability = new Matrix(separateClass.length, features);\n    for (i = 0; i < separateClass.length; ++i) {\n      var classValues = Matrix.checkMatrix(separateClass[i]);\n      var total = classValues.sum();\n      var divisor = total + features;\n      this.conditionalProbability.setRow(\n        i,\n        Matrix.rowVector(classValues\n          .sum('column'))\n          .add(1)\n          .div(divisor)\n          .apply(matrixLog)\n      );\n    }\n  }\n\n  /**\n   * Retrieves the predictions for the dataset with the current model.\n   * @param {Matrix|Array} dataset\n   * @return {Array} - predictions from the dataset.\n   */\n  predict(dataset) {\n    dataset = Matrix.checkMatrix(dataset);\n    var predictions = new Array(dataset.rows);\n    for (var i = 0; i < dataset.rows; ++i) {\n      var currentElement = dataset.getRowVector(i);\n      const v = Matrix.columnVector(this.conditionalProbability\n        .clone()\n        .mulRowVector(currentElement)\n        .sum('row'));\n      predictions[i] = v\n        .add(this.priorProbability)\n        .maxIndex()[0];\n    }\n\n    return predictions;\n  }\n\n  /**\n   * Function that saves the current model.\n   * @return {object} - model in JSON format.\n   */\n  toJSON() {\n    return {\n      name: 'MultinomialNB',\n      priorProbability: this.priorProbability,\n      conditionalProbability: this.conditionalProbability\n    };\n  }\n\n  /**\n   * Creates a new MultinomialNB from the given model\n   * @param {object} model\n   * @return {MultinomialNB}\n   */\n  static load(model) {\n    if (model.name !== 'MultinomialNB') {\n      throw new RangeError(`${model.name} is not a Multinomial Naive Bayes`);\n    }\n\n    return new MultinomialNB(model);\n  }\n}\n\nfunction matrixLog(i, j) {\n  this.set(i, j, Math.log(this.get(i, j)));\n}\n","/*\n * Original code from:\n *\n * k-d Tree JavaScript - V 1.01\n *\n * https://github.com/ubilabs/kd-tree-javascript\n *\n * @author Mircea Pricop <pricop@ubilabs.net>, 2012\n * @author Martin Kleppe <kleppe@ubilabs.net>, 2012\n * @author Ubilabs http://ubilabs.net, 2012\n * @license MIT License <http://www.opensource.org/licenses/mit-license.php>\n */\n\nfunction Node(obj, dimension, parent) {\n  this.obj = obj;\n  this.left = null;\n  this.right = null;\n  this.parent = parent;\n  this.dimension = dimension;\n}\n\nexport default class KDTree {\n  constructor(points, metric) {\n    // If points is not an array, assume we're loading a pre-built tree\n    if (!Array.isArray(points)) {\n      this.dimensions = points.dimensions;\n      this.root = points;\n      restoreParent(this.root);\n    } else {\n      this.dimensions = new Array(points[0].length);\n      for (var i = 0; i < this.dimensions.length; i++) {\n        this.dimensions[i] = i;\n      }\n      this.root = buildTree(points, 0, null, this.dimensions);\n    }\n    this.metric = metric;\n  }\n\n  // Convert to a JSON serializable structure; this just requires removing\n  // the `parent` property\n  toJSON() {\n    const result = toJSONImpl(this.root, true);\n    result.dimensions = this.dimensions;\n    return result;\n  }\n\n  nearest(point, maxNodes, maxDistance) {\n    const metric = this.metric;\n    const dimensions = this.dimensions;\n    var i;\n\n    const bestNodes = new BinaryHeap(function (e) {\n      return -e[1];\n    });\n\n    function nearestSearch(node) {\n      const dimension = dimensions[node.dimension];\n      const ownDistance = metric(point, node.obj);\n      const linearPoint = {};\n      var bestChild, linearDistance, otherChild, i;\n\n      function saveNode(node, distance) {\n        bestNodes.push([node, distance]);\n        if (bestNodes.size() > maxNodes) {\n          bestNodes.pop();\n        }\n      }\n\n      for (i = 0; i < dimensions.length; i += 1) {\n        if (i === node.dimension) {\n          linearPoint[dimensions[i]] = point[dimensions[i]];\n        } else {\n          linearPoint[dimensions[i]] = node.obj[dimensions[i]];\n        }\n      }\n\n      linearDistance = metric(linearPoint, node.obj);\n\n      if (node.right === null && node.left === null) {\n        if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n          saveNode(node, ownDistance);\n        }\n        return;\n      }\n\n      if (node.right === null) {\n        bestChild = node.left;\n      } else if (node.left === null) {\n        bestChild = node.right;\n      } else {\n        if (point[dimension] < node.obj[dimension]) {\n          bestChild = node.left;\n        } else {\n          bestChild = node.right;\n        }\n      }\n\n      nearestSearch(bestChild);\n\n      if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n        saveNode(node, ownDistance);\n      }\n\n      if (\n        bestNodes.size() < maxNodes ||\n        Math.abs(linearDistance) < bestNodes.peek()[1]\n      ) {\n        if (bestChild === node.left) {\n          otherChild = node.right;\n        } else {\n          otherChild = node.left;\n        }\n        if (otherChild !== null) {\n          nearestSearch(otherChild);\n        }\n      }\n    }\n\n    if (maxDistance) {\n      for (i = 0; i < maxNodes; i += 1) {\n        bestNodes.push([null, maxDistance]);\n      }\n    }\n\n    if (this.root) {\n      nearestSearch(this.root);\n    }\n\n    const result = [];\n    for (i = 0; i < Math.min(maxNodes, bestNodes.content.length); i += 1) {\n      if (bestNodes.content[i][0]) {\n        result.push([bestNodes.content[i][0].obj, bestNodes.content[i][1]]);\n      }\n    }\n    return result;\n  }\n}\n\nfunction toJSONImpl(src) {\n  const dest = new Node(src.obj, src.dimension, null);\n  if (src.left) dest.left = toJSONImpl(src.left);\n  if (src.right) dest.right = toJSONImpl(src.right);\n  return dest;\n}\n\nfunction buildTree(points, depth, parent, dimensions) {\n  const dim = depth % dimensions.length;\n\n  if (points.length === 0) {\n    return null;\n  }\n  if (points.length === 1) {\n    return new Node(points[0], dim, parent);\n  }\n\n  points.sort((a, b) => a[dimensions[dim]] - b[dimensions[dim]]);\n\n  const median = Math.floor(points.length / 2);\n  const node = new Node(points[median], dim, parent);\n  node.left = buildTree(points.slice(0, median), depth + 1, node, dimensions);\n  node.right = buildTree(points.slice(median + 1), depth + 1, node, dimensions);\n\n  return node;\n}\n\nfunction restoreParent(root) {\n  if (root.left) {\n    root.left.parent = root;\n    restoreParent(root.left);\n  }\n\n  if (root.right) {\n    root.right.parent = root;\n    restoreParent(root.right);\n  }\n}\n\n// Binary heap implementation from:\n// http://eloquentjavascript.net/appendix2.html\nclass BinaryHeap {\n  constructor(scoreFunction) {\n    this.content = [];\n    this.scoreFunction = scoreFunction;\n  }\n\n  push(element) {\n    // Add the new element to the end of the array.\n    this.content.push(element);\n    // Allow it to bubble up.\n    this.bubbleUp(this.content.length - 1);\n  }\n\n  pop() {\n    // Store the first element so we can return it later.\n    var result = this.content[0];\n    // Get the element at the end of the array.\n    var end = this.content.pop();\n    // If there are any elements left, put the end element at the\n    // start, and let it sink down.\n    if (this.content.length > 0) {\n      this.content[0] = end;\n      this.sinkDown(0);\n    }\n    return result;\n  }\n\n  peek() {\n    return this.content[0];\n  }\n\n  size() {\n    return this.content.length;\n  }\n\n  bubbleUp(n) {\n    // Fetch the element that has to be moved.\n    var element = this.content[n];\n    // When at 0, an element can not go up any further.\n    while (n > 0) {\n      // Compute the parent element's index, and fetch it.\n      const parentN = Math.floor((n + 1) / 2) - 1;\n      const parent = this.content[parentN];\n      // Swap the elements if the parent is greater.\n      if (this.scoreFunction(element) < this.scoreFunction(parent)) {\n        this.content[parentN] = element;\n        this.content[n] = parent;\n        // Update 'n' to continue at the new position.\n        n = parentN;\n      } else {\n        // Found a parent that is less, no need to move it further.\n        break;\n      }\n    }\n  }\n\n  sinkDown(n) {\n    // Look up the target element and its score.\n    var length = this.content.length;\n    var element = this.content[n];\n    var elemScore = this.scoreFunction(element);\n\n    while (true) {\n      // Compute the indices of the child elements.\n      var child2N = (n + 1) * 2;\n      var child1N = child2N - 1;\n      // This is used to store the new position of the element,\n      // if any.\n      var swap = null;\n      // If the first child exists (is inside the array)...\n      if (child1N < length) {\n        // Look it up and compute its score.\n        var child1 = this.content[child1N];\n        var child1Score = this.scoreFunction(child1);\n        // If the score is less than our element's, we need to swap.\n        if (child1Score < elemScore) {\n          swap = child1N;\n        }\n      }\n      // Do the same checks for the other child.\n      if (child2N < length) {\n        var child2 = this.content[child2N];\n        var child2Score = this.scoreFunction(child2);\n        if (child2Score < (swap === null ? elemScore : child1Score)) {\n          swap = child2N;\n        }\n      }\n\n      // If the element needs to be moved, swap it, and continue.\n      if (swap !== null) {\n        this.content[n] = this.content[swap];\n        this.content[swap] = element;\n        n = swap;\n      } else {\n        // Otherwise, we are done.\n        break;\n      }\n    }\n  }\n}\n","import { euclidean as euclideanDistance } from 'ml-distance-euclidean';\n\nimport KDTree from './KDTree';\n\nexport default class KNN {\n  /**\n   * @param {Array} dataset\n   * @param {Array} labels\n   * @param {object} options\n   * @param {number} [options.k=numberOfClasses + 1] - Number of neighbors to classify.\n   * @param {function} [options.distance=euclideanDistance] - Distance function that takes two parameters.\n   */\n  constructor(dataset, labels, options = {}) {\n    if (dataset === true) {\n      const model = labels;\n      this.kdTree = new KDTree(model.kdTree, options);\n      this.k = model.k;\n      this.classes = new Set(model.classes);\n      this.isEuclidean = model.isEuclidean;\n      return;\n    }\n\n    const classes = new Set(labels);\n\n    const { distance = euclideanDistance, k = classes.size + 1 } = options;\n\n    const points = new Array(dataset.length);\n    for (var i = 0; i < points.length; ++i) {\n      points[i] = dataset[i].slice();\n    }\n\n    for (i = 0; i < labels.length; ++i) {\n      points[i].push(labels[i]);\n    }\n\n    this.kdTree = new KDTree(points, distance);\n    this.k = k;\n    this.classes = classes;\n    this.isEuclidean = distance === euclideanDistance;\n  }\n\n  /**\n   * Create a new KNN instance with the given model.\n   * @param {object} model\n   * @param {function} distance=euclideanDistance - distance function must be provided if the model wasn't trained with euclidean distance.\n   * @return {KNN}\n   */\n  static load(model, distance = euclideanDistance) {\n    if (model.name !== 'KNN') {\n      throw new Error(`invalid model: ${model.name}`);\n    }\n    if (!model.isEuclidean && distance === euclideanDistance) {\n      throw new Error(\n        'a custom distance function was used to create the model. Please provide it again'\n      );\n    }\n    if (model.isEuclidean && distance !== euclideanDistance) {\n      throw new Error(\n        'the model was created with the default distance function. Do not load it with another one'\n      );\n    }\n    return new KNN(true, model, distance);\n  }\n\n  /**\n   * Return a JSON containing the kd-tree model.\n   * @return {object} JSON KNN model.\n   */\n  toJSON() {\n    return {\n      name: 'KNN',\n      kdTree: this.kdTree,\n      k: this.k,\n      classes: Array.from(this.classes),\n      isEuclidean: this.isEuclidean\n    };\n  }\n\n  /**\n   * Predicts the output given the matrix to predict.\n   * @param {Array} dataset\n   * @return {Array} predictions\n   */\n  predict(dataset) {\n    if (Array.isArray(dataset)) {\n      if (typeof dataset[0] === 'number') {\n        return getSinglePrediction(this, dataset);\n      } else if (\n        Array.isArray(dataset[0]) &&\n        typeof dataset[0][0] === 'number'\n      ) {\n        const predictions = new Array(dataset.length);\n        for (var i = 0; i < dataset.length; i++) {\n          predictions[i] = getSinglePrediction(this, dataset[i]);\n        }\n        return predictions;\n      }\n    }\n    throw new TypeError('dataset to predict must be an array or a matrix');\n  }\n}\n\nfunction getSinglePrediction(knn, currentCase) {\n  var nearestPoints = knn.kdTree.nearest(currentCase, knn.k);\n  var pointsPerClass = {};\n  var predictedClass = -1;\n  var maxPoints = -1;\n  var lastElement = nearestPoints[0][0].length - 1;\n\n  for (var element of knn.classes) {\n    pointsPerClass[element] = 0;\n  }\n\n  for (var i = 0; i < nearestPoints.length; ++i) {\n    var currentClass = nearestPoints[i][0][lastElement];\n    var currentPoints = ++pointsPerClass[currentClass];\n    if (currentPoints > maxPoints) {\n      predictedClass = currentClass;\n      maxPoints = currentPoints;\n    }\n  }\n\n  return predictedClass;\n}\n","import Matrix from 'ml-matrix';\n\n/**\n * @private\n * Function that given vector, returns its norm\n * @param {Vector} X\n * @return {number} Norm of the vector\n */\nexport function norm(X) {\n  return Math.sqrt(\n    X.clone()\n      .apply(pow2array)\n      .sum(),\n  );\n}\n\n/**\n * @private\n * Function that pow 2 each element of a Matrix or a Vector,\n * used in the apply method of the Matrix object\n * @param {number} i - index i.\n * @param {number} j - index j.\n * @return {Matrix} The Matrix object modified at the index i, j.\n * */\nexport function pow2array(i, j) {\n  this.set(i, j, this.get(i, j) ** 2);\n}\n\n/**\n * @private\n * Function that normalize the dataset and return the means and\n * standard deviation of each feature.\n * @param {Matrix} dataset\n * @return {object} dataset normalized, means and standard deviations\n */\nexport function featureNormalize(dataset) {\n  let means = dataset.mean('column');\n  let std = dataset.standardDeviation('column', {\n    mean: means,\n    unbiased: true,\n  });\n  let result = Matrix.checkMatrix(dataset).subRowVector(means);\n  return { result: result.divRowVector(std), means: means, std: std };\n}\n\n/**\n * @private\n * Function that initialize an array of matrices.\n * @param {Array} array\n * @param {boolean} isMatrix\n * @return {Array} array with the matrices initialized.\n */\nexport function initializeMatrices(array, isMatrix) {\n  if (isMatrix) {\n    for (let i = 0; i < array.length; ++i) {\n      for (let j = 0; j < array[i].length; ++j) {\n        let elem = array[i][j];\n        array[i][j] = elem !== null ? new Matrix(array[i][j]) : undefined;\n      }\n    }\n  } else {\n    for (let i = 0; i < array.length; ++i) {\n      array[i] = new Matrix(array[i]);\n    }\n  }\n\n  return array;\n}\n","import Matrix from 'ml-matrix';\n\nimport * as Utils from './util/utils';\n\n/**\n * @class PLS\n */\nexport class PLS {\n  /**\n   * Constructor for Partial Least Squares (PLS)\n   * @param {object} options\n   * @param {number} [options.latentVectors] - Number of latent vector to get (if the algorithm doesn't find a good model below the tolerance)\n   * @param {number} [options.tolerance=1e-5]\n   * @param {boolean} [options.scale=true] - rescale dataset using mean.\n   * @param {object} model - for load purposes.\n   */\n  constructor(options, model) {\n    if (options === true) {\n      this.meanX = model.meanX;\n      this.stdDevX = model.stdDevX;\n      this.meanY = model.meanY;\n      this.stdDevY = model.stdDevY;\n      this.PBQ = Matrix.checkMatrix(model.PBQ);\n      this.R2X = model.R2X;\n      this.scale = model.scale;\n      this.scaleMethod = model.scaleMethod;\n      this.tolerance = model.tolerance;\n    } else {\n      let { tolerance = 1e-5, scale = true } = options;\n      this.tolerance = tolerance;\n      this.scale = scale;\n      this.latentVectors = options.latentVectors;\n    }\n  }\n\n  /**\n   * Fits the model with the given data and predictions, in this function is calculated the\n   * following outputs:\n   *\n   * T - Score matrix of X\n   * P - Loading matrix of X\n   * U - Score matrix of Y\n   * Q - Loading matrix of Y\n   * B - Matrix of regression coefficient\n   * W - Weight matrix of X\n   *\n   * @param {Matrix|Array} trainingSet\n   * @param {Matrix|Array} trainingValues\n   */\n  train(trainingSet, trainingValues) {\n    trainingSet = Matrix.checkMatrix(trainingSet);\n    trainingValues = Matrix.checkMatrix(trainingValues);\n\n    if (trainingSet.length !== trainingValues.length) {\n      throw new RangeError(\n        'The number of X rows must be equal to the number of Y rows',\n      );\n    }\n\n    this.meanX = trainingSet.mean('column');\n    this.stdDevX = trainingSet.standardDeviation('column', {\n      mean: this.meanX,\n      unbiased: true,\n    });\n    this.meanY = trainingValues.mean('column');\n    this.stdDevY = trainingValues.standardDeviation('column', {\n      mean: this.meanY,\n      unbiased: true,\n    });\n\n    if (this.scale) {\n      trainingSet = trainingSet\n        .clone()\n        .subRowVector(this.meanX)\n        .divRowVector(this.stdDevX);\n      trainingValues = trainingValues\n        .clone()\n        .subRowVector(this.meanY)\n        .divRowVector(this.stdDevY);\n    }\n\n    if (this.latentVectors === undefined) {\n      this.latentVectors = Math.min(trainingSet.rows - 1, trainingSet.columns);\n    }\n\n    let rx = trainingSet.rows;\n    let cx = trainingSet.columns;\n    let ry = trainingValues.rows;\n    let cy = trainingValues.columns;\n\n    let ssqXcal = trainingSet\n      .clone()\n      .mul(trainingSet)\n      .sum(); // for the r²\n    let sumOfSquaresY = trainingValues\n      .clone()\n      .mul(trainingValues)\n      .sum();\n\n    let tolerance = this.tolerance;\n    let n = this.latentVectors;\n    let T = Matrix.zeros(rx, n);\n    let P = Matrix.zeros(cx, n);\n    let U = Matrix.zeros(ry, n);\n    let Q = Matrix.zeros(cy, n);\n    let B = Matrix.zeros(n, n);\n    let W = P.clone();\n    let k = 0;\n    let t;\n    let w;\n    let q;\n    let p;\n\n    while (Utils.norm(trainingValues) > tolerance && k < n) {\n      let transposeX = trainingSet.transpose();\n      let transposeY = trainingValues.transpose();\n\n      let tIndex = maxSumColIndex(trainingSet.clone().mul(trainingSet));\n      let uIndex = maxSumColIndex(trainingValues.clone().mul(trainingValues));\n\n      let t1 = trainingSet.getColumnVector(tIndex);\n      let u = trainingValues.getColumnVector(uIndex);\n      t = Matrix.zeros(rx, 1);\n\n      while (Utils.norm(t1.clone().sub(t)) > tolerance) {\n        w = transposeX.mmul(u);\n        w.div(Utils.norm(w));\n        t = t1;\n        t1 = trainingSet.mmul(w);\n        q = transposeY.mmul(t1);\n        q.div(Utils.norm(q));\n        u = trainingValues.mmul(q);\n      }\n\n      t = t1;\n      let num = transposeX.mmul(t);\n      let den = t\n        .transpose()\n        .mmul(t)\n        .get(0, 0);\n      p = num.div(den);\n      let pnorm = Utils.norm(p);\n      p.div(pnorm);\n      t.mul(pnorm);\n      w.mul(pnorm);\n\n      num = u.transpose().mmul(t);\n      den = t\n        .transpose()\n        .mmul(t)\n        .get(0, 0);\n      let b = num.div(den).get(0, 0);\n      trainingSet.sub(t.mmul(p.transpose()));\n      trainingValues.sub(\n        t\n          .clone()\n          .mul(b)\n          .mmul(q.transpose()),\n      );\n\n      T.setColumn(k, t);\n      P.setColumn(k, p);\n      U.setColumn(k, u);\n      Q.setColumn(k, q);\n      W.setColumn(k, w);\n\n      B.set(k, k, b);\n      k++;\n    }\n\n    k--;\n    T = T.subMatrix(0, T.rows - 1, 0, k);\n    P = P.subMatrix(0, P.rows - 1, 0, k);\n    U = U.subMatrix(0, U.rows - 1, 0, k);\n    Q = Q.subMatrix(0, Q.rows - 1, 0, k);\n    W = W.subMatrix(0, W.rows - 1, 0, k);\n    B = B.subMatrix(0, k, 0, k);\n\n    this.ssqYcal = sumOfSquaresY;\n    this.E = trainingSet;\n    this.F = trainingValues;\n    this.T = T;\n    this.P = P;\n    this.U = U;\n    this.Q = Q;\n    this.W = W;\n    this.B = B;\n    this.PBQ = P.mmul(B).mmul(Q.transpose());\n    this.R2X = t\n      .transpose()\n      .mmul(t)\n      .mmul(p.transpose().mmul(p))\n      .div(ssqXcal)\n      .get(0, 0);\n  }\n\n  /**\n   * Predicts the behavior of the given dataset.\n   * @param {Matrix|Array} dataset - data to be predicted.\n   * @return {Matrix} - predictions of each element of the dataset.\n   */\n  predict(dataset) {\n    let X = Matrix.checkMatrix(dataset);\n    if (this.scale) {\n      X = X.subRowVector(this.meanX).divRowVector(this.stdDevX);\n    }\n    let Y = X.mmul(this.PBQ);\n    Y = Y.mulRowVector(this.stdDevY).addRowVector(this.meanY);\n    return Y;\n  }\n\n  /**\n   * Returns the explained variance on training of the PLS model\n   * @return {number}\n   */\n  getExplainedVariance() {\n    return this.R2X;\n  }\n\n  /**\n   * Export the current model to JSON.\n   * @return {object} - Current model.\n   */\n  toJSON() {\n    return {\n      name: 'PLS',\n      R2X: this.R2X,\n      meanX: this.meanX,\n      stdDevX: this.stdDevX,\n      meanY: this.meanY,\n      stdDevY: this.stdDevY,\n      PBQ: this.PBQ,\n      tolerance: this.tolerance,\n      scale: this.scale,\n    };\n  }\n\n  /**\n   * Load a PLS model from a JSON Object\n   * @param {object} model\n   * @return {PLS} - PLS object from the given model\n   */\n  static load(model) {\n    if (model.name !== 'PLS') {\n      throw new RangeError(`Invalid model: ${model.name}`);\n    }\n    return new PLS(true, model);\n  }\n}\n\n/**\n * @private\n * Function that returns the index where the sum of each\n * column vector is maximum.\n * @param {Matrix} data\n * @return {number} index of the maximum\n */\nfunction maxSumColIndex(data) {\n  return Matrix.rowVector(data.sum('column')).maxIndex()[0];\n}\n","import { Matrix, SingularValueDecomposition, inverse } from 'ml-matrix';\n\nimport { initializeMatrices } from './util/utils';\n\n/**\n * @class KOPLS\n */\nexport class KOPLS {\n  /**\n   * Constructor for Kernel-based Orthogonal Projections to Latent Structures (K-OPLS)\n   * @param {object} options\n   * @param {number} [options.predictiveComponents] - Number of predictive components to use.\n   * @param {number} [options.orthogonalComponents] - Number of Y-Orthogonal components.\n   * @param {Kernel} [options.kernel] - Kernel object to apply, see [ml-kernel](https://github.com/mljs/kernel).\n   * @param {object} model - for load purposes.\n   */\n  constructor(options, model) {\n    if (options === true) {\n      this.trainingSet = new Matrix(model.trainingSet);\n      this.YLoadingMat = new Matrix(model.YLoadingMat);\n      this.SigmaPow = new Matrix(model.SigmaPow);\n      this.YScoreMat = new Matrix(model.YScoreMat);\n      this.predScoreMat = initializeMatrices(model.predScoreMat, false);\n      this.YOrthLoadingVec = initializeMatrices(model.YOrthLoadingVec, false);\n      this.YOrthEigen = model.YOrthEigen;\n      this.YOrthScoreMat = initializeMatrices(model.YOrthScoreMat, false);\n      this.toNorm = initializeMatrices(model.toNorm, false);\n      this.TURegressionCoeff = initializeMatrices(\n        model.TURegressionCoeff,\n        false,\n      );\n      this.kernelX = initializeMatrices(model.kernelX, true);\n      this.kernel = model.kernel;\n      this.orthogonalComp = model.orthogonalComp;\n      this.predictiveComp = model.predictiveComp;\n    } else {\n      if (options.predictiveComponents === undefined) {\n        throw new RangeError('no predictive components found!');\n      }\n      if (options.orthogonalComponents === undefined) {\n        throw new RangeError('no orthogonal components found!');\n      }\n      if (options.kernel === undefined) {\n        throw new RangeError('no kernel found!');\n      }\n\n      this.orthogonalComp = options.orthogonalComponents;\n      this.predictiveComp = options.predictiveComponents;\n      this.kernel = options.kernel;\n    }\n  }\n\n  /**\n   * Train the K-OPLS model with the given training set and labels.\n   * @param {Matrix|Array} trainingSet\n   * @param {Matrix|Array} trainingValues\n   */\n  train(trainingSet, trainingValues) {\n    trainingSet = Matrix.checkMatrix(trainingSet);\n    trainingValues = Matrix.checkMatrix(trainingValues);\n\n    // to save and compute kernel with the prediction dataset.\n    this.trainingSet = trainingSet.clone();\n\n    let kernelX = this.kernel.compute(trainingSet);\n\n    let Identity = Matrix.eye(kernelX.rows, kernelX.rows, 1);\n    let temp = kernelX;\n    kernelX = new Array(this.orthogonalComp + 1);\n    for (let i = 0; i < this.orthogonalComp + 1; i++) {\n      kernelX[i] = new Array(this.orthogonalComp + 1);\n    }\n    kernelX[0][0] = temp;\n\n    let result = new SingularValueDecomposition(\n      trainingValues\n        .transpose()\n        .mmul(kernelX[0][0])\n        .mmul(trainingValues),\n      {\n        computeLeftSingularVectors: true,\n        computeRightSingularVectors: false,\n      },\n    );\n    let YLoadingMat = result.leftSingularVectors;\n    let Sigma = result.diagonalMatrix;\n\n    YLoadingMat = YLoadingMat.subMatrix(\n      0,\n      YLoadingMat.rows - 1,\n      0,\n      this.predictiveComp - 1,\n    );\n    Sigma = Sigma.subMatrix(\n      0,\n      this.predictiveComp - 1,\n      0,\n      this.predictiveComp - 1,\n    );\n\n    let YScoreMat = trainingValues.mmul(YLoadingMat);\n\n    let predScoreMat = new Array(this.orthogonalComp + 1);\n    let TURegressionCoeff = new Array(this.orthogonalComp + 1);\n    let YOrthScoreMat = new Array(this.orthogonalComp);\n    let YOrthLoadingVec = new Array(this.orthogonalComp);\n    let YOrthEigen = new Array(this.orthogonalComp);\n    let YOrthScoreNorm = new Array(this.orthogonalComp);\n\n    let SigmaPow = Matrix.pow(Sigma, -0.5);\n    // to avoid errors, check infinity\n    SigmaPow.apply(function(i, j) {\n      if (this.get(i, j) === Infinity) {\n        this.set(i, j, 0);\n      }\n    });\n\n    for (let i = 0; i < this.orthogonalComp; ++i) {\n      predScoreMat[i] = kernelX[0][i]\n        .transpose()\n        .mmul(YScoreMat)\n        .mmul(SigmaPow);\n\n      let TpiPrime = predScoreMat[i].transpose();\n      TURegressionCoeff[i] = inverse(TpiPrime.mmul(predScoreMat[i]))\n        .mmul(TpiPrime)\n        .mmul(YScoreMat);\n\n      result = new SingularValueDecomposition(\n        TpiPrime.mmul(\n          Matrix.sub(kernelX[i][i], predScoreMat[i].mmul(TpiPrime)),\n        ).mmul(predScoreMat[i]),\n        {\n          computeLeftSingularVectors: true,\n          computeRightSingularVectors: false,\n        },\n      );\n      let CoTemp = result.leftSingularVectors;\n      let SoTemp = result.diagonalMatrix;\n\n      YOrthLoadingVec[i] = CoTemp.subMatrix(0, CoTemp.rows - 1, 0, 0);\n      YOrthEigen[i] = SoTemp.get(0, 0);\n\n      YOrthScoreMat[i] = Matrix.sub(\n        kernelX[i][i],\n        predScoreMat[i].mmul(TpiPrime),\n      )\n        .mmul(predScoreMat[i])\n        .mmul(YOrthLoadingVec[i])\n        .mul(Math.pow(YOrthEigen[i], -0.5));\n\n      let toiPrime = YOrthScoreMat[i].transpose();\n      YOrthScoreNorm[i] = Matrix.sqrt(toiPrime.mmul(YOrthScoreMat[i]));\n\n      YOrthScoreMat[i] = YOrthScoreMat[i].divRowVector(YOrthScoreNorm[i]);\n\n      let ITo = Matrix.sub(\n        Identity,\n        YOrthScoreMat[i].mmul(YOrthScoreMat[i].transpose()),\n      );\n\n      kernelX[0][i + 1] = kernelX[0][i].mmul(ITo);\n      kernelX[i + 1][i + 1] = ITo.mmul(kernelX[i][i]).mmul(ITo);\n    }\n\n    let lastScoreMat = (predScoreMat[this.orthogonalComp] = kernelX[0][\n      this.orthogonalComp\n    ]\n      .transpose()\n      .mmul(YScoreMat)\n      .mmul(SigmaPow));\n\n    let lastTpPrime = lastScoreMat.transpose();\n    TURegressionCoeff[this.orthogonalComp] = inverse(\n      lastTpPrime.mmul(lastScoreMat),\n    )\n      .mmul(lastTpPrime)\n      .mmul(YScoreMat);\n\n    this.YLoadingMat = YLoadingMat;\n    this.SigmaPow = SigmaPow;\n    this.YScoreMat = YScoreMat;\n    this.predScoreMat = predScoreMat;\n    this.YOrthLoadingVec = YOrthLoadingVec;\n    this.YOrthEigen = YOrthEigen;\n    this.YOrthScoreMat = YOrthScoreMat;\n    this.toNorm = YOrthScoreNorm;\n    this.TURegressionCoeff = TURegressionCoeff;\n    this.kernelX = kernelX;\n  }\n\n  /**\n   * Predicts the output given the matrix to predict.\n   * @param {Matrix|Array} toPredict\n   * @return {{y: Matrix, predScoreMat: Array<Matrix>, predYOrthVectors: Array<Matrix>}} predictions\n   */\n  predict(toPredict) {\n    let KTestTrain = this.kernel.compute(toPredict, this.trainingSet);\n\n    let temp = KTestTrain;\n    KTestTrain = new Array(this.orthogonalComp + 1);\n    for (let i = 0; i < this.orthogonalComp + 1; i++) {\n      KTestTrain[i] = new Array(this.orthogonalComp + 1);\n    }\n    KTestTrain[0][0] = temp;\n\n    let YOrthScoreVector = new Array(this.orthogonalComp);\n    let predScoreMat = new Array(this.orthogonalComp);\n\n    let i;\n    for (i = 0; i < this.orthogonalComp; ++i) {\n      predScoreMat[i] = KTestTrain[i][0]\n        .mmul(this.YScoreMat)\n        .mmul(this.SigmaPow);\n\n      YOrthScoreVector[i] = Matrix.sub(\n        KTestTrain[i][i],\n        predScoreMat[i].mmul(this.predScoreMat[i].transpose()),\n      )\n        .mmul(this.predScoreMat[i])\n        .mmul(this.YOrthLoadingVec[i])\n        .mul(Math.pow(this.YOrthEigen[i], -0.5));\n\n      YOrthScoreVector[i] = YOrthScoreVector[i].divRowVector(this.toNorm[i]);\n\n      let scoreMatPrime = this.YOrthScoreMat[i].transpose();\n      KTestTrain[i + 1][0] = Matrix.sub(\n        KTestTrain[i][0],\n        YOrthScoreVector[i]\n          .mmul(scoreMatPrime)\n          .mmul(this.kernelX[0][i].transpose()),\n      );\n\n      let p1 = Matrix.sub(\n        KTestTrain[i][0],\n        KTestTrain[i][i].mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime),\n      );\n      let p2 = YOrthScoreVector[i].mmul(scoreMatPrime).mmul(this.kernelX[i][i]);\n      let p3 = p2.mmul(this.YOrthScoreMat[i]).mmul(scoreMatPrime);\n\n      KTestTrain[i + 1][i + 1] = p1.sub(p2).add(p3);\n    }\n\n    predScoreMat[i] = KTestTrain[i][0].mmul(this.YScoreMat).mmul(this.SigmaPow);\n    let prediction = predScoreMat[i]\n      .mmul(this.TURegressionCoeff[i])\n      .mmul(this.YLoadingMat.transpose());\n\n    return {\n      prediction: prediction,\n      predScoreMat: predScoreMat,\n      predYOrthVectors: YOrthScoreVector,\n    };\n  }\n\n  /**\n   * Export the current model to JSON.\n   * @return {object} - Current model.\n   */\n  toJSON() {\n    return {\n      name: 'K-OPLS',\n      YLoadingMat: this.YLoadingMat,\n      SigmaPow: this.SigmaPow,\n      YScoreMat: this.YScoreMat,\n      predScoreMat: this.predScoreMat,\n      YOrthLoadingVec: this.YOrthLoadingVec,\n      YOrthEigen: this.YOrthEigen,\n      YOrthScoreMat: this.YOrthScoreMat,\n      toNorm: this.toNorm,\n      TURegressionCoeff: this.TURegressionCoeff,\n      kernelX: this.kernelX,\n      trainingSet: this.trainingSet,\n      orthogonalComp: this.orthogonalComp,\n      predictiveComp: this.predictiveComp,\n    };\n  }\n\n  /**\n   * Load a K-OPLS with the given model.\n   * @param {object} model\n   * @param {Kernel} kernel - kernel used on the model, see [ml-kernel](https://github.com/mljs/kernel).\n   * @return {KOPLS}\n   */\n  static load(model, kernel) {\n    if (model.name !== 'K-OPLS') {\n      throw new RangeError(`Invalid model: ${model.name}`);\n    }\n\n    if (!kernel) {\n      throw new RangeError('You must provide a kernel for the model!');\n    }\n\n    model.kernel = kernel;\n    return new KOPLS(true, model);\n  }\n}\n","/**\n *  Constructs a confusion matrix\n * @class ConfusionMatrix\n * @example\n * const CM = new ConfusionMatrix([[13, 2], [10, 5]], ['cat', 'dog'])\n * @param {Array<Array<number>>} matrix - The confusion matrix, a 2D Array. Rows represent the actual label and columns\n *     the predicted label.\n * @param {Array<any>} labels - Labels of the confusion matrix, a 1D Array\n */\nexport default class ConfusionMatrix {\n  constructor(matrix, labels) {\n    if (matrix.length !== matrix[0].length) {\n      throw new Error('Confusion matrix must be square');\n    }\n    if (labels.length !== matrix.length) {\n      throw new Error(\n        'Confusion matrix and labels should have the same length',\n      );\n    }\n    this.labels = labels;\n    this.matrix = matrix;\n  }\n\n  /**\n   * Construct confusion matrix from the predicted and actual labels (classes). Be sure to provide the arguments in\n   * the correct order!\n   * @param {Array<any>} actual  - The predicted labels of the classification\n   * @param {Array<any>} predicted     - The actual labels of the classification. Has to be of same length as\n   *     predicted.\n   * @param {object} [options] - Additional options\n   * @param {Array<any>} [options.labels] - The list of labels that should be used. If not provided the distinct set\n   *     of labels present in predicted and actual is used. Labels are compared using the strict equality operator\n   *     '==='\n   * @return {ConfusionMatrix} - Confusion matrix\n   */\n  static fromLabels(actual, predicted, options = {}) {\n    if (predicted.length !== actual.length) {\n      throw new Error('predicted and actual must have the same length');\n    }\n    let distinctLabels;\n    if (options.labels) {\n      distinctLabels = new Set(options.labels);\n    } else {\n      distinctLabels = new Set([...actual, ...predicted]);\n    }\n    distinctLabels = Array.from(distinctLabels);\n    if (options.sort) {\n      distinctLabels.sort(options.sort);\n    }\n\n    // Create confusion matrix and fill with 0's\n    const matrix = Array.from({ length: distinctLabels.length });\n    for (let i = 0; i < matrix.length; i++) {\n      matrix[i] = new Array(matrix.length);\n      matrix[i].fill(0);\n    }\n\n    for (let i = 0; i < predicted.length; i++) {\n      const actualIdx = distinctLabels.indexOf(actual[i]);\n      const predictedIdx = distinctLabels.indexOf(predicted[i]);\n      if (actualIdx >= 0 && predictedIdx >= 0) {\n        matrix[actualIdx][predictedIdx]++;\n      }\n    }\n\n    return new ConfusionMatrix(matrix, distinctLabels);\n  }\n\n  /**\n   * Get the confusion matrix\n   * @return {Array<Array<number> >}\n   */\n  getMatrix() {\n    return this.matrix;\n  }\n\n  getLabels() {\n    return this.labels;\n  }\n\n  /**\n   * Get the total number of samples\n   * @return {number}\n   */\n  getTotalCount() {\n    let predicted = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      for (let j = 0; j < this.matrix.length; j++) {\n        predicted += this.matrix[i][j];\n      }\n    }\n    return predicted;\n  }\n\n  /**\n   * Get the total number of true predictions\n   * @return {number}\n   */\n  getTrueCount() {\n    let count = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      count += this.matrix[i][i];\n    }\n    return count;\n  }\n\n  /**\n   * Get the total number of false predictions.\n   * @return {number}\n   */\n  getFalseCount() {\n    return this.getTotalCount() - this.getTrueCount();\n  }\n\n  /**\n   * Get the number of true positive predictions.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getTruePositiveCount(label) {\n    const index = this.getIndex(label);\n    return this.matrix[index][index];\n  }\n\n  /**\n   * Get the number of true negative predictions\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getTrueNegativeCount(label) {\n    const index = this.getIndex(label);\n    let count = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      for (let j = 0; j < this.matrix.length; j++) {\n        if (i !== index && j !== index) {\n          count += this.matrix[i][j];\n        }\n      }\n    }\n    return count;\n  }\n\n  /**\n   * Get the number of false positive predictions.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalsePositiveCount(label) {\n    const index = this.getIndex(label);\n    let count = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      if (i !== index) {\n        count += this.matrix[i][index];\n      }\n    }\n    return count;\n  }\n\n  /**\n   * Get the number of false negative predictions.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalseNegativeCount(label) {\n    const index = this.getIndex(label);\n    let count = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      if (i !== index) {\n        count += this.matrix[index][i];\n      }\n    }\n    return count;\n  }\n\n  /**\n   * Get the number of real positive samples.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getPositiveCount(label) {\n    return this.getTruePositiveCount(label) + this.getFalseNegativeCount(label);\n  }\n\n  /**\n   * Get the number of real negative samples.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getNegativeCount(label) {\n    return this.getTrueNegativeCount(label) + this.getFalsePositiveCount(label);\n  }\n\n  /**\n   * Get the index in the confusion matrix that corresponds to the given label\n   * @param {any} label - The label to search for\n   * @throws if the label is not found\n   * @return {number}\n   */\n  getIndex(label) {\n    const index = this.labels.indexOf(label);\n    if (index === -1) throw new Error('The label does not exist');\n    return index;\n  }\n\n  /**\n   * Get the true positive rate a.k.a. sensitivity. Computes the ratio between the number of true positive predictions and the total number of positive samples.\n   * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number} - The true positive rate [0-1]\n   */\n  getTruePositiveRate(label) {\n    return this.getTruePositiveCount(label) / this.getPositiveCount(label);\n  }\n\n  /**\n   * Get the true negative rate a.k.a. specificity. Computes the ration between the number of true negative predictions and the total number of negative samples.\n   * {@link https://en.wikipedia.org/wiki/Sensitivity_and_specificity}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getTrueNegativeRate(label) {\n    return this.getTrueNegativeCount(label) / this.getNegativeCount(label);\n  }\n\n  /**\n   * Get the positive predictive value a.k.a. precision. Computes TP / (TP + FP)\n   * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getPositivePredictiveValue(label) {\n    const TP = this.getTruePositiveCount(label);\n    return TP / (TP + this.getFalsePositiveCount(label));\n  }\n\n  /**\n   * Negative predictive value\n   * {@link https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getNegativePredictiveValue(label) {\n    const TN = this.getTrueNegativeCount(label);\n    return TN / (TN + this.getFalseNegativeCount(label));\n  }\n\n  /**\n   * False negative rate a.k.a. miss rate.\n   * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalseNegativeRate(label) {\n    return 1 - this.getTruePositiveRate(label);\n  }\n\n  /**\n   * False positive rate a.k.a. fall-out rate.\n   * {@link https://en.wikipedia.org/wiki/Type_I_and_type_II_errors#False_positive_and_false_negative_rates}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalsePositiveRate(label) {\n    return 1 - this.getTrueNegativeRate(label);\n  }\n\n  /**\n   * False discovery rate (FDR)\n   * {@link https://en.wikipedia.org/wiki/False_discovery_rate}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalseDiscoveryRate(label) {\n    const FP = this.getFalsePositiveCount(label);\n    return FP / (FP + this.getTruePositiveCount(label));\n  }\n\n  /**\n   * False omission rate (FOR)\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getFalseOmissionRate(label) {\n    const FN = this.getFalseNegativeCount(label);\n    return FN / (FN + this.getTruePositiveCount(label));\n  }\n\n  /**\n   * F1 score\n   * {@link https://en.wikipedia.org/wiki/F1_score}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getF1Score(label) {\n    const TP = this.getTruePositiveCount(label);\n    return (\n      (2 * TP) /\n      (2 * TP +\n        this.getFalsePositiveCount(label) +\n        this.getFalseNegativeCount(label))\n    );\n  }\n\n  /**\n   * Matthews correlation coefficient (MCC)\n   * {@link https://en.wikipedia.org/wiki/Matthews_correlation_coefficient}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getMatthewsCorrelationCoefficient(label) {\n    const TP = this.getTruePositiveCount(label);\n    const TN = this.getTrueNegativeCount(label);\n    const FP = this.getFalsePositiveCount(label);\n    const FN = this.getFalseNegativeCount(label);\n    return (\n      (TP * TN - FP * FN) /\n      Math.sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN))\n    );\n  }\n\n  /**\n   * Informedness\n   * {@link https://en.wikipedia.org/wiki/Youden%27s_J_statistic}\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getInformedness(label) {\n    return (\n      this.getTruePositiveRate(label) + this.getTrueNegativeRate(label) - 1\n    );\n  }\n\n  /**\n   * Markedness\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {number}\n   */\n  getMarkedness(label) {\n    return (\n      this.getPositivePredictiveValue(label) +\n      this.getNegativePredictiveValue(label) -\n      1\n    );\n  }\n\n  /**\n   * Get the confusion table.\n   * @param {any} label - The label that should be considered \"positive\"\n   * @return {Array<Array<number> >} - The 2x2 confusion table. [[TP, FN], [FP, TN]]\n   */\n  getConfusionTable(label) {\n    return [\n      [this.getTruePositiveCount(label), this.getFalseNegativeCount(label)],\n      [this.getFalsePositiveCount(label), this.getTrueNegativeCount(label)],\n    ];\n  }\n\n  /**\n   * Get total accuracy.\n   * @return {number} - The ratio between the number of true predictions and total number of classifications ([0-1])\n   */\n  getAccuracy() {\n    let correct = 0;\n    let incorrect = 0;\n    for (let i = 0; i < this.matrix.length; i++) {\n      for (let j = 0; j < this.matrix.length; j++) {\n        if (i === j) correct += this.matrix[i][j];\n        else incorrect += this.matrix[i][j];\n      }\n    }\n    return correct / (correct + incorrect);\n  }\n\n  /**\n   * Returns the element in the confusion matrix that corresponds to the given actual and predicted labels.\n   * @param {any} actual - The true label\n   * @param {any} predicted - The predicted label\n   * @return {number} - The element in the confusion matrix\n   */\n  getCount(actual, predicted) {\n    const actualIndex = this.getIndex(actual);\n    const predictedIndex = this.getIndex(predicted);\n    return this.matrix[actualIndex][predictedIndex];\n  }\n\n  /**\n   * Compute the general prediction accuracy\n   * @deprecated Use getAccuracy\n   * @return {number} - The prediction accuracy ([0-1]\n   */\n  get accuracy() {\n    return this.getAccuracy();\n  }\n\n  /**\n   * Compute the number of predicted observations\n   * @deprecated Use getTotalCount\n   * @return {number}\n   */\n  get total() {\n    return this.getTotalCount();\n  }\n}\n","'use strict';\nconst defaultOptions = {\n  mode: 'index'\n};\n\nmodule.exports = function *(M, N, options) {\n  options = Object.assign({}, defaultOptions, options);\n  var a = new Array(N);\n  var c = new Array(M);\n  var b = new Array(N);\n  var p = new Array(N + 2);\n  var x, y, z;\n\n  // init a and b\n  for (var i = 0; i < N; i++) {\n    a[i] = i;\n    if (i < N - M) b[i] = 0;\n    else b[i] = 1;\n  }\n\n  // init c\n  for (i = 0; i < M; i++) {\n    c[i] = N - M + i;\n  }\n\n  // init p\n  for (i = 0; i < p.length; i++) {\n    if (i === 0) p[i] = N + 1;\n    else if (i <= N - M) p[i] = 0;\n    else if (i <= N) p[i] = i - N + M;\n    else p[i] = -2;\n  }\n\n  function twiddle() {\n    var i, j, k;\n    j = 1;\n    while (p[j] <= 0) {\n      j++;\n    }\n    if (p[j - 1] === 0) {\n      for (i = j - 1; i !== 1; i--) {\n        p[i] = -1;\n      }\n      p[j] = 0;\n      x = z = 0;\n      p[1] = 1;\n      y = j - 1;\n    } else {\n      if (j > 1) {\n        p[j - 1] = 0;\n      }\n      do {\n        j++;\n      }\n      while (p[j] > 0);\n      k = j - 1;\n      i = j;\n      while (p[i] === 0) {\n        p[i++] = -1;\n      }\n      if (p[i] === -1) {\n        p[i] = p[k];\n        z = p[k] - 1;\n        x = i - 1;\n        y = k - 1;\n        p[k] = -1;\n      } else {\n        if (i === p[0]) {\n          return 0;\n        } else {\n          p[j] = p[i];\n          z = p[i] - 1;\n          p[i] = 0;\n          x = j - 1;\n          y = i - 1;\n        }\n      }\n    }\n    return 1;\n  }\n\n  if (options.mode === 'index') {\n    yield c.slice();\n    while (twiddle()) {\n      c[z] = a[x];\n      yield c.slice();\n    }\n  } else if (options.mode === 'mask') {\n    yield b.slice();\n    while (twiddle()) {\n      b[x] = 1;\n      b[y] = 0;\n      yield b.slice();\n    }\n  } else {\n    throw new Error('Invalid mode');\n  }\n};\n","/**\n * get folds indexes\n * @param {Array} features\n * @param {Number} k - number of folds, a\n */\nexport function getFolds(features, k = 5) {\n  let N = features.length;\n  let allIdx = new Array(N);\n  for (let i = 0; i < N; i++) {\n    allIdx[i] = i;\n  }\n\n  let l = Math.floor(N / k);\n  // create random k-folds\n  let current = [];\n  let folds = [];\n  while (allIdx.length) {\n    let randi = Math.floor(Math.random() * allIdx.length);\n    current.push(allIdx[randi]);\n    allIdx.splice(randi, 1);\n    if (current.length === l) {\n      folds.push(current);\n      current = [];\n    }\n  }\n  // we push the remaining to the last fold so that the total length is\n  // preserved. Otherwise the Q2 will fail.\n  if (current.length) current.forEach((e) => folds[k - 1].push(e));\n  folds = folds.slice(0, k);\n\n  let foldsIndex = folds.map((x, idx) => ({\n    testIndex: x,\n    trainIndex: [].concat(...folds.filter((el, idx2) => idx2 !== idx)),\n  }));\n  return foldsIndex;\n}\n","/**\n * A function to sample a dataset maintaining classes equilibrated\n * @param {Array} classVector - an array containing class or group information\n * @param {Number} fraction - a fraction of the class to sample\n * @return {Object} - an object with indexes\n */\n\nexport function sampleAClass(classVector, fraction) {\n  // sort the vector\n  let classVectorSorted = JSON.parse(JSON.stringify(classVector));\n  let result = Array.from(Array(classVectorSorted.length).keys()).sort((a, b) =>\n    classVectorSorted[a] < classVectorSorted[b]\n      ? -1\n      : (classVectorSorted[b] < classVectorSorted[a]) | 0,\n  );\n  classVectorSorted.sort((a, b) => (a < b ? -1 : (b < a) | 0));\n\n  // counts the class elements\n  let counts = {};\n  classVectorSorted.forEach((x) => (counts[x] = (counts[x] || 0) + 1));\n\n  // pick a few per class\n  let indexOfSelected = [];\n\n  Object.keys(counts).forEach((e, i) => {\n    let shift = [];\n    Object.values(counts).reduce((a, c, item) => (shift[item] = a + c), 0);\n\n    let arr = [...Array(counts[e]).keys()];\n\n    let r = [];\n    for (let j = 0; j < Math.floor(counts[e] * fraction); j++) {\n      let n = arr[Math.floor(Math.random() * arr.length)];\n      r.push(n);\n      let ind = arr.indexOf(n);\n      arr.splice(ind, 1);\n    }\n\n    if (i === 0) {\n      indexOfSelected = indexOfSelected.concat(r);\n    } else {\n      indexOfSelected = indexOfSelected.concat(r.map((x) => x + shift[i - 1]));\n    }\n  });\n\n  // sort back the index\n  let trainIndex = [];\n  indexOfSelected.forEach((e) => trainIndex.push(result[e]));\n\n  let testIndex = [];\n  let mask = [];\n  classVector.forEach((el, idx) => {\n    if (trainIndex.includes(idx)) {\n      mask.push(true);\n    } else {\n      mask.push(false);\n      testIndex.push(idx);\n    }\n  });\n  return { trainIndex, testIndex, mask };\n}\n","import ConfusionMatrix from 'ml-confusion-matrix';\nimport combinations from 'ml-combinations';\n\nimport { getFolds } from './getFolds.js';\n\nexport { sampleAClass } from './sampleAClass.js';\nexport { getFolds } from './getFolds.js';\n\n/**\n * Performs a leave-one-out cross-validation (LOO-CV) of the given samples. In LOO-CV, 1 observation is used as the\n * validation set while the rest is used as the training set. This is repeated once for each observation. LOO-CV is a\n * special case of LPO-CV. @see leavePout\n * @param {function} Classifier - The classifier's constructor to use for the cross validation. Expect ml-classifier\n *     api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\n\nexport function leaveOneOut(Classifier, features, labels, classifierOptions) {\n  if (typeof labels === 'function') {\n    let callback = labels;\n    labels = features;\n    features = Classifier;\n    return leavePOut(features, labels, 1, callback);\n  }\n  return leavePOut(Classifier, features, labels, classifierOptions, 1);\n}\n\n/**\n * Performs a leave-p-out cross-validation (LPO-CV) of the given samples. In LPO-CV, p observations are used as the\n * validation set while the rest is used as the training set. This is repeated as many times as there are possible\n * ways to combine p observations from the set (unordered without replacement). Be aware that for relatively small\n * data-set size this can require a very large number of training and testing to do!\n * @param {function} Classifier - The classifier's constructor to use for the cross validation. Expect ml-classifier\n *     api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @param {number} p - The size of the validation sub-samples' set\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nexport function leavePOut(Classifier, features, labels, classifierOptions, p) {\n  let callback;\n  if (typeof classifierOptions === 'function') {\n    callback = classifierOptions;\n    p = labels;\n    labels = features;\n    features = Classifier;\n  }\n  check(features, labels);\n  const distinct = getDistinct(labels);\n  const confusionMatrix = initMatrix(distinct.length, distinct.length);\n\n  let N = features.length;\n  let gen = combinations(p, N);\n  let allIdx = new Array(N);\n  for (let i = 0; i < N; i++) {\n    allIdx[i] = i;\n  }\n  for (const testIdx of gen) {\n    let trainIdx = allIdx.slice();\n\n    for (let i = testIdx.length - 1; i >= 0; i--) {\n      trainIdx.splice(testIdx[i], 1);\n    }\n\n    if (callback) {\n      validateWithCallback(\n        features,\n        labels,\n        testIdx,\n        trainIdx,\n        confusionMatrix,\n        distinct,\n        callback,\n      );\n    } else {\n      validate(\n        Classifier,\n        features,\n        labels,\n        classifierOptions,\n        testIdx,\n        trainIdx,\n        confusionMatrix,\n        distinct,\n      );\n    }\n  }\n\n  return new ConfusionMatrix(confusionMatrix, distinct);\n}\n\n/**\n * Performs k-fold cross-validation (KF-CV). KF-CV separates the data-set into k random equally sized partitions, and\n * uses each as a validation set, with all other partitions used in the training set. Observations left over from if k\n * does not divide the number of observations are left out of the cross-validation process.\n * @param {function} Classifier - The classifier's to use for the cross validation. Expect ml-classifier api.\n * @param {Array} features - The features for all samples of the data-set\n * @param {Array} labels - The classification class of all samples of the data-set\n * @param {object} classifierOptions - The classifier options with which the classifier should be instantiated.\n * @param {number} k - The number of partitions to create\n * @return {ConfusionMatrix} - The cross-validation confusion matrix\n */\nexport function kFold(Classifier, features, labels, classifierOptions, k) {\n  let callback;\n  if (typeof classifierOptions === 'function') {\n    callback = classifierOptions;\n    k = labels;\n    labels = features;\n    features = Classifier;\n  }\n  check(features, labels);\n  const distinct = getDistinct(labels);\n  const confusionMatrix = initMatrix(distinct.length, distinct.length);\n\n  let folds = getFolds(features, k);\n\n  for (let i = 0; i < folds.length; i++) {\n    let testIdx = folds[i].testIndex;\n    let trainIdx = folds[i].trainIndex;\n\n    if (callback) {\n      validateWithCallback(\n        features,\n        labels,\n        testIdx,\n        trainIdx,\n        confusionMatrix,\n        distinct,\n        callback,\n      );\n    } else {\n      validate(\n        Classifier,\n        features,\n        labels,\n        classifierOptions,\n        testIdx,\n        trainIdx,\n        confusionMatrix,\n        distinct,\n      );\n    }\n  }\n\n  return new ConfusionMatrix(confusionMatrix, distinct);\n}\n\nfunction check(features, labels) {\n  if (features.length !== labels.length) {\n    throw new Error('features and labels should have the same length');\n  }\n}\n\nfunction initMatrix(rows, columns) {\n  return new Array(rows).fill(0).map(() => new Array(columns).fill(0));\n}\n\nfunction getDistinct(arr) {\n  let s = new Set();\n  for (let i = 0; i < arr.length; i++) {\n    s.add(arr[i]);\n  }\n  return Array.from(s);\n}\n\nfunction validate(\n  Classifier,\n  features,\n  labels,\n  classifierOptions,\n  testIdx,\n  trainIdx,\n  confusionMatrix,\n  distinct,\n) {\n  const { testFeatures, trainFeatures, testLabels, trainLabels } = getTrainTest(\n    features,\n    labels,\n    testIdx,\n    trainIdx,\n  );\n\n  let classifier;\n  if (Classifier.prototype.train) {\n    classifier = new Classifier(classifierOptions);\n    classifier.train(trainFeatures, trainLabels);\n  } else {\n    classifier = new Classifier(trainFeatures, trainLabels, classifierOptions);\n  }\n\n  let predictedLabels = classifier.predict(testFeatures);\n  updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct);\n}\n\nfunction validateWithCallback(\n  features,\n  labels,\n  testIdx,\n  trainIdx,\n  confusionMatrix,\n  distinct,\n  callback,\n) {\n  const { testFeatures, trainFeatures, testLabels, trainLabels } = getTrainTest(\n    features,\n    labels,\n    testIdx,\n    trainIdx,\n  );\n  const predictedLabels = callback(trainFeatures, trainLabels, testFeatures);\n  updateConfusionMatrix(confusionMatrix, testLabels, predictedLabels, distinct);\n}\n\nfunction updateConfusionMatrix(\n  confusionMatrix,\n  testLabels,\n  predictedLabels,\n  distinct,\n) {\n  for (let i = 0; i < predictedLabels.length; i++) {\n    const actualIdx = distinct.indexOf(testLabels[i]);\n    const predictedIdx = distinct.indexOf(predictedLabels[i]);\n    if (actualIdx < 0 || predictedIdx < 0) {\n      // eslint-disable-next-line no-console\n      console.warn(`ignore unknown predicted label ${predictedLabels[i]}`);\n    }\n    confusionMatrix[actualIdx][predictedIdx]++;\n  }\n}\n\nexport function getTrainTest(features, labels, testIdx, trainIdx) {\n  return {\n    testFeatures: testIdx.map(function(index) {\n      return features[index];\n    }),\n    trainFeatures: trainIdx.map(function(index) {\n      return features[index];\n    }),\n    testLabels: testIdx.map(function(index) {\n      return labels[index];\n    }),\n    trainLabels: trainIdx.map(function(index) {\n      return labels[index];\n    }),\n  };\n}\n","import Matrix from 'ml-matrix';\n\nimport { norm } from './util/utils.js';\n\n/**\n * OPLS loop\n * @param {Array} x a matrix with features\n * @param {Array} y an array of labels (dependent variable)\n * @param {Object} options an object with options\n * @return {Object} an object with model (filteredX: err,\n    loadingsXOrtho: pOrtho,\n    scoresXOrtho: tOrtho,\n    weightsXOrtho: wOrtho,\n    weightsPred: w,\n    loadingsXpred: p,\n    scoresXpred: t,\n    loadingsY:)\n */\nexport function OPLSNipals(x, y, options = {}) {\n  const { numberOSC = 100 } = options;\n\n  let X = Matrix.checkMatrix(x);\n  let Y = Matrix.checkMatrix(y);\n\n  let u = Y.getColumnVector(0);\n\n  let diff = 1;\n  let t, c, w, uNew;\n  for (let i = 0; i < numberOSC && diff > 1e-10; i++) {\n    w = u\n      .transpose()\n      .mmul(X)\n      .div(\n        u\n          .transpose()\n          .mmul(u)\n          .get(0, 0),\n      );\n    w = w.transpose().div(norm(w));\n\n    t = X.mmul(w).div(\n      w\n        .transpose()\n        .mmul(w)\n        .get(0, 0),\n    ); // t_h paso 3\n\n    // calc loading\n    c = t\n      .transpose()\n      .mmul(Y)\n      .div(\n        t\n          .transpose()\n          .mmul(t)\n          .get(0, 0),\n      );\n\n    // calc new u and compare with one in previus iteration (stop criterion)\n    uNew = Y.mmul(c.transpose());\n    uNew = uNew.div(\n      c\n        .transpose()\n        .mmul(c)\n        .get(0, 0),\n    );\n\n    if (i > 0) {\n      diff =\n        uNew\n          .clone()\n          .sub(u)\n          .pow(2)\n          .sum() /\n        uNew\n          .clone()\n          .pow(2)\n          .sum();\n    }\n\n    u = uNew.clone();\n  }\n\n  // calc loadings\n  let p = t\n    .transpose()\n    .mmul(X)\n    .div(\n      t\n        .transpose()\n        .mmul(t)\n        .get(0, 0),\n    );\n\n  let wOrtho = p.clone().sub(\n    w\n      .transpose()\n      .mmul(p.transpose())\n      .div(\n        w\n          .transpose()\n          .mmul(w)\n          .get(0, 0),\n      )\n      .mmul(w.transpose()),\n  );\n  wOrtho.div(norm(wOrtho));\n\n  // orthogonal scores\n  let tOrtho = X.mmul(wOrtho.transpose()).div(\n    wOrtho.mmul(wOrtho.transpose()).get(0, 0),\n  );\n\n  // orthogonal loadings\n  let pOrtho = tOrtho\n    .transpose()\n    .mmul(X)\n    .div(\n      tOrtho\n        .transpose()\n        .mmul(tOrtho)\n        .get(0, 0),\n    );\n\n  // filtered data\n  let err = X.clone().sub(tOrtho.mmul(pOrtho));\n  return {\n    filteredX: err,\n    weightsXOrtho: wOrtho,\n    loadingsXOrtho: pOrtho,\n    scoresXOrtho: tOrtho,\n    weightsXPred: w,\n    loadingsXpred: p,\n    scoresXpred: t,\n    loadingsY: c,\n  };\n}\n","import { Matrix } from 'ml-matrix';\n\n/**\n * Get total sum of square\n * @param {Array} x an array\n * @return {Number} - the sum of the squares\n */\nexport function tss(x) {\n  return Matrix.mul(x, x).sum();\n}\n","import { Matrix, NIPALS } from 'ml-matrix';\nimport ConfusionMatrix from 'ml-confusion-matrix';\nimport { getFolds } from 'ml-cross-validation';\n\nimport { OPLSNipals } from './OPLSNipals.js';\nimport { tss } from './util/tss.js';\n\n/**\n * Creates new OPLS (orthogonal partial latent structures) from features and labels.\n * @param {Matrix} data - matrix containing data (X).\n * @param {Array} labels - 1D Array containing metadata (Y).\n * @param {Object} [options]\n * @param {number} [options.nComp = 3] - number of latent structures computed.\n * @param {boolean} [options.center = true] - should the data be centered (subtract the mean).\n * @param {boolean} [options.scale = false] - should the data be scaled (divide by the standard deviation).\n * @param {Array} [options.cvFolds = []] - allows to provide folds as 2D array for testing purpose.\n * */\n\nexport class OPLS {\n  constructor(data, labels, options = {}) {\n    if (data === true) {\n      const opls = options;\n      this.center = opls.center;\n      this.scale = opls.scale;\n      this.means = opls.means;\n      this.meansY = opls.meansY;\n      this.stdevs = opls.stdevs;\n      this.stdevs = opls.stdevsY;\n      this.model = opls.model;\n      this.tCV = opls.tCV;\n      this.tOrthCV = opls.tOrthCV;\n      this.yHatCV = opls.yHatCV;\n      this.mode = opls.mode;\n      return;\n    }\n\n    let features = data.clone();\n    // set default values\n    // cvFolds allows to define folds for testing purpose\n    const { nComp = 3, center = true, scale = true, cvFolds = [] } = options;\n\n    let group;\n    if (typeof labels[0] === 'number') {\n      // numeric labels: OPLS regression is used\n      this.mode = 'regression';\n      group = Matrix.from1DArray(labels.length, 1, labels);\n    } else if (typeof labels[0] === 'string') {\n      // non-numeric labels: OPLS-DA is used\n      this.mode = 'discriminantAnalysis';\n      group = labels;\n      throw new Error('discriminant analysis is not yet supported');\n    }\n\n    // check types of features and labels\n    if (features.constructor.name !== 'Matrix') {\n      throw new TypeError('features must be of class Matrix');\n    }\n    // getting center and scale the features (all)\n    this.center = center;\n    if (this.center) {\n      this.means = features.mean('column');\n      this.meansY = group.mean('column');\n    } else {\n      this.stdevs = null;\n    }\n    this.scale = scale;\n    if (this.scale) {\n      this.stdevs = features.standardDeviation('column');\n      this.stdevsY = group.standardDeviation('column');\n    } else {\n      this.means = null;\n    }\n\n    // check and remove for features with sd = 0 TODO here\n    // check opls.R line 70\n\n    let folds;\n    if (cvFolds.length > 0) {\n      folds = cvFolds;\n    } else {\n      folds = getFolds(labels, 5);\n    }\n\n    let Q2 = [];\n    this.model = [];\n\n    this.tCV = [];\n    this.tOrthCV = [];\n    this.yHatCV = [];\n    let oplsCV = [];\n\n    let modelNC = [];\n\n    // this code could be made more efficient by reverting the order of the loops\n    // this is a legacy loop to be consistent with R code from MetaboMate package\n    // this allows for having statistic (R2) from CV to decide wether to continue\n    // with more latent structures\n    let nc;\n    for (nc = 0; nc < nComp; nc++) {\n      let yHatk = new Matrix(group.rows, 1);\n      let tPredk = new Matrix(group.rows, 1);\n      let tOrthk = new Matrix(group.rows, 1);\n      let oplsk = [];\n\n      let f = 0;\n      for (let fold of folds) {\n        let trainTest = this._getTrainTest(features, group, fold);\n        let testXk = trainTest.testFeatures;\n        let Xk = trainTest.trainFeatures;\n        let Yk = trainTest.trainLabels;\n\n        // determine center and scale of training set\n        let dataCenter = Xk.mean('column');\n        let dataSD = Xk.standardDeviation('column');\n\n        // center and scale training set\n        if (center) {\n          Xk.center('column');\n          Yk.center('column');\n        }\n\n        if (scale) {\n          Xk.scale('column');\n          Yk.scale('column');\n        }\n\n        // perform opls\n        if (nc === 0) {\n          oplsk[f] = OPLSNipals(Xk, Yk);\n        } else {\n          oplsk[f] = OPLSNipals(oplsCV[nc - 1][f].filteredX, Yk);\n        }\n        // store model for next component\n        oplsCV[nc] = oplsk;\n\n        let plsCV = new NIPALS(oplsk[f].filteredX, { Y: Yk });\n\n        // scaling the test dataset with respect to the train\n        testXk.center('column', { center: dataCenter });\n        testXk.scale('column', { scale: dataSD });\n\n        let Eh = testXk;\n        // removing the orthogonal components from PLS\n        let scores;\n        for (let idx = 0; idx < nc + 1; idx++) {\n          scores = Eh.mmul(oplsCV[idx][f].weightsXOrtho.transpose()); // ok\n          Eh.sub(scores.mmul(oplsCV[idx][f].loadingsXOrtho));\n        }\n\n        // prediction\n        let tPred = Eh.mmul(plsCV.w.transpose());\n        // this should be summed over ncomp (pls_prediction.R line 23)\n        let yHat = tPred.mmul(plsCV.betas); // ok\n\n        // adding all prediction from all folds\n        for (let i = 0; i < fold.testIndex.length; i++) {\n          yHatk.setRow(fold.testIndex[i], [yHat.get(i, 0)]);\n          tPredk.setRow(fold.testIndex[i], [tPred.get(i, 0)]);\n          tOrthk.setRow(fold.testIndex[i], [scores.get(i, 0)]);\n        }\n        f++;\n      } // end of loop over folds\n\n      this.tCV.push(tPredk);\n      this.tOrthCV.push(tOrthk);\n      this.yHatCV.push(yHatk);\n\n      // calculate Q2y for all the prediction (all folds)\n      // ROC for DA is not implemented (check opls.R line 183) TODO\n      if (this.mode === 'regression') {\n        let tssy = tss(group.center('column').scale('column'));\n        let press = tss(group.clone().sub(yHatk));\n        let Q2y = 1 - press / tssy;\n        Q2.push(Q2y);\n      } else if (this.mode === 'discriminantAnalysis') {\n        throw new Error('discriminant analysis is not yet supported');\n      }\n\n      // calculate the R2y for the complete data\n      if (nc === 0) {\n        modelNC = this._predictAll(features, group);\n      } else {\n        modelNC = this._predictAll(\n          modelNC.xRes,\n          group,\n          (options = { scale: false, center: false }),\n        );\n      }\n\n      // adding the predictive statistics from CV\n      modelNC.Q2y = Q2;\n      // store the model for each component\n      this.model.push(modelNC);\n      // console.warn(`OPLS iteration over # of Components: ${nc + 1}`);\n    } // end of loop over nc\n\n    // store scores from CV\n    let tCV = this.tCV;\n    let tOrthCV = this.tOrthCV;\n\n    let m = this.model[nc - 1];\n    let XOrth = m.XOrth;\n    let FeaturesCS = features.center('column').scale('column');\n    let labelsCS = group.center('column').scale('column');\n    let Xres = FeaturesCS.clone().sub(XOrth);\n    let plsCall = new NIPALS(Xres, { Y: labelsCS });\n    let E = Xres.clone().sub(plsCall.t.mmul(plsCall.p));\n\n    let R2x = this.model.map((x) => x.R2x);\n    let R2y = this.model.map((x) => x.R2y);\n\n    this.output = {\n      Q2y: Q2,\n      R2x,\n      R2y,\n      tPred: m.plsC.t,\n      pPred: m.plsC.p,\n      wPred: m.plsC.w,\n      betasPred: m.plsC.betas,\n      Qpc: m.plsC.q,\n      tCV,\n      tOrthCV,\n      tOrth: m.tOrth,\n      pOrth: m.pOrth,\n      wOrth: m.wOrth,\n      XOrth,\n      yHat: m.totalPred,\n      Yres: m.plsC.yResidual,\n      E,\n    };\n  }\n\n  /**\n   * get access to all the computed elements\n   * Mainly for debug and testing\n   * @return {Object} output object\n   */\n  getLogs() {\n    return this.output;\n  }\n\n  getScores() {\n    let scoresX = this.tCV.map((x) => x.to1DArray());\n    let scoresY = this.tOrthCV.map((x) => x.to1DArray());\n    return { scoresX, scoresY };\n  }\n\n  /**\n   * Load an OPLS model from JSON\n   * @param {Object} model\n   * @return {OPLS}\n   */\n  static load(model) {\n    if (typeof model.name !== 'string') {\n      throw new TypeError('model must have a name property');\n    }\n    if (model.name !== 'OPLS') {\n      throw new RangeError(`invalid model: ${model.name}`);\n    }\n    return new OPLS(true, [], model);\n  }\n\n  /**\n   * Export the current model to a JSON object\n   * @return {Object} model\n   */\n  toJSON() {\n    return {\n      name: 'OPLS',\n      center: this.center,\n      scale: this.scale,\n      means: this.means,\n      stdevs: this.stdevs,\n      model: this.model,\n      tCV: this.tCV,\n      tOrthCV: this.tOrthCV,\n      yHatCV: this.yHatCV,\n    };\n  }\n\n  /**\n   * Predict scores for new data\n   * @param {Matrix} features - a matrix containing new data\n   * @param {Object} [options]\n   * @param {Array} [options.trueLabel] - an array with true values to compute confusion matrix\n   * @param {Number} [options.nc] - the number of components to be used\n   * @return {Object} - predictions\n   */\n  predict(newData, options = {}) {\n    let { trueLabels = [], nc = 1 } = options;\n    let labels = [];\n    if (trueLabels.length > 0) {\n      trueLabels = Matrix.from1DArray(trueLabels.length, 1, trueLabels);\n      labels = trueLabels.clone();\n    }\n\n    let features = newData.clone();\n\n    // scaling the test dataset with respect to the train\n    if (this.center) {\n      features.center('column', { center: this.means });\n      if (labels.rows > 0 && this.mode === 'regression') {\n        labels.center('column', { center: this.meansY });\n      }\n    }\n    if (this.scale) {\n      features.scale('column', { scale: this.stdevs });\n      if (labels.rows > 0 && this.mode === 'regression') {\n        labels.scale('column', { scale: this.stdevsY });\n      }\n    }\n\n    let Eh = features.clone();\n    // removing the orthogonal components from PLS\n    let tOrth;\n    let wOrth;\n    let pOrth;\n    let yHat;\n    let tPred;\n\n    for (let idx = 0; idx < nc; idx++) {\n      wOrth = this.model[idx].wOrth.transpose();\n      pOrth = this.model[idx].pOrth;\n      tOrth = Eh.mmul(wOrth);\n      Eh.sub(tOrth.mmul(pOrth));\n      // prediction\n      tPred = Eh.mmul(this.model[idx].plsC.w.transpose());\n      // this should be summed over ncomp (pls_prediction.R line 23)\n      yHat = tPred.mmul(this.model[idx].plsC.betas);\n    }\n\n    if (labels.rows > 0) {\n      if (this.mode === 'regression') {\n        let tssy = tss(labels);\n        let press = tss(labels.clone().sub(yHat));\n        let Q2y = 1 - press / tssy;\n\n        return { tPred, tOrth, yHat, Q2y };\n      } else if (this.mode === 'discriminantAnalysis') {\n        let confusionMatrix = [];\n        confusionMatrix = ConfusionMatrix.fromLabels(\n          trueLabels.to1DArray(),\n          yHat.to1DArray(),\n        );\n\n        return { tPred, tOrth, yHat, confusionMatrix };\n      }\n    } else {\n      return { tPred, tOrth, yHat };\n    }\n  }\n\n  _predictAll(features, labels, options = {}) {\n    // cannot use the global this.center here\n    // since it is used in the NC loop and\n    // centering and scaling should only be\n    // performed once\n    const { center = true, scale = true } = options;\n\n    if (center) {\n      features.center('column');\n      labels.center('column');\n    }\n\n    if (scale) {\n      features.scale('column');\n      labels.scale('column');\n      // reevaluate tssy and tssx after scaling\n      // must be global because re-used for next nc iteration\n      // tssx is only evaluate the first time\n      this.tssy = tss(labels);\n      this.tssx = tss(features);\n    }\n\n    let oplsC = OPLSNipals(features, labels);\n    let plsC = new NIPALS(oplsC.filteredX, { Y: labels });\n\n    let tPred = oplsC.filteredX.mmul(plsC.w.transpose());\n    let yHat = tPred.mmul(plsC.betas);\n\n    let rss = tss(labels.clone().sub(yHat));\n    let R2y = 1 - rss / this.tssy;\n\n    let xEx = plsC.t.mmul(plsC.p);\n    let rssx = tss(xEx);\n    let R2x = rssx / this.tssx;\n\n    return {\n      R2y,\n      R2x,\n      xRes: oplsC.filteredX,\n      tOrth: oplsC.scoresXOrtho,\n      pOrth: oplsC.loadingsXOrtho,\n      wOrth: oplsC.weightsXOrtho,\n      tPred: tPred,\n      totalPred: yHat,\n      XOrth: oplsC.scoresXOrtho.mmul(oplsC.loadingsXOrtho),\n      oplsC,\n      plsC,\n    };\n  }\n  /**\n   *\n   * @param {*} X - dataset matrix object\n   * @param {*} group - labels matrix object\n   * @param {*} index - train and test index (output from getFold())\n   */\n  _getTrainTest(X, group, index) {\n    let testFeatures = new Matrix(index.testIndex.length, X.columns);\n    let testLabels = new Matrix(index.testIndex.length, 1);\n    index.testIndex.forEach((el, idx) => {\n      testFeatures.setRow(idx, X.getRow(el));\n      testLabels.setRow(idx, group.getRow(el));\n    });\n\n    let trainFeatures = new Matrix(index.trainIndex.length, X.columns);\n    let trainLabels = new Matrix(index.trainIndex.length, 1);\n    index.trainIndex.forEach((el, idx) => {\n      trainFeatures.setRow(idx, X.getRow(el));\n      trainLabels.setRow(idx, group.getRow(el));\n    });\n\n    return {\n      trainFeatures,\n      testFeatures,\n      trainLabels,\n      testLabels,\n    };\n  }\n}\n","'use strict';\n\nvar mlMatrix = require('ml-matrix');\n\nfunction logistic(val) {\n  return 1 / (1 + Math.exp(-val));\n}\n\nfunction expELU(val, param) {\n  return val < 0 ? param * (Math.exp(val) - 1) : val;\n}\n\nfunction softExponential(val, param) {\n  if (param < 0) {\n    return -Math.log(1 - param * (val + param)) / param;\n  }\n  if (param > 0) {\n    return ((Math.exp(param * val) - 1) / param) + param;\n  }\n  return val;\n}\n\nfunction softExponentialPrime(val, param) {\n  if (param < 0) {\n    return 1 / (1 - param * (param + val));\n  } else {\n    return Math.exp(param * val);\n  }\n}\n\nconst ACTIVATION_FUNCTIONS = {\n  tanh: {\n    activation: Math.tanh,\n    derivate: (val) => 1 - (val * val)\n  },\n  identity: {\n    activation: (val) => val,\n    derivate: () => 1\n  },\n  logistic: {\n    activation: logistic,\n    derivate: (val) => logistic(val) * (1 - logistic(val))\n  },\n  arctan: {\n    activation: Math.atan,\n    derivate: (val) => 1 / (val * val + 1)\n  },\n  softsign: {\n    activation: (val) => val / (1 + Math.abs(val)),\n    derivate: (val) => 1 / ((1 + Math.abs(val)) * (1 + Math.abs(val)))\n  },\n  relu: {\n    activation: (val) => (val < 0 ? 0 : val),\n    derivate: (val) => (val < 0 ? 0 : 1)\n  },\n  softplus: {\n    activation: (val) => Math.log(1 + Math.exp(val)),\n    derivate: (val) => 1 / (1 + Math.exp(-val))\n  },\n  bent: {\n    activation: (val) => ((Math.sqrt(val * val + 1) - 1) / 2) + val,\n    derivate: (val) => (val / (2 * Math.sqrt(val * val + 1))) + 1\n  },\n  sinusoid: {\n    activation: Math.sin,\n    derivate: Math.cos\n  },\n  sinc: {\n    activation: (val) => (val === 0 ? 1 : Math.sin(val) / val),\n    derivate: (val) => (val === 0 ? 0 : (Math.cos(val) / val) - (Math.sin(val) / (val * val)))\n  },\n  gaussian: {\n    activation: (val) => Math.exp(-(val * val)),\n    derivate: (val) => -2 * val * Math.exp(-(val * val))\n  },\n  'parametric-relu': {\n    activation: (val, param) => (val < 0 ? param * val : val),\n    derivate: (val, param) => (val < 0 ? param : 1)\n  },\n  'exponential-elu': {\n    activation: expELU,\n    derivate: (val, param) => (val < 0 ? expELU(val, param) + param : 1)\n  },\n  'soft-exponential': {\n    activation: softExponential,\n    derivate: softExponentialPrime\n  }\n};\n\nclass Layer {\n  /**\n     * @private\n     * Create a new layer with the given options\n     * @param {object} options\n     * @param {number} [options.inputSize] - Number of conections that enter the neurons.\n     * @param {number} [options.outputSize] - Number of conections that leave the neurons.\n     * @param {number} [options.regularization] - Regularization parameter.\n     * @param {number} [options.epsilon] - Learning rate parameter.\n     * @param {string} [options.activation] - Activation function parameter from the FeedForwardNeuralNetwork class.\n     * @param {number} [options.activationParam] - Activation parameter if needed.\n     */\n  constructor(options) {\n    this.inputSize = options.inputSize;\n    this.outputSize = options.outputSize;\n    this.regularization = options.regularization;\n    this.epsilon = options.epsilon;\n    this.activation = options.activation;\n    this.activationParam = options.activationParam;\n\n    var selectedFunction = ACTIVATION_FUNCTIONS[options.activation];\n    var params = selectedFunction.activation.length;\n\n    var actFunction = params > 1 ? (val) => selectedFunction.activation(val, options.activationParam) : selectedFunction.activation;\n    var derFunction = params > 1 ? (val) => selectedFunction.derivate(val, options.activationParam) : selectedFunction.derivate;\n\n    this.activationFunction = function (i, j) {\n      this.set(i, j, actFunction(this.get(i, j)));\n    };\n    this.derivate = function (i, j) {\n      this.set(i, j, derFunction(this.get(i, j)));\n    };\n\n    if (options.model) {\n      // load model\n      this.W = mlMatrix.Matrix.checkMatrix(options.W);\n      this.b = mlMatrix.Matrix.checkMatrix(options.b);\n    } else {\n      // default constructor\n      this.W = mlMatrix.Matrix.rand(this.inputSize, this.outputSize);\n      this.b = mlMatrix.Matrix.zeros(1, this.outputSize);\n\n      this.W.apply(function (i, j) {\n        this.set(i, j, this.get(i, j) / Math.sqrt(options.inputSize));\n      });\n    }\n  }\n\n  /**\n     * @private\n     * propagate the given input through the current layer.\n     * @param {Matrix} X - input.\n     * @return {Matrix} output at the current layer.\n     */\n  forward(X) {\n    var z = X.mmul(this.W).addRowVector(this.b);\n    z.apply(this.activationFunction);\n    this.a = z.clone();\n    return z;\n  }\n\n  /**\n     * @private\n     * apply backpropagation algorithm at the current layer\n     * @param {Matrix} delta - delta values estimated at the following layer.\n     * @param {Matrix} a - 'a' values from the following layer.\n     * @return {Matrix} the new delta values for the next layer.\n     */\n  backpropagation(delta, a) {\n    this.dW = a.transpose().mmul(delta);\n    this.db = mlMatrix.Matrix.rowVector(delta.sum('column'));\n\n    var aCopy = a.clone();\n    return delta.mmul(this.W.transpose()).mul(aCopy.apply(this.derivate));\n  }\n\n  /**\n     * @private\n     * Function that updates the weights at the current layer with the derivatives.\n     */\n  update() {\n    this.dW.add(this.W.clone().mul(this.regularization));\n    this.W.add(this.dW.mul(-this.epsilon));\n    this.b.add(this.db.mul(-this.epsilon));\n  }\n\n  /**\n     * @private\n     * Export the current layer to JSON.\n     * @return {object} model\n     */\n  toJSON() {\n    return {\n      model: 'Layer',\n      inputSize: this.inputSize,\n      outputSize: this.outputSize,\n      regularization: this.regularization,\n      epsilon: this.epsilon,\n      activation: this.activation,\n      W: this.W,\n      b: this.b\n    };\n  }\n\n  /**\n     * @private\n     * Creates a new Layer with the given model.\n     * @param {object} model\n     * @return {Layer}\n     */\n  static load(model) {\n    if (model.model !== 'Layer') {\n      throw new RangeError('the current model is not a Layer model');\n    }\n    return new Layer(model);\n  }\n}\n\nclass OutputLayer extends Layer {\n  constructor(options) {\n    super(options);\n\n    this.activationFunction = function (i, j) {\n      this.set(i, j, Math.exp(this.get(i, j)));\n    };\n  }\n\n  static load(model) {\n    if (model.model !== 'Layer') {\n      throw new RangeError('the current model is not a Layer model');\n    }\n\n    return new OutputLayer(model);\n  }\n}\n\nclass FeedForwardNeuralNetworks {\n  /**\n   * Create a new Feedforward neural network model.\n   * @class FeedForwardNeuralNetworks\n   * @param {object} [options]\n   * @param {Array} [options.hiddenLayers=[10]] - Array that contains the sizes of the hidden layers.\n   * @param {number} [options.iterations=50] - Number of iterations at the training step.\n   * @param {number} [options.learningRate=0.01] - Learning rate of the neural net (also known as epsilon).\n   * @param {number} [options.regularization=0.01] - Regularization parameter af the neural net.\n   * @param {string} [options.activation='tanh'] - activation function to be used. (options: 'tanh'(default),\n   * 'identity', 'logistic', 'arctan', 'softsign', 'relu', 'softplus', 'bent', 'sinusoid', 'sinc', 'gaussian').\n   * (single-parametric options: 'parametric-relu', 'exponential-relu', 'soft-exponential').\n   * @param {number} [options.activationParam=1] - if the selected activation function needs a parameter.\n   */\n  constructor(options) {\n    options = options || {};\n    if (options.model) {\n      // load network\n      this.hiddenLayers = options.hiddenLayers;\n      this.iterations = options.iterations;\n      this.learningRate = options.learningRate;\n      this.regularization = options.regularization;\n      this.dicts = options.dicts;\n      this.activation = options.activation;\n      this.activationParam = options.activationParam;\n      this.model = new Array(options.layers.length);\n\n      for (var i = 0; i < this.model.length - 1; ++i) {\n        this.model[i] = Layer.load(options.layers[i]);\n      }\n      this.model[this.model.length - 1] = OutputLayer.load(options.layers[this.model.length - 1]);\n    } else {\n      // default constructor\n      this.hiddenLayers = options.hiddenLayers || [10];\n      this.iterations = options.iterations || 50;\n\n      this.learningRate = options.learningRate || 0.01;\n      this.regularization = options.regularization || 0.01;\n\n      this.activation = options.activation || 'tanh';\n      this.activationParam = options.activationParam || 1;\n      if (!(this.activation in Object.keys(ACTIVATION_FUNCTIONS))) {\n        this.activation = 'tanh';\n      }\n    }\n  }\n\n  /**\n   * @private\n   * Function that build and initialize the neural net.\n   * @param {number} inputSize - total of features to fit.\n   * @param {number} outputSize - total of labels of the prediction set.\n   */\n  buildNetwork(inputSize, outputSize) {\n    var size = 2 + (this.hiddenLayers.length - 1);\n    this.model = new Array(size);\n\n    // input layer\n    this.model[0] = new Layer({\n      inputSize: inputSize,\n      outputSize: this.hiddenLayers[0],\n      activation: this.activation,\n      activationParam: this.activationParam,\n      regularization: this.regularization,\n      epsilon: this.learningRate\n    });\n\n    // hidden layers\n    for (var i = 1; i < this.hiddenLayers.length; ++i) {\n      this.model[i] = new Layer({\n        inputSize: this.hiddenLayers[i - 1],\n        outputSize: this.hiddenLayers[i],\n        activation: this.activation,\n        activationParam: this.activationParam,\n        regularization: this.regularization,\n        epsilon: this.learningRate\n      });\n    }\n\n    // output layer\n    this.model[size - 1] = new OutputLayer({\n      inputSize: this.hiddenLayers[this.hiddenLayers.length - 1],\n      outputSize: outputSize,\n      activation: this.activation,\n      activationParam: this.activationParam,\n      regularization: this.regularization,\n      epsilon: this.learningRate\n    });\n  }\n\n  /**\n   * Train the neural net with the given features and labels.\n   * @param {Matrix|Array} features\n   * @param {Matrix|Array} labels\n   */\n  train(features, labels) {\n    features = mlMatrix.Matrix.checkMatrix(features);\n    this.dicts = dictOutputs(labels);\n\n    var inputSize = features.columns;\n    var outputSize = Object.keys(this.dicts.inputs).length;\n\n    if (!this.model) {\n      this.buildNetwork(inputSize, outputSize);\n    }\n\n    for (var i = 0; i < this.iterations; ++i) {\n      var probabilities = this.propagate(features);\n      this.backpropagation(features, labels, probabilities);\n    }\n  }\n\n  /**\n   * @private\n   * Propagate the input(training set) and retrives the probabilities of each class.\n   * @param {Matrix} X\n   * @return {Matrix} probabilities of each class.\n   */\n  propagate(X) {\n    var input = X;\n    for (var i = 0; i < this.model.length; ++i) {\n      input = this.model[i].forward(input);\n    }\n\n    // get probabilities\n    return input.divColumnVector(input.sum('row'));\n  }\n\n  /**\n   * @private\n   * Function that applies the backpropagation algorithm on each layer of the network\n   * in order to fit the features and labels.\n   * @param {Matrix} features\n   * @param {Array} labels\n   * @param {Matrix} probabilities - probabilities of each class of the feature set.\n   */\n  backpropagation(features, labels, probabilities) {\n    for (var i = 0; i < probabilities.rows; ++i) {\n      probabilities.set(i, this.dicts.inputs[labels[i]], probabilities.get(i, this.dicts.inputs[labels[i]]) - 1);\n    }\n\n    // remember, the last delta doesn't matter\n    var delta = probabilities;\n    for (i = this.model.length - 1; i >= 0; --i) {\n      var a = i > 0 ? this.model[i - 1].a : features;\n      delta = this.model[i].backpropagation(delta, a);\n    }\n\n    for (i = 0; i < this.model.length; ++i) {\n      this.model[i].update();\n    }\n  }\n\n  /**\n   * Predict the output given the feature set.\n   * @param {Array|Matrix} features\n   * @return {Array}\n   */\n  predict(features) {\n    features = mlMatrix.Matrix.checkMatrix(features);\n    var outputs = new Array(features.rows);\n    var probabilities = this.propagate(features);\n    for (var i = 0; i < features.rows; ++i) {\n      outputs[i] = this.dicts.outputs[probabilities.maxRowIndex(i)[1]];\n    }\n\n    return outputs;\n  }\n\n  /**\n   * Export the current model to JSON.\n   * @return {object} model\n   */\n  toJSON() {\n    var model = {\n      model: 'FNN',\n      hiddenLayers: this.hiddenLayers,\n      iterations: this.iterations,\n      learningRate: this.learningRate,\n      regularization: this.regularization,\n      activation: this.activation,\n      activationParam: this.activationParam,\n      dicts: this.dicts,\n      layers: new Array(this.model.length)\n    };\n\n    for (var i = 0; i < this.model.length; ++i) {\n      model.layers[i] = this.model[i].toJSON();\n    }\n\n    return model;\n  }\n\n  /**\n   * Load a Feedforward Neural Network with the current model.\n   * @param {object} model\n   * @return {FeedForwardNeuralNetworks}\n   */\n  static load(model) {\n    if (model.model !== 'FNN') {\n      throw new RangeError('the current model is not a feed forward network');\n    }\n\n    return new FeedForwardNeuralNetworks(model);\n  }\n}\n\n/**\n * @private\n * Method that given an array of labels(predictions), returns two dictionaries, one to transform from labels to\n * numbers and other in the reverse way\n * @param {Array} array\n * @return {object}\n */\nfunction dictOutputs(array) {\n  var inputs = {};\n  var outputs = {};\n  var index = 0;\n  for (var i = 0; i < array.length; i += 1) {\n    if (inputs[array[i]] === undefined) {\n      inputs[array[i]] = index;\n      outputs[index] = array[i];\n      index++;\n    }\n  }\n\n  return {\n    inputs: inputs,\n    outputs: outputs\n  };\n}\n\nmodule.exports = FeedForwardNeuralNetworks;\n","function NodeSquare(x, y, weights, som) {\n    this.x = x;\n    this.y = y;\n    this.weights = weights;\n    this.som = som;\n    this.neighbors = {};\n}\n\nNodeSquare.prototype.adjustWeights = function adjustWeights(target, learningRate, influence) {\n    for (var i = 0, ii = this.weights.length; i < ii; i++) {\n        this.weights[i] += learningRate * influence * (target[i] - this.weights[i]);\n    }\n};\n\nNodeSquare.prototype.getDistance = function getDistance(otherNode) {\n    return Math.max(Math.abs(this.x - otherNode.x), Math.abs(this.y - otherNode.y));\n};\n\nNodeSquare.prototype.getDistanceTorus = function getDistanceTorus(otherNode) {\n    var distX = Math.abs(this.x - otherNode.x),\n        distY = Math.abs(this.y - otherNode.y);\n    return Math.max(Math.min(distX, this.som.gridDim.x - distX), Math.min(distY, this.som.gridDim.y - distY));\n};\n\nNodeSquare.prototype.getNeighbors = function getNeighbors(xy) {\n    if (!this.neighbors[xy]) {\n        this.neighbors[xy] = new Array(2);\n\n        // left or bottom neighbor\n        var v;\n        if (this[xy] > 0) {\n            v = this[xy] - 1;\n        } else if (this.som.torus) {\n            v = this.som.gridDim[xy] - 1\n        }\n        if (typeof v !== 'undefined') {\n            var x, y;\n            if (xy === 'x') {\n                x = v;\n                y = this.y;\n            } else {\n                x = this.x;\n                y = v;\n            }\n            this.neighbors[xy][0] = this.som.nodes[x][y];\n        }\n\n        // top or right neighbor\n        var w;\n        if (this[xy] < (this.som.gridDim[xy] - 1)) {\n            w = this[xy] + 1;\n        } else if (this.som.torus) {\n            w = 0;\n        }\n        if (typeof w !== 'undefined') {\n            if (xy === 'x') {\n                x = w;\n                y = this.y;\n            } else {\n                x = this.x;\n                y = w;\n            }\n            this.neighbors[xy][1] = this.som.nodes[x][y];\n        }\n    }\n    return this.neighbors[xy];\n};\n\nNodeSquare.prototype.getPos = function getPos(xy, element) {\n    var neighbors = this.getNeighbors(xy),\n        distance = this.som.distance,\n        bestNeighbor,\n        direction;\n    if(neighbors[0]) {\n        if (neighbors[1]) {\n            var dist1 = distance(element, neighbors[0].weights),\n                dist2 = distance(element, neighbors[1].weights);\n            if(dist1 < dist2) {\n                bestNeighbor = neighbors[0];\n                direction = -1;\n            } else {\n                bestNeighbor = neighbors[1];\n                direction = 1;\n            }\n        } else {\n            bestNeighbor = neighbors[0];\n            direction = -1;\n        }\n    } else {\n        bestNeighbor = neighbors[1];\n        direction = 1;\n    }\n    var simA = 1 - distance(element, this.weights),\n        simB = 1 - distance(element, bestNeighbor.weights);\n    var factor = ((simA - simB) / (2 - simA - simB));\n    return 0.5 + 0.5 * factor * direction;\n};\n\nNodeSquare.prototype.getPosition = function getPosition(element) {\n    return [\n        this.getPos('x', element),\n        this.getPos('y', element)\n    ];\n};\n\nmodule.exports = NodeSquare;","var NodeSquare = require('./node-square');\n\nfunction NodeHexagonal(x, y, weights, som) {\n\n    NodeSquare.call(this, x, y, weights, som);\n\n    this.hX = x - Math.floor(y / 2);\n    this.z = 0 - this.hX - y;\n\n}\n\nNodeHexagonal.prototype = new NodeSquare;\nNodeHexagonal.prototype.constructor = NodeHexagonal;\n\nNodeHexagonal.prototype.getDistance = function getDistanceHexagonal(otherNode) {\n    return Math.max(Math.abs(this.hX - otherNode.hX), Math.abs(this.y - otherNode.y), Math.abs(this.z - otherNode.z));\n};\n\nNodeHexagonal.prototype.getDistanceTorus = function getDistanceTorus(otherNode) {\n    var distX = Math.abs(this.hX - otherNode.hX),\n        distY = Math.abs(this.y - otherNode.y),\n        distZ = Math.abs(this.z - otherNode.z);\n    return Math.max(Math.min(distX, this.som.gridDim.x - distX), Math.min(distY, this.som.gridDim.y - distY), Math.min(distZ, this.som.gridDim.z - distZ));\n};\n\nNodeHexagonal.prototype.getPosition = function getPosition() {\n    throw new Error('Unimplemented : cannot get position of the points for hexagonal grid');\n};\n\nmodule.exports = NodeHexagonal;","'use strict';\n\nvar NodeSquare = require('./node-square'),\n    NodeHexagonal = require('./node-hexagonal');\n\nvar defaultOptions = {\n    fields: 3,\n    randomizer: Math.random,\n    distance: squareEuclidean,\n    iterations: 10,\n    learningRate: 0.1,\n    gridType: 'rect',\n    torus: true,\n    method: 'random'\n};\n\nfunction SOM(x, y, options, reload) {\n\n    this.x = x;\n    this.y = y;\n\n    options = options || {};\n    this.options = {};\n    for (var i in defaultOptions) {\n        if (options.hasOwnProperty(i)) {\n            this.options[i] = options[i];\n        } else {\n            this.options[i] = defaultOptions[i];\n        }\n    }\n\n    if (typeof this.options.fields === 'number') {\n        this.numWeights = this.options.fields;\n    } else if (Array.isArray(this.options.fields)) {\n        this.numWeights = this.options.fields.length;\n        var converters = getConverters(this.options.fields);\n        this.extractor = converters.extractor;\n        this.creator = converters.creator;\n    } else {\n        throw new Error('Invalid fields definition');\n    }\n\n    if (this.options.gridType === 'rect') {\n        this.nodeType = NodeSquare;\n        this.gridDim = {\n            x: x,\n            y: y\n        };\n    } else {\n        this.nodeType = NodeHexagonal;\n        var hx = this.x - Math.floor(this.y / 2);\n        this.gridDim = {\n            x: hx,\n            y: this.y,\n            z: -(0 - hx - this.y)\n        };\n    }\n\n    this.torus = this.options.torus;\n    this.distanceMethod = this.torus ? 'getDistanceTorus' : 'getDistance';\n\n    this.distance = this.options.distance;\n\n    this.maxDistance = getMaxDistance(this.distance, this.numWeights);\n\n    if (reload === true) { // For model loading\n        this.done = true;\n        return;\n    }\n    if (!(x > 0 && y > 0)) {\n        throw new Error('x and y must be positive');\n    }\n\n    this.times = {\n        findBMU: 0,\n        adjust: 0\n    };\n\n    this.randomizer = this.options.randomizer;\n\n    this.iterationCount = 0;\n    this.iterations = this.options.iterations;\n\n    this.startLearningRate = this.learningRate = this.options.learningRate;\n\n    this.mapRadius = Math.floor(Math.max(x, y) / 2);\n\n    this.algorithmMethod = this.options.method;\n\n    this._initNodes();\n\n    this.done = false;\n}\n\nSOM.load = function loadModel(model, distance) {\n    if (model.name === 'SOM') {\n        var x = model.data.length,\n            y = model.data[0].length;\n        if (distance) {\n            model.options.distance = distance;\n        } else if (model.options.distance) {\n            model.options.distance = eval('(' + model.options.distance + ')');\n        }\n        var som = new SOM(x, y, model.options, true);\n        som.nodes = new Array(x);\n        for (var i = 0; i < x; i++) {\n            som.nodes[i] = new Array(y);\n            for (var j = 0; j < y; j++) {\n                som.nodes[i][j] = new som.nodeType(i, j, model.data[i][j], som);\n            }\n        }\n        return som;\n    } else {\n        throw new Error('expecting a SOM model');\n    }\n};\n\nSOM.prototype.export = function exportModel(includeDistance) {\n    if (!this.done) {\n        throw new Error('model is not ready yet');\n    }\n    var model = {\n        name: 'SOM'\n    };\n    model.options = {\n        fields: this.options.fields,\n        gridType: this.options.gridType,\n        torus: this.options.torus\n    };\n    model.data = new Array(this.x);\n    for (var i = 0; i < this.x; i++) {\n        model.data[i] = new Array(this.y);\n        for (var j = 0; j < this.y; j++) {\n            model.data[i][j] = this.nodes[i][j].weights;\n        }\n    }\n    if (includeDistance) {\n        model.options.distance = this.distance.toString();\n    }\n    return model;\n};\n\nSOM.prototype._initNodes = function initNodes() {\n    var now = Date.now(),\n        i, j, k;\n    this.nodes = new Array(this.x);\n    for (i = 0; i < this.x; i++) {\n        this.nodes[i] = new Array(this.y);\n        for (j = 0; j < this.y; j++) {\n            var weights = new Array(this.numWeights);\n            for (k = 0; k < this.numWeights; k++) {\n                weights[k] = this.randomizer();\n            }\n            this.nodes[i][j] = new this.nodeType(i, j, weights, this);\n        }\n    }\n    this.times.initNodes = Date.now() - now;\n};\n\nSOM.prototype.setTraining = function setTraining(trainingSet) {\n    if (this.trainingSet) {\n        throw new Error('training set has already been set');\n    }\n    var now = Date.now();\n    var convertedSet = trainingSet;\n    var i, l = trainingSet.length;\n    if (this.extractor) {\n        convertedSet = new Array(l);\n        for (i = 0; i < l; i++) {\n            convertedSet[i] = this.extractor(trainingSet[i]);\n        }\n    }\n    this.numIterations = this.iterations * l;\n\n    if (this.algorithmMethod === 'random') {\n        this.timeConstant = this.numIterations / Math.log(this.mapRadius);\n    } else {\n        this.timeConstant = l / Math.log(this.mapRadius);\n    }\n    this.trainingSet = convertedSet;\n    this.times.setTraining = Date.now() - now;\n};\n\nSOM.prototype.trainOne = function trainOne() {\n    if (this.done) {\n\n        return false;\n\n    } else if (this.numIterations-- > 0) {\n\n        var neighbourhoodRadius,\n            trainingValue,\n            trainingSetFactor;\n\n        if (this.algorithmMethod === 'random') { // Pick a random value of the training set at each step\n            neighbourhoodRadius = this.mapRadius * Math.exp(-this.iterationCount / this.timeConstant);\n            trainingValue = getRandomValue(this.trainingSet, this.randomizer);\n            this._adjust(trainingValue, neighbourhoodRadius);\n            this.learningRate = this.startLearningRate * Math.exp(-this.iterationCount / this.numIterations);\n        } else { // Get next input vector\n            trainingSetFactor = -Math.floor(this.iterationCount / this.trainingSet.length);\n            neighbourhoodRadius = this.mapRadius * Math.exp(trainingSetFactor / this.timeConstant);\n            trainingValue = this.trainingSet[this.iterationCount % this.trainingSet.length];\n            this._adjust(trainingValue, neighbourhoodRadius);\n            if (((this.iterationCount + 1) % this.trainingSet.length) === 0) {\n                this.learningRate = this.startLearningRate * Math.exp(trainingSetFactor / Math.floor(this.numIterations / this.trainingSet.length));\n            }\n        }\n\n        this.iterationCount++;\n\n        return true;\n\n    } else {\n\n        this.done = true;\n        return false;\n\n    }\n};\n\nSOM.prototype._adjust = function adjust(trainingValue, neighbourhoodRadius) {\n    var now = Date.now(),\n        x, y, dist, influence;\n\n    var bmu = this._findBestMatchingUnit(trainingValue);\n\n    var now2 = Date.now();\n    this.times.findBMU += now2 - now;\n\n    var radiusLimit = Math.floor(neighbourhoodRadius);\n    var xMin = bmu.x - radiusLimit,\n        xMax = bmu.x + radiusLimit,\n        yMin = bmu.y - radiusLimit,\n        yMax = bmu.y + radiusLimit;\n\n    for (x = xMin; x <= xMax; x++) {\n        var theX = x;\n        if (x < 0) {\n            theX += this.x;\n        } else if (x >= this.x) {\n            theX -= this.x;\n        }\n        for (y = yMin; y <= yMax; y++) {\n            var theY = y;\n            if (y < 0) {\n                theY += this.y;\n            } else if (y >= this.y) {\n                theY -= this.y;\n            }\n\n            dist = bmu[this.distanceMethod](this.nodes[theX][theY]);\n\n            if (dist < neighbourhoodRadius) {\n                influence = Math.exp(-dist / (2 * neighbourhoodRadius));\n                this.nodes[theX][theY].adjustWeights(trainingValue, this.learningRate, influence);\n            }\n\n        }\n    }\n\n    this.times.adjust += (Date.now() - now2);\n\n};\n\nSOM.prototype.train = function train(trainingSet) {\n    if (!this.done) {\n        this.setTraining(trainingSet);\n        while (this.trainOne()) {\n        }\n    }\n};\n\nSOM.prototype.getConvertedNodes = function getConvertedNodes() {\n    var result = new Array(this.x);\n    for (var i = 0; i < this.x; i++) {\n        result[i] = new Array(this.y);\n        for (var j = 0; j < this.y; j++) {\n            var node = this.nodes[i][j];\n            result[i][j] = this.creator ? this.creator(node.weights) : node.weights;\n        }\n    }\n    return result;\n};\n\nSOM.prototype._findBestMatchingUnit = function findBestMatchingUnit(candidate) {\n\n    var bmu,\n        lowest = Infinity,\n        dist;\n\n    for (var i = 0; i < this.x; i++) {\n        for (var j = 0; j < this.y; j++) {\n            dist = this.distance(this.nodes[i][j].weights, candidate);\n            if (dist < lowest) {\n                lowest = dist;\n                bmu = this.nodes[i][j];\n            }\n        }\n    }\n\n    return bmu;\n\n};\n\nSOM.prototype.predict = function predict(data, computePosition) {\n    if (typeof data === 'boolean') {\n        computePosition = data;\n        data = null;\n    }\n    if (!data) {\n        data = this.trainingSet;\n    }\n    if (Array.isArray(data) && (Array.isArray(data[0]) || (typeof data[0] === 'object'))) { // predict a dataset\n        var self = this;\n        return data.map(function (element) {\n            return self._predict(element, computePosition);\n        });\n    } else { // predict a single element\n        return this._predict(data, computePosition);\n    }\n};\n\nSOM.prototype._predict = function _predict(element, computePosition) {\n    if (!Array.isArray(element)) {\n        element = this.extractor(element);\n    }\n    var bmu = this._findBestMatchingUnit(element);\n    var result = [bmu.x, bmu.y];\n    if (computePosition) {\n        result[2] = bmu.getPosition(element);\n    }\n    return result;\n};\n\n// As seen in http://www.scholarpedia.org/article/Kohonen_network\nSOM.prototype.getQuantizationError = function getQuantizationError() {\n    var fit = this.getFit(),\n        l = fit.length,\n        sum = 0;\n    for (var i = 0; i < l; i++) {\n        sum += fit[i];\n    }\n    return sum / l;\n};\n\nSOM.prototype.getFit = function getFit(dataset) {\n    if (!dataset) {\n        dataset = this.trainingSet;\n    }\n    var l = dataset.length,\n        bmu,\n        result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        bmu = this._findBestMatchingUnit(dataset[i]);\n        result[i] = Math.sqrt(this.distance(dataset[i], bmu.weights));\n    }\n    return result;\n};\n\nfunction getConverters(fields) {\n    var l = fields.length,\n        normalizers = new Array(l),\n        denormalizers = new Array(l);\n    for (var i = 0; i < l; i++) {\n        normalizers[i] = getNormalizer(fields[i].range);\n        denormalizers[i] = getDenormalizer(fields[i].range);\n    }\n    return {\n        extractor: function extractor(value) {\n            var result = new Array(l);\n            for (var i = 0; i < l; i++) {\n                result[i] = normalizers[i](value[fields[i].name]);\n            }\n            return result;\n        },\n        creator: function creator(value) {\n            var result = {};\n            for (var i = 0; i < l; i++) {\n                result[fields[i].name] = denormalizers[i](value[i]);\n            }\n            return result;\n        }\n    };\n}\n\nfunction getNormalizer(minMax) {\n    return function normalizer(value) {\n        return (value - minMax[0]) / (minMax[1] - minMax[0]);\n    };\n}\n\nfunction getDenormalizer(minMax) {\n    return function denormalizer(value) {\n        return (minMax[0] + value * (minMax[1] - minMax[0]));\n    };\n}\n\nfunction squareEuclidean(a, b) {\n    var d = 0;\n    for (var i = 0, ii = a.length; i < ii; i++) {\n        d += (a[i] - b[i]) * (a[i] - b[i]);\n    }\n    return d;\n}\n\nfunction getRandomValue(arr, randomizer) {\n    return arr[Math.floor(randomizer() * arr.length)];\n}\n\nfunction getMaxDistance(distance, numWeights) {\n    var zero = new Array(numWeights),\n        one = new Array(numWeights);\n    for (var i = 0; i < numWeights; i++) {\n        zero[i] = 0;\n        one[i] = 1;\n    }\n    return distance(zero, one);\n}\n\nmodule.exports = SOM;","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","export default function checkArraySize(x, y) {\n  if (!Array.isArray(x) || !Array.isArray(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","export { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\n\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 (Array.isArray(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 (!Array.isArray(x) || !Array.isArray(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 =\n              `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n          } else {\n            str =\n              `${maybeToPrecision(this.coefficients[k], precision) +\n              times\n              }x${\n                sup\n              }${this.powers[k]\n              }${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 BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision\n} from 'ml-regression-base';\n\nexport default class SimpleLinearRegression extends BaseRegression {\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      this.slope = y.slope;\n      this.intercept = y.intercept;\n      this.coefficients = [y.intercept, y.slope];\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y);\n    }\n  }\n\n  toJSON() {\n    return {\n      name: 'simpleLinearRegression',\n      slope: this.slope,\n      intercept: this.intercept\n    };\n  }\n\n  _predict(x) {\n    return this.slope * x + this.intercept;\n  }\n\n  computeX(y) {\n    return (y - this.intercept) / this.slope;\n  }\n\n  toString(precision) {\n    let result = 'f(x) = ';\n    if (this.slope !== 0) {\n      const xFactor = maybeToPrecision(this.slope, precision);\n      result += `${xFactor === '1' ? '' : `${xFactor} * `}x`;\n      if (this.intercept !== 0) {\n        const absIntercept = Math.abs(this.intercept);\n        const operator = absIntercept === this.intercept ? '+' : '-';\n        result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n      }\n    } else {\n      result += maybeToPrecision(this.intercept, precision);\n    }\n    return result;\n  }\n\n  toLaTeX(precision) {\n    return this.toString(precision);\n  }\n\n  static load(json) {\n    if (json.name !== 'simpleLinearRegression') {\n      throw new TypeError('not a SLR model');\n    }\n    return new SimpleLinearRegression(true, json);\n  }\n}\n\nfunction regress(slr, x, y) {\n  const n = x.length;\n  let xSum = 0;\n  let ySum = 0;\n\n  let xSquared = 0;\n  let xY = 0;\n\n  for (let i = 0; i < n; i++) {\n    xSum += x[i];\n    ySum += y[i];\n    xSquared += x[i] * x[i];\n    xY += x[i] * y[i];\n  }\n\n  const numerator = n * xY - xSum * ySum;\n  slr.slope = numerator / (n * xSquared - xSum * xSum);\n  slr.intercept = (1 / n) * ySum - slr.slope * (1 / n) * xSum;\n  slr.coefficients = [slr.intercept, slr.slope];\n}\n","import BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision\n} from 'ml-regression-base';\nimport SimpleLinearRegression from 'ml-regression-simple-linear';\n\nexport default class ExponentialRegression extends BaseRegression {\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      this.A = y.A;\n      this.B = y.B;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y);\n    }\n  }\n\n  _predict(input) {\n    return this.B * Math.exp(input * this.A);\n  }\n\n  toJSON() {\n    return {\n      name: 'exponentialRegression',\n      A: this.A,\n      B: this.B\n    };\n  }\n\n  toString(precision) {\n    return (\n      `f(x) = ${\n        maybeToPrecision(this.B, precision)\n      } * e^(${\n        maybeToPrecision(this.A, precision)\n      } * x)`\n    );\n  }\n\n  toLaTeX(precision) {\n    if (this.A >= 0) {\n      return (\n        `f(x) = ${\n          maybeToPrecision(this.B, precision)\n        }e^{${\n          maybeToPrecision(this.A, precision)\n        }x}`\n      );\n    } else {\n      return (\n        `f(x) = \\\\frac{${\n          maybeToPrecision(this.B, precision)\n        }}{e^{${\n          maybeToPrecision(-this.A, precision)\n        }x}}`\n      );\n    }\n  }\n\n  static load(json) {\n    if (json.name !== 'exponentialRegression') {\n      throw new TypeError('not a exponential regression model');\n    }\n    return new ExponentialRegression(true, json);\n  }\n}\n\nfunction regress(er, x, y) {\n  const n = x.length;\n  const yl = new Array(n);\n  for (let i = 0; i < n; i++) {\n    yl[i] = Math.log(y[i]);\n  }\n\n  const linear = new SimpleLinearRegression(x, yl);\n  er.A = linear.slope;\n  er.B = Math.exp(linear.intercept);\n}\n","import BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision\n} from 'ml-regression-base';\nimport SimpleLinearRegression from 'ml-regression-simple-linear';\n\nexport default class PowerRegression extends BaseRegression {\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      // reloading model\n      this.A = y.A;\n      this.B = y.B;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y);\n    }\n  }\n\n  _predict(newInputs) {\n    return this.A * Math.pow(newInputs, this.B);\n  }\n\n  toJSON() {\n    return {\n      name: 'powerRegression',\n      A: this.A,\n      B: this.B\n    };\n  }\n\n  toString(precision) {\n    return `f(x) = ${maybeToPrecision(\n      this.A,\n      precision\n    )} * x^${maybeToPrecision(this.B, precision)}`;\n  }\n\n  toLaTeX(precision) {\n    let latex = '';\n    if (this.B >= 0) {\n      latex = `f(x) = ${maybeToPrecision(\n        this.A,\n        precision\n      )}x^{${maybeToPrecision(this.B, precision)}}`;\n    } else {\n      latex = `f(x) = \\\\frac{${maybeToPrecision(\n        this.A,\n        precision\n      )}}{x^{${maybeToPrecision(-this.B, precision)}}}`;\n    }\n    latex = latex.replace(/e([+-]?[0-9]+)/g, 'e^{$1}');\n    return latex;\n  }\n\n  static load(json) {\n    if (json.name !== 'powerRegression') {\n      throw new TypeError('not a power regression model');\n    }\n    return new PowerRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y) {\n  const n = x.length;\n  const xl = new Array(n);\n  const yl = new Array(n);\n  for (let i = 0; i < n; i++) {\n    xl[i] = Math.log(x[i]);\n    yl[i] = Math.log(y[i]);\n  }\n\n  const linear = new SimpleLinearRegression(xl, yl);\n  pr.A = Math.exp(linear.intercept);\n  pr.B = linear.slope;\n}\n","import Matrix, { SVD, pseudoInverse } from 'ml-matrix';\n\nexport default class MultivariateLinearRegression {\n  constructor(x, y, options = {}) {\n    const { intercept = true, statistics = true } = options;\n    this.statistics = statistics;\n    if (x === true) {\n      this.weights = y.weights;\n      this.inputs = y.inputs;\n      this.outputs = y.outputs;\n      this.intercept = y.intercept;\n    } else {\n      x = new Matrix(x);\n      y = new Matrix(y);\n      if (intercept) {\n        x.addColumn(new Array(x.rows).fill(1));\n      }\n      let xt = x.transpose();\n      const xx = xt\n        .mmul(x);\n      const xy = xt\n        .mmul(y);\n      const invxx = new SVD(xx)\n        .inverse();\n      const beta = xy\n        .transpose()\n        .mmul(invxx)\n        .transpose();\n      this.weights = beta.to2DArray();\n      this.inputs = x.columns;\n      this.outputs = y.columns;\n      if (intercept) this.inputs--;\n      this.intercept = intercept;\n      if (statistics) {\n        /*\n         * Let's add some basic statistics about the beta's to be able to interpret them.\n         * source: http://dept.stat.lsa.umich.edu/~kshedden/Courses/Stat401/Notes/401-multreg.pdf\n         * validated against Excel Regression AddIn\n         * test: \"datamining statistics test\"\n         */\n        const fittedValues = x.mmul(beta);\n        const residuals = y.clone().addM(fittedValues.neg());\n        const variance =\n          residuals\n            .to2DArray()\n            .map((ri) => Math.pow(ri[0], 2))\n            .reduce((a, b) => a + b) /\n          (y.rows - x.columns);\n        this.stdError = Math.sqrt(variance);\n        this.stdErrorMatrix = pseudoInverse(xx).mul(variance);\n        this.stdErrors = this.stdErrorMatrix\n          .diagonal()\n          .map((d) => Math.sqrt(d));\n        this.tStats = this.weights.map((d, i) =>\n          (this.stdErrors[i] === 0 ? 0 : d[0] / this.stdErrors[i])\n        );\n      }\n    }\n  }\n\n  predict(x) {\n    if (Array.isArray(x)) {\n      if (typeof x[0] === 'number') {\n        return this._predict(x);\n      } else if (Array.isArray(x[0])) {\n        const y = new Array(x.length);\n        for (let i = 0; i < x.length; i++) {\n          y[i] = this._predict(x[i]);\n        }\n        return y;\n      }\n    } else if (Matrix.isMatrix(x)) {\n      const y = new Matrix(x.rows, this.outputs);\n      for (let i = 0; i < x.rows; i++) {\n        y.setRow(i, this._predict(x.getRow(i)));\n      }\n      return y;\n    }\n    throw new TypeError('x must be a matrix or array of numbers');\n  }\n\n  _predict(x) {\n    const result = new Array(this.outputs);\n    if (this.intercept) {\n      for (let i = 0; i < this.outputs; i++) {\n        result[i] = this.weights[this.inputs][i];\n      }\n    } else {\n      result.fill(0);\n    }\n    for (let i = 0; i < this.inputs; i++) {\n      for (let j = 0; j < this.outputs; j++) {\n        result[j] += this.weights[i][j] * x[i];\n      }\n    }\n    return result;\n  }\n\n  score() {\n    throw new Error('score method is not implemented yet');\n  }\n\n  toJSON() {\n    return {\n      name: 'multivariateLinearRegression',\n      weights: this.weights,\n      inputs: this.inputs,\n      outputs: this.outputs,\n      intercept: this.intercept,\n      summary: this.statistics\n        ? {\n          regressionStatistics: {\n            standardError: this.stdError,\n            observations: this.outputs\n          },\n          variables: this.weights.map((d, i) => {\n            return {\n              label:\n                  i === this.weights.length - 1\n                    ? 'Intercept'\n                    : `X Variable ${i + 1}`,\n              coefficients: d,\n              standardError: this.stdErrors[i],\n              tStat: this.tStats[i]\n            };\n          })\n        }\n        : undefined\n    };\n  }\n\n  static load(model) {\n    if (model.name !== 'multivariateLinearRegression') {\n      throw new Error('not a MLR model');\n    }\n    return new MultivariateLinearRegression(true, model);\n  }\n}\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n  sigma: 1\n};\n\nclass GaussianKernel {\n  constructor(options) {\n    options = Object.assign({}, defaultOptions, options);\n    this.sigma = options.sigma;\n    this.divisor = 2 * options.sigma * options.sigma;\n  }\n  compute(x, y) {\n    const distance = squaredEuclidean(x, y);\n    return Math.exp(-distance / this.divisor);\n  }\n}\n\nmodule.exports = GaussianKernel;\n","'use strict';\n\nconst defaultOptions = {\n  degree: 1,\n  constant: 1,\n  scale: 1\n};\n\nclass PolynomialKernel {\n  constructor(options) {\n    options = Object.assign({}, defaultOptions, options);\n\n    this.degree = options.degree;\n    this.constant = options.constant;\n    this.scale = options.scale;\n  }\n\n  compute(x, y) {\n    var sum = 0;\n    for (var i = 0; i < x.length; i++) {\n      sum += x[i] * y[i];\n    }\n    return Math.pow(this.scale * sum + this.constant, this.degree);\n  }\n}\n\nmodule.exports = PolynomialKernel;\n","'use strict';\n\nconst defaultOptions = {\n  alpha: 0.01,\n  constant: -Math.E\n};\n\nclass SigmoidKernel {\n  constructor(options) {\n    options = Object.assign({}, defaultOptions, options);\n    this.alpha = options.alpha;\n    this.constant = options.constant;\n  }\n\n  compute(x, y) {\n    var sum = 0;\n    for (var i = 0; i < x.length; i++) {\n      sum += x[i] * y[i];\n    }\n    return Math.tanh(this.alpha * sum + this.constant);\n  }\n}\n\nmodule.exports = SigmoidKernel;\n","'use strict';\n\nconst defaultOptions = {\n  sigma: 1,\n  degree: 1\n};\n\nclass ANOVAKernel {\n  constructor(options) {\n    options = Object.assign({}, defaultOptions, options);\n    this.sigma = options.sigma;\n    this.degree = options.degree;\n  }\n\n  compute(x, y) {\n    var sum = 0;\n    var len = Math.min(x.length, y.length);\n    for (var i = 1; i <= len; ++i) {\n      sum += Math.pow(\n        Math.exp(\n          -this.sigma *\n            Math.pow(Math.pow(x[i - 1], i) - Math.pow(y[i - 1], i), 2)\n        ),\n        this.degree\n      );\n    }\n    return sum;\n  }\n}\n\nmodule.exports = ANOVAKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n  sigma: 1\n};\n\nclass CauchyKernel {\n  constructor(options) {\n    options = Object.assign({}, defaultOptions, options);\n    this.sigma = options.sigma;\n  }\n\n  compute(x, y) {\n    return 1 / (1 + squaredEuclidean(x, y) / (this.sigma * this.sigma));\n  }\n}\n\nmodule.exports = CauchyKernel;\n","'use strict';\n\nconst { euclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n  sigma: 1\n};\n\nclass ExponentialKernel {\n  constructor(options) {\n    options = Object.assign({}, defaultOptions, options);\n    this.sigma = options.sigma;\n    this.divisor = 2 * options.sigma * options.sigma;\n  }\n\n  compute(x, y) {\n    const distance = euclidean(x, y);\n    return Math.exp(-distance / this.divisor);\n  }\n}\n\nmodule.exports = ExponentialKernel;\n","'use strict';\n\nclass HistogramIntersectionKernel {\n  compute(x, y) {\n    var min = Math.min(x.length, y.length);\n    var sum = 0;\n    for (var i = 0; i < min; ++i) {\n      sum += Math.min(x[i], y[i]);\n    }\n\n    return sum;\n  }\n}\n\nmodule.exports = HistogramIntersectionKernel;\n","'use strict';\n\nconst { euclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n  sigma: 1\n};\n\nclass LaplacianKernel {\n  constructor(options) {\n    options = Object.assign({}, defaultOptions, options);\n    this.sigma = options.sigma;\n  }\n\n  compute(x, y) {\n    const distance = euclidean(x, y);\n    return Math.exp(-distance / this.sigma);\n  }\n}\n\nmodule.exports = LaplacianKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n  constant: 1\n};\n\nclass MultiquadraticKernel {\n  constructor(options) {\n    options = Object.assign({}, defaultOptions, options);\n    this.constant = options.constant;\n  }\n\n  compute(x, y) {\n    return Math.sqrt(squaredEuclidean(x, y) + this.constant * this.constant);\n  }\n}\n\nmodule.exports = MultiquadraticKernel;\n","'use strict';\n\nconst { squaredEuclidean } = require('ml-distance-euclidean');\n\nconst defaultOptions = {\n  constant: 1\n};\n\nclass RationalQuadraticKernel {\n  constructor(options) {\n    options = Object.assign({}, defaultOptions, options);\n    this.constant = options.constant;\n  }\n\n  compute(x, y) {\n    const distance = squaredEuclidean(x, y);\n    return 1 - distance / (distance + this.constant);\n  }\n}\n\nmodule.exports = RationalQuadraticKernel;\n","'use strict';\n\nconst { Matrix, MatrixTransposeView } = require('ml-matrix');\nconst GaussianKernel = require('ml-kernel-gaussian');\nconst PolynomialKernel = require('ml-kernel-polynomial');\nconst SigmoidKernel = require('ml-kernel-sigmoid');\n\nconst ANOVAKernel = require('./kernels/anova-kernel');\nconst CauchyKernel = require('./kernels/cauchy-kernel');\nconst ExponentialKernel = require('./kernels/exponential-kernel');\nconst HistogramKernel = require('./kernels/histogram-intersection-kernel');\nconst LaplacianKernel = require('./kernels/laplacian-kernel');\nconst MultiquadraticKernel = require('./kernels/multiquadratic-kernel');\nconst RationalKernel = require('./kernels/rational-quadratic-kernel');\n\nconst kernelType = {\n  gaussian: GaussianKernel,\n  rbf: GaussianKernel,\n  polynomial: PolynomialKernel,\n  poly: PolynomialKernel,\n  anova: ANOVAKernel,\n  cauchy: CauchyKernel,\n  exponential: ExponentialKernel,\n  histogram: HistogramKernel,\n  min: HistogramKernel,\n  laplacian: LaplacianKernel,\n  multiquadratic: MultiquadraticKernel,\n  rational: RationalKernel,\n  sigmoid: SigmoidKernel,\n  mlp: SigmoidKernel\n};\n\nclass Kernel {\n  constructor(type, options) {\n    this.kernelType = type;\n    if (type === 'linear') return;\n\n    if (typeof type === 'string') {\n      type = type.toLowerCase();\n\n      var KernelConstructor = kernelType[type];\n      if (KernelConstructor) {\n        this.kernelFunction = new KernelConstructor(options);\n      } else {\n        throw new Error(`unsupported kernel type: ${type}`);\n      }\n    } else if (typeof type === 'object' && typeof type.compute === 'function') {\n      this.kernelFunction = type;\n    } else {\n      throw new TypeError(\n        'first argument must be a valid kernel type or instance'\n      );\n    }\n  }\n\n  compute(inputs, landmarks) {\n    inputs = Matrix.checkMatrix(inputs);\n    if (landmarks === undefined) {\n      landmarks = inputs;\n    } else {\n      landmarks = Matrix.checkMatrix(landmarks);\n    }\n    if (this.kernelType === 'linear') {\n      return inputs.mmul(new MatrixTransposeView(landmarks));\n    }\n\n    const kernelMatrix = new Matrix(inputs.rows, landmarks.rows);\n    if (inputs === landmarks) {\n      // fast path, matrix is symmetric\n      for (let i = 0; i < inputs.rows; i++) {\n        for (let j = i; j < inputs.rows; j++) {\n          const value = this.kernelFunction.compute(\n            inputs.getRow(i),\n            inputs.getRow(j)\n          );\n          kernelMatrix.set(i, j, value);\n          kernelMatrix.set(j, i, value);\n        }\n      }\n    } else {\n      for (let i = 0; i < inputs.rows; i++) {\n        for (let j = 0; j < landmarks.rows; j++) {\n          kernelMatrix.set(\n            i,\n            j,\n            this.kernelFunction.compute(inputs.getRow(i), landmarks.getRow(j))\n          );\n        }\n      }\n    }\n    return kernelMatrix;\n  }\n}\n\nmodule.exports = Kernel;\n","import BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision\n} from 'ml-regression-base';\nimport median from 'ml-array-median';\n\nexport default class TheilSenRegression extends BaseRegression {\n  /**\n   * Theil–Sen estimator\n   * https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator\n   * @param {Array<number>|boolean} x\n   * @param {Array<number>|object} y\n   * @constructor\n   */\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      // loads the model\n      this.slope = y.slope;\n      this.intercept = y.intercept;\n      this.coefficients = y.coefficients;\n    } else {\n      // creates the model\n      checkArrayLength(x, y);\n      theilSen(this, x, y);\n    }\n  }\n\n  toJSON() {\n    return {\n      name: 'TheilSenRegression',\n      slope: this.slope,\n      intercept: this.intercept\n    };\n  }\n\n  _predict(input) {\n    return this.slope * input + this.intercept;\n  }\n\n  computeX(input) {\n    return (input - this.intercept) / this.slope;\n  }\n\n  toString(precision) {\n    var result = 'f(x) = ';\n    if (this.slope) {\n      var xFactor = maybeToPrecision(this.slope, precision);\n      result += `${Math.abs(xFactor - 1) < 1e-5 ? '' : `${xFactor} * `}x`;\n      if (this.intercept) {\n        var absIntercept = Math.abs(this.intercept);\n        var operator = absIntercept === this.intercept ? '+' : '-';\n        result +=\n          ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n      }\n    } else {\n      result += maybeToPrecision(this.intercept, precision);\n    }\n    return result;\n  }\n\n  toLaTeX(precision) {\n    return this.toString(precision);\n  }\n\n  static load(json) {\n    if (json.name !== 'TheilSenRegression') {\n      throw new TypeError('not a Theil-Sen model');\n    }\n    return new TheilSenRegression(true, json);\n  }\n}\n\nfunction theilSen(regression, x, y) {\n  let len = x.length;\n  let slopes = new Array(len * len);\n  let count = 0;\n  for (let i = 0; i < len; ++i) {\n    for (let j = i + 1; j < len; ++j) {\n      if (x[i] !== x[j]) {\n        slopes[count++] = (y[j] - y[i]) / (x[j] - x[i]);\n      }\n    }\n  }\n  slopes.length = count;\n  let medianSlope = median(slopes);\n\n  let cuts = new Array(len);\n  for (let i = 0; i < len; ++i) {\n    cuts[i] = y[i] - medianSlope * x[i];\n  }\n\n  regression.slope = medianSlope;\n  regression.intercept = median(cuts);\n  regression.coefficients = [regression.intercept, regression.slope];\n}\n","import BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision\n} from 'ml-regression-base';\nimport { solve } from 'ml-matrix';\n\n/**\n * @class RobustPolynomialRegression\n * @param {Array<number>} x\n * @param {Array<number>} y\n * @param {number} degree - polynomial degree\n */\nexport default class RobustPolynomialRegression 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      robustPolynomial(this, x, y, degree);\n    }\n  }\n\n  toJSON() {\n    return {\n      name: 'robustPolynomialRegression',\n      degree: this.degree,\n      powers: this.powers,\n      coefficients: this.coefficients\n    };\n  }\n\n  _predict(x) {\n    return predict(x, this.powers, this.coefficients);\n  }\n\n  /**\n   * Display the formula\n   * @param {number} precision - precision for the numbers\n   * @return {string}\n   */\n  toString(precision) {\n    return this._toFormula(precision, false);\n  }\n\n  /**\n   * Display the formula in LaTeX format\n   * @param {number} precision - precision for the numbers\n   * @return {string}\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 !== 'robustPolynomialRegression') {\n      throw new TypeError('not a RobustPolynomialRegression model');\n    }\n    return new RobustPolynomialRegression(true, json);\n  }\n}\n\nfunction robustPolynomial(regression, x, y, degree) {\n  let powers = Array(degree)\n    .fill(0)\n    .map((_, index) => index);\n\n  const tuples = getRandomTuples(x, y, degree);\n\n  var min;\n  for (var i = 0; i < tuples.length; i++) {\n    var tuple = tuples[i];\n    var coefficients = calcCoefficients(tuple, powers);\n\n    var residuals = x.slice();\n    for (var j = 0; j < x.length; j++) {\n      residuals[j] = y[j] - predict(x[j], powers, coefficients);\n      residuals[j] = {\n        residual: residuals[j] * residuals[j],\n        coefficients\n      };\n    }\n\n    var median = residualsMedian(residuals);\n    if (!min || median.residual < min.residual) {\n      min = median;\n    }\n  }\n\n  regression.degree = degree;\n  regression.powers = powers;\n  regression.coefficients = min.coefficients;\n}\n\n/**\n * @ignore\n * @param {Array<number>} x\n * @param {Array<number>} y\n * @param {number} degree\n * @return {Array<{x:number,y:number}>}\n */\nfunction getRandomTuples(x, y, degree) {\n  var len = Math.floor(x.length / degree);\n  var tuples = new Array(len);\n\n  for (var i = 0; i < x.length; i++) {\n    var pos = Math.floor(Math.random() * len);\n\n    var counter = 0;\n    while (counter < x.length) {\n      if (!tuples[pos]) {\n        tuples[pos] = [\n          {\n            x: x[i],\n            y: y[i]\n          }\n        ];\n        break;\n      } else if (tuples[pos].length < degree) {\n        tuples[pos].push({\n          x: x[i],\n          y: y[i]\n        });\n        break;\n      } else {\n        counter++;\n        pos = (pos + 1) % len;\n      }\n    }\n\n    if (counter === x.length) {\n      return tuples;\n    }\n  }\n  return tuples;\n}\n\n/**\n * @ignore\n * @param {{x:number,y:number}} tuple\n * @param {Array<number>} powers\n * @return {Array<number>}\n */\nfunction calcCoefficients(tuple, powers) {\n  var X = tuple.slice();\n  var Y = tuple.slice();\n  for (var i = 0; i < X.length; i++) {\n    Y[i] = [tuple[i].y];\n    X[i] = new Array(powers.length);\n    for (var j = 0; j < powers.length; j++) {\n      X[i][j] = Math.pow(tuple[i].x, powers[j]);\n    }\n  }\n\n  return solve(X, Y).to1DArray();\n}\n\nfunction predict(x, powers, coefficients) {\n  let y = 0;\n  for (let k = 0; k < powers.length; k++) {\n    y += coefficients[k] * Math.pow(x, powers[k]);\n  }\n  return y;\n}\n\nfunction residualsMedian(residuals) {\n  residuals.sort((a, b) => a.residual - b.residual);\n\n  var l = residuals.length;\n  var half = Math.floor(l / 2);\n  return l % 2 === 0 ? residuals[half - 1] : residuals[half];\n}\n","/**\n * Calculate current error\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} parameters - Array of current parameter values\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {number}\n */\nexport default function errorCalculation(\n  data,\n  parameters,\n  parameterizedFunction\n) {\n  var error = 0;\n  const func = parameterizedFunction(parameters);\n\n  for (var i = 0; i < data.x.length; i++) {\n    error += Math.abs(data.y[i] - func(data.x[i]));\n  }\n\n  return error;\n}\n","import { inverse, Matrix } from 'ml-matrix';\n\n/**\n * Difference of the matrix function over the parameters\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} evaluatedData - Array of previous evaluated function values\n * @param {Array<number>} params - Array of previous parameter values\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\n * @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Matrix}\n */\nfunction gradientFunction(\n  data,\n  evaluatedData,\n  params,\n  gradientDifference,\n  paramFunction\n) {\n  const n = params.length;\n  const m = data.x.length;\n\n  var ans = new Array(n);\n\n  for (var param = 0; param < n; param++) {\n    ans[param] = new Array(m);\n    var auxParams = params.concat();\n    auxParams[param] += gradientDifference;\n    var funcParam = paramFunction(auxParams);\n\n    for (var point = 0; point < m; point++) {\n      ans[param][point] = evaluatedData[point] - funcParam(data.x[point]);\n    }\n  }\n  return new Matrix(ans);\n}\n\n/**\n * Matrix function over the samples\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} evaluatedData - Array of previous evaluated function values\n * @return {Matrix}\n */\nfunction matrixFunction(data, evaluatedData) {\n  const m = data.x.length;\n\n  var ans = new Array(m);\n\n  for (var point = 0; point < m; point++) {\n    ans[point] = [data.y[point] - evaluatedData[point]];\n  }\n\n  return new Matrix(ans);\n}\n\n/**\n * Iteration for Levenberg-Marquardt\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} params - Array of previous parameter values\n * @param {number} damping - Levenberg-Marquardt parameter\n * @param {number} gradientDifference - Adjustment for decrease the damping parameter\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Array<number>}\n */\nexport default function step(\n  data,\n  params,\n  damping,\n  gradientDifference,\n  parameterizedFunction\n) {\n  var value = damping * gradientDifference * gradientDifference;\n  var identity = Matrix.eye(params.length, params.length, value);\n\n  const func = parameterizedFunction(params);\n  var evaluatedData = data.x.map((e) => func(e));\n\n  var gradientFunc = gradientFunction(\n    data,\n    evaluatedData,\n    params,\n    gradientDifference,\n    parameterizedFunction\n  );\n  var matrixFunc = matrixFunction(data, evaluatedData);\n  var inverseMatrix = inverse(\n    identity.add(gradientFunc.mmul(gradientFunc.transpose()))\n  );\n\n  params = new Matrix([params]);\n  params = params.sub(\n    inverseMatrix\n      .mmul(gradientFunc)\n      .mmul(matrixFunc)\n      .mul(gradientDifference)\n      .transpose()\n  );\n\n  return params.to1DArray();\n}\n","import errorCalculation from './errorCalculation';\nimport step from './step';\n\n/**\n * Curve fitting algorithm\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {object} [options] - Options object\n * @param {number} [options.damping] - Levenberg-Marquardt parameter\n * @param {number} [options.gradientDifference = 10e-2] - Adjustment for decrease the damping parameter\n * @param {Array<number>} [options.minValues] - Minimum allowed values for parameters\n * @param {Array<number>} [options.maxValues] - Maximum allowed values for parameters\n * @param {Array<number>} [options.initialValues] - Array of initial parameter values\n * @param {number} [options.maxIterations = 100] - Maximum of allowed iterations\n * @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point\n * @return {{parameterValues: Array<number>, parameterError: number, iterations: number}}\n */\nexport default function levenbergMarquardt(\n  data,\n  parameterizedFunction,\n  options = {}\n) {\n  let {\n    maxIterations = 100,\n    gradientDifference = 10e-2,\n    damping = 0,\n    errorTolerance = 10e-3,\n    minValues,\n    maxValues,\n    initialValues\n  } = options;\n\n  if (damping <= 0) {\n    throw new Error('The damping option must be a positive number');\n  } else if (!data.x || !data.y) {\n    throw new Error('The data parameter must have x and y elements');\n  } else if (\n    !Array.isArray(data.x) ||\n    data.x.length < 2 ||\n    !Array.isArray(data.y) ||\n    data.y.length < 2\n  ) {\n    throw new Error(\n      'The data parameter elements must be an array with more than 2 points'\n    );\n  } else if (data.x.length !== data.y.length) {\n    throw new Error('The data parameter elements must have the same size');\n  }\n\n  var parameters =\n    initialValues || new Array(parameterizedFunction.length).fill(1);\n  let parLen = parameters.length;\n  maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n  minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n\n  if (maxValues.length !== minValues.length) {\n    throw new Error('minValues and maxValues must be the same size');\n  }\n\n  if (!Array.isArray(parameters)) {\n    throw new Error('initialValues must be an array');\n  }\n\n  var error = errorCalculation(data, parameters, parameterizedFunction);\n\n  var converged = error <= errorTolerance;\n\n  for (\n    var iteration = 0;\n    iteration < maxIterations && !converged;\n    iteration++\n  ) {\n    parameters = step(\n      data,\n      parameters,\n      damping,\n      gradientDifference,\n      parameterizedFunction\n    );\n\n    for (let k = 0; k < parLen; k++) {\n      parameters[k] = Math.min(\n        Math.max(minValues[k], parameters[k]),\n        maxValues[k]\n      );\n    }\n\n    error = errorCalculation(data, parameters, parameterizedFunction);\n    if (isNaN(error)) break;\n    converged = error <= errorTolerance;\n  }\n\n  return {\n    parameterValues: parameters,\n    parameterError: error,\n    iterations: iteration\n  };\n}\n","/**\n * Returns a new array based on extraction of specific indices of an array\n * @private\n * @param {Array} vector\n * @param {Array} indices\n */\nexport default function selection(vector, indices) {\n  let u = []; //new Float64Array(indices.length);\n  for (let i = 0; i < indices.length; i++) {\n    u[i] = vector[indices[i]];\n  }\n  return u;\n}\n","/**\n *\n * @private\n * @param {Array of arrays} collection\n */\nexport default function sortCollectionSet(collection) {\n  let objectCollection = collection\n    .map((value, index) => {\n      let key = BigInt(0);\n      value.forEach((item) => (key |= BigInt(1) << BigInt(item)));\n      return { value, index, key };\n    })\n    .sort((a, b) => {\n      if (a.key - b.key < 0) return -1;\n      return 1;\n    });\n\n  let sorted = [];\n  let indices = [];\n\n  let key;\n  for (let set of objectCollection) {\n    if (set.key !== key) {\n      key = set.key;\n      indices.push([]);\n      sorted.push(set.value);\n    }\n    indices[indices.length - 1].push(set.index);\n  }\n\n  let result = {\n    values: sorted,\n    indices: indices,\n  };\n  return result;\n}\n","import {\n  Matrix,\n  LuDecomposition,\n  solve,\n  CholeskyDecomposition,\n} from 'ml-matrix';\n\nimport sortCollectionSet from './util/sortCollectionSet';\n\n/**\n * (Combinatorial Subspace Least Squares) - subfunction for the FC-NNLS\n * @private\n * @param {Matrix} XtX\n * @param {Matrix} XtY\n * @param {Array} Pset\n * @param {Numbers} l\n * @param {Numbers} p\n */\nexport default function cssls(XtX, XtY, Pset, l, p) {\n  // Solves the set of equation XtX*K = XtY for the variables in Pset\n  // if XtX (or XtX(vars,vars)) is singular, performs the svd and find pseudoinverse, otherwise (even if ill-conditioned) finds inverse with LU decomposition and solves the set of equation\n  // it is consistent with matlab results for ill-conditioned matrices (at least consistent with test 'ill-conditionned square X rank 2, Y 3x1' in cssls.test)\n\n  let K = Matrix.zeros(l, p);\n  if (Pset === null) {\n    let choXtX = new CholeskyDecomposition(XtX);\n    if (choXtX.isPositiveDefinite() === true) {\n      K = choXtX.solve(XtY);\n    } else {\n      let luXtX = new LuDecomposition(XtX);\n      if (luXtX.isSingular() === false) {\n        K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n      } else {\n        K = solve(XtX, XtY, { useSVD: true });\n      }\n    }\n  } else {\n    let sortedPset = sortCollectionSet(Pset).values;\n    let sortedEset = sortCollectionSet(Pset).indices;\n    if (\n      sortedPset.length === 1 &&\n      sortedPset[0].length === 0 &&\n      sortedEset[0].length === p\n    ) {\n      return K;\n    } else if (\n      sortedPset.length === 1 &&\n      sortedPset[0].length === l &&\n      sortedEset[0].length === p\n    ) {\n      let choXtX = new CholeskyDecomposition(XtX);\n      if (choXtX.isPositiveDefinite() === true) {\n        K = choXtX.solve(XtY);\n      } else {\n        let luXtX = new LuDecomposition(XtX);\n        if (luXtX.isSingular() === false) {\n          K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n        } else {\n          K = solve(XtX, XtY, { useSVD: true });\n        }\n      }\n    } else {\n      for (let k = 0; k < sortedPset.length; k++) {\n        let cols2Solve = sortedEset[k];\n        let vars = sortedPset[k];\n        let L;\n        let choXtX = new CholeskyDecomposition(XtX.selection(vars, vars));\n        if (choXtX.isPositiveDefinite() === true) {\n          L = choXtX.solve(XtY.selection(vars, cols2Solve));\n        } else {\n          let luXtX = new LuDecomposition(XtX.selection(vars, vars));\n          if (luXtX.isSingular() === false) {\n            L = luXtX\n              .solve(Matrix.eye(vars.length))\n              .mmul(XtY.selection(vars, cols2Solve));\n          } else {\n            L = solve(\n              XtX.selection(vars, vars),\n              XtY.selection(vars, cols2Solve),\n              { useSVD: true },\n            );\n          }\n        }\n        for (let i = 0; i < L.rows; i++) {\n          for (let j = 0; j < L.columns; j++) {\n            K.set(vars[i], cols2Solve[j], L.get(i, j));\n          }\n        }\n      }\n    }\n  }\n  return K;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport cssls from './cssls';\n\nexport default function initialisation(X, Y) {\n  let n = X.rows;\n  let l = X.columns;\n  let p = Y.columns;\n  let iter = 0;\n\n  if (Y.rows !== n) throw new Error('ERROR: matrix size not compatible');\n\n  let W = Matrix.zeros(l, p);\n\n  // precomputes part of pseudoinverse\n  let XtX = X.transpose().mmul(X);\n  let XtY = X.transpose().mmul(Y);\n\n  let K = cssls(XtX, XtY, null, l, p); // K is lxp\n  let Pset = [];\n  for (let j = 0; j < p; j++) {\n    Pset[j] = [];\n    for (let i = 0; i < l; i++) {\n      if (K.get(i, j) > 0) {\n        Pset[j].push(i);\n      } else {\n        K.set(i, j, 0);\n      } //This is our initial solution, it's the solution found by overwriting the unconstrained least square solution\n    }\n  }\n  let Fset = [];\n  for (let j = 0; j < p; j++) {\n    if (Pset[j].length !== l) {\n      Fset.push(j);\n    }\n  }\n\n  let D = K.clone();\n\n  return { n, l, p, iter, W, XtX, XtY, K, Pset, Fset, D };\n}\n","/**\n * Computes the set difference A\\B\n * @private\n * @param {A} set A as an array\n * @param {B} set B as an array\n */\nexport default function setDifference(A, B) {\n  let C = [];\n  for (let i of A) {\n    if (!B.includes(i)) C.push(i);\n  }\n  return C;\n}\n","import setDifference from './util/setDifference';\n\n// Makes sure the solution has converged\nexport default function optimality(\n  iter,\n  maxIter,\n  XtX,\n  XtY,\n  Fset,\n  Pset,\n  W,\n  K,\n  l,\n  p,\n  D,\n) {\n  if (iter === maxIter) {\n    throw new Error('Maximum number of iterations exceeded');\n  }\n\n  // Check solution for optimality\n  let V = XtY.subMatrixColumn(Fset).subtract(XtX.mmul(K.subMatrixColumn(Fset)));\n  for (let j = 0; j < Fset.length; j++) {\n    W.setColumn(Fset[j], V.subMatrixColumn([j]));\n  }\n  let Jset = [];\n  let fullSet = [];\n  for (let i = 0; i < l; i++) {\n    fullSet.push(i);\n  }\n  for (let j = 0; j < Fset.length; j++) {\n    let notPset = setDifference(fullSet, Pset[Fset[j]]);\n    if (notPset.length === 0) {\n      Jset.push(Fset[j]);\n    } else if (W.selection(notPset, [Fset[j]]).max() <= 0) {\n      Jset.push(Fset[j]);\n    }\n  }\n  Fset = setDifference(Fset, Jset);\n\n  // For non-optimal solutions, add the appropriate variables to Pset\n  if (Fset.length !== 0) {\n    for (let j = 0; j < Fset.length; j++) {\n      for (let i = 0; i < l; i++) {\n        if (Pset[Fset[j]].includes(i)) W.set(i, Fset[j], -Infinity);\n      }\n      Pset[Fset[j]].push(W.subMatrixColumn(Fset).maxColumnIndex(j)[0]);\n    }\n    for (let j = 0; j < Fset.length; j++) {\n      D.setColumn(Fset[j], K.getColumn(Fset[j]));\n    }\n  }\n  for (let j = 0; j < p; j++) {\n    Pset[j].sort((a, b) => a - b);\n  }\n  return { Pset, Fset, W };\n}\n","import { Matrix } from 'ml-matrix';\n\nimport selection from './util/selection';\nimport cssls from './cssls';\nimport initialisation from './initialisation';\nimport optimality from './optimality';\n\n/**\n * Fast Combinatorial Non-negative Least Squares with multiple Right Hand Side\n * @param {Matrix|number[][]} X\n * @param {Matrix|number[][]} Y\n * @param {object} [options={}]\n * @param {number} [options.maxIterations] if empty maxIterations is set at 3 times the number of columns of X\n * @returns {Matrix} K\n */\nexport default function fcnnls(X, Y, options = {}) {\n  X = Matrix.checkMatrix(X);\n  Y = Matrix.checkMatrix(Y);\n  let { l, p, iter, W, XtX, XtY, K, Pset, Fset, D } = initialisation(X, Y);\n  const { maxIterations = X.columns * 3 } = options;\n\n  // Active set algorithm for NNLS main loop\n  while (Fset.length > 0) {\n    // Solves for the passive variables (uses subroutine below)\n    let L = cssls(\n      XtX,\n      XtY.subMatrixColumn(Fset),\n      selection(Pset, Fset),\n      l,\n      Fset.length,\n    );\n    for (let i = 0; i < l; i++) {\n      for (let j = 0; j < Fset.length; j++) {\n        K.set(i, Fset[j], L.get(i, j));\n      }\n    }\n\n    // Finds any infeasible solutions\n    let infeasIndex = [];\n    for (let j = 0; j < Fset.length; j++) {\n      for (let i = 0; i < l; i++) {\n        if (L.get(i, j) < 0) {\n          infeasIndex.push(j);\n          break;\n        }\n      }\n    }\n    let Hset = selection(Fset, infeasIndex);\n\n    // Makes infeasible solutions feasible (standard NNLS inner loop)\n    if (Hset.length > 0) {\n      let m = Hset.length;\n      let alpha = Matrix.ones(l, m);\n\n      while (m > 0 && iter < maxIterations) {\n        iter++;\n\n        alpha.mul(Infinity);\n\n        // Finds indices of negative variables in passive set\n        let hRowColIdx = [[], []]; // Indexes work in pairs, each pair reprensents a single element, first array is row index, second array is column index\n        let negRowColIdx = [[], []]; // Same as before\n        for (let j = 0; j < m; j++) {\n          for (let i = 0; i < Pset[Hset[j]].length; i++) {\n            if (K.get(Pset[Hset[j]][i], Hset[j]) < 0) {\n              hRowColIdx[0].push(Pset[Hset[j]][i]); // i\n              hRowColIdx[1].push(j);\n              negRowColIdx[0].push(Pset[Hset[j]][i]); // i\n              negRowColIdx[1].push(Hset[j]);\n            } // Compared to matlab, here we keep the row/column indexing (we are not taking the linear indexing)\n          }\n        }\n\n        for (let k = 0; k < hRowColIdx[0].length; k++) {\n          // could be hRowColIdx[1].length as well\n          alpha.set(\n            hRowColIdx[0][k],\n            hRowColIdx[1][k],\n            D.get(negRowColIdx[0][k], negRowColIdx[1][k]) /\n              (D.get(negRowColIdx[0][k], negRowColIdx[1][k]) -\n                K.get(negRowColIdx[0][k], negRowColIdx[1][k])),\n          );\n        }\n\n        let alphaMin = [];\n        let minIdx = [];\n        for (let j = 0; j < m; j++) {\n          alphaMin[j] = alpha.minColumn(j);\n          minIdx[j] = alpha.minColumnIndex(j)[0];\n        }\n\n        alphaMin = Matrix.rowVector(alphaMin);\n        for (let i = 0; i < l; i++) {\n          alpha.setSubMatrix(alphaMin, i, 0);\n        }\n\n        let E = new Matrix(l, m);\n        E = D.subMatrixColumn(Hset).subtract(\n          alpha\n            .subMatrix(0, l - 1, 0, m - 1)\n            .mul(D.subMatrixColumn(Hset).subtract(K.subMatrixColumn(Hset))),\n        );\n        for (let j = 0; j < m; j++) {\n          D.setColumn(Hset[j], E.subMatrixColumn([j]));\n        }\n\n        let idx2zero = [minIdx, Hset];\n        for (let k = 0; k < m; k++) {\n          D.set(idx2zero[0][k], idx2zero[1][k], 0);\n        }\n\n        for (let j = 0; j < m; j++) {\n          Pset[Hset[j]].splice(\n            Pset[Hset[j]].findIndex((item) => item === minIdx[j]),\n            1,\n          );\n        }\n\n        L = cssls(XtX, XtY.subMatrixColumn(Hset), selection(Pset, Hset), l, m);\n        for (let j = 0; j < m; j++) {\n          K.setColumn(Hset[j], L.subMatrixColumn([j]));\n        }\n\n        Hset = [];\n        for (let j = 0; j < K.columns; j++) {\n          for (let i = 0; i < l; i++) {\n            if (K.get(i, j) < 0) {\n              Hset.push(j);\n\n              break;\n            }\n          }\n        }\n        m = Hset.length;\n      }\n    }\n\n    let newParam = optimality(\n      iter,\n      maxIterations,\n      XtX,\n      XtY,\n      Fset,\n      Pset,\n      W,\n      K,\n      l,\n      p,\n      D,\n    );\n    Pset = newParam.Pset;\n    Fset = newParam.Fset;\n    W = newParam.W;\n  }\n\n  return K;\n}\n","import { Matrix } from 'ml-matrix';\n\nimport fcnnls from './fcnnls';\n\n/**\n * Fast Combinatorial Non-negative Least Squares with single Right Hand Side\n * @param {Matrix|number[][]} X\n * @param {number[]} y\n * @param {object} [options={}]\n * @param {boolean} [maxIterations] if true or empty maxIterations is set at 3 times the number of columns of X\n * @returns {Array} k\n */\nexport default function fcnnlsVector(X, y, options = {}) {\n  if (Array.isArray(y) === false) {\n    throw new TypeError('y must be a 1D Array');\n  }\n  let Y = Matrix.columnVector(y);\n  let K = fcnnls(X, Y, options);\n  let k = K.to1DArray();\n  return k;\n}\n","module.exports = function(haystack, needle, comparator, low, high) {\n  var mid, cmp;\n\n  if(low === undefined)\n    low = 0;\n\n  else {\n    low = low|0;\n    if(low < 0 || low >= haystack.length)\n      throw new RangeError(\"invalid lower bound\");\n  }\n\n  if(high === undefined)\n    high = haystack.length - 1;\n\n  else {\n    high = high|0;\n    if(high < low || high >= haystack.length)\n      throw new RangeError(\"invalid upper bound\");\n  }\n\n  while(low <= high) {\n    // The naive `low + high >>> 1` could fail for array lengths > 2**31\n    // because `>>>` converts its operands to int32. `low + (high - low >>> 1)`\n    // works for array lengths <= 2**32-1 which is also Javascript's max array\n    // length.\n    mid = low + ((high - low) >>> 1);\n    cmp = +comparator(haystack[mid], needle, mid, haystack);\n\n    // Too low.\n    if(cmp < 0.0)\n      low  = mid + 1;\n\n    // Too high.\n    else if(cmp > 0.0)\n      high = mid - 1;\n\n    // Key found.\n    else\n      return mid;\n  }\n\n  // Key not found.\n  return ~low;\n}\n","'use strict';\n\nfunction assertNumber(number) {\n\tif (typeof number !== 'number' || Number.isNaN(number)) {\n\t\tthrow new TypeError('Expected a number');\n\t}\n}\n\nexports.ascending = (left, right) => {\n\tassertNumber(left);\n\tassertNumber(right);\n\treturn left - right;\n};\n\nexports.descending = (left, right) => {\n\tassertNumber(left);\n\tassertNumber(right);\n\treturn right - left;\n};\n","import binarySearch from 'binary-search';\nimport { ascending } from 'num-sort';\n\nexport const largestPrime = 0x7fffffff;\n\nconst primeNumbers = [\n  // chunk #0\n  largestPrime, // 2^31-1\n\n  // chunk #1\n  5,\n  11,\n  23,\n  47,\n  97,\n  197,\n  397,\n  797,\n  1597,\n  3203,\n  6421,\n  12853,\n  25717,\n  51437,\n  102877,\n  205759,\n  411527,\n  823117,\n  1646237,\n  3292489,\n  6584983,\n  13169977,\n  26339969,\n  52679969,\n  105359939,\n  210719881,\n  421439783,\n  842879579,\n  1685759167,\n\n  // chunk #2\n  433,\n  877,\n  1759,\n  3527,\n  7057,\n  14143,\n  28289,\n  56591,\n  113189,\n  226379,\n  452759,\n  905551,\n  1811107,\n  3622219,\n  7244441,\n  14488931,\n  28977863,\n  57955739,\n  115911563,\n  231823147,\n  463646329,\n  927292699,\n  1854585413,\n\n  // chunk #3\n  953,\n  1907,\n  3821,\n  7643,\n  15287,\n  30577,\n  61169,\n  122347,\n  244703,\n  489407,\n  978821,\n  1957651,\n  3915341,\n  7830701,\n  15661423,\n  31322867,\n  62645741,\n  125291483,\n  250582987,\n  501165979,\n  1002331963,\n  2004663929,\n\n  // chunk #4\n  1039,\n  2081,\n  4177,\n  8363,\n  16729,\n  33461,\n  66923,\n  133853,\n  267713,\n  535481,\n  1070981,\n  2141977,\n  4283963,\n  8567929,\n  17135863,\n  34271747,\n  68543509,\n  137087021,\n  274174111,\n  548348231,\n  1096696463,\n\n  // chunk #5\n  31,\n  67,\n  137,\n  277,\n  557,\n  1117,\n  2237,\n  4481,\n  8963,\n  17929,\n  35863,\n  71741,\n  143483,\n  286973,\n  573953,\n  1147921,\n  2295859,\n  4591721,\n  9183457,\n  18366923,\n  36733847,\n  73467739,\n  146935499,\n  293871013,\n  587742049,\n  1175484103,\n\n  // chunk #6\n  599,\n  1201,\n  2411,\n  4831,\n  9677,\n  19373,\n  38747,\n  77509,\n  155027,\n  310081,\n  620171,\n  1240361,\n  2480729,\n  4961459,\n  9922933,\n  19845871,\n  39691759,\n  79383533,\n  158767069,\n  317534141,\n  635068283,\n  1270136683,\n\n  // chunk #7\n  311,\n  631,\n  1277,\n  2557,\n  5119,\n  10243,\n  20507,\n  41017,\n  82037,\n  164089,\n  328213,\n  656429,\n  1312867,\n  2625761,\n  5251529,\n  10503061,\n  21006137,\n  42012281,\n  84024581,\n  168049163,\n  336098327,\n  672196673,\n  1344393353,\n\n  // chunk #8\n  3,\n  7,\n  17,\n  37,\n  79,\n  163,\n  331,\n  673,\n  1361,\n  2729,\n  5471,\n  10949,\n  21911,\n  43853,\n  87719,\n  175447,\n  350899,\n  701819,\n  1403641,\n  2807303,\n  5614657,\n  11229331,\n  22458671,\n  44917381,\n  89834777,\n  179669557,\n  359339171,\n  718678369,\n  1437356741,\n\n  // chunk #9\n  43,\n  89,\n  179,\n  359,\n  719,\n  1439,\n  2879,\n  5779,\n  11579,\n  23159,\n  46327,\n  92657,\n  185323,\n  370661,\n  741337,\n  1482707,\n  2965421,\n  5930887,\n  11861791,\n  23723597,\n  47447201,\n  94894427,\n  189788857,\n  379577741,\n  759155483,\n  1518310967,\n\n  // chunk #10\n  379,\n  761,\n  1523,\n  3049,\n  6101,\n  12203,\n  24407,\n  48817,\n  97649,\n  195311,\n  390647,\n  781301,\n  1562611,\n  3125257,\n  6250537,\n  12501169,\n  25002389,\n  50004791,\n  100009607,\n  200019221,\n  400038451,\n  800076929,\n  1600153859,\n\n  // chunk #11\n  13,\n  29,\n  59,\n  127,\n  257,\n  521,\n  1049,\n  2099,\n  4201,\n  8419,\n  16843,\n  33703,\n  67409,\n  134837,\n  269683,\n  539389,\n  1078787,\n  2157587,\n  4315183,\n  8630387,\n  17260781,\n  34521589,\n  69043189,\n  138086407,\n  276172823,\n  552345671,\n  1104691373,\n\n  // chunk #12\n  19,\n  41,\n  83,\n  167,\n  337,\n  677,\n  1361,\n  2729,\n  5471,\n  10949,\n  21911,\n  43853,\n  87719,\n  175447,\n  350899,\n  701819,\n  1403641,\n  2807303,\n  5614657,\n  11229331,\n  22458671,\n  44917381,\n  89834777,\n  179669557,\n  359339171,\n  718678369,\n  1437356741,\n\n  // chunk #13\n  53,\n  107,\n  223,\n  449,\n  907,\n  1823,\n  3659,\n  7321,\n  14653,\n  29311,\n  58631,\n  117269,\n  234539,\n  469099,\n  938207,\n  1876417,\n  3752839,\n  7505681,\n  15011389,\n  30022781,\n  60045577,\n  120091177,\n  240182359,\n  480364727,\n  960729461,\n  1921458943\n];\n\nprimeNumbers.sort(ascending);\n\nexport function nextPrime(value) {\n  let index = binarySearch(primeNumbers, value, ascending);\n  if (index < 0) {\n    index = ~index;\n  }\n  return primeNumbers[index];\n}\n","import { largestPrime, nextPrime } from './primeFinder';\n\nconst FREE = 0;\nconst FULL = 1;\nconst REMOVED = 2;\n\nconst defaultInitialCapacity = 150;\nconst defaultMinLoadFactor = 1 / 6;\nconst defaultMaxLoadFactor = 2 / 3;\n\nexport default class HashTable {\n  constructor(options = {}) {\n    if (options instanceof HashTable) {\n      this.table = options.table.slice();\n      this.values = options.values.slice();\n      this.state = options.state.slice();\n      this.minLoadFactor = options.minLoadFactor;\n      this.maxLoadFactor = options.maxLoadFactor;\n      this.distinct = options.distinct;\n      this.freeEntries = options.freeEntries;\n      this.lowWaterMark = options.lowWaterMark;\n      this.highWaterMark = options.maxLoadFactor;\n      return;\n    }\n\n    const initialCapacity =\n      options.initialCapacity === undefined\n        ? defaultInitialCapacity\n        : options.initialCapacity;\n    if (initialCapacity < 0) {\n      throw new RangeError(\n        `initial capacity must not be less than zero: ${initialCapacity}`\n      );\n    }\n\n    const minLoadFactor =\n      options.minLoadFactor === undefined\n        ? defaultMinLoadFactor\n        : options.minLoadFactor;\n    const maxLoadFactor =\n      options.maxLoadFactor === undefined\n        ? defaultMaxLoadFactor\n        : options.maxLoadFactor;\n    if (minLoadFactor < 0 || minLoadFactor >= 1) {\n      throw new RangeError(`invalid minLoadFactor: ${minLoadFactor}`);\n    }\n    if (maxLoadFactor <= 0 || maxLoadFactor >= 1) {\n      throw new RangeError(`invalid maxLoadFactor: ${maxLoadFactor}`);\n    }\n    if (minLoadFactor >= maxLoadFactor) {\n      throw new RangeError(\n        `minLoadFactor (${minLoadFactor}) must be smaller than maxLoadFactor (${maxLoadFactor})`\n      );\n    }\n\n    let capacity = initialCapacity;\n    // User wants to put at least capacity elements. We need to choose the size based on the maxLoadFactor to\n    // avoid the need to rehash before this capacity is reached.\n    // actualCapacity * maxLoadFactor >= capacity\n    capacity = (capacity / maxLoadFactor) | 0;\n    capacity = nextPrime(capacity);\n    if (capacity === 0) capacity = 1;\n\n    this.table = newArray(capacity);\n    this.values = newArray(capacity);\n    this.state = newArray(capacity);\n\n    this.minLoadFactor = minLoadFactor;\n    if (capacity === largestPrime) {\n      this.maxLoadFactor = 1;\n    } else {\n      this.maxLoadFactor = maxLoadFactor;\n    }\n\n    this.distinct = 0;\n    this.freeEntries = capacity;\n\n    this.lowWaterMark = 0;\n    this.highWaterMark = chooseHighWaterMark(capacity, this.maxLoadFactor);\n  }\n\n  clone() {\n    return new HashTable(this);\n  }\n\n  get size() {\n    return this.distinct;\n  }\n\n  get(key) {\n    const i = this.indexOfKey(key);\n    if (i < 0) return 0;\n    return this.values[i];\n  }\n\n  set(key, value) {\n    let i = this.indexOfInsertion(key);\n    if (i < 0) {\n      i = -i - 1;\n      this.values[i] = value;\n      return false;\n    }\n\n    if (this.distinct > this.highWaterMark) {\n      const newCapacity = chooseGrowCapacity(\n        this.distinct + 1,\n        this.minLoadFactor,\n        this.maxLoadFactor\n      );\n      this.rehash(newCapacity);\n      return this.set(key, value);\n    }\n\n    this.table[i] = key;\n    this.values[i] = value;\n    if (this.state[i] === FREE) this.freeEntries--;\n    this.state[i] = FULL;\n    this.distinct++;\n\n    if (this.freeEntries < 1) {\n      const newCapacity = chooseGrowCapacity(\n        this.distinct + 1,\n        this.minLoadFactor,\n        this.maxLoadFactor\n      );\n      this.rehash(newCapacity);\n    }\n\n    return true;\n  }\n\n  remove(key, noRehash) {\n    const i = this.indexOfKey(key);\n    if (i < 0) return false;\n\n    this.state[i] = REMOVED;\n    this.distinct--;\n\n    if (!noRehash) this.maybeShrinkCapacity();\n\n    return true;\n  }\n\n  delete(key, noRehash) {\n    const i = this.indexOfKey(key);\n    if (i < 0) return false;\n\n    this.state[i] = FREE;\n    this.distinct--;\n\n    if (!noRehash) this.maybeShrinkCapacity();\n\n    return true;\n  }\n\n  maybeShrinkCapacity() {\n    if (this.distinct < this.lowWaterMark) {\n      const newCapacity = chooseShrinkCapacity(\n        this.distinct,\n        this.minLoadFactor,\n        this.maxLoadFactor\n      );\n      this.rehash(newCapacity);\n    }\n  }\n\n  containsKey(key) {\n    return this.indexOfKey(key) >= 0;\n  }\n\n  indexOfKey(key) {\n    const table = this.table;\n    const state = this.state;\n    const length = this.table.length;\n\n    const hash = key & 0x7fffffff;\n    let i = hash % length;\n    let decrement = hash % (length - 2);\n    if (decrement === 0) decrement = 1;\n\n    while (state[i] !== FREE && (state[i] === REMOVED || table[i] !== key)) {\n      i -= decrement;\n      if (i < 0) i += length;\n    }\n\n    if (state[i] === FREE) return -1;\n    return i;\n  }\n\n  containsValue(value) {\n    return this.indexOfValue(value) >= 0;\n  }\n\n  indexOfValue(value) {\n    const values = this.values;\n    const state = this.state;\n\n    for (var i = 0; i < state.length; i++) {\n      if (state[i] === FULL && values[i] === value) {\n        return i;\n      }\n    }\n\n    return -1;\n  }\n\n  indexOfInsertion(key) {\n    const table = this.table;\n    const state = this.state;\n    const length = table.length;\n\n    const hash = key & 0x7fffffff;\n    let i = hash % length;\n    let decrement = hash % (length - 2);\n    if (decrement === 0) decrement = 1;\n\n    while (state[i] === FULL && table[i] !== key) {\n      i -= decrement;\n      if (i < 0) i += length;\n    }\n\n    if (state[i] === REMOVED) {\n      const j = i;\n      while (state[i] !== FREE && (state[i] === REMOVED || table[i] !== key)) {\n        i -= decrement;\n        if (i < 0) i += length;\n      }\n      if (state[i] === FREE) i = j;\n    }\n\n    if (state[i] === FULL) {\n      return -i - 1;\n    }\n\n    return i;\n  }\n\n  ensureCapacity(minCapacity) {\n    if (this.table.length < minCapacity) {\n      const newCapacity = nextPrime(minCapacity);\n      this.rehash(newCapacity);\n    }\n  }\n\n  rehash(newCapacity) {\n    const oldCapacity = this.table.length;\n\n    if (newCapacity <= this.distinct) throw new Error('Unexpected');\n\n    const oldTable = this.table;\n    const oldValues = this.values;\n    const oldState = this.state;\n\n    const newTable = newArray(newCapacity);\n    const newValues = newArray(newCapacity);\n    const newState = newArray(newCapacity);\n\n    this.lowWaterMark = chooseLowWaterMark(newCapacity, this.minLoadFactor);\n    this.highWaterMark = chooseHighWaterMark(newCapacity, this.maxLoadFactor);\n\n    this.table = newTable;\n    this.values = newValues;\n    this.state = newState;\n    this.freeEntries = newCapacity - this.distinct;\n\n    for (var i = 0; i < oldCapacity; i++) {\n      if (oldState[i] === FULL) {\n        var element = oldTable[i];\n        var index = this.indexOfInsertion(element);\n        newTable[index] = element;\n        newValues[index] = oldValues[i];\n        newState[index] = FULL;\n      }\n    }\n  }\n\n  forEachKey(callback) {\n    for (var i = 0; i < this.state.length; i++) {\n      if (this.state[i] === FULL) {\n        if (!callback(this.table[i])) return false;\n      }\n    }\n    return true;\n  }\n\n  forEachValue(callback) {\n    for (var i = 0; i < this.state.length; i++) {\n      if (this.state[i] === FULL) {\n        if (!callback(this.values[i])) return false;\n      }\n    }\n    return true;\n  }\n\n  forEachPair(callback) {\n    for (var i = 0; i < this.state.length; i++) {\n      if (this.state[i] === FULL) {\n        if (!callback(this.table[i], this.values[i])) return false;\n      }\n    }\n    return true;\n  }\n}\n\nfunction chooseLowWaterMark(capacity, minLoad) {\n  return (capacity * minLoad) | 0;\n}\n\nfunction chooseHighWaterMark(capacity, maxLoad) {\n  return Math.min(capacity - 2, (capacity * maxLoad) | 0);\n}\n\nfunction chooseGrowCapacity(size, minLoad, maxLoad) {\n  return nextPrime(\n    Math.max(size + 1, ((4 * size) / (3 * minLoad + maxLoad)) | 0)\n  );\n}\n\nfunction chooseShrinkCapacity(size, minLoad, maxLoad) {\n  return nextPrime(\n    Math.max(size + 1, ((4 * size) / (minLoad + 3 * maxLoad)) | 0)\n  );\n}\n\nfunction newArray(size) {\n  return Array(size).fill(0);\n}\n","import HashTable from 'ml-hash-table';\n\nexport class SparseMatrix {\n  constructor(rows, columns, options = {}) {\n    if (rows instanceof SparseMatrix) {\n      // clone\n      const other = rows;\n      this._init(\n        other.rows,\n        other.columns,\n        other.elements.clone(),\n        other.threshold\n      );\n      return;\n    }\n\n    if (Array.isArray(rows)) {\n      const matrix = rows;\n      rows = matrix.length;\n      options = columns || {};\n      columns = matrix[0].length;\n      this._init(rows, columns, new HashTable(options), options.threshold);\n      for (var i = 0; i < rows; i++) {\n        for (var j = 0; j < columns; j++) {\n          var value = matrix[i][j];\n          if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n          if (value !== 0) {\n            this.elements.set(i * columns + j, matrix[i][j]);\n          }\n        }\n      }\n    } else {\n      this._init(rows, columns, new HashTable(options), options.threshold);\n    }\n  }\n\n  _init(rows, columns, elements, threshold) {\n    this.rows = rows;\n    this.columns = columns;\n    this.elements = elements;\n    this.threshold = threshold || 0;\n  }\n\n  static eye(rows = 1, columns = rows) {\n    const min = Math.min(rows, columns);\n    const matrix = new SparseMatrix(rows, columns, { initialCapacity: min });\n    for (var i = 0; i < min; i++) {\n      matrix.set(i, i, 1);\n    }\n    return matrix;\n  }\n\n  clone() {\n    return new SparseMatrix(this);\n  }\n\n  to2DArray() {\n    const copy = new Array(this.rows);\n    for (var i = 0; i < this.rows; i++) {\n      copy[i] = new Array(this.columns);\n      for (var j = 0; j < this.columns; j++) {\n        copy[i][j] = this.get(i, j);\n      }\n    }\n    return copy;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isSymmetric() {\n    if (!this.isSquare()) return false;\n\n    var symmetric = true;\n    this.forEachNonZero((i, j, v) => {\n      if (this.get(j, i) !== v) {\n        symmetric = false;\n        return false;\n      }\n      return v;\n    });\n    return symmetric;\n  }\n\n  /**\n   * Search for the wither band in the main diagonals\n   * @return {number}\n   */\n  bandWidth() {\n    let min = this.columns;\n    let max = -1;\n    this.forEachNonZero((i, j, v) => {\n      let diff = i - j;\n      min = Math.min(min, diff);\n      max = Math.max(max, diff);\n      return v;\n    });\n    return max - min;\n  }\n\n  /**\n   * Test if a matrix is consider banded using a threshold\n   * @param {number} width\n   * @return {boolean}\n   */\n  isBanded(width) {\n    let bandWidth = this.bandWidth();\n    return bandWidth <= width;\n  }\n\n  get cardinality() {\n    return this.elements.size;\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  get(row, column) {\n    return this.elements.get(row * this.columns + column);\n  }\n\n  set(row, column, value) {\n    if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n    if (value === 0) {\n      this.elements.remove(row * this.columns + column);\n    } else {\n      this.elements.set(row * this.columns + column, value);\n    }\n    return this;\n  }\n\n  mmul(other) {\n    if (this.columns !== other.rows) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        'Number of columns of left matrix are not equal to number of rows of right matrix.'\n      );\n    }\n\n    const m = this.rows;\n    const p = other.columns;\n\n    const result = new SparseMatrix(m, p);\n    this.forEachNonZero((i, j, v1) => {\n      other.forEachNonZero((k, l, v2) => {\n        if (j === k) {\n          result.set(i, l, result.get(i, l) + v1 * v2);\n        }\n        return v2;\n      });\n      return v1;\n    });\n    return result;\n  }\n\n  kroneckerProduct(other) {\n    const m = this.rows;\n    const n = this.columns;\n    const p = other.rows;\n    const q = other.columns;\n\n    const result = new SparseMatrix(m * p, n * q, {\n      initialCapacity: this.cardinality * other.cardinality\n    });\n    this.forEachNonZero((i, j, v1) => {\n      other.forEachNonZero((k, l, v2) => {\n        result.set(p * i + k, q * j + l, v1 * v2);\n        return v2;\n      });\n      return v1;\n    });\n    return result;\n  }\n\n  forEachNonZero(callback) {\n    this.elements.forEachPair((key, value) => {\n      const i = (key / this.columns) | 0;\n      const j = key % this.columns;\n      let r = callback(i, j, value);\n      if (r === false) return false; // stop iteration\n      if (this.threshold && Math.abs(r) < this.threshold) r = 0;\n      if (r !== value) {\n        if (r === 0) {\n          this.elements.remove(key, true);\n        } else {\n          this.elements.set(key, r);\n        }\n      }\n      return true;\n    });\n    this.elements.maybeShrinkCapacity();\n    return this;\n  }\n\n  getNonZeros() {\n    const cardinality = this.cardinality;\n    const rows = new Array(cardinality);\n    const columns = new Array(cardinality);\n    const values = new Array(cardinality);\n    var idx = 0;\n    this.forEachNonZero((i, j, value) => {\n      rows[idx] = i;\n      columns[idx] = j;\n      values[idx] = value;\n      idx++;\n      return value;\n    });\n    return { rows, columns, values };\n  }\n\n  setThreshold(newThreshold) {\n    if (newThreshold !== 0 && newThreshold !== this.threshold) {\n      this.threshold = newThreshold;\n      this.forEachNonZero((i, j, v) => v);\n    }\n    return this;\n  }\n\n  /**\n   * @return {SparseMatrix} - New transposed sparse matrix\n   */\n  transpose() {\n    let trans = new SparseMatrix(this.columns, this.rows, {\n      initialCapacity: this.cardinality\n    });\n    this.forEachNonZero((i, j, value) => {\n      trans.set(j, i, value);\n      return value;\n    });\n    return trans;\n  }\n}\n\nSparseMatrix.prototype.klass = 'Matrix';\n\nSparseMatrix.identity = SparseMatrix.eye;\nSparseMatrix.prototype.tensorProduct = SparseMatrix.prototype.kroneckerProduct;\n\n/*\n Add dynamically instance and static methods for mathematical operations\n */\n\nvar inplaceOperator = `\n(function %name%(value) {\n    if (typeof value === 'number') return this.%name%S(value);\n    return this.%name%M(value);\n})\n`;\n\nvar inplaceOperatorScalar = `\n(function %name%S(value) {\n    this.forEachNonZero((i, j, v) => v %op% value);\n    return this;\n})\n`;\n\nvar inplaceOperatorMatrix = `\n(function %name%M(matrix) {\n    matrix.forEachNonZero((i, j, v) => {\n        this.set(i, j, this.get(i, j) %op% v);\n        return v;\n    });\n    return this;\n})\n`;\n\nvar staticOperator = `\n(function %name%(matrix, value) {\n    var newMatrix = new SparseMatrix(matrix);\n    return newMatrix.%name%(value);\n})\n`;\n\nvar inplaceMethod = `\n(function %name%() {\n    this.forEachNonZero((i, j, v) => %method%(v));\n    return this;\n})\n`;\n\nvar staticMethod = `\n(function %name%(matrix) {\n    var newMatrix = new SparseMatrix(matrix);\n    return newMatrix.%name%();\n})\n`;\n\nconst operators = [\n  // Arithmetic operators\n  ['+', 'add'],\n  ['-', 'sub', 'subtract'],\n  ['*', 'mul', 'multiply'],\n  ['/', 'div', 'divide'],\n  ['%', 'mod', 'modulus'],\n  // Bitwise operators\n  ['&', 'and'],\n  ['|', 'or'],\n  ['^', 'xor'],\n  ['<<', 'leftShift'],\n  ['>>', 'signPropagatingRightShift'],\n  ['>>>', 'rightShift', 'zeroFillRightShift']\n];\n\nfor (const operator of operators) {\n  for (let i = 1; i < operator.length; i++) {\n    SparseMatrix.prototype[operator[i]] = eval(\n      fillTemplateFunction(inplaceOperator, {\n        name: operator[i],\n        op: operator[0]\n      })\n    );\n    SparseMatrix.prototype[`${operator[i]}S`] = eval(\n      fillTemplateFunction(inplaceOperatorScalar, {\n        name: `${operator[i]}S`,\n        op: operator[0]\n      })\n    );\n    SparseMatrix.prototype[`${operator[i]}M`] = eval(\n      fillTemplateFunction(inplaceOperatorMatrix, {\n        name: `${operator[i]}M`,\n        op: operator[0]\n      })\n    );\n\n    SparseMatrix[operator[i]] = eval(\n      fillTemplateFunction(staticOperator, { name: operator[i] })\n    );\n  }\n}\n\nvar methods = [['~', 'not']];\n\n[\n  'abs',\n  'acos',\n  'acosh',\n  'asin',\n  'asinh',\n  'atan',\n  'atanh',\n  'cbrt',\n  'ceil',\n  'clz32',\n  'cos',\n  'cosh',\n  'exp',\n  'expm1',\n  'floor',\n  'fround',\n  'log',\n  'log1p',\n  'log10',\n  'log2',\n  'round',\n  'sign',\n  'sin',\n  'sinh',\n  'sqrt',\n  'tan',\n  'tanh',\n  'trunc'\n].forEach(function (mathMethod) {\n  methods.push([`Math.${mathMethod}`, mathMethod]);\n});\n\nfor (const method of methods) {\n  for (let i = 1; i < method.length; i++) {\n    SparseMatrix.prototype[method[i]] = eval(\n      fillTemplateFunction(inplaceMethod, {\n        name: method[i],\n        method: method[0]\n      })\n    );\n    SparseMatrix[method[i]] = eval(\n      fillTemplateFunction(staticMethod, { name: method[i] })\n    );\n  }\n}\n\nfunction fillTemplateFunction(template, values) {\n  for (const i in values) {\n    template = template.replace(new RegExp(`%${i}%`, 'g'), values[i]);\n  }\n  return template;\n}\n","export default function additiveSymmetric(a, b) {\n  var i = 0;\n  var ii = a.length;\n  var d = 0;\n  for (; i < ii; i++) {\n    d += ((a[i] - b[i]) * (a[i] - b[i]) * (a[i] + b[i])) / (a[i] * b[i]);\n  }\n  return 2 * d;\n}\n","export default function avg(a, b) {\n  var ii = a.length;\n  var max = 0;\n  var ans = 0;\n  var aux = 0;\n  for (var i = 0; i < ii; i++) {\n    aux = Math.abs(a[i] - b[i]);\n    ans += aux;\n    if (max < aux) {\n      max = aux;\n    }\n  }\n  return (max + ans) / 2;\n}\n","export default function bhattacharyya(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += Math.sqrt(a[i] * b[i]);\n  }\n  return -Math.log(ans);\n}\n","export default function canberra(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += Math.abs(a[i] - b[i]) / (a[i] + b[i]);\n  }\n  return ans;\n}\n","export default function chebyshev(a, b) {\n  var ii = a.length;\n  var max = 0;\n  var aux = 0;\n  for (var i = 0; i < ii; i++) {\n    aux = Math.abs(a[i] - b[i]);\n    if (max < aux) {\n      max = aux;\n    }\n  }\n  return max;\n}\n","export default function clark(a, b) {\n  var i = 0;\n  var ii = a.length;\n  var d = 0;\n  for (; i < ii; i++) {\n    d += Math.sqrt(\n      ((a[i] - b[i]) * (a[i] - b[i])) / ((a[i] + b[i]) * (a[i] + b[i]))\n    );\n  }\n  return 2 * d;\n}\n","export default function czekanowskiSimilarity(a, b) {\n  var up = 0;\n  var down = 0;\n  for (var i = 0; i < a.length; i++) {\n    up += Math.min(a[i], b[i]);\n    down += a[i] + b[i];\n  }\n  return (2 * up) / down;\n}\n","import czekanowskiSimilarity from '../similarities/czekanowski';\n\nexport default function czekanowskiDistance(a, b) {\n  return 1 - czekanowskiSimilarity(a, b);\n}\n","export default function dice(a, b) {\n  var ii = a.length;\n  var p = 0;\n  var q1 = 0;\n  var q2 = 0;\n  for (var i = 0; i < ii; i++) {\n    p += a[i] * a[i];\n    q1 += b[i] * b[i];\n    q2 += (a[i] - b[i]) * (a[i] - b[i]);\n  }\n  return q2 / (p + q1);\n}\n","export default function divergence(a, b) {\n  var i = 0;\n  var ii = a.length;\n  var d = 0;\n  for (; i < ii; i++) {\n    d += ((a[i] - b[i]) * (a[i] - b[i])) / ((a[i] + b[i]) * (a[i] + b[i]));\n  }\n  return 2 * d;\n}\n","export default function fidelity(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += Math.sqrt(a[i] * b[i]);\n  }\n  return ans;\n}\n","export default function gower(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += Math.abs(a[i] - b[i]);\n  }\n  return ans / ii;\n}\n","export default function harmonicMean(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += (a[i] * b[i]) / (a[i] + b[i]);\n  }\n  return 2 * ans;\n}\n","export default function hellinger(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += Math.sqrt(a[i] * b[i]);\n  }\n  return 2 * Math.sqrt(1 - ans);\n}\n","export default function innerProduct(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += a[i] * b[i];\n  }\n  return ans;\n}\n","export default function intersection(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += Math.min(a[i], b[i]);\n  }\n  return 1 - ans;\n}\n","export default function jaccard(a, b) {\n  var ii = a.length;\n  var p1 = 0;\n  var p2 = 0;\n  var q1 = 0;\n  var q2 = 0;\n  for (var i = 0; i < ii; i++) {\n    p1 += a[i] * b[i];\n    p2 += a[i] * a[i];\n    q1 += b[i] * b[i];\n    q2 += (a[i] - b[i]) * (a[i] - b[i]);\n  }\n  return q2 / (p2 + q1 - p1);\n}\n","export default function jeffreys(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += (a[i] - b[i]) * Math.log(a[i] / b[i]);\n  }\n  return ans;\n}\n","export default function jensenDifference(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans +=\n      (a[i] * Math.log(a[i]) + b[i] * Math.log(b[i])) / 2 -\n      ((a[i] + b[i]) / 2) * Math.log((a[i] + b[i]) / 2);\n  }\n  return ans;\n}\n","export default function jensenShannon(a, b) {\n  var ii = a.length;\n  var p = 0;\n  var q = 0;\n  for (var i = 0; i < ii; i++) {\n    p += a[i] * Math.log((2 * a[i]) / (a[i] + b[i]));\n    q += b[i] * Math.log((2 * b[i]) / (a[i] + b[i]));\n  }\n  return (p + q) / 2;\n}\n","export default function kdivergence(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += a[i] * Math.log((2 * a[i]) / (a[i] + b[i]));\n  }\n  return ans;\n}\n","export default function kulczynski(a, b) {\n  var ii = a.length;\n  var up = 0;\n  var down = 0;\n  for (var i = 0; i < ii; i++) {\n    up += Math.abs(a[i] - b[i]);\n    down += Math.min(a[i], b[i]);\n  }\n  return up / down;\n}\n","export default function kullbackLeibler(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += a[i] * Math.log(a[i] / b[i]);\n  }\n  return ans;\n}\n","export default function kumarHassebrook(a, b) {\n  var ii = a.length;\n  var p = 0;\n  var p2 = 0;\n  var q2 = 0;\n  for (var i = 0; i < ii; i++) {\n    p += a[i] * b[i];\n    p2 += a[i] * a[i];\n    q2 += b[i] * b[i];\n  }\n  return p / (p2 + q2 - p);\n}\n","export default function kumarJohnson(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans +=\n      Math.pow(a[i] * a[i] - b[i] * b[i], 2) / (2 * Math.pow(a[i] * b[i], 1.5));\n  }\n  return ans;\n}\n","export default function lorentzian(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += Math.log(Math.abs(a[i] - b[i]) + 1);\n  }\n  return ans;\n}\n","export default function manhattan(a, b) {\n  var i = 0;\n  var ii = a.length;\n  var d = 0;\n  for (; i < ii; i++) {\n    d += Math.abs(a[i] - b[i]);\n  }\n  return d;\n}\n","export default function matusita(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += Math.sqrt(a[i] * b[i]);\n  }\n  return Math.sqrt(2 - 2 * ans);\n}\n","export default function minkowski(a, b, p) {\n  var i = 0;\n  var ii = a.length;\n  var d = 0;\n  for (; i < ii; i++) {\n    d += Math.pow(Math.abs(a[i] - b[i]), p);\n  }\n  return Math.pow(d, 1 / p);\n}\n","export default function motyka(a, b) {\n  var ii = a.length;\n  var up = 0;\n  var down = 0;\n  for (var i = 0; i < ii; i++) {\n    up += Math.min(a[i], b[i]);\n    down += a[i] + b[i];\n  }\n  return 1 - up / down;\n}\n","export default function neyman(a, b) {\n  var i = 0;\n  var ii = a.length;\n  var d = 0;\n  for (; i < ii; i++) {\n    d += ((a[i] - b[i]) * (a[i] - b[i])) / a[i];\n  }\n  return d;\n}\n","export default function pearson(a, b) {\n  var i = 0;\n  var ii = a.length;\n  var d = 0;\n  for (; i < ii; i++) {\n    d += ((a[i] - b[i]) * (a[i] - b[i])) / b[i];\n  }\n  return d;\n}\n","export default function probabilisticSymmetric(a, b) {\n  var i = 0;\n  var ii = a.length;\n  var d = 0;\n  for (; i < ii; i++) {\n    d += ((a[i] - b[i]) * (a[i] - b[i])) / (a[i] + b[i]);\n  }\n  return 2 * d;\n}\n","export default function ruzicka(a, b) {\n  var ii = a.length;\n  var up = 0;\n  var down = 0;\n  for (var i = 0; i < ii; i++) {\n    up += Math.min(a[i], b[i]);\n    down += Math.max(a[i], b[i]);\n  }\n  return up / down;\n}\n","export default function soergel(a, b) {\n  var ii = a.length;\n  var up = 0;\n  var down = 0;\n  for (var i = 0; i < ii; i++) {\n    up += Math.abs(a[i] - b[i]);\n    down += Math.max(a[i], b[i]);\n  }\n  return up / down;\n}\n","export default function sorensen(a, b) {\n  var ii = a.length;\n  var up = 0;\n  var down = 0;\n  for (var i = 0; i < ii; i++) {\n    up += Math.abs(a[i] - b[i]);\n    down += a[i] + b[i];\n  }\n  return up / down;\n}\n","export default function squared(a, b) {\n  var i = 0;\n  var ii = a.length;\n  var d = 0;\n  for (; i < ii; i++) {\n    d += ((a[i] - b[i]) * (a[i] - b[i])) / (a[i] + b[i]);\n  }\n  return d;\n}\n","export default function squaredChord(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans +=\n      (Math.sqrt(a[i]) - Math.sqrt(b[i])) * (Math.sqrt(a[i]) - Math.sqrt(b[i]));\n  }\n  return ans;\n}\n","export default function taneja(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans +=\n      ((a[i] + b[i]) / 2) *\n      Math.log((a[i] + b[i]) / (2 * Math.sqrt(a[i] * b[i])));\n  }\n  return ans;\n}\n","export default function tanimoto(a, b, bitvector) {\n  if (bitvector) {\n    var inter = 0;\n    var union = 0;\n    for (var j = 0; j < a.length; j++) {\n      inter += a[j] && b[j];\n      union += a[j] || b[j];\n    }\n    if (union === 0) {\n      return 1;\n    }\n    return inter / union;\n  } else {\n    var ii = a.length;\n    var p = 0;\n    var q = 0;\n    var m = 0;\n    for (var i = 0; i < ii; i++) {\n      p += a[i];\n      q += b[i];\n      m += Math.min(a[i], b[i]);\n    }\n    return 1 - (p + q - 2 * m) / (p + q - m);\n  }\n}\n","import tanimotoS from '../similarities/tanimoto';\n\nexport default function tanimoto(a, b, bitvector) {\n  if (bitvector) {\n    return 1 - tanimotoS(a, b, bitvector);\n  } else {\n    var ii = a.length;\n    var p = 0;\n    var q = 0;\n    var m = 0;\n    for (var i = 0; i < ii; i++) {\n      p += a[i];\n      q += b[i];\n      m += Math.min(a[i], b[i]);\n    }\n    return (p + q - 2 * m) / (p + q - m);\n  }\n}\n","export default function topsoe(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans +=\n      a[i] * Math.log((2 * a[i]) / (a[i] + b[i])) +\n      b[i] * Math.log((2 * b[i]) / (a[i] + b[i]));\n  }\n  return ans;\n}\n","export default function waveHedges(a, b) {\n  var ii = a.length;\n  var ans = 0;\n  for (var i = 0; i < ii; i++) {\n    ans += 1 - Math.min(a[i], b[i]) / Math.max(a[i], b[i]);\n  }\n  return ans;\n}\n","import binarySearch from 'binary-search';\nimport { ascending } from 'num-sort';\n\n/**\n * Function that creates the tree\n * @param {Array<Array<number>>} spectrum\n * @param {object} [options]\n * @return {Tree|null}\n * left and right have the same structure than the parent,\n * or are null if they are leaves\n */\nexport function createTree(spectrum, options = {}) {\n  var X = spectrum[0];\n  const {\n    minWindow = 0.16,\n    threshold = 0.01,\n    from = X[0],\n    to = X[X.length - 1]\n  } = options;\n\n  return mainCreateTree(\n    spectrum[0],\n    spectrum[1],\n    from,\n    to,\n    minWindow,\n    threshold\n  );\n}\n\nfunction mainCreateTree(X, Y, from, to, minWindow, threshold) {\n  if (to - from < minWindow) {\n    return null;\n  }\n\n  // search first point\n  var start = binarySearch(X, from, ascending);\n  if (start < 0) {\n    start = ~start;\n  }\n\n  // stop at last point\n  var sum = 0;\n  var center = 0;\n  for (var i = start; i < X.length; i++) {\n    if (X[i] >= to) {\n      break;\n    }\n    sum += Y[i];\n    center += X[i] * Y[i];\n  }\n\n  if (sum < threshold) {\n    return null;\n  }\n\n  center /= sum;\n  if (center - from < 1e-6 || to - center < 1e-6) {\n    return null;\n  }\n  if (center - from < minWindow / 4) {\n    return mainCreateTree(X, Y, center, to, minWindow, threshold);\n  } else {\n    if (to - center < minWindow / 4) {\n      return mainCreateTree(X, Y, from, center, minWindow, threshold);\n    } else {\n      return new Tree(\n        sum,\n        center,\n        mainCreateTree(X, Y, from, center, minWindow, threshold),\n        mainCreateTree(X, Y, center, to, minWindow, threshold)\n      );\n    }\n  }\n}\n\nclass Tree {\n  constructor(sum, center, left, right) {\n    this.sum = sum;\n    this.center = center;\n    this.left = left;\n    this.right = right;\n  }\n}\n","import { createTree } from './createTree';\n\n/**\n * Similarity between two nodes\n * @param {Tree|Array<Array<number>>} a - tree A node\n * @param {Tree|Array<Array<number>>} b - tree B node\n * @param {object} [options]\n * @return {number} similarity measure between tree nodes\n */\nexport function getSimilarity(a, b, options = {}) {\n  const { alpha = 0.1, beta = 0.33, gamma = 0.001 } = options;\n\n  if (a === null || b === null) {\n    return 0;\n  }\n  if (Array.isArray(a)) {\n    a = createTree(a);\n  }\n  if (Array.isArray(b)) {\n    b = createTree(b);\n  }\n\n  var C =\n    (alpha * Math.min(a.sum, b.sum)) / Math.max(a.sum, b.sum) +\n    (1 - alpha) * Math.exp(-gamma * Math.abs(a.center - b.center));\n\n  return (\n    beta * C +\n    ((1 - beta) *\n      (getSimilarity(a.left, b.left, options) +\n        getSimilarity(a.right, b.right, options))) /\n      2\n  );\n}\n","import { getSimilarity } from './getSimilarity';\n\nexport { createTree } from './createTree';\n\nexport function treeSimilarity(A, B, options = {}) {\n  return getSimilarity(A, B, options);\n}\n\nexport function getFunction(options = {}) {\n  return (A, B) => getSimilarity(A, B, options);\n}\n","export default function cosine(a, b) {\n  var ii = a.length;\n  var p = 0;\n  var p2 = 0;\n  var q2 = 0;\n  for (var i = 0; i < ii; i++) {\n    p += a[i] * b[i];\n    p2 += a[i] * a[i];\n    q2 += b[i] * b[i];\n  }\n  return p / (Math.sqrt(p2) * Math.sqrt(q2));\n}\n","import diceD from '../distances/dice';\n\nexport default function dice(a, b) {\n  return 1 - diceD(a, b);\n}\n","import intersectionD from '../distances/intersection';\n\nexport default function intersection(a, b) {\n  return 1 - intersectionD(a, b);\n}\n","import jaccardD from '../distances/jaccard';\n\nexport default function jaccard(a, b) {\n  return 1 - jaccardD(a, b);\n}\n","import kulczynskiD from '../distances/kulczynski';\n\nexport default function kulczynski(a, b) {\n  return 1 / kulczynskiD(a, b);\n}\n","import motykaD from '../distances/motyka';\n\nexport default function motyka(a, b) {\n  return 1 - motykaD(a, b);\n}\n","import mean from 'ml-array-mean';\n\nimport cosine from './cosine';\n\nexport default function pearson(a, b) {\n  var avgA = mean(a);\n  var avgB = mean(b);\n\n  var newA = new Array(a.length);\n  var newB = new Array(b.length);\n  for (var i = 0; i < newA.length; i++) {\n    newA[i] = a[i] - avgA;\n    newB[i] = b[i] - avgB;\n  }\n\n  return cosine(newA, newB);\n}\n","import squaredChordD from '../distances/squaredChord';\n\nexport default function squaredChord(a, b) {\n  return 1 - squaredChordD(a, b);\n}\n","'use strict';\n\n// Accuracy\nexports.acc = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = (pred.tn[i] + pred.tp[i]) / (l - 1);\n    }\n    return result;\n};\n\n// Error rate\nexports.err = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = (pred.fn[i] + pred.fp[i] / (l - 1));\n    }\n    return result;\n};\n\n// False positive rate\nexports.fpr = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = pred.fp[i] / pred.nNeg;\n    }\n    return result;\n};\n\n// True positive rate\nexports.tpr = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = pred.tp[i] / pred.nPos;\n    }\n    return result;\n};\n\n// False negative rate\nexports.fnr = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = pred.fn[i] / pred.nPos;\n    }\n    return result;\n};\n\n// True negative rate\nexports.tnr = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = pred.tn[i] / pred.nNeg;\n    }\n    return result;\n};\n\n// Positive predictive value\nexports.ppv = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = (pred.fp[i] + pred.tp[i] !== 0) ? (pred.tp[i] / (pred.fp[i] + pred.tp[i])) : 0;\n    }\n    return result;\n};\n\n// Negative predictive value\nexports.npv = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = (pred.fn[i] + pred.tn[i] !== 0) ? (pred.tn[i] / (pred.fn[i] + pred.tn[i])) : 0;\n    }\n    return result;\n};\n\n// Prediction conditioned fallout\nexports.pcfall = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = (pred.fp[i] + pred.tp[i] !== 0) ? 1 - (pred.tp[i] / (pred.fp[i] + pred.tp[i])) : 1;\n    }\n    return result;\n};\n\n// Prediction conditioned miss\nexports.pcmiss = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = (pred.fn[i] + pred.tn[i] !== 0) ? 1 - (pred.tn[i] / (pred.fn[i] + pred.tn[i])) : 1;\n    }\n    return result;\n};\n\n// Lift value\nexports.lift = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = (pred.nPosPred[i] !== 0) ? ((pred.tp[i] / pred.nPos) / (pred.nPosPred[i] / pred.nSamples)) : 0;\n    }\n    return result;\n};\n\n// Rate of positive predictions\nexports.rpp = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = pred.nPosPred[i] / pred.nSamples;\n    }\n    return result;\n};\n\n// Rate of negative predictions\nexports.rnp = pred => {\n    const l = pred.cutoffs.length;\n    const result = new Array(l);\n    for (var i = 0; i < l; i++) {\n        result[i] = pred.nNegPred[i] / pred.nSamples;\n    }\n    return result;\n};\n\n// Threshold\nexports.threshold = pred => {\n    const clone = pred.cutoffs.slice();\n    clone[0] = clone[1]; // Remove the infinite value\n    return clone;\n};\n","'use strict';\n\nconst measures = require('./measures');\n\nclass Performance {\n    /**\n     *\n     * @param prediction - The prediction matrix\n     * @param target - The target matrix (values: truthy for same class, falsy for different class)\n     * @param options\n     *\n     * @option    all    True if the entire matrix must be used. False to ignore the diagonal and lower part (default is false, for similarity/distance matrices)\n     * @option    max    True if the max value corresponds to a perfect match (like in similarity matrices), false if it is the min value (default is false, like in distance matrices. All values will be multiplied by -1)\n     */\n    constructor(prediction, target, options) {\n        options = options || {};\n        if (prediction.length !== target.length || prediction[0].length !== target[0].length) {\n            throw new Error('dimensions of prediction and target do not match');\n        }\n        const rows = prediction.length;\n        const columns = prediction[0].length;\n        const isDistance = !options.max;\n\n        const predP = [];\n\n        if (options.all) {\n            for (var i = 0; i < rows; i++) {\n                for (var j = 0; j < columns; j++) {\n                    predP.push({\n                        pred: prediction[i][j],\n                        targ: target[i][j]\n                    });\n                }\n            }\n        } else {\n            if (rows < 3 || rows !== columns) {\n                throw new Error('When \"all\" option is false, the prediction matrix must be square and have at least 3 columns');\n            }\n            for (var i = 0; i < rows - 1; i++) {\n                for (var j = i + 1; j < columns; j++) {\n                    predP.push({\n                        pred: prediction[i][j],\n                        targ: target[i][j]\n                    });\n                }\n            }\n        }\n\n        if (isDistance) {\n            predP.sort((a, b) => a.pred - b.pred);\n        } else {\n            predP.sort((a, b) => b.pred - a.pred);\n        }\n        \n        const cutoffs = this.cutoffs = [isDistance ? Number.MIN_VALUE : Number.MAX_VALUE];\n        const fp = this.fp = [0];\n        const tp = this.tp = [0];\n\n        var nPos = 0;\n        var nNeg = 0;\n\n        var currentPred = predP[0].pred;\n        var nTp = 0;\n        var nFp = 0;\n        for (var i = 0; i < predP.length; i++) {\n            if (predP[i].pred !== currentPred) {\n                cutoffs.push(currentPred);\n                fp.push(nFp);\n                tp.push(nTp);\n                currentPred = predP[i].pred;\n            }\n            if (predP[i].targ) {\n                nPos++;\n                nTp++;\n            } else {\n                nNeg++;\n                nFp++;\n            }\n        }\n        cutoffs.push(currentPred);\n        fp.push(nFp);\n        tp.push(nTp);\n\n        const l = cutoffs.length;\n        const fn = this.fn = new Array(l);\n        const tn = this.tn = new Array(l);\n        const nPosPred = this.nPosPred = new Array(l);\n        const nNegPred = this.nNegPred = new Array(l);\n\n        for (var i = 0; i < l; i++) {\n            fn[i] = nPos - tp[i];\n            tn[i] = nNeg - fp[i];\n\n            nPosPred[i] = tp[i] + fp[i];\n            nNegPred[i] = tn[i] + fn[i];\n        }\n\n        this.nPos = nPos;\n        this.nNeg = nNeg;\n        this.nSamples = nPos + nNeg;\n    }\n\n    /**\n     * Computes a measure from the prediction object.\n     *\n     * Many measures are available and can be combined :\n     * To create a ROC curve, you need fpr and tpr\n     * To create a DET curve, you need fnr and fpr\n     * To create a Lift chart, you need rpp and lift\n     *\n     * Possible measures are : threshold (Threshold), acc (Accuracy), err (Error rate),\n     * fpr (False positive rate), tpr (True positive rate), fnr (False negative rate), tnr (True negative rate), ppv (Positive predictive value),\n     * npv (Negative predictive value), pcfall (Prediction-conditioned fallout), pcmiss (Prediction-conditioned miss), lift (Lift value), rpp (Rate of positive predictions), rnp (Rate of negative predictions)\n     *\n     * @param measure - The short name of the measure\n     *\n     * @return [number]\n     */\n    getMeasure(measure) {\n        if (typeof measure !== 'string') {\n            throw new Error('No measure specified');\n        }\n        if (!measures[measure]) {\n            throw new Error(`The specified measure (${measure}) does not exist`);\n        }\n        return measures[measure](this);\n    }\n\n    /**\n     * Returns the area under the ROC curve\n     */\n    getAURC() {\n        const l = this.cutoffs.length;\n        const x = new Array(l);\n        const y = new Array(l);\n        for (var i = 0; i < l; i++) {\n            x[i] = this.fp[i] / this.nNeg;\n            y[i] = this.tp[i] / this.nPos;\n        }\n        var auc = 0;\n        for (i = 1; i < l; i++) {\n            auc += 0.5 * (x[i] - x[i - 1]) * (y[i] + y[i - 1]);\n        }\n        return auc;\n    }\n\n    /**\n     * Returns the area under the DET curve\n     */\n    getAUDC() {\n        const l = this.cutoffs.length;\n        const x = new Array(l);\n        const y = new Array(l);\n        for (var i = 0; i < l; i++) {\n            x[i] = this.fn[i] / this.nPos;\n            y[i] = this.fp[i] / this.nNeg;\n        }\n        var auc = 0;\n        for (i = 1; i < l; i++) {\n            auc += 0.5 * (x[i] + x[i - 1]) * (y[i] - y[i - 1]);\n        }\n        return auc;\n    }\n\n    getDistribution(options) {\n        options = options || {};\n        var cutLength = this.cutoffs.length;\n        var cutLow = options.xMin || Math.floor(this.cutoffs[cutLength - 1] * 100) / 100;\n        var cutHigh = options.xMax || Math.ceil(this.cutoffs[1] * 100) / 100;\n        var interval = options.interval || Math.floor(((cutHigh - cutLow) / 20 * 10000000) - 1) / 10000000; // Trick to avoid the precision problem of float numbers\n\n        var xLabels = [];\n        var interValues = [];\n        var intraValues = [];\n        var interCumPercent = [];\n        var intraCumPercent = [];\n\n        var nTP = this.tp[cutLength - 1], currentTP = 0;\n        var nFP = this.fp[cutLength - 1], currentFP = 0;\n\n        for (var i = cutLow, j = (cutLength - 1); i <= cutHigh; i += interval) {\n            while (this.cutoffs[j] < i)\n                j--;\n\n            xLabels.push(i);\n\n            var thisTP = nTP - currentTP - this.tp[j];\n            var thisFP = nFP - currentFP - this.fp[j];\n\n            currentTP += thisTP;\n            currentFP += thisFP;\n\n            interValues.push(thisFP);\n            intraValues.push(thisTP);\n\n            interCumPercent.push(100 - (nFP - this.fp[j]) / nFP * 100);\n            intraCumPercent.push(100 - (nTP - this.tp[j]) / nTP * 100);\n        }\n\n        return {\n            xLabels: xLabels,\n            interValues: interValues,\n            intraValues: intraValues,\n            interCumPercent: interCumPercent,\n            intraCumPercent: intraCumPercent\n        };\n    }\n}\n\nPerformance.names = {\n    acc: 'Accuracy',\n    err: 'Error rate',\n    fpr: 'False positive rate',\n    tpr: 'True positive rate',\n    fnr: 'False negative rate',\n    tnr: 'True negative rate',\n    ppv: 'Positive predictive value',\n    npv: 'Negative predictive value',\n    pcfall: 'Prediction-conditioned fallout',\n    pcmiss: 'Prediction-conditioned miss',\n    lift: 'Lift value',\n    rpp: 'Rate of positive predictions',\n    rnp: 'Rate of negative predictions',\n    threshold: 'Threshold'\n};\n\nmodule.exports = Performance;\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\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;\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","// auxiliary file to create the 256 look at table elements\n\nvar ans = new Array(256);\nfor (var i = 0; i < 256; i++) {\n    var num = i;\n    var c = 0;\n    while (num) {\n        num = num & (num - 1);\n        c++;\n    }\n    ans[i] = c;\n}\n\nmodule.exports = ans;","'use strict';\n\nvar eightBits = require('./creator');\n\n/**\n * Count the number of true values in an array\n * @param {Array} arr\n * @return {number}\n */\nfunction count(arr) {\n    var c = 0;\n    for (var i = 0; i < arr.length; i++) {\n        c += eightBits[arr[i] & 0xff] + eightBits[(arr[i] >> 8) & 0xff] + eightBits[(arr[i] >> 16) & 0xff] + eightBits[(arr[i] >> 24) & 0xff];\n    }\n    return c;\n}\n\n/**\n * Logical AND operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction and(arr1, arr2) {\n    var ans = new Array(arr1.length);\n    for (var i = 0; i < arr1.length; i++)\n        ans[i] = arr1[i] & arr2[i];\n    return ans;\n}\n\n/**\n * Logical OR operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction or(arr1, arr2) {\n    var ans = new Array(arr1.length);\n    for (var i = 0; i < arr1.length; i++)\n        ans[i] = arr1[i] | arr2[i];\n    return ans;\n}\n\n/**\n * Logical XOR operation\n * @param {Array} arr1\n * @param {Array} arr2\n * @return {Array}\n */\nfunction xor(arr1, arr2) {\n    var ans = new Array(arr1.length);\n    for (var i = 0; i < arr1.length; i++)\n        ans[i] = arr1[i] ^ arr2[i];\n    return ans;\n}\n\n/**\n * Logical NOT operation\n * @param {Array} arr\n * @return {Array}\n */\nfunction not(arr) {\n    var ans = new Array(arr.length);\n    for (var i = 0; i < ans.length; i++)\n        ans[i] = ~arr[i];\n    return ans;\n}\n\n/**\n * Gets the n value of array arr\n * @param {Array} arr\n * @param {number} n\n * @return {boolean}\n */\nfunction getBit(arr, n) {\n    var index = n >> 5; // Same as Math.floor(n/32)\n    var mask = 1 << (31 - n % 32);\n    return Boolean(arr[index] & mask);\n}\n\n/**\n * Sets the n value of array arr to the value val\n * @param {Array} arr\n * @param {number} n\n * @param {boolean} val\n * @return {Array}\n */\nfunction setBit(arr, n, val) {\n    var index = n >> 5; // Same as Math.floor(n/32)\n    var mask = 1 << (31 - n % 32);\n    if (val)\n        arr[index] = mask | arr[index];\n    else\n        arr[index] = ~mask & arr[index];\n    return arr;\n}\n\n/**\n * Translates an array of numbers to a string of bits\n * @param {Array} arr\n * @returns {string}\n */\nfunction toBinaryString(arr) {\n    var str = '';\n    for (var i = 0; i < arr.length; i++) {\n        var obj = (arr[i] >>> 0).toString(2);\n        str += '00000000000000000000000000000000'.substr(obj.length) + obj;\n    }\n    return str;\n}\n\n/**\n * Creates an array of numbers based on a string of bits\n * @param {string} str\n * @returns {Array}\n */\nfunction parseBinaryString(str) {\n    var len = str.length / 32;\n    var ans = new Array(len);\n    for (var i = 0; i < len; i++) {\n        ans[i] = parseInt(str.substr(i*32, 32), 2) | 0;\n    }\n    return ans;\n}\n\n/**\n * Translates an array of numbers to a hex string\n * @param {Array} arr\n * @returns {string}\n */\nfunction toHexString(arr) {\n    var str = '';\n    for (var i = 0; i < arr.length; i++) {\n        var obj = (arr[i] >>> 0).toString(16);\n        str += '00000000'.substr(obj.length) + obj;\n    }\n    return str;\n}\n\n/**\n * Creates an array of numbers based on a hex string\n * @param {string} str\n * @returns {Array}\n */\nfunction parseHexString(str) {\n    var len = str.length / 8;\n    var ans = new Array(len);\n    for (var i = 0; i < len; i++) {\n        ans[i] = parseInt(str.substr(i*8, 8), 16) | 0;\n    }\n    return ans;\n}\n\n/**\n * Creates a human readable string of the array\n * @param {Array} arr\n * @returns {string}\n */\nfunction toDebug(arr) {\n    var binary = toBinaryString(arr);\n    var str = '';\n    for (var i = 0; i < arr.length; i++) {\n        str += '0000'.substr((i * 32).toString(16).length) + (i * 32).toString(16) + ':';\n        for (var j = 0; j < 32; j += 4) {\n            str += ' ' + binary.substr(i * 32 + j, 4);\n        }\n        if (i < arr.length - 1) str += '\\n';\n    }\n    return str\n}\n\nmodule.exports = {\n    count: count,\n    and: and,\n    or: or,\n    xor: xor,\n    not: not,\n    getBit: getBit,\n    setBit: setBit,\n    toBinaryString: toBinaryString,\n    parseBinaryString: parseBinaryString,\n    toHexString: toHexString,\n    parseHexString: parseHexString,\n    toDebug: toDebug\n};\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mode of the given values\n * @param {Array<number>} input\n * @return {number}\n */\n\nfunction mode(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 maxValue = 0;\n  var maxCount = 0;\n  var count = 0;\n  var counts = {};\n\n  for (var i = 0; i < input.length; ++i) {\n    var element = input[i];\n    count = counts[element];\n\n    if (count) {\n      counts[element]++;\n      count++;\n    } else {\n      counts[element] = count = 1;\n    }\n\n    if (count > maxCount) {\n      maxCount = count;\n      maxValue = input[i];\n    }\n  }\n\n  return maxValue;\n}\n\nexport default mode;\n","import max from 'ml-array-max';\nimport sum from 'ml-array-sum';\n\n/**\n * Computes the norm of the given values\n * @param {Array<number>} input\n * @param {object} [options={}]\n * @param {string} [options.algorithm='absolute'] absolute, sum or max\n * @return {number}\n */\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\n  if (!Array.isArray(input)) {\n    throw new Error('input must be an array');\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);\n        if (absoluteSumValue === 0) return input.slice(0);\n        return input.map(function (element) {\n          return element / absoluteSumValue;\n        });\n      }\n\n    case 'max':\n      {\n        var maxValue = max(input);\n        if (maxValue === 0) return input.slice(0);\n        return input.map(function (element) {\n          return element / maxValue;\n        });\n      }\n\n    case 'sum':\n      {\n        var sumValue = sum(input);\n        if (sumValue === 0) return input.slice(0);\n        return input.map(function (element) {\n          return element / sumValue;\n        });\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","import isArray from 'is-any-array';\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array<number>} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array<number>}\n */\n\nfunction sequentialFill() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (_typeof(input) === 'object' && !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 && 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    input.length = 0; // only works with normal array\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","import arrayMean from 'ml-array-mean';\nimport isArray from 'is-any-array';\n\n/**\n * Computes the variance of the given values\n * @param {Array} values\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @param {number} [options.mean = arrayMean] - precalculated mean, if any.\n * @return {number}\n */\n\nfunction variance(values) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(values)) {\n    throw new TypeError('input must be an array');\n  }\n\n  var _options$unbiased = options.unbiased,\n      unbiased = _options$unbiased === void 0 ? true : _options$unbiased,\n      _options$mean = options.mean,\n      mean = _options$mean === void 0 ? arrayMean(values) : _options$mean;\n  var sqrError = 0;\n\n  for (var i = 0; i < values.length; i++) {\n    var x = values[i] - mean;\n    sqrError += x * x;\n  }\n\n  if (unbiased) {\n    return sqrError / (values.length - 1);\n  } else {\n    return sqrError / values.length;\n  }\n}\n\nexport default variance;\n","import variance from 'ml-array-variance';\n\n/**\n * Computes the standard deviation of the given values\n * @param {Array} values\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @param {number} [options.mean = arrayMean] - precalculated mean, if any.\n * @return {number}\n */\n\nfunction standardDeviation(values) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return Math.sqrt(variance(values, options));\n}\n\nexport default standardDeviation;\n","/**\n * Merge abscissa values if the ordinate value is in a list of centroids\n * @param {object} originalPoints\n * @param {Array<number>} originalPoints.x\n * @param {Array<number>} originalPoints.y\n * @param {Array<number>} centroids\n * @param {object} [options]\n * @param {number} [options.window = 0.01] - has to be a positive number\n * @return {{x: Array<number>, y: Array<number>}}\n */\nexport default function mergeByCentroids(\n  originalPoints,\n  centroids,\n  options = {}\n) {\n  const { window = 0.01 } = options;\n\n  var mergedPoints = {\n    x: centroids.slice(),\n    y: new Array(centroids.length).fill(0)\n  };\n\n  var originalIndex = 0;\n  var mergedIndex = 0;\n  while (\n    originalIndex < originalPoints.x.length &&\n    mergedIndex < centroids.length\n  ) {\n    var diff = originalPoints.x[originalIndex] - centroids[mergedIndex];\n    if (Math.abs(diff) < window) {\n      mergedPoints.y[mergedIndex] += originalPoints.y[originalIndex++];\n    } else if (diff < 0) {\n      originalIndex++;\n    } else {\n      mergedIndex++;\n    }\n  }\n\n  return mergedPoints;\n}\n","import binarySearch from 'binary-search';\nimport { ascending, descending } from 'num-sort';\n\n/**\n *\n * @param {object} points\n * @param {Array<number>} originalPoints.x\n * @param {Array<number>} originalPoints.y\n * @param {*} options\n * @return {{x: Array<number>, y: Array<number>}}\n */\nexport default function closestX(points, options) {\n  const { x, y } = points;\n  const { target = x[0], reverse = false } = options;\n\n  let index;\n  if (reverse) {\n    index = binarySearch(x, target, descending);\n  } else {\n    index = binarySearch(x, target, ascending);\n  }\n\n  if (index >= 0) {\n    return {\n      x: x[index],\n      y: y[index]\n    };\n  } else {\n    index = ~index;\n    if (\n      (index !== 0 && Math.abs(x[index] - target) > 0.5) ||\n      index === x.length\n    ) {\n      return {\n        x: x[index - 1],\n        y: y[index - 1]\n      };\n    } else {\n      return {\n        x: x[index],\n        y: y[index]\n      };\n    }\n  }\n}\n","import mean from 'ml-array-mean';\n\n/**\n *\n * @param {object} points\n * @param {Array<number>} points.x\n * @param {Array<number>} points.y\n * @param {object} [options]\n * @param {boolean} [options.unbiased = true] - if true, divide by (n-1); if false, divide by n.\n * @return {number}\n */\nexport default function covariance(points, options = {}) {\n  const { x, y } = points;\n  const { unbiased = true } = options;\n\n  const meanX = mean(x);\n  const meanY = mean(y);\n\n  var error = 0;\n\n  for (let i = 0; i < x.length; i++) {\n    error += (x[i] - meanX) * (y[i] - meanY);\n  }\n\n  if (unbiased) {\n    return error / (x.length - 1);\n  } else {\n    return error / x.length;\n  }\n}\n","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param {object} points\n * @param {Array<number>} points.x - sorted abscissas values\n * @param {Array<number>} points.y - ordinates values\n * @param {object} [options]\n * @param {number} [options.groupWidth = 0.001] - window for abscissas to merge\n * @return {{x: Array<number>, y: Array<number>}}\n */\nexport default function maxMerge(points, options = {}) {\n  const { x, y } = points;\n  const { groupWidth = 0.001 } = options;\n\n  var merged = { x: [], y: [] };\n  var maxAbscissa = { x: [], y: [] };\n  var size = 0;\n  var index = 0;\n\n  while (index < x.length) {\n    if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n      maxAbscissa.x.push(x[index]);\n      maxAbscissa.y.push(y[index]);\n      merged.x.push(x[index]);\n      merged.y.push(y[index]);\n      index++;\n      size++;\n    } else {\n      if (y[index] > maxAbscissa.y[size - 1]) {\n        maxAbscissa.x[size - 1] = x[index];\n        maxAbscissa.y[size - 1] = y[index];\n      }\n      merged.x[size - 1] = x[index];\n      merged.y[size - 1] += y[index];\n      index++;\n    }\n  }\n\n  merged.x = maxAbscissa.x.slice();\n\n  return merged;\n}\n","import binarySearch from 'binary-search';\nimport { ascending, descending } from 'num-sort';\n\n/**\n * @param {object} points\n * @param {Array<number>} points.x - sorted abscissas values\n * @param {Array<number>} points.y - ordinates values\n * @param {object} [options]\n * @param {object} [options.from = {index: 0}]\n * @param {object} [options.to = {index: x.length-1}]\n * @param {boolean} [options.reverse = false]\n * @return {{index: number, value: number}}\n */\nexport default function maxY(points, options = {}) {\n  const { x, y } = points;\n  let {\n    from = { index: 0 },\n    to = { index: x.length },\n    reverse = false\n  } = options;\n\n  if (from.value !== undefined && from.index === undefined) {\n    from.index = calculateIndex(from.value, x, reverse);\n  }\n\n  if (to.value !== undefined && to.index === undefined) {\n    to.index = calculateIndex(to.value, x, reverse);\n  }\n\n  var currentMax = Number.MIN_VALUE;\n  var currentIndex;\n  for (var i = from.index; i < to.index; i++) {\n    if (currentMax < y[i]) {\n      currentMax = y[i];\n      currentIndex = i;\n    }\n  }\n\n  return {\n    index: currentIndex,\n    value: currentMax\n  };\n}\n\n/**\n * @param {number} value\n * @param {Array<number>} x\n * @param {boolean} reverse\n * @return {number} index of the value in the array\n */\nfunction calculateIndex(value, x, reverse) {\n  let index;\n  if (reverse) {\n    index = binarySearch(x, value, descending);\n  } else {\n    index = binarySearch(x, value, ascending);\n  }\n\n  if (index < 0) {\n    throw new Error(`the value ${value} doesn't belongs to the abscissa value`);\n  }\n\n  return index;\n}\n","export default function sortX(points, options = {}) {\n  const { x, y } = points;\n  const { reverse = false } = options;\n\n  var sortFunc;\n  if (!reverse) {\n    sortFunc = (a, b) => a.x - b.x;\n  } else {\n    sortFunc = (a, b) => b.x - a.x;\n  }\n\n  var grouped = x\n    .map((val, index) => ({\n      x: val,\n      y: y[index]\n    }))\n    .sort(sortFunc);\n\n  var response = { x: x.slice(), y: y.slice() };\n  for (var i = 0; i < x.length; i++) {\n    response.x[i] = grouped[i].x;\n    response.y[i] = grouped[i].y;\n  }\n\n  return response;\n}\n","\n/**\n * In place modification of the 2 arrays to make X unique and sum the Y if X has the same value\n * @param {object} [points={}] : Object of points contains property x (an array) and y (an array)\n * @return points\n */\n\nexport default function uniqueX(points = {}) {\n  const { x, y } = points;\n  if (x.length < 2) return;\n  if (x.length !== y.length) {\n    throw new Error('The X and Y arrays mush have the same length');\n  }\n\n  let current = x[0];\n  let counter = 0;\n\n  for (let i = 1; i < x.length; i++) {\n    if (current !== x[i]) {\n      counter++;\n      current = x[i];\n      x[counter] = x[i];\n      if (i !== counter) {\n        y[counter] = 0;\n      }\n    }\n    if (i !== counter) {\n      y[counter] += y[i];\n    }\n  }\n\n  x.length = counter + 1;\n  y.length = counter + 1;\n}\n","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param {object} points\n * @param {Array<number>} points.x - sorted abscissas values\n * @param {Array<number>} points.y - ordinates values\n * @param {object} [options]\n * @param {number} [options.groupWidth = 0.001] - window for abscissas to merge\n * @return {{x: Array<number>, y: Array<number>}}\n */\nexport default function weightedMerge(points, options = {}) {\n  const { x, y } = points;\n  const { groupWidth = 0.001 } = options;\n\n  var merged = { x: [], y: [] };\n  var weightedAbscissa = { x: [], y: [] };\n  var size = 0;\n  var index = 0;\n\n  while (index < x.length) {\n    if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n      weightedAbscissa.x.push(x[index] * y[index]);\n      weightedAbscissa.y.push(y[index]);\n      merged.x.push(x[index]);\n      merged.y.push(y[index]);\n      index++;\n      size++;\n    } else {\n      weightedAbscissa.x[size - 1] += x[index] * y[index];\n      weightedAbscissa.y[size - 1] += y[index];\n      merged.x[size - 1] = x[index];\n      merged.y[size - 1] += y[index];\n      index++;\n    }\n  }\n\n  for (var i = 0; i < merged.x.length; i++) {\n    merged.x[i] = weightedAbscissa.x[i] / weightedAbscissa.y[i];\n  }\n\n  return merged;\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  var xLength = x.length;\n\n  var step = (to - from) / (numberOfPoints - 1);\n  var halfStep = step / 2;\n\n  var output = new Array(numberOfPoints);\n\n  var initialOriginalStep = x[1] - x[0];\n  var lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n\n  // Init main variables\n  var min = from - halfStep;\n  var max = from + halfStep;\n\n  var previousX = Number.MIN_VALUE;\n  var previousY = 0;\n  var nextX = x[0] - initialOriginalStep;\n  var nextY = 0;\n\n  var currentValue = 0;\n  var slope = 0;\n  var intercept = 0;\n  var sumAtMin = 0;\n  var sumAtMax = 0;\n\n  var i = 0; // index of input\n  var j = 0; // index of output\n\n  function getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n  }\n\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      var 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  var xLength = x.length;\n\n  var step = (to - from) / (numberOfPoints - 1);\n  var halfStep = step / 2;\n  var lastStep = x[x.length - 1] - x[x.length - 2];\n\n  var start = from - halfStep;\n  var output = new Array(numberOfPoints);\n\n  // Init main variables\n  var min = start;\n  var max = start + step;\n\n  var previousX = -Number.MAX_VALUE;\n  var previousY = 0;\n  var nextX = x[0];\n  var nextY = y[0];\n  var frontOutsideSpectra = 0;\n  var backOutsideSpectra = true;\n\n  var currentValue = 0;\n\n  // for slot algorithm\n  var currentPoints = 0;\n\n  var i = 1; // index of input\n  var 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","export default function getZones(from, to, numberOfPoints, 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, numberOfPoints }];\n  }\n\n  // need to deal with overlapping exclusions and out of bound exclusions\n\n  let toRemove = exclusions.reduce(\n    (previous, exclusion) => (previous += exclusion.to - exclusion.from),\n    0\n  );\n  let total = to - from;\n  let unitsPerPoint = (total - toRemove) / numberOfPoints;\n  let zones = [];\n  let currentFrom = from;\n  let totalPoints = 0;\n  for (let exclusion of exclusions) {\n    let currentNbPoints = Math.round(\n      (exclusion.from - currentFrom) / unitsPerPoint\n    );\n    totalPoints += currentNbPoints;\n    if (currentNbPoints > 0) {\n      zones.push({\n        from: currentFrom,\n        to: exclusion.from,\n        numberOfPoints: currentNbPoints\n      });\n    }\n\n    currentFrom = exclusion.to;\n  }\n  if (numberOfPoints - totalPoints > 0) {\n    zones.push({\n      from: currentFrom,\n      to: to,\n      numberOfPoints: numberOfPoints - totalPoints\n    });\n  }\n\n  return zones;\n}\n","import sequentialFill from 'ml-array-sequential-fill';\n\nimport equallySpacedSmooth from './equallySpacedSmooth';\nimport equallySpacedSlot from './equallySpacedSlot';\nimport getZones from './getZones';\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 * @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 * @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  } = 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  let zones = getZones(from, to, numberOfPoints, exclusions);\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    xResult = xResult.concat(zoneResult.x);\n    yResult = yResult.concat(zoneResult.y);\n  }\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  var 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","import { DecisionTreeClassifier, DecisionTreeRegression } from \"ml-cart\";\nimport {\n  RandomForestClassifier,\n  RandomForestRegression\n} from \"ml-random-forest\";\n\n// Try to keep this list in the same structure as the README.\n\n// Unsupervised learning\nexport { PCA } from \"ml-pca\";\nimport * as HClust from \"ml-hclust\";\nexport { HClust };\nexport { default as KMeans } from \"ml-kmeans\";\n\n// Supervised learning\nimport * as NaiveBayes from \"ml-naivebayes\";\nexport { NaiveBayes };\nexport { default as KNN } from \"ml-knn\";\nexport { PLS, KOPLS, OPLS, OPLSNipals } from \"ml-pls\";\nimport * as CrossValidation from \"ml-cross-validation\";\nexport { CrossValidation };\nexport { default as ConfusionMatrix } from \"ml-confusion-matrix\";\nexport { DecisionTreeClassifier };\nexport { RandomForestClassifier };\n\n// Artificial neural networks\nexport { default as FNN } from \"ml-fnn\";\nexport { default as SOM } from \"ml-som\";\n\n// Regression\nexport {\n  SimpleLinearRegression,\n  PolynomialRegression,\n  MultivariateLinearRegression,\n  PowerRegression,\n  ExponentialRegression,\n  TheilSenRegression,\n  RobustPolynomialRegression\n} from \"ml-regression\";\nexport { DecisionTreeRegression };\nexport { RandomForestRegression };\n\n// Optimization\nexport { default as levenbergMarquardt } from \"ml-levenberg-marquardt\";\nimport * as FCNNLS from \"ml-fcnnls\";\nexport { FCNNLS };\n\n// Math\nimport * as MatrixLib from \"ml-matrix\";\nconst {\n  Matrix,\n  SVD,\n  EVD,\n  CholeskyDecomposition,\n  LuDecomposition,\n  QrDecomposition\n} = MatrixLib;\nexport {\n  MatrixLib,\n  Matrix,\n  SVD,\n  EVD,\n  CholeskyDecomposition,\n  LuDecomposition,\n  QrDecomposition\n};\n\nexport { SparseMatrix } from \"ml-sparse-matrix\";\nexport { default as Kernel } from \"ml-kernel\";\nimport { distance, similarity } from \"ml-distance\";\nexport { distance as Distance, similarity as Similarity };\nexport { default as distanceMatrix } from \"ml-distance-matrix\";\nexport { default as XSadd } from \"ml-xsadd\";\n\n// Statistics\nexport { default as Performance } from \"ml-performance\";\n\n// Data preprocessing\nexport { default as savitzkyGolay } from \"ml-savitzky-golay\";\n\n// Utility\nexport { default as BitArray } from \"ml-bit-array\";\nexport { default as HashTable } from \"ml-hash-table\";\nexport { default as padArray } from \"ml-pad-array\";\nexport { default as binarySearch } from \"binary-search\";\nimport * as numSort from \"num-sort\";\nexport { numSort };\nexport { default as Random } from \"ml-random\";\n\nimport min from \"ml-array-min\";\nimport max from \"ml-array-max\";\nimport median from \"ml-array-median\";\nimport mean from \"ml-array-mean\";\nimport mode from \"ml-array-mode\";\nimport normed from \"ml-array-normed\";\nimport rescale from \"ml-array-rescale\";\nimport sequentialFill from \"ml-array-sequential-fill\";\nimport sum from \"ml-array-sum\";\nimport standardDeviation from \"ml-array-standard-deviation\";\nimport variance from \"ml-array-variance\";\nexport const Array = {\n  min,\n  max,\n  median,\n  mean,\n  mode,\n  normed,\n  rescale,\n  sequentialFill,\n  standardDeviation,\n  sum,\n  variance\n};\n\nimport centroidsMerge from \"ml-array-xy-centroids-merge\";\nimport closestX from \"ml-arrayxy-closestx\";\nimport covariance from \"ml-array-xy-covariance\";\nimport maxMerge from \"ml-array-xy-max-merge\";\nimport maxY from \"ml-array-xy-max-y\";\nimport sortX from \"ml-array-xy-sort-x\";\nimport uniqueX from \"ml-arrayxy-uniquex\";\nimport weightedMerge from \"ml-array-xy-weighted-merge\";\nimport equallySpaced from \"ml-array-xy-equally-spaced\";\nimport filterX from \"ml-array-xy-filter-x\";\nexport const ArrayXY = {\n  centroidsMerge,\n  closestX,\n  covariance,\n  maxMerge,\n  maxY,\n  sortX,\n  uniqueX,\n  weightedMerge,\n  equallySpaced,\n  filterX\n};\n"],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","max","input","isArray","TypeError","length","maxValue","i","min","minValue","rescale","options","arguments","undefined","output","Array","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","checkRowIndex","matrix","index","outer","rows","checkColumnIndex","columns","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","rowOut","some","r","from","columnOut","c","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","value","array","push","name","sumByRow","sum","j","get","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","x","varianceByColumn","varianceAll","size","centerByRow","set","centerByColumn","centerAll","getScaleByRow","scale","Math","pow","sqrt","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","inspectMatrix","indent","repeat","indentData","constructor","inspectData","maxRows","maxColumns","maxNumSize","maxI","maxJ","result","line","formatNumber","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","e","substring","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","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","tan","tanh","trunc","arg0","powS","powM","from1DArray","newRows","newColumns","newData","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","Number","isInteger","interval","eye","diag","data","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","Error","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","Float64Array","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","y","r1","c1","r2","c2","console","warn","embed","mat","resultat","blockMult","a","b","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","MatrixColumnView","MatrixColumnSelectionView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowView","MatrixRowSelectionView","MatrixSelectionView","MatrixSubView","MatrixTransposeView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","wrap","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","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","iter","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","d","subMatrix0","subMatrix1","subMatrix2","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","linearDependencies","results","Abis","svd","pseudoInverse","svdSolution","SVD","covariance","xMatrix","yMatrix","yIsSame","cov","correlation","sdx","sdy","corr","EigenvalueDecomposition","assumeSymmetric","tred2","tql2","H","ort","orthes","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","hh","dl1","c3","el1","s2","tst1","low","high","nn","exshift","z","w","ra","sa","vr","vi","notlast","cdivres","cdiv","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","B","nipals","scaleScores","maxIterations","terminationCriteria","u","diff","tOld","counter","xResidual","residual","yResidual","betas","sumValue","toDiscreteDistribution","numberOfClasses","counts","giniImpurity","probabilities","getNumberOfClasses","filter","val","arr","map","reduce","giniGain","splitted","splitsImpurity","splits","currentSplit","squaredError","meanArray","currentElement","regressionError","matrixSplitter","lesserX","greaterX","lesserY","greaterY","zip","ret","gainFunctions","gini","Utils","regression","splitFunctions","TreeNode","kind","gainFunction","splitFunction","minNumSamples","maxDepth","bestSplit","XTranspose","bestGain","Infinity","check","currentFeature","splitValues","featureSplit","currentSplitVal","split","gain","maxGain","splitValue","lesser","greater","calculatePrediction","distribution","train","currentDepth","parentGain","splitColumn","splittedMatrix","left","right","classify","setNodeParameters","node","defaultOptions","DecisionTreeClassifier","model","root","Tree","assign","trainingSet","trainingLabels","predict","toPredict","predictions","load","DecisionTreeRegression","trainingValues","checkFloat","examplesBaggingWithReplacement","trainingValue","seed","engine","Random","autoSeed","Xr","featureBagging","replacement","toRet","usedIndex","Set","has","RandomForestBase","maxFeatures","nEstimators","treeOptions","isClassifier","indexes","useSampleBagging","Estimator","DTClassifier","DTRegression","estimators","est","res","values","predictionValues","RandomForestClassifier","baseModel","mode","pop","_ref","module","exports","window","median","quickSelectMedian","slice","selectionMethods","arrayMean","arrayMedian","selectionMethod","RandomForestRegression","PCA","dataset","means","stdevs","S","R","excludedFeatures","isCovarianceMatrix","method","nCompNIPALS","ignoreZeroVariance","_computeFromCovarianceMatrix","_adjust","covarianceMatrix","_computeWithNIPALS","singularValues","eigenvalues","singularValue","nComponents","invert","getExplainedVariance","getCumulativeVariance","explained","getEigenvectors","getEigenvalues","getStandardDeviations","getLoadings","evd","EVD","reverse","dc","NIPALS","squaredEuclidean","euclidean","distanceMatrix","distanceFn","getMatrix","Heap","defaultCmp","heapify","heappop","heappush","heappushpop","heapreplace","insort","nlargest","nsmallest","updateItem","_siftdown","_siftup","lo","hi","cmp","mid","concat","item","lastelt","returnitem","_i","_j","_len","_ref1","_results","_results1","pos","elem","los","startpos","newitem","parent","parentpos","childpos","endpos","rightpos","replace","pushpop","nodes","peek","contains","clear","empty","heap","toArray","insert","top","front","factory","this","require$$0","Cluster","children","height","isLeaf","cut","list","ans","group","groups","forEach","child","traverse","cb","visit","cluster","singleLink","dKI","dKJ","completeLink","averageLink","dIJ","nj","ai","aj","weightedAverageLink","centroidLink","medianLink","wardLink","nk","wardLink2","agnes","distanceFunction","isDistanceMatrix","updateFunc","getDistanceMatrix","numLeaves","toLowerCase","clusters","distance","getSmallestDistance","cluster1","cluster2","newCluster","newClusters","newDistanceMatrix","previous","newIndex","getPreviousIndex","prevI","prevICluster","smallest","smallestI","smallestJ","prev1","prev2","nearestVector","listVectors","similarityFunction","vectorIndex","maxSim","sim","minDist","MAX_VALUE","dist","calculateDistanceMatrix","updateClusterID","centers","clusterID","updateCenters","prevCenters","K","nDim","centersLen","dim","id","hasConverged","oldCenters","tolerance","LOOP","FLOAT_MUL","sh1","sh2","sh3","multiply_uint32","nlo","nhi","XSadd","Date","now","state","Uint32Array","init","getFloat","bind","getUint32","nextState","periodCertification","PROB_TOLERANCE","randomChoice","valuesArr","cumSum","getArray","randomIndex","seedOrRandom","xsadd","XSAdd","randomGenerator","choice","randomSample","mostDistant","maxDist","minDistCent","kmeanspp","nSamples","localTrials","firstCenterIdx","closestDistSquared","cumSumClosestDistSquared","candidateIdx","candidates","distanceToCandidates","euclideanDistances","bestCandidate","bestPot","bestDistSquared","newDistSquared","newPot","A","distanceSymbol","KMeansResult","centroids","converged","iterations","nearest","centroid","computeInformation","enrichedCentroids","withIterations","initialization","step","newCenters","kmeansGenerator","stepNumber","stepResult","kmeans","separateClasses","features","classes","totalPerClasses","separatedClasses","currentIndex","GaussianNB","reload","calculateProbabilities","C1","PI","std","logPriorProbability","currentStd","getCurrentClass","modelName","currentCase","maxProbability","predictedClass","currentProbability","calculateLogProbability","C2","MultinomialNB","conditionalProbability","priorProbability","separateClass","classValues","total","divisor","matrixLog","Node","obj","KDTree","points","metric","dimensions","restoreParent","buildTree","toJSONImpl","point","maxNodes","maxDistance","bestNodes","BinaryHeap","nearestSearch","ownDistance","linearPoint","bestChild","linearDistance","otherChild","saveNode","content","src","dest","depth","scoreFunction","element","bubbleUp","end","sinkDown","parentN","elemScore","child2N","child1N","swap","child1","child1Score","child2","child2Score","KNN","labels","kdTree","isEuclidean","euclideanDistance","getSinglePrediction","knn","nearestPoints","pointsPerClass","maxPoints","lastElement","currentClass","currentPoints","pow2array","initializeMatrices","PLS","meanX","stdDevX","meanY","stdDevY","PBQ","R2X","scaleMethod","latentVectors","rx","cx","ry","cy","ssqXcal","sumOfSquaresY","T","P","Q","W","transposeX","transposeY","tIndex","maxSumColIndex","uIndex","t1","den","pnorm","ssqYcal","E","F","KOPLS","YLoadingMat","SigmaPow","YScoreMat","predScoreMat","YOrthLoadingVec","YOrthEigen","YOrthScoreMat","toNorm","TURegressionCoeff","kernelX","kernel","orthogonalComp","predictiveComp","predictiveComponents","orthogonalComponents","compute","Identity","Sigma","YOrthScoreNorm","TpiPrime","CoTemp","SoTemp","toiPrime","ITo","lastScoreMat","lastTpPrime","KTestTrain","YOrthScoreVector","scoreMatPrime","p1","p2","p3","prediction","predYOrthVectors","ConfusionMatrix","fromLabels","actual","predicted","distinctLabels","actualIdx","predictedIdx","getLabels","getTotalCount","getTrueCount","getFalseCount","getTruePositiveCount","label","getIndex","getTrueNegativeCount","getFalsePositiveCount","getFalseNegativeCount","getPositiveCount","getNegativeCount","getTruePositiveRate","getTrueNegativeRate","getPositivePredictiveValue","TP","getNegativePredictiveValue","TN","getFalseNegativeRate","getFalsePositiveRate","getFalseDiscoveryRate","FP","getFalseOmissionRate","FN","getF1Score","getMatthewsCorrelationCoefficient","getInformedness","getMarkedness","getConfusionTable","getAccuracy","correct","incorrect","getCount","actualIndex","predictedIndex","accuracy","M","N","twiddle","getFolds","allIdx","current","folds","randi","foldsIndex","testIndex","trainIndex","el","idx2","sampleAClass","classVector","fraction","classVectorSorted","JSON","parse","stringify","keys","indexOfSelected","ind","mask","includes","leaveOneOut","Classifier","classifierOptions","leavePOut","distinct","getDistinct","confusionMatrix","initMatrix","gen","combinations","testIdx","trainIdx","validateWithCallback","validate","kFold","testFeatures","trainFeatures","testLabels","trainLabels","getTrainTest","classifier","predictedLabels","updateConfusionMatrix","OPLSNipals","numberOSC","uNew","wOrtho","tOrtho","pOrtho","err","filteredX","weightsXOrtho","loadingsXOrtho","scoresXOrtho","weightsXPred","loadingsXpred","scoresXpred","loadingsY","tss","OPLS","opls","meansY","stdevsY","tCV","tOrthCV","yHatCV","nComp","cvFolds","Q2","oplsCV","modelNC","nc","yHatk","tPredk","tOrthk","oplsk","fold","trainTest","_getTrainTest","testXk","Xk","Yk","dataCenter","dataSD","plsCV","Eh","scores","tPred","yHat","tssy","press","Q2y","_predictAll","xRes","XOrth","FeaturesCS","labelsCS","Xres","plsCall","R2x","R2y","plsC","pPred","wPred","betasPred","Qpc","tOrth","pOrth","wOrth","totalPred","Yres","getLogs","getScores","scoresX","scoresY","trueLabels","tssx","oplsC","rss","xEx","rssx","logistic","expELU","param","softExponential","softExponentialPrime","ACTIVATION_FUNCTIONS","activation","derivate","arctan","softsign","relu","softplus","bent","sinusoid","sinc","gaussian","Layer","inputSize","outputSize","regularization","epsilon","activationParam","selectedFunction","params","actFunction","derFunction","activationFunction","mlMatrix","forward","backpropagation","delta","dW","db","aCopy","update","OutputLayer","FeedForwardNeuralNetworks","hiddenLayers","learningRate","dicts","layers","buildNetwork","dictOutputs","inputs","propagate","outputs","NodeSquare","weights","som","neighbors","adjustWeights","target","influence","getDistance","otherNode","getDistanceTorus","distX","distY","gridDim","getNeighbors","xy","torus","getPos","bestNeighbor","direction","dist1","dist2","simA","simB","getPosition","NodeHexagonal","hX","getDistanceHexagonal","distZ","fields","randomizer","squareEuclidean","gridType","SOM","hasOwnProperty","numWeights","converters","getConverters","extractor","creator","nodeType","hx","distanceMethod","getMaxDistance","done","times","findBMU","adjust","iterationCount","startLearningRate","mapRadius","algorithmMethod","_initNodes","loadModel","eval","export","exportModel","includeDistance","initNodes","setTraining","convertedSet","numIterations","timeConstant","trainOne","neighbourhoodRadius","trainingSetFactor","getRandomValue","bmu","_findBestMatchingUnit","now2","radiusLimit","xMin","xMax","yMin","yMax","theX","theY","getConvertedNodes","findBestMatchingUnit","candidate","lowest","computePosition","self","_predict","getQuantizationError","fit","getFit","normalizers","denormalizers","getNormalizer","getDenormalizer","minMax","normalizer","denormalizer","zero","one","maybeToPrecision","digits","checkArraySize","BaseRegression","new","toLaTeX","score","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","regress","precision","_toFormula","isLaTeX","sup","closeSup","fn","str","charAt","json","pr","FT","SimpleLinearRegression","slope","intercept","computeX","xFactor","absIntercept","operator","slr","numerator","ExponentialRegression","er","yl","linear","PowerRegression","newInputs","latex","xl","MultivariateLinearRegression","statistics","xt","xx","invxx","beta","fittedValues","residuals","ri","stdError","stdErrorMatrix","stdErrors","tStats","summary","regressionStatistics","standardError","observations","variables","tStat","sigma","GaussianKernel","constant","PolynomialKernel","SigmoidKernel","ANOVAKernel","len","CauchyKernel","ExponentialKernel","HistogramIntersectionKernel","LaplacianKernel","MultiquadraticKernel","RationalQuadraticKernel","kernelType","rbf","polynomial","poly","anova","cauchy","histogram","HistogramKernel","laplacian","multiquadratic","rational","RationalKernel","sigmoid","mlp","Kernel","KernelConstructor","kernelFunction","landmarks","kernelMatrix","TheilSenRegression","theilSen","slopes","medianSlope","cuts","RobustPolynomialRegression","robustPolynomial","_","tuples","getRandomTuples","tuple","calcCoefficients","residualsMedian","half","errorCalculation","parameters","parameterizedFunction","func","gradientFunction","evaluatedData","gradientDifference","paramFunction","auxParams","funcParam","matrixFunction","damping","gradientFunc","matrixFunc","inverseMatrix","levenbergMarquardt","errorTolerance","minValues","maxValues","initialValues","parLen","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","iteration","parameterValues","parameterError","sortCollectionSet","collection","objectCollection","key","BigInt","sorted","cssls","XtX","XtY","Pset","choXtX","luXtX","sortedPset","sortedEset","cols2Solve","vars","initialisation","Fset","D","setDifference","C","optimality","maxIter","Jset","fullSet","notPset","fcnnls","infeasIndex","Hset","hRowColIdx","negRowColIdx","alphaMin","minIdx","idx2zero","findIndex","newParam","fcnnlsVector","haystack","needle","comparator","assertNumber","number","largestPrime","primeNumbers","ascending","nextPrime","binarySearch","FREE","FULL","REMOVED","defaultInitialCapacity","defaultMinLoadFactor","defaultMaxLoadFactor","HashTable","table","minLoadFactor","maxLoadFactor","freeEntries","lowWaterMark","highWaterMark","initialCapacity","capacity","chooseHighWaterMark","indexOfKey","indexOfInsertion","newCapacity","chooseGrowCapacity","rehash","remove","noRehash","maybeShrinkCapacity","delete","chooseShrinkCapacity","containsKey","hash","decrement","containsValue","indexOfValue","ensureCapacity","minCapacity","oldCapacity","oldTable","oldValues","oldState","newTable","newValues","newState","chooseLowWaterMark","forEachKey","forEachValue","forEachPair","minLoad","maxLoad","SparseMatrix","_init","elements","symmetric","forEachNonZero","bandWidth","isBanded","width","cardinality","v1","v2","getNonZeros","setThreshold","newThreshold","trans","inplaceOperator","inplaceOperatorScalar","inplaceOperatorMatrix","staticOperator","inplaceMethod","staticMethod","operators","fillTemplateFunction","op","methods","mathMethod","template","RegExp","additiveSymmetric","avg","bhattacharyya","canberra","chebyshev","clark","czekanowskiSimilarity","up","down","czekanowskiDistance","dice","q1","q2","divergence","fidelity","gower","harmonicMean","hellinger","innerProduct","intersection","jaccard","jeffreys","jensenDifference","jensenShannon","kdivergence","kulczynski","kullbackLeibler","kumarHassebrook","kumarJohnson","lorentzian","manhattan","matusita","minkowski","motyka","neyman","pearson","probabilisticSymmetric","ruzicka","soergel","sorensen","squared","squaredChord","taneja","tanimoto","bitvector","inter","union","tanimotoS","topsoe","waveHedges","createTree","spectrum","minWindow","to","mainCreateTree","start","getSimilarity","gamma","treeSimilarity","getFunction","cosine","diceD","intersectionD","jaccardD","kulczynskiD","motykaD","avgA","avgB","newA","newB","squaredChordD","pred","cutoffs","tn","tp","fp","nNeg","nPos","nPosPred","nNegPred","Performance","isDistance","predP","all","targ","currentPred","nTp","nFp","getMeasure","measure","measures","getAURC","auc","getAUDC","getDistribution","cutLength","cutLow","cutHigh","xLabels","interValues","intraValues","interCumPercent","intraCumPercent","nTP","currentTP","nFP","currentFP","thisTP","thisFP","names","acc","fpr","tpr","fnr","tnr","ppv","npv","pcfall","pcmiss","lift","rpp","rnp","arrayCase","cond","matrixCase","padArray","windowSize","derivative","pad","padValue","savitzkyGolay","J","inic","Jtranspose","Jinv","det","eightBits","arr1","arr2","getBit","setBit","toBinaryString","substr","parseBinaryString","toHexString","parseHexString","toDebug","binary","maxCount","_options$algorithm","algorithm","absoluteSumValue","absoluteSum","_typeof","iterator","sequentialFill","_options","_options$from","_options$to","_options$size","_options$unbiased","_options$mean","sqrError","mergeByCentroids","originalPoints","mergedPoints","originalIndex","mergedIndex","closestX","descending","maxMerge","groupWidth","merged","maxAbscissa","maxY","calculateIndex","sortX","sortFunc","grouped","response","uniqueX","weightedMerge","weightedAbscissa","integral","x0","x1","equallySpacedSmooth","numberOfPoints","xLength","halfStep","initialOriginalStep","lastOriginalStep","previousX","previousY","nextX","nextY","currentValue","sumAtMin","sumAtMax","getSlope","y0","y1","main","equallySpacedSlot","lastStep","frontOutsideSpectra","backOutsideSpectra","getZones","exclusions","exclusion","toRemove","unitsPerPoint","zones","currentFrom","totalPoints","currentNbPoints","equallySpaced","arrayXY","variant","xResult","yResult","zone","zoneResult","processZone","filterX","currentZoneIndex","newX","newY","position","MatrixLib","normed","ArrayXY","centroidsMerge"],"mappings":"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"}