{"version":3,"file":"baselines.js","sources":["../node_modules/ml-airpls/src/choleskySolver.js","../node_modules/cuthill-mckee/cuthill-mckee.js","../node_modules/ml-airpls/src/utils.js","../node_modules/ml-airpls/src/index.js","../node_modules/is-any-array/src/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../src/airPLS.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/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/transpose.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/ml-regression-base/src/maybeToPrecision.js","../node_modules/ml-regression-base/src/checkArrayLength.js","../node_modules/ml-regression-base/src/index.js","../node_modules/ml-regression-polynomial/src/index.js","../node_modules/ml-baseline-correction-regression/src/index.js","../src/iterativePolynomial.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-spectra-processing/node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-spectra-processing/lib-esm/x/xCheck.js","../node_modules/ml-array-sum/lib-es6/index.js","../node_modules/ml-array-mean/lib-es6/index.js","../node_modules/ml-spectra-processing/lib-esm/x/xPadding.js","../node_modules/ml-spectra-processing/lib-esm/x/xRolling.js","../node_modules/ml-spectra-processing/lib-esm/x/xRollingAverage.js","../node_modules/ml-spectra-processing/lib-esm/x/xRollingMedian.js","../src/rollingAverage.js","../node_modules/ml-rolling-ball-baseline/src/rollingBall.js","../src/rollingBall.js","../src/rollingMedian.js"],"sourcesContent":["// Based on https://github.com/scijs/cholesky-solve\r\n\r\n/*\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2013 Eric Arnebäck\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n*/\r\n\r\nfunction ldlSymbolic(\r\n  n /* A and L are n-by-n, where n >= 0 */,\r\n  Ap /* input of size n + 1, not modified */,\r\n  Ai /* input of size nz=Ap[n], not modified */,\r\n  Lp /* output of size n + 1, not defined on input */,\r\n  Parent /* output of size n, not defined on input */,\r\n  Lnz /* output of size n, not defined on input */,\r\n  Flag /* workspace of size n, not defn. on input or output */,\r\n) {\r\n  let i, k, p, kk, p2;\r\n\r\n  for (k = 0; k < n; k++) {\r\n    /* L(k,:) pattern: all nodes reachable in etree from nz in A(0:k-1,k) */\r\n    Parent[k] = -1; /* parent of k is not yet known */\r\n    Flag[k] = k; /* mark node k as visited */\r\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\r\n    kk = k; /* kth original, or permuted, column */\r\n    p2 = Ap[kk + 1];\r\n    for (p = Ap[kk]; p < p2; p++) {\r\n      /* A (i,k) is nonzero (original or permuted A) */\r\n      i = Ai[p];\r\n\r\n      if (i < k) {\r\n        /* follow path from i to root of etree, stop at flagged node */\r\n        for (; Flag[i] !== k; i = Parent[i]) {\r\n          /* find parent of i if not yet determined */\r\n          if (Parent[i] === -1) Parent[i] = k;\r\n          Lnz[i]++; /* L (k,i) is nonzero */\r\n          Flag[i] = k; /* mark i as visited */\r\n        }\r\n      }\r\n    }\r\n  }\r\n  /* construct Lp index array from Lnz column counts */\r\n  Lp[0] = 0;\r\n  for (k = 0; k < n; k++) {\r\n    Lp[k + 1] = Lp[k] + Lnz[k];\r\n  }\r\n}\r\n\r\nfunction ldlNumeric(\r\n  n /* A and L are n-by-n, where n >= 0 */,\r\n  Ap /* input of size n+1, not modified */,\r\n  Ai /* input of size nz=Ap[n], not modified */,\r\n  Ax /* input of size nz=Ap[n], not modified */,\r\n  Lp /* input of size n+1, not modified */,\r\n  Parent /* input of size n, not modified */,\r\n  Lnz /* output of size n, not defn. on input */,\r\n  Li /* output of size lnz=Lp[n], not defined on input */,\r\n  Lx /* output of size lnz=Lp[n], not defined on input */,\r\n  D /* output of size n, not defined on input */,\r\n  Y /* workspace of size n, not defn. on input or output */,\r\n  Pattern /* workspace of size n, not defn. on input or output */,\r\n  Flag /* workspace of size n, not defn. on input or output */,\r\n) {\r\n  let yi, lKi;\r\n  let i, k, p, kk, p2, len, top;\r\n  for (k = 0; k < n; k++) {\r\n    /* compute nonzero Pattern of kth row of L, in topological order */\r\n    Y[k] = 0.0; /* Y(0:k) is now all zero */\r\n    top = n; /* stack for pattern is empty */\r\n    Flag[k] = k; /* mark node k as visited */\r\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\r\n    kk = k; /* kth original, or permuted, column */\r\n    p2 = Ap[kk + 1];\r\n    for (p = Ap[kk]; p < p2; p++) {\r\n      i = Ai[p]; /* get A(i,k) */\r\n      if (i <= k) {\r\n        Y[i] += Ax[p]; /* scatter A(i,k) into Y (sum duplicates) */\r\n        for (len = 0; Flag[i] !== k; i = Parent[i]) {\r\n          Pattern[len++] = i; /* L(k,i) is nonzero */\r\n          Flag[i] = k; /* mark i as visited */\r\n        }\r\n        while (len > 0) Pattern[--top] = Pattern[--len];\r\n      }\r\n    }\r\n    /* compute numerical values kth row of L (a sparse triangular solve) */\r\n    D[k] = Y[k]; /* get D(k,k) and clear Y(k) */\r\n    Y[k] = 0.0;\r\n    for (; top < n; top++) {\r\n      i = Pattern[top]; /* Pattern[top:n-1] is pattern of L(:,k) */\r\n      yi = Y[i]; /* get and clear Y(i) */\r\n      Y[i] = 0.0;\r\n      p2 = Lp[i] + Lnz[i];\r\n      for (p = Lp[i]; p < p2; p++) {\r\n        Y[Li[p]] -= Lx[p] * yi;\r\n      }\r\n      lKi = yi / D[i]; /* the nonzero entry L(k,i) */\r\n      D[k] -= lKi * yi;\r\n      Li[p] = k; /* store L(k,i) in column form of L */\r\n      Lx[p] = lKi;\r\n      Lnz[i]++; /* increment count of nonzeros in col i */\r\n    }\r\n\r\n    if (D[k] === 0.0) return k; /* failure, D(k,k) is zero */\r\n  }\r\n\r\n  return n; /* success, diagonal of D is all nonzero */\r\n}\r\n\r\nfunction ldlLsolve(\r\n  n /* L is n-by-n, where n >= 0 */,\r\n  X /* size n. right-hand-side on input, soln. on output */,\r\n  Lp /* input of size n+1, not modified */,\r\n  Li /* input of size lnz=Lp[n], not modified */,\r\n  Lx /* input of size lnz=Lp[n], not modified */,\r\n) {\r\n  let j, p, p2;\r\n  for (j = 0; j < n; j++) {\r\n    p2 = Lp[j + 1];\r\n    for (p = Lp[j]; p < p2; p++) {\r\n      X[Li[p]] -= Lx[p] * X[j];\r\n    }\r\n  }\r\n}\r\nfunction ldlDsolve(\r\n  n /* D is n-by-n, where n >= 0 */,\r\n  X /* size n. right-hand-side on input, soln. on output */,\r\n  D /* input of size n, not modified */,\r\n) {\r\n  let j;\r\n  for (j = 0; j < n; j++) {\r\n    X[j] /= D[j];\r\n  }\r\n}\r\nfunction ldlLTsolve(\r\n  n /* L is n-by-n, where n >= 0 */,\r\n  X /* size n. right-hand-side on input, soln. on output */,\r\n  Lp /* input of size n+1, not modified */,\r\n  Li /* input of size lnz=Lp[n], not modified */,\r\n  Lx /* input of size lnz=Lp[n], not modified */,\r\n) {\r\n  let j, p, p2;\r\n  for (j = n - 1; j >= 0; j--) {\r\n    p2 = Lp[j + 1];\r\n    for (p = Lp[j]; p < p2; p++) {\r\n      X[j] -= Lx[p] * X[Li[p]];\r\n    }\r\n  }\r\n}\r\n\r\nfunction ldlPerm(\r\n  n /* size of X, B, and P */,\r\n  X /* output of size n. */,\r\n  B /* input of size n. */,\r\n  P /* input permutation array of size n. */,\r\n) {\r\n  let j;\r\n  for (j = 0; j < n; j++) {\r\n    X[j] = B[P[j]];\r\n  }\r\n}\r\n\r\nfunction ldlPermt(\r\n  n /* size of X, B, and P */,\r\n  X /* output of size n. */,\r\n  B /* input of size n. */,\r\n  P /* input permutation array of size n. */,\r\n) {\r\n  let j;\r\n  for (j = 0; j < n; j++) {\r\n    X[P[j]] = B[j];\r\n  }\r\n}\r\n\r\nfunction prepare(M, n, P) {\r\n  // if a permutation was specified, apply it.\r\n  if (P) {\r\n    let Pinv = new Array(n);\r\n\r\n    for (let k = 0; k < n; k++) {\r\n      Pinv[P[k]] = k;\r\n    }\r\n\r\n    let Mt = []; // scratch memory\r\n    // Apply permutation. We make M into P*M*P^T\r\n    for (let a = 0; a < M.length; ++a) {\r\n      let ar = Pinv[M[a][0]];\r\n      let ac = Pinv[M[a][1]];\r\n\r\n      // we only store the upper-diagonal elements(since we assume matrix is symmetric, we only need to store these)\r\n      // if permuted element is below diagonal, we simply transpose it.\r\n      if (ac < ar) {\r\n        let t = ac;\r\n        ac = ar;\r\n        ar = t;\r\n      }\r\n\r\n      Mt[a] = [];\r\n      Mt[a][0] = ar;\r\n      Mt[a][1] = ac;\r\n      Mt[a][2] = M[a][2];\r\n    }\r\n\r\n    M = Mt; // copy scratch memory.\r\n  } else {\r\n    // if P argument is null, we just use an identity permutation.\r\n    P = [];\r\n    for (let i = 0; i < n; ++i) {\r\n      P[i] = i;\r\n    }\r\n  }\r\n\r\n  // The sparse matrix we are decomposing is A.\r\n  // Now we shall create A from M.\r\n  let Ap = new Array(n + 1);\r\n  let Ai = new Array(M.length);\r\n  let Ax = new Array(M.length);\r\n\r\n  // count number of non-zero elements in columns.\r\n  let LNZ = [];\r\n  for (let i = 0; i < n; ++i) {\r\n    LNZ[i] = 0;\r\n  }\r\n  for (let a = 0; a < M.length; ++a) {\r\n    LNZ[M[a][1]]++;\r\n  }\r\n\r\n  Ap[0] = 0;\r\n  for (let i = 0; i < n; ++i) {\r\n    Ap[i + 1] = Ap[i] + LNZ[i];\r\n  }\r\n\r\n  let coloffset = [];\r\n  for (let a = 0; a < n; ++a) {\r\n    coloffset[a] = 0;\r\n  }\r\n\r\n  // go through all elements in M, and add them to sparse matrix A.\r\n  for (let i = 0; i < M.length; ++i) {\r\n    let e = M[i];\r\n    let col = e[1];\r\n\r\n    let adr = Ap[col] + coloffset[col];\r\n    Ai[adr] = e[0];\r\n    Ax[adr] = e[2];\r\n\r\n    coloffset[col]++;\r\n  }\r\n\r\n  let D = new Array(n);\r\n  let Y = new Array(n);\r\n  let Lp = new Array(n + 1);\r\n  let Parent = new Array(n);\r\n  let Lnz = new Array(n);\r\n  let Flag = new Array(n);\r\n  let Pattern = new Array(n);\r\n  let bp1 = new Array(n);\r\n  let x = new Array(n);\r\n  let d;\r\n\r\n  ldlSymbolic(n, Ap, Ai, Lp, Parent, Lnz, Flag);\r\n\r\n  let Lx = new Array(Lp[n]);\r\n  let Li = new Array(Lp[n]);\r\n\r\n  d = ldlNumeric(n, Ap, Ai, Ax, Lp, Parent, Lnz, Li, Lx, D, Y, Pattern, Flag);\r\n\r\n  if (d === n) {\r\n    return function (b) {\r\n      ldlPerm(n, bp1, b, P);\r\n      ldlLsolve(n, bp1, Lp, Li, Lx);\r\n      ldlDsolve(n, bp1, D);\r\n      ldlLTsolve(n, bp1, Lp, Li, Lx);\r\n      ldlPermt(n, x, bp1, P);\r\n\r\n      return x;\r\n    };\r\n  } else {\r\n    return null;\r\n  }\r\n}\r\n\r\nexport { prepare as default };\r\n","'use strict'\n\nmodule.exports = cuthillMckee\n\nfunction compareNum(a, b) { return a - b }\n\nfunction cuthillMckee(list, n) {\n  var adj = new Array(n)\n  var visited = new Array(n)\n  for(var i=0; i<n; ++i) {\n    adj[i]     = []\n    visited[i] = false\n  }\n\n  for(var i=0; i<list.length; ++i) {\n    var l = list[i]\n    adj[l[0]].push(l[1])\n  }\n\n  var toVisit = new Array(n)\n  var eol = 0\n  var ptr = 0\n  for(var i=0; i<n; ++i) {\n    if(visited[i]) {\n      continue\n    }\n    toVisit[eol++] = i\n    visited[i] = true\n    while(ptr < eol) {\n      var v = toVisit[ptr++]\n      var nbhd = adj[v]\n      nbhd.sort(compareNum)\n      for(var j=0; j<nbhd.length; ++j) {\n        var u = nbhd[j]\n        if(visited[u]) {\n          continue\n        }\n        visited[u] = true\n        toVisit[eol++] = u\n      }\n    }\n  }\n\n  var result = new Array(n)\n  for(var i=0; i<n; ++i) {\n    result[toVisit[i]] = i\n  }\n\n  return result\n}\n","import cuthillMckee from 'cuthill-mckee';\r\n\r\nconst getClosestNumber = (array = [], goal = 0) => {\r\n  const closest = array.reduce((prev, curr) => {\r\n    return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;\r\n  });\r\n  return closest;\r\n};\r\n\r\nconst getCloseIndex = (array = [], goal = 0) => {\r\n  const closest = getClosestNumber(array, goal);\r\n  return array.indexOf(closest);\r\n};\r\n\r\nconst updateSystem = (matrix, y, weights) => {\r\n  let nbPoints = y.length;\r\n  let l = nbPoints - 1;\r\n  let newMatrix = new Array(matrix.length);\r\n  let newVector = new Float64Array(nbPoints);\r\n  for (let i = 0; i < l; i++) {\r\n    let w = weights[i];\r\n    let diag = i * 2;\r\n    let next = diag + 1;\r\n    newMatrix[diag] = matrix[diag].slice();\r\n    newMatrix[next] = matrix[next].slice();\r\n    if (w === 0) {\r\n      newVector[i] = 0;\r\n    } else {\r\n      newVector[i] = y[i] * w;\r\n      newMatrix[diag][2] += w;\r\n    }\r\n  }\r\n  newVector[l] = y[l] * weights[l];\r\n  newMatrix[l * 2] = matrix[l * 2].slice();\r\n  newMatrix[l * 2][2] += weights[l];\r\n\r\n  return [newMatrix, newVector];\r\n};\r\n\r\nconst getDeltaMatrix = (nbPoints, lambda) => {\r\n  let matrix = [];\r\n  let last = nbPoints - 1;\r\n  for (let i = 0; i < last; i++) {\r\n    matrix.push([i, i, lambda * 2]);\r\n    matrix.push([i + 1, i, -1 * lambda]);\r\n  }\r\n  matrix[0][2] = lambda;\r\n  matrix.push([last, last, lambda]);\r\n  return {\r\n    lowerTriangularNonZeros: matrix,\r\n    permutationEncodedArray: cuthillMckee(matrix, nbPoints),\r\n  };\r\n};\r\n\r\nexport { updateSystem, getDeltaMatrix, getCloseIndex, getClosestNumber };\r\n","import Cholesky from './choleskySolver';\r\nimport { updateSystem, getDeltaMatrix, getCloseIndex } from './utils';\r\n\r\n/**\r\n * Fit the baseline drift by iteratively changing weights of sum square error between the fitted baseline and original signals,\r\n * for further information about the parameters you can get the [paper of airPLS](https://github.com/zmzhang/airPLS/blob/master/airPLS_manuscript.pdf)\r\n * @param {Array<number>} x - x axis data useful when control points or zones are submitted\r\n * @param {Array<number>} y - Original data\r\n * @param {object} [options={}] - Options object\r\n * @param {number} [options.maxIterations = 100] - Maximal number of iterations if the method does not reach the stop criterion\r\n * @param {number} [options.factorCriterion = 0.001] - Factor of the sum of absolute value of original data, to compute stop criterion\r\n * @param {Array<number>} [options.weights = [1,1,...]] - Initial weights vector, default each point has the same weight\r\n * @param {number} [options.lambda = 100] - Factor of weights matrix in -> [I + lambda D'D]z = x\r\n * @param {Array<number>} [options.controlPoints = []] - Array of x axis values to force that baseline cross those points.\r\n * @param {Array<number>} [options.baseLineZones = []] - Array of x axis values (as from - to), to force that baseline cross those zones.\r\n * @returns {{corrected: Array<number>, error: number, iteration: number, baseline: Array<number>}}\r\n */\r\nfunction airPLS(x, y, options = {}) {\r\n  let {\r\n    maxIterations = 100,\r\n    lambda = 100,\r\n    factorCriterion = 0.001,\r\n    weights = new Array(y.length).fill(1),\r\n    controlPoints = [],\r\n    baseLineZones = [],\r\n  } = options;\r\n\r\n  if (controlPoints.length > 0) {\r\n    controlPoints.forEach((e, i, arr) => (arr[i] = getCloseIndex(x, e)));\r\n  }\r\n  if (baseLineZones.length > 0) {\r\n    baseLineZones.forEach((range) => {\r\n      let indexFrom = getCloseIndex(x, range.from);\r\n      let indexTo = getCloseIndex(x, range.to);\r\n      if (indexFrom > indexTo) [indexFrom, indexTo] = [indexTo, indexFrom];\r\n      for (let i = indexFrom; i < indexTo; i++) {\r\n        controlPoints.push(i);\r\n      }\r\n    });\r\n  }\r\n\r\n  let baseline, iteration;\r\n  let nbPoints = y.length;\r\n  let l = nbPoints - 1;\r\n  let sumNegDifferences = Number.MAX_SAFE_INTEGER;\r\n  let stopCriterion =\r\n    factorCriterion * y.reduce((sum, e) => Math.abs(e) + sum, 0);\r\n\r\n  let { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(\r\n    nbPoints,\r\n    lambda,\r\n  );\r\n\r\n  for (\r\n    iteration = 0;\r\n    iteration < maxIterations && Math.abs(sumNegDifferences) > stopCriterion;\r\n    iteration++\r\n  ) {\r\n    let [leftHandSide, rightHandSide] = updateSystem(\r\n      lowerTriangularNonZeros,\r\n      y,\r\n      weights,\r\n    );\r\n\r\n    let cho = Cholesky(leftHandSide, nbPoints, permutationEncodedArray);\r\n\r\n    baseline = cho(rightHandSide);\r\n\r\n    sumNegDifferences = 0;\r\n\r\n    let difference = y.map(calculateError);\r\n\r\n    let maxNegativeDiff = -1 * Number.MAX_SAFE_INTEGER;\r\n    for (let i = 1; i < l; i++) {\r\n      let diff = difference[i];\r\n      if (diff >= 0) {\r\n        weights[i] = 0;\r\n      } else {\r\n        weights[i] = Math.exp((iteration * diff) / sumNegDifferences);\r\n        if (maxNegativeDiff < diff) maxNegativeDiff = diff;\r\n      }\r\n    }\r\n\r\n    let value = Math.exp((iteration * maxNegativeDiff) / sumNegDifferences);\r\n    weights[0] = value;\r\n    weights[l] = value;\r\n    controlPoints.forEach((i) => (weights[i] = value));\r\n  }\r\n\r\n  return {\r\n    corrected: y.map((e, i) => e - baseline[i]),\r\n    baseline,\r\n    iteration,\r\n    error: sumNegDifferences,\r\n  };\r\n\r\n  function calculateError(e, i) {\r\n    let diff = e - baseline[i];\r\n    if (diff < 0) sumNegDifferences += diff;\r\n    return diff;\r\n  }\r\n}\r\n\r\nexport { airPLS as default };\r\n","const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","import isArray from 'is-any-array';\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\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 !== 0 && step) {\n    throw new Error('step is defined by the array size');\n  }\n\n  if (!size) {\n    if (step) {\n      size = Math.floor((to - from) / step) + 1;\n    } else {\n      size = to - from + 1;\n    }\n  }\n\n  if (!step && size) {\n    step = (to - from) / (size - 1);\n  }\n\n  if (Array.isArray(input)) {\n    // only works with normal array\n    input.length = 0;\n\n    for (var i = 0; i < size; i++) {\n      input.push(from);\n      from += step;\n    }\n  } else {\n    if (input.length !== size) {\n      throw new Error('sequentialFill typed array must have the correct length');\n    }\n\n    for (var _i = 0; _i < size; _i++) {\n      input[_i] = from;\n      from += step;\n    }\n  }\n\n  return input;\n}\n\nexport { sequentialFill as default };\n","import airpls from 'ml-airpls';\nimport sequentialFill from 'ml-array-sequential-fill';\n/**\n * Adaptive iteratively reweighted penalized least squares [1]\n *\n * This function calls ml-airpls\n *\n * References:\n * [1] Zhang, Z.-M.; Chen, S.; Liang, Y.-Z.\n * Baseline Correction Using Adaptive Iteratively Reweighted Penalized Least Squares.\n * Analyst 2010, 135 (5), 1138–1146. https://doi.org/10.1039/B922045C.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {object} [options.regression] - Options for the regression\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.regression.§Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function airPLSBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n  let output = airpls(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import isArray from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport default max;\n","import isArray from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport default min;\n","import isArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","const indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\nexport function inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nexport function inspectMatrixWithOptions(matrix, options = {}) {\n  const { maxRows = 15, maxColumns = 10, maxNumSize = 8 } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize) {\n  const numStr = String(num);\n  if (numStr.length <= maxNumSize) {\n    return numStr.padEnd(maxNumSize, ' ');\n  }\n  const precise = num.toPrecision(maxNumSize - 2);\n  if (precise.length <= maxNumSize) {\n    return precise;\n  }\n  const exponential = num.toExponential(maxNumSize - 2);\n  const eIndex = exponential.indexOf('e');\n  const e = exponential.slice(eIndex);\n  return exponential.slice(0, maxNumSize - e.length) + e;\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), value));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\n      }\n    }\n    return this;\n  };\n}\n","/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nexport function checkIndices(matrix, rowIndices, columnIndices) {\n  return {\n    row: checkRowIndices(matrix, rowIndices),\n    column: checkColumnIndices(matrix, columnIndices),\n  };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n  if (typeof rowIndices !== 'object') {\n    throw new TypeError('unexpected type for row indices');\n  }\n\n  let rowOut = rowIndices.some((r) => {\n    return r < 0 || r >= matrix.rows;\n  });\n\n  if (rowOut) {\n    throw new RangeError('row indices are out of range');\n  }\n\n  if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n  return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n  if (typeof columnIndices !== 'object') {\n    throw new TypeError('unexpected type for column indices');\n  }\n\n  let columnOut = columnIndices.some((c) => {\n    return c < 0 || c >= matrix.columns;\n  });\n\n  if (columnOut) {\n    throw new RangeError('column indices are out of range');\n  }\n  if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n  return columnIndices;\n}\n\nexport function checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nexport function newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nexport function checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nexport function varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nexport function varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nexport function centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nexport function centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nexport function centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nexport function getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nexport function getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nexport function getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n","import rescale from 'ml-array-rescale';\n\nimport { inspectMatrix, inspectMatrixWithOptions } from './inspect';\nimport { installMathOperations } from './mathOperations';\nimport {\n  sumByRow,\n  sumByColumn,\n  sumAll,\n  productByRow,\n  productByColumn,\n  productAll,\n  varianceByRow,\n  varianceByColumn,\n  varianceAll,\n  centerByRow,\n  centerByColumn,\n  centerAll,\n  scaleByRow,\n  scaleByColumn,\n  scaleAll,\n  getScaleByRow,\n  getScaleByColumn,\n  getScaleAll,\n} from './stat';\nimport {\n  checkRowVector,\n  checkRowIndex,\n  checkColumnIndex,\n  checkColumnVector,\n  checkRange,\n  checkIndices,\n  checkNonEmpty,\n} from './util';\n\nexport class AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, 0);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n        }\n      }\n    }\n    return v;\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, 0);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n        }\n      }\n    }\n    return v;\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    let result = 0;\n    if (type === 'max') {\n      return this.max();\n    } else if (type === 'frobenius') {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j < this.columns; j++) {\n          result = result + this.get(i, j) * this.get(i, j);\n        }\n      }\n      return Math.sqrt(result);\n    } else {\n      throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      resultat = resultat.setSubMatrix(c11, 0, 0);\n      resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n      resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n      resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n      return resultat.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min: min,\n          max: max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    let indices = checkIndices(this, rowIndices, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < indices.row.length; i++) {\n      let rowIndex = indices.row[i];\n      for (let j = 0; j < indices.column.length; j++) {\n        let columnIndex = indices.column[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let row = 0; row < this.rows; row++) {\n      for (let column = 0; column < this.columns; column++) {\n        newMatrix.set(row, column, this.get(row, column));\n      }\n    }\n    return newMatrix;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      // eslint-disable-next-line no-constructor-return\n      return nRows.clone();\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      // Create an empty matrix\n      this.data = [];\n      if (Number.isInteger(nColumns) && nColumns >= 0) {\n        for (let i = 0; i < nRows; i++) {\n          this.data.push(new Float64Array(nColumns));\n        }\n      } else {\n        throw new TypeError('nColumns must be a positive integer');\n      }\n    } else if (Array.isArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { AbstractMatrix } from '../matrix';\n\nexport default class BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n","import BaseView from './base';\n\nexport default class MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n","export function hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let iter = 0;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          iter = iter + 1;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          iter = 0;\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nexport function solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n","export default function maybeToPrecision(value, digits) {\n  if (value < 0) {\n    value = 0 - value;\n    if (typeof digits === 'number') {\n      return `- ${value.toPrecision(digits)}`;\n    } else {\n      return `- ${value.toString()}`;\n    }\n  } else {\n    if (typeof digits === 'number') {\n      return value.toPrecision(digits);\n    } else {\n      return value.toString();\n    }\n  }\n}\n","import isAnyArray from 'is-any-array';\n\nexport default function checkArraySize(x, y) {\n  if (!isAnyArray(x) || !isAnyArray(y)) {\n    throw new TypeError('x and y must be arrays');\n  }\n  if (x.length !== y.length) {\n    throw new RangeError('x and y arrays must have the same length');\n  }\n}\n","import isAnyArray from 'is-any-array';\n\nexport { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\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 (isAnyArray(x)) {\n      const y = [];\n      for (let i = 0; i < x.length; i++) {\n        y.push(this._predict(x[i]));\n      }\n      return y;\n    } else {\n      throw new TypeError('x must be a number or array');\n    }\n  }\n\n  _predict() {\n    throw new Error('_predict must be implemented');\n  }\n\n  train() {\n    // Do nothing for this package\n  }\n\n  toString() {\n    return '';\n  }\n\n  toLaTeX() {\n    return '';\n  }\n\n  /**\n   * Return the correlation coefficient of determination (r) and chi-square.\n   * @param {Array<number>} x\n   * @param {Array<number>} y\n   * @return {object}\n   */\n  score(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y) || x.length !== y.length) {\n      throw new Error('x and y must be arrays of the same length');\n    }\n\n    const n = x.length;\n    const y2 = new Array(n);\n    for (let i = 0; i < n; i++) {\n      y2[i] = this._predict(x[i]);\n    }\n\n    let xSum = 0;\n    let ySum = 0;\n    let chi2 = 0;\n    let rmsd = 0;\n    let xSquared = 0;\n    let ySquared = 0;\n    let xY = 0;\n    for (let i = 0; i < n; i++) {\n      xSum += y2[i];\n      ySum += y[i];\n      xSquared += y2[i] * y2[i];\n      ySquared += y[i] * y[i];\n      xY += y2[i] * y[i];\n      if (y[i] !== 0) {\n        chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n      }\n      rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n    }\n\n    const r =\n      (n * xY - xSum * ySum) /\n      Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n\n    return {\n      r: r,\n      r2: r * r,\n      chi2: chi2,\n      rmsd: Math.sqrt(rmsd / n),\n    };\n  }\n}\n","import { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\nimport BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\n\nexport default class PolynomialRegression extends BaseRegression {\n  constructor(x, y, degree) {\n    super();\n    if (x === true) {\n      this.degree = y.degree;\n      this.powers = y.powers;\n      this.coefficients = y.coefficients;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y, degree);\n    }\n  }\n\n  _predict(x) {\n    let y = 0;\n    for (let k = 0; k < this.powers.length; k++) {\n      y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n    }\n    return y;\n  }\n\n  toJSON() {\n    return {\n      name: 'polynomialRegression',\n      degree: this.degree,\n      powers: this.powers,\n      coefficients: this.coefficients,\n    };\n  }\n\n  toString(precision) {\n    return this._toFormula(precision, false);\n  }\n\n  toLaTeX(precision) {\n    return this._toFormula(precision, true);\n  }\n\n  _toFormula(precision, isLaTeX) {\n    let sup = '^';\n    let closeSup = '';\n    let times = ' * ';\n    if (isLaTeX) {\n      sup = '^{';\n      closeSup = '}';\n      times = '';\n    }\n\n    let fn = '';\n    let str = '';\n    for (let k = 0; k < this.coefficients.length; k++) {\n      str = '';\n      if (this.coefficients[k] !== 0) {\n        if (this.powers[k] === 0) {\n          str = maybeToPrecision(this.coefficients[k], precision);\n        } else {\n          if (this.powers[k] === 1) {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x`;\n          } else {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x${sup}${this.powers[k]}${closeSup}`;\n          }\n        }\n\n        if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n          str = ` + ${str}`;\n        } else if (k !== this.coefficients.length - 1) {\n          str = ` ${str}`;\n        }\n      }\n      fn = str + fn;\n    }\n    if (fn.charAt(0) === '+') {\n      fn = fn.slice(1);\n    }\n\n    return `f(x) = ${fn}`;\n  }\n\n  static load(json) {\n    if (json.name !== 'polynomialRegression') {\n      throw new TypeError('not a polynomial regression model');\n    }\n    return new PolynomialRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y, degree) {\n  const n = x.length;\n  let powers;\n  if (Array.isArray(degree)) {\n    powers = degree;\n    degree = powers.length;\n  } else {\n    degree++;\n    powers = new Array(degree);\n    for (let k = 0; k < degree; k++) {\n      powers[k] = k;\n    }\n  }\n  const F = new Matrix(n, degree);\n  const Y = new Matrix([y]);\n  for (let k = 0; k < degree; k++) {\n    for (let i = 0; i < n; i++) {\n      if (powers[k] === 0) {\n        F.set(i, k, 1);\n      } else {\n        F.set(i, k, Math.pow(x[i], powers[k]));\n      }\n    }\n  }\n\n  const FT = new MatrixTransposeView(F);\n  const A = FT.mmul(F);\n  const B = FT.mmul(new MatrixTransposeView(Y));\n\n  pr.degree = degree - 1;\n  pr.powers = powers;\n  pr.coefficients = solve(A, B).to1DArray();\n}\n","import PolynomialRegression from 'ml-regression-polynomial';\r\n\r\n/**\r\n * Iterative regression-based baseline correction\r\n * @param {Array<number>} x - Independent axis variable\r\n * @param {Array<number>} y - Dependent axis variable\r\n * @param {object} [options] - Options object\r\n * @param {number} [options.maxIterations = 100] - Maximum number of allowed iterations\r\n * @param {function} [options.Regression = PolynomialRegression] - Regression class with a predict method\r\n * @param {*} [options.regressionOptions] - Options for regressionFunction\r\n * @param {number} [options.tolerance = 0.001] - Convergence error tolerance\r\n * @return {{corrected: Array<number>, delta: number, iteration: number, baseline: Array<number>}}\r\n */\r\nexport default function baselineCorrectionRegression(x, y, options = {}) {\r\n  let {\r\n    maxIterations = 100,\r\n    Regression = PolynomialRegression,\r\n    regressionOptions,\r\n    tolerance = 0.001,\r\n  } = options;\r\n\r\n  if (!regressionOptions && Regression === PolynomialRegression) {\r\n    regressionOptions = 3;\r\n  }\r\n\r\n  let baseline = y.slice();\r\n  let fitting = y.slice();\r\n  let oldFitting = y;\r\n  let iteration = 0;\r\n  let delta;\r\n  let regression;\r\n  while (iteration < maxIterations) {\r\n    // Calculate the fitting result\r\n    regression = new Regression(x, baseline, regressionOptions);\r\n\r\n    delta = 0;\r\n    for (let i = 0; i < baseline.length; i++) {\r\n      fitting[i] = regression.predict(x[i]);\r\n      if (baseline[i] > fitting[i]) {\r\n        baseline[i] = fitting[i];\r\n      }\r\n\r\n      delta += Math.abs((fitting[i] - oldFitting[i]) / oldFitting[i]);\r\n    }\r\n\r\n    // Stop criterion\r\n    if (delta < tolerance) {\r\n      break;\r\n    } else {\r\n      oldFitting = fitting.slice();\r\n      iteration++;\r\n    }\r\n  }\r\n\r\n  // removes baseline\r\n  let corrected = new Array(baseline.length);\r\n  for (let j = 0; j < baseline.length; j++) {\r\n    corrected[j] = y[j] - baseline[j];\r\n  }\r\n\r\n  return {\r\n    corrected,\r\n    delta,\r\n    iteration,\r\n    baseline,\r\n    regression: regression,\r\n  };\r\n}\r\n","import sequentialFill from 'ml-array-sequential-fill';\nimport baselineCorrection from 'ml-baseline-correction-regression';\n\n/**\n * Iterative polynomial fitting [1]\n *\n * Implementation based on ml-baseline-correction-regression\n *\n * References:\n * [1] Gan, F.; Ruan, G.; Mo, J.\n * Baseline Correction by Improved Iterative Polynomial Fitting with Automatic Threshold.\n *  Chemometrics and Intelligent Laboratory Systems 2006, 82 (1), 59–65.\n * https://doi.org/10.1016/j.chemolab.2005.08.009.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {Object} [options.regression]\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {Object} [options.regression]\n * @param {function} [options.regression.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {Object} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function iterativePolynomialBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n\n  let output = baselineCorrection(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import isArray from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport default median;\n","const toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array).\n *\n * @param {any} value - Object to check.\n * @returns {boolean} True if the object is an array.\n */\nexport function isAnyArray(value) {\n    return toString.call(value).endsWith('Array]');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if input is valdi\n *\n * @param input input\n */\nexport function xCheck(input) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n}\n/**\n * XCheckLengths.\n *\n * @param array1 - First array.\n * @param array2 - Second array.\n */\nexport function xCheckLengths(array1, array2) {\n    if (array1.length !== array2.length) {\n        throw new TypeError('Length of array1 and array2 must be identical');\n    }\n}\n//# sourceMappingURL=xCheck.js.map","import isArray from 'is-any-array';\n\nfunction sum(input) {\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var sumValue = 0;\n\n  for (var i = 0; i < input.length; i++) {\n    sumValue += input[i];\n  }\n\n  return sumValue;\n}\n\nexport default sum;\n","import sum from 'ml-array-sum';\n\nfunction mean(input) {\n  return sum(input) / input.length;\n}\n\nexport default mean;\n","import { xCheck } from './xCheck';\n/**\n * This function pads an array\n *\n *\n * @param array - the array that will be padded\n * @param [options={}] options\n * @param [options.algorithm=''] '', value, circular, duplicate\n * @param [options.size=0] padding size before first element and after last element\n * @param [options.value=0] value to use for padding (if algorithm='value')\n * @returns result\n */\nexport function xPadding(array, options = {}) {\n    const { size = 0, value = 0, algorithm = '' } = options;\n    xCheck(array);\n    if (!algorithm) {\n        if (array instanceof Float64Array) {\n            return array.slice();\n        }\n        else {\n            return Float64Array.from(array);\n        }\n    }\n    let result = new Float64Array(array.length + size * 2);\n    for (let i = 0; i < array.length; i++) {\n        result[i + size] = array[i];\n    }\n    let fromEnd = size + array.length;\n    let toEnd = 2 * size + array.length;\n    switch (algorithm.toLowerCase()) {\n        case 'value':\n            for (let i = 0; i < size; i++) {\n                result[i] = value;\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = value;\n            }\n            break;\n        case 'duplicate':\n            for (let i = 0; i < size; i++) {\n                result[i] = array[0];\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = array[array.length - 1];\n            }\n            break;\n        case 'circular':\n            for (let i = 0; i < size; i++) {\n                result[i] =\n                    array[(array.length - (size % array.length) + i) % array.length];\n            }\n            for (let i = 0; i < size; i++) {\n                result[i + fromEnd] = array[i % array.length];\n            }\n            break;\n        default:\n            throw Error('xPadding: unknown algorithm');\n    }\n    return result;\n}\n//# sourceMappingURL=xPadding.js.map","import { xCheck } from './xCheck';\nimport { xPadding } from './xPadding';\n/**\n * This function calculates a rolling average\n *\n * @param array - the array that will be rotated\n * @param fct callback function that from an array returns a value.\n * @param [options={}] options\n * @param [options.window=5] rolling window\n * @param [options.padding.size=0] none, value, circular, duplicate\n * @param [options.padding.algorithm='value'] none, value, circular, duplicate\n * @param [options.padding.value=0] value to use for padding (if algorithm='value')\n * @param options.padding padding\n * @returns result\n */\nexport function xRolling(array, fct, options = {}) {\n    xCheck(array);\n    if (typeof fct !== 'function')\n        throw Error('fct has to be a function');\n    const { window = 5, padding = {} } = options;\n    const { size = window - 1, algorithm, value } = padding;\n    array = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n    const newArray = [];\n    for (let i = 0; i < array.length - window + 1; i++) {\n        let subArray = new Float64Array(array.buffer, i * 8, window);\n        // we will send a view to the original buffer\n        newArray.push(fct(subArray));\n    }\n    return newArray;\n}\n//# sourceMappingURL=xRolling.js.map","import mean from 'ml-array-mean';\nimport { xRolling } from './xRolling';\n/**\n * This function calculates a rolling average\n *\n * @param array - the array that will be rotated\n * @param [options={}] options\n * @param [options.window=5] rolling window\n * @param [options.padding.size=window-1] none, value, circular, duplicate\n * @param [options.padding.algorithm=''] none, value, circular, duplicate\n * @param [options.padding.value=0] value to use for padding (if algorithm='value')\n * @param options.padding padding\n * @returns result\n */\nexport function xRollingAverage(array, options = {}) {\n    return xRolling(array, mean, options);\n}\n//# sourceMappingURL=xRollingAverage.js.map","import median from 'ml-array-median';\nimport { xRolling } from './xRolling';\n/**\n * This function calculates a rolling average\n *\n * @param array - the array that will be rotated\n * @param [options={}] options\n * @param [options.window=5] rolling window\n * @param [options.padding.size=window-1] none, value, circular, duplicate\n * @param [options.padding.algorithm=''] none, value, circular, duplicate\n * @param [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns results\n */\nexport function xRollingMedian(array, options = {}) {\n    return xRolling(array, median, options);\n}\n//# sourceMappingURL=xRollingMedian.js.map","import { xRollingAverage } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingAverageBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window: window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = Object.assign({}, defaults, options);\n  let baseline = xRollingAverage(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline: baseline, correctedSpectrum: corrected };\n}\n","import isAnyArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport mean from 'ml-array-mean';\nimport min from 'ml-array-min';\n\n/**\n * Rolling ball baseline correction algorithm.\n * From the abstract of (1):\n * \"This algorithm behaves equivalently to traditional polynomial backgrounds in simple spectra,\n * [...] and is considerably more robust for multiple overlapping peaks, rapidly varying background [...]\n *\n * The baseline is the trace one gets by rolling a ball below a spectrum. Algorithm has three steps:\n * Finding the minima in each window, find maxima among minima and then smooth over them by averaging.\n *\n * Reference:\n * (1) Kneen, M. A.; Annegarn, H. J.\n *     Algorithm for Fitting XRF, SEM and PIXE X-Ray Spectra Backgrounds.\n *     Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms 1996, 109–110, 209–213.\n *     https://doi.org/10.1016/0168-583X(95)00908-6.\n * (2) Kristian Hovde Liland, Bjørn-Helge Mevik, Roberto Canteri: baseline.\n *     https://cran.r-project.org/web/packages/baseline/index.html\n * @export\n * @param {Array} spectrum\n * @param {Object} [options={}]\n * @param {Number} [options.windowM] - width of local window for minimization/maximization, defaults to 4% of the spectrum length\n * @param {Number} [options.windowS] - width of local window for smoothing, defaults to 8% of the specturm length\n */\nexport function rollingBall(spectrum, options = {}) {\n  if (!isAnyArray(spectrum)) {\n    throw new Error('Spectrum must be an array');\n  }\n\n  if (spectrum.length === 0) {\n    throw new TypeError('Spectrum must not be empty');\n  }\n\n  const numberPoints = spectrum.length;\n  const maxima = new Float64Array(numberPoints);\n  const minima = new Float64Array(numberPoints);\n  const baseline = new Float64Array(numberPoints);\n\n  // windowM 4 percent of spectrum length\n  // windowS 8 percent of spectrum length\n  const {\n    windowM = Math.round(numberPoints * 0.04),\n    windowS = Math.round(numberPoints * 0.08),\n  } = options;\n\n  // fi(1) in original paper\n  for (let i = 0; i < spectrum.length; i++) {\n    let windowLeft = max([0, i - windowM]);\n    let windowRight = min([i + windowM + 1, spectrum.length]);\n    minima[i] = min(spectrum.slice(windowLeft, windowRight));\n  }\n\n  // fi in original paper\n  for (let i = 0; i < minima.length; i++) {\n    let windowLeft = max([0, i - windowM]);\n    let windowRight = min([i + windowM + 1, minima.length]);\n    maxima[i] = max(minima.slice(windowLeft, windowRight));\n  }\n\n  for (let i = 0; i < minima.length; i++) {\n    let windowLeft = max([0, i - windowS]);\n    let windowRight = min([i + windowS + 1, maxima.length]);\n    baseline[i] = mean(maxima.slice(windowLeft, windowRight));\n  }\n\n  return baseline;\n}\n","import { rollingBall } from 'ml-rolling-ball-baseline';\n\n/**\n * Rolling ball baseline correction algorithm.\n * From the abstract of (1):\n * \"This algorithm behaves equivalently to traditional polynomial backgrounds in simple spectra,\n * [...] and is considerably more robust for multiple overlapping peaks, rapidly varying background [...]\n *\n * The baseline is the trace one gets by rolling a ball below a spectrum. Algorithm has three steps:\n * Finding the minima in each window, find maxima among minima and then smooth over them by averaging.\n *\n * Algorithm described in (1), but in the implementation here the window width does not change.\n *\n * Reference:\n * (1) Kneen, M. A.; Annegarn, H. J.\n *     Algorithm for Fitting XRF, SEM and PIXE X-Ray Spectra Backgrounds.\n *     Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms 1996, 109–110, 209–213.\n *     https://doi.org/10.1016/0168-583X(95)00908-6.\n * (2) Kristian Hovde Liland, Bjørn-Helge Mevik, Roberto Canteri: baseline.\n *     https://cran.r-project.org/web/packages/baseline/index.html\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {Number} [options.windowM] - width of local window for minimization/maximization, defaults to 4% of the spectrum length\n * @param {Number} [options.windowS] - width of local window for smoothing, defaults to 8% of the specturm length\n * @returns {BaselineOutput}\n */\nexport function rollingBallBaseline(ys, options = {}) {\n  const baseline = rollingBall(ys, options);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline: baseline, correctedSpectrum: corrected };\n}\n","import { xRollingMedian } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingMedianBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window: window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = Object.assign({}, defaults, options);\n  let baseline = xRollingMedian(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline: baseline, correctedSpectrum: corrected };\n}\n"],"names":["ldlSymbolic","n","Ap","Ai","Lp","Parent","Lnz","Flag","i","k","p","kk","p2","ldlNumeric","Ax","Li","Lx","D","Y","Pattern","yi","lKi","len","top","ldlLsolve","X","j","ldlDsolve","ldlLTsolve","ldlPerm","B","P","ldlPermt","prepare","M","Pinv","Array","Mt","a","length","ar","ac","t","LNZ","coloffset","e","col","adr","bp1","x","d","b","cuthillMckee_1","cuthillMckee","compareNum","list","adj","visited","l","push","toVisit","eol","ptr","v","nbhd","sort","u","result","getClosestNumber","array","goal","closest","reduce","prev","curr","Math","abs","getCloseIndex","indexOf","updateSystem","matrix","y","weights","nbPoints","newMatrix","newVector","Float64Array","w","diag","next","slice","getDeltaMatrix","lambda","last","lowerTriangularNonZeros","permutationEncodedArray","airPLS","options","maxIterations","factorCriterion","fill","controlPoints","baseLineZones","forEach","arr","range","indexFrom","from","indexTo","to","baseline","iteration","sumNegDifferences","Number","MAX_SAFE_INTEGER","stopCriterion","sum","leftHandSide","rightHandSide","cho","Cholesky","difference","map","calculateError","maxNegativeDiff","diff","exp","value","corrected","error","toString","Object","prototype","isAnyArray","object","call","endsWith","_typeof","obj","Symbol","iterator","constructor","sequentialFill","input","arguments","undefined","isArray","TypeError","_options","_options$from","_options$to","_options$size","size","step","Error","floor","_i","airPLSBaseline","ys","numberPoints","regressionOptions","output","airpls","correctedSpectrum","max","_options$fromIndex","fromIndex","_options$toIndex","toIndex","isInteger","maxValue","min","minValue","rescale","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","name","inspectData","rows","columns","maxI","maxJ","line","formatNumber","get","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","set","checkMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","expm1","fround","log","log1p","log10","log2","round","sign","sin","sinh","sqrt","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","index","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","rowOut","some","r","columnOut","c","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","checkNonEmpty","isEmpty","sumByRow","sumByColumn","sumAll","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","varianceByColumn","varianceAll","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","rowVector","columnVector","zeros","ones","rand","random","randInt","interval","eye","data","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","maxRow","pivot","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","NaN","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","s","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","r1","c1","r2","c2","console","warn","embed","mat","resultat","blockMult","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","center","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","BaseView","MatrixTransposeView","WrapperMatrix2D","LuDecomposition","lu","pivotVector","pivotSign","LUcolj","kmax","LU","isSingular","solve","count","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","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","maybeToPrecision","digits","checkArraySize","BaseRegression","new","target","predict","_predict","train","toLaTeX","score","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","regress","precision","_toFormula","isLaTeX","sup","closeSup","times","fn","str","charAt","load","json","pr","F","FT","A","baselineCorrectionRegression","Regression","tolerance","fitting","oldFitting","delta","regression","iterativePolynomialBaseline","baselineCorrection","_ref","module","exports","window","median","quickSelectMedian","sumValue","rollingAverageBaseline","defaults","padding","algorithm","actualOptions","assign","xRollingAverage","rollingBall","spectrum","maxima","minima","windowM","windowS","windowLeft","windowRight","rollingBallBaseline","rollingMedianBaseline","xRollingMedian"],"mappings":"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"}