{"version":3,"file":"ml-spectra-fitting.js","sources":["../node_modules/assign-symbols/index.js","../node_modules/assign-deep/index.js","../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-peak-shape-generator/src/util/constants.js","../node_modules/ml-peak-shape-generator/src/util/erfinv.js","../node_modules/ml-peak-shape-generator/src/classes/Gaussian.js","../node_modules/ml-peak-shape-generator/src/classes/Lorentzian.js","../node_modules/ml-peak-shape-generator/src/classes/PseudoVoigt.js","../src/shapes/sumOfGaussianLorentzians.js","../src/shapes/sumOfGaussians.js","../src/shapes/sumOfLorentzians.js","../src/checkInput.js","../node_modules/ml-levenberg-marquardt/src/checkOptions.js","../node_modules/ml-levenberg-marquardt/src/errorCalculation.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/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-levenberg-marquardt/src/gradientFunction.js","../node_modules/ml-levenberg-marquardt/src/step.js","../node_modules/ml-levenberg-marquardt/src/index.js","../src/selectMethod.js","../src/index.js"],"sourcesContent":["/*!\n * assign-symbols <https://github.com/jonschlinkert/assign-symbols>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst toString = Object.prototype.toString;\nconst isEnumerable = Object.prototype.propertyIsEnumerable;\nconst getSymbols = Object.getOwnPropertySymbols;\n\nmodule.exports = (target, ...args) => {\n  if (!isObject(target)) {\n    throw new TypeError('expected the first argument to be an object');\n  }\n\n  if (args.length === 0 || typeof Symbol !== 'function' || typeof getSymbols !== 'function') {\n    return target;\n  }\n\n  for (let arg of args) {\n    let names = getSymbols(arg);\n\n    for (let key of names) {\n      if (isEnumerable.call(arg, key)) {\n        target[key] = arg[key];\n      }\n    }\n  }\n  return target;\n};\n\nfunction isObject(val) {\n  return typeof val === 'function' || toString.call(val) === '[object Object]' || Array.isArray(val);\n}\n","/*!\n * assign-deep <https://github.com/jonschlinkert/assign-deep>\n *\n * Copyright (c) 2017-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst toString = Object.prototype.toString;\nconst assignSymbols = require('assign-symbols');\n\nconst isValidKey = key => {\n  return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n};\n\nconst assign = module.exports = (target, ...args) => {\n  let i = 0;\n  if (isPrimitive(target)) target = args[i++];\n  if (!target) target = {};\n  for (; i < args.length; i++) {\n    if (isObject(args[i])) {\n      for (const key of Object.keys(args[i])) {\n        if (isValidKey(key)) {\n          if (isObject(target[key]) && isObject(args[i][key])) {\n            assign(target[key], args[i][key]);\n          } else {\n            target[key] = args[i][key];\n          }\n        }\n      }\n      assignSymbols(target, args[i]);\n    }\n  }\n  return target;\n};\n\nfunction isObject(val) {\n  return typeof val === 'function' || toString.call(val) === '[object Object]';\n}\n\nfunction isPrimitive(val) {\n  return typeof val === 'object' ? val === null : typeof val !== 'function';\n}\n","const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","import isArray from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport default max;\n","export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_THREE = Math.sqrt(3);\nexport const ROOT_2LN2 = Math.sqrt(2 * Math.LN2);\nexport const ROOT_2LN2_MINUS_ONE = Math.sqrt(2 * Math.LN2) - 1;\n","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n\nexport default function erfinv(x) {\n  let a = 0.147;\n  if (x === 0) return 0;\n  let ln1MinusXSqrd = Math.log(1 - x * x);\n  let lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n  let firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n  let secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n  return secondSqrt * (x > 0 ? 1 : -1);\n}\n","import {\n  ROOT_2LN2,\n  GAUSSIAN_EXP_FACTOR,\n  ROOT_PI_OVER_LN2,\n} from '../util/constants';\nimport erfinv from '../util/erfinv';\n\nexport class Gaussian {\n  /**\n   * @param {object} [options = {}]\n   * @param {number} [options.height=x] Define the height of the peak, by default area=1 (normalized)\n   * @param {number} [options.fwhm = 500] - Full Width at Half Maximum in the number of points in FWHM.\n   * @param {number} [options.sd] - Standard deviation, if it's defined options.fwhm will be ignored and the value will be computed sd * Math.sqrt(8 * Math.LN2);\n   */\n  constructor(options = {}) {\n    this.fwhm = options.sd\n      ? Gaussian.widthToFWHM(2 * options.sd)\n      : options.fwhm\n      ? options.fwhm\n      : 500;\n    this.height =\n      options.height === undefined\n        ? Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI) / this.fwhm\n        : options.height;\n  }\n  /**\n   * Calculate a gaussian shape\n   * @param {object} [options = {}]\n   * @param {number} [options.factor = 6] - Number of time to take fwhm to calculate length. Default covers 99.99 % of area.\n   * @param {number} [options.length = fwhm * factor + 1] - total number of points to calculate\n   * @return {Float64Array} y values\n   */\n\n  getData(options = {}) {\n    let { length, factor = this.getFactor() } = options;\n\n    if (!length) {\n      length = Math.min(Math.ceil(this.fwhm * factor), Math.pow(2, 25) - 1);\n      if (length % 2 === 0) length++;\n    }\n\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n      data[i] = this.fct(i - center) * this.height;\n      data[length - 1 - i] = data[i];\n    }\n\n    return data;\n  }\n\n  /**\n   * Return a parameterized function of a gaussian shape (see README for equation).\n   * @param {number} x - x value to calculate.\n   * @returns {number} - the y value of gaussian with the current parameters.\n   */\n  fct(x) {\n    return Gaussian.fct(x, this.fwhm);\n  }\n\n  /**\n   * Calculate the number of times FWHM allows to reach a specific area coverage\n   * @param {number} [area=0.9999]\n   * @returns {number}\n   */\n  getFactor(area = 0.9999) {\n    return Gaussian.getFactor(area);\n  }\n\n  /**\n   * Calculate the area of the shape.\n   * @returns {number} - returns the area.\n   */\n\n  getArea() {\n    return Gaussian.getArea(this.fwhm, { height: this.height });\n  }\n\n  /**\n   * Compute the value of Full Width at Half Maximum (FWHM) from the width between the inflection points.\n   * //https://mathworld.wolfram.com/GaussianFunction.html\n   * @param {number} width - Width between the inflection points\n   * @returns {number} fwhm\n   */\n  widthToFWHM(width) {\n    //https://mathworld.wolfram.com/GaussianFunction.html\n    return Gaussian.widthToFWHM(width);\n  }\n\n  /**\n   * Compute the value of width between the inflection points from Full Width at Half Maximum (FWHM).\n   * //https://mathworld.wolfram.com/GaussianFunction.html\n   * @param {number} fwhm - Full Width at Half Maximum.\n   * @returns {number} width\n   */\n  fwhmToWidth(fwhm = this.fwhm) {\n    return Gaussian.fwhmToWidth(fwhm);\n  }\n\n  /**\n   * set a new full width at half maximum\n   * @param {number} fwhm - full width at half maximum\n   */\n  setFWHM(fwhm) {\n    this.fwhm = fwhm;\n  }\n\n  /**\n   * set a new height\n   * @param {number} height - The maximal intensity of the shape.\n   */\n  setHeight(height) {\n    this.height = height;\n  }\n}\n\n/**\n * Return a parameterized function of a gaussian shape (see README for equation).\n * @param {number} x - x value to calculate.\n * @param {number} fwhm - full width half maximum\n * @returns {number} - the y value of gaussian with the current parameters.\n */\nGaussian.fct = function fct(x, fwhm = 500) {\n  return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n};\n\n/**\n * Compute the value of Full Width at Half Maximum (FWHM) from the width between the inflection points.\n * //https://mathworld.wolfram.com/GaussianFunction.html\n * @param {number} width - Width between the inflection points\n * @returns {number} fwhm\n */\nGaussian.widthToFWHM = function widthToFWHM(width) {\n  return width * ROOT_2LN2;\n};\n\n/**\n * Compute the value of width between the inflection points from Full Width at Half Maximum (FWHM).\n * //https://mathworld.wolfram.com/GaussianFunction.html\n * @param {number} fwhm - Full Width at Half Maximum.\n * @returns {number} width\n */\nGaussian.fwhmToWidth = function fwhmToWidth(fwhm) {\n  return fwhm / ROOT_2LN2;\n};\n\n/**\n * Calculate the area of a specific shape.\n * @param {number} fwhm - Full width at half maximum.\n * @param {object} [options = {}] - options.\n * @param {number} [options.height = 1] - Maximum y value of the shape.\n * @returns {number} - returns the area of the specific shape and parameters.\n */\n\nGaussian.getArea = function getArea(fwhm, options = {}) {\n  let { height = 1 } = options;\n  return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n};\n\n/**\n * Calculate the number of times FWHM allows to reach a specific area coverage.\n * @param {number} [area=0.9999]\n * @returns {number}\n */\nGaussian.getFactor = function getFactor(area = 0.9999) {\n  return Math.sqrt(2) * erfinv(area);\n};\n","import { ROOT_THREE } from '../util/constants';\n\nexport class Lorentzian {\n  /**\n   * @param {object} [options = {}]\n   * @param {number} [options.height=x] Define the height of the peak, by default area=1 (normalized)\n   * @param {number} [options.fwhm = 500] - Full Width at Half Maximum in the number of points in FWHM.\n   * @param {number} [options.sd] - Standard deviation, if it's defined options.fwhm will be ignored and the value will be computed sd * Math.sqrt(8 * Math.LN2);\n   */\n  constructor(options = {}) {\n    this.fwhm = options.fwhm === undefined ? 500 : options.fwhm;\n    this.height =\n      options.height === undefined ? 2 / Math.PI / this.fwhm : options.height;\n  }\n  /**\n   * Calculate a lorentzian shape\n   * @param {object} [options = {}]\n   * @param {number} [options.factor = Math.tan(Math.PI * (0.9999 - 0.5))] - Number of time to take fwhm to calculate length. Default covers 99.99 % of area.\n   * @param {number} [options.length = fwhm * factor + 1] - total number of points to calculate\n   * @return {Float64Array} y values\n   */\n  getData(options = {}) {\n    let { length, factor = this.getFactor() } = options;\n\n    if (!length) {\n      length = Math.min(Math.ceil(this.fwhm * factor), Math.pow(2, 25) - 1);\n      if (length % 2 === 0) length++;\n    }\n\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n      data[i] = this.fct(i - center) * this.height;\n      data[length - 1 - i] = data[i];\n    }\n    return data;\n  }\n\n  /**\n   * Return a parameterized function of a lorentzian shape (see README for equation).\n   * @param {number} x - x value to calculate.\n   * @returns {number} - the y value of lorentzian with the current parameters.\n   */\n  fct(x) {\n    return Lorentzian.fct(x, this.fwhm);\n  }\n\n  /**\n   * Calculate the number of times FWHM allows to reach a specific area coverage\n   * @param {number} [area=0.9999]\n   * @returns {number}\n   */\n  getFactor(area = 0.9999) {\n    return Lorentzian.getFactor(area);\n  }\n\n  /**\n   * Calculate the area of the shape.\n   * @returns {number} - returns the area.\n   */\n\n  getArea() {\n    return Lorentzian.getArea(this.fwhm, { height: this.height });\n  }\n\n  /**\n   * Compute the value of width between the inflection points of a specific shape from Full Width at Half Maximum (FWHM).\n   * //https://mathworld.wolfram.com/LorentzianFunction.html\n   * @param {number} [fwhm] - Full Width at Half Maximum.\n   * @returns {number} width between the inflection points\n   */\n  fwhmToWidth(fwhm = this.fwhm) {\n    return Lorentzian.fwhmToWidth(fwhm);\n  }\n\n  /**\n   * Compute the value of Full Width at Half Maximum (FWHM) of a specific shape from the width between the inflection points.\n   * //https://mathworld.wolfram.com/LorentzianFunction.html\n   * @param {number} [width] Width between the inflection points\n   * @returns {number} fwhm\n   */\n  widthToFWHM(width) {\n    return Lorentzian.widthToFWHM(width);\n  }\n  /**\n   * set a new full width at half maximum\n   * @param {number} fwhm - full width at half maximum\n   */\n  setFWHM(fwhm) {\n    this.fwhm = fwhm;\n  }\n\n  /**\n   * set a new height\n   * @param {number} height - The maximal intensity of the shape.\n   */\n  setHeight(height) {\n    this.height = height;\n  }\n}\n\n/**\n * Return a parameterized function of a gaussian shape (see README for equation).\n * @param {number} x - x value to calculate.\n * @param {number} fwhm - full width half maximum\n * @returns {number} - the y value of gaussian with the current parameters.\n */\nLorentzian.fct = function fct(x, fwhm) {\n  const squareFWHM = fwhm * fwhm;\n  return squareFWHM / (4 * Math.pow(x, 2) + squareFWHM);\n};\n\n/**\n * Compute the value of width between the inflection points of a specific shape from Full Width at Half Maximum (FWHM).\n * //https://mathworld.wolfram.com/LorentzianFunction.html\n * @param {number} [fwhm] - Full Width at Half Maximum.\n * @returns {number} width between the inflection points\n */\nLorentzian.fwhmToWidth = function fwhmToWidth(fwhm) {\n  return fwhm / ROOT_THREE;\n};\n\n/**\n * Compute the value of Full Width at Half Maximum (FWHM) of a specific shape from the width between the inflection points.\n * //https://mathworld.wolfram.com/LorentzianFunction.html\n * @param {number} [width] Width between the inflection points\n * @returns {number} fwhm\n */\nLorentzian.widthToFWHM = function widthToFWHM(width) {\n  return width * ROOT_THREE;\n};\n\n/**\n * Calculate the area of a specific shape.\n * @param {number} fwhm - Full width at half maximum.\n * @param {*} [options = {}] - options.\n * @param {number} [options.height = 1] - Maximum y value of the shape.\n * @returns {number} - returns the area of the specific shape and parameters.\n */\nLorentzian.getArea = function getArea(fwhm, options = {}) {\n  let { height = 1 } = options;\n\n  return (height * Math.PI * fwhm) / 2;\n};\n\n/**\n * Calculate the number of times FWHM allows to reach a specific area coverage\n * @param {number} [area=0.9999]\n * @returns {number}\n */\nLorentzian.getFactor = function getFactor(area = 0.9999) {\n  return 2 * Math.tan(Math.PI * (area - 0.5));\n};\n","import {\n  GAUSSIAN_EXP_FACTOR,\n  ROOT_2LN2_MINUS_ONE,\n  ROOT_PI_OVER_LN2,\n} from '../util/constants';\n\nimport { Gaussian } from './Gaussian';\nimport { Lorentzian } from './Lorentzian';\n\nexport class PseudoVoigt {\n  /**\n   * @param {object} [options={}]\n   * @param {number} [options.height=x] Define the height of the peak, by default area=1 (normalized)\n   * @param {number} [options.fwhm=500] - Full Width at Half Maximum in the number of points in FWHM.\n   * @param {number} [options.mu=0.5] - ratio of gaussian contribution.\n   */\n\n  constructor(options = {}) {\n    this.mu = options.mu === undefined ? 0.5 : options.mu;\n    this.fwhm = options.fwhm === undefined ? 500 : options.fwhm;\n    this.height =\n      options.height === undefined\n        ? 1 /\n          ((this.mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * this.fwhm +\n            ((1 - this.mu) * this.fwhm * Math.PI) / 2)\n        : options.height;\n  }\n\n  /**\n   * Calculate a linear combination of gaussian and lorentzian function width an same full width at half maximum\n   * @param { object } [options = {}]\n   * @param { number } [options.factor = 2 * Math.tan(Math.PI * (0.9999 - 0.5))] - Number of time to take fwhm in the calculation of the length.Default covers 99.99 % of area.\n   * @param { number } [options.length = fwhm * factor + 1] - total number of points to calculate\n   * @return { object } - { fwhm, data<Float64Array>} - An with the number of points at half maximum and the array of y values covering the 99.99 % of the area.\n   */\n\n  getData(options = {}) {\n    let { length, factor = this.getFactor() } = options;\n    if (!length) {\n      length = Math.ceil(this.fwhm * factor);\n      if (length % 2 === 0) length++;\n    }\n\n    const center = (length - 1) / 2;\n\n    let data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n      data[i] = this.fct(i - center) * this.height;\n      data[length - 1 - i] = data[i];\n    }\n\n    return data;\n  }\n\n  /**\n   * Return a parameterized function of a linear combination of Gaussian and Lorentzian shapes where the full width at half maximum are the same for both kind of shapes (see README for equation).\n   * @param {number} [x] x value to calculate.\n   * @returns {number} - the y value of a pseudo voigt with the current parameters.\n   */\n\n  fct(x) {\n    return PseudoVoigt.fct(x, this.fwhm, this.mu);\n  }\n\n  /**\n   * Calculate the number of times FWHM allows to reach a specific area coverage\n   * @param {number} [area=0.9999] - required area to be coverage\n   * @param {number} [mu=this.mu] - ratio of gaussian contribution.\n   * @returns {number}\n   */\n  getFactor(area = 0.9999, mu = this.mu) {\n    return PseudoVoigt.getFactor(area, mu);\n  }\n\n  /**\n   * Calculate the area of the shape.\n   * @returns {number} - returns the area.\n   */\n  getArea() {\n    return PseudoVoigt.getArea(this.fwhm, { height: this.height, mu: this.mu });\n  }\n\n  /**\n   * Compute the value of Full Width at Half Maximum (FMHM) from width between the inflection points.\n   * @param {number} width - width between the inflection points\n   * @param {number} [mu = 0.5] - ratio of gaussian contribution.\n   * @returns {number} Full Width at Half Maximum (FMHM).\n   */\n  widthToFWHM(width, mu) {\n    return PseudoVoigt.widthToFWHM(width, mu);\n  }\n  /**\n   * Compute the value of width between the inflection points from Full Width at Half Maximum (FWHM).\n   * @param {number} fwhm - Full Width at Half Maximum.\n   * @param {number} [mu] - ratio of gaussian contribution.\n   * @returns {number} width between the inflection points.\n   */\n  fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n    return PseudoVoigt.fwhmToWidth(fwhm, mu);\n  }\n\n  /**\n   * set a new full width at half maximum\n   * @param {number} fwhm - full width at half maximum\n   */\n  setFWHM(fwhm) {\n    this.fwhm = fwhm;\n  }\n\n  /**\n   * set a new height\n   * @param {number} height - The maximal intensity of the shape.\n   */\n  setHeight(height) {\n    this.height = height;\n  }\n\n  /**\n   * set a new mu\n   * @param {number} mu - ratio of gaussian contribution.\n   */\n  setMu(mu) {\n    this.mu = mu;\n  }\n}\n\n/**\n * Return a parameterized function of a gaussian shape (see README for equation).\n * @param {number} x - x value to calculate.\n * @param {number} fwhm - full width half maximum\n * @param {number} [mu=0.5] - ratio of gaussian contribution.\n * @returns {number} - the y value of gaussian with the current parameters.\n */\nPseudoVoigt.fct = function fct(x, fwhm, mu = 0.5) {\n  return (1 - mu) * Lorentzian.fct(x, fwhm) + mu * Gaussian.fct(x, fwhm);\n};\n\n/**\n * Compute the value of Full Width at Half Maximum (FMHM) from width between the inflection points.\n * @param {number} width - width between the inflection points\n * @param {number} [mu = 0.5] - ratio of gaussian contribution.\n * @returns {number} Full Width at Half Maximum (FMHM).\n */\nPseudoVoigt.widthToFWHM = function widthToFWHM(width, mu = 0.5) {\n  return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\n/**\n * Compute the value of width between the inflection points from Full Width at Half Maximum (FWHM).\n * @param {number} fwhm - Full Width at Half Maximum.\n * @param {number} [mu = 0.5] - ratio of gaussian contribution.\n * @returns {number} width between the inflection points.\n */\nPseudoVoigt.fwhmToWidth = function fwhmToWidth(fwhm, mu = 0.5) {\n  return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\n\n/**\n * Calculate the area of a specific shape.\n * @param {number} fwhm - Full width at half maximum.\n * @param {*} [options = {}] - options.\n * @param {number} [options.height = 1] - Maximum y value of the shape.\n * @param {number} [options.mu = 0.5] - ratio of gaussian contribution.\n * @returns {number} - returns the area of the specific shape and parameters.\n */\nPseudoVoigt.getArea = function getArea(fwhm, options = {}) {\n  let { height = 1, mu = 0.5 } = options;\n  return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\n\n/**\n * Calculate the number of times FWHM allows to reach a specific area coverage\n * @param {number} [area=0.9999] - required area to be coverage\n * @param {number} [mu=this.mu] - ratio of gaussian contribution.\n * @returns {number}\n */\nPseudoVoigt.getFactor = function getFactor(area = 0.9999, mu = 0.5) {\n  return mu < 1 ? Lorentzian.getFactor(area) : Gaussian.getFactor(area);\n};\n","import { PseudoVoigt } from 'ml-peak-shape-generator';\n\n/**\n * This function calculates the spectrum as a sum of linear combination of gaussian and lorentzian functions. The pseudo voigt\n * parameters are divided in 4 batches. 1st: centers; 2nd: heights; 3th: widths; 4th: mu's ;\n * @param t Ordinate value\n * @param p Lorentzian parameters\n * @returns {*}\n */\n\nexport function sumOfGaussianLorentzians(p) {\n  return function (t) {\n    let nL = p.length / 4;\n    let result = 0;\n    for (let i = 0; i < nL; i++) {\n      result +=\n        p[i + nL] * PseudoVoigt.fct(t - p[i], p[i + nL * 2], p[i + nL * 3]);\n    }\n    return result;\n  };\n}\n","import { Gaussian } from 'ml-peak-shape-generator';\n/**\n * This function calculates the spectrum as a sum of gaussian functions. The Gaussian\n * parameters are divided in 3 batches. 1st: centers; 2nd: height; 3th: widths;\n * @param t Ordinate values\n * @param p Gaussian parameters\n * @returns {*}\n */\n\nexport function sumOfGaussians(p) {\n  return function (t) {\n    let nL = p.length / 3;\n    let result = 0;\n    for (let i = 0; i < nL; i++) {\n      result += p[i + nL] * Gaussian.fct(t - p[i], p[i + nL * 2]);\n    }\n    return result;\n  };\n}\n","import { Lorentzian } from 'ml-peak-shape-generator';\n\n/**\n * This function calculates the spectrum as a sum of lorentzian functions. The Lorentzian\n * parameters are divided in 3 batches. 1st: centers; 2nd: heights; 3th: widths;\n * @param t Ordinate values\n * @param p Lorentzian parameters\n * @returns {*}\n */\n\nexport function sumOfLorentzians(p) {\n  return function (t) {\n    let nL = p.length / 3;\n    let result = 0;\n    for (let i = 0; i < nL; i++) {\n      result += p[i + nL] * Lorentzian.fct(t - p[i], p[i + nL * 2]);\n    }\n    return result;\n  };\n}\n","import assignDeep from 'assign-deep';\nimport getMaxValue from 'ml-array-max';\n\nimport { sumOfGaussianLorentzians } from './shapes/sumOfGaussianLorentzians';\nimport { sumOfGaussians } from './shapes/sumOfGaussians';\nimport { sumOfLorentzians } from './shapes/sumOfLorentzians';\n\nexport function checkInput(data, peaks, options) {\n  let {\n    shape = { kind: 'gaussian' },\n    optimization = {\n      kind: 'lm',\n    },\n  } = options;\n\n  if (typeof shape.kind !== 'string') {\n    throw new Error('kind should be a string');\n  }\n\n  let kind = shape.kind.toLowerCase().replace(/[^a-z]/g, '');\n\n  let paramsFunc;\n  let defaultParameters;\n  switch (kind) {\n    case 'gaussian':\n      paramsFunc = sumOfGaussians;\n      defaultParameters = {\n        x: {\n          init: (peak) => peak.x,\n          max: (peak) => peak.x + peak.width * 2,\n          min: (peak) => peak.x - peak.width * 2,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n        y: {\n          init: (peak) => peak.y,\n          max: () => 1.5,\n          min: () => 0,\n          gradientDifference: () => 1e-3,\n        },\n        width: {\n          init: (peak) => peak.width,\n          max: (peak) => peak.width * 4,\n          min: (peak) => peak.width * 0.25,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n      };\n      break;\n    case 'lorentzian':\n      paramsFunc = sumOfLorentzians;\n      defaultParameters = {\n        x: {\n          init: (peak) => peak.x,\n          max: (peak) => peak.x + peak.width * 2,\n          min: (peak) => peak.x - peak.width * 2,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n        y: {\n          init: (peak) => peak.y,\n          max: () => 1.5,\n          min: () => 0,\n          gradientDifference: () => 1e-3,\n        },\n        width: {\n          init: (peak) => peak.width,\n          max: (peak) => peak.width * 4,\n          min: (peak) => peak.width * 0.25,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n      };\n      break;\n    case 'pseudovoigt':\n      paramsFunc = sumOfGaussianLorentzians;\n      defaultParameters = {\n        x: {\n          init: (peak) => peak.x,\n          max: (peak) => peak.x + peak.width * 2,\n          min: (peak) => peak.x - peak.width * 2,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n        y: {\n          init: (peak) => peak.y,\n          max: () => 1.5,\n          min: () => 0,\n          gradientDifference: () => 1e-3,\n        },\n        width: {\n          init: (peak) => peak.width,\n          max: (peak) => peak.width * 4,\n          min: (peak) => peak.width * 0.25,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n        mu: {\n          init: (peak) => (peak.mu !== undefined ? peak.mu : 0.5),\n          min: () => 0,\n          max: () => 1,\n          gradientDifference: () => 0.01,\n        },\n      };\n      break;\n    default:\n      throw new Error('kind of shape is not supported');\n  }\n\n  let x = data.x;\n  let maxY = getMaxValue(data.y);\n  let y = new Array(x.length);\n  for (let i = 0; i < x.length; i++) {\n    y[i] = data.y[i] / maxY;\n  }\n\n  for (let i = 0; i < peaks.length; i++) {\n    peaks[i].y /= maxY;\n  }\n\n  let parameters = assignDeep({}, optimization.parameters, defaultParameters);\n\n  for (let key in parameters) {\n    for (let par in parameters[key]) {\n      if (!Array.isArray(parameters[key][par])) {\n        parameters[key][par] = [parameters[key][par]];\n      }\n      if (\n        parameters[key][par].length !== 1 &&\n        parameters[key][par].length !== peaks.length\n      ) {\n        throw new Error(`The length of ${key}-${par} is not correct`);\n      }\n      for (let index = 0; index < parameters[key][par].length; index++) {\n        if (typeof parameters[key][par][index] === 'number') {\n          let value = parameters[key][par][index];\n          parameters[key][par][index] = () => value;\n        }\n      }\n    }\n  }\n\n  optimization.parameters = parameters;\n\n  return {\n    y,\n    x,\n    maxY,\n    peaks,\n    paramsFunc,\n    optimization,\n  };\n}\n","import isArray from 'is-any-array';\n\nexport default function checkOptions(data, parameterizedFunction, options) {\n  let {\n    timeout,\n    minValues,\n    maxValues,\n    initialValues,\n    weights = 1,\n    damping = 1e-2,\n    dampingStepUp = 11,\n    dampingStepDown = 9,\n    maxIterations = 100,\n    errorTolerance = 1e-7,\n    centralDifference = false,\n    gradientDifference = 10e-2,\n    improvementThreshold = 1e-3,\n  } = options;\n\n  if (damping <= 0) {\n    throw new Error('The damping option must be a positive number');\n  } else if (!data.x || !data.y) {\n    throw new Error('The data parameter must have x and y elements');\n  } else if (\n    !isArray(data.x) ||\n    data.x.length < 2 ||\n    !isArray(data.y) ||\n    data.y.length < 2\n  ) {\n    throw new Error(\n      'The data parameter elements must be an array with more than 2 points',\n    );\n  } else if (data.x.length !== data.y.length) {\n    throw new Error('The data parameter elements must have the same size');\n  }\n\n  let parameters =\n    initialValues || new Array(parameterizedFunction.length).fill(1);\n\n  let nbPoints = data.y.length;\n  let parLen = parameters.length;\n  maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n  minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n\n  if (maxValues.length !== minValues.length) {\n    throw new Error('minValues and maxValues must be the same size');\n  }\n\n  if (!isArray(parameters)) {\n    throw new Error('initialValues must be an array');\n  }\n\n  if (typeof gradientDifference === 'number') {\n    gradientDifference = new Array(parameters.length).fill(gradientDifference);\n  } else if (isArray(gradientDifference)) {\n    if (gradientDifference.length !== parLen) {\n      gradientDifference = new Array(parLen).fill(gradientDifference[0]);\n    }\n  } else {\n    throw new Error(\n      'gradientDifference should be a number or array with length equal to the number of parameters',\n    );\n  }\n\n  let filler;\n  if (typeof weights === 'number') {\n    let value = 1 / weights ** 2;\n    filler = () => value;\n  } else if (isArray(weights)) {\n    if (weights.length < data.x.length) {\n      let value = 1 / weights[0] ** 2;\n      filler = () => value;\n    } else {\n      filler = (i) => 1 / weights[i] ** 2;\n    }\n  } else {\n    throw new Error(\n      'weights should be a number or array with length equal to the number of data points',\n    );\n  }\n\n  let checkTimeout;\n  if (timeout !== undefined) {\n    if (typeof timeout !== 'number') {\n      throw new Error('timeout should be a number');\n    }\n    let endTime = Date.now() + timeout * 1000;\n    checkTimeout = () => Date.now() > endTime;\n  } else {\n    checkTimeout = () => false;\n  }\n\n  let weightSquare = new Array(data.x.length);\n  for (let i = 0; i < nbPoints; i++) {\n    weightSquare[i] = filler(i);\n  }\n\n  return {\n    checkTimeout,\n    minValues,\n    maxValues,\n    parameters,\n    weightSquare,\n    damping,\n    dampingStepUp,\n    dampingStepDown,\n    maxIterations,\n    errorTolerance,\n    centralDifference,\n    gradientDifference,\n    improvementThreshold,\n  };\n}\n","/**\n * the sum of the weighted squares of the errors (or weighted residuals) between the data.y\n * and the curve-fit function.\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} parameters - Array of current parameter values\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {Array} weightSquare - Square of weights\n * @return {number}\n */\nexport default function errorCalculation(\n  data,\n  parameters,\n  parameterizedFunction,\n  weightSquare,\n) {\n  let error = 0;\n  const func = parameterizedFunction(parameters);\n  for (let i = 0; i < data.x.length; i++) {\n    error += Math.pow(data.y[i] - func(data.x[i]), 2) / weightSquare[i];\n  }\n\n  return error;\n}\n","import isArray from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport default min;\n","import isArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport default rescale;\n","const indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\nexport function inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nexport function inspectMatrixWithOptions(matrix, options = {}) {\n  const { maxRows = 15, maxColumns = 10, maxNumSize = 8 } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize) {\n  const numStr = String(num);\n  if (numStr.length <= maxNumSize) {\n    return numStr.padEnd(maxNumSize, ' ');\n  }\n  const precise = num.toPrecision(maxNumSize - 2);\n  if (precise.length <= maxNumSize) {\n    return precise;\n  }\n  const exponential = num.toExponential(maxNumSize - 2);\n  const eIndex = exponential.indexOf('e');\n  const e = exponential.slice(eIndex);\n  return exponential.slice(0, maxNumSize - e.length) + e;\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), value));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\n      }\n    }\n    return this;\n  };\n}\n","/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nexport function checkIndices(matrix, rowIndices, columnIndices) {\n  return {\n    row: checkRowIndices(matrix, rowIndices),\n    column: checkColumnIndices(matrix, columnIndices),\n  };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n  if (typeof rowIndices !== 'object') {\n    throw new TypeError('unexpected type for row indices');\n  }\n\n  let rowOut = rowIndices.some((r) => {\n    return r < 0 || r >= matrix.rows;\n  });\n\n  if (rowOut) {\n    throw new RangeError('row indices are out of range');\n  }\n\n  if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n  return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n  if (typeof columnIndices !== 'object') {\n    throw new TypeError('unexpected type for column indices');\n  }\n\n  let columnOut = columnIndices.some((c) => {\n    return c < 0 || c >= matrix.columns;\n  });\n\n  if (columnOut) {\n    throw new RangeError('column indices are out of range');\n  }\n  if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n  return columnIndices;\n}\n\nexport function checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nexport function newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nexport function checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nexport function varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nexport function varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nexport function centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nexport function centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nexport function centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nexport function getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nexport function getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nexport function getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n","import rescale from 'ml-array-rescale';\n\nimport { inspectMatrix, inspectMatrixWithOptions } from './inspect';\nimport { installMathOperations } from './mathOperations';\nimport {\n  sumByRow,\n  sumByColumn,\n  sumAll,\n  productByRow,\n  productByColumn,\n  productAll,\n  varianceByRow,\n  varianceByColumn,\n  varianceAll,\n  centerByRow,\n  centerByColumn,\n  centerAll,\n  scaleByRow,\n  scaleByColumn,\n  scaleAll,\n  getScaleByRow,\n  getScaleByColumn,\n  getScaleAll,\n} from './stat';\nimport {\n  checkRowVector,\n  checkRowIndex,\n  checkColumnIndex,\n  checkColumnVector,\n  checkRange,\n  checkIndices,\n  checkNonEmpty,\n} from './util';\n\nexport class AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, 0);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n        }\n      }\n    }\n    return v;\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, 0);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n        }\n      }\n    }\n    return v;\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    let result = 0;\n    if (type === 'max') {\n      return this.max();\n    } else if (type === 'frobenius') {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j < this.columns; j++) {\n          result = result + this.get(i, j) * this.get(i, j);\n        }\n      }\n      return Math.sqrt(result);\n    } else {\n      throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      resultat = resultat.setSubMatrix(c11, 0, 0);\n      resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n      resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n      resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n      return resultat.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min: min,\n          max: max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    let indices = checkIndices(this, rowIndices, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < indices.row.length; i++) {\n      let rowIndex = indices.row[i];\n      for (let j = 0; j < indices.column.length; j++) {\n        let columnIndex = indices.column[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let row = 0; row < this.rows; row++) {\n      for (let column = 0; column < this.columns; column++) {\n        newMatrix.set(row, column, this.get(row, column));\n      }\n    }\n    return newMatrix;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[\n    Symbol.for('nodejs.util.inspect.custom')\n  ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      // eslint-disable-next-line no-constructor-return\n      return nRows.clone();\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      // Create an empty matrix\n      this.data = [];\n      if (Number.isInteger(nColumns) && nColumns >= 0) {\n        for (let i = 0; i < nRows; i++) {\n          this.data.push(new Float64Array(nColumns));\n        }\n      } else {\n        throw new TypeError('nColumns must be a positive integer');\n      }\n    } else if (Array.isArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { AbstractMatrix } from '../matrix';\n\nexport default class 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","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} evaluatedData - Array of previous evaluated function values\n * @param {Array<number>} params - Array of previous parameter values\n * @param {number|array} gradientDifference - The step size to approximate the jacobian matrix\n * @param {boolean} centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Matrix}\n */\n\nexport default function gradientFunction(\n  data,\n  evaluatedData,\n  params,\n  gradientDifference,\n  paramFunction,\n  centralDifference,\n) {\n  const nbParams = params.length;\n  const nbPoints = data.x.length;\n  let ans = Matrix.zeros(nbParams, nbPoints);\n\n  let rowIndex = 0;\n  for (let param = 0; param < nbParams; param++) {\n    if (gradientDifference[param] === 0) continue;\n    let delta = gradientDifference[param];\n    let auxParams = params.slice();\n    auxParams[param] += delta;\n    let funcParam = paramFunction(auxParams);\n    if (!centralDifference) {\n      for (let point = 0; point < nbPoints; point++) {\n        ans.set(\n          rowIndex,\n          point,\n          (evaluatedData[point] - funcParam(data.x[point])) / delta,\n        );\n      }\n    } else {\n      auxParams = params.slice();\n      auxParams[param] -= delta;\n      delta *= 2;\n      let funcParam2 = paramFunction(auxParams);\n      for (let point = 0; point < nbPoints; point++) {\n        ans.set(\n          rowIndex,\n          point,\n          (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta,\n        );\n      }\n    }\n    rowIndex++;\n  }\n\n  return ans;\n}\n","import { inverse, Matrix } from 'ml-matrix';\n\nimport gradientFunction from './gradientFunction';\n\n/**\n * Matrix function over the samples\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} evaluatedData - Array of previous evaluated function values\n * @return {Matrix}\n */\nfunction matrixFunction(data, evaluatedData) {\n  const m = data.x.length;\n\n  let ans = new Matrix(m, 1);\n\n  for (let point = 0; point < m; point++) {\n    ans.set(point, 0, data.y[point] - evaluatedData[point]);\n  }\n  return ans;\n}\n\n/**\n * Iteration for Levenberg-Marquardt\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} params - Array of previous parameter values\n * @param {number} damping - Levenberg-Marquardt parameter\n * @param {number|array} gradientDifference - The step size to approximate the jacobian matrix\n * @param {boolean} centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Array<number>}\n */\nexport default function step(\n  data,\n  params,\n  damping,\n  gradientDifference,\n  parameterizedFunction,\n  centralDifference,\n  weights,\n) {\n  let value = damping;\n  let identity = Matrix.eye(params.length, params.length, value);\n\n  const func = parameterizedFunction(params);\n\n  let evaluatedData = new Float64Array(data.x.length);\n  for (let i = 0; i < data.x.length; i++) {\n    evaluatedData[i] = func(data.x[i]);\n  }\n\n  let gradientFunc = gradientFunction(\n    data,\n    evaluatedData,\n    params,\n    gradientDifference,\n    parameterizedFunction,\n    centralDifference,\n  );\n  let residualError = matrixFunction(data, evaluatedData);\n\n  let inverseMatrix = inverse(\n    identity.add(\n      gradientFunc.mmul(\n        gradientFunc.transpose().scale('row', { scale: weights }),\n      ),\n    ),\n  );\n\n  let jacobianWeigthResidualError = gradientFunc.mmul(\n    residualError.scale('row', { scale: weights }),\n  );\n\n  let perturbations = inverseMatrix.mmul(jacobianWeigthResidualError);\n\n  return {\n    perturbations,\n    jacobianWeigthResidualError,\n  };\n}\n","import checkOptions from './checkOptions';\nimport errorCalculation from './errorCalculation';\nimport step from './step';\n\n/**\n * Curve fitting algorithm\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {object} [options] - Options object\n * @param {number|array} [options.weights = 1] - weighting vector, if the length does not match with the number of data points, the vector is reconstructed with first value.\n * @param {number} [options.damping = 1e-2] - Levenberg-Marquardt parameter, small values of the damping parameter λ result in a Gauss-Newton update and large\nvalues of λ result in a gradient descent update\n * @param {number} [options.dampingStepDown = 9] - factor to reduce the damping (Levenberg-Marquardt parameter) when there is not an improvement when updating parameters.\n * @param {number} [options.dampingStepUp = 11] - factor to increase the damping (Levenberg-Marquardt parameter) when there is an improvement when updating parameters.\n * @param {number} [options.improvementThreshold = 1e-3] - the threshold to define an improvement through an update of parameters\n * @param {number|array} [options.gradientDifference = 10e-2] - The step size to approximate the jacobian matrix\n * @param {boolean} [options.centralDifference = false] - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {Array<number>} [options.minValues] - Minimum allowed values for parameters\n * @param {Array<number>} [options.maxValues] - Maximum allowed values for parameters\n * @param {Array<number>} [options.initialValues] - Array of initial parameter values\n * @param {number} [options.maxIterations = 100] - Maximum of allowed iterations\n * @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point.\n * @param {number} [options.timeout] - maximum time running before throw in seconds.\n * @return {{parameterValues: Array<number>, parameterError: number, iterations: number}}\n */\nexport default function levenbergMarquardt(\n  data,\n  parameterizedFunction,\n  options = {},\n) {\n  let {\n    checkTimeout,\n    minValues,\n    maxValues,\n    parameters,\n    weightSquare,\n    damping,\n    dampingStepUp,\n    dampingStepDown,\n    maxIterations,\n    errorTolerance,\n    centralDifference,\n    gradientDifference,\n    improvementThreshold,\n  } = checkOptions(data, parameterizedFunction, options);\n\n  let error = errorCalculation(\n    data,\n    parameters,\n    parameterizedFunction,\n    weightSquare,\n  );\n\n  let converged = error <= errorTolerance;\n\n  let iteration = 0;\n  for (; iteration < maxIterations && !converged; iteration++) {\n    let previousError = error;\n\n    let { perturbations, jacobianWeigthResidualError } = step(\n      data,\n      parameters,\n      damping,\n      gradientDifference,\n      parameterizedFunction,\n      centralDifference,\n      weightSquare,\n    );\n\n    for (let k = 0; k < parameters.length; k++) {\n      parameters[k] = Math.min(\n        Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)),\n        maxValues[k],\n      );\n    }\n\n    error = errorCalculation(\n      data,\n      parameters,\n      parameterizedFunction,\n      weightSquare,\n    );\n\n    if (isNaN(error)) break;\n\n    let improvementMetric =\n      (previousError - error) /\n      perturbations\n        .transpose()\n        .mmul(perturbations.mulS(damping).add(jacobianWeigthResidualError))\n        .get(0, 0);\n\n    if (improvementMetric > improvementThreshold) {\n      damping = Math.max(damping / dampingStepDown, 1e-7);\n    } else {\n      error = previousError;\n      damping = Math.min(damping * dampingStepUp, 1e7);\n    }\n\n    if (checkTimeout()) {\n      throw new Error(\n        `The execution time is over to ${options.timeout} seconds`,\n      );\n    }\n\n    converged = error <= errorTolerance;\n  }\n\n  return {\n    parameterValues: parameters,\n    parameterError: error,\n    iterations: iteration,\n  };\n}\n","import LM from 'ml-levenberg-marquardt';\n\nconst LEVENBERG_MARQUARDT = 1;\n\nexport function selectMethod(optimizationOptions = {}) {\n  let { kind, options } = optimizationOptions;\n  kind = getKind(kind);\n  switch (kind) {\n    case LEVENBERG_MARQUARDT:\n      return {\n        algorithm: LM,\n        optimizationOptions: checkOptions(kind, options),\n      };\n    default:\n      throw new Error(`Unknown kind algorithm`);\n  }\n}\n\nfunction checkOptions(kind, options = {}) {\n  // eslint-disable-next-line default-case\n  switch (kind) {\n    case LEVENBERG_MARQUARDT:\n      return Object.assign({}, lmOptions, options);\n  }\n}\n\nfunction getKind(kind) {\n  if (typeof kind !== 'string') return kind;\n  switch (kind.toLowerCase().replace(/[^a-z]/g, '')) {\n    case 'lm':\n    case 'levenbergmarquardt':\n      return LEVENBERG_MARQUARDT;\n    default:\n      throw new Error(`Unknown kind algorithm`);\n  }\n}\n\nconst lmOptions = {\n  damping: 1.5,\n  maxIterations: 100,\n  errorTolerance: 1e-8,\n};\n","import { checkInput } from './checkInput';\nimport { selectMethod } from './selectMethod';\n\n// const STATE_INIT = 0;\n// const STATE_MIN = 1;\n// const STATE_MAX = 2;\n// const STATE_GRADIENT_DIFFERENCE = 3;\n\n// const X = 0;\n// const Y = 1;\n// const WIDTH = 2;\n// const MU = 3;\n\n// const keys = ['x', 'y', 'width', 'mu'];\n/**\n * Fits a set of points to the sum of a set of bell functions.\n * @param {object} data - An object containing the x and y data to be fitted.\n * @param {array} peaks - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param {object} [options = {}]\n * @param {object} [options.shape={}] - it's specify the kind of shape used to fitting.\n * @param {string} [options.shape.kind = 'gaussian'] - kind of shape; lorentzian, gaussian and pseudovoigt are supported.\n * @param {object} [options.optimization = {}] - it's specify the kind and options of the algorithm use to optimize parameters.\n * @param {object} [options.optimization.kind = 'lm'] - kind of algorithm. By default it's levenberg-marquardt.\n * @param {object} [options.optimization.parameters] - options of each parameter to be optimized e.g. For a gaussian shape\n *  it could have x, y and with properties, each of which could contain init, min, max and gradientDifference, those options will define the guess,\n *  the min and max value of the parameter (search space) and the step size to approximate the jacobian matrix respectively. Those options could be a number,\n *  array of numbers, callback, or array of callbacks. Each kind of shape has default parameters so it could be undefined.\n * @param {object} [options.optimization.parameters.x] - options for x parameter.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.init] - definition of the starting point of the parameter (the guess),\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the guess of the first peak and so on.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.min] - definition of the lower limit of the parameter,\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the min of the first peak and so on.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.max] - definition of the upper limit of the parameter,\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the max of the first peak and so on.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.gradientDifference] - definition of  the step size to approximate the jacobian matrix of the parameter,\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the gradientDifference of the first peak and so on.\n * @param {object} [options.optimization.options = {}] - options for the specific kind of algorithm.\n * @param {number} [options.optimization.options.timeout] - maximum time running before break in seconds.\n * @param {number} [options.optimization.options.damping=1.5]\n * @param {number} [options.optimization.options.maxIterations=100]\n * @param {number} [options.optimization.options.errorTolerance=1e-8]\n * @returns {object} - A object with fitting error and the list of optimized parameters { parameters: [ {x, y, width} ], error } if the kind of shape is pseudoVoigt mu parameter is optimized.\n */\nexport function optimize(data, peakList, options = {}) {\n  const { y, x, maxY, peaks, paramsFunc, optimization } = checkInput(\n    data,\n    peakList,\n    options,\n  );\n\n  let parameters = optimization.parameters;\n\n  let nbShapes = peaks.length;\n  let parameterKey = Object.keys(parameters);\n  let nbParams = nbShapes * parameterKey.length;\n  let pMin = new Float64Array(nbParams);\n  let pMax = new Float64Array(nbParams);\n  let pInit = new Float64Array(nbParams);\n  let gradientDifference = new Float64Array(nbParams);\n\n  for (let i = 0; i < nbShapes; i++) {\n    let peak = peaks[i];\n    for (let k = 0; k < parameterKey.length; k++) {\n      let key = parameterKey[k];\n      let init = parameters[key].init;\n      let min = parameters[key].min;\n      let max = parameters[key].max;\n      let gradientDifferenceValue = parameters[key].gradientDifference;\n      pInit[i + k * nbShapes] = init[i % init.length](peak);\n      pMin[i + k * nbShapes] = min[i % min.length](peak);\n      pMax[i + k * nbShapes] = max[i % max.length](peak);\n      gradientDifference[i + k * nbShapes] = gradientDifferenceValue[\n        i % gradientDifferenceValue.length\n      ](peak);\n    }\n  }\n\n  let { algorithm, optimizationOptions } = selectMethod(optimization);\n\n  optimizationOptions.minValues = pMin;\n  optimizationOptions.maxValues = pMax;\n  optimizationOptions.initialValues = pInit;\n  optimizationOptions.gradientDifference = gradientDifference;\n\n  let pFit = algorithm({ x, y }, paramsFunc, optimizationOptions);\n\n  let { parameterError: error, iterations } = pFit;\n  let result = { error, iterations, peaks };\n  for (let i = 0; i < nbShapes; i++) {\n    pFit.parameterValues[i + nbShapes] *= maxY;\n    for (let k = 0; k < parameterKey.length; k++) {\n      // we modify the optimized parameters\n      peaks[i][parameterKey[k]] = pFit.parameterValues[i + k * nbShapes];\n    }\n  }\n\n  return result;\n}\n"],"names":["toString","Object","prototype","isEnumerable","propertyIsEnumerable","getSymbols","getOwnPropertySymbols","target","args","isObject","TypeError","length","Symbol","arg","names","key","call","val","Array","isArray","isValidKey","assign","module","i","isPrimitive","keys","assignSymbols","isAnyArray","object","endsWith","max","input","options","arguments","undefined","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Number","isInteger","Error","maxValue","GAUSSIAN_EXP_FACTOR","Math","LN2","ROOT_PI_OVER_LN2","sqrt","PI","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","erfinv","x","a","ln1MinusXSqrd","log","lnEtcBy2Plus2","firstSqrt","secondSqrt","Gaussian","constructor","fwhm","sd","widthToFWHM","height","getData","factor","getFactor","min","ceil","pow","center","data","Float64Array","fct","area","getArea","width","fwhmToWidth","setFWHM","setHeight","exp","Lorentzian","squareFWHM","tan","PseudoVoigt","mu","setMu","sumOfGaussianLorentzians","p","t","nL","result","sumOfGaussians","sumOfLorentzians","checkInput","peaks","shape","kind","optimization","toLowerCase","replace","paramsFunc","defaultParameters","init","peak","gradientDifference","y","maxY","getMaxValue","parameters","assignDeep","par","index","value","checkOptions","parameterizedFunction","timeout","minValues","maxValues","initialValues","weights","damping","dampingStepUp","dampingStepDown","maxIterations","errorTolerance","centralDifference","improvementThreshold","fill","nbPoints","parLen","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","filler","checkTimeout","endTime","Date","now","weightSquare","errorCalculation","error","func","minValue","rescale","output","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","matrix","maxRows","maxColumns","maxNumSize","name","inspectData","rows","columns","maxI","maxJ","line","j","push","formatNumber","get","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","e","slice","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","set","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","clz32","cos","cosh","expm1","floor","fround","log1p","log10","log2","round","sign","sin","sinh","tanh","trunc","arg0","powS","powM","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","rowOut","some","r","from","columnOut","c","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","array","checkNonEmpty","isEmpty","sumByRow","sum","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","varianceByColumn","varianceAll","size","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","rowVector","columnVector","zeros","ones","rand","random","randInt","interval","eye","diag","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","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","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","WrapperMatrix2D","LuDecomposition","lu","pivotVector","pivotSign","LUcolj","kmax","LU","isSingular","col","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","isNaN","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","gradientFunction","evaluatedData","params","paramFunction","nbParams","ans","param","delta","auxParams","funcParam","point","funcParam2","matrixFunction","step","gradientFunc","residualError","inverseMatrix","jacobianWeigthResidualError","perturbations","levenbergMarquardt","converged","iteration","previousError","improvementMetric","parameterValues","parameterError","iterations","LEVENBERG_MARQUARDT","selectMethod","optimizationOptions","getKind","algorithm","LM","lmOptions","optimize","peakList","nbShapes","parameterKey","pMin","pMax","pInit","gradientDifferenceValue","pFit"],"mappings":"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"}